{"version":3,"sources":["../../src/SuspenseOnlyController/index.tsx"],"names":["use_default","awaitOnly_default","jsx","Suspense_default"],"mappings":";;;;;;;AAiBA,IAAM,aAAoC,CAAC;AAAA,EACzC,KAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAM,KAAA;AACJ,EAAA,IAAI,kBAAkB,KAAW,CAAA,EAAA;AAC/B,IAAIA,6BAAA,CAAAC,mCAAA,CAAU,KAAK,CAAC,CAAA;AAEpB,IAAO,OAAA,QAAA;AAAA;AAGT,EAAA,MAAM,MAAMD,6BAAI,CAAAC,mCAAA,CAAU,KAAK,CAAG,EAAA,IAAI,EAAE,CAAC,CAAA;AAEzC,EAAO,OAAA,GAAA,KAAQ,SACX,QACA,GAAA,OAAO,iBAAiB,UACtB,GAAA,aAAA,CAAc,GAAG,CACjB,GAAA,aAAA;AACR,CAAA;AAkBA,IAAM,sBAAyB,GAAA,CAAuB,KACpD,qBAAAC,cAAC,CAAAC,kCAAA,EAAA,EAAS,QAAU,EAAA,KAAA,CAAM,QAAW,EAAA,QAAA,EAAAD,cAAA,CAAI,UAAY,EAAA,KAAK,CAAE,EAAA,CAAA;AAG9D,IAAO,8BAAQ,GAAA","file":"chunk-BHENPAGJ.cjs","sourcesContent":["import type { FC, PropsWithChildren, SuspenseProps } from 'react';\nimport type { AsyncState } from '../types';\nimport use from '../use';\nimport Suspense from '../Suspense';\nimport awaitOnly from '../awaitOnly';\nimport { jsx } from 'react/jsx-runtime';\n\ntype Props<S extends AsyncState> = PropsWithChildren & {\n  state: S;\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} & Pick<SuspenseProps, 'fallback'>;\n\nconst Controller: FC<Props<AsyncState>> = ({\n  state,\n  renderIfError,\n  children,\n}) => {\n  if (renderIfError === undefined) {\n    use(awaitOnly(state));\n\n    return children;\n  }\n\n  const err = use(awaitOnly(state), true)[1];\n\n  return err === undefined\n    ? children\n    : typeof renderIfError == 'function'\n      ? renderIfError(err)\n      : renderIfError;\n};\n\n/**\n * A controller component for rendering a {@link Props.state state} using `awaitOnly` to avoid unnecessary re-renders.\n * It utilizes the {@link use} hook to monitor the {@link Props.state state’s} resolution or failure.\n * This component integrates with the {@link Suspense} component, deferring rendering until the {@link Props.state state} is resolved or an error occurs.\n *\n * @example\n * ```jsx\n *   <SuspenseOnlyController\n *     state={asyncState}\n *     fallback={<div>Loading...</div>}\n *     renderIfError={(error) => <div>Error: {error.message}</div>}\n *   >\n *     <div>Data loaded successfully!</div>\n *   </SuspenseOnlyController>\n * ```\n */\nconst SuspenseOnlyController = <S extends AsyncState>(props: Props<S>) => (\n  <Suspense fallback={props.fallback}>{jsx(Controller, props)}</Suspense>\n);\n\nexport default SuspenseOnlyController;\n"]}