@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
40 lines (36 loc) • 1.7 kB
JavaScript
"use client";
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
const require_ssr = require('../../utils/ssr.cjs');
const require_utils_index = require('../../utils/index.cjs');
const require_environment_provider = require('../../core/system/environment-provider.cjs');
let react = require("react");
react = require_rolldown_runtime.__toESM(react);
let react_jsx_runtime = require("react/jsx-runtime");
react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
let react_dom = require("react-dom");
react_dom = require_rolldown_runtime.__toESM(react_dom);
//#region src/components/portal/portal.tsx
const getPortalNode = (node) => {
const rootNode = node?.getRootNode();
if ((0, require_utils_index.utils_exports.isShadowRoot)(rootNode)) return rootNode;
return (0, require_utils_index.utils_exports.getDocument)(node).body;
};
/**
* `Portal` is a component that renders elements outside of the current `DOM` hierarchy.
*
* @see https://yamada-ui.com/docs/components/portal
*/
const Portal = ({ children, containerRef: ref, disabled }) => {
const [target, setTarget] = (0, react.useState)(ref?.current);
const ssr = require_ssr.useSsr();
const { getRootNode } = require_environment_provider.useEnvironment();
(0, react.useEffect)(() => {
setTarget(() => ref?.current);
}, [ref]);
if (ssr || disabled) return children;
const container = target ?? getPortalNode(getRootNode());
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: react.Children.map(children, (child) => (0, react_dom.createPortal)(child, container)) });
};
//#endregion
exports.Portal = Portal;
//# sourceMappingURL=portal.cjs.map