UI

Dialog

Janela modal sobre a página para tarefas curtas que exigem atenção, como editar um cadastro ou ver detalhes de um pedido.

Instalação

npx shadcn@latest add @lenstech/dialog

Uso

import { Button } from "@/components/ui/button"
import {
  Dialog,
  DialogClose,
  DialogContent,
  DialogDescription,
  DialogFooter,
  DialogHeader,
  DialogTitle,
} from "@/components/ui/dialog"
<Dialog>
  <Button variant="outline">Editar cliente</Button>
  <DialogContent>
    <DialogHeader>
      <DialogTitle>Editar cliente</DialogTitle>
      <DialogDescription>Atualize os dados de contato.</DialogDescription>
    </DialogHeader>
    {/* conteúdo */}
    <DialogFooter>
      <DialogClose>Cancelar</DialogClose>
      <Button slot="close">Salvar</Button>
    </DialogFooter>
  </DialogContent>
</Dialog>

Sem DialogTrigger: o gatilho é o primeiro filho

Dialog é o DialogTrigger do React Aria. Não existe um componente DialogTrigger separado como no shadcn: o primeiro filho (qualquer botão pressionável) abre o diálogo e o segundo é o <DialogContent>. Qualquer botão com slot="close" — como o DialogClose — fecha o diálogo automaticamente.

O diálogo já cuida da acessibilidade: prende o foco dentro da janela, fecha com Esc, bloqueia a rolagem da página e devolve o foco ao gatilho ao fechar. DialogTitle rotula o diálogo para leitores de tela — sempre inclua um.

Exemplos

Com formulário

DialogContent aceita uma função como filho, que recebe close. Use-a para fechar o diálogo depois de um envio válido.

Tamanhos

Use size (sm, md, lg, xl ou full). O padrão é md.

Controlado

Passe isOpen e onOpenChange para Dialog quando precisar abrir o diálogo por código (após salvar, ao clicar numa linha de tabela etc.). Nesse caso não é preciso um gatilho como filho.

Aberto: não

Conteúdo longo

Quando o conteúdo passa da altura da tela, o próprio diálogo ganha rolagem interna.

Quando usar

  • Use para tarefas curtas e focadas: editar um cadastro, ver os detalhes de um pedido, um formulário rápido.
  • Não use para confirmar ações destrutivas — use Alert Dialog.
  • Não use para avisos passageiros ("Salvo com sucesso") — use Toast.
  • Para filtros, menu mobile ou edição mantendo a página visível ao lado, prefira Sheet.
  • Para conteúdo pequeno ancorado a um botão, prefira Popover.
  • Fluxos longos (várias etapas, muitos campos) ficam melhores em uma página própria.

API

Dialog

É o DialogTrigger do React Aria. Props principais:

Prop

Type

DialogContent

Aceita todas as props do Dialog do React Aria, mais:

Prop

Type

Demais partes

Prop

Type

On this page