import type { Snippet } from "svelte"; import type { SiteConfig } from "./site-config"; export type AppShellVariant = "site" | "workspace"; export type AppShellUtilityMode = "reserve" | "overlay" | "floating"; export type AppShellUtilitySide = "left" | "right" | "bottom"; export type AppShellPanelCollapse = "stack" | "accordion"; export type AppShellPanelKey = "navigationPanel" | "contextPanel" | "utilityPanel"; export type AppShellProps = { variant?: AppShellVariant; config?: SiteConfig; topChrome?: Snippet; primaryRail?: Snippet; navigationPanel?: Snippet; main?: Snippet; contextPanel?: Snippet; utilityPanel?: Snippet; bottomPanel?: Snippet; children?: Snippet; mainId?: string; navigationLabel?: string; contextLabel?: string; utilityLabel?: string; utilityMode?: AppShellUtilityMode; utilitySide?: AppShellUtilitySide; /** * Below the 48rem breakpoint, `"stack"` (default) keeps today's behaviour — * panels stack full-width in document order, always expanded. `"accordion"` * degrades each present panel to a keyboard-accessible disclosure (collapsed * by default) instead of squeezing the main content. Desktop (>48rem) * rendering is IDENTICAL in both modes — side panels stay side-by-side * columns. Panel content is mounted once regardless of mode/breakpoint; * collapsing hides/sizes the region rather than destroying it, so stateful * widgets (maps, live panels…) mounted in a panel never remount. */ panelCollapse?: AppShellPanelCollapse; /** Disclosure label for `primaryRail` when `panelCollapse="accordion"`. */ primaryRailLabel?: string; /** Disclosure label for `navigationPanel` when `panelCollapse="accordion"`. Defaults to `navigationLabel`. */ navigationPanelLabel?: string; /** Disclosure label for `contextPanel` when `panelCollapse="accordion"`. Defaults to `contextLabel`. */ contextPanelLabel?: string; /** Disclosure label for `utilityPanel` when `panelCollapse="accordion"`. Defaults to `utilityLabel`. */ utilityPanelLabel?: string; /** Enables drag-to-resize handles on side panels above 48rem. Default false — zero regression. */ panelResize?: boolean; /** Controlled panel widths in px. When provided the component never mutates width itself. */ panelWidths?: Partial>; /** Seeds uncontrolled widths in px. */ defaultPanelWidths?: Partial>; /** Fired on every committed resize. Persistence is the CONSUMER's job — the DS stays presentational. */ onPanelResize?: (key: AppShellPanelKey, width: number) => void; /** Lower clamp in px. Default 180. */ panelMinWidth?: number; /** Upper clamp in px. Default 640. */ panelMaxWidth?: number; class?: string; }; declare const AppShell: import("svelte").Component; type AppShell = ReturnType; export default AppShell; //# sourceMappingURL=AppShell.svelte.d.ts.map