import { CheckCircleIcon, ExclamationTriangleIcon, InformationCircleIcon, } from "@heroicons/react/24/outline"; import { Button } from "@/components/Button"; import Modal from "@/components/Modal"; import { cx } from "@/cva.config"; type Variant = "danger" | "success" | "warning" | "info"; interface ConfirmDialogProps { open: boolean; onClose: () => void; title: string; description: React.ReactNode; variant?: Variant; confirmText?: string; cancelText?: string | null; onConfirm: () => void; isConfirming?: boolean; } const variantConfig = { danger: { icon: ExclamationTriangleIcon, iconClass: "text-red-600", iconBgClass: "bg-red-100", buttonTheme: "danger", }, success: { icon: CheckCircleIcon, iconClass: "text-green-600", iconBgClass: "bg-green-100", buttonTheme: "primary", }, warning: { icon: ExclamationTriangleIcon, iconClass: "text-yellow-600", iconBgClass: "bg-yellow-100", buttonTheme: "lightDanger", }, info: { icon: InformationCircleIcon, iconClass: "text-blue-600", iconBgClass: "bg-blue-100", buttonTheme: "primary", }, } as Record< Variant, { icon: React.ElementType; iconClass: string; iconBgClass: string; buttonTheme: "danger" | "primary" | "blank" | "light" | "lightDanger"; } >; export function ConfirmDialog({ open, onClose, title, description, variant = "info", confirmText = "Confirm", cancelText = "Cancel", onConfirm, isConfirming = false, }: ConfirmDialogProps) { const { icon: Icon, iconClass, iconBgClass, buttonTheme } = variantConfig[variant]; return (

{title}

{description}
{cancelText && (
); }