{"version":3,"sources":["../../src/SuspenseController/index.tsx"],"names":["handleContainerChildren_default","use_default","jsx","Suspense_default"],"mappings":";;;;;;;AAqBA,IAAM,aAAoC,CAAC;AAAA,EACzC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAM,KAAA;AACJ,EAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,IAAA,OAAOA,kDAAwB,SAAW,EAAA,MAAA,CAAOC,6BAAI,CAAA,KAAK,CAAC,CAAC,CAAA;AAAA;AAG9D,EAAA,MAAM,CAAC,KAAO,EAAA,GAAG,CAAI,GAAAA,6BAAA,CAAI,OAAO,IAAI,CAAA;AAEpC,EAAO,OAAAD,iDAAA;AAAA,IACL,SAAA;AAAA,IACA,GAAA,KAAQ,KACJ,CAAA,GAAA,MAAA,CAAO,KAAK,CAAA,GACZ,OAAO,aAAiB,IAAA,UAAA,GACtB,aAAc,CAAA,GAAG,CACjB,GAAA;AAAA,GACR;AACF,CAAA;AAkBA,IAAM,qBAAqB,CAAuB,KAAA,qBAChDE,cAAAA,CAACC,sCAAS,QAAU,EAAAH,iDAAA,CAAwB,KAAM,CAAA,SAAA,EAAW,MAAM,QAAQ,CAAA,EACxE,QAAI,EAAAE,cAAA,CAAA,UAAA,EAAY,KAAK,CACxB,EAAA,CAAA;AAGF,IAAO,0BAAQ,GAAA","file":"chunk-SZKMLIBV.cjs","sourcesContent":["import type { FC, SuspenseProps } from 'react';\nimport type { AsyncState, ContainerType } from '../types';\nimport use from '../use';\nimport Suspense from '../Suspense';\nimport { jsx } from 'react/jsx-runtime';\nimport handleContainerChildren from '../utils/handleContainerChildren';\n\ntype Props<S extends AsyncState> = {\n  state: S;\n  /** A function to render the content when the {@link Props.state state} resolves successfully. */\n  render(value: S extends AsyncState<infer V> ? V : never): ReturnType<FC>;\n  /** A function or element to render if the {@link Props.state state} fails. */\n  renderIfError?:\n    | ((\n        error: S extends AsyncState<any, infer E> ? E : never\n      ) => ReturnType<FC>)\n    | ReturnType<FC>;\n  /** If provided, it wraps the rendered content or fallback only if they exist. */\n  container?: ContainerType;\n} & Pick<SuspenseProps, 'fallback'>;\n\nconst Controller: FC<Props<AsyncState>> = ({\n  render,\n  state,\n  renderIfError,\n  container,\n}) => {\n  if (renderIfError === undefined) {\n    return handleContainerChildren(container, render(use(state)));\n  }\n\n  const [value, err] = use(state, true);\n\n  return handleContainerChildren(\n    container,\n    err === undefined\n      ? render(value)\n      : typeof renderIfError == 'function'\n        ? renderIfError(err)\n        : renderIfError\n  );\n};\n\n/**\n * A controller component for rendering a {@link Props.state state}.\n * It utilizes the {@link use} hook under the hood to retrieve the value or error of the provided state.\n * This component integrates with the {@link Suspense} component, deferring rendering until the state is resolved or an error occurs.\n *\n * @example\n * ```jsx\n *   <SuspenseController\n *     state={asyncState}\n *     container=\"div\"\n *     fallback={<div>Loading...</div>}\n *     render={(data) => <div>Data: {JSON.stringify(data)}</div>}\n *     renderIfError={(error) => <div>Error: {error.message}</div>}\n *   />\n * ```\n */\nconst SuspenseController = <S extends AsyncState>(props: Props<S>) => (\n  <Suspense fallback={handleContainerChildren(props.container, props.fallback)}>\n    {jsx(Controller, props)}\n  </Suspense>\n);\n\nexport default SuspenseController;\n"]}