feat(control-ui): drag sessions into split view with animated drop preview#101191
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed July 6, 2026, 7:18 PM ET / 23:18 UTC. Summary PR surface: Source +435, Tests +264, Docs +1. Total +700 across 72 files. Reproducibility: not applicable. as a bug reproduction; this is a feature PR tied to an open enhancement issue. Source inspection confirms current main has split buttons and pane selectors but not this drag/drop interaction. Review metrics: 1 noteworthy metric.
Stored data model Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Land this feature only after real browser proof is posted, the branch is refreshed to a clean merge state, and a maintainer accepts the full drag/drop split-view UX contract. Do we have a high-confidence way to reproduce the issue? Not applicable as a bug reproduction; this is a feature PR tied to an open enhancement issue. Source inspection confirms current main has split buttons and pane selectors but not this drag/drop interaction. Is this the best way to solve the issue? Yes for the implementation shape, but not merge-ready yet. The PR reuses the existing split-layout owner boundary and private session drag payload shape, while proof, merge state, and product signoff remain unresolved. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against bb44c2311d74. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source +435, Tests +264, Docs +1. Total +700 across 72 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (4 earlier review cycles)
|
140caa0 to
34789c2
Compare
160126f to
64bdd26
Compare
…eview (openclaw#101191) * feat(control-ui): drag sessions into split view with animated drop preview * fix(i18n): translate split drop labels and pending upstream strings
…eview (openclaw#101191) * feat(control-ui): drag sessions into split view with animated drop preview * fix(i18n): translate split drop labels and pending upstream strings
Fixes #101034
What Problem This Solves
Split view (#100754) manages panes through header buttons only: composing a workspace means opening a split, then reassigning each pane's session through its selector. There is no direct way to say "put this session THERE".
Why This Change Was Made
Adds Claude Desktop-style drag and drop with an animated drop preview:
ui/src/lib/sessions/drag.tsowns the payload MIME; the row's inner link opts out of native link-dragging, the dragged row dims, and the OS shows a copy cursor).insertPane(target, session, edge)for all four directions (ui/src/pages/chat/split-layout.ts, net-negative LOC);createSplitLayoutand the header buttons now build on it. An ephemeralcreateSinglePaneLayoutlets drops work straight from classic single-pane mode.ui/src/pages/chat/split-drop-zone.ts: 30% edge bands with nearest-edge tie-break, plus indicator geometry (edge = that half of the pane, center = whole pane).dragoveris rAF-throttled; a dragenter/dragleave depth counter handles light-DOM event bubbling.prefers-reduced-motion: no-preference.The two untranslated locale entries for the new "Split"/"Open here" strings are recorded as fallbacks in
.i18nmetadata; the scheduled locale refresh on main translates them on its next run.User Impact
Assemble multi-session workspaces in single gestures: drag a session from the sidebar, watch the preview glide to the exact half (new pane) or whole pane (open here) it will occupy, drop. Works from a plain single-pane chat too. Keyboard users keep the header-button flow; reduced-motion users get instant, animation-free previews.
Evidence
pnpm test ui/src/pages/chat/chat-page.test.ts ui/src/pages/chat/split-layout.test.ts ui/src/pages/chat/split-drop-zone.test.ts ui/src/pages/chat/chat-view.test.ts→4 files, 132 tests; plusui/src/e2e/chat-flow.e2e.test.ts→31 testson the implementation pass.pnpm ui:i18n:checkconsistent across 20 locales.startControlUiE2eServer):