LAYOUT
AppShell
Two-column app layout: sticky sidebar (configurable width and tone) + scrollable main area. The shell takes the full viewport height and keeps the sidebar pinned while the main column scrolls.
Import
Basic shape
AppShell occupies the full viewport. The example below shows a static visual scaled into a framed preview — wire your own Sidebar (and PageHeader) inside the slots.
Main
Page content scrolls here. The sidebar stays pinned at the top.
On-dark sidebar
Props
AppShell props
| Prop | Type | Default | Description |
|---|---|---|---|
| sidebar* | ReactNode | — | Content rendered inside the sticky <aside> column. Pair with a Sidebar / Nav component. |
| sidebarWidth | number | 240 | Pixel width of the sidebar column. |
| sidebarTone | 'default' | 'onDark' | 'default' | default paints the sidebar with the card surface; onDark flips it to ink with light text — pair with NavItem tone="onDark". |
| children | ReactNode | — | Main content rendered in the right column. |
Pairs well with
- Sidebar — composable side panel with header, body, footer slots.
- PageHeader — eyebrow + title + actions strip for the top of the main column.
- AppTopBar — alternative chrome for non-sidebar layouts (also can render inside the main column).