import * as React from 'react'; import { X } from 'lucide-react'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogTitle, } from '@/components'; interface ConfirmDialogProps { open: boolean; onOpenChange: (open: boolean) => void; title: string; description: string | React.ReactNode; confirmText?: string; cancelText?: string; onConfirm: () => void | Promise; destructive?: boolean; isLoading?: boolean; } export function ConfirmDialog({ open, onOpenChange, title, description, confirmText = 'Confirm', cancelText = 'Cancel', onConfirm, destructive = false, isLoading = false, }: ConfirmDialogProps) { const handleConfirm = async () => { await onConfirm(); onOpenChange(false); }; return ( {/* Header with close button */}
{title}
{/* Description */}
{typeof description === 'string' ? ( {description} ) : (
{description}
)}
{/* Footer */} {cancelText} { void handleConfirm(); }} disabled={isLoading} className={`h-9 w-30 px-3 py-2 text-sm font-medium rounded shadow-[0px_1px_2px_0px_rgba(0,0,0,0.1)] dark:shadow-[0px_1px_2px_0px_rgba(0,0,0,0.1)] ${ destructive ? 'bg-red-600 hover:bg-red-700 text-white dark:bg-red-200 dark:hover:bg-red-300 dark:text-red-700' : 'bg-zinc-950 hover:bg-zinc-900 text-white dark:bg-emerald-300 dark:text-black dark:hover:bg-emerald-400' }`} > {isLoading ? 'Processing...' : confirmText}
); }