Sheet
A hand-drawn panel that slides in from any edge.
Sides
With footer actions
Without close button
Installation
Add Sheet with the shadcn CLI.
npx shadcn@latest add https://sketchcn.chuwii.com/r/sheet.jsonExamples
Sheets holding forms, and sheets you open yourself.
Form in a sheet
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet";
import { Textarea } from "@/components/ui/textarea";
export function EditSketchSheet() {
return (
<Sheet>
<SheetTrigger render={<Button>Edit details</Button>} />
<SheetContent>
<SheetHeader>
<SheetTitle>Edit details</SheetTitle>
<SheetDescription>Update the sketch without leaving the canvas.</SheetDescription>
</SheetHeader>
<div className="flex flex-col gap-3 px-4">
<Input placeholder="Sketch name" />
<Textarea placeholder="What is it for?" />
</div>
<SheetFooter>
<SheetClose render={<Button variant="outline" />}>Cancel</SheetClose>
<Button>Save changes</Button>
</SheetFooter>
</SheetContent>
</Sheet>
);
}Controlled open state
import { Button } from "@/components/ui/button";
import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle } from "@/components/ui/sheet";
export function FiltersSheet() {
const [open, setOpen] = useState(false);
return (
<>
<Button variant="outline" onClick={() => setOpen(true)}>
Filters
</Button>
<Sheet open={open} onOpenChange={setOpen}>
<SheetContent side="left">
<SheetHeader>
<SheetTitle>Filters</SheetTitle>
<SheetDescription>Narrow the sketches you are looking at.</SheetDescription>
</SheetHeader>
<SheetFooter>
<Button onClick={() => setOpen(false)}>Apply</Button>
</SheetFooter>
</SheetContent>
</Sheet>
</>
);
}