'use client'; import { X, AlertTriangle, Info, CheckCircle, XCircle } from 'lucide-react'; import { useEffect } from 'react'; interface CustomModalProps { isOpen: boolean; onClose: () => void; title: string; message: string; type?: 'warning' | 'error' | 'success' | 'info'; confirmText?: string; cancelText?: string; onConfirm?: () => void; showCancel?: boolean; } export default function CustomModal({ isOpen, onClose, title, message, type = 'info', confirmText = 'OK', cancelText = 'Cancel', onConfirm, showCancel = false, }: CustomModalProps) { useEffect(() => { if (isOpen) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = 'unset'; } return () => { document.body.style.overflow = 'unset'; }; }, [isOpen]); if (!isOpen) return null; const getIcon = () => { switch (type) { case 'warning': return ; case 'error': return ; case 'success': return ; default: return ; } }; const getColors = () => { switch (type) { case 'warning': return { bg: 'bg-yellow-50 dark:bg-yellow-900/20', border: 'border-yellow-200 dark:border-yellow-800', iconBg: 'bg-yellow-100 dark:bg-yellow-900/30', }; case 'error': return { bg: 'bg-red-50 dark:bg-red-900/20', border: 'border-red-200 dark:border-red-800', iconBg: 'bg-red-100 dark:bg-red-900/30', }; case 'success': return { bg: 'bg-green-50 dark:bg-green-900/20', border: 'border-green-200 dark:border-green-800', iconBg: 'bg-green-100 dark:bg-green-900/30', }; default: return { bg: 'bg-blue-50 dark:bg-blue-900/20', border: 'border-blue-200 dark:border-blue-800', iconBg: 'bg-blue-100 dark:bg-blue-900/30', }; } }; const colors = getColors(); const handleConfirm = () => { if (onConfirm) { onConfirm(); } onClose(); }; return (
{/* Backdrop */}
{/* Modal */}
{/* Close button */} {/* Content */}
{/* Icon */}
{getIcon()}
{/* Title */}

{title}

{/* Message */}

{message}

{/* Actions */}
{showCancel && ( )}
); }