shadcn.io is an independent project built on shadcn/ui
Open Sheet is the trigger. The panel is titled Bottom Sheet. Its description says it slides up from the bottom of the screen. Nothing sits under the header.
Use the bottom edge for a short choice on a phone. A centered question belongs in a Dialog. In React, Base UI still traps focus from this edge.
Installation
Anatomy

Usage
<Sheet>
<SheetTrigger render={<Button />}>Open Sheet</SheetTrigger>
<SheetContent side="bottom">
<SheetHeader>
<SheetTitle>Bottom Sheet</SheetTitle>
<SheetDescription>
This sheet slides up from the bottom of the screen.
</SheetDescription>
</SheetHeader>
</SheetContent>
</Sheet>FAQ
How do I open the sheet from the bottom?
Set side="bottom" on SheetContent. Leave it out and the sheet opens from the right. It takes top, right, bottom or left.
How tall is the bottom sheet?
A bottom sheet spans the full width and is as tall as its content, here just SheetHeader. Cap a long one with a class such as data-[side=bottom]:max-h-[50vh] and let its body scroll.
What does the bottom sheet announce?
SheetTitle names the dialog for assistive tech, so every sheet renders one; hide it with sr-only when the design has no visible heading. Here it reads Bottom Sheet, and SheetDescription reads This sheet slides up from the bottom of the screen.
How is Open Sheet connected?
The button labeled Open Sheet is the trigger, and its text is the accessible name.
The Button goes in the render prop of SheetTrigger, and the label stays its child.
API Reference
Sheet
Sets side="bottom". The rest is on the Sheet page.
Button
No extra props in this demo. The rest is on the Button page.





