Sheet

A panel that slides in from an edge of the screen, over the page.

View as Markdown
<Sheet>  <SheetTrigger render={<Button variant="outline" />}>Open</SheetTrigger>  <SheetContent>    <SheetHeader>      <SheetTitle>Edit profile</SheetTitle>      <SheetDescription>        Make changes to your profile here. Click save when you&apos;re done.      </SheetDescription>    </SheetHeader>    <SheetBody>…</SheetBody>    <SheetFooter>      <Button variant="primary">Save changes</Button>      <SheetClose render={<Button variant="outline" />}>Close</SheetClose>    </SheetFooter>  </SheetContent></Sheet>

Installation

$ npx shadcn@latest add @constella/sheet

Usage

import {  Sheet,  SheetContent,  SheetDescription,  SheetHeader,  SheetTitle,  SheetTrigger,} from "@/components/primitives/sheet";
<Sheet>  <SheetTrigger>Open</SheetTrigger>  <SheetContent>    <SheetHeader>      <SheetTitle>Are you absolutely sure?</SheetTitle>      <SheetDescription>This action cannot be undone.</SheetDescription>    </SheetHeader>  </SheetContent></Sheet>

Composition

Sheet├── SheetTrigger└── SheetContent    ├── SheetHeader    │   ├── SheetTitle    │   └── SheetDescription    ├── SheetBody    └── SheetFooter        └── SheetClose

Side

Use the side prop on SheetContent to choose the edge it slides from. It leaves the same way.

SideSize
right75% wide, up to 384px
left75% wide, up to 384px
topIts content's height
bottomIts content's height
<SheetContent side="left">…</SheetContent>

API Reference

PartAdds
SheetContentRenders the portal, backdrop and popup; side: "top", "right", "bottom" or "left"; showCloseButton

Every part takes sx, applied last. For the rest, see Base UI Dialog.