Ship the redesigned onboarding, the new billing page and the Q4 roadmap review.
Design review on Oct 20, beta on Nov 3, general availability on Dec 1.
App shell
The app window: a sidebar docked on desktop (collapsible, animated) that becomes a modal drawer on phones, a top bar over a scrolling page, and an overlay layer for peeks.
Ship the redesigned onboarding, the new billing page and the Q4 roadmap review.
Design review on Oct 20, beta on Nov 3, general availability on Dec 1.
sidebarOpen / onSidebarOpenChange when other UI needs to know whether the sidebar is shown; otherwise leave it uncontrolled.h-screen).PageLayout on its own.<Theme> (see Installation):Starts collapsed. Hover the » button in the topbar to see the floating sidebar, click it to dock. On a phone the menu button opens the drawer.
Ship the redesigned onboarding, the new billing page and the Q4 roadmap review.
Design review on Oct 20, beta on Nov 3, general availability on Dec 1.
sidebarOpen is the docked state on desktop and the drawer state on phones (so it starts closed here).
Everything you follow, in one place.
Ship the redesigned onboarding, the new billing page and the Q4 roadmap review.
Design review on Oct 20, beta on Nov 3, general availability on Dec 1.
Previews on this page render the app at 1100x640 and scale it to fit:
Ship the redesigned onboarding, the new billing page and the Q4 roadmap review.
Design review on Oct 20, beta on Nov 3, general availability on Dec 1.
Based on <div> (children replaced by the slot). Slots accept a node or (state: AppFrameState) => ReactNode.
| Prop | Type | Default |
|---|---|---|
sidebar | ReactNode | ((state: AppFrameState) => ReactNode) | |
topbar | ReactNode | ((state: AppFrameState) => ReactNode) | |
children | ReactNode | ((state: AppFrameState) => ReactNode) | |
peek | ReactNode | ((state: AppFrameState) => ReactNode) | |
sidebarOpen | boolean | |
defaultSidebarOpen | boolean | true |
onSidebarOpenChange | (open: boolean) => void | |
drawerLabel | string | "Sidebar" |
className | string |
Passed to slot functions and returned by useAppFrame() (useOptionalAppFrame() returns null outside a frame).
| Prop | Type | Default |
|---|---|---|
mobile | boolean | |
sidebarOpen | boolean | |
setSidebarOpen | (open: boolean) => void | |
collapsed | boolean | |
setCollapsed | (collapsed: boolean) => void | |
toggleSidebar | () => void | |
peeking | boolean | |
setPeeking | (peeking: boolean) => void | |
placement | "docked""floating""drawer" | |
floating | boolean |
drawerLabel). The topbar menu button opens it; focus moves into it and is trapped; Escape, the backdrop or choosing an item closes it and focus returns to the menu button.inert (out of the tab order). Hovering the topbar » button or the left edge floats it for pointer users; the » button (Enter) docks it again.nav (sidebar), header (topbar), main (page frame), non-modal dialog (side peek).prefers-reduced-motion.