Drawer
StableA sheet that slides in from an edge and keeps the page in view behind it: token details, filters, a review checklist. On touch it can be swiped away.
When to use
Use it for
- Details or editing for one item of a list or table, where the user wants to keep the list in mind.
- Filters and settings for the current view.
- side end (default) for details, start for navigation, bottom for small screens and quick choices.
Not for
- A short task that needs full attention: use Dialog.
- Content that should stay visible while the user works on the page: use a non-modal side panel in the layout.
Do and don't
Every example is rendered with the real component, so it always matches what ships.
Title it with the item's name
"color.signal.default" tells the user which row they opened. The description says what it is for.
Put the actions in the footer
The footer stays visible while the body scrolls.
A drawer that opens another drawer
Stacked sheets hide where the user came from. Navigate inside the drawer or use a page.
Accessibility
- Base UI Drawer: modal dialog semantics, named by the title, focus trapped, Escape closes, focus returns to the trigger.
- Swipe to dismiss is an extra for touch, never the only way: the close button and Escape always work.
- The page behind is inert while the drawer is open.
- Slides in 300ms with an exponential ease-out; reduced motion shows it instantly.
- start and end follow the physical left and right in v1; RTL layouts should pass the mirrored side.
Anatomy and tokens
Read from packages/react/src/components/Drawer/Drawer.module.css at build time. Every value is a token: open one to see its
alias chain in both themes.
- Scrim
.backdrop - Scrim
.backdrop[data-swiping] - Positioning layer
.viewport - Sheet (drawer.bg, drawer.radius on the inner edge, drawer.shadow)
.popup - Sheet (drawer.bg, drawer.radius on the inner edge, drawer.shadow)
.popup[data-swiping] - Sheet (drawer.bg, drawer.radius on the inner edge, drawer.shadow)
.popup[data-ending-style] - sm
.sm - md
.md - lg
.lg - From the end edge
.end, .start - From the end edge
.end - From the start edge
.start - From the bottom
.bottom - Drag handle (bottom sheets)
.handle - Header
.header - heading
.heading - Title
.title - Description
.description - Close button
.close - Scrolling body
.body - Footer
.footer
Props
Parsed from the TypeScript types in packages/react/src/components/Drawer/Drawer.tsx, so this table cannot drift from the
code.
| Prop | Type | Default | Description |
|---|---|---|---|
open | boolean | none | No description in the code yet. |
defaultOpen | boolean | none | No description in the code yet. |
onOpenChange | (open: boolean) => void | none | No description in the code yet. |
side | 'start' | 'end' | 'bottom' | 'end' | Edge the sheet slides from. `end` (default) for details and filters, `start` for navigation, `bottom` on small screens. |
disablePointerDismissal | boolean | false | Keep it open when the scrim is clicked. |
children | ReactNode | none | DrawerTrigger and DrawerContent. |
Playground
Drawer has no typed options to play with: it is a container. Compose it with other components and any native attribute. Here it is in both themes.
Workbench
For contributors: every state with the accessibility panel, in the component workbench (Storybook). The stories double as visual test fixtures; the guidance on this page is the user documentation (open Drawer in Storybook) .
Embed Storybook stories here (4)
Loads from https://bridge-storybook.floriangouloubi.com (set STORYBOOK_URL at build time). If Storybook is not running, the frames stay
empty.
End
Start
Bottom
AllStates
Changelog
- New
Overlays: Dialog (sizes, scrolling body, footer, close last in focus order), AlertDialog (destructive confirmations, async confirm), Drawer (start, end, bottom with swipe), Popover, Tooltip with TooltipProvider, Menu (icons, shortcuts, groups, submenus, checkbox and radio items, danger items). Every popup carries the theme, brand and density scope. Adds menu and drawer component tokens.
Unreleased (current version 0.1.0, no release tagged yet) , Oct 17, 2026
- New
Token detail drawer outside the explorer (docs-site)
Unreleased (current version 0.1.0, no release tagged yet) , Oct 16, 2026