{"version":3,"sources":["../../src/SuspenseOnlyAllController/index.tsx"],"names":["awaitOnly_default","useAll_default","jsx","Suspense_default"],"mappings":";;;;;;;AAeA,IAAM,aAA+B,CAAC,EAAE,MAAQ,EAAA,aAAA,EAAe,UAAe,KAAA;AAC5E,EAAA,MAAA,GAAS,OAAO,GAAI,CAAA,CAAC,UAAU,KAAS,IAAAA,mCAAA,CAAU,KAAK,CAAC,CAAA;AAExD,EAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,IAAAC,gCAAA,CAAO,MAAM,CAAA;AAEb,IAAO,OAAA,QAAA;AAAA;AAGT,EAAA,MAAM,MAAS,GAAAA,gCAAA,CAAO,MAAQ,EAAA,IAAI,EAAE,CAAC,CAAA;AAErC,EAAA,OAAO,MAAO,CAAA,KAAA,CAAM,CAAC,IAAA,KAAS,IAAS,KAAA,KAAA,CAAS,CAC5C,GAAA,QAAA,GACA,OAAO,aAAA,IAAiB,UACtB,GAAA,aAAA,CAAc,MAAM,CACpB,GAAA,aAAA;AACR,CAAA;AAsBA,IAAM,yBAA4B,GAAA,CAChC,KACG,qBAAAC,cAAC,CAAAC,kCAAA,EAAA,EAAS,QAAU,EAAA,KAAA,CAAM,QAAW,EAAA,QAAA,EAAAD,cAAA,CAAI,UAAY,EAAA,KAAK,CAAE,EAAA,CAAA;AAEjE,IAAO,iCAAQ,GAAA","file":"chunk-LHXRY5NY.cjs","sourcesContent":["import type { FC, PropsWithChildren, SuspenseProps } from 'react';\nimport type { AsyncState, ExtractErrors, Falsy } from '../types';\nimport Suspense from '../Suspense';\nimport useAll from '../useAll';\nimport awaitOnly from '../awaitOnly';\nimport { jsx } from 'react/jsx-runtime';\n\ntype Props<S extends Array<AsyncState | Falsy>> = PropsWithChildren & {\n  states: S;\n  /** A function or element to render if any of the {@link Props.states states} fail. */\n  renderIfError?:\n    | ((errors: ExtractErrors<S>) => ReturnType<FC>)\n    | ReturnType<FC>;\n} & Pick<SuspenseProps, 'fallback'>;\n\nconst Controller: FC<Props<any[]>> = ({ states, renderIfError, children }) => {\n  states = states.map((state) => state && awaitOnly(state));\n\n  if (renderIfError === undefined) {\n    useAll(states);\n\n    return children;\n  }\n\n  const errors = useAll(states, true)[1];\n\n  return errors.every((item) => item === undefined)\n    ? children\n    : typeof renderIfError == 'function'\n      ? renderIfError(errors)\n      : renderIfError;\n};\n\n/**\n * A controller component for rendering multiple {@link Props.states states} using `awaitOnly` to avoid unnecessary re-renders.\n * It utilizes the {@link useAll} hook under the hood to monitor the resolution or failure of all provided {@link Props.states states}.\n * This component integrates with the {@link Suspense} component, deferring rendering until all {@link Props.states states} are ready or an error occurs.\n *\n * @example\n * ```jsx\n *   <SuspenseOnlyAllController\n *     states={[asyncState1, asyncState2]}\n *     fallback={<div>Loading...</div>}\n *     renderIfError={(errors) => (\n *       <div>Error occurred: {errors.map((error, index) => (\n *         <div key={index}>Error {index + 1}: {error?.message}</div>\n *       ))}</div>\n *     )}\n *   >\n *     <div>All data has loaded successfully!</div>\n *   </SuspenseOnlyAllController>\n * ```\n */\nconst SuspenseOnlyAllController = <const S extends Array<AsyncState | Falsy>>(\n  props: Props<S>\n) => <Suspense fallback={props.fallback}>{jsx(Controller, props)}</Suspense>;\n\nexport default SuspenseOnlyAllController;\n"]}