Capítulo 46 de 108
Estende o Dialog para exibir conteúdo que complementa a tela principal, deslizando de uma das bordas (drawer lateral/top/bottom no desktop). Built on Base UI Dialog.
SheetContent, valores "top" | "right" | "bottom" | "left"; controla de qual borda o painel desliza.render={<Button variant="outline" />} como o Dialog.const SHEET_SIDES = ["top", "right", "bottom", "left"] as const
<Sheet>
<SheetTrigger render={<Button variant="outline" className="capitalize" />}>
{side}
</SheetTrigger>
<SheetContent
side={side}
className="data-[side=bottom]:max-h-[50vh] data-[side=top]:max-h-[50vh]"
>
<SheetHeader>
<SheetTitle>Edit profile</SheetTitle>
<SheetDescription>...</SheetDescription>
</SheetHeader>
<div className="no-scrollbar overflow-y-auto px-4">{/* conteúdo */}</div>
<SheetFooter>
<Button type="submit">Save changes</Button>
<SheetClose render={<Button variant="outline" />}>Cancel</SheetClose>
</SheetFooter>
</SheetContent>
</Sheet>
side, com data-[side=bottom]:max-h-[50vh] limitando altura quando o sheet abre de cima/baixo (evita ocupar a tela inteira).Composição:
Sheet
├── SheetTrigger
└── SheetContent
├── SheetHeader
│ ├── SheetTitle
│ └── SheetDescription
└── SheetFooter
side="right" é o padrão implícito quando a prop é omitida no exemplo básico.side="top"/"bottom", limitar max-h via data-[side=...] para não cobrir a tela toda.side manualmente (dir === "rtl" ? "left" : "right") pra manter a semântica de "abre da direção de leitura".showCloseButton, mesma base Base UI Dialog) — Sheet é essencialmente Dialog com posicionamento lateral.npm install @base-ui/react.side.SheetContent.