🧱 Суть
Для сложного дизайна уведомлений можно вынести стили и поведение в собственный слой над Sonner.
📦 Проблема
При большом количестве уведомлений повторение классов приводит к разрозненным стилям.
Например:
toast.success('Saved', {
className: 'border-green-500 ...'
})во многих местах становится сложно поддерживать.
✅ Решение
Создать единый компонент или утилиту с вариантами стилей.
💻 Код
Вариант через class-variance-authority
Создаём варианты Toast:
const toastVariants = cva(
"backdrop-blur-md bg-white/20 dark:bg-black/70 border-2 rounded-2xl shadow-lg",
{
variants: {
type: {
success: "border-l-4 border-l-green-500",
error: "border-l-4 border-l-red-500",
},
},
}
);Использование:
notify.success('Успешно!', {
className: 'font-medium',
});Кастомный Toast
Если нужен полностью свой UI:
toast.custom((id) => (
<div className="
flex items-center gap-3
p-4
backdrop-blur-xl
bg-white/10
border
rounded-full
shadow-lg
">
<Loader2 className="w-5 h-5 animate-spin" />
<p className="font-medium">
Загрузка данных...
</p>
<button onClick={() => toast.dismiss(id)}>
<X className="w-4 h-4" />
</button>
</div>
));🎯 Вывод
- Простые уведомления →
toastOptions. - Большой проект → отдельная утилита
notify. - Сложный дизайн →
toast.custom. class-variance-authorityпомогает держать варианты Toast в одном месте.