{"version":3,"sources":["../../src/SuspenseAllController/index.tsx"],"names":["handleContainerChildren_default","useAll_default","jsx","Suspense_default"],"mappings":";;;;;;;AA4BA,IAAM,aAA+B,CAAC;AAAA,EACpC,MAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAM,KAAA;AACJ,EAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,IAAA,OAAOA,kDAAwB,SAAW,EAAA,MAAA,CAAOC,gCAAO,CAAA,MAAM,CAAC,CAAC,CAAA;AAAA;AAGlE,EAAA,MAAM,CAAC,MAAQ,EAAA,MAAM,CAAI,GAAAA,gCAAA,CAAO,QAAQ,IAAI,CAAA;AAE5C,EAAO,OAAAD,iDAAA;AAAA,IACL,SAAA;AAAA,IACA,OAAO,KAAM,CAAA,CAAC,IAAS,KAAA,IAAA,KAAS,MAAS,CACrC,GAAA,MAAA,CAAO,MAAM,CAAA,GACb,OAAO,aAAiB,IAAA,UAAA,GACtB,aAAc,CAAA,MAAA,EAAQ,MAAM,CAC5B,GAAA;AAAA,GACR;AACF,CAAA;AA2BA,IAAM,wBAAwB,CAC5B,KAAA,qBAEAE,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,6BAAQ,GAAA","file":"chunk-6P2SFEAM.cjs","sourcesContent":["import type { FC, SuspenseProps } from 'react';\nimport type {\n  AsyncState,\n  ContainerType,\n  ExtractErrors,\n  ExtractValues,\n  Falsy,\n} from '../types';\nimport Suspense from '../Suspense';\nimport useAll from '../useAll';\nimport { jsx } from 'react/jsx-runtime';\nimport handleContainerChildren from '../utils/handleContainerChildren';\n\ntype Props<S extends Array<AsyncState | Falsy>> = {\n  states: S;\n  /** A function to render the final content when all {@link Props.states states} resolve successfully. */\n  render(values: ExtractValues<S>): ReturnType<FC>;\n  /** A function or element to render if any of the {@link Props.states states} fail */\n  renderIfError?:\n    | ((\n        errors: ExtractErrors<S>,\n        values: ExtractValues<S, true>\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<any[]>> = ({\n  render,\n  states,\n  renderIfError,\n  container,\n}) => {\n  if (renderIfError === undefined) {\n    return handleContainerChildren(container, render(useAll(states)));\n  }\n\n  const [values, errors] = useAll(states, true);\n\n  return handleContainerChildren(\n    container,\n    errors.every((item) => item === undefined)\n      ? render(values)\n      : typeof renderIfError == 'function'\n        ? renderIfError(errors, values)\n        : renderIfError\n  );\n};\n\n/**\n * A controller component for rendering multiple {@link Props.states states}.\n * It utilizes the {@link useAll} hook under the hood to collect the values or errors of all provided states.\n * This component integrates with the {@link Suspense} component, deferring rendering until all states are resolved or an error occurs.\n *\n * @example\n * ```jsx\n *   <SuspenseAllController\n *     states={[asyncState1, asyncState2]}\n *     container=\"div\"\n *     fallback={<div>Loading...</div>}\n *     render={(data1, data2) => (\n *       <div>\n *         <div>Data 1: {JSON.stringify(data1)}</div>\n *         <div>Data 2: {JSON.stringify(data2)}</div>\n *       </div>\n *     )}\n *     renderIfError={(values, errors) => (\n *       <div>Error occurred: {errors.map((error, index) => (\n *         <div key={index}>Error {index + 1}: {error?.message}</div>\n *       ))}</div>\n *     )}\n *   />\n * ```\n */\nconst SuspenseAllController = <const S extends Array<AsyncState | Falsy>>(\n  props: Props<S>\n) => (\n  <Suspense fallback={handleContainerChildren(props.container, props.fallback)}>\n    {jsx(Controller, props)}\n  </Suspense>\n);\n\nexport default SuspenseAllController;\n"]}