{"version":3,"sources":["../../src/useMergedValue/index.ts"],"names":["useSyncExternalStore","useCallback","postBatchCallbacksPush","_subscribeWithLoad","_onValueChange","noop"],"mappings":";;;;;;;;;;AAKA,IAAM,cAAA,GAAkB,CACtB,MAAA,EACA,MAEA,KAAAA,0BAAA;AAAA,EACEC,iBAAA,CAAY,CAAC,EAAO,KAAA;AAClB,IAAA,IAAI,WAAc,GAAA,IAAA;AAElB,IAAA,MAAM,KAAK,MAAM;AACf,MAAA,IAAI,WAAa,EAAA;AACf,QAAc,WAAA,GAAA,KAAA;AAEd,QAAAC,wCAAA,CAAuB,MAAM;AAC3B,UAAG,EAAA,EAAA;AAEH,UAAc,WAAA,GAAA,IAAA;AAAA,SACf,CAAA;AAAA;AACH,KACF;AAEA,IAAA,MAAM,IAAI,MAAO,CAAA,MAAA;AAEjB,IAAM,MAAA,WAAA,GAAc,IAAI,KAAA,CAAkB,CAAC,CAAA;AAE3C,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CAAK,EAAA,EAAA;AAC1B,MAAM,MAAA,KAAA,GAAQ,OAAO,CAAC,CAAA;AAEtB,MAAA,WAAA,CAAY,CAAC,CAAK,GAAA,CAAA,KAAA,CAAMC,CAAsB,IAAA,KAAA,CAAMC,GAAgB,EAAE,CAAA;AAAA;AAGxE,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CAAK,EAAA,EAAA;AAC1B,QAAA,WAAA,CAAY,CAAC,CAAE,EAAA;AAAA;AAGjB,MAAK,EAAA,GAAAC,qBAAA;AAAA,KACP;AAAA,KACC,MAAM,CAAA;AAAA,EACT,MAAM,OAAO,MAAO,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA,KAAA,CAAM,GAAI,EAAC,CAAC;AACjD,CAAA;AAoBF,IAAO,sBAAQ,GAAA","file":"chunk-FJHQI3AJ.cjs","sourcesContent":["import { useCallback, useSyncExternalStore } from 'react';\nimport type { AnyAsyncState, AsyncState, StateBase as State } from '../types';\nimport noop from 'lodash.noop';\nimport { postBatchCallbacksPush } from '../utils/batching';\n\nconst useMergedValue = ((\n  states: AnyAsyncState[],\n  merger: (values: any[]) => any\n) =>\n  useSyncExternalStore(\n    useCallback((cb) => {\n      let isAvailable = true;\n\n      const fn = () => {\n        if (isAvailable) {\n          isAvailable = false;\n\n          postBatchCallbacksPush(() => {\n            cb();\n\n            isAvailable = true;\n          });\n        }\n      };\n\n      const l = states.length;\n\n      const unlisteners = new Array<() => void>(l);\n\n      for (let i = 0; i < l; i++) {\n        const state = states[i];\n\n        unlisteners[i] = (state._subscribeWithLoad || state._onValueChange)(fn);\n      }\n\n      return () => {\n        for (let i = 0; i < l; i++) {\n          unlisteners[i]();\n        }\n\n        cb = noop;\n      };\n    }, states),\n    () => merger(states.map((state) => state.get()))\n  )) as {\n  /**\n   * A hook to merge values from multiple {@link states}.\n   * It applies a provided {@link merger} function to combine the state values, ensuring the component re-renders only when the merged value changes.\n   * This hook ensures efficient updates using an optional equality function ({@link isEqual}) to prevent unnecessary re-renders.\n   *\n   * @param merger - A function that merges the values from the provided {@link states}.\n   * @param isEqual - An optional comparison function to determine if the merged value has changed\n   * @returns The merged value.\n   */\n  <const S extends State[], V>(\n    states: S,\n    merger: (values: {\n      [index in keyof S]: S[index] extends State<infer K>\n        ? K | (S[index] extends AsyncState ? undefined : never)\n        : never;\n    }) => V\n  ): V;\n};\n\nexport default useMergedValue;\n"]}