Browse the docs

Sheet

Panel that slides in from an edge — settings drawers, mobile filters, detail views. Built on the composable dialog primitive, so the focus trap, Escape handling, inert background, and top-layer rendering all come from the native <dialog> element.

This component needs the dialog primitive — two ways to get it:

Edit profile

Changes apply the next time the page loads.

Props

PropValuesDefaultDescription
openbooleanrequiredKeep it in your state.
onClosefunctionrequiredFires once per dismissal — button, Escape, or backdrop.
titlenodeAccessible name for the panel.
side"right", "left", "bottom""right"Which edge it enters from.
dismissablebooleantrueSet false to block Escape and backdrop dismissal.
classNamestring""Appended to the panel.

Notes

The centered Dialog remains the one-file, no-primitive option for confirmations. Sheet exists for edge-anchored layouts and shares its underlying behavior with anything else you build on the dialog primitive: DialogRoot, DialogTrigger, DialogContent, DialogTitle, DialogDescription, DialogClose.