Drawer
Organism
A full-screen panel that slides in from an edge: a navigation drawer, a mobile menu, or a bottom action sheet. Built on React Native's Modal, so it floats over the whole app on iOS, Android, and the web, over a dimmed scrim that glass on the web also blurs. For a small contextual menu, reach for Dropdown or RowMenu instead.
Playground
Every control sets a real prop of DrawerProps. The JSX below updates as you go.
Web
iOS
Android
JSX · DrawerProps
Variants
4 examples from src/organisms/drawer/drawer.md, each rendered live from its own JSX.
Anatomy
1
Scrim
2
Panel
3
Header
4
Body
5
Footer
Dimmed parts appear only in some states or variants.
Props
18 props on DrawerProps, grouped as they are declared in source. Required props are marked *.
Accessibility and keyboard
Keyboard
Tab
Shift+Tab
Cycles focus inside the panel
Escape
Closes when dismissible
Enter
Confirms in forms
Semantics
Roles
region
ARIA on web
aria-label
From the docs
On iOS, VoiceOver's accessibility escape gesture requests dismissal of the foremost open child before the drawer. Android system back uses the same child ownership. A controlled child that stays open continues to own later requests; one request never falls through to its parent. The scrim remains a pointer target, and the built-in trigger opens the drawer. Sidebar drill-down navigation has its own back behavior; accessibility escape dismisses the overlay rather than navigating a sidebar level. Focus restoration rem
Give a controlled drawer an accessibilityLabel when it has no built-in trigger. A drawer with a trigger uses the trigger label as its modal name.
Platform skins
The playground's props on each platform: same tree, native shapes, type and touch sizes.
Usage
Drawer provides an overlay host inside its own window. Dropdown, Select, and other anchored children render above the panel without being clipped by its corners; no additional OverlayProvider is needed inside the drawer. A tap outside an open child menu dismisses that menu, and Escape dismisses the child before the drawer. Nested drawers each keep their overlays in their own window.
On iOS, VoiceOver's accessibility escape gesture requests dismissal of the foremost open child before the drawer. Android system back uses the same child ownership. A controlled child that stays open continues to own later requests; one request never falls through to its parent. The scrim remains a pointer target, and the built-in trigger opens the drawer. Sidebar drill-down navigation has its own back behavior; accessibility escape dismisses the overlay rather than navigating a sidebar level. Focus restoration remains platform-dependent.
Give a controlled drawer an accessibilityLabel when it has no built-in trigger. A drawer with a trigger uses the trigger label as its modal name.
Tokens
Read from the playground render. Values follow the scheme and the ion hue.
--bf
--bg2
--bls
--bw
--f-dp
--fd
--ft
--gl
--ion
--ion-fg
--ln
--ln2
--scrim
--sf3
--sh-lg
--tx
--tx3