Alert
Mensagens inline para status e feedback, com uma superfície neutra, um ícone colorido e um botão de dispensar que recolhe suavemente.
pnpm dlx shadcn@latest add https://hextaui.com/r/alert.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/alert.tsx components/ui/button.tsx lib/motion.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Variantes
variant colore apenas o ícone, então a superfície permanece neutra e o status é lido de relance sem chamar atenção demais.
Suave
appearance="soft" remove a borda e tinge toda a superfície com a cor da variant.
Conteúdo parcial
Só título, só descrição e sem ícone ficam todos alinhados sem classes extras. O grid coloca cada parte em sua própria coluna.
Ações
Coloque botões em <AlertAction />. Eles se alinham à primeira linha do título, mesmo quando ele quebra de linha.
Dispensável
Adicione <AlertClose /> para que as pessoas possam dispensá-lo. O alerta colapsa suavemente e o conteúdo abaixo sobe. Dispense-o pelo teclado e o foco vai para o próximo controle, aqui “Reset”.
Controlado
Passe open e onOpenChange para controlá-lo com seu próprio estado. Ele anima tanto a entrada quanto a saída.
Cancelar um fechamento
Chame event.preventDefault() no onClick do botão de fechar para manter o alerta aberto, por exemplo para pedir confirmação antes.
Inserido após o carregamento
Alertas montados depois do carregamento da página aparecem com fade e deslize, e os leitores de tela os anunciam. Alertas que já estão no HTML do servidor aparecem sem movimento.
Conteúdo rico
Ícones inline e links dentro da descrição mantêm o próprio estilo. Use render para dar um nível de título ao title.
Da direita para a esquerda
O ícone, o conteúdo e o botão de fechar são espelhados conforme a direção de leitura.
| Tecla | Ação |
|---|---|
| Tab | Move o foco para links, ações e o botão de fechar dentro do alerta. |
| EnterSpace | Ativa o botão de fechar em foco. Depois que o alerta colapsa, o foco vai para o próximo elemento focável, ou para o anterior quando não há nenhum depois. |
- Alertas
destructiveewarningrecebemrole="alert"e são anunciados imediatamente. Todas as outras variants recebemrole="status"e esperam uma pausa. - O botão de fechar tem o rótulo “Dismiss”. Passe
aria-labelpara traduzi-lo. - O foco nunca se perde quando um alerta em foco é fechado.
- Com movimento reduzido ativado, os alertas aparecem e desaparecem instantaneamente.
Cada parte aceita os atributos do elemento que renderiza. As variants são exportadas como alertVariants para estilizar outros elementos da mesma forma.
| Prop | Tipo | Padrão |
|---|---|---|
variantColore o ícone. destructive e warning são anunciados de forma assertiva. | "default" | "destructive" | "success" | "info" | "warning" | "default" |
appearance | "outline" | "soft" | "outline" |
open | boolean | – |
defaultOpen | boolean | true |
onOpenChangeChamado quando o botão de fechar é pressionado. | (open: boolean) => void | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="alert" | Seleciona o alerta no CSS. |
data-variant | A variante atual. |
data-appearance | A aparência atual. |
data-ending-style | Presente enquanto o alerta colapsa após ser dispensado. |
| Prop | Tipo | Padrão |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="alert-title" | Seleciona os títulos no CSS. |
| Prop | Tipo | Padrão |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="alert-description" | Seleciona as descrições no CSS. Links simples dentro delas são sublinhados para você. |
| Prop | Tipo | Padrão |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="alert-action" | Seleciona a área de ações no CSS. |
Um <Button /> ghost que fecha o alerta mais próximo. Aceita todas as props de Button e deve ser usado dentro de <Alert />.
| Prop | Tipo | Padrão |
|---|---|---|
aria-label | string | "Dismiss" |
children | ReactNode | <IconX /> |
onClickChame event.preventDefault() para manter o alerta aberto. | (event: MouseEvent) => void | – |
| Atributo | Descrição |
|---|---|
data-slot="alert-close" | Seleciona o botão de fechar no CSS. |
- ButtonBotões em todas as variantes e tamanhos, com um fluxo integrado de carregamento, sucesso e erro que dispensa o spinner em requisições rápidas.
- MotionAs curvas de easing, as durações e a verificação de movimento reduzido com que todo componente anima, além de hooks para transformações de tamanho e destaques deslizantes.
- EmptyUm espaço reservado para telas que ainda não têm nada a mostrar, com ícone, mensagem e a próxima ação.
- ProgressUma barra ou anel que mostra o quanto uma tarefa avançou, suaviza entre as atualizações e desliza enquanto o total é desconhecido.
- SkeletonPlaceholders que esperam 150ms antes de aparecer, assumem o tamanho exato do conteúdo que envolvem e o fazem surgir com fade sem mover nada.
- SpinnerUm indicador de carregamento com tracinhos no estilo Apple ou um anel que "respira", que pode esperar antes de aparecer e permanecer o suficiente para não piscar.
Usado em blocos
Blocos que se baseiam em Alert.
- BillingPlano e uso para um produto de IA, no estilo de Cursor, Claude e Vercel. Um medidor de uso dividido por modelo que projeta o fim do ciclo e avisa antes de os créditos acabarem, um gráfico diário que você pode percorrer, um limite de gastos com alertas que você pode pré-visualizar no medidor, mudanças de plano com proporcional exato, um formulário de cartão com validação real e faturas que baixam como PDF.
- MarkdownMarkdown feito para respostas de IA. Ele faz streaming com suavidade e nunca mostra sintaxe pela metade, com títulos para os quais você pode criar links, tabelas que você pode copiar como Markdown ou CSV, callouts do GitHub, listas de tarefas, notas de rodapé, imagens, citações inline e blocos de código completos.