UNPKG

@yamada-ui/portal

Version:

Yamada UI portal component

40 lines (38 loc) 1.31 kB
"use client" import { PortalProvider, usePortal } from "./chunk-KRSUD7HN.mjs"; // src/default-portal.tsx import { useSafeLayoutEffect } from "@yamada-ui/utils"; import { useEffect, useRef, useState } from "react"; import { createPortal } from "react-dom"; import { jsx } from "react/jsx-runtime"; var DefaultPortal = ({ appendToParentPortal, children }) => { const [node, setNode] = useState(null); const el = useRef(null); const [, forceUpdate] = useState({}); useEffect(() => forceUpdate({}), []); const parent = usePortal(); useSafeLayoutEffect(() => { if (!node) return; const { ownerDocument } = node; const host = appendToParentPortal ? parent != null ? parent : ownerDocument.body : ownerDocument.body; el.current = ownerDocument.createElement("div"); el.current.className = "ui-portal"; host.appendChild(el.current); forceUpdate({}); const portalNode = el.current; return () => { if (host.contains(portalNode)) host.removeChild(portalNode); }; }, [node]); return el.current ? createPortal( /* @__PURE__ */ jsx(PortalProvider, { value: el.current, children }), el.current ) : /* @__PURE__ */ jsx("span", { ref: (el2) => el2 ? setNode(el2) : void 0 }); }; export { DefaultPortal }; //# sourceMappingURL=chunk-RDVM2NYN.mjs.map