feat: arc-style sidebar-driven split view, remove top session tabs#2092
feat: arc-style sidebar-driven split view, remove top session tabs#2092benjaminshafii wants to merge 1 commit into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Remove the ephemeral top tab bar and use the sidebar as the single source of truth for session navigation (Arc browser pattern). Changes: - Remove sessionTabs useState and the top tab bar UI from SessionPage - Move splitSessionId to persisted session-management-store (Zustand) so split state survives page reloads - Add split indicators (Columns2 icon + primary left border) on the sidebar SessionMenuItem for the split session - Add 'Open in split view' / 'Close split' to both SessionActions dropdown and right-click SessionContextMenu - Add drag-to-split: dragging a session from the sidebar onto the main content area reveals a drop zone to create a side-by-side view - Wire splitSessionId and split callbacks through SidebarContext - Sidebar onOpenSession now routes directly instead of going through the removed openSessionTab wrapper
660fe1b to
20a509d
Compare
There was a problem hiding this comment.
1 issue found across 5 files
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/app/src/react-app/domains/session/sidebar/app-sidebar.tsx">
<violation number="1" location="apps/app/src/react-app/domains/session/sidebar/app-sidebar.tsx:224">
P3: New split action labels are hardcoded instead of using i18n keys, causing untranslated UI text.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| {ctx.onSplitSession && !isActive ? ( | ||
| <DropdownMenuItem onClick={() => isSplit ? ctx.onCloseSplit?.(workspaceId) : ctx.onSplitSession?.(workspaceId, sessionId)}> | ||
| {isSplit ? <X className="size-4" /> : <Columns2 className="size-4" />} | ||
| {isSplit ? "Close split" : "Open in split view"} |
There was a problem hiding this comment.
P3: New split action labels are hardcoded instead of using i18n keys, causing untranslated UI text.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/app/src/react-app/domains/session/sidebar/app-sidebar.tsx, line 224:
<comment>New split action labels are hardcoded instead of using i18n keys, causing untranslated UI text.</comment>
<file context>
@@ -214,6 +218,12 @@ function SessionActions({ className, sessionId, workspaceId, isPinned, isArchive
+ {ctx.onSplitSession && !isActive ? (
+ <DropdownMenuItem onClick={() => isSplit ? ctx.onCloseSplit?.(workspaceId) : ctx.onSplitSession?.(workspaceId, sessionId)}>
+ {isSplit ? <X className="size-4" /> : <Columns2 className="size-4" />}
+ {isSplit ? "Close split" : "Open in split view"}
+ </DropdownMenuItem>
+ ) : null}
</file context>
Daytona ProofRecordingFull flow recording: https://8090-qesirtmxkg4fcyie.daytonaproxy01.net/recordings/arc-sidebar-split.mp4 Screenshots1. No top tabs - sidebar only navigation: 2. Split view active (two sessions side-by-side) + split indicator in sidebar: 3. Context menu showing 'Close split' for the split session: Verified flows
Test commandsSandbox: |
Summary
Remove the ephemeral top session tab bar and use the left sidebar as the single source of truth for session navigation, inspired by Arc browser's sidebar-first tab model.
What changed
useStatetab bar at the top of the main content area. No persistence, no drag reorder.useStatein SessionPage. Lost on reload.session-management-store(Zustand + localStorage) per workspace. Survives reloads.Columns2button inside each tabColumns2icon + primary left border accentFiles changed (4)
session-page.tsx: Remove tab bar UI,sessionTabsstate,openSessionTab/closeSessionTab. Use store for split. Add drag-to-split drop zone.session-management-store.ts: AddsplitByWorkspacestate,setSplitSessionaction,useSplitSessionIdselector.app-sidebar-provider.tsx: AddsplitSessionId,onSplitSession,onCloseSplittoSidebarContextValue.app-sidebar.tsx: AddSplitIndicator, split actions inSessionActions+SessionContextMenu, wire through context.Testing
tsc --noEmit: 0 new errors (pre-existing terminal-dock errors only)How to verify