# DOX — packages/client/src/components/shell

Files in this directory. One row per source file. See change: fold-oversized-agents-directories.

| File | Purpose |
|------|---------|
| `LandingPage.tsx` | Onboarding landing screen. Three-step gated flow: credentials → pin folder → spawn session; step states… → see `LandingPage.tsx.AGENTS.md` |
| `MobileActionMenu.tsx` | Kebab session-action menu for mobile. Rows: rename, archive, resume/fork, OpenSpec… Native-editor rows removed (change: remove-external-editor-integration). Swaps hide/unhide for archive. See change: archive-sessions-lazy-load. → see `MobileActionMenu.tsx.AGENTS.md` |
| `MobileOverlay.tsx` | Mobile sidebar overlay (`md:hidden`): fixed backdrop + left 72-width panel. Exports `HamburgerButton` (menu trigger) and `MobileOverlay`. |
| `MobileShell.tsx` | Two-panel mobile shell (list + detail) with CSS-transform slide transitions and `useSwipeBack` (finger-tracked transform). Depth 0=list, 1=detail, 2=preview reuses detail panel. Root fills its flex PARENT (`w-full flex-1 min-h-0`) — `App.tsx`'s mobile root owns `h-[100dvh] overflow-hidden` so in-flow banners take height from the bound, not on top of it. Exports `MobileShell`. See change: fix-long-session-ux-degradation. Root carries `data-testid="mobile-shell"` + `data-depth` (e2e depth assertion). See change: add-plugin-app-host. |
| `ResizableSidebar.tsx` | Drag-to-resize + collapse sidebar shell. Takes `SidebarState` (from `useSidebarState`). Clamp width 180–500px. Collapsed strip width 28px. Exports `ResizableSidebar`. Body drag styles delegate to `useBodyDragStyle()`. See change: fix-long-session-ux-degradation. |
| `SessionContentGate.tsx` | Desktop content-view gate leaf. `SessionContentGate({registry, session, renderContentView, renderDetail})`: calls `useSlotClaimsVersion()` then `forSession(registry.getClaims("content-view"), session)`; ≥1 claim → content view, else detail. Bump re-renders the leaf only, not `App`. Test `__tests__/SessionContentGate.test.tsx`. See change: fix-browser-live-view-subscribe-and-reopen. |
| `ShellContent.tsx` | Route-derived content branch for the shell. Owns the `useRoute` selection so it re-derives under a FROZEN wouter Router (the RouteBackedOverlay underlay); App supplies surfaces as `renderX` callbacks keyed by resolved params. `variant: "desktop" \| "mobile"` reproduces the pre-existing divergence (mobile owns diff + folder-editor branches; desktop guards several with `!selectedId`). Exports `ShellContent`, `ShellContentRenderers`. See change: add-route-backed-overlay-dialogs. `renderArchive(cwd, deepLink?)`; preview route skipped when `changeName === "archive"`. See change: resolve-archived-attached-proposal. |
| `StatusBar.tsx` | Working-status label ONLY; null when idle. Model row retired; model/thinking moved to composer toolbar → see `StatusBar.tsx.AGENTS.md`. See change: redesign-prompt-input. |
