/** * App-shell composition pieces for the app-shell stories. The package ships NO * generic app-shell component on purpose — a product composes its own shell * from package primitives (`ChatMessages`, `ChatComposer`, `../../brand`) plus * its own sidebar. These are the story-local building blocks for that * composition: a session sidebar (recency sections, active item, status * affordances, new-chat button), a thread header, and the `AppShell` layout * that wires them together with a mobile drawer below `md`. * * Everything is Tailwind over the shared tokens (`bg-card`, `border-border`, * `text-muted-foreground`, `bg-primary`, …) so the global theme toolbar * restyles it, exactly like the `web-react` styling contract. */ import { type ReactNode } from 'react'; export type SessionStatus = 'idle' | 'running' | 'approval'; interface ShellSession { id: string; title: string; /** `running` shows a spinner, `approval` an amber dot — the two states a * background agent session can be in while you're looking at another one. */ status?: SessionStatus; } export interface ShellSessionSection { id: string; label: string; sessions: ShellSession[]; } interface ShellUser { name: string; email: string; } export interface AppSidebarProps { sections: ShellSessionSection[]; activeId?: string | null; /** Rail mode: icons only, 52px. */ collapsed?: boolean; /** Row rhythm: `comfortable` is the default reading density, `compact` the * power-user density for long histories. */ density?: 'comfortable' | 'compact'; pendingApprovals?: number; user?: ShellUser | null; onNewChat?: () => void; onSelectSession?: (id: string) => void; onToggleCollapse?: () => void; onOpenApprovals?: () => void; onOpenSettings?: () => void; onOpenAccount?: () => void; className?: string; } export declare function AppSidebar(props: AppSidebarProps): import("react").JSX.Element; export interface AppShellProps { sections: ShellSessionSection[]; activeSessionId?: string | null; sidebarCollapsed?: boolean; sidebarDensity?: 'comfortable' | 'compact'; pendingApprovals?: number; user?: ShellUser | null; headerTitle: string; headerSubtitle?: string; onNewChat?: () => void; onSelectSession?: (id: string) => void; onToggleCollapse?: () => void; onOpenApprovals?: () => void; onOpenSettings?: () => void; onOpenAccount?: () => void; onShare?: () => void; onOpenThreadMenu?: () => void; /** The thread — typically ``. Rendered in the scroll area. */ children?: ReactNode; /** Typically ``; pinned to the bottom of the main column and * aligned to the same `max-w-3xl` reading column `ChatMessages` uses. */ composer?: ReactNode; } /** * The production agent-app layout: sidebar (fixed on desktop, drawer below * `md`), header row, scrolling thread, pinned composer. Presentational only — * all behavior arrives via props, so stories drive it with fixtures and * console.log callbacks. */ export declare function AppShell({ sections, activeSessionId, sidebarCollapsed, sidebarDensity, pendingApprovals, user, headerTitle, headerSubtitle, onNewChat, onSelectSession, onToggleCollapse, onOpenApprovals, onOpenSettings, onOpenAccount, onShare, onOpenThreadMenu, children, composer, }: AppShellProps): import("react").JSX.Element; export {};