drawer
A modal off-canvas panel that slides in from an edge.
A headless drawer (sheet) built on the same overlay primitives as
dialog, dismissable layer, focus trap, scroll lock. It slides from
any edge via the side prop and composes from header, body, and footer parts.
For a persistent, in-layout navigation rail, use sidenav instead.
Installation
pnpm add @fluixi-ui/drawer
Usage
import {
Drawer, DrawerTrigger, DrawerPortal, DrawerOverlay, DrawerContent,
DrawerHeader, DrawerTitle, DrawerBody, DrawerFooter, DrawerClose,
} from '@fluixi-ui/drawer';
<Drawer side="right">
<DrawerTrigger>Open filters</DrawerTrigger>
<DrawerPortal>
<DrawerOverlay />
<DrawerContent>
<DrawerHeader>
<DrawerTitle>Filters</DrawerTitle>
<DrawerClose aria-label="Close">×</DrawerClose>
</DrawerHeader>
<DrawerBody>...</DrawerBody>
<DrawerFooter>
<DrawerClose>Apply</DrawerClose>
</DrawerFooter>
</DrawerContent>
</DrawerPortal>
</Drawer>
Props (Drawer)
| Prop | Type | Default | Description |
|---|---|---|---|
side |
'left' | 'right' | 'top' | 'bottom' |
'right' |
The edge the panel slides from. |
open |
boolean |
, | Controlled open state. |
defaultOpen |
boolean |
false |
Initial uncontrolled open state. |
onOpenChange |
(open: boolean) => void |
, | Called when open state changes. |
modal |
boolean |
true |
Trap focus and lock scroll. |
Parts
| Part | Description |
|---|---|
Drawer |
Root; owns open state and side. |
DrawerTrigger |
Button that opens the drawer. |
DrawerPortal |
Portals overlay + content to <body> while open. |
DrawerOverlay |
The backdrop. |
DrawerContent |
The focus-trapped panel; data-side, dismisses on Escape / outside pointer-down. |
DrawerHeader / DrawerTitle / DrawerDescription |
Header region and accessible label/description. |
DrawerBody |
Scrollable content region. |
DrawerFooter |
Footer, typically actions. |
DrawerClose |
Button that closes the drawer. |
Part of the Fluixi UI component library. Made with ☕ by the Fluixi team.