{
  "version": 3,
  "sources": ["../../../../src/components/WaitablesConsumer/WaitablesConsumer.tsx"],
  "sourcesContent": ["import type { ReactNode } from 'react';\nimport React from 'react';\nimport type { SingleOrArray } from 'react-bindings';\nimport { BindingsConsumer, pickLimiterOptions, useCallbackRef } from 'react-bindings';\n\nimport { getDefaultWaitablesConsumerIfErrorTransformer } from '../../config/waitable-consumer-if-error-transformer.mjs';\nimport { normalizeAsArray } from '../../internal-utils/array-like.mjs';\nimport { useDerivedWaitable } from '../../specialized-waitables/use-derived-waitable/use-derived-waitable.mjs';\nimport type { Waitable } from '../../waitable/types/waitable';\nimport type { WaitableDependencies } from '../../waitable/types/waitable-dependencies';\nimport { pickWaitablesConsumerNamedTransformers } from './pick-waitables-consumer-named-transformers.mjs';\nimport type { WaitablesConsumerProps } from './types/props';\nimport type { WaitablesConsumerNamedTransformers, WaitablesConsumerRequiredValuesTransformer } from './types/transformers';\n\n/**\n * A component that is rerendered based on input waitable and binding changes.\n *\n * The general usage pattern is something like:\n *\n * ```\n * <WaitablesConsumer dependencies={{someWaitable, someBinding}} ifLoading={() => 'Loading\u2026'}>\n *   {({someWaitable, someBinding}) => <Typography>{someWaitable} - {someBinding}</Typography>}\n * <WaitablesConsumer>\n * ```\n *\n * Transformers may be passed as props or as children.  The children may be a single transformer or an array, in which case the first\n * applicable transformer is used.  Transformers passed as children take precedence over those passed as props.\n *\n * An unnamed transformer is the same as `{ ifLoaded: \u2026 }`.\n *\n * Named transformer meanings:\n * - `'ifLoaded'` - All of the waitables have defined values\n * - `'ifError'` - At least one waitable has a defined error\n * - `'ifLoading'` - At least one waitable has an undefined value but no waitables have defined errors\n * - `'ifErrorOrLoading'` - At least one waitable has an undefined value\n * - `'always'` - Always applicable\n *\n * In addition to the specified transformers, a default `ifError` transformer is appended as the last fallback option, configurable using\n * `setDefaultWaitablesConsumerIfErrorTransformer`, most useful for displaying error indicators when more precise handling isn't required.\n *\n * If no transformers are applicable, nothing will be rendered.\n */\nexport const WaitablesConsumer = <DependenciesT extends WaitableDependencies>(\n  props: WaitablesConsumerProps<DependenciesT> & {\n    children: SingleOrArray<WaitablesConsumerRequiredValuesTransformer<DependenciesT> | WaitablesConsumerNamedTransformers<DependenciesT>>;\n  }\n) => {\n  const { children, id = 'waitable-consumer', dependencies } = props;\n\n  const limiterOptions = pickLimiterOptions(props);\n  const propsBasedTransformers = pickWaitablesConsumerNamedTransformers<DependenciesT>(props);\n\n  const ifErrorTransformer = useCallbackRef((): ReactNode => getDefaultWaitablesConsumerIfErrorTransformer()?.(dependencies, node) ?? null);\n\n  const combinedTransformers = [...normalizeAsArray(children), propsBasedTransformers, { ifError: ifErrorTransformer }];\n\n  const node: Waitable<ReactNode> = useDerivedWaitable(dependencies, combinedTransformers, {\n    id,\n    priority: limiterOptions.priority,\n    queue: limiterOptions.queue,\n    detectErrorChanges: false,\n    detectValueChanges: false\n  });\n  node.reset('soft');\n\n  return (\n    <BindingsConsumer bindings={{ node: node.value }} {...limiterOptions}>\n      {({ node }) => node}\n    </BindingsConsumer>\n  );\n};\n"],
  "mappings": "AACA,OAAO,WAAW;AAElB,SAAS,kBAAkB,oBAAoB,sBAAsB;AAErE,SAAS,qDAAqD;AAC9D,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AAGnC,SAAS,8CAA8C;AAgChD,MAAM,oBAAoB,CAC/B,UAGG;AACH,QAAM,EAAE,UAAU,KAAK,qBAAqB,aAAa,IAAI;AAE7D,QAAM,iBAAiB,mBAAmB,KAAK;AAC/C,QAAM,yBAAyB,uCAAsD,KAAK;AAE1F,QAAM,qBAAqB,eAAe,MAAiB,8CAA8C,IAAI,cAAc,IAAI,KAAK,IAAI;AAExI,QAAM,uBAAuB,CAAC,GAAG,iBAAiB,QAAQ,GAAG,wBAAwB,EAAE,SAAS,mBAAmB,CAAC;AAEpH,QAAM,OAA4B,mBAAmB,cAAc,sBAAsB;AAAA,IACvF;AAAA,IACA,UAAU,eAAe;AAAA,IACzB,OAAO,eAAe;AAAA,IACtB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EACtB,CAAC;AACD,OAAK,MAAM,MAAM;AAEjB,SACE,oCAAC,oBAAiB,UAAU,EAAE,MAAM,KAAK,MAAM,GAAI,GAAG,kBACnD,CAAC,EAAE,MAAAA,MAAK,MAAMA,KACjB;AAEJ;",
  "names": ["node"]
}
