Sheet
A sliding panel for displaying content.
sheet-demo.tsx
"use client"
import { Button } from "@/components/ui/button"
import { Label } from "@/components/ui/label"
import {
Sheet,
SheetClose,
SheetContent,
SheetDescription,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet"
import { Textarea } from "@/components/ui/textarea"
export function SheetDemo() {
return (
<Sheet>
<SheetTrigger
render={(props) => <Button {...props}>Open Sheet</Button>}
/>
<SheetContent>
<SheetClose />
<SheetHeader>
<SheetTitle>Submit Feedback</SheetTitle>
<SheetDescription>
Please share your feedback with us to help improve our service.
</SheetDescription>
</SheetHeader>
<div className="my-4 space-y-2">
<Label htmlFor="feedback">Your Feedback</Label>
<Textarea id="feedback" placeholder="Type your feedback here." />
</div>
<SheetFooter>
<SheetClose
render={(props) => (
<Button {...props} size="sm" variant="ghost">
Close
</Button>
)}
/>
<Button size="sm">Submit</Button>
</SheetFooter>
</SheetContent>
</Sheet>
)
}
Installation
npx shadcn@latest add https://9ui.dev/r/sheet
Usage
Imports
import {
Sheet,
SheetClose,
SheetContent,
SheetDescription,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet"
Anatomy
<Sheet>
<SheetTrigger />
<SheetContent>
<SheetClose />
<SheetHeader>
<SheetTitle />
<SheetDescription />
</SheetHeader>
<SheetFooter>
<SheetClose />
</SheetFooter>
</SheetContent>
</Sheet>
Examples
Sides
sheet-sides.tsx
"use client"
import { Button } from "@/components/ui/button"
import { Label } from "@/components/ui/label"
import {
Sheet,
SheetClose,
SheetContent,
SheetDescription,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet"
import { Textarea } from "@/components/ui/textarea"
const SHEET_SIDES = ["top", "right", "bottom", "left"] as const
export function SheetSides() {
return (
<div className="grid grid-cols-2 gap-2">
{SHEET_SIDES.map((side) => (
<Sheet key={side}>
<SheetTrigger
render={(props) => (
<Button {...props} className="w-full">
{side}
</Button>
)}
/>
<SheetContent side={side}>
<SheetClose />
<SheetHeader>
<SheetTitle>Submit Feedback</SheetTitle>
<SheetDescription>
Please share your feedback with us to help improve our service.
</SheetDescription>
</SheetHeader>
<div className="my-4 space-y-2">
<Label htmlFor="feedback">Your Feedback</Label>
<Textarea id="feedback" placeholder="Type your feedback here." />
</div>
<SheetFooter>
<SheetClose
render={(props) => (
<Button {...props} size="sm" variant="ghost">
Close
</Button>
)}
/>
<Button size="sm">Submit</Button>
</SheetFooter>
</SheetContent>
</Sheet>
))}
</div>
)
}