Alert
Mensagem de destaque fixa na página para informar, confirmar ou alertar sobre algo importante.
'use client';
import { Info } from 'lucide-react';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
export default function AlertDemo() {
return (
<Alert variant="info" className="max-w-lg">
<Info />
<AlertTitle>Atendimento em horário especial</AlertTitle>
<AlertDescription>
No feriado de 12 de outubro a clínica funciona das 8h às 12h. Agendamentos online seguem normais.
</AlertDescription>
</Alert>
);
}Instalação
npx shadcn@latest add @lenstech/alertUso
import { Info } from "lucide-react"
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"<Alert variant="info">
<Info />
<AlertTitle>Atendimento em horário especial</AlertTitle>
<AlertDescription>No feriado a clínica funciona das 8h às 12h.</AlertDescription>
</Alert>O ícone é opcional: quando um <svg> é o primeiro filho, o layout reserva uma coluna para ele e o colore conforme a
variante.
Anúncio para leitores de tela
As variantes warning e destructive usam role="alert" (anunciadas imediatamente); as demais usam
role="status". Se o alerta já estiver na página desde o carregamento e não for urgente, você pode sobrescrever
com a prop role.
Exemplos
Variantes
'use client';
import { CircleCheck, CircleX, Info, Terminal, TriangleAlert } from 'lucide-react';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
export default function AlertVariants() {
return (
<div className="grid w-full max-w-lg gap-4">
<Alert>
<Terminal />
<AlertTitle>Padrão</AlertTitle>
<AlertDescription>Seu site foi publicado em lojaexemplo.com.br.</AlertDescription>
</Alert>
<Alert variant="info">
<Info />
<AlertTitle>Informação</AlertTitle>
<AlertDescription>O relatório mensal de acessos fica pronto no dia 5.</AlertDescription>
</Alert>
<Alert variant="success">
<CircleCheck />
<AlertTitle>Sucesso</AlertTitle>
<AlertDescription>Pagamento da fatura de setembro confirmado.</AlertDescription>
</Alert>
<Alert variant="warning">
<TriangleAlert />
<AlertTitle>Atenção</AlertTitle>
<AlertDescription>O certificado SSL do domínio vence em 7 dias.</AlertDescription>
</Alert>
<Alert variant="destructive">
<CircleX />
<AlertTitle>Erro</AlertTitle>
<AlertDescription>Não conseguimos sincronizar o estoque com a loja virtual.</AlertDescription>
</Alert>
</div>
);
}Só título ou só descrição
'use client';
import { TriangleAlert } from 'lucide-react';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
export default function AlertSimple() {
return (
<div className="grid w-full max-w-lg gap-4">
<Alert variant="warning">
<TriangleAlert />
<AlertTitle>Estoque baixo: restam 3 unidades.</AlertTitle>
</Alert>
<Alert variant="success">
<AlertDescription>Sem ícone e sem título: apenas a mensagem, para avisos curtos.</AlertDescription>
</Alert>
</div>
);
}Lista de erros
Útil no topo de um formulário para resumir o que precisa ser corrigido. A descrição aceita parágrafos e listas.
Corrija os campos abaixo e tente novamente:
- CNPJ inválido
- Informe um telefone para contato
- Aceite os termos de uso
'use client';
import { CircleX } from 'lucide-react';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
export default function AlertFormErrors() {
return (
<Alert variant="destructive" className="max-w-lg">
<CircleX />
<AlertTitle>Não foi possível enviar o cadastro</AlertTitle>
<AlertDescription>
<p>Corrija os campos abaixo e tente novamente:</p>
<ul className="list-inside list-disc text-sm">
<li>CNPJ inválido</li>
<li>Informe um telefone para contato</li>
<li>Aceite os termos de uso</li>
</ul>
</AlertDescription>
</Alert>
);
}Com ação
A mensalidade de hospedagem venceu em 10/09. Regularize para evitar a suspensão do site.
'use client';
import { CreditCard } from 'lucide-react';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
import { Button } from '@/components/ui/button';
export default function AlertWithAction() {
return (
<Alert variant="warning" className="max-w-lg">
<CreditCard />
<AlertTitle>Fatura em aberto</AlertTitle>
<AlertDescription>
<p>A mensalidade de hospedagem venceu em 10/09. Regularize para evitar a suspensão do site.</p>
<Button size="sm" variant="outline" className="mt-2">
Ver fatura
</Button>
</AlertDescription>
</Alert>
);
}Quando usar
- Use para mensagens que devem permanecer visíveis: aviso de horário especial, fatura em aberto, resumo de erros.
- Não use para confirmar uma ação que acabou de acontecer ("Salvo!") — use
Toast. - Não use para pedir confirmação — use
Alert Dialog. - Para um rótulo curto de status ("Pago", "Pendente"), use
Badge.
API
Alert
Aceita todas as props de um <div>, mais:
Prop
Type
AlertTitle e AlertDescription
<div>s estilizados. AlertTitle é limitado a uma linha; AlertDescription aceita parágrafos, listas e botões.