@yamada-ui/portal
Version:
Yamada UI portal component
1 lines • 2.2 kB
Source Map (JSON)
{"version":3,"sources":["../src/container-portal.tsx"],"sourcesContent":["import type { FC, PropsWithChildren, RefObject } from \"react\"\nimport { useSafeLayoutEffect } from \"@yamada-ui/utils\"\nimport { useMemo, useState } from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { PortalProvider } from \"./portal-provider\"\n\ninterface ContainerPortalProps extends PropsWithChildren {\n containerRef: RefObject<HTMLElement | null>\n appendToParentPortal?: boolean\n}\n\nexport const ContainerPortal: FC<ContainerPortalProps> = ({\n appendToParentPortal,\n children,\n containerRef,\n}) => {\n const parent = containerRef.current\n const host =\n parent ?? (typeof window !== \"undefined\" ? document.body : undefined)\n\n const portal = useMemo(() => {\n if (!parent) return\n\n const { ownerDocument } = parent\n\n const node = ownerDocument.createElement(\"div\")\n\n node.className = \"ui-portal\"\n\n return node\n }, [parent])\n\n const [, forceUpdate] = useState({})\n\n useSafeLayoutEffect(() => forceUpdate({}), [])\n\n useSafeLayoutEffect(() => {\n if (!portal || !host) return\n\n host.appendChild(portal)\n\n return () => {\n host.removeChild(portal)\n }\n }, [portal, host])\n\n return host && portal\n ? createPortal(\n <PortalProvider value={appendToParentPortal ? portal : null}>\n {children}\n </PortalProvider>,\n portal,\n )\n : null\n}\n"],"mappings":";;;;;;AACA,SAAS,2BAA2B;AACpC,SAAS,SAAS,gBAAgB;AAClC,SAAS,oBAAoB;AA6CrB;AArCD,IAAM,kBAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,SAAS,aAAa;AAC5B,QAAM,OACJ,0BAAW,OAAO,WAAW,cAAc,SAAS,OAAO;AAE7D,QAAM,SAAS,QAAQ,MAAM;AAC3B,QAAI,CAAC,OAAQ;AAEb,UAAM,EAAE,cAAc,IAAI;AAE1B,UAAM,OAAO,cAAc,cAAc,KAAK;AAE9C,SAAK,YAAY;AAEjB,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,CAAC,EAAE,WAAW,IAAI,SAAS,CAAC,CAAC;AAEnC,sBAAoB,MAAM,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;AAE7C,sBAAoB,MAAM;AACxB,QAAI,CAAC,UAAU,CAAC,KAAM;AAEtB,SAAK,YAAY,MAAM;AAEvB,WAAO,MAAM;AACX,WAAK,YAAY,MAAM;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,QAAQ,IAAI,CAAC;AAEjB,SAAO,QAAQ,SACX;AAAA,IACE,oBAAC,kBAAe,OAAO,uBAAuB,SAAS,MACpD,UACH;AAAA,IACA;AAAA,EACF,IACA;AACN;","names":[]}