"use client"; import React, { useEffect } from 'react'; import { createPortal } from 'react-dom'; export type ModalProps = { open: boolean; onClose?: () => void; title?: React.ReactNode; size?: 'sm' | 'lg' | 'xl'; centered?: boolean; scrollable?: boolean; children: React.ReactNode; footer?: React.ReactNode; }; /** * Bootstrap-style modal rendered in a portal with backdrop. */ export function Modal({ open, onClose, title, size, centered, scrollable, children, footer }: ModalProps) { const modalBody = (
{title ? (
{title}
{onClose ? ( ) : null}
) : null}
{children}
{footer ?
{footer}
: null}
); useEffect(() => { if (typeof document === 'undefined') return; if (!open) return; const body = document.body; const previousOverflow = body.style.overflow; body.style.overflow = 'hidden'; body.classList.add('modal-open'); return () => { body.style.overflow = previousOverflow; body.classList.remove('modal-open'); }; }, [open]); if (typeof document === 'undefined') { return null; } return createPortal(modalBody, document.body); }