components
App bars
The navigation chrome: a top AppBar and a bottom BottomNav, wired together by AppShell. Synthesized from Material 3 and Apple HIG, mobile-first. The chrome recedes on scroll-down and returns on scroll-up, so the story and art lead. Scroll inside the phone to see it.
The shell, live
A large title on the root that collapses to inline on scroll, lift-on-scroll, the active pill in the bottom bar, and minimize-on-scroll. Scroll the content up and down.
AppShell props
| Prop | Type | Default | Description |
|---|---|---|---|
| title | string | none | Top bar title. |
| largeTitle | boolean | false | Use a large title that collapses to inline on scroll. |
| leading | ReactNode | none | Top bar leading slot (back or brand). |
| actions | ReactNode | none | Top bar trailing actions. |
| navItems | BottomNavItem[] | none | { key, label, icon, href? } destinations. |
| activeNav | string | none | Active destination key. |
| onNavSelect | (key: string) => void | none | Destination select handler. |
| minimizeOnScroll | boolean | true | Recede the bars while scrolling down. |
AppBar props
| Prop | Type | Default | Description |
|---|---|---|---|
| title | string | none | The title text. |
| largeTitle | boolean | false | Large title that collapses to inline. |
| collapsed | boolean | false | Collapse the large title to inline (driven by scroll). |
| elevated | boolean | false | Add a hairline and soft lift (driven by scroll). |
| minimized | boolean | false | Slide the bar up out of view. |
BottomNav props
| Prop | Type | Default | Description |
|---|---|---|---|
| items | BottomNavItem[] | none | Destinations with a Phosphor icon component. |
| active | string | none | Active item key. |
| onSelect | (key: string) => void | none | Select handler. |
| minimized | boolean | false | Slide the bar down out of view. |