UNPKG

@yamada-ui/portal

Version:

Yamada UI portal component

1 lines 2.25 kB
{"version":3,"sources":["../src/default-portal.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from \"react\"\nimport { useSafeLayoutEffect } from \"@yamada-ui/utils\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { PortalProvider, usePortal } from \"./portal-provider\"\n\nexport const DefaultPortal: FC<\n PropsWithChildren<{ appendToParentPortal: boolean }>\n> = ({ appendToParentPortal, children }) => {\n const [node, setNode] = useState<HTMLElement | null>(null)\n const el = useRef<HTMLDivElement | null>(null)\n\n const [, forceUpdate] = useState({})\n\n useEffect(() => forceUpdate({}), [])\n\n const parent = usePortal()\n\n useSafeLayoutEffect(() => {\n if (!node) return\n\n const { ownerDocument } = node\n const host = appendToParentPortal\n ? (parent ?? ownerDocument.body)\n : ownerDocument.body\n\n el.current = ownerDocument.createElement(\"div\")\n el.current.className = \"ui-portal\"\n\n host.appendChild(el.current)\n forceUpdate({})\n\n const portalNode = el.current\n\n return () => {\n if (host.contains(portalNode)) host.removeChild(portalNode)\n }\n }, [node])\n\n return el.current ? (\n createPortal(\n <PortalProvider value={el.current}>{children}</PortalProvider>,\n el.current,\n )\n ) : (\n <span ref={(el) => (el ? setNode(el) : undefined)} />\n )\n}\n"],"mappings":";;;;;;;AACA,SAAS,2BAA2B;AACpC,SAAS,WAAW,QAAQ,gBAAgB;AAC5C,SAAS,oBAAoB;AAsCvB;AAnCC,IAAM,gBAET,CAAC,EAAE,sBAAsB,SAAS,MAAM;AAC1C,QAAM,CAAC,MAAM,OAAO,IAAI,SAA6B,IAAI;AACzD,QAAM,KAAK,OAA8B,IAAI;AAE7C,QAAM,CAAC,EAAE,WAAW,IAAI,SAAS,CAAC,CAAC;AAEnC,YAAU,MAAM,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;AAEnC,QAAM,SAAS,UAAU;AAEzB,sBAAoB,MAAM;AACxB,QAAI,CAAC,KAAM;AAEX,UAAM,EAAE,cAAc,IAAI;AAC1B,UAAM,OAAO,uBACR,0BAAU,cAAc,OACzB,cAAc;AAElB,OAAG,UAAU,cAAc,cAAc,KAAK;AAC9C,OAAG,QAAQ,YAAY;AAEvB,SAAK,YAAY,GAAG,OAAO;AAC3B,gBAAY,CAAC,CAAC;AAEd,UAAM,aAAa,GAAG;AAEtB,WAAO,MAAM;AACX,UAAI,KAAK,SAAS,UAAU,EAAG,MAAK,YAAY,UAAU;AAAA,IAC5D;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,SAAO,GAAG,UACR;AAAA,IACE,oBAAC,kBAAe,OAAO,GAAG,SAAU,UAAS;AAAA,IAC7C,GAAG;AAAA,EACL,IAEA,oBAAC,UAAK,KAAK,CAACA,QAAQA,MAAK,QAAQA,GAAE,IAAI,QAAY;AAEvD;","names":["el"]}