UI

Alert Dialog

Diálogo de confirmação que interrompe o usuário antes de uma ação importante ou irreversível, como excluir um cliente.

Instalação

npx shadcn@latest add @lenstech/alert-dialog

Uso

import { AlertDialog, AlertDialogContent } from "@/components/ui/alert-dialog"
import { Button } from "@/components/ui/button"
<AlertDialog>
  <Button variant="destructive">Excluir cliente</Button>
  <AlertDialogContent
    variant="destructive"
    title="Excluir cliente?"
    description="Essa ação não pode ser desfeita."
    onConfirm={() => excluirCliente(id)}
  />
</AlertDialog>

Com title, description e onConfirm o componente monta cabeçalho, botões de cancelar/confirmar e o comportamento de fechar sozinho. Para layouts diferentes, veja Composição manual.

Diferenças para o Dialog

O Alert Dialog usa role="alertdialog", não fecha ao clicar fora e não tem o botão "X": o usuário precisa escolher explicitamente entre cancelar e confirmar. Assim como no Dialog, o primeiro filho de AlertDialog é o gatilho e o segundo é o conteúdo.

Exemplos

Ação assíncrona

Se onConfirm retornar uma Promise, o botão de confirmar entra em isPending (com spinner), o cancelar fica desabilitado e o Esc é bloqueado até a Promise resolver. Ao resolver, o diálogo fecha; se ela rejeitar, o diálogo continua aberto para o usuário tentar de novo.

Confirmação neutra

Sem variant="destructive" o botão de confirmar usa o estilo primário e não há ícone de alerta. O rótulo padrão passa a ser "Confirmar".

Composição manual

Sem a prop title, os filhos são renderizados livremente. Use AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel e AlertDialogAction — e a função close para fechar ao confirmar.

Controlado

Use isOpen e onOpenChange no AlertDialog para abrir por código — por exemplo, ao tentar sair de uma tela com alterações não salvas.

Ficha com alterações não salvas.

Quando usar

  • Use antes de ações destrutivas ou difíceis de desfazer: excluir, cancelar agendamento, descartar alterações.
  • Use com moderação: se tudo pede confirmação, o usuário passa a clicar sem ler.
  • Não use para formulários ou conteúdo livre — use Dialog.
  • Não use para avisar que algo deu certo — use Toast.
  • Se a ação pode ser desfeita facilmente, prefira executar direto e oferecer "Desfazer" num toast com ação.

API

AlertDialog

Mesmo componente que Dialog (DialogTrigger do React Aria): aceita isOpen, defaultOpen e onOpenChange.

AlertDialogContent

Aceita as props de DialogContent (exceto showCloseButton), mais:

Prop

Type

Partes para composição

Prop

Type

On this page