Sheet
Extends the Dialog component to display content that complements the main content of the screen.
import { styled } from "styled-system/jsx";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import {
Sheet,
SheetClose,
SheetContent,
SheetDescription,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet";
export default function SheetDemo() {
return (
<Sheet>
<SheetTrigger asChild>
<Button variant="outline">Open</Button>
</SheetTrigger>
<SheetContent>
<SheetHeader>
<SheetTitle>Edit profile</SheetTitle>
<SheetDescription>
Make changes to your profile here. Click save when you're done.
</SheetDescription>
</SheetHeader>
<styled.div css={{ display: "grid", flex: "1", gridAutoRows: "min", gap: "6", px: "4" }}>
<styled.div css={{ display: "grid", gap: "3" }}>
<Label htmlFor="drawer-demo-name">Name</Label>
<Input id="drawer-demo-name" defaultValue="Ahmad Miftachul Hidayat" />
</styled.div>
<styled.div css={{ display: "grid", gap: "3" }}>
<Label htmlFor="drawer-demo-username">Username</Label>
<Input id="drawer-demo-username" defaultValue="amiftachulh" />
</styled.div>
</styled.div>
<SheetFooter>
<Button type="submit">Save changes</Button>
<SheetClose asChild>
<Button variant="outline">Close</Button>
</SheetClose>
</SheetFooter>
</SheetContent>
</Sheet>
);
}
Installation
npx nore-ui-cli@latest add sheetUsage
import { Sheet } from "@/components/ui/sheet";
<Sheet>
<SheetTrigger>Open</SheetTrigger>
<SheetContent>
<SheetHeader>
<SheetTitle>Are you absolutely sure?</SheetTitle>
<SheetDescription>
This action cannot be undone. This will permanently delete your account and remove your data
from our servers.
</SheetDescription>
</SheetHeader>
</SheetContent>
</Sheet>
Examples
Side
import { styled } from "styled-system/jsx";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import {
Sheet,
SheetClose,
SheetContent,
SheetDescription,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet";
const SIDE = ["top", "bottom", "left", "right"] as const;
export default function SheetSide() {
return (
<styled.div css={{ display: "flex", alignItems: "center", gap: "4" }}>
{SIDE.map((side) => (
<Sheet key={side} side={side}>
<SheetTrigger asChild>
<Button variant="outline">{side}</Button>
</SheetTrigger>
<SheetContent>
<SheetHeader>
<SheetTitle>Edit profile</SheetTitle>
<SheetDescription>
Make changes to your profile here. Click save when you're done.
</SheetDescription>
</SheetHeader>
<styled.div
css={{ display: "grid", flex: "1", gridAutoRows: "min", gap: "6", px: "4" }}
>
<styled.div css={{ display: "grid", gap: "3" }}>
<Label htmlFor="drawer-demo-name">Name</Label>
<Input id="drawer-demo-name" defaultValue="Ahmad Miftachul Hidayat" />
</styled.div>
<styled.div css={{ display: "grid", gap: "3" }}>
<Label htmlFor="drawer-demo-username">Username</Label>
<Input id="drawer-demo-username" defaultValue="amiftachulh" />
</styled.div>
</styled.div>
<SheetFooter>
<Button type="submit">Save changes</Button>
<SheetClose asChild>
<Button variant="outline">Close</Button>
</SheetClose>
</SheetFooter>
</SheetContent>
</Sheet>
))}
</styled.div>
);
}
Size
You can adjust the size of the drawer using css prop on the SheetContent component.
<Sheet>
<SheetTrigger>Open</SheetTrigger>
<SheetContent css={{ w: "400px", sm: { w: "540px" } }}>
<SheetHeader>
<SheetTitle>Are you absolutely sure?</SheetTitle>
<SheetDescription>
This action cannot be undone. This will permanently delete your account and remove your data
from our servers.
</SheetDescription>
</SheetHeader>
</SheetContent>
</Sheet>