'use client'; import { useEffect, type ReactNode } from 'react'; import { cn } from '@/lib/utils/cn'; interface AppModalProps { isOpen: boolean; title: string; description?: string; children: ReactNode; footer?: ReactNode; onClose: () => void; size?: 'md' | 'lg' | 'xl'; } const sizeClassNameMap = { md: 'max-w-2xl', lg: 'max-w-4xl', xl: 'max-w-5xl', } satisfies Record, string>; export function AppModal({ isOpen, title, description, children, footer, onClose, size = 'lg', }: AppModalProps) { useEffect(() => { if (!isOpen) { return; } const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape') { onClose(); } }; const previousOverflow = document.body.style.overflow; document.body.style.overflow = 'hidden'; window.addEventListener('keydown', handleKeyDown); return () => { document.body.style.overflow = previousOverflow; window.removeEventListener('keydown', handleKeyDown); }; }, [isOpen, onClose]); if (!isOpen) { return null; } return (
{children}
{footer ?
{footer}
: null} ); }