import { type ReactNode, useEffect, useRef } from 'react'; import { createPortal } from 'react-dom'; import { useEscapeKey } from '../../hooks/useEscapeKey'; import { useT } from '../../lib/i18n/I18nContext'; import Button from './Button'; import { CloseIcon } from './icons'; interface ModalShellProps { children: ReactNode; onClose: () => void; title: ReactNode; titleId: string; subtitle?: ReactNode; icon?: ReactNode; maxWidthClassName?: string; contentClassName?: string; labelledBy?: string; } export function ModalShell({ children, onClose, title, titleId, subtitle, icon, maxWidthClassName = 'max-w-md', contentClassName = 'px-5 py-4', labelledBy, }: ModalShellProps) { const { t } = useT(); const dialogRef = useRef(null); useEscapeKey(onClose); useEffect(() => { const previousFocus = document.activeElement as HTMLElement | null; dialogRef.current?.focus(); return () => previousFocus?.focus?.(); }, []); return createPortal(
{ if (event.target === event.currentTarget) onClose(); }}>
event.stopPropagation()}>
{icon ? (
{icon}
) : null}

{title}

{subtitle ? (

{subtitle}

) : null}
{children}
, document.body ); }