Pular para o conteúdo
// visualizar em
salvo em todas as páginas

AlertDialog

Diálogo de alerta que interrompe para confirmar uma decisão difícil de desfazer, como excluir um projeto ou mandar um e-mail para milhares de pessoas. O foco começa na escolha segura, e um clique fora não fecha.

Feito com Base UIPadrão WAI-ARIA Alert DialogComponente clienteCódigo ↗

Instalação

Configure o Camaleo uma vez (Instalação) e importe o que precisar. Ele renderiza no cliente.

import { AlertDialog, AlertDialogTrigger, AlertDialogContent, AlertDialogTitle, AlertDialogDescription, AlertDialogClose, DialogActions } from "@camaleo/react";

Anatomia

As mesmas partes do Dialog, então cada estilo cuida dos dois do mesmo jeito. O popup ganha data-kind="alert" e role="alertdialog".

Exemplos

Cada exemplo é um arquivo real que você pode copiar. Abra: o dialog usa o estilo, o modo e a cor escolhidos na barra acima.

minimal · light · #3fa34d

Chaves de API (3)

  • Servidor de produção
    Criada em 14/03/2026
  • Servidor de homologação
    Criada em 02/06/2026
  • Integração Zapier
    Criada em 21/09/2026

Excluir uma linha sem perder o foco

Clique em Excluir. A linha e o botão somem, então o finalFocus leva o foco para o título da lista e uma mensagem de status confirma.

Digitar o nome para confirmar

Para os piores erros, como excluir um repositório, peça para digitar o nome. O botão fica desativado até o nome bater.

Espera a requisição

Clique em Sair dos aparelhos. Enquanto a requisição roda, o Esc e o Cancelar não fazem nada, para a pessoa ver se deu certo antes de o dialog fechar.

Foco no Cancelar

O foco vai para o primeiro elemento focável. Quando ele é uma caixa de seleção, aponte o initialFocus para o Cancelar, assim um Enter apressado não confirma.

Aberto de um menu

Deixe o dialog fora do menu e controle com open: o menu fecha, o dialog fica, e o finalFocus volta para o botão do menu.

Não é só para excluir

Tudo o que não tem volta merece uma confirmação, como enviar uma newsletter. Use um botão solid quando não for destrutivo.

Em contexto

Confirmações protegem as ações que doem quando dão errado. São pedaços inteiros de interface para copiar, no estilo que você escolheu.

Zona de perigo

Estas ações afetam todo mundo no projeto.

Arquivar projeto

Oculta o projeto e deixa só para leitura. Dá para restaurar depois.

Excluir projeto

Exclui o projeto com todas as páginas. Isso não pode ser desfeito.

Zona de perigoCard · Separator · AlertDialog

Notas da versão

Descartar alterações não salvasCard · Field · Textarea · AlertDialog

Cobrança

Plano EquipeAtivo

R$ 99 por pessoa / mês · 8 vagas · renova em 12/11/2026

Cancelar uma assinaturaCard · Badge · AlertDialog

Boas práticas

FaçaDiga a ação no botão.

"Excluir 3 arquivos" diz o que acontece. A pessoa responde sem reler a pergunta.

Evite"Tem certeza?" e "OK".

Nenhum dos dois diz o que vai acontecer, então a pessoa clica sem ler.

FaçaSó para decisões que justificam interromper.

Excluir um workspace que 12 pessoas usam vale a pausa.

EviteUm alerta para dizer que deu certo.

"Salvo" não pede resposta. Interromper por isso ensina a dispensar alertas sem ler. Use um toast.

Props

PropriedadeTipoPadrãoDescrição
onOpenChange(open, eventDetails) => void—Chamado quando o dialog abre ou fecha. eventDetails.reason diz o motivo, por exemplo escape-key. Ignore a chamada para manter o dialog aberto enquanto uma requisição roda.
openboolean—Se o dialog está aberto. Use com onOpenChange para controlar o estado.
defaultOpenbooleanfalseSe o dialog começa aberto, sem controlar o estado.

Ele é sempre modal e nunca fecha com clique fora. As outras partes recebem as props do seu elemento, mais render.

O AlertDialogContent decide para onde vai o foco:

PropriedadeTipoPadrãoDescrição
initialFocusboolean | RefObject | (openType) => HTMLElement | boolean—O elemento que recebe o foco ao abrir. Por padrão, o primeiro elemento focável: ponha o Cancelar primeiro.
finalFocusboolean | RefObject | (closeType) => HTMLElement | boolean—O elemento que recebe o foco ao fechar. Por padrão, o gatilho. Defina quando o gatilho some depois da ação.
Aceita também todas as props da primitiva por baixo e os atributos nativos.

Styling hooks

Ele usa os mesmos slots do dialog. Use data-kind="alert" para mudar só as confirmações.

Atributos

data-kind"alert" no popup
data-openpresente quando aberto
data-starting-stylepresente enquanto abre
data-ending-stylepresente enquanto fecha

Tokens que ele lê

Cor

--cml-border--cml-fg--cml-fg-muted--cml-focus-offset--cml-focus-ring--cml-focus-width--cml-radius-surface--cml-shadow-surface--cml-surface-padding--cml-surface-raised

Forma e tamanho

--cml-border-width--cml-gap

Tipografia e movimento

--cml-duration-base--cml-ease-standard--cml-font-display--cml-font-weight-display--cml-motion-distance--cml-motion-scale

Só deste componente

--cml-backdrop--cml-dialog-border
/* mais estreito e centralizado, só nas confirmações */
[data-slot="dialog-popup"][data-kind="alert"] {
  text-align: center;
  inline-size: min(24rem, calc(100vw - 2rem));
}

Acessibilidade

Enter / SpaceNo gatilho, abre o dialog com o foco no primeiro botão, Cancelar.
TabPassa entre os botões. O foco fica dentro do dialog e dá a volta.
Shift + TabVolta, indo para o último botão depois do primeiro.
EscapeFecha o dialog, como o Cancelar. O foco volta para o gatilho.

Relacionados

Esta página foi útil? · Editar esta página no GitHub