Alert Dialog

Overlay

Confirmação destrutiva que bloqueia a tela e exige uma decisão explícita: não fecha ao clicar fora.

Carregando

Instalação

Recebe correções por update de versão. O caminho recomendado.

npm i @trdr/ui

import { AlertDialog } from "@trdr/ui/alert-dialog"

Uso

import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter } from "@trdr/ui/alert-dialog"

export function Exemplo() {
  return <AlertDialog />
}

Props

AlertDialogPropsestende React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Root>
AlertDialogTriggerPropsestende React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Trigger>
AlertDialogOverlayPropsestende React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
AlertDialogContentPropsestende React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>
AlertDialogHeaderPropsestende React.HTMLAttributes<HTMLDivElement>
AlertDialogFooterPropsestende React.HTMLAttributes<HTMLDivElement>
AlertDialogTitlePropsestende React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
AlertDialogDescriptionPropsestende React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
AlertDialogActionPropsestende ButtonProps
AlertDialogCancelPropsestende ButtonProps

Quando usar

Use o alert-dialog antes de uma acao destrutiva ou irreversivel: encerrar uma conta, cancelar todas as ordens em aberto, excluir uma configuracao que nao tem como recuperar. Ele existe para um unico proposito, forcar o usuario a confirmar ou recuar, por isso nao aceita fechar clicando fora do conteudo. Se a acao pode ser desfeita (um "desfazer" em um toast, por exemplo), provavelmente nao precisa desse bloqueio.

Quando nao usar

Nao use alert-dialog para navegacao, formulario longo ou qualquer fluxo que nao seja uma decisao binaria de confirmar/cancelar: isso e o Dialog ou o Sheet. Nao use para uma mensagem que so informa algo sem pedir decisao (isso e Alert ou toast). E, principalmente, nao use para uma acao que nao e destrutiva so para "chamar mais atencao": o bloqueio de clique fora e deliberado e incomoda o usuario quando usado fora de hora.

Anatomia

  • AlertDialog: a raiz, controla o estado aberto/fechado.
  • AlertDialogTrigger (data-slot="alert-dialog-trigger"): abre o dialog. Use asChild para o filho (por exemplo um Button) virar o trigger.
  • AlertDialogContent (data-slot="alert-dialog-content"): o conteudo modal, dentro de um Portal, com o mesmo scrim, raio e superficie do Dialog (sao parentes na mesma familia visual). Sem botao "x": a unica saida e uma decisao nos botoes do rodape.
  • AlertDialogHeader / AlertDialogFooter: agrupam titulo/descricao e os botoes de acao, com o mesmo espacamento do Dialog.
  • AlertDialogTitle / AlertDialogDescription: mesma tipografia do Dialog (font-display text-h5 no titulo, text-b3 text-muted-foreground na descricao), para os dois lerem como a mesma familia.
  • AlertDialogCancel: a saida segura, recebe foco automatico ao abrir. Ja renderiza o Button do sistema (variant="ghost" por padrao) por dentro, entao nao reestiliza nada, so compoe.
  • AlertDialogAction: a confirmacao da acao destrutiva. Tambem compoe o Button; passe variant="destructive" quando a acao de fato remove ou encerra algo.

Acessibilidade

O Radix marca o conteudo com role="alertdialog" (nao "dialog"), o que faz leitores de tela anunciarem o texto como um alerta que exige atencao. O foco inicial vai para o AlertDialogCancel, nunca para a acao destrutiva: isso evita que um Enter apressado confirme uma acao irreversivel sem querer. Tab fica preso dentro do conteudo, e Escape fecha como se fosse Cancel. Diferente do Dialog, clicar no overlay nao fecha: e a unica diferenca de comportamento entre os dois, e e proposital.

Slots e tokens

Todo elemento renderizado carrega um data-slot para estilizar partes internas sem depender de classe da biblioteca. Os tokens listados são extraídos do código fonte.

[data-slot="alert-dialog-content"][data-slot="alert-dialog-description"][data-slot="alert-dialog-footer"][data-slot="alert-dialog-header"][data-slot="alert-dialog-overlay"][data-slot="alert-dialog-title"][data-slot="alert-dialog-trigger"][data-slot="button"]
10 tokens usados
bg-bg-primarybg-cardborder-border-subtleoutline-noneshadow-lgtext-b3text-card-foregroundtext-foregroundtext-h5text-muted-foreground