'use client'; import { useEffect, useState } from 'react'; import { CheckCircle, XCircle, Info, X } from 'lucide-react'; export interface ToastProps { message: string; type?: 'success' | 'error' | 'info'; duration?: number; onClose?: () => void; } export default function Toast({ message, type = 'info', duration = 3000, onClose }: ToastProps) { const [isVisible, setIsVisible] = useState(true); useEffect(() => { const timer = setTimeout(() => { setIsVisible(false); setTimeout(() => { onClose?.(); }, 300); // 等待动画完成 }, duration); return () => clearTimeout(timer); }, [duration, onClose]); const handleClose = () => { setIsVisible(false); setTimeout(() => { onClose?.(); }, 300); }; const icons = { success: , error: , info: , }; const colors = { success: 'bg-green-500/90', error: 'bg-red-500/90', info: 'bg-blue-500/90', }; return (
{icons[type]}
{message}
); }