import { type ReactNode, type RefObject } from "react"; /** Below this viewport width the rail is an overlay drawer, not a fixed column. */ export declare const RAIL_DRAWER_BREAKPOINT = 1024; /** Resize bounds for the expanded desktop rail (px). */ export declare const RAIL_MIN_WIDTH = 220; export declare const RAIL_MAX_WIDTH = 480; /** * A desktop app window is wider than most browser windows next to other tabs * and the sidebar is its main way around, so it starts wide enough for real * session titles beside each row's status and time. */ export declare const RAIL_DEFAULT_WIDTH: number; export type RailContextValue = { workspaceId: string; /** Icon-only rail (desktop). Ignored while the mobile drawer is in play. */ collapsed: boolean; setCollapsed: (collapsed: boolean) => void; toggleCollapsed: () => void; /** User-chosen expanded-rail width (px), clamped to [RAIL_MIN, RAIL_MAX]. */ width: number; /** Set the expanded-rail width; persisted to localStorage (clamped). */ setWidth: (width: number) => void; /** Whether the viewport is narrow enough to use the overlay drawer. */ isMobile: boolean; /** Mobile overlay-drawer open state. */ drawerOpen: boolean; setDrawerOpen: (open: boolean) => void; /** Persistent opener outside the mobile drawer, also used after search. */ drawerTriggerRef: RefObject; /** Retiring drawers must not take focus from an open search dialog. */ restoreDrawerFocus: () => void; /** * Close the phone drawer for a dialog that takes over from it (search, the * command menu). That dialog returns focus itself, so the retiring drawer * must not reclaim it when its exit animation ends. */ handOffDrawer: () => void; /** Navigate to a workspace's sessions index (used by the switchers). */ openWorkspace: (workspaceId: string) => void; /** Switch organization: navigate to the first workspace in the target org. */ openOrg: (accountId: string) => void; /** Open a session: in the current workspace, or in the one given. */ openSession: (sessionId: string, inWorkspaceId?: string) => void; /** Start a new session (the sessions index composer). */ startNewSession: () => void; }; export declare function useRail(): RailContextValue; export declare function RailProvider({ workspaceId, children, }: { workspaceId: string; children: ReactNode; }): import("react").JSX.Element;