Alert Dialog
Atom / modal primitive
Alert Dialog é para consequência. Ele deve dizer exatamente o que será afetado e por que confirmar é necessário.
Use quando a ação pode destruir, encerrar, publicar, escalar, sobrescrever ou afetar muitos registros. Para informação persistente não bloqueante, use Alert. Para foco curto sem alto risco, use Dialog.
Exemplos copiáveis
React
React
import * as React from "react"
type PulsoAlertDialogProps = {
open: boolean
title: string
description: string
confirmLabel: string
cancelLabel?: string
onConfirm: () => void
onOpenChange: (open: boolean) => void
}
export function PulsoAlertDialog({ open, title, description, confirmLabel, cancelLabel = "Cancelar", onConfirm, onOpenChange }: PulsoAlertDialogProps) {
const titleId = React.useId()
const descriptionId = React.useId()
if (!open) return null
return (
<div className="fixed inset-0 z-50 grid place-items-center bg-black/45 p-4">
<section role="alertdialog" aria-modal="true" aria-labelledby={titleId} aria-describedby={descriptionId} className="w-full max-w-md rounded-[var(--radius-lg)] border border-[var(--destructive-border)] bg-[var(--popover)] p-5 shadow-[var(--shadow-lg)]">
<h2 id={titleId} className="text-lg font-semibold text-[var(--fg)]">{title}</h2>
<p id={descriptionId} className="mt-2 text-sm leading-6 text-[var(--fg-muted)]">{description}</p>
<div className="mt-5 flex justify-end gap-2">
<button type="button" onClick={() => onOpenChange(false)} className="rounded-[var(--radius-md)] border border-[var(--border)] px-4 py-2 text-sm font-medium text-[var(--fg)]">{cancelLabel}</button>
<button type="button" onClick={onConfirm} className="rounded-[var(--radius-md)] bg-[var(--destructive)] px-4 py-2 text-sm font-semibold text-[var(--destructive-foreground)]">{confirmLabel}</button>
</div>
</section>
</div>
)
}<PulsoAlertDialog
open={open}
onOpenChange={setOpen}
title="Encerrar caso PLS-012?"
description="Esta ação encerra o caso para todos os operadores e registra a decisão no audit trail."
confirmLabel="Encerrar caso"
onConfirm={closeCase}
/>Regras
- Título diz o que vai acontecer.
- Descrição diz quem/quantos/o quê será afetado.
- Botão destrutivo não pode ter label genérico.
- Cancelar deve ser claro e seguro.
- Ação em massa nomeia o escopo real.
- Não esconda incerteza de IA em texto secundário.
Last updated on