An animated side panel (drawer) for filters, details, settings and quick edits — with a soft overlay, a spring entrance and sections that reveal in sequence.
pnpm dlx shadcn@latest add https://matos-ui.com/r/sheet-panel.jsonimport {
SheetPanel,
SheetPanelTrigger,
SheetPanelContent,
SheetPanelHeader,
SheetPanelTitle,
SheetPanelDescription,
SheetPanelBody,
SheetPanelSection,
SheetPanelFooter,
SheetPanelClose
} from '@/components/matos-ui/sheet-panel'<SheetPanel>
<SheetPanelTrigger>Open</SheetPanelTrigger>
<SheetPanelContent side="right" size="md">
<SheetPanelHeader>
<SheetPanelTitle>Filters</SheetPanelTitle>
<SheetPanelDescription>Refine the results.</SheetPanelDescription>
</SheetPanelHeader>
<SheetPanelBody>
<SheetPanelSection title="Status">{/* ... */}</SheetPanelSection>
</SheetPanelBody>
<SheetPanelFooter>
<SheetPanelClose>Cancel</SheetPanelClose>
<SheetPanelClose>Apply</SheetPanelClose>
</SheetPanelFooter>
</SheetPanelContent>
</SheetPanel>Built on Base UI's Dialog, so focus trapping, scroll locking, the escape key and outside-press dismissal all work out of the box.
For short confirmations or focused tasks, prefer a centered dialog.
<SheetPanelContent side="left" />
<SheetPanelContent side="right" />
<SheetPanelContent side="top" />
<SheetPanelContent side="bottom" />size maps to a max width for left/right panels, and a max height for
top/bottom panels.
<SheetPanelContent side="right" size="lg" />const [open, setOpen] = useState(false)
<SheetPanel open={open} onOpenChange={setOpen}>
<SheetPanelContent>...</SheetPanelContent>
</SheetPanel>Header, Body sections and Footer rise and
de-blur one after another via Framer Motion.Wraps Base UI Dialog.Root. Accepts open, defaultOpen, onOpenChange and
modal.
| Prop | Type | Default | Description |
|---|---|---|---|
side | "right" | "left" | "top" | "bottom" | "right" | Edge the panel slides in from. |
size | "sm" | "md" | "lg" | "xl" | "md" | Max width (sides) or max height (top/bottom). |
showClose | boolean | true | Render the built-in close button. |
backdropClassName | string | — | Class override for the backdrop. |
contentClassName | string | — | Class override for the inner content wrapper. |
| Component | Description |
|---|---|
SheetPanelTrigger | Opens the panel (renders a button). |
SheetPanelClose | Closes the panel (renders a button). |
SheetPanelHeader | Sequenced header region. |
SheetPanelTitle | Accessible title (Dialog.Title). |
SheetPanelDescription | Accessible description (Dialog.Description). |
SheetPanelBody | Scrollable region that sequences its own sections. |
SheetPanelSection | Titled, sequenced group of controls. |
SheetPanelItem | Generic sequenced block. |
SheetPanelFooter | Sequenced footer with a top divider for actions. |
Also exported: sheetPanelPopupVariants and sheetPanelBackdropVariants.
side="bottom" on mobile for thumb-friendly reach.SheetPanelTitle for screen readers, even if visually subtle.Install Matos UI
Choose a package manager and copy one command for every component.