UNPKG

@nex-ui/react

Version:

🎉 A beautiful, modern, and reliable React component library.

66 lines (62 loc) • 1.96 kB
"use client"; 'use strict'; 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;