@nex-ui/react
Version:
🎉 A beautiful, modern, and reliable React component library.
66 lines (62 loc) • 1.96 kB
JavaScript
"use client";
;
var jsxRuntime = require('react/jsx-runtime');
var styled = require('@nex-ui/styled');
var utils = require('@nex-ui/utils');
var react = require('react');
var Motion = require('./Motion.cjs');
var ModalContext = require('./ModalContext.cjs');
var modal = require('../../theme/recipes/modal.cjs');
var useSlotProps = require('../utils/useSlotProps.cjs');
var Portal = require('../utils/portal/Portal.cjs');
const style = modal.modalRootRecipe();
const ModalRoot = (inProps)=>{
const props = inProps;
const { container, open, keepMounted, setOpen, preventScroll, closeOnEscape } = ModalContext.useModal();
const rootProps = useSlotProps.useSlotProps({
style,
externalForwardedProps: props
});
react.useEffect(()=>{
if (!open || !closeOnEscape) {
return;
}
const removeListener = utils.addEventListener(document.body, 'keyup', (e)=>{
if (e.key === 'Escape' && open) {
setOpen(false);
e.stopPropagation();
}
});
return removeListener;
}, [
closeOnEscape,
open,
setOpen
]);
react.useEffect(()=>{
if (preventScroll && open) {
const body = document.querySelector('body');
if (body) {
body.style.overflow = 'hidden';
return ()=>{
body.style.overflow = '';
};
}
}
}, [
open,
preventScroll
]);
return /*#__PURE__*/ jsxRuntime.jsx(Portal.Portal, {
container: container,
children: /*#__PURE__*/ jsxRuntime.jsx(Motion.Motion, {
open: open,
keepMounted: keepMounted,
children: /*#__PURE__*/ jsxRuntime.jsx(styled.nex.div, {
...rootProps
})
})
});
};
ModalRoot.displayName = 'ModalRoot';
exports.ModalRoot = ModalRoot;