/** * App chrome — the shared shell every Artificer tool-SPA composes: appbar, * nav drawer, sidenav (flat or collapsible sections), and the theme toggle. * * One implementation, canonical markup, behavior from the shipped vanilla * modules (artificer-theme.js, artificer-focus.js) — never re-implemented * here. Born from the 2026-08 mobile sweep, where hand-copied chrome drifted * into divergent bugs across consumers. */ import * as React from 'react'; export declare function ThemeToggle({ inline, className, ...rest }: React.ButtonHTMLAttributes & { inline?: boolean; }): React.JSX.Element; /** * Reactive read of the applied theme ('dark' | 'light'). State is OWNED by * artificer-theme.js — this hook only observes `data-theme` on ; call * `toggle()` (which defers to the module) to change it. Replaces the removed * 2-state `useTheme`, which duplicated the module's persistence and predated * the canonical dark → light → auto cycle. */ export declare function useThemeMode(): { theme: 'dark' | 'light'; toggle: () => void; }; export declare function AppShell({ rail, gap, className, style, ...rest }: React.HTMLAttributes & { /** Rail column width — sets --shell-rail (default 240px). */ rail?: string; /** Rail↔content column gap — sets --shell-gap (default 0). */ gap?: string; }): React.JSX.Element; export declare function AppShellContent({ as: As, className, ...rest }: React.HTMLAttributes & { as?: React.ElementType; }): React.JSX.Element; export declare function Appbar({ brand, brandHref, brandWhimsy, contained, sticky, search, actions, menu, className, children, ...rest }: React.HTMLAttributes & { /** Brand text/node — rendered inside the canonical `.appbar__brand > .wordmark` composition. */ brand: React.ReactNode; brandHref?: string; /** Adds `.whimsy` to the wordmark (the brand is the sanctioned whimsy home in the bar). */ brandWhimsy?: boolean; /** `.appbar--contained` — zero inline padding when the bar sits inside a padded container. */ contained?: boolean; /** false → `.appbar--static` (opts out of sticky positioning). */ sticky?: boolean; search?: React.ReactNode; actions?: React.ReactNode; /** Hamburger — appears below --bp-tablet via the `.appbar__menu-btn` rule. */ menu?: { controls: string; open: boolean; onClick: () => void; label?: string; }; }): React.JSX.Element; export declare function NavDrawer({ open, onClose, id, label, className, children, }: { open: boolean; onClose: () => void; /** Matches the Appbar menu's aria-controls. */ id: string; label?: string; className?: string; children: React.ReactNode; }): React.JSX.Element; export interface SideNavItem { key: string; label: React.ReactNode; /** Rendered as when present, else a