feat(desktop): add adaptive workspace shell (#277)
2 months ago
Authored
Max Weinbach* style: format codex app server resolver test
* feat(desktop): add adaptive workspace layout
Protect the primary workspace with responsive rail sizing, overlay drawers, compact toolbars, and container-aware product surfaces. Preserve live sidebar and Canvas state across layout tiers and cover the new accessibility and resize contracts.
* fix(desktop): improve adaptive surface accessibility
* test(desktop): verify adaptive product surfaces
* fix(desktop): address adaptive shell review feedback
* refactor(desktop): import element width ref type
* fix(desktop): preserve compact research drafts
* fix(desktop): restore focus after rail toggles
* fix(desktop): retain canvas chrome after resize
* fix(desktop): retain context toggle with canvas
* fix: stabilize platform and shutdown tests
* fix(desktop): separate streaming render metrics
* fix(desktop): coordinate adaptive rail overlays
* test(desktop): exercise programmatic rail switching
* test(desktop): align programmatic focus expectations
* fix(desktop): address final adaptive shell feedback
* test(desktop): cover settings rail shortcut
* fix(desktop): keep overlay settings navigation opaque
* fix(desktop): use solid settings overlay surface
* fix(desktop): keep automatic canvas overlays exclusive
* fix(desktop): track canvas overlay ownership
* fix(desktop): preserve canvas overlay ownership
* fix(desktop): release dismissed canvas overlay ownership
* fix(desktop): restore focus when rails become inline
* fix(desktop): clear canvas overlay ownership on close
* fix(desktop): preserve dismissed canvas overlays
Parent7433ef6
97 files changed
- apps/desktop/electron/main.ts+2−0
- apps/desktop/electron/qualityGateMain.ts+4−0
- apps/desktop/electron/services/windowState.ts+5−4
- apps/desktop/quality-gates/assertions.ts+58−4
- apps/desktop/quality-gates/mentionGeometry.ts+3−2
- apps/desktop/quality-gates/runtime.ts+22−3
- apps/desktop/quality-gates/snapshots/canvas-markdown-dark-linux.png——
apps/desktop/quality-gates/snapshots/canvas-markdown-forced-colors-linux.png
—
—
apps/desktop/quality-gates/snapshots/canvas-markdown-light-linux.png——apps/desktop/quality-gates/snapshots/canvas-markdown-live-switch-dark-linux.png——apps/desktop/quality-gates/snapshots/canvas-spreadsheet-dark-linux.png——apps/desktop/quality-gates/snapshots/canvas-spreadsheet-forced-colors-linux.png——apps/desktop/quality-gates/snapshots/canvas-spreadsheet-light-linux.png——apps/desktop/quality-gates/snapshots/first-launch-dark-1024-linux.png——apps/desktop/quality-gates/snapshots/first-paint-dark-1024-linux.png——apps/desktop/quality-gates/snapshots/first-paint-light-1024-linux.png——apps/desktop/quality-gates/snapshots/first-paint-system-1024-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-1024-dark-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-1024-forced-colors-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-1024-light-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-1024-reduced-motion-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-1240-dark-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-1240-forced-colors-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-1240-light-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-1240-reduced-motion-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-640-dark-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-640-forced-colors-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-640-light-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-640-reduced-motion-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-800-dark-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-800-forced-colors-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-800-light-linux.png——apps/desktop/quality-gates/snapshots/shipping-chat-800-reduced-motion-linux.png——apps/desktop/quality-gates/specs/adaptive-surfaces.pw.ts+112−0apps/desktop/quality-gates/specs/assertions.pw.ts+71−0apps/desktop/quality-gates/specs/journeys.pw.ts+62−3apps/desktop/quality-gates/specs/performance.pw.ts+2−0apps/desktop/quality-gates/specs/visual.pw.ts+6−0apps/desktop/src/App.tsx+231−47apps/desktop/src/components/ui/dialog.tsx+1−0apps/desktop/src/components/ui/dropdown-menu.tsx+1−0apps/desktop/src/components/ui/popover.tsx+1−0apps/desktop/src/components/ui/select.tsx+1−0apps/desktop/src/lib/adaptiveLayout.ts+139−0apps/desktop/src/lib/desktopRailCommands.ts+14−0apps/desktop/src/lib/useAdaptiveLayout.ts+61−0apps/desktop/src/lib/useElementWidth.ts+25−0apps/desktop/src/styles.css+13−15apps/desktop/src/styles/platform/darwin.css+1−1apps/desktop/src/styles/platform/linux.css+1−1apps/desktop/src/styles/platform/win32.css+1−1apps/desktop/src/ui/Canvas.tsx+2−2apps/desktop/src/ui/CommandPalette.tsx+4−5apps/desktop/src/ui/ContextSidebar.tsx+10−2apps/desktop/src/ui/OverlayStack.tsx+11−0apps/desktop/src/ui/PptxPreview.tsx+34−11apps/desktop/src/ui/ResearchView.tsx+77−12apps/desktop/src/ui/UniverSpreadsheetCanvas.tsx+5−2apps/desktop/src/ui/file-explorer/WorkspaceFileExplorer.tsx+20−21apps/desktop/src/ui/layout/AdaptiveRailSurface.tsx+186−0apps/desktop/src/ui/layout/AppTopBar.tsx+78−13apps/desktop/src/ui/layout/ContextSidebarResizer.tsx+38−13apps/desktop/src/ui/layout/PlatformTopBarChrome.tsx+1−0apps/desktop/src/ui/layout/SidebarCollapseControl.tsx+3−1apps/desktop/src/ui/layout/SidebarResizer.tsx+26−11apps/desktop/src/ui/markdown/DesktopMarkdown.tsx+3−1apps/desktop/src/ui/research/ResearchDetailPane.tsx+3−30apps/desktop/src/ui/settings/SettingsPrimitives.tsx+1−1apps/desktop/src/ui/settings/SettingsShell.tsx+103−24apps/desktop/src/ui/settings/pages/ProvidersPage.tsx+3−3apps/desktop/src/ui/tasks/NewTaskLanding.tsx+2−2apps/desktop/src/ui/tasks/taskPresentation.ts+2−2apps/desktop/test/adaptive-layout.test.ts+129−0apps/desktop/test/adaptive-rail-surface.test.tsx+324−0apps/desktop/test/app-jsonrpc-disposal.test.tsx+7−18apps/desktop/test/app-notifications-window-modes.test.tsx+39−0apps/desktop/test/app-topbar.test.tsx+50−0apps/desktop/test/canvas-window-lifecycle.test.tsx+377−5apps/desktop/test/context-sidebar.test.tsx+38−0apps/desktop/test/main-process-startup.test.ts+12−0apps/desktop/test/platform-top-bar-chrome.test.tsx+2−1apps/desktop/test/presentation-preview-safety.test.tsx+90−0apps/desktop/test/providers-page.test.ts+2−0apps/desktop/test/research-detail-pane.test.tsx+8−0apps/desktop/test/research-view-layout.test.tsx+152−0apps/desktop/test/settings-primitives.test.tsx+11−1apps/desktop/test/settings-shell.test.ts+28−0apps/desktop/test/sidebar-resizer.test.tsx+29−0apps/desktop/test/task-presentation.test.ts+23−0apps/desktop/test/use-adaptive-layout.test.tsx+68−0apps/desktop/test/window-state.test.ts+24−0apps/desktop/test/workspace-file-explorer-ui.test.tsx+36−0docs/assets/desktop-product.png——src/platform/host.ts+5−0src/platform/index.ts+7−1src/providers/codexAppServerResolver.ts+10−6test/providers/codex-app-server-resolver.test.ts+53−44