diff --git a/src/design-system/composites/Toast/Toast.tsx b/src/design-system/composites/Toast/Toast.tsx index a640232..66fefda 100644 --- a/src/design-system/composites/Toast/Toast.tsx +++ b/src/design-system/composites/Toast/Toast.tsx @@ -81,8 +81,9 @@ export function ToastProvider({ children }: { children: ReactNode }) { const toast = useCallback( (options: ToastOptions): string => { const id = `toast-${Date.now()}-${Math.random().toString(36).slice(2, 7)}` - const duration = options.duration ?? DEFAULT_DURATION const variant = options.variant ?? 'info' + // Error toasts persist until manually dismissed; others auto-close after DEFAULT_DURATION + const duration = options.duration ?? (variant === 'error' ? 0 : DEFAULT_DURATION) const newToast: ToastItem = { id, @@ -99,11 +100,13 @@ export function ToastProvider({ children }: { children: ReactNode }) { return next.slice(-MAX_TOASTS) }) - // Schedule auto-dismiss - const timer = setTimeout(() => { - dismiss(id) - }, duration) - timersRef.current.set(id, timer) + // Schedule auto-dismiss (duration 0 = persist until manual dismiss) + if (duration > 0) { + const timer = setTimeout(() => { + dismiss(id) + }, duration) + timersRef.current.set(id, timer) + } return id },