{"version":3,"sources":["../../src/Suspense/index.tsx"],"names":["_ctx","useContext","ErrorBoundaryContext_default","noop","useEffect","useRef","ReactSuspense","jsx","SuspenseContext_default"],"mappings":";;;;;;;;;;;;AAgBA,IAAM,QAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,EAAA,MAAM,MAAM,KAAMA,CAAAA,CAAAA;AAElB,EAAA,MAAM,mBAAmBC,gBAAW,CAAAC,8CAAoB,CAAK,IAAA,EAAE,QAAQC,qBAAK,EAAA;AAE5E,EAAAC,eAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAM,MAAA,EAAA,GAAK,IAAI,MAAO,EAAA;AAEtB,MAAS,KAAA,IAAA,CAAA,GAAI,GAAI,CAAA,IAAA,EAAM,CAAO,EAAA,IAAA;AAC5B,QAAM,MAAA,MAAA,GAAS,EAAG,CAAA,IAAA,EAAO,CAAA,KAAA;AAEzB,QAAO,MAAA,EAAA;AAEP,QAAA,gBAAA,CAAiB,OAAO,MAAM,CAAA;AAAA;AAGhC,MAAA,GAAA,CAAI,KAAM,EAAA;AAAA,KACZ;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO,KAAM,CAAA,QAAA;AACf,CAAA;AAWA,IAAM,QAAA,GAA8B,CAAC,KAAU,KAAA;AAC7C,EAAA,MAAM,GAAM,GAAAC,YAAA,iBAAgB,IAAA,GAAA,EAAK,CAAE,CAAA,OAAA;AAEnC,EAAA,sCACGC,cAAc,EAAA,EAAA,QAAA,iCAAW,QAASN,EAAAA,EAAAA,CAAAA,EAAM,KAAM,QAAM,EAAA,KAAA,CAAA,QAAA,EAAS,CAC5D,EAAA,QAAA,kBAAAO,cAAA,CAACC,0CAAgB,QAAhB,EAAA,EAAyB,OAAO,GAC9B,EAAA,QAAA,EAAA,KAAA,CAAM,UACT,CACF,EAAA,CAAA;AAEJ,CAAA;AAEA,IAAO,gBAAQ,GAAA","file":"chunk-UC6EZRUZ.cjs","sourcesContent":["import {\n  type ContextType,\n  type FC,\n  type PropsWithChildren,\n  Suspense as ReactSuspense,\n  type SuspenseProps,\n  useContext,\n  useEffect,\n  useRef,\n} from 'react';\nimport SuspenseContext from '../utils/SuspenseContext';\nimport ErrorBoundaryContext from '../utils/ErrorBoundaryContext';\nimport noop from 'lodash.noop';\n\ntype Ctx = NonNullable<ContextType<typeof SuspenseContext>>;\n\nconst Fallback: FC<PropsWithChildren<{ _ctx: Ctx }>> = (props) => {\n  const ctx = props._ctx;\n\n  const errorBoundaryCtx = useContext(ErrorBoundaryContext) || { delete: noop };\n\n  useEffect(\n    () => () => {\n      const it = ctx.values();\n\n      for (let i = ctx.size; i--; ) {\n        const unload = it.next().value;\n\n        unload();\n\n        errorBoundaryCtx.delete(unload);\n      }\n\n      ctx.clear();\n    },\n    []\n  );\n\n  return props.children;\n};\n\n/**\n * A custom `Suspense` component that extends React's {@link React.Suspense Suspense} to manage loading and error handling across multiple components.\n * @example\n * ```tsx\n * <Suspense fallback={<div>Loading...</div>}>\n *   <SomeAsyncComponent />\n * </Suspense>\n * ```\n */\nconst Suspense: FC<SuspenseProps> = (props) => {\n  const ctx = useRef<Ctx>(new Map()).current;\n\n  return (\n    <ReactSuspense fallback={<Fallback _ctx={ctx}>{props.fallback}</Fallback>}>\n      <SuspenseContext.Provider value={ctx}>\n        {props.children}\n      </SuspenseContext.Provider>\n    </ReactSuspense>\n  );\n};\n\nexport default Suspense;\n"]}