{
  "version": 3,
  "sources": ["../../../../src/components/BindingsConsumer/index.tsx"],
  "sourcesContent": ["import { UI_PRIORITY } from 'client-run-queue';\nimport React, { useRef } from 'react';\n\nimport type { BindingDependencies, NamedBindingDependencies } from '../../binding/types/binding-dependencies';\nimport { isBinding } from '../../binding-utils/type-utils.mjs';\nimport { extractBindingDependencyValues } from '../../internal-utils/extract-binding-dependency-values.mjs';\nimport { getTypedKeys } from '../../internal-utils/get-typed-keys.mjs';\nimport { pickLimiterOptions } from '../../limiter/pick-limiter-options.mjs';\nimport { useBindingEffect } from '../../use-binding-effect/use-binding-effect.mjs';\nimport { Refreshable } from './internal/Refreshable.mjs';\nimport type { BindingsConsumerProps } from './types/props';\nimport type { BindingsConsumerRenderCallback } from './types/render-callback';\n\nexport * from './types/exports.mjs';\n\n/**\n * A component that is rerendered based on input binding changes.\n *\n * A BindingsConsumer must have exactly one function child.\n *\n * The general usage pattern is something like:\n *\n * ```\n * <BindingsConsumer bindings={{someBinding, anotherBinding}}>\n *   {({someBinding, anotherBinding}) => <Typography>{someBinding} - {anotherBinding}</Typography>}\n * <BindingsConsumer>\n * ```\n */\nexport const BindingsConsumer = <DependenciesT extends BindingDependencies>(\n  props: BindingsConsumerProps<DependenciesT> & {\n    children: BindingsConsumerRenderCallback<DependenciesT>;\n  }\n) => {\n  const {\n    children,\n    // BindingsConsumerProps\n    bindings,\n    areInputValuesEqual,\n    detectInputChanges = false,\n    makeComparableInputValue\n  } = props;\n\n  const limiterOptions = pickLimiterOptions(props);\n  if (limiterOptions.priority === undefined) {\n    limiterOptions.priority = UI_PRIORITY;\n  }\n\n  const isNonNamedBindings = Array.isArray(bindings) || isBinding(bindings);\n  const namedBindings = isNonNamedBindings ? undefined : (bindings as NamedBindingDependencies);\n  const namedBindingsKeys = namedBindings !== undefined ? getTypedKeys(namedBindings) : undefined;\n\n  // Doesn't need to be stable since Refreshable will always get rendered with the latest anyway\n  const getDependencies = () => bindings as DependenciesT;\n\n  // Doesn't need to be stable since Refreshable will always get rendered with the latest anyway\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n  const getDependencyValues = () => extractBindingDependencyValues<DependenciesT>({ bindings, namedBindingsKeys });\n\n  const refreshControls = useRef<{ refresh?: () => void }>({});\n\n  const cancelLastPendingRefresh = useBindingEffect(bindings, () => refreshControls.current.refresh?.(), {\n    areInputValuesEqual,\n    detectInputChanges,\n    makeComparableInputValue,\n    ...limiterOptions\n  });\n\n  return (\n    <Refreshable\n      cancelLastPendingRefresh={cancelLastPendingRefresh}\n      getDependencies={getDependencies}\n      getDependencyValues={getDependencyValues}\n      refreshControls={refreshControls}\n      render={children}\n    />\n  );\n};\n"],
  "mappings": "AAAA,SAAS,mBAAmB;AAC5B,OAAO,SAAS,cAAc;AAG9B,SAAS,iBAAiB;AAC1B,SAAS,sCAAsC;AAC/C,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAI5B,cAAc;AAeP,MAAM,mBAAmB,CAC9B,UAGG;AACH,QAAM;AAAA,IACJ;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA,qBAAqB;AAAA,IACrB;AAAA,EACF,IAAI;AAEJ,QAAM,iBAAiB,mBAAmB,KAAK;AAC/C,MAAI,eAAe,aAAa,QAAW;AACzC,mBAAe,WAAW;AAAA,EAC5B;AAEA,QAAM,qBAAqB,MAAM,QAAQ,QAAQ,KAAK,UAAU,QAAQ;AACxE,QAAM,gBAAgB,qBAAqB,SAAa;AACxD,QAAM,oBAAoB,kBAAkB,SAAY,aAAa,aAAa,IAAI;AAGtF,QAAM,kBAAkB,MAAM;AAK9B,QAAM,sBAAsB,MAAM,+BAA8C,EAAE,UAAU,kBAAkB,CAAC;AAE/G,QAAM,kBAAkB,OAAiC,CAAC,CAAC;AAE3D,QAAM,2BAA2B,iBAAiB,UAAU,MAAM,gBAAgB,QAAQ,UAAU,GAAG;AAAA,IACrG;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA;AAAA,EACV;AAEJ;",
  "names": []
}
