"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);
}