Sonner
Sistema de toasts transitórios para feedback pós-ação
Sonner é a integração do Uranus com a lib sonner — um toaster moderno, empilhável e acessível. Use para confirmar ações concluídas, mostrar erros recuperáveis ou anunciar eventos assíncronos sem roubar o foco do usuário. Para mensagens persistentes, use Alert.
'use client';
import { Button, Toaster, toast } from '@uranus-workspace/design-system';
export default function SonnerDefault() {
return (
<div className="flex flex-col items-center gap-4">
<Button
onClick={() =>
toast.success('Projeto salvo', {
description: 'Todas as mudanças foram publicadas com sucesso.',
})
}
>
Salvar projeto
</Button>
<Toaster />
</div>
);
}
Anatomia
- Toaster — componente de provider que deve ser renderizado uma única vez por app, tipicamente no layout raiz. Recebe tema, ícones padrão do Lucide e classes do design system.
- toast — função imperativa usada para disparar notificações. Re-exportada do pacote
sonnervia@uranus-workspace/design-system. Métodos disponíveis:toast(),toast.success(),toast.error(),toast.info(),toast.warning(),toast.loading()etoast.promise().
Uso
Monte o Toaster uma vez no layout da aplicação:
// app/layout.tsx
import { Toaster } from '@uranus-workspace/design-system';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html>
<body>
{children}
<Toaster />
</body>
</html>
);
}Depois, dispare toasts de qualquer client component:
'use client';
import { Button, toast } from '@uranus-workspace/design-system';
<Button
onClick={() =>
toast.success('Projeto salvo', {
description: 'Todas as mudanças foram publicadas com sucesso.',
})
}
>
Salvar
</Button>Faça
- Use
toast.successetoast.errorpara confirmar ou reportar o resultado de uma ação do usuário. - Escreva mensagens curtas e orientadas ao resultado — "Projeto salvo", não "A operação foi concluída com sucesso".
- Use
toast.promisepara encadear loading → sucesso/erro em uma única chamada.
Não faça
- Não use toasts para mensagens críticas que o usuário precisa reter — eles desaparecem. Para isso use
DialogouAlert. - Não empilhe múltiplos toasts simultâneos para a mesma ação.
- Não esconda erros importantes num toast de 3 segundos.
Acessibilidade
- O provider do
sonneranuncia as mensagens em uma regiãoaria-liveapropriada (role="status"para info,role="alert"para erros). - Respeita
prefers-reduced-motionautomaticamente. - Mantém o foco intacto — toasts nunca interrompem o fluxo de teclado.