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.