import React, { useEffect, useCallback } from 'react'; import { useUIStore } from '../../stores/uiStore'; interface ModalProps { isOpen: boolean; onClose: () => void; title?: string; children: React.ReactNode; maxWidth?: string; size?: 'settings'; /** Mobile display style: 'fullscreen' fills the screen, 'sheet' anchors to bottom, 'default' stays centered */ mobileStyle?: 'fullscreen' | 'sheet' | 'default'; } export function Modal({ isOpen, onClose, title, children, maxWidth = 'max-w-md', size, mobileStyle = 'default' }: ModalProps) { const isMobile = useUIStore((s) => s.isMobile); const handleKeyDown = useCallback((e: KeyboardEvent) => { if (e.key === 'Escape') { onClose(); } }, [onClose]); useEffect(() => { if (isOpen) { document.addEventListener('keydown', handleKeyDown); return () => document.removeEventListener('keydown', handleKeyDown); } }, [isOpen, handleKeyDown]); if (!isOpen) return null; // Mobile fullscreen style if (isMobile && mobileStyle === 'fullscreen') { return (
{(title || size === 'settings') && (
{title ?

{title}

:
}
)}
{children}
); } // Mobile bottom sheet style if (isMobile && mobileStyle === 'sheet') { return (
{title && (

{title}

)}
{children}
); } // Settings size variant — large glass overlay for settings screens if (size === 'settings') { return (
{/* Floating close button */} {children}
); } // Default centered dialog (desktop and mobile default) return (
{title && (

{title}

)}
{children}
); }