{"version":3,"file":"usePortal.cjs","names":["useRef"],"sources":["../../../src/portals/usePortal/usePortal.ts"],"sourcesContent":["import { setAsPortalHandler } from '@pastweb/tools';\nimport { useBeforeMount } from '../../useBeforeMount';\nimport { useRef } from '../../useRef';\nimport type { PortalHandler } from '@pastweb/tools';\n\n/**\n * Creates the client-side handler consumed by {@link Portal}.\n *\n * The handler can be used immediately. Calls made before the matching\n * `Portal` finishes wiring itself are replayed when it becomes ready.\n *\n * @returns A tools `PortalHandler` extended with the internal readiness hook.\n *\n * @example\n * ```tsx\n * const modal = usePortal();\n *\n * return (\n *   <>\n *     <button onClick={() => modal.open()}>Open</button>\n *     <Portal path=\"modal\" use={modal}>\n *       <Dialog />\n *     </Portal>\n *   </>\n * );\n * ```\n */\nexport function usePortal(): PortalHandler & { isReady: () => void } {\n  const portal = useRef({});\n  const called = useRef<Record<string, any>>({});\n\n  useBeforeMount(() => {\n    const handler = setAsPortalHandler({\n      id: false,\n      open: () => { called.value['open'] = true; },\n      update: (props: Record<string, any>) => { called.value['update'] = props; },\n      close: () => { called.value['close'] = true; },\n      remove: () => { called.value['remove'] = true; },\n      isReady: () => {\n        const p = portal.value as PortalHandler;\n\n        Object.entries({ ...called.value }).forEach(([key, val]) => {\n          const fn = (p as unknown as Record<string, ((value: unknown) => void) | undefined>)[key];\n\n          if (fn) {\n            setTimeout(() => fn(val), 16);\n          }\n\n          delete called.value[key];\n        });\n      },\n    });\n\n    portal.value = handler;\n  });\n\n  return portal.value as PortalHandler & { isReady: () => void };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,YAAqD;CACnE,MAAM,SAASA,sBAAAA,OAAO,CAAC,CAAC;CACxB,MAAM,SAASA,sBAAAA,OAA4B,CAAC,CAAC;CAE7C,sCAAA,qBAAqB;EACnB,MAAM,WAAA,GAAA,eAAA,mBAAA,CAA6B;GACjC,IAAI;GACJ,YAAY;IAAE,OAAO,MAAM,UAAU;GAAM;GAC3C,SAAS,UAA+B;IAAE,OAAO,MAAM,YAAY;GAAO;GAC1E,aAAa;IAAE,OAAO,MAAM,WAAW;GAAM;GAC7C,cAAc;IAAE,OAAO,MAAM,YAAY;GAAM;GAC/C,eAAe;IACb,MAAM,IAAI,OAAO;IAEjB,OAAO,QAAQ,EAAE,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,SAAS;KAC1D,MAAM,KAAM,EAAwE;KAEpF,IAAI,IACF,iBAAiB,GAAG,GAAG,GAAG,EAAE;KAG9B,OAAO,OAAO,MAAM;IACtB,CAAC;GACH;EACF,CAAC;EAED,OAAO,QAAQ;CACjB,CAAC;CAED,OAAO,OAAO;AAChB"}