Sheet
StableDialog ancorado a uma borda da viewport, com header e footer fixos e um corpo que rola. Composto sobre Base UI Dialog e sobre o Button do Up Web DS. A borda é o argumento para usá-lo: ele segura trabalho secundário — filtros, detalhes, navegação — sem fingir que a página embaixo sumiu. Quando o conteúdo é uma decisão em vez de um lugar, o Dialog centralizado diz isso melhor.
Instalação
npx up-web-ds add sheetGera close para a biblioteca de ícones do projeto (components.json → iconLibrary).
Preview
Basic
Default
Variants
Without Overlay
Sides
With Scrolling Body
All states
Basic
Default
Variants
Without Overlay
Sides
With Scrolling Body
Without Close Button
Usage
Props
Sheet
Estende SheetPrimitive.Root.Props.
SheetTrigger
Estende SheetPrimitive.Trigger.Props. Aceita também os atributos padrão de um elemento React (284 não listados).
SheetClose
Estende SheetPrimitive.Close.Props. Aceita também os atributos padrão de um elemento React (285 não listados).
SheetPortal
Estende SheetPrimitive.Portal.Props. Aceita também os atributos padrão de um elemento React (275 não listados).
SheetContent
Estende SheetPrimitive.Popup.Props. Aceita também os atributos padrão de um elemento React (275 não listados).
SheetHeader
Estende React.ComponentProps<'div'>. Aceita também os atributos padrão de um elemento React (280 não listados).
SheetBody
Estende React.ComponentProps<'div'>. Aceita também os atributos padrão de um elemento React (280 não listados).
SheetTitle
Estende SheetPrimitive.Title.Props. Aceita também os atributos padrão de um elemento React (275 não listados).
SheetDescription
Estende SheetPrimitive.Description.Props. Aceita também os atributos padrão de um elemento React (275 não listados).
Composition
A mesma composição do Dialog: o Sheet muda de onde o painel entra, não como ele é montado.
Metadata
Notas de acessibilidade
Teclado verificado por teste: o foco entra no painel ao abrir, Tab dá a volta dentro dele em vez de escapar para a página coberta, Escape fecha devolvendo o foco ao gatilho, e a saída por Escape continua existindo mesmo com o botão de fechar do canto removido — um painel sem saída visível é uma escolha, um painel sem saída é uma armadilha. Leitor de tela verificado por teste: o painel é nomeado pelo SheetTitle e descrito pelo SheetDescription, e o botão do canto é nomeado por texto em vez de pelo glifo. Touch verificado em navegador com emulação de toque em viewport de 375px: o painel lateral ocupa três quartos da largura deixando visível a página atrás, os alvos medem acima do mínimo de 24x24 da WCAG 2.2 SC 2.5.8 e quem rola é o SheetBody, não o painel inteiro. Reduced motion verificado em navegador com prefers-reduced-motion: reduce — o deslocamento de entrada é aplicado em motion-safe:, então sob reduce o painel não viaja; a transição de opacidade continua incondicional, que é o que dispara o transitionend pelo qual o Base UI espera para desmontar. Verificado nos dois modos: abre, fecha, o foco entra e volta ao gatilho, e o painel não fica preso num transform intermediário.
Classificação
- Layer
- Primitive
- Domínio
- Domain-free (compartilhado)
- Categoria
- overlay
- Status
- Stable
Origem e distribuição
- Fonte
- shadcn registry / sheet
- Licença
- MIT
- Distribuição
- Interna
Acessibilidade
- Teclado: revisado
- Leitor de tela: revisado
- Touch: revisado
- Reduced motion: revisado