Drawer
Painel que desliza a partir de uma borda da tela.
- Navegadores
- Chrome 123+Firefox 121+Safari 17.5+
- Nível
- 0
- Tamanho compactado
- 4.01 kB
- Limite de layout forçado
- 0 ms
- Limite do axe
- 0
- Compatível com SSR
- Sim
- Construído sobre
- elements/dialog
- Contrato publicado
- Ambiente de teste
Experimentar
API
DrawerPanel
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
size | "sm" | "md" | "lg" | "full" | "md" | Larguras em computadores: 24rem, 32rem, 40rem ou largura disponível. Em dispositivos móveis, todos os tamanhos viram painéis inferiores verticais. |
dismiss | "any" | "closerequest" | "none" | "any" | Política nativa de fechamento. Any permite fundo, Escape e gesto para baixo em dispositivos móveis; none exige um controle explícito de fechamento. |
backdrop | "opaque" | "transparent" | "opaque" | Aparência do fundo; não altera a semântica modal. |
footer | ReactNode | — | Ações após o corpo rolável. |
id* | string | — | Id único do diálogo para o qual o acionador e o botão de fechar apontam, permitindo abrir e fechar o painel antes da hidratação. |
trigger* | ReactNode | — | Conteúdo do botão que abre o painel. |
title* | ReactNode | — | Título renderizado dentro do painel e usado como nome acessível. |
description | ReactNode | — | Texto de apoio renderizado abaixo do título e referenciado por aria-describedby. |
children | ReactNode | — | Conteúdo do corpo entre a descrição e o botão de fechar. |
side | "top" | "right" | "bottom" | "left" | "bottom" | Borda pela qual o painel desliza para entrar. |
closeLabel | string | "Close" | Rótulo acessível do ícone circular de fechar. |
className | string | — | Classe aplicada ao elemento de diálogo. |
Drawer.Root (client)
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
open | boolean | — | Estado de abertura controlado. |
defaultOpen | boolean | — | Estado de abertura inicial não controlado. |
onOpenChange | DialogChangeHandler | — | Chamado com o próximo estado de abertura e os detalhes da causa da mudança. |
side | "top" | "right" | "bottom" | "left" | "bottom" | Borda pela qual o painel desliza para entrar, que também define o eixo de arraste. |
modal | boolean | true | Abra com showModal() para deixar o restante da página inerte atrás de um fundo. |
dismissible | boolean | true | Permita arrastar além do último ponto de parada para fechar o painel. |
snapPoints | readonly number[] | — | Frações do tamanho do painel em que ele se fixa ao ser arrastado. |
activeSnapPoint | number | — | Ponto de parada controlado, como um dos valores de snapPoints. |
defaultActiveSnapPoint | number | — | Ponto de parada inicial não controlado. |
onSnapChange | (snap: number) => void | — | Chamado com o ponto de parada em que o painel se fixou. |
children | ReactNode | — | As partes Trigger, Content e internas. |
Drawer.Trigger (client)
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
className | string | — | Classe aplicada ao botão acionador. |
onClick | (event: MouseEvent<HTMLButtonElement>) => void | — | Chamado quando o acionador é clicado, antes de o painel abrir. |
ref | Ref<HTMLButtonElement> | — | Ref do botão acionador, que recebe foco novamente quando o painel fecha. |
children | ReactNode | — | Conteúdo do botão acionador. |
Drawer.Content (client)
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
className | string | — | Classe aplicada ao elemento de diálogo. |
style | CSSProperties | — | Estilo inline combinado com a transformação de arraste aplicada pelo painel. |
onCancel | ReactEventHandler<HTMLDialogElement> | — | Chamado no evento cancel do diálogo nativo, como ao pressionar Escape. |
onClose | ReactEventHandler<HTMLDialogElement> | — | Chamado no evento close do diálogo nativo. |
ref | Ref<HTMLDialogElement> | — | Ref do elemento de diálogo. |
children | ReactNode | — | Conteúdo do painel. |
Drawer.Title (client)
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
className | string | — | Classe aplicada ao elemento de título. |
children | ReactNode | — | Conteúdo do título, que se torna o nome acessível do painel. |
Drawer.Description (client)
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
className | string | — | Classe aplicada ao elemento de descrição. |
children | ReactNode | — | Conteúdo da descrição, referenciado por aria-describedby. |
Drawer.Close (client)
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
className | string | — | Classe aplicada ao botão de fechar. |
onClick | (event: MouseEvent<HTMLButtonElement>) => void | — | Chamado quando o botão de fechar é clicado, antes de o painel fechar. |
children | ReactNode | — | Conteúdo do botão de fechar. |
Drawer.Handle (client)
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
className | string | — | Classe aplicada à alça de arraste. |
onPointerDown | (event: PointerEvent<HTMLDivElement>) => void | — | Chamado quando um arraste começa na alça. |
onPointerMove | (event: PointerEvent<HTMLDivElement>) => void | — | Chamado conforme o ponteiro se move durante um arraste. |
onPointerUp | (event: PointerEvent<HTMLDivElement>) => void | — | Chamado quando o arraste termina e o painel se fixa em um ponto de parada. |
onPointerCancel | (event: PointerEvent<HTMLDivElement>) => void | — | Chamado quando o navegador cancela o arraste. |
Teclado
| Tecla | Ação |
|---|---|
| Enter / Space | Abra o diálogo pelo acionador ou ative Close |
| Escape | Solicite o fechamento, exceto quando dismiss for none |
| Tab / Shift+Tab | Mova o foco dentro do diálogo modal |
Acessibilidade
DrawerPanel usa um diálogo com ids de destino; por isso, abertura, fechamento, contenção e retorno de foco funcionam antes da hidratação; dismiss controla o fundo e Escape. Os painéis têm larguras sm, md, lg e full e viram painéis inferiores em celulares. O gesto começa na alça ou no cabeçalho, mantendo a rolagem do corpo. A API de cliente acrescenta estado controlado e pontos de parada.
Pontos de integração de estilos
data-uiify-drawerdata-partdata-sidedata-sizedata-backdropdata-statedata-dragging--uiify-drawer-inline-size--uiify-drawer-transform--uiify-sheet-offset