db-studio 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/index.js +29 -27
  2. package/dist/index.js.map +1 -1
  3. package/dist/web-dist/assets/_pathlessLayout-C6coCMpi.js +1 -0
  4. package/dist/web-dist/assets/{_pathlessLayout-CEv6uosT.js.map → _pathlessLayout-C6coCMpi.js.map} +1 -1
  5. package/dist/web-dist/assets/_pathlessLayout-DoBLI2ja.js +132 -0
  6. package/dist/web-dist/assets/_pathlessLayout-DoBLI2ja.js.map +1 -0
  7. package/dist/web-dist/assets/_queryId-Chj34V6b.js +1 -0
  8. package/dist/web-dist/assets/{_queryId-Bq64AuuI.js.map → _queryId-Chj34V6b.js.map} +1 -1
  9. package/dist/web-dist/assets/{_table-Bt9of1on.js → _table-Bg4NvAi4.js} +1 -1
  10. package/dist/web-dist/assets/{_table-Bt9of1on.js.map → _table-Bg4NvAi4.js.map} +1 -1
  11. package/dist/web-dist/assets/_table-CHFe8v3q.js +1 -0
  12. package/dist/web-dist/assets/{_table-CQhKMAcZ.js.map → _table-CHFe8v3q.js.map} +1 -1
  13. package/dist/web-dist/assets/ai-assistant-D2oc4TtC.js +1 -0
  14. package/dist/web-dist/assets/ai-assistant-D2oc4TtC.js.map +1 -0
  15. package/dist/web-dist/assets/browser-B3ZulIJb.js +1 -0
  16. package/dist/web-dist/assets/{browser-CFsrLhq1.js.map → browser-B3ZulIJb.js.map} +1 -1
  17. package/dist/web-dist/assets/code-editor-q3FlZk-L.js +9 -0
  18. package/dist/web-dist/assets/code-editor-q3FlZk-L.js.map +1 -0
  19. package/dist/web-dist/assets/database.store-O79u8Fhj.js +1 -0
  20. package/dist/web-dist/assets/database.store-O79u8Fhj.js.map +1 -0
  21. package/dist/web-dist/assets/{dist-B90HBock.js → dist-DBHqGKiG.js} +1 -1
  22. package/dist/web-dist/assets/{dist-B90HBock.js.map → dist-DBHqGKiG.js.map} +1 -1
  23. package/dist/web-dist/assets/{highlighted-body-OFNGDK62-BGFI1Y6G.js → highlighted-body-OFNGDK62-CFFJC4SW.js} +1 -1
  24. package/dist/web-dist/assets/{highlighted-body-OFNGDK62-BGFI1Y6G.js.map → highlighted-body-OFNGDK62-CFFJC4SW.js.map} +1 -1
  25. package/dist/web-dist/assets/icons-CtpwLWUI.js +1 -0
  26. package/dist/web-dist/assets/icons-CtpwLWUI.js.map +1 -0
  27. package/dist/web-dist/assets/index-Cyl_0l9I.css +2 -0
  28. package/dist/web-dist/assets/index-XoXxezo4.js +35 -0
  29. package/dist/web-dist/assets/index-XoXxezo4.js.map +1 -0
  30. package/dist/web-dist/assets/{indexes-BKOZUa9Z.js → indexes-C9QqJKhp.js} +1 -1
  31. package/dist/web-dist/assets/{indexes-BKOZUa9Z.js.map → indexes-C9QqJKhp.js.map} +1 -1
  32. package/dist/web-dist/assets/{logs-DHha3vDy.js → logs-B8ah8F7D.js} +1 -1
  33. package/dist/web-dist/assets/{logs-DHha3vDy.js.map → logs-B8ah8F7D.js.map} +1 -1
  34. package/dist/web-dist/assets/mermaid-GHXKKRXX-TpVEoP0K.js +1 -0
  35. package/dist/web-dist/assets/middleware-CCyr6cvp.js +1 -0
  36. package/dist/web-dist/assets/middleware-CCyr6cvp.js.map +1 -0
  37. package/dist/web-dist/assets/popover-wbdw6Hmx.js +1 -0
  38. package/dist/web-dist/assets/popover-wbdw6Hmx.js.map +1 -0
  39. package/dist/web-dist/assets/queries.store-CoJVGJKk.js +1 -0
  40. package/dist/web-dist/assets/queries.store-CoJVGJKk.js.map +1 -0
  41. package/dist/web-dist/assets/query-runner-Bgs0j50a.js +17 -0
  42. package/dist/web-dist/assets/query-runner-Bgs0j50a.js.map +1 -0
  43. package/dist/web-dist/assets/radix-ui-CgJOuzDv.js +51 -0
  44. package/dist/web-dist/assets/radix-ui-CgJOuzDv.js.map +1 -0
  45. package/dist/web-dist/assets/react-Cxb6eTZp.js +1 -0
  46. package/dist/web-dist/assets/react-Cxb6eTZp.js.map +1 -0
  47. package/dist/web-dist/assets/{react-dom-0lXVP1OR.js → react-dom-yg5bT29P.js} +1 -1
  48. package/dist/web-dist/assets/{react-dom-0lXVP1OR.js.map → react-dom-yg5bT29P.js.map} +1 -1
  49. package/dist/web-dist/assets/redis-value-COa6YzFD.js +1 -0
  50. package/dist/web-dist/assets/{redis-value-CJoRCZun.js.map → redis-value-COa6YzFD.js.map} +1 -1
  51. package/dist/web-dist/assets/runner-DW5iXMmq.js +1 -0
  52. package/dist/web-dist/assets/{runner-CZKDzRoU.js.map → runner-DW5iXMmq.js.map} +1 -1
  53. package/dist/web-dist/assets/schema-CtOicTEt.js +64 -0
  54. package/dist/web-dist/assets/schema-CtOicTEt.js.map +1 -0
  55. package/dist/web-dist/assets/{schema-0sozVL-z.js → schema-oy5o_4bt.js} +1 -1
  56. package/dist/web-dist/assets/{schema-0sozVL-z.js.map → schema-oy5o_4bt.js.map} +1 -1
  57. package/dist/web-dist/assets/{table-CPQhgD-a.js → table-CN9ZTCOi.js} +1 -1
  58. package/dist/web-dist/assets/{table-CPQhgD-a.js.map → table-CN9ZTCOi.js.map} +1 -1
  59. package/dist/web-dist/assets/tanstack-g1w0v_rJ.js +10 -0
  60. package/dist/web-dist/assets/tanstack-g1w0v_rJ.js.map +1 -0
  61. package/dist/web-dist/assets/tooltip-B7gM8xl3.js +9 -0
  62. package/dist/web-dist/assets/tooltip-B7gM8xl3.js.map +1 -0
  63. package/dist/web-dist/assets/{visualizer-DTPn0ywW.js → visualizer-DcEwqmuY.js} +1 -1
  64. package/dist/web-dist/assets/{visualizer-DTPn0ywW.js.map → visualizer-DcEwqmuY.js.map} +1 -1
  65. package/dist/web-dist/index.html +13 -11
  66. package/package.json +1 -1
  67. package/dist/web-dist/assets/_pathlessLayout-CEv6uosT.js +0 -1
  68. package/dist/web-dist/assets/_pathlessLayout-eo6iLvBo.js +0 -132
  69. package/dist/web-dist/assets/_pathlessLayout-eo6iLvBo.js.map +0 -1
  70. package/dist/web-dist/assets/_queryId-Bq64AuuI.js +0 -1
  71. package/dist/web-dist/assets/_table-CQhKMAcZ.js +0 -1
  72. package/dist/web-dist/assets/browser-CFsrLhq1.js +0 -1
  73. package/dist/web-dist/assets/code-editor-DQ86aZkm.js +0 -9
  74. package/dist/web-dist/assets/code-editor-DQ86aZkm.js.map +0 -1
  75. package/dist/web-dist/assets/database.store-KDHkiedw.js +0 -1
  76. package/dist/web-dist/assets/database.store-KDHkiedw.js.map +0 -1
  77. package/dist/web-dist/assets/icons-Bm7rSZLJ.js +0 -1
  78. package/dist/web-dist/assets/icons-Bm7rSZLJ.js.map +0 -1
  79. package/dist/web-dist/assets/index-BtqHnOp0.js +0 -23
  80. package/dist/web-dist/assets/index-BtqHnOp0.js.map +0 -1
  81. package/dist/web-dist/assets/index-ktDWx_UP.css +0 -2
  82. package/dist/web-dist/assets/mermaid-GHXKKRXX-DjR37lQN.js +0 -1
  83. package/dist/web-dist/assets/popover-Cm3PsrMh.js +0 -1
  84. package/dist/web-dist/assets/popover-Cm3PsrMh.js.map +0 -1
  85. package/dist/web-dist/assets/query-runner-6BhVPaC9.js +0 -9
  86. package/dist/web-dist/assets/query-runner-6BhVPaC9.js.map +0 -1
  87. package/dist/web-dist/assets/radix-ui-BUv2Nuc1.js +0 -51
  88. package/dist/web-dist/assets/radix-ui-BUv2Nuc1.js.map +0 -1
  89. package/dist/web-dist/assets/redis-value-CJoRCZun.js +0 -1
  90. package/dist/web-dist/assets/runner-CZKDzRoU.js +0 -1
  91. package/dist/web-dist/assets/schema-cZHeTHA0.js +0 -64
  92. package/dist/web-dist/assets/schema-cZHeTHA0.js.map +0 -1
  93. package/dist/web-dist/assets/tanstack-D6l4LIt3.js +0 -10
  94. package/dist/web-dist/assets/tanstack-D6l4LIt3.js.map +0 -1
  95. package/dist/web-dist/assets/toggle-group-BRWnLosM.js +0 -1
  96. package/dist/web-dist/assets/toggle-group-BRWnLosM.js.map +0 -1
  97. package/dist/web-dist/assets/tooltip-DinwklI8.js +0 -9
  98. package/dist/web-dist/assets/tooltip-DinwklI8.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tanstack-g1w0v_rJ.js","names":["functionalUpdate","isPlainObject","hasOwn","replaceEqualDeep","isPlainArray","hasObjectPrototype","getDefaultState","functionalUpdate","\"use\"","functionalUpdate","trimPathRight","functionalUpdate","functionalUpdate","useCallback","useSyncExternalStoreWithSelector","functionalUpdate","Fragment","jsx","jsx","Fragment","isPlainRecord","EventType","toJsonSchema","stringField","isRecord","isContentPart","isRecord","isRecord","EventType","exports","parse","getChunkToolCallId","getChunkMessageId","getChunkParentMessageId","getChunkRunId","getChunkRunId","useId","useState","useRef","useCallback","useMemo","useSyncExternalStore","memo","Headers"],"sources":["../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/subscribable.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/focusManager.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/utils.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/environmentManager.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/thenable.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/hydration.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/retryer.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/removable.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/query.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queryObserver.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/infiniteQueryObserver.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/mutation.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queryCache.js","../../../../node_modules/.bun/@tanstack+query-core@5.100.9/node_modules/@tanstack/query-core/build/modern/queryClient.js","../../../../node_modules/.bun/@tanstack+react-query@5.100.9+3f10a4be4e334a9b/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../../../node_modules/.bun/@tanstack+react-query@5.100.9+3f10a4be4e334a9b/node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../../../../node_modules/.bun/@tanstack+react-query@5.100.9+3f10a4be4e334a9b/node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../../../../node_modules/.bun/@tanstack+react-query@5.100.9+3f10a4be4e334a9b/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../../../../node_modules/.bun/@tanstack+react-query@5.100.9+3f10a4be4e334a9b/node_modules/@tanstack/react-query/build/modern/suspense.js","../../../../node_modules/.bun/@tanstack+react-query@5.100.9+3f10a4be4e334a9b/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../../../../node_modules/.bun/@tanstack+react-query@5.100.9+3f10a4be4e334a9b/node_modules/@tanstack/react-query/build/modern/useQuery.js","../../../../node_modules/.bun/@tanstack+react-query@5.100.9+3f10a4be4e334a9b/node_modules/@tanstack/react-query/build/modern/useMutation.js","../../../../node_modules/.bun/@tanstack+react-query@5.100.9+3f10a4be4e334a9b/node_modules/@tanstack/react-query/build/modern/useInfiniteQuery.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/utils.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/utils.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/invariant.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/lru-cache.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/path.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/not-found.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/qss.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/searchParams.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/root.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/redirect.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/rewrite.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/stores.js","../../../../node_modules/.bun/@tanstack+history@1.162.1/node_modules/@tanstack/history/dist/esm/index.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/router.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/load-client.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/link.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/route.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/CatchBoundary.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/ClientOnly.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/routerContext.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/useRouter.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/matchContext.js","../../../../node_modules/.bun/@tanstack+store@0.9.3/node_modules/@tanstack/store/dist/esm/alien.js","../../../../node_modules/.bun/@tanstack+store@0.9.3/node_modules/@tanstack/store/dist/esm/atom.js","../../../../node_modules/.bun/use-sync-external-store@1.6.0+3f10a4be4e334a9b/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../node_modules/.bun/use-sync-external-store@1.6.0+3f10a4be4e334a9b/node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/.bun/use-sync-external-store@1.6.0+3f10a4be4e334a9b/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../../node_modules/.bun/use-sync-external-store@1.6.0+3f10a4be4e334a9b/node_modules/use-sync-external-store/shim/with-selector.js","../../../../node_modules/.bun/@tanstack+react-store@0.9.3+21ccd8898788a04d/node_modules/@tanstack/react-store/dist/esm/useStore.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/useMatch.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/useLoaderData.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/useLoaderDeps.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/useParams.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/useSearch.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/useNavigate.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/useRouteContext.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/link.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/route.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/fileRoute.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/lazyRouteComponent.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/not-found.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/ScriptOnce.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/SafeFragment.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/renderRouteNotFound.js","../../../../node_modules/.bun/@tanstack+router-core@1.171.27/node_modules/@tanstack/router-core/dist/esm/scroll-restoration-script/client.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/scroll-restoration.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/Match.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/Transitioner.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/Matches.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/routerStores.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/router.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/RouterProvider.js","../../../../node_modules/.bun/@tanstack+react-router@1.170.32+21ccd8898788a04d/node_modules/@tanstack/react-router/dist/esm/useLocation.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/byok/storage.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/byok/providers.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/byok/missing.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/byok/errors.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/byok/scrub.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/byok/client.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/response-stream.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/sse-utils.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/message-date-normalizer.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/utilities/ag-ui-usage.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/utilities/merge-metadata.js","../../../../node_modules/.bun/@ag-ui+core@0.1.1-canary.beta.0+68a1e3a0c4588df3/node_modules/@ag-ui/core/dist/events-BaoNrGbE.mjs","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/interrupt-serialization.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/interrupts.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/activities/chat/tools/schema-converter.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/activities/chat/tools/approval-schema.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/interrupt-resume.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/interrupt-definition.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/generic-interrupt-continuation.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/utilities/tool-result.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/utilities/provider-executed.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/activities/chat/messages.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/utilities/ag-ui-wire.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/utilities/restore-inbound-chunk.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/utilities/chunk-ids.js","../../../../node_modules/.bun/partial-json@0.1.7/node_modules/partial-json/dist/options.js","../../../../node_modules/.bun/partial-json@0.1.7/node_modules/partial-json/dist/index.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/activities/chat/stream/json-parser.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/activities/chat/stream/strategies.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/utilities/errors.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/activities/chat/stream/message-updaters.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/activities/chat/stream/processor.js","../../../../node_modules/.bun/@tanstack+ai@0.53.0+68a1e3a0c4588df3/node_modules/@tanstack/ai/dist/esm/client.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/connection-adapters.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/interrupt-manager.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/byok/resolve.js","../../../../node_modules/.bun/@tanstack+ai-event-client@0.11.2/node_modules/@tanstack/ai-event-client/dist/esm/envelope.js","../../../../node_modules/.bun/@tanstack+devtools-event-client@0.4.3/node_modules/@tanstack/devtools-event-client/dist/esm/plugin.js","../../../../node_modules/.bun/@tanstack+ai-event-client@0.11.2/node_modules/@tanstack/ai-event-client/dist/esm/index.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/events.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/devtools-noop.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/client-persistor.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/cleared-stream-tracker.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/chat-client.js","../../../../node_modules/.bun/@tanstack+ai-client@0.31.0+68a1e3a0c4588df3/node_modules/@tanstack/ai-client/dist/esm/devtools.js","../../../../node_modules/.bun/@tanstack+ai-react@0.24.0+318d803f45c315d3/node_modules/@tanstack/ai-react/dist/esm/use-chat.js","../../../../node_modules/.bun/@tanstack+ai-react@0.24.0+318d803f45c315d3/node_modules/@tanstack/ai-react/dist/esm/use-byok.js","../../../../node_modules/.bun/@tanstack+ai-react@0.24.0+318d803f45c315d3/node_modules/@tanstack/ai-react/dist/esm/use-realtime-chat.js","../../../../node_modules/.bun/@tanstack+table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.mjs","../../../../node_modules/.bun/@tanstack+react-table@8.21.3+21ccd8898788a04d/node_modules/@tanstack/react-table/build/lib/index.mjs","../../../../node_modules/.bun/@tanstack+virtual-core@3.14.0/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../../node_modules/.bun/@tanstack+virtual-core@3.14.0/node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../../node_modules/.bun/@tanstack+react-virtual@3.13.24+21ccd8898788a04d/node_modules/@tanstack/react-virtual/dist/esm/index.js"],"sourcesContent":["// src/subscribable.ts\nvar Subscribable = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n};\nexport {\n Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar FocusManager = class extends Subscribable {\n #focused;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onFocus) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const listener = () => onFocus();\n window.addEventListener(\"visibilitychange\", listener, false);\n return () => {\n window.removeEventListener(\"visibilitychange\", listener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup((focused) => {\n if (typeof focused === \"boolean\") {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n setFocused(focused) {\n const changed = this.#focused !== focused;\n if (changed) {\n this.#focused = focused;\n this.onFocus();\n }\n }\n onFocus() {\n const isFocused = this.isFocused();\n this.listeners.forEach((listener) => {\n listener(isFocused);\n });\n }\n isFocused() {\n if (typeof this.#focused === \"boolean\") {\n return this.#focused;\n }\n return globalThis.document?.visibilityState !== \"hidden\";\n }\n};\nvar focusManager = new FocusManager();\nexport {\n FocusManager,\n focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n // We need the wrapper function syntax below instead of direct references to\n // global setTimeout etc.\n //\n // BAD: `setTimeout: setTimeout`\n // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n //\n // If we use direct references here, then anything that wants to spy on or\n // replace the global setTimeout (like tests) won't work since we'll already\n // have a hard reference to the original implementation at the time when this\n // file was imported.\n setTimeout: (callback, delay) => setTimeout(callback, delay),\n clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n setInterval: (callback, delay) => setInterval(callback, delay),\n clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n // We cannot have TimeoutManager<T> as we must instantiate it with a concrete\n // type at app boot; and if we leave that type, then any new timer provider\n // would need to support the default provider's concrete timer ID, which is\n // infeasible across environments.\n //\n // We settle for type safety for the TimeoutProvider type, and accept that\n // this class is unsafe internally to allow for extension.\n #provider = defaultTimeoutProvider;\n #providerCalled = false;\n setTimeoutProvider(provider) {\n if (process.env.NODE_ENV !== \"production\") {\n if (this.#providerCalled && provider !== this.#provider) {\n console.error(\n `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n { previous: this.#provider, provider }\n );\n }\n }\n this.#provider = provider;\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = false;\n }\n }\n setTimeout(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setTimeout(callback, delay);\n }\n clearTimeout(timeoutId) {\n this.#provider.clearTimeout(timeoutId);\n }\n setInterval(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setInterval(callback, delay);\n }\n clearInterval(intervalId) {\n this.#provider.clearInterval(intervalId);\n }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n setTimeout(callback, 0);\n}\nexport {\n TimeoutManager,\n defaultTimeoutProvider,\n systemSetTimeoutZero,\n timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveQueryBoolean(option, query) {\n return typeof option === \"function\" ? option(query) : option;\n}\nfunction matchQuery(filters, query) {\n const {\n type = \"all\",\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n if (type !== \"all\") {\n const isActive = query.isActive();\n if (type === \"active\" && !isActive) {\n return false;\n }\n if (type === \"inactive\" && isActive) {\n return false;\n }\n }\n if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n return false;\n }\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n if (predicate && !predicate(query)) {\n return false;\n }\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const { exact, status, predicate, mutationKey } = filters;\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n if (status && mutation.state.status !== status) {\n return false;\n }\n if (predicate && !predicate(mutation)) {\n return false;\n }\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = options?.queryKeyHashFn || hashKey;\n return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n return JSON.stringify(\n queryKey,\n (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val\n );\n}\nfunction partialMatchKey(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n }\n return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b, depth = 0) {\n if (a === b) {\n return a;\n }\n if (depth > 500) return b;\n const array = isPlainArray(a) && isPlainArray(b);\n if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n const aItems = array ? a : Object.keys(a);\n const aSize = aItems.length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? new Array(bSize) : {};\n let equalItems = 0;\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n const aItem = a[key];\n const bItem = b[key];\n if (aItem === bItem) {\n copy[key] = aItem;\n if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n continue;\n }\n if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n copy[key] = bItem;\n continue;\n }\n const v = replaceEqualDeep(aItem, bItem, depth + 1);\n copy[key] = v;\n if (v === aItem) equalItems++;\n }\n return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n }\n const ctor = o.constructor;\n if (ctor === void 0) {\n return true;\n }\n const prot = ctor.prototype;\n if (!hasObjectPrototype(prot)) {\n return false;\n }\n if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n return false;\n }\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false;\n }\n return true;\n}\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n return new Promise((resolve) => {\n timeoutManager.setTimeout(resolve, timeout);\n });\n}\nfunction replaceData(prevData, data, options) {\n if (typeof options.structuralSharing === \"function\") {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== \"production\") {\n try {\n return replaceEqualDeep(prevData, data);\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n );\n throw error;\n }\n }\n return replaceEqualDeep(prevData, data);\n }\n return data;\n}\nfunction keepPreviousData(previousData) {\n return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = /* @__PURE__ */ Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n );\n }\n }\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise;\n }\n if (!options.queryFn || options.queryFn === skipToken) {\n return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n }\n return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n if (typeof throwOnError === \"function\") {\n return throwOnError(...params);\n }\n return !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n let consumed = false;\n let signal;\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n signal ??= getSignal();\n if (consumed) {\n return signal;\n }\n consumed = true;\n if (signal.aborted) {\n onCancelled();\n } else {\n signal.addEventListener(\"abort\", onCancelled, { once: true });\n }\n return signal;\n }\n });\n return object;\n}\nexport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn,\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n isPlainArray,\n isPlainObject,\n isServer,\n isValidTimeout,\n keepPreviousData,\n matchMutation,\n matchQuery,\n noop,\n partialMatchKey,\n replaceData,\n replaceEqualDeep,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n shouldThrowError,\n skipToken,\n sleep,\n timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/environmentManager.ts\nimport { isServer } from \"./utils.js\";\nvar environmentManager = /* @__PURE__ */ (() => {\n let isServerFn = () => isServer;\n return {\n /**\n * Returns whether the current runtime should be treated as a server environment.\n */\n isServer() {\n return isServerFn();\n },\n /**\n * Overrides the server check globally.\n */\n setIsServer(isServerValue) {\n isServerFn = isServerValue;\n }\n };\n})();\nexport {\n environmentManager\n};\n//# sourceMappingURL=environmentManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n let resolve;\n let reject;\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n thenable.status = \"pending\";\n thenable.catch(() => {\n });\n function finalize(data) {\n Object.assign(thenable, data);\n delete thenable.resolve;\n delete thenable.reject;\n }\n thenable.resolve = (value) => {\n finalize({\n status: \"fulfilled\",\n value\n });\n resolve(value);\n };\n thenable.reject = (reason) => {\n finalize({\n status: \"rejected\",\n reason\n });\n reject(reason);\n };\n return thenable;\n}\nfunction tryResolveSync(promise) {\n let data;\n promise.then((result) => {\n data = result;\n return result;\n }, noop)?.catch(noop);\n if (data !== void 0) {\n return { data };\n }\n return void 0;\n}\nexport {\n pendingThenable,\n tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/hydration.ts\nimport { tryResolveSync } from \"./thenable.js\";\nimport { noop } from \"./utils.js\";\nfunction defaultTransformerFn(data) {\n return data;\n}\nfunction dehydrateMutation(mutation) {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n ...mutation.options.scope && { scope: mutation.options.scope },\n ...mutation.meta && { meta: mutation.meta }\n };\n}\nfunction dehydrateQuery(query, serializeData, shouldRedactErrors) {\n const dehydratePromise = () => {\n const promise = query.promise?.then(serializeData).catch((error) => {\n if (!shouldRedactErrors(error)) {\n return Promise.reject(error);\n }\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`\n );\n }\n return Promise.reject(new Error(\"redacted\"));\n });\n promise?.catch(noop);\n return promise;\n };\n return {\n dehydratedAt: Date.now(),\n state: {\n ...query.state,\n ...query.state.data !== void 0 && {\n data: serializeData(query.state.data)\n }\n },\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n ...query.state.status === \"pending\" && {\n promise: dehydratePromise()\n },\n ...query.meta && { meta: query.meta },\n ...query.queryType && { queryType: query.queryType }\n };\n}\nfunction defaultShouldDehydrateMutation(mutation) {\n return mutation.state.isPaused;\n}\nfunction defaultShouldDehydrateQuery(query) {\n return query.state.status === \"success\";\n}\nfunction defaultShouldRedactErrors(_) {\n return true;\n}\nfunction dehydrate(client, options = {}) {\n const filterMutation = options.shouldDehydrateMutation ?? client.getDefaultOptions().dehydrate?.shouldDehydrateMutation ?? defaultShouldDehydrateMutation;\n const mutations = client.getMutationCache().getAll().flatMap(\n (mutation) => filterMutation(mutation) ? [dehydrateMutation(mutation)] : []\n );\n const filterQuery = options.shouldDehydrateQuery ?? client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ?? defaultShouldDehydrateQuery;\n const shouldRedactErrors = options.shouldRedactErrors ?? client.getDefaultOptions().dehydrate?.shouldRedactErrors ?? defaultShouldRedactErrors;\n const serializeData = options.serializeData ?? client.getDefaultOptions().dehydrate?.serializeData ?? defaultTransformerFn;\n const queries = client.getQueryCache().getAll().flatMap(\n (query) => filterQuery(query) ? [dehydrateQuery(query, serializeData, shouldRedactErrors)] : []\n );\n return { mutations, queries };\n}\nfunction hydrate(client, dehydratedState, options) {\n if (typeof dehydratedState !== \"object\" || dehydratedState === null) {\n return;\n }\n const mutationCache = client.getMutationCache();\n const queryCache = client.getQueryCache();\n const deserializeData = options?.defaultOptions?.deserializeData ?? client.getDefaultOptions().hydrate?.deserializeData ?? defaultTransformerFn;\n const mutations = dehydratedState.mutations || [];\n const queries = dehydratedState.queries || [];\n mutations.forEach(({ state, ...mutationOptions }) => {\n mutationCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.mutations,\n ...options?.defaultOptions?.mutations,\n ...mutationOptions\n },\n state\n );\n });\n queries.forEach(\n ({\n queryKey,\n state,\n queryHash,\n meta,\n promise,\n dehydratedAt,\n queryType\n }) => {\n const syncData = promise ? tryResolveSync(promise) : void 0;\n const rawData = state.data === void 0 ? syncData?.data : state.data;\n const data = rawData === void 0 ? rawData : deserializeData(rawData);\n let query = queryCache.get(queryHash);\n const existingQueryIsPending = query?.state.status === \"pending\";\n const existingQueryIsFetching = query?.state.fetchStatus === \"fetching\";\n if (query) {\n const hasNewerSyncData = syncData && // We only need this undefined check to handle older dehydration\n // payloads that might not have dehydratedAt\n dehydratedAt !== void 0 && dehydratedAt > query.state.dataUpdatedAt;\n if (state.dataUpdatedAt > query.state.dataUpdatedAt || hasNewerSyncData) {\n const { fetchStatus: _ignored, ...serializedState } = state;\n query.setState({\n ...serializedState,\n data,\n // If the query was pending at the moment of dehydration, but resolved to have data\n // before hydration, we can assume the query should be hydrated as successful.\n //\n // Since you can opt into dehydrating failed queries, and those can have data from\n // previous successful fetches, we make sure we only do this for pending queries.\n ...state.status === \"pending\" && data !== void 0 && {\n status: \"success\",\n // Preserve existing fetchStatus if the existing query is actively fetching.\n ...!existingQueryIsFetching && {\n fetchStatus: \"idle\"\n }\n }\n });\n }\n } else {\n query = queryCache.build(\n client,\n {\n ...client.getDefaultOptions().hydrate?.queries,\n ...options?.defaultOptions?.queries,\n queryKey,\n queryHash,\n meta,\n _type: queryType\n },\n // Reset fetch status to idle to avoid\n // query being stuck in fetching state upon hydration\n {\n ...state,\n data,\n fetchStatus: \"idle\",\n // Like above, if the query was pending at the moment of dehydration but has data,\n // we can assume it should be hydrated as successful.\n status: state.status === \"pending\" && data !== void 0 ? \"success\" : state.status\n }\n );\n }\n if (promise && // If the data was synchronously available, there is no need to set up\n // a retryer and thus no reason to call fetch\n !syncData && !existingQueryIsPending && !existingQueryIsFetching && // Only hydrate if dehydration is newer than any existing data,\n // this is always true for new queries\n (dehydratedAt === void 0 || dehydratedAt > query.state.dataUpdatedAt)) {\n query.fetch(void 0, {\n // RSC transformed promises are not thenable\n initialPromise: Promise.resolve(promise).then(deserializeData)\n }).catch(noop);\n }\n }\n );\n}\nexport {\n defaultShouldDehydrateMutation,\n defaultShouldDehydrateQuery,\n dehydrate,\n hydrate\n};\n//# sourceMappingURL=hydration.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n let notifyFn = (callback) => {\n callback();\n };\n let batchNotifyFn = (callback) => {\n callback();\n };\n let scheduleFn = defaultScheduler;\n const schedule = (callback) => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleFn(() => {\n notifyFn(callback);\n });\n }\n };\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n return {\n batch: (callback) => {\n let result;\n transactions++;\n try {\n result = callback();\n } finally {\n transactions--;\n if (!transactions) {\n flush();\n }\n }\n return result;\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: (callback) => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn) => {\n notifyFn = fn;\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn) => {\n batchNotifyFn = fn;\n },\n setScheduler: (fn) => {\n scheduleFn = fn;\n }\n };\n}\nvar notifyManager = createNotifyManager();\nexport {\n createNotifyManager,\n defaultScheduler,\n notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar OnlineManager = class extends Subscribable {\n #online = true;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onOnline) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const onlineListener = () => onOnline(true);\n const offlineListener = () => onOnline(false);\n window.addEventListener(\"online\", onlineListener, false);\n window.addEventListener(\"offline\", offlineListener, false);\n return () => {\n window.removeEventListener(\"online\", onlineListener);\n window.removeEventListener(\"offline\", offlineListener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup(this.setOnline.bind(this));\n }\n setOnline(online) {\n const changed = this.#online !== online;\n if (changed) {\n this.#online = online;\n this.listeners.forEach((listener) => {\n listener(online);\n });\n }\n }\n isOnline() {\n return this.#online;\n }\n};\nvar onlineManager = new OnlineManager();\nexport {\n OnlineManager,\n onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n constructor(options) {\n super(\"CancelledError\");\n this.revert = options?.revert;\n this.silent = options?.silent;\n }\n};\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let continueFn;\n const thenable = pendingThenable();\n const isResolved = () => thenable.status !== \"pending\";\n const cancel = (cancelOptions) => {\n if (!isResolved()) {\n const error = new CancelledError(cancelOptions);\n reject(error);\n config.onCancel?.(error);\n }\n };\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n const canStart = () => canFetch(config.networkMode) && config.canRun();\n const resolve = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.resolve(value);\n }\n };\n const reject = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.reject(value);\n }\n };\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved() || canContinue()) {\n continueResolve(value);\n }\n };\n config.onPause?.();\n }).then(() => {\n continueFn = void 0;\n if (!isResolved()) {\n config.onContinue?.();\n }\n });\n };\n const run = () => {\n if (isResolved()) {\n return;\n }\n let promiseOrValue;\n const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n try {\n promiseOrValue = initialPromise ?? config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n if (isResolved()) {\n return;\n }\n const retry = config.retry ?? (environmentManager.isServer() ? 0 : 3);\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n if (isRetryCancelled || !shouldRetry) {\n reject(error);\n return;\n }\n failureCount++;\n config.onFail?.(failureCount, error);\n sleep(delay).then(() => {\n return canContinue() ? void 0 : pause();\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n };\n return {\n promise: thenable,\n status: () => thenable.status,\n cancel,\n continue: () => {\n continueFn?.();\n return thenable;\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n if (canStart()) {\n run();\n } else {\n pause().then(run);\n }\n return thenable;\n }\n };\n}\nexport {\n CancelledError,\n canFetch,\n createRetryer,\n isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n #gcTimeout;\n destroy() {\n this.clearGcTimeout();\n }\n scheduleGc() {\n this.clearGcTimeout();\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = timeoutManager.setTimeout(() => {\n this.optionalRemove();\n }, this.gcTime);\n }\n }\n updateGcTime(newGcTime) {\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (environmentManager.isServer() ? Infinity : 5 * 60 * 1e3)\n );\n }\n clearGcTimeout() {\n if (this.#gcTimeout !== void 0) {\n timeoutManager.clearTimeout(this.#gcTimeout);\n this.#gcTimeout = void 0;\n }\n }\n};\nexport {\n Removable\n};\n//# sourceMappingURL=removable.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject(context.signal.reason);\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/query.ts\nimport {\n ensureQueryFn,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n skipToken,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar Query = class extends Removable {\n #queryType;\n #initialState;\n #revertState;\n #cache;\n #client;\n #retryer;\n #defaultOptions;\n #abortSignalConsumed;\n constructor(config) {\n super();\n this.#abortSignalConsumed = false;\n this.#defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.#client = config.client;\n this.#cache = this.#client.getQueryCache();\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.#initialState = getDefaultState(this.options);\n this.state = config.state ?? this.#initialState;\n this.scheduleGc();\n }\n get meta() {\n return this.options.meta;\n }\n get queryType() {\n return this.#queryType;\n }\n get promise() {\n return this.#retryer?.promise;\n }\n setOptions(options) {\n this.options = { ...this.#defaultOptions, ...options };\n if (options?._type) {\n this.#queryType = options._type;\n }\n this.updateGcTime(this.options.gcTime);\n if (this.state && this.state.data === void 0) {\n const defaultState = getDefaultState(this.options);\n if (defaultState.data !== void 0) {\n this.setState(\n successState(defaultState.data, defaultState.dataUpdatedAt)\n );\n this.#initialState = defaultState;\n }\n }\n }\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n this.#cache.remove(this);\n }\n }\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options);\n this.#dispatch({\n data,\n type: \"success\",\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual\n });\n return data;\n }\n setState(state) {\n this.#dispatch({ type: \"setState\", state });\n }\n cancel(options) {\n const promise = this.#retryer?.promise;\n this.#retryer?.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n destroy() {\n super.destroy();\n this.cancel({ silent: true });\n }\n get resetState() {\n return this.#initialState;\n }\n reset() {\n this.destroy();\n this.setState(this.resetState);\n }\n isActive() {\n return this.observers.some(\n (observer) => resolveQueryBoolean(observer.options.enabled, this) !== false\n );\n }\n isDisabled() {\n if (this.getObserversCount() > 0) {\n return !this.isActive();\n }\n return this.options.queryFn === skipToken || !this.isFetched();\n }\n isFetched() {\n return this.state.dataUpdateCount + this.state.errorUpdateCount > 0;\n }\n isStatic() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n );\n }\n return false;\n }\n isStale() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale\n );\n }\n return this.state.data === void 0 || this.state.isInvalidated;\n }\n isStaleByTime(staleTime = 0) {\n if (this.state.data === void 0) {\n return true;\n }\n if (staleTime === \"static\") {\n return false;\n }\n if (this.state.isInvalidated) {\n return true;\n }\n return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n onFocus() {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n onOnline() {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer);\n this.clearGcTimeout();\n this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n }\n }\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer);\n if (!this.observers.length) {\n if (this.#retryer) {\n if (this.#abortSignalConsumed || this.#isInitialPausedFetch()) {\n this.#retryer.cancel({ revert: true });\n } else {\n this.#retryer.cancelRetry();\n }\n }\n this.scheduleGc();\n }\n this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n }\n }\n getObserversCount() {\n return this.observers.length;\n }\n #isInitialPausedFetch() {\n return this.state.fetchStatus === \"paused\" && this.state.status === \"pending\";\n }\n invalidate() {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: \"invalidate\" });\n }\n }\n async fetch(options, fetchOptions) {\n if (this.state.fetchStatus !== \"idle\" && // If the promise in the retryer is already rejected, we have to definitely\n // re-start the fetch; there is a chance that the query is still in a\n // pending state when that happens\n this.#retryer?.status() !== \"rejected\") {\n if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n this.cancel({ silent: true });\n } else if (this.#retryer) {\n this.#retryer.continueRetry();\n return this.#retryer.promise;\n }\n }\n if (options) {\n this.setOptions(options);\n }\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn);\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n );\n }\n }\n const abortController = new AbortController();\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true;\n return abortController.signal;\n }\n });\n };\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions);\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: this.#client,\n queryKey: this.queryKey,\n meta: this.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n this.#abortSignalConsumed = false;\n if (this.options.persister) {\n return this.options.persister(\n queryFn,\n queryFnContext,\n this\n );\n }\n return queryFn(queryFnContext);\n };\n const createFetchContext = () => {\n const context2 = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n client: this.#client,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context2);\n return context2;\n };\n const context = createFetchContext();\n const behavior = this.#queryType === \"infinite\" ? infiniteQueryBehavior(\n this.options.pages\n ) : this.options.behavior;\n behavior?.onFetch(context, this);\n this.#revertState = this.state;\n if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n }\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise,\n fn: context.fetchFn,\n onCancel: (error) => {\n if (error instanceof CancelledError && error.revert) {\n this.setState({\n ...this.#revertState,\n fetchStatus: \"idle\"\n });\n }\n abortController.abort();\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true\n });\n try {\n const data = await this.#retryer.start();\n if (data === void 0) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n );\n }\n throw new Error(`${this.queryHash} data is undefined`);\n }\n this.setData(data);\n this.#cache.config.onSuccess?.(data, this);\n this.#cache.config.onSettled?.(\n data,\n this.state.error,\n this\n );\n return data;\n } catch (error) {\n if (error instanceof CancelledError) {\n if (error.silent) {\n return this.#retryer.promise;\n } else if (error.revert) {\n if (this.state.data === void 0) {\n throw error;\n }\n return this.state.data;\n }\n }\n this.#dispatch({\n type: \"error\",\n error\n });\n this.#cache.config.onError?.(\n error,\n this\n );\n this.#cache.config.onSettled?.(\n this.state.data,\n error,\n this\n );\n throw error;\n } finally {\n this.scheduleGc();\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n fetchStatus: \"paused\"\n };\n case \"continue\":\n return {\n ...state,\n fetchStatus: \"fetching\"\n };\n case \"fetch\":\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null\n };\n case \"success\":\n const newState = {\n ...state,\n ...successState(action.data, action.dataUpdatedAt),\n dataUpdateCount: state.dataUpdateCount + 1,\n ...!action.manual && {\n fetchStatus: \"idle\",\n fetchFailureCount: 0,\n fetchFailureReason: null\n }\n };\n this.#revertState = action.manual ? newState : void 0;\n return newState;\n case \"error\":\n const error = action.error;\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: \"idle\",\n status: \"error\",\n // flag existing data as invalidated if we get a background error\n // note that \"no data\" always means stale so we can set unconditionally here\n isInvalidated: true\n };\n case \"invalidate\":\n return {\n ...state,\n isInvalidated: true\n };\n case \"setState\":\n return {\n ...state,\n ...action.state\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate();\n });\n this.#cache.notify({ query: this, type: \"updated\", action });\n });\n }\n};\nfunction fetchState(data, options) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n ...data === void 0 && {\n error: null,\n status: \"pending\"\n }\n };\n}\nfunction successState(data, dataUpdatedAt) {\n return {\n data,\n dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: \"success\"\n };\n}\nfunction getDefaultState(options) {\n const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n const hasData = data !== void 0;\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? \"success\" : \"pending\",\n fetchStatus: \"idle\"\n };\n}\nexport {\n Query,\n fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n isValidTimeout,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.#currentThenable = pendingThenable();\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #currentThenable;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveQueryBoolean(this.options.enabled, this.#currentQuery) !== resolveQueryBoolean(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n return new Proxy(result, {\n get: (target, key) => {\n this.trackProp(key);\n onPropTracked?.(key);\n if (key === \"promise\") {\n this.trackProp(\"data\");\n if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n this.#currentThenable.reject(\n new Error(\n \"experimental_prefetchInRender feature flag is not enabled\"\n )\n );\n }\n }\n return Reflect.get(target, key);\n }\n });\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (environmentManager.isServer() || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (environmentManager.isServer() || resolveQueryBoolean(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = timeoutManager.setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId !== void 0) {\n timeoutManager.clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId !== void 0) {\n timeoutManager.clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n data = newState.data;\n let skipSelect = false;\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n skipSelect = true;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (options.select && data !== void 0 && !skipSelect) {\n if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: query.isFetched(),\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n isEnabled: resolveQueryBoolean(options.enabled, query) !== false\n };\n const nextResult = result;\n if (this.options.experimental_prefetchInRender) {\n const hasResultData = nextResult.data !== void 0;\n const isErrorWithoutData = nextResult.status === \"error\" && !hasResultData;\n const finalizeThenableIfPossible = (thenable) => {\n if (isErrorWithoutData) {\n thenable.reject(nextResult.error);\n } else if (hasResultData) {\n thenable.resolve(nextResult.data);\n }\n };\n const recreateThenable = () => {\n const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n finalizeThenableIfPossible(pending);\n };\n const prevThenable = this.#currentThenable;\n switch (prevThenable.status) {\n case \"pending\":\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable);\n }\n break;\n case \"fulfilled\":\n if (isErrorWithoutData || nextResult.data !== prevThenable.value) {\n recreateThenable();\n }\n break;\n case \"rejected\":\n if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) {\n recreateThenable();\n }\n break;\n }\n }\n return nextResult;\n }\n updateResult() {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n this.#notify({ listeners: shouldNotifyListeners() });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && resolveQueryBoolean(options.retryOnMount, query) === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveQueryBoolean(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveQueryBoolean(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveQueryBoolean(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/infiniteQueryObserver.ts\nimport { QueryObserver } from \"./queryObserver.js\";\nimport { hasNextPage, hasPreviousPage } from \"./infiniteQueryBehavior.js\";\nvar InfiniteQueryObserver = class extends QueryObserver {\n constructor(client, options) {\n super(client, options);\n }\n bindMethods() {\n super.bindMethods();\n this.fetchNextPage = this.fetchNextPage.bind(this);\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this);\n }\n setOptions(options) {\n options._type = \"infinite\";\n super.setOptions(options);\n }\n getOptimisticResult(options) {\n options._type = \"infinite\";\n return super.getOptimisticResult(options);\n }\n fetchNextPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"forward\" }\n }\n });\n }\n fetchPreviousPage(options) {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: \"backward\" }\n }\n });\n }\n createResult(query, options) {\n const { state } = query;\n const parentResult = super.createResult(query, options);\n const { isFetching, isRefetching, isError, isRefetchError } = parentResult;\n const fetchDirection = state.fetchMeta?.fetchMore?.direction;\n const isFetchNextPageError = isError && fetchDirection === \"forward\";\n const isFetchingNextPage = isFetching && fetchDirection === \"forward\";\n const isFetchPreviousPageError = isError && fetchDirection === \"backward\";\n const isFetchingPreviousPage = isFetching && fetchDirection === \"backward\";\n const result = {\n ...parentResult,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchNextPageError,\n isFetchingNextPage,\n isFetchPreviousPageError,\n isFetchingPreviousPage,\n isRefetchError: isRefetchError && !isFetchNextPageError && !isFetchPreviousPageError,\n isRefetching: isRefetching && !isFetchingNextPage && !isFetchingPreviousPage\n };\n return result;\n }\n};\nexport {\n InfiniteQueryObserver\n};\n//# sourceMappingURL=infiniteQueryObserver.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #client;\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.#client = config.client;\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n const onContinue = () => {\n this.#dispatch({ type: \"continue\" });\n };\n const mutationFnContext = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables, mutationFnContext);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue,\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (restored) {\n onContinue();\n } else {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n if (this.#mutationCache.config.onMutate) {\n await this.#mutationCache.config.onMutate(\n variables,\n this,\n mutationFnContext\n );\n }\n const context = await this.options.onMutate?.(\n variables,\n mutationFnContext\n );\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSuccess?.(\n data,\n variables,\n this.state.context,\n mutationFnContext\n );\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSettled?.(\n data,\n null,\n variables,\n this.state.context,\n mutationFnContext\n );\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onError?.(\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n this.#dispatch({ type: \"error\", error });\n throw error;\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n #client;\n #currentResult = void 0;\n #currentMutation;\n #mutateOptions;\n constructor(client, options) {\n super();\n this.#client = client;\n this.setOptions(options);\n this.bindMethods();\n this.#updateResult();\n }\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n this.options = this.#client.defaultMutationOptions(options);\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: \"observerOptionsUpdated\",\n mutation: this.#currentMutation,\n observer: this\n });\n }\n if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n this.reset();\n } else if (this.#currentMutation?.state.status === \"pending\") {\n this.#currentMutation.setOptions(this.options);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this);\n }\n }\n onMutationUpdate(action) {\n this.#updateResult();\n this.#notify(action);\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n reset() {\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = void 0;\n this.#updateResult();\n this.#notify();\n }\n mutate(variables, options) {\n this.#mutateOptions = options;\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n this.#currentMutation.addObserver(this);\n return this.#currentMutation.execute(variables);\n }\n #updateResult() {\n const state = this.#currentMutation?.state ?? getDefaultState();\n this.#currentResult = {\n ...state,\n isPending: state.status === \"pending\",\n isSuccess: state.status === \"success\",\n isError: state.status === \"error\",\n isIdle: state.status === \"idle\",\n mutate: this.mutate,\n reset: this.reset\n };\n }\n #notify(action) {\n notifyManager.batch(() => {\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables;\n const onMutateResult = this.#currentResult.context;\n const context = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n if (action?.type === \"success\") {\n try {\n this.#mutateOptions.onSuccess?.(\n action.data,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n action.data,\n null,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n } else if (action?.type === \"error\") {\n try {\n this.#mutateOptions.onError?.(\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n void 0,\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n }\n }\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n });\n }\n};\nexport {\n MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options._type = \"infinite\";\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options._type = \"infinite\";\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n void 0\n);\nvar useQueryClient = (queryClient) => {\n const client = React.useContext(QueryClientContext);\n if (queryClient) {\n return queryClient;\n }\n if (!client) {\n throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n }\n return client;\n};\nvar QueryClientProvider = ({\n client,\n children\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n const throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n if (options.suspense || options.experimental_prefetchInRender || throwOnError) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n const MIN_SUSPENSE_TIME_MS = 1e3;\n const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n const originalStaleTime = defaultedOptions.staleTime;\n defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(\n defaultedOptions.gcTime,\n MIN_SUSPENSE_TIME_MS\n );\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { environmentManager, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const client = useQueryClient(queryClient);\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n const query = client.getQueryCache().get(defaultedOptions.queryHash);\n if (process.env.NODE_ENV !== \"production\") {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n );\n }\n }\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n useClearResetErrorBoundary(errorResetBoundary);\n const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n const shouldSubscribe = !isRestoring && options.subscribed !== false;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n observer.updateResult();\n return unsubscribe;\n },\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions);\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query,\n suspense: defaultedOptions.suspense\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n if (defaultedOptions.experimental_prefetchInRender && !environmentManager.isServer() && willFetch(result, isRestoring)) {\n const promise = isNewCacheEntry ? (\n // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n ) : (\n // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n query?.promise\n );\n promise?.catch(noop).finally(() => {\n observer.updateResult();\n });\n }\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n MutationObserver,\n noop,\n notifyManager,\n shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n const client = useQueryClient(queryClient);\n const [observer] = React.useState(\n () => new MutationObserver(\n client,\n options\n )\n );\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n const mutate = React.useCallback(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n },\n [observer]\n );\n if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n throw result.error;\n }\n return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n useMutation\n};\n//# sourceMappingURL=useMutation.js.map","\"use client\";\n\n// src/useInfiniteQuery.ts\nimport { InfiniteQueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useInfiniteQuery(options, queryClient) {\n return useBaseQuery(\n options,\n InfiniteQueryObserver,\n queryClient\n );\n}\nexport {\n useInfiniteQuery\n};\n//# sourceMappingURL=useInfiniteQuery.js.map","\"use client\";\nimport * as React$1 from \"react\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\n/**\n* React.use if available (React 19+), undefined otherwise.\n* Use dynamic lookup to avoid Webpack compilation errors with React 18.\n*/\nvar reactUse = React$1[\"use\"];\nvar useLayoutEffect = isServer ?? typeof window === \"undefined\" ? React$1.useEffect : React$1.useLayoutEffect;\n/**\n* React hook to wrap `IntersectionObserver`.\n*\n* This hook will create an `IntersectionObserver` and observe the ref passed to it.\n*\n* When the intersection changes, the callback will be called with the `IntersectionObserverEntry`.\n*\n* @param ref - The ref to observe\n* @param callback - The callback to call when the intersection changes\n* @param disabled - Whether observation is disabled\n* @returns The IntersectionObserver instance\n* @example\n* ```tsx\n* const MyComponent = () => {\n* const ref = React.useRef<HTMLDivElement>(null)\n* useIntersectionObserver(\n* ref,\n* (entry) => { doSomething(entry) },\n* false\n* )\n* return <div ref={ref} />\n* ```\n*/\nfunction useIntersectionObserver(ref, callback, disabled) {\n\tReact$1.useEffect(() => {\n\t\tif (!ref.current || disabled || typeof IntersectionObserver !== \"function\") return () => callback();\n\t\tconst observer = new IntersectionObserver((entries) => {\n\t\t\tcallback(entries.pop());\n\t\t}, { rootMargin: \"100px\" });\n\t\tobserver.observe(ref.current);\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t\tcallback();\n\t\t};\n\t}, [\n\t\tcallback,\n\t\tdisabled,\n\t\tref\n\t]);\n}\n/**\n* React hook to take a `React.ForwardedRef` and returns a `ref` that can be used on a DOM element.\n*\n* @param ref - The forwarded ref\n* @returns The inner ref returned by `useRef`\n* @example\n* ```tsx\n* const MyComponent = React.forwardRef((props, ref) => {\n* const innerRef = useForwardedRef(ref)\n* return <div ref={innerRef} />\n* })\n* ```\n*/\nfunction useForwardedRef(ref) {\n\tconst innerRef = React$1.useRef(null);\n\tReact$1.useImperativeHandle(ref, () => innerRef.current, []);\n\treturn innerRef;\n}\n//#endregion\nexport { reactUse, useForwardedRef, useIntersectionObserver, useLayoutEffect };\n\n//# sourceMappingURL=utils.js.map","import { isServer } from \"@tanstack/router-core/isServer\";\n//#region src/utils.ts\n/**\n* Return the last element of an array.\n* Intended for non-empty arrays used within router internals.\n*/\nfunction last(arr) {\n\treturn arr[arr.length - 1];\n}\n/**\n* Apply a value-or-updater to a previous value.\n* Accepts either a literal value or a function of the previous value.\n*/\nfunction functionalUpdate(updater, previous) {\n\tif (typeof updater === \"function\") return updater(previous);\n\treturn updater;\n}\nconst hasOwn = Object.prototype.hasOwnProperty;\nconst isEnumerable = Object.prototype.propertyIsEnumerable;\nfunction hasKeys(obj) {\n\tfor (const key in obj) if (hasOwn.call(obj, key)) return true;\n\treturn false;\n}\nconst createNull = () => Object.create(null);\nconst nullReplaceEqualDeep = (prev, next) => replaceEqualDeep(prev, next, createNull);\n/**\n* This function returns `prev` if `_next` is deeply equal.\n* If not, it will replace any deeply equal children of `b` with those of `a`.\n* This can be used for structural sharing between immutable JSON values for example.\n* Do not use this with signals\n*/\nfunction replaceEqualDeep(prev, _next, _makeObj = () => ({}), _depth = 0) {\n\tif (isServer) return _next;\n\tif (prev === _next) return prev;\n\tif (_depth > 500) return _next;\n\tconst next = _next;\n\tconst array = isPlainArray(prev) && isPlainArray(next);\n\tif (!array && !(isPlainObject(prev) && isPlainObject(next))) return next;\n\tconst prevItems = array ? prev : getEnumerableOwnKeys(prev);\n\tif (!prevItems) return next;\n\tconst nextItems = array ? next : getEnumerableOwnKeys(next);\n\tif (!nextItems) return next;\n\tconst prevSize = prevItems.length;\n\tconst nextSize = nextItems.length;\n\tconst copy = array ? new Array(nextSize) : _makeObj();\n\tlet equalItems = 0;\n\tfor (let i = 0; i < nextSize; i++) {\n\t\tconst key = array ? i : nextItems[i];\n\t\tconst p = prev[key];\n\t\tconst n = next[key];\n\t\tif (p === n) {\n\t\t\tcopy[key] = p;\n\t\t\tif (array ? i < prevSize : hasOwn.call(prev, key)) equalItems++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (p === null || n === null || typeof p !== \"object\" || typeof n !== \"object\") {\n\t\t\tcopy[key] = n;\n\t\t\tcontinue;\n\t\t}\n\t\tconst v = replaceEqualDeep(p, n, _makeObj, _depth + 1);\n\t\tcopy[key] = v;\n\t\tif (v === p) equalItems++;\n\t}\n\treturn prevSize === nextSize && equalItems === prevSize ? prev : copy;\n}\n/**\n* Equivalent to `Reflect.ownKeys`, but ensures that objects are \"clone-friendly\":\n* will return false if object has any non-enumerable properties.\n*\n* Optimized for the common case where objects have no symbol properties.\n*/\nfunction getEnumerableOwnKeys(o) {\n\tconst keys = Object.keys(o);\n\tif (keys.length !== Object.getOwnPropertyNames(o).length) return false;\n\tconst symbols = Object.getOwnPropertySymbols(o);\n\tif (symbols.length === 0) return keys;\n\tfor (const symbol of symbols) {\n\t\tif (!isEnumerable.call(o, symbol)) return false;\n\t\tkeys.push(symbol);\n\t}\n\treturn keys;\n}\nfunction isPlainObject(o) {\n\tif (!hasObjectPrototype(o)) return false;\n\tconst ctor = o.constructor;\n\tif (typeof ctor === \"undefined\") return true;\n\tconst prot = ctor.prototype;\n\tif (!hasObjectPrototype(prot)) return false;\n\tif (!prot.hasOwnProperty(\"isPrototypeOf\")) return false;\n\treturn true;\n}\nfunction hasObjectPrototype(o) {\n\treturn Object.prototype.toString.call(o) === \"[object Object]\";\n}\n/**\n* Check if a value is a \"plain\" array (no extra enumerable keys).\n*/\nfunction isPlainArray(value) {\n\treturn Array.isArray(value) && value.length === Object.keys(value).length;\n}\n/**\n* Perform a deep equality check with options for partial comparison and\n* ignoring `undefined` values. Optimized for router state comparisons.\n*/\nfunction deepEqual(a, b, opts) {\n\tif (a === b) return true;\n\tif (typeof a !== typeof b) return false;\n\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\tif (a.length !== b.length) return false;\n\t\tfor (let i = 0, l = a.length; i < l; i++) if (!deepEqual(a[i], b[i], opts)) return false;\n\t\treturn true;\n\t}\n\tif (isPlainObject(a) && isPlainObject(b)) {\n\t\tconst ignoreUndefined = opts?.ignoreUndefined ?? true;\n\t\tif (opts?.partial) {\n\t\t\tfor (const k in b) if (!ignoreUndefined || b[k] !== void 0) {\n\t\t\t\tif (!deepEqual(a[k], b[k], opts)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tlet aCount = 0;\n\t\tif (!ignoreUndefined) aCount = Object.keys(a).length;\n\t\telse for (const k in a) if (a[k] !== void 0) aCount++;\n\t\tlet bCount = 0;\n\t\tfor (const k in b) if (!ignoreUndefined || b[k] !== void 0) {\n\t\t\tbCount++;\n\t\t\tif (bCount > aCount || !deepEqual(a[k], b[k], opts)) return false;\n\t\t}\n\t\treturn aCount === bCount;\n\t}\n\treturn false;\n}\n/**\n* Create a promise with exposed resolve/reject and status fields.\n* Useful for coordinating async router lifecycle operations.\n*/\nfunction createControlledPromise(onResolve) {\n\tlet resolveLoadPromise;\n\tlet rejectLoadPromise;\n\tconst controlledPromise = new Promise((resolve, reject) => {\n\t\tresolveLoadPromise = resolve;\n\t\trejectLoadPromise = reject;\n\t});\n\tcontrolledPromise.status = \"pending\";\n\tcontrolledPromise.resolve = (value) => {\n\t\tcontrolledPromise.status = \"resolved\";\n\t\tcontrolledPromise.value = value;\n\t\tresolveLoadPromise(value);\n\t\tonResolve?.(value);\n\t};\n\tcontrolledPromise.reject = (e) => {\n\t\tcontrolledPromise.status = \"rejected\";\n\t\trejectLoadPromise(e);\n\t};\n\treturn controlledPromise;\n}\n/**\n* Heuristically detect dynamic import \"module not found\" errors\n* across major browsers for lazy route component handling.\n*/\nfunction isModuleNotFoundError(error) {\n\tif (typeof error?.message !== \"string\") return false;\n\treturn error.message.startsWith(\"Failed to fetch dynamically imported module\") || error.message.startsWith(\"error loading dynamically imported module\") || error.message.startsWith(\"Importing a module script failed\");\n}\nfunction findLast(array, predicate) {\n\tfor (let i = array.length - 1; i >= 0; i--) {\n\t\tconst item = array[i];\n\t\tif (predicate(item)) return item;\n\t}\n}\n/**\n* Re-encode characters that are unsafe in URL paths.\n* Includes ASCII control characters (0x00-0x1F, 0x7F) and a subset of the\n* WHATWG URL \"path percent-encode set\" (\", <, >, `, {, }).\n*\n* Space (0x20) is intentionally excluded — decodeURI decodes %20 to space\n* and the router stores decoded spaces in location.pathname. The existing\n* encodePathLikeUrl already handles re-encoding spaces for outgoing URLs.\n*\n* These characters are decoded by decodeURI but must remain percent-encoded\n* in paths to match how upstream layers (CDNs, edge middleware, browsers)\n* interpret the URL, preventing infinite redirect loops and path mismatches.\n*/\nconst PATH_UNSAFE_RE = /[\\x00-\\x1f\\x7f\"<>`{}]/g;\nfunction sanitizePathSegment(segment) {\n\treturn segment.replace(PATH_UNSAFE_RE, (ch) => \"%\" + ch.charCodeAt(0).toString(16).toUpperCase().padStart(2, \"0\"));\n}\nfunction decodeSegment(segment) {\n\tlet decoded;\n\ttry {\n\t\tdecoded = decodeURI(segment);\n\t} catch {\n\t\tdecoded = segment.replaceAll(/%[0-9A-F]{2}/gi, (match) => {\n\t\t\ttry {\n\t\t\t\treturn decodeURI(match);\n\t\t\t} catch {\n\t\t\t\treturn match;\n\t\t\t}\n\t\t});\n\t}\n\treturn sanitizePathSegment(decoded);\n}\n/**\n* Default list of URL protocols to allow in links, redirects, and navigation.\n* Any absolute URL protocol not in this list is treated as dangerous by default.\n*/\nconst DEFAULT_PROTOCOL_ALLOWLIST = [\n\t\"http:\",\n\t\"https:\",\n\t\"mailto:\",\n\t\"tel:\"\n];\n/**\n* Check if a URL string uses a protocol that is not in the allowlist.\n* Returns true for blocked protocols like javascript:, blob:, data:, etc.\n*\n* The URL constructor correctly normalizes:\n* - Mixed case (JavaScript: → javascript:)\n* - Whitespace/control characters (java\\nscript: → javascript:)\n* - Leading whitespace\n*\n* For relative URLs (no protocol), returns false (safe).\n*\n* @param url - The URL string to check\n* @param allowlist - Set of protocols to allow\n* @returns true if the URL uses a protocol that is not allowed\n*/\nfunction isDangerousProtocol(url, allowlist) {\n\tif (!url) return false;\n\ttry {\n\t\tconst parsed = new URL(url);\n\t\treturn !allowlist.has(parsed.protocol);\n\t} catch {\n\t\treturn false;\n\t}\n}\nconst HTML_ESCAPE_LOOKUP = {\n\t\"&\": \"\\\\u0026\",\n\t\">\": \"\\\\u003e\",\n\t\"<\": \"\\\\u003c\",\n\t\"\\u2028\": \"\\\\u2028\",\n\t\"\\u2029\": \"\\\\u2029\"\n};\nconst HTML_ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\n/**\n* Escape HTML special characters in a string to prevent XSS attacks\n* when embedding strings in script tags during SSR.\n*\n* This is essential for preventing XSS vulnerabilities when user-controlled\n* content is embedded in inline scripts.\n*/\nfunction escapeHtml(str) {\n\treturn str.replace(HTML_ESCAPE_REGEX, (match) => HTML_ESCAPE_LOOKUP[match]);\n}\nfunction decodePath(path) {\n\tif (!path) return {\n\t\tpath,\n\t\thandledProtocolRelativeURL: false\n\t};\n\tif (!/[%\\\\\\x00-\\x1f\\x7f]/.test(path) && !path.startsWith(\"//\")) return {\n\t\tpath,\n\t\thandledProtocolRelativeURL: false\n\t};\n\tconst re = /%25|%5C/gi;\n\tlet cursor = 0;\n\tlet result = \"\";\n\tlet match;\n\twhile (null !== (match = re.exec(path))) {\n\t\tresult += decodeSegment(path.slice(cursor, match.index)) + match[0];\n\t\tcursor = re.lastIndex;\n\t}\n\tresult = result + decodeSegment(cursor ? path.slice(cursor) : path);\n\tlet handledProtocolRelativeURL = false;\n\tif (result.startsWith(\"//\")) {\n\t\thandledProtocolRelativeURL = true;\n\t\tresult = \"/\" + result.replace(/^\\/+/, \"\");\n\t}\n\treturn {\n\t\tpath: result,\n\t\thandledProtocolRelativeURL\n\t};\n}\n/**\n* Encodes a path the same way `new URL()` would, but without the overhead of full URL parsing.\n*\n* This function encodes:\n* - Whitespace characters (spaces → %20, tabs → %09, etc.)\n* - Non-ASCII/Unicode characters (emojis, accented characters, etc.)\n*\n* It preserves:\n* - Already percent-encoded sequences (won't double-encode %2F, %25, etc.)\n* - ASCII special characters valid in URL paths (@, $, &, +, etc.)\n* - Forward slashes as path separators\n*\n* Used to generate proper href values for SSR without constructing URL objects.\n*\n* @example\n* encodePathLikeUrl('/path/file name.pdf') // '/path/file%20name.pdf'\n* encodePathLikeUrl('/path/日本語') // '/path/%E6%97%A5%E6%9C%AC%E8%AA%9E'\n* encodePathLikeUrl('/path/already%20encoded') // '/path/already%20encoded' (preserved)\n*/\nfunction encodePathLikeUrl(path) {\n\tif (!/\\s|[^\\u0000-\\u007F]/.test(path)) return path;\n\treturn path.replace(/\\s|[^\\u0000-\\u007F]/gu, encodeURIComponent);\n}\n/**\n* Builds the dev-mode CSS styles URL for route-scoped CSS collection.\n* Used by HeadContent components in all framework implementations to construct\n* the URL for the `/@tanstack-start/styles.css` endpoint.\n*\n* @param basepath - The router's basepath (may or may not have leading slash)\n* @param routeIds - Array of matched route IDs to include in the CSS collection\n* @returns The full URL path for the dev styles CSS endpoint\n*/\nfunction buildDevStylesUrl(basepath, routeIds) {\n\tconst trimmedBasepath = basepath.replace(/^\\/+|\\/+$/g, \"\");\n\treturn `${trimmedBasepath === \"\" ? \"\" : `/${trimmedBasepath}`}/@tanstack-start/styles.css?routes=${encodeURIComponent(routeIds.join(\",\"))}`;\n}\nfunction arraysEqual(a, b) {\n\tif (a === b) return true;\n\tif (a.length !== b.length) return false;\n\tfor (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n\treturn true;\n}\n//#endregion\nexport { DEFAULT_PROTOCOL_ALLOWLIST, arraysEqual, buildDevStylesUrl, createControlledPromise, decodePath, deepEqual, encodePathLikeUrl, escapeHtml, findLast, functionalUpdate, hasKeys, hasOwn, isDangerousProtocol, isModuleNotFoundError, isPlainArray, isPlainObject, last, nullReplaceEqualDeep, replaceEqualDeep };\n\n//# sourceMappingURL=utils.js.map","//#region src/invariant.ts\nfunction invariant() {\n\tthrow new Error(\"Invariant failed\");\n}\n//#endregion\nexport { invariant };\n\n//# sourceMappingURL=invariant.js.map","//#region src/lru-cache.ts\nfunction createLRUCache(max) {\n\tconst cache = /* @__PURE__ */ new Map();\n\tlet oldest;\n\tlet newest;\n\tconst touch = (entry) => {\n\t\tif (!entry.next) return;\n\t\tif (!entry.prev) {\n\t\t\tentry.next.prev = void 0;\n\t\t\toldest = entry.next;\n\t\t\tentry.next = void 0;\n\t\t\tif (newest) {\n\t\t\t\tentry.prev = newest;\n\t\t\t\tnewest.next = entry;\n\t\t\t}\n\t\t} else {\n\t\t\tentry.prev.next = entry.next;\n\t\t\tentry.next.prev = entry.prev;\n\t\t\tentry.next = void 0;\n\t\t\tif (newest) {\n\t\t\t\tnewest.next = entry;\n\t\t\t\tentry.prev = newest;\n\t\t\t}\n\t\t}\n\t\tnewest = entry;\n\t};\n\treturn {\n\t\tget(key) {\n\t\t\tconst entry = cache.get(key);\n\t\t\tif (!entry) return void 0;\n\t\t\ttouch(entry);\n\t\t\treturn entry.value;\n\t\t},\n\t\tset(key, value) {\n\t\t\tif (cache.size >= max && oldest) {\n\t\t\t\tconst toDelete = oldest;\n\t\t\t\tcache.delete(toDelete.key);\n\t\t\t\tif (toDelete.next) {\n\t\t\t\t\toldest = toDelete.next;\n\t\t\t\t\ttoDelete.next.prev = void 0;\n\t\t\t\t}\n\t\t\t\tif (toDelete === newest) newest = void 0;\n\t\t\t}\n\t\t\tconst existing = cache.get(key);\n\t\t\tif (existing) {\n\t\t\t\texisting.value = value;\n\t\t\t\ttouch(existing);\n\t\t\t} else {\n\t\t\t\tconst entry = {\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue,\n\t\t\t\t\tprev: newest\n\t\t\t\t};\n\t\t\t\tif (newest) newest.next = entry;\n\t\t\t\tnewest = entry;\n\t\t\t\tif (!oldest) oldest = entry;\n\t\t\t\tcache.set(key, entry);\n\t\t\t}\n\t\t},\n\t\tclear() {\n\t\t\tcache.clear();\n\t\t\toldest = void 0;\n\t\t\tnewest = void 0;\n\t\t}\n\t};\n}\n//#endregion\nexport { createLRUCache };\n\n//# sourceMappingURL=lru-cache.js.map","import { last } from \"./utils.js\";\nimport { invariant } from \"./invariant.js\";\nimport { createLRUCache } from \"./lru-cache.js\";\nconst SEGMENT_TYPE_INDEX = 4;\nconst SEGMENT_TYPE_PATHLESS = 5;\n/**\n* Populates the `output` array with the parsed representation of the given `segment` string.\n*\n* Usage:\n* ```ts\n* let output\n* let cursor = 0\n* while (cursor < path.length) {\n* output = parseSegment(path, cursor, output)\n* const end = output[5]\n* cursor = end + 1\n* ```\n*\n* `output` is stored outside to avoid allocations during repeated calls. It doesn't need to be typed\n* or initialized, it will be done automatically.\n*/\nfunction parseSegment(path, start, output = new Uint16Array(6)) {\n\tconst next = path.indexOf(\"/\", start);\n\tconst end = next === -1 ? path.length : next;\n\tconst part = path.substring(start, end);\n\tif (!part || !part.includes(\"$\")) {\n\t\toutput[0] = 0;\n\t\toutput[1] = start;\n\t\toutput[2] = start;\n\t\toutput[3] = end;\n\t\toutput[4] = end;\n\t\toutput[5] = end;\n\t\treturn output;\n\t}\n\tif (part === \"$\") {\n\t\tconst total = path.length;\n\t\toutput[0] = 2;\n\t\toutput[1] = start;\n\t\toutput[2] = start;\n\t\toutput[3] = total;\n\t\toutput[4] = total;\n\t\toutput[5] = total;\n\t\treturn output;\n\t}\n\tif (part.charCodeAt(0) === 36) {\n\t\toutput[0] = 1;\n\t\toutput[1] = start;\n\t\toutput[2] = start + 1;\n\t\toutput[3] = end;\n\t\toutput[4] = end;\n\t\toutput[5] = end;\n\t\treturn output;\n\t}\n\tconst openBrace = part.indexOf(\"{\");\n\tlet closeBrace;\n\tif (openBrace !== -1 && openBrace + 1 < part.length && (closeBrace = part.indexOf(\"}\", openBrace)) !== -1) {\n\t\tconst firstChar = part.charCodeAt(openBrace + 1);\n\t\tif (firstChar === 45) {\n\t\t\tif (openBrace + 2 < part.length && part.charCodeAt(openBrace + 2) === 36) {\n\t\t\t\tconst paramStart = openBrace + 3;\n\t\t\t\tconst paramEnd = closeBrace;\n\t\t\t\tif (paramStart < paramEnd) {\n\t\t\t\t\toutput[0] = 3;\n\t\t\t\t\toutput[1] = start + openBrace;\n\t\t\t\t\toutput[2] = start + paramStart;\n\t\t\t\t\toutput[3] = start + paramEnd;\n\t\t\t\t\toutput[4] = start + closeBrace + 1;\n\t\t\t\t\toutput[5] = end;\n\t\t\t\t\treturn output;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (firstChar === 36) {\n\t\t\tconst dollarPos = openBrace + 1;\n\t\t\tconst afterDollar = openBrace + 2;\n\t\t\tif (afterDollar === closeBrace) {\n\t\t\t\toutput[0] = 2;\n\t\t\t\toutput[1] = start + openBrace;\n\t\t\t\toutput[2] = start + dollarPos;\n\t\t\t\toutput[3] = start + afterDollar;\n\t\t\t\toutput[4] = start + closeBrace + 1;\n\t\t\t\toutput[5] = path.length;\n\t\t\t\treturn output;\n\t\t\t}\n\t\t\toutput[0] = 1;\n\t\t\toutput[1] = start + openBrace;\n\t\t\toutput[2] = start + afterDollar;\n\t\t\toutput[3] = start + closeBrace;\n\t\t\toutput[4] = start + closeBrace + 1;\n\t\t\toutput[5] = end;\n\t\t\treturn output;\n\t\t}\n\t}\n\toutput[0] = 0;\n\toutput[1] = start;\n\toutput[2] = start;\n\toutput[3] = end;\n\toutput[4] = end;\n\toutput[5] = end;\n\treturn output;\n}\n/**\n* Recursively parses the segments of the given route tree and populates a segment trie.\n*\n* @param data A reusable Uint16Array for parsing segments. (non important, we're just avoiding allocations)\n* @param route The current route to parse.\n* @param start The starting index for parsing within the route's full path.\n* @param node The current segment node in the trie to populate.\n* @param onRoute Callback invoked for each route processed.\n*/\nfunction parseSegments(defaultCaseSensitive, data, route, start, node, depth, dynamicListsToSort, onRoute) {\n\tonRoute?.(route);\n\tlet cursor = start;\n\t{\n\t\tconst path = route.fullPath ?? route.from;\n\t\tconst options = route.options;\n\t\tconst length = path.length;\n\t\tconst caseSensitive = options?.caseSensitive ?? defaultCaseSensitive;\n\t\tconst parseParams = options?.params?.parse ?? options?.parseParams;\n\t\twhile (cursor < length) {\n\t\t\tconst segment = parseSegment(path, cursor, data);\n\t\t\tlet nextNode;\n\t\t\tconst start = cursor;\n\t\t\tconst end = segment[5];\n\t\t\tcursor = end + 1;\n\t\t\tdepth++;\n\t\t\tconst kind = segment[0];\n\t\t\tswitch (kind) {\n\t\t\t\tcase 0: {\n\t\t\t\t\tconst value = path.substring(segment[2], segment[3]);\n\t\t\t\t\tlet name = value;\n\t\t\t\t\tlet staticChildren;\n\t\t\t\t\tif (caseSensitive) staticChildren = node.static ??= /* @__PURE__ */ new Map();\n\t\t\t\t\telse {\n\t\t\t\t\t\tname = value.toLowerCase();\n\t\t\t\t\t\tstaticChildren = node.staticInsensitive ??= /* @__PURE__ */ new Map();\n\t\t\t\t\t}\n\t\t\t\t\tconst existingNode = staticChildren.get(name);\n\t\t\t\t\tif (existingNode) nextNode = existingNode;\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst next = createStaticNode(path);\n\t\t\t\t\t\tnext.parent = node;\n\t\t\t\t\t\tnext.depth = depth;\n\t\t\t\t\t\tnextNode = next;\n\t\t\t\t\t\tstaticChildren.set(name, next);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 1:\n\t\t\t\tcase 3:\n\t\t\t\tcase 2: {\n\t\t\t\t\tlet prefix = path.substring(start, segment[1]);\n\t\t\t\t\tlet suffix = path.substring(segment[4], end);\n\t\t\t\t\tconst actuallyCaseSensitive = caseSensitive && !!(prefix || suffix);\n\t\t\t\t\tif (!caseSensitive) {\n\t\t\t\t\t\tprefix = prefix.toLowerCase();\n\t\t\t\t\t\tsuffix = suffix.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tconst siblings = kind === 1 ? node.dynamic : kind === 3 ? node.optional : node.wildcard;\n\t\t\t\t\tconst existingNode = kind !== 2 && !parseParams && siblings?.find((s) => !s.parse && s.caseSensitive === actuallyCaseSensitive && s.prefix === prefix && s.suffix === suffix);\n\t\t\t\t\tif (existingNode) nextNode = existingNode;\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst next = createDynamicNode(kind, path, actuallyCaseSensitive, prefix, suffix);\n\t\t\t\t\t\tnextNode = next;\n\t\t\t\t\t\tnext.parent = node;\n\t\t\t\t\t\tnext.depth = depth;\n\t\t\t\t\t\tlet nodes;\n\t\t\t\t\t\tif (kind === 1) nodes = node.dynamic ??= [];\n\t\t\t\t\t\telse if (kind === 3) nodes = node.optional ??= [];\n\t\t\t\t\t\telse nodes = node.wildcard ??= [];\n\t\t\t\t\t\tnodes.push(next);\n\t\t\t\t\t\tif (nodes.length === 2) dynamicListsToSort?.push(nodes);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode = nextNode;\n\t\t}\n\t\tif (parseParams && route.children && !route.isRoot && route.id && route.id.charCodeAt(route.id.lastIndexOf(\"/\") + 1) === 95) {\n\t\t\tconst pathlessNode = createStaticNode(path);\n\t\t\tpathlessNode.kind = SEGMENT_TYPE_PATHLESS;\n\t\t\tpathlessNode.parent = node;\n\t\t\tdepth++;\n\t\t\tpathlessNode.depth = depth;\n\t\t\tnode.pathless ??= [];\n\t\t\tnode.pathless.push(pathlessNode);\n\t\t\tnode = pathlessNode;\n\t\t}\n\t\tconst isLeaf = (route.path || !route.children) && !route.isRoot;\n\t\tif (isLeaf && path.endsWith(\"/\")) {\n\t\t\tconst indexNode = createStaticNode(path);\n\t\t\tindexNode.kind = SEGMENT_TYPE_INDEX;\n\t\t\tindexNode.parent = node;\n\t\t\tdepth++;\n\t\t\tindexNode.depth = depth;\n\t\t\tnode.index = indexNode;\n\t\t\tnode = indexNode;\n\t\t}\n\t\tnode.parse = parseParams ?? null;\n\t\tnode.priority = options?.params?.priority ?? 0;\n\t\tif (isLeaf && !node.route) {\n\t\t\tnode.route = route;\n\t\t\tnode.fullPath = path;\n\t\t}\n\t}\n\tif (route.children) for (const child of route.children) parseSegments(defaultCaseSensitive, data, child, cursor, node, depth, dynamicListsToSort, onRoute);\n}\nfunction sortDynamic(a, b) {\n\tif (a.parse && !b.parse) return -1;\n\tif (!a.parse && b.parse) return 1;\n\tif (a.parse && b.parse && (a.priority || b.priority)) return b.priority - a.priority;\n\tif (a.prefix && b.prefix && a.prefix !== b.prefix) {\n\t\tif (a.prefix.startsWith(b.prefix)) return -1;\n\t\tif (b.prefix.startsWith(a.prefix)) return 1;\n\t}\n\tif (a.suffix && b.suffix && a.suffix !== b.suffix) {\n\t\tif (a.suffix.endsWith(b.suffix)) return -1;\n\t\tif (b.suffix.endsWith(a.suffix)) return 1;\n\t}\n\tif (a.prefix && !b.prefix) return -1;\n\tif (!a.prefix && b.prefix) return 1;\n\tif (a.suffix && !b.suffix) return -1;\n\tif (!a.suffix && b.suffix) return 1;\n\tif (a.caseSensitive && !b.caseSensitive) return -1;\n\tif (!a.caseSensitive && b.caseSensitive) return 1;\n\treturn 0;\n}\nfunction createStaticNode(fullPath) {\n\treturn {\n\t\tkind: 0,\n\t\tdepth: 0,\n\t\tpathless: null,\n\t\tindex: null,\n\t\tstatic: null,\n\t\tstaticInsensitive: null,\n\t\tdynamic: null,\n\t\toptional: null,\n\t\twildcard: null,\n\t\troute: null,\n\t\tfullPath,\n\t\tparent: null,\n\t\tparse: null,\n\t\tpriority: 0\n\t};\n}\n/**\n* Keys must be declared in the same order as in `SegmentNode` type,\n* to ensure they are represented as the same object class in the engine.\n*/\nfunction createDynamicNode(kind, fullPath, caseSensitive, prefix, suffix) {\n\treturn {\n\t\tkind,\n\t\tdepth: 0,\n\t\tpathless: null,\n\t\tindex: null,\n\t\tstatic: null,\n\t\tstaticInsensitive: null,\n\t\tdynamic: null,\n\t\toptional: null,\n\t\twildcard: null,\n\t\troute: null,\n\t\tfullPath,\n\t\tparent: null,\n\t\tparse: null,\n\t\tpriority: 0,\n\t\tcaseSensitive,\n\t\tprefix,\n\t\tsuffix\n\t};\n}\nfunction processRouteMasks(routeList, processedTree) {\n\tconst segmentTree = createStaticNode(\"/\");\n\tconst data = new Uint16Array(6);\n\tconst dynamicListsToSort = [];\n\tfor (const route of routeList) parseSegments(false, data, route, 1, segmentTree, 0, dynamicListsToSort);\n\tfor (const nodes of dynamicListsToSort) nodes.sort(sortDynamic);\n\tprocessedTree.masksTree = segmentTree;\n\tprocessedTree.flatCache = createLRUCache(1e3);\n}\n/**\n* Take an arbitrary list of routes, create a tree from them (if it hasn't been created already), and match a path against it.\n*/\nfunction findFlatMatch(path, processedTree) {\n\tpath ||= \"/\";\n\tconst cached = processedTree.flatCache.get(path);\n\tif (cached !== void 0) return cached;\n\tconst result = findMatch(path, processedTree.masksTree);\n\tprocessedTree.flatCache.set(path, result);\n\treturn result;\n}\n/**\n* @deprecated keep until v2 so that `router.matchRoute` can keep not caring about the actual route tree\n*/\nfunction findSingleMatch(from, caseSensitive, fuzzy, path, processedTree) {\n\tfrom ||= \"/\";\n\tpath ||= \"/\";\n\tconst key = caseSensitive ? `case\\0${from}` : from;\n\tlet tree = processedTree.singleCache.get(key);\n\tif (!tree) {\n\t\ttree = createStaticNode(\"/\");\n\t\tparseSegments(caseSensitive, new Uint16Array(6), { from }, 1, tree, 0);\n\t\tprocessedTree.singleCache.set(key, tree);\n\t}\n\treturn findMatch(path, tree, fuzzy);\n}\nfunction findRouteMatch(path, processedTree, fuzzy = false) {\n\tconst key = fuzzy ? path : `nofuzz\\0${path}`;\n\tconst cached = processedTree.matchCache.get(key);\n\tif (cached !== void 0) return cached;\n\tpath ||= \"/\";\n\tlet result;\n\ttry {\n\t\tresult = findMatch(path, processedTree.segmentTree, fuzzy);\n\t} catch (err) {\n\t\tif (err instanceof URIError) result = null;\n\t\telse throw err;\n\t}\n\tif (result) result.branch = buildRouteBranch(result.route);\n\tprocessedTree.matchCache.set(key, result);\n\treturn result;\n}\n/** Trim trailing slashes (except preserving root '/'). */\nfunction trimPathRight(path) {\n\treturn path === \"/\" ? path : path.replace(/\\/{1,}$/, \"\");\n}\n/**\n* Processes a route tree into a segment trie for efficient path matching.\n* Also builds lookup maps for routes by ID and by trimmed full path.\n*/\nfunction processRouteTree(routeTree, caseSensitive = false, initRoute) {\n\tconst segmentTree = createStaticNode(routeTree.fullPath);\n\tconst data = new Uint16Array(6);\n\tconst dynamicListsToSort = [];\n\tconst routesById = {};\n\tconst routesByPath = {};\n\tlet index = 0;\n\tparseSegments(caseSensitive, data, routeTree, 1, segmentTree, 0, dynamicListsToSort, (route) => {\n\t\tinitRoute?.(route, index);\n\t\tif (route.id in routesById) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Duplicate routes found with id: ${String(route.id)}`);\n\t\t\tinvariant();\n\t\t}\n\t\troutesById[route.id] = route;\n\t\tif (index !== 0 && route.path) {\n\t\t\tconst trimmedFullPath = trimPathRight(route.fullPath);\n\t\t\tif (!routesByPath[trimmedFullPath] || route.fullPath.endsWith(\"/\")) routesByPath[trimmedFullPath] = route;\n\t\t}\n\t\tindex++;\n\t});\n\tfor (const nodes of dynamicListsToSort) nodes.sort(sortDynamic);\n\treturn {\n\t\tprocessedTree: {\n\t\t\tsegmentTree,\n\t\t\tsingleCache: createLRUCache(1e3),\n\t\t\tmatchCache: createLRUCache(1e3),\n\t\t\tflatCache: null,\n\t\t\tmasksTree: null\n\t\t},\n\t\troutesById,\n\t\troutesByPath\n\t};\n}\nfunction findMatch(path, segmentTree, fuzzy = false) {\n\tconst parts = path.split(\"/\");\n\tconst leaf = getNodeMatch(path, parts, segmentTree, fuzzy);\n\tif (!leaf) return null;\n\tconst [rawParams] = extractParams(path, parts, leaf);\n\treturn {\n\t\troute: leaf.node.route,\n\t\trawParams\n\t};\n}\n/**\n* This function is \"resumable\":\n* - the `leaf` input can contain `extract` and `rawParams` properties from a previous `extractParams` call\n* - the returned `state` can be passed back as `extract` in a future call to continue extracting params from where we left off\n*\n* Inputs are *not* mutated.\n*/\nfunction extractParams(path, parts, leaf) {\n\tconst list = buildBranch(leaf.node);\n\tlet nodeParts = null;\n\tconst rawParams = Object.create(null);\n\t/** which segment of the path we're currently processing */\n\tlet partIndex = leaf.extract?.part ?? 0;\n\t/** which node of the route tree branch we're currently processing */\n\tlet nodeIndex = leaf.extract?.node ?? 0;\n\t/** index of the 1st character of the segment we're processing in the path string */\n\tlet pathIndex = leaf.extract?.path ?? 0;\n\t/** which fullPath segment we're currently processing */\n\tlet segmentCount = leaf.extract?.segment ?? 0;\n\tfor (; nodeIndex < list.length; partIndex++, nodeIndex++, pathIndex++, segmentCount++) {\n\t\tconst node = list[nodeIndex];\n\t\tif (node.kind === SEGMENT_TYPE_INDEX) break;\n\t\tif (node.kind === SEGMENT_TYPE_PATHLESS) {\n\t\t\tsegmentCount--;\n\t\t\tpartIndex--;\n\t\t\tpathIndex--;\n\t\t\tcontinue;\n\t\t}\n\t\tconst part = parts[partIndex];\n\t\tconst currentPathIndex = pathIndex;\n\t\tif (part) pathIndex += part.length;\n\t\tif (node.kind === 1) {\n\t\t\tnodeParts ??= leaf.node.fullPath.split(\"/\");\n\t\t\tconst nodePart = nodeParts[segmentCount];\n\t\t\tconst preLength = node.prefix.length;\n\t\t\tif (nodePart.charCodeAt(preLength) === 123) {\n\t\t\t\tconst sufLength = node.suffix.length;\n\t\t\t\tconst name = nodePart.substring(preLength + 2, nodePart.length - sufLength - 1);\n\t\t\t\tconst value = part.substring(preLength, part.length - sufLength);\n\t\t\t\trawParams[name] = decodeURIComponent(value);\n\t\t\t} else {\n\t\t\t\tconst name = nodePart.substring(1);\n\t\t\t\trawParams[name] = decodeURIComponent(part);\n\t\t\t}\n\t\t} else if (node.kind === 3) {\n\t\t\tif (leaf.skipped & 1 << nodeIndex) {\n\t\t\t\tpartIndex--;\n\t\t\t\tpathIndex = currentPathIndex - 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnodeParts ??= leaf.node.fullPath.split(\"/\");\n\t\t\tconst nodePart = nodeParts[segmentCount];\n\t\t\tconst preLength = node.prefix.length;\n\t\t\tconst sufLength = node.suffix.length;\n\t\t\tconst name = nodePart.substring(preLength + 3, nodePart.length - sufLength - 1);\n\t\t\tconst value = node.suffix || node.prefix ? part.substring(preLength, part.length - sufLength) : part;\n\t\t\tif (value) rawParams[name] = decodeURIComponent(value);\n\t\t} else if (node.kind === 2) {\n\t\t\tconst n = node;\n\t\t\tconst value = path.substring(currentPathIndex + n.prefix.length, path.length - n.suffix.length);\n\t\t\tconst splat = decodeURIComponent(value);\n\t\t\trawParams[\"*\"] = splat;\n\t\t\trawParams._splat = splat;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (leaf.rawParams) Object.assign(rawParams, leaf.rawParams);\n\treturn [rawParams, {\n\t\tpart: partIndex,\n\t\tnode: nodeIndex,\n\t\tpath: pathIndex,\n\t\tsegment: segmentCount\n\t}];\n}\nfunction buildRouteBranch(route) {\n\tconst list = [route];\n\twhile (route.parentRoute) {\n\t\troute = route.parentRoute;\n\t\tlist.push(route);\n\t}\n\tlist.reverse();\n\treturn list;\n}\nfunction buildBranch(node) {\n\tconst list = Array(node.depth + 1);\n\tdo {\n\t\tlist[node.depth] = node;\n\t\tnode = node.parent;\n\t} while (node);\n\treturn list;\n}\nfunction getNodeMatch(path, parts, segmentTree, fuzzy) {\n\tif (path === \"/\" && segmentTree.index) return {\n\t\tnode: segmentTree.index,\n\t\tskipped: 0\n\t};\n\tconst trailingSlash = !last(parts);\n\tconst pathIsIndex = trailingSlash && path !== \"/\";\n\tconst partsLength = parts.length - (trailingSlash ? 1 : 0);\n\tconst stack = [{\n\t\tnode: segmentTree,\n\t\tindex: 1,\n\t\tskipped: 0,\n\t\tstatics: 0,\n\t\tdynamics: 0,\n\t\toptionals: 0\n\t}];\n\tlet bestFuzzy = null;\n\tlet bestMatch = null;\n\twhile (stack.length) {\n\t\tconst frame = stack.pop();\n\t\tconst { node, index, skipped, statics, dynamics, optionals } = frame;\n\t\tlet { extract, rawParams } = frame;\n\t\tif (node.kind === 2 && node.route && !isFrameMoreSpecific(bestMatch, frame)) continue;\n\t\tif (node.parse) {\n\t\t\tif (!validateParseParams(path, parts, frame)) continue;\n\t\t\trawParams = frame.rawParams;\n\t\t\textract = frame.extract;\n\t\t}\n\t\tif (fuzzy && node.route && node.kind !== SEGMENT_TYPE_INDEX && isFrameMoreSpecific(bestFuzzy, frame)) bestFuzzy = frame;\n\t\tconst isBeyondPath = index === partsLength;\n\t\tif (isBeyondPath) {\n\t\t\tif (node.route && (!pathIsIndex || node.kind === SEGMENT_TYPE_INDEX || node.kind === 2) && isFrameMoreSpecific(bestMatch, frame)) bestMatch = frame;\n\t\t\tif (!node.optional && !node.wildcard && !node.index && !node.pathless) continue;\n\t\t}\n\t\tconst part = isBeyondPath ? void 0 : parts[index];\n\t\tlet lowerPart;\n\t\tif (isBeyondPath && node.index) {\n\t\t\tconst indexFrame = {\n\t\t\t\tnode: node.index,\n\t\t\t\tindex,\n\t\t\t\tskipped,\n\t\t\t\tstatics,\n\t\t\t\tdynamics,\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t};\n\t\t\tlet indexValid = true;\n\t\t\tif (node.index.parse) {\n\t\t\t\tif (!validateParseParams(path, parts, indexFrame)) indexValid = false;\n\t\t\t}\n\t\t\tif (indexValid) {\n\t\t\t\tif (!dynamics && !optionals && !skipped && isPerfectStaticMatch(statics, partsLength)) return indexFrame;\n\t\t\t\tif (isFrameMoreSpecific(bestMatch, indexFrame)) bestMatch = indexFrame;\n\t\t\t}\n\t\t}\n\t\tif (node.wildcard) for (let i = node.wildcard.length - 1; i >= 0; i--) {\n\t\t\tconst segment = node.wildcard[i];\n\t\t\tconst { prefix, suffix } = segment;\n\t\t\tif (prefix) {\n\t\t\t\tif (isBeyondPath) continue;\n\t\t\t\tif (!(segment.caseSensitive ? part : lowerPart ??= part.toLowerCase()).startsWith(prefix)) continue;\n\t\t\t}\n\t\t\tif (suffix) {\n\t\t\t\tif (isBeyondPath) continue;\n\t\t\t\tconst end = parts.slice(index).join(\"/\");\n\t\t\t\tconst suffixPart = end.slice(-suffix.length);\n\t\t\t\tif ((segment.caseSensitive ? suffixPart : suffixPart.toLowerCase()) !== suffix || end.length - suffix.length < prefix.length) continue;\n\t\t\t}\n\t\t\tstack.push({\n\t\t\t\tnode: segment,\n\t\t\t\tindex: partsLength,\n\t\t\t\tskipped,\n\t\t\t\tstatics,\n\t\t\t\tdynamics,\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t});\n\t\t}\n\t\tif (node.optional) {\n\t\t\tconst nextSkipped = skipped | 1 << node.depth + 1;\n\t\t\tfor (let i = node.optional.length - 1; i >= 0; i--) {\n\t\t\t\tconst segment = node.optional[i];\n\t\t\t\tstack.push({\n\t\t\t\t\tnode: segment,\n\t\t\t\t\tindex,\n\t\t\t\t\tskipped: nextSkipped,\n\t\t\t\t\tstatics,\n\t\t\t\t\tdynamics,\n\t\t\t\t\toptionals,\n\t\t\t\t\textract,\n\t\t\t\t\trawParams\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (!isBeyondPath) for (let i = node.optional.length - 1; i >= 0; i--) {\n\t\t\t\tconst segment = node.optional[i];\n\t\t\t\tconst { prefix, suffix } = segment;\n\t\t\t\tif (prefix || suffix) {\n\t\t\t\t\tconst casePart = segment.caseSensitive ? part : lowerPart ??= part.toLowerCase();\n\t\t\t\t\tif (prefix && !casePart.startsWith(prefix)) continue;\n\t\t\t\t\tif (suffix && casePart.indexOf(suffix, casePart.length - suffix.length) < prefix.length) continue;\n\t\t\t\t}\n\t\t\t\tstack.push({\n\t\t\t\t\tnode: segment,\n\t\t\t\t\tindex: index + 1,\n\t\t\t\t\tskipped,\n\t\t\t\t\tstatics,\n\t\t\t\t\tdynamics,\n\t\t\t\t\toptionals: optionals + segmentScore(partsLength, index),\n\t\t\t\t\textract,\n\t\t\t\t\trawParams\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (!isBeyondPath && node.dynamic && part) for (let i = node.dynamic.length - 1; i >= 0; i--) {\n\t\t\tconst segment = node.dynamic[i];\n\t\t\tconst { prefix, suffix } = segment;\n\t\t\tif (prefix || suffix) {\n\t\t\t\tconst casePart = segment.caseSensitive ? part : lowerPart ??= part.toLowerCase();\n\t\t\t\tif (prefix && !casePart.startsWith(prefix)) continue;\n\t\t\t\tif (suffix && casePart.indexOf(suffix, casePart.length - suffix.length) < prefix.length) continue;\n\t\t\t}\n\t\t\tstack.push({\n\t\t\t\tnode: segment,\n\t\t\t\tindex: index + 1,\n\t\t\t\tskipped,\n\t\t\t\tstatics,\n\t\t\t\tdynamics: dynamics + segmentScore(partsLength, index),\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t});\n\t\t}\n\t\tif (!isBeyondPath && node.staticInsensitive) {\n\t\t\tconst match = node.staticInsensitive.get(lowerPart ??= part.toLowerCase());\n\t\t\tif (match) stack.push({\n\t\t\t\tnode: match,\n\t\t\t\tindex: index + 1,\n\t\t\t\tskipped,\n\t\t\t\tstatics: statics + segmentScore(partsLength, index),\n\t\t\t\tdynamics,\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t});\n\t\t}\n\t\tif (!isBeyondPath && node.static) {\n\t\t\tconst match = node.static.get(part);\n\t\t\tif (match) stack.push({\n\t\t\t\tnode: match,\n\t\t\t\tindex: index + 1,\n\t\t\t\tskipped,\n\t\t\t\tstatics: statics + segmentScore(partsLength, index),\n\t\t\t\tdynamics,\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t});\n\t\t}\n\t\tif (node.pathless) for (let i = node.pathless.length - 1; i >= 0; i--) {\n\t\t\tconst segment = node.pathless[i];\n\t\t\tstack.push({\n\t\t\t\tnode: segment,\n\t\t\t\tindex,\n\t\t\t\tskipped,\n\t\t\t\tstatics,\n\t\t\t\tdynamics,\n\t\t\t\toptionals,\n\t\t\t\textract,\n\t\t\t\trawParams\n\t\t\t});\n\t\t}\n\t}\n\tif (bestMatch) return bestMatch;\n\tif (fuzzy && bestFuzzy) {\n\t\tlet sliceIndex = bestFuzzy.index;\n\t\tfor (let i = 0; i < bestFuzzy.index; i++) sliceIndex += parts[i].length;\n\t\tconst splat = sliceIndex === path.length ? \"/\" : path.slice(sliceIndex);\n\t\tbestFuzzy.rawParams ??= Object.create(null);\n\t\tbestFuzzy.rawParams[\"**\"] = decodeURIComponent(splat);\n\t\treturn bestFuzzy;\n\t}\n\treturn null;\n}\nfunction segmentScore(partsLength, index) {\n\treturn 2 ** (partsLength - index - 1);\n}\nfunction isPerfectStaticMatch(statics, partsLength) {\n\treturn statics === 2 ** (partsLength - 1) - 1;\n}\nfunction validateParseParams(path, parts, frame) {\n\tlet rawParams;\n\tlet state;\n\ttry {\n\t\t[rawParams, state] = extractParams(path, parts, frame);\n\t} catch {\n\t\treturn null;\n\t}\n\tframe.rawParams = rawParams;\n\tframe.extract = state;\n\tif (!frame.node.parse) return true;\n\ttry {\n\t\tif (frame.node.parse(rawParams) === false) return null;\n\t} catch {}\n\treturn true;\n}\nfunction isFrameMoreSpecific(prev, next) {\n\tif (!prev) return true;\n\treturn next.statics > prev.statics || next.statics === prev.statics && (next.dynamics > prev.dynamics || next.dynamics === prev.dynamics && (next.optionals > prev.optionals || next.optionals === prev.optionals && ((next.node.kind === SEGMENT_TYPE_INDEX) > (prev.node.kind === SEGMENT_TYPE_INDEX) || next.node.kind === SEGMENT_TYPE_INDEX === (prev.node.kind === SEGMENT_TYPE_INDEX) && next.node.depth > prev.node.depth)));\n}\n//#endregion\nexport { buildRouteBranch, findFlatMatch, findRouteMatch, findSingleMatch, parseSegment, processRouteMasks, processRouteTree };\n\n//# sourceMappingURL=new-process-route-tree.js.map","import { last } from \"./utils.js\";\nimport { parseSegment } from \"./new-process-route-tree.js\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\n//#region src/path.ts\n/** Join path segments, cleaning duplicate slashes between parts. */\nfunction joinPaths(paths) {\n\treturn cleanPath(paths.filter((val) => {\n\t\treturn val !== void 0;\n\t}).join(\"/\"));\n}\n/** Remove repeated slashes from a path string. */\nfunction cleanPath(path) {\n\treturn path.replace(/\\/{2,}/g, \"/\");\n}\n/** Trim leading slashes (except preserving root '/'). */\nfunction trimPathLeft(path) {\n\treturn path === \"/\" ? path : path.replace(/^\\/{1,}/, \"\");\n}\n/** Trim trailing slashes (except preserving root '/'). */\nfunction trimPathRight(path) {\n\tconst len = path.length;\n\treturn len > 1 && path[len - 1] === \"/\" ? path.replace(/\\/{1,}$/, \"\") : path;\n}\n/** Trim both leading and trailing slashes. */\nfunction trimPath(path) {\n\treturn trimPathRight(trimPathLeft(path));\n}\n/** Remove a trailing slash from value when appropriate for comparisons. */\nfunction removeTrailingSlash(value, basepath) {\n\tif (value?.endsWith(\"/\") && value !== \"/\" && value !== `${basepath}/`) return value.slice(0, -1);\n\treturn value;\n}\n/**\n* Compare two pathnames for exact equality after normalizing trailing slashes\n* relative to the provided `basepath`.\n*/\nfunction exactPathTest(pathName1, pathName2, basepath) {\n\treturn removeTrailingSlash(pathName1, basepath) === removeTrailingSlash(pathName2, basepath);\n}\n/**\n* Resolve a destination path against a base, honoring trailing-slash policy\n* and supporting relative segments (`.`/`..`) and absolute `to` values.\n*/\nfunction resolvePath({ base, to, trailingSlash = \"never\", cache }) {\n\tif (to.includes(\"//\")) to = cleanPath(to);\n\tif (to.startsWith(\"/\")) {\n\t\tif (to.length === 1 || trailingSlash === \"preserve\") return to;\n\t\tif (trailingSlash === \"always\") return to.endsWith(\"/\") ? to : `${to}/`;\n\t\treturn to.endsWith(\"/\") ? to.slice(0, -1) : to;\n\t}\n\tconst isBase = to === \".\";\n\tlet key;\n\tif (cache) {\n\t\tkey = isBase ? base : base + \"\\0\" + to;\n\t\tconst cached = cache.get(key);\n\t\tif (cached) return cached;\n\t}\n\tlet baseSegments;\n\tif (isBase) baseSegments = base.split(\"/\");\n\telse {\n\t\tif (base.includes(\"//\")) base = cleanPath(base);\n\t\tbaseSegments = base.split(\"/\");\n\t\twhile (baseSegments.length > 1 && last(baseSegments) === \"\") baseSegments.pop();\n\t\tconst toSegments = to.split(\"/\");\n\t\tfor (let index = 0, length = toSegments.length; index < length; index++) {\n\t\t\tconst value = toSegments[index];\n\t\t\tif (value === \"\") {\n\t\t\t\tif (!index) baseSegments = [value];\n\t\t\t\telse if (index === length - 1) baseSegments.push(value);\n\t\t\t} else if (value === \"..\") if (baseSegments.length > 1) baseSegments.pop();\n\t\t\telse baseSegments = [\"\"];\n\t\t\telse if (value === \".\") {} else baseSegments.push(value);\n\t\t}\n\t}\n\tif (baseSegments.length > 1) {\n\t\tif (last(baseSegments) === \"\") {\n\t\t\tif (trailingSlash === \"never\") baseSegments.pop();\n\t\t} else if (trailingSlash === \"always\") baseSegments.push(\"\");\n\t}\n\tconst joined = baseSegments.join(\"/\");\n\tconst result = (isBase ? cleanPath(joined) : joined) || \"/\";\n\tif (key && cache) cache.set(key, result);\n\treturn result;\n}\n/**\n* Create a pre-compiled decode config from allowed characters.\n* This should be called once at router initialization.\n*/\nfunction compileDecodeCharMap(pathParamsAllowedCharacters) {\n\tconst charMap = new Map(pathParamsAllowedCharacters.map((char) => [encodeURIComponent(char), char]));\n\tconst pattern = Array.from(charMap.keys()).map((key) => key.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")).join(\"|\");\n\tconst regex = new RegExp(pattern, \"g\");\n\treturn (encoded) => encoded.replace(regex, (match) => charMap.get(match) ?? match);\n}\nfunction encodeParam(key, params, decoder) {\n\tconst value = params[key];\n\tif (typeof value !== \"string\") return value;\n\tif (key === \"_splat\") {\n\t\tif (/^[a-zA-Z0-9\\-._~!/]*$/.test(value)) return value;\n\t\treturn value.split(\"/\").map((segment) => encodePathParam(segment, decoder)).join(\"/\");\n\t} else return encodePathParam(value, decoder);\n}\n/**\n* Interpolate params and wildcards into a route path template.\n*\n* - Encodes params safely (configurable allowed characters)\n* - Supports `{-$optional}` segments, `{prefix{$id}suffix}` and `{$}` wildcards\n*/\nfunction interpolatePath({ path, params, decoder, ...rest }) {\n\tlet isMissingParams = false;\n\tconst usedParams = Object.create(null);\n\tif (!path || path === \"/\") return {\n\t\tinterpolatedPath: \"/\",\n\t\tusedParams,\n\t\tisMissingParams\n\t};\n\tif (!path.includes(\"$\")) return {\n\t\tinterpolatedPath: path,\n\t\tusedParams,\n\t\tisMissingParams\n\t};\n\tif (isServer ?? rest.server) {\n\t\tif (path.indexOf(\"{\") === -1) {\n\t\t\tconst length = path.length;\n\t\t\tlet cursor = 0;\n\t\t\tlet joined = \"\";\n\t\t\twhile (cursor < length) {\n\t\t\t\twhile (cursor < length && path.charCodeAt(cursor) === 47) cursor++;\n\t\t\t\tif (cursor >= length) break;\n\t\t\t\tconst start = cursor;\n\t\t\t\tlet end = path.indexOf(\"/\", cursor);\n\t\t\t\tif (end === -1) end = length;\n\t\t\t\tcursor = end;\n\t\t\t\tconst part = path.substring(start, end);\n\t\t\t\tif (!part) continue;\n\t\t\t\tif (part.charCodeAt(0) === 36) if (part.length === 1) {\n\t\t\t\t\tconst splat = params._splat;\n\t\t\t\t\tusedParams._splat = splat;\n\t\t\t\t\tusedParams[\"*\"] = splat;\n\t\t\t\t\tif (!splat) {\n\t\t\t\t\t\tisMissingParams = true;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst value = encodeParam(\"_splat\", params, decoder);\n\t\t\t\t\tjoined += \"/\" + value;\n\t\t\t\t} else {\n\t\t\t\t\tconst key = part.substring(1);\n\t\t\t\t\tif (!isMissingParams && !(key in params)) isMissingParams = true;\n\t\t\t\t\tusedParams[key] = params[key];\n\t\t\t\t\tconst value = encodeParam(key, params, decoder) ?? \"undefined\";\n\t\t\t\t\tjoined += \"/\" + value;\n\t\t\t\t}\n\t\t\t\telse joined += \"/\" + part;\n\t\t\t}\n\t\t\tif (path.endsWith(\"/\")) joined += \"/\";\n\t\t\treturn {\n\t\t\t\tusedParams,\n\t\t\t\tinterpolatedPath: joined || \"/\",\n\t\t\t\tisMissingParams\n\t\t\t};\n\t\t}\n\t}\n\tconst length = path.length;\n\tlet cursor = 0;\n\tlet segment;\n\tlet joined = \"\";\n\twhile (cursor < length) {\n\t\tconst start = cursor;\n\t\tsegment = parseSegment(path, start, segment);\n\t\tconst end = segment[5];\n\t\tcursor = end + 1;\n\t\tif (start === end) continue;\n\t\tconst kind = segment[0];\n\t\tif (kind === 0) {\n\t\t\tjoined += \"/\" + path.substring(start, end);\n\t\t\tcontinue;\n\t\t}\n\t\tif (kind === 2) {\n\t\t\tconst splat = params._splat;\n\t\t\tusedParams._splat = splat;\n\t\t\tusedParams[\"*\"] = splat;\n\t\t\tconst prefix = path.substring(start, segment[1]);\n\t\t\tconst suffix = path.substring(segment[4], end);\n\t\t\tif (!splat) {\n\t\t\t\tisMissingParams = true;\n\t\t\t\tif (prefix || suffix) joined += \"/\" + prefix + suffix;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst value = encodeParam(\"_splat\", params, decoder);\n\t\t\tjoined += \"/\" + prefix + value + suffix;\n\t\t\tcontinue;\n\t\t}\n\t\tif (kind === 1) {\n\t\t\tconst key = path.substring(segment[2], segment[3]);\n\t\t\tif (!isMissingParams && !(key in params)) isMissingParams = true;\n\t\t\tusedParams[key] = params[key];\n\t\t\tconst prefix = path.substring(start, segment[1]);\n\t\t\tconst suffix = path.substring(segment[4], end);\n\t\t\tconst value = encodeParam(key, params, decoder) ?? \"undefined\";\n\t\t\tjoined += \"/\" + prefix + value + suffix;\n\t\t\tcontinue;\n\t\t}\n\t\tif (kind === 3) {\n\t\t\tconst key = path.substring(segment[2], segment[3]);\n\t\t\tconst valueRaw = params[key];\n\t\t\tif (valueRaw == null) continue;\n\t\t\tusedParams[key] = valueRaw;\n\t\t\tconst prefix = path.substring(start, segment[1]);\n\t\t\tconst suffix = path.substring(segment[4], end);\n\t\t\tconst value = encodeParam(key, params, decoder) ?? \"\";\n\t\t\tjoined += \"/\" + prefix + value + suffix;\n\t\t\tcontinue;\n\t\t}\n\t}\n\tif (path.endsWith(\"/\")) joined += \"/\";\n\treturn {\n\t\tusedParams,\n\t\tinterpolatedPath: joined || \"/\",\n\t\tisMissingParams\n\t};\n}\nfunction encodePathParam(value, decoder) {\n\tconst encoded = encodeURIComponent(value);\n\treturn decoder?.(encoded) ?? encoded;\n}\n//#endregion\nexport { cleanPath, compileDecodeCharMap, exactPathTest, interpolatePath, joinPaths, removeTrailingSlash, resolvePath, trimPath, trimPathLeft, trimPathRight };\n\n//# sourceMappingURL=path.js.map","//#region src/not-found.ts\n/**\n* Create a not-found error object recognized by TanStack Router.\n*\n* Throw this from loaders/actions to trigger the nearest `notFoundComponent`.\n* Use `routeId` to target a specific route's not-found boundary. If `throw`\n* is true, the error is thrown instead of returned.\n*\n* @param options Optional settings including `routeId`, `headers`, and `throw`.\n* @returns A not-found error object that can be thrown or returned.\n* @link https://tanstack.com/router/latest/docs/router/framework/react/api/router/notFoundFunction\n*/\nfunction notFound(options = {}) {\n\toptions.isNotFound = true;\n\tif (options.throw) throw options;\n\treturn options;\n}\n/** Determine if a value is a TanStack Router not-found error. */\nfunction isNotFound(obj) {\n\treturn obj?.isNotFound === true;\n}\n//#endregion\nexport { isNotFound, notFound };\n\n//# sourceMappingURL=not-found.js.map","import { isServer } from \"@tanstack/router-core/isServer\";\n//#region src/scroll-restoration.ts\nfunction getSafeSessionStorage() {\n\ttry {\n\t\treturn sessionStorage;\n\t} catch {\n\t\treturn;\n\t}\n}\nconst storageKey = \"tsr-scroll-restoration-v1_3\";\nconst safeSessionStorage = getSafeSessionStorage();\nfunction createScrollRestorationCache() {\n\ttry {\n\t\treturn JSON.parse(safeSessionStorage?.getItem(\"tsr-scroll-restoration-v1_3\") || \"{}\");\n\t} catch {\n\t\treturn {};\n\t}\n}\nfunction persistScrollRestorationCache() {\n\ttry {\n\t\tsafeSessionStorage?.setItem(storageKey, JSON.stringify(scrollRestorationCache));\n\t} catch {\n\t\tif (process.env.NODE_ENV !== \"production\") console.warn(\"[ts-router] Could not persist scroll restoration state to sessionStorage.\");\n\t}\n}\nconst scrollRestorationCache = /* @__PURE__ */ createScrollRestorationCache();\nconst scrollRestorationIdAttribute = \"data-scroll-restoration-id\";\n/**\n* The default `getKey` function for `useScrollRestoration`.\n* It returns the `key` from the location state or the `href` of the location.\n*\n* The `location.href` is used as a fallback to support the use case where the location state is not available like the initial render.\n*/\nconst defaultGetScrollRestorationKey = (location) => {\n\treturn location.state.__TSR_key || location.href;\n};\nfunction getScrollRestorationSelector(element) {\n\tconst attrId = element.getAttribute(scrollRestorationIdAttribute);\n\tif (attrId) return `[${scrollRestorationIdAttribute}=\"${attrId}\"]`;\n\tlet selector = \"\";\n\tlet el = element;\n\tlet parent;\n\twhile (parent = el.parentNode) {\n\t\tlet index = 1;\n\t\tlet sibling = el;\n\t\twhile (sibling = sibling.previousElementSibling) index++;\n\t\tconst part = `${el.localName}:nth-child(${index})`;\n\t\tselector = selector ? `${part} > ${selector}` : part;\n\t\tel = parent;\n\t}\n\treturn selector;\n}\nfunction getElementScrollRestorationEntry(router, options) {\n\tconst entries = scrollRestorationCache[(options.getKey || defaultGetScrollRestorationKey)(router.latestLocation)];\n\tif (!entries) return;\n\tif (options.id) return entries[`[${scrollRestorationIdAttribute}=\"${options.id}\"]`];\n\tconst element = options.getElement?.();\n\tif (!element) return;\n\treturn entries[element === window ? windowScrollTarget : getScrollRestorationSelector(element)];\n}\nlet ignoreScroll = false;\nconst windowScrollTarget = \"window\";\nfunction getElement(selector) {\n\ttry {\n\t\treturn typeof selector === \"function\" ? selector() : document.querySelector(selector);\n\t} catch {}\n}\nfunction getScrollToTopElements(scrollToTopSelectors) {\n\tconst elements = /* @__PURE__ */ new Set();\n\tfor (const selector of scrollToTopSelectors) {\n\t\tif (selector === windowScrollTarget) continue;\n\t\tconst element = getElement(selector);\n\t\tif (element) elements.add(element);\n\t}\n\treturn elements;\n}\nfunction setupScrollRestoration(router, force) {\n\tconst shouldSetupScrollRestoration = force ?? router.options.scrollRestoration;\n\tconst scroll = router._scroll;\n\tif (shouldSetupScrollRestoration) scroll.restoring = true;\n\tif (isServer ?? router.isServer) return;\n\tconst getKey = router.options.getScrollRestorationKey || defaultGetScrollRestorationKey;\n\tconst trackedScrollTargets = /* @__PURE__ */ new Set();\n\tconst snapshotCurrentScrollTargets = (restoreKey) => {\n\t\tconst keyEntry = scrollRestorationCache[restoreKey] ||= {};\n\t\tfor (const target of trackedScrollTargets) if (target === document) keyEntry[windowScrollTarget] = {\n\t\t\tscrollX,\n\t\t\tscrollY\n\t\t};\n\t\telse if (target.isConnected) keyEntry[getScrollRestorationSelector(target)] = {\n\t\t\tscrollX: target.scrollLeft,\n\t\t\tscrollY: target.scrollTop\n\t\t};\n\t};\n\tif (shouldSetupScrollRestoration && !scroll.restoration) {\n\t\tscroll.restoration = true;\n\t\tignoreScroll = false;\n\t\thistory.scrollRestoration = \"manual\";\n\t\tdocument.addEventListener(\"scroll\", (event) => {\n\t\t\tif (ignoreScroll) return;\n\t\t\ttrackedScrollTargets.add(event.target);\n\t\t}, true);\n\t\trouter.subscribe(\"onBeforeLoad\", (event) => {\n\t\t\tif (event.fromLocation) snapshotCurrentScrollTargets(getKey(event.fromLocation));\n\t\t\ttrackedScrollTargets.clear();\n\t\t});\n\t\taddEventListener(\"pagehide\", () => {\n\t\t\tsnapshotCurrentScrollTargets(getKey(router.stores.resolvedLocation.get() ?? router.stores.location.get()));\n\t\t\tpersistScrollRestorationCache();\n\t\t});\n\t}\n\tif (scroll.reset) return;\n\tscroll.reset = true;\n\trouter.subscribe(\"onRendered\", (event) => {\n\t\tconst behavior = router.options.scrollRestorationBehavior;\n\t\tconst scrollToTopSelectors = router.options.scrollToTopSelectors;\n\t\tconst shouldResetScroll = scroll.next;\n\t\tconst hashNavigation = scroll.hash;\n\t\tlet scrollToTopElements;\n\t\ttrackedScrollTargets.clear();\n\t\tscroll.next = true;\n\t\tscroll.hash = false;\n\t\tif (typeof router.options.scrollRestoration === \"function\" && !router.options.scrollRestoration({ location: router.latestLocation })) return;\n\t\tconst cacheKey = getKey(event.toLocation);\n\t\tconst fromCacheKey = event.fromLocation && getKey(event.fromLocation);\n\t\tif (scroll.restoring && fromCacheKey && fromCacheKey !== cacheKey) {\n\t\t\tconst fromElementEntries = scrollRestorationCache[fromCacheKey];\n\t\t\tif (fromElementEntries) {\n\t\t\t\tlet toElementEntries = scrollRestorationCache[cacheKey];\n\t\t\t\tfor (const elementSelector in fromElementEntries) {\n\t\t\t\t\tif (elementSelector === windowScrollTarget) {\n\t\t\t\t\t\tif (shouldResetScroll) continue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst element = getElement(elementSelector);\n\t\t\t\t\t\tif (!element) continue;\n\t\t\t\t\t\tif (shouldResetScroll && scrollToTopSelectors) {\n\t\t\t\t\t\t\tscrollToTopElements ??= getScrollToTopElements(scrollToTopSelectors);\n\t\t\t\t\t\t\tif (scrollToTopElements.has(element)) continue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!toElementEntries) toElementEntries = scrollRestorationCache[cacheKey] = {};\n\t\t\t\t\ttoElementEntries[elementSelector] ??= fromElementEntries[elementSelector];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tignoreScroll = true;\n\t\ttry {\n\t\t\tconst hash = event.toLocation.hash;\n\t\t\tconst hashScrollIntoViewOptions = event.toLocation.state.__hashScrollIntoViewOptions ?? true;\n\t\t\tlet windowRestored = false;\n\t\t\tif (shouldResetScroll) {\n\t\t\t\tif (!hash && scrollToTopSelectors) scrollToTopElements ??= getScrollToTopElements(scrollToTopSelectors);\n\t\t\t\tconst skipWindowRestore = hash && hashScrollIntoViewOptions && hashNavigation;\n\t\t\t\tconst elementEntries = scroll.restoring ? scrollRestorationCache[cacheKey] : void 0;\n\t\t\t\tif (elementEntries) for (const elementSelector in elementEntries) {\n\t\t\t\t\tconst { scrollX, scrollY } = elementEntries[elementSelector];\n\t\t\t\t\tif (elementSelector === windowScrollTarget) {\n\t\t\t\t\t\tif (skipWindowRestore) continue;\n\t\t\t\t\t\tscrollTo({\n\t\t\t\t\t\t\ttop: scrollY,\n\t\t\t\t\t\t\tleft: scrollX,\n\t\t\t\t\t\t\tbehavior\n\t\t\t\t\t\t});\n\t\t\t\t\t\twindowRestored = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst element = getElement(elementSelector);\n\t\t\t\t\t\tif (element) {\n\t\t\t\t\t\t\telement.scrollLeft = scrollX;\n\t\t\t\t\t\t\telement.scrollTop = scrollY;\n\t\t\t\t\t\t\tscrollToTopElements?.delete(element);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!hash) {\n\t\t\t\t\tconst scrollOptions = {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tbehavior\n\t\t\t\t\t};\n\t\t\t\t\tif (!windowRestored) scrollTo(scrollOptions);\n\t\t\t\t\tif (scrollToTopElements) for (const element of scrollToTopElements) element.scrollTo(scrollOptions);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!windowRestored && hash && hashScrollIntoViewOptions) document.getElementById(hash)?.scrollIntoView(hashScrollIntoViewOptions);\n\t\t} finally {\n\t\t\tignoreScroll = false;\n\t\t}\n\t});\n}\n//#endregion\nexport { defaultGetScrollRestorationKey, getElementScrollRestorationEntry, setupScrollRestoration, storageKey };\n\n//# sourceMappingURL=scroll-restoration.js.map","//#region src/qss.ts\n/**\n* Program is a reimplementation of the `qss` package:\n* Copyright (c) Luke Edwards luke.edwards05@gmail.com, MIT License\n* https://github.com/lukeed/qss/blob/master/license.md\n*\n* This reimplementation uses modern browser APIs\n* (namely URLSearchParams) and TypeScript while still\n* maintaining the original functionality and interface.\n*\n* Update: this implementation has also been mangled to\n* fit exactly our use-case (single value per key in encoding).\n*/\n/**\n* Encodes an object into a query string.\n* @param obj - The object to encode into a query string.\n* @param stringify - An optional custom stringify function.\n* @returns The encoded query string.\n* @example\n* ```\n* // Example input: encode({ token: 'foo', key: 'value' })\n* // Expected output: \"token=foo&key=value\"\n* ```\n*/\nfunction encode(obj, stringify = String) {\n\tconst result = new URLSearchParams();\n\tfor (const key in obj) {\n\t\tconst val = obj[key];\n\t\tif (val !== void 0) result.set(key, stringify(val));\n\t}\n\treturn result.toString();\n}\n/**\n* Converts a string value to its appropriate type (string, number, boolean).\n* @param mix - The string value to convert.\n* @returns The converted value.\n* @example\n* // Example input: toValue(\"123\")\n* // Expected output: 123\n*/\nfunction toValue(str) {\n\tif (!str) return \"\";\n\tif (str === \"false\") return false;\n\tif (str === \"true\") return true;\n\treturn +str * 0 === 0 && +str + \"\" === str ? +str : str;\n}\n/**\n* Decodes a query string into an object.\n* @param str - The query string to decode.\n* @returns The decoded key-value pairs in an object format.\n* @example\n* // Example input: decode(\"token=foo&key=value\")\n* // Expected output: { \"token\": \"foo\", \"key\": \"value\" }\n*/\nfunction decode(str) {\n\tconst searchParams = new URLSearchParams(str);\n\tconst result = Object.create(null);\n\tfor (const [key, value] of searchParams.entries()) {\n\t\tconst previousValue = result[key];\n\t\tif (previousValue == null) result[key] = toValue(value);\n\t\telse if (Array.isArray(previousValue)) previousValue.push(toValue(value));\n\t\telse result[key] = [previousValue, toValue(value)];\n\t}\n\treturn result;\n}\n//#endregion\nexport { decode, encode };\n\n//# sourceMappingURL=qss.js.map","import { decode, encode } from \"./qss.js\";\n//#region src/searchParams.ts\nconst jsonStart = /^(?:\\s|[\"[{\\d-]|fa|nu|tr)/;\n/** Default `parseSearch` that strips leading '?' and JSON-parses values. */\nconst defaultParseSearch = parseSearchWith(JSON.parse);\n/** Default `stringifySearch` using JSON.stringify for complex values. */\nconst defaultStringifySearch = stringifySearchWith(JSON.stringify, JSON.parse);\n/**\n* Build a `parseSearch` function using a provided JSON-like parser.\n*\n* The returned function strips a leading `?`, decodes values, and attempts to\n* JSON-parse string values using the given `parser`.\n*\n* @param parser Function to parse a string value (e.g. `JSON.parse`).\n* @returns A `parseSearch` function compatible with `Router` options.\n* @link https://tanstack.com/router/latest/docs/framework/react/guide/custom-search-param-serialization\n*/\nfunction parseSearchWith(parser) {\n\treturn (searchStr) => {\n\t\tif (searchStr[0] === \"?\") searchStr = searchStr.substring(1);\n\t\tconst query = decode(searchStr);\n\t\tfor (const key in query) {\n\t\t\tconst value = query[key];\n\t\t\tif (typeof value === \"string\") try {\n\t\t\t\tquery[key] = parser(value);\n\t\t\t} catch (_err) {}\n\t\t}\n\t\treturn query;\n\t};\n}\n/**\n* Build a `stringifySearch` function using a provided serializer.\n*\n* Non-primitive values are serialized with `stringify`. If a `parser` is\n* supplied, string values that are parseable are re-serialized to ensure\n* symmetry with `parseSearch`.\n*\n* @param stringify Function to serialize a value (e.g. `JSON.stringify`).\n* @param parser Optional parser to detect parseable strings.\n* @returns A `stringifySearch` function compatible with `Router` options.\n* @link https://tanstack.com/router/latest/docs/framework/react/guide/custom-search-param-serialization\n*/\nfunction stringifySearchWith(stringify, parser) {\n\tconst isJsonParser = parser === JSON.parse;\n\tfunction stringifyValue(val) {\n\t\tif (val && typeof val === \"object\") try {\n\t\t\treturn stringify(val);\n\t\t} catch (_err) {}\n\t\telse if (parser && typeof val === \"string\") {\n\t\t\tif (isJsonParser && !jsonStart.test(val)) return val;\n\t\t\ttry {\n\t\t\t\tparser(val);\n\t\t\t\treturn stringify(val);\n\t\t\t} catch (_err) {}\n\t\t}\n\t\treturn val;\n\t}\n\treturn (search) => {\n\t\tconst searchStr = encode(search, stringifyValue);\n\t\treturn searchStr ? `?${searchStr}` : \"\";\n\t};\n}\n//#endregion\nexport { defaultParseSearch, defaultStringifySearch, parseSearchWith, stringifySearchWith };\n\n//# sourceMappingURL=searchParams.js.map","//#region src/root.ts\n/** Stable identifier used for the root route in a route tree. */\nconst rootRouteId = \"__root__\";\n//#endregion\nexport { rootRouteId };\n\n//# sourceMappingURL=root.js.map","//#region src/redirect.ts\n/**\n* Create a redirect Response understood by TanStack Router.\n*\n* Use from route `loader`/`beforeLoad` or server functions to trigger a\n* navigation. If `throw: true` is set, the redirect is thrown instead of\n* returned. When an absolute `href` is supplied and `reloadDocument` is not\n* set, a full-document navigation is inferred.\n*\n* @param opts Options for the redirect. Common fields:\n* - `href`: absolute URL for external redirects; infers `reloadDocument`.\n* - `statusCode`: HTTP status code to use (defaults to 307).\n* - `headers`: additional headers to include on the Response.\n* - Standard navigation options like `to`, `params`, `search`, `replace`,\n* and `reloadDocument` for internal redirects.\n* @returns A Response augmented with router navigation options.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/redirectFunction\n*/\nfunction redirect(opts) {\n\topts.statusCode = opts.statusCode || opts.code || 307;\n\tif (!opts.reloadDocument && typeof opts.href === \"string\") try {\n\t\tnew URL(opts.href);\n\t\topts.reloadDocument = true;\n\t} catch {}\n\tconst headers = new Headers(opts.headers);\n\tif (opts.href && headers.get(\"Location\") === null) headers.set(\"Location\", opts.href);\n\tconst response = new Response(null, {\n\t\tstatus: opts.statusCode,\n\t\theaders\n\t});\n\tresponse.options = opts;\n\tif (opts.throw) throw response;\n\treturn response;\n}\n/** Check whether a value is a TanStack Router redirect Response. */\n/** Check whether a value is a TanStack Router redirect Response. */\nfunction isRedirect(obj) {\n\treturn obj instanceof Response && !!obj.options;\n}\n/** True if value is a redirect with a resolved `href` location. */\n/** True if value is a redirect with a resolved `href` location. */\nfunction isResolvedRedirect(obj) {\n\treturn isRedirect(obj) && !!obj.options.href;\n}\n/** Parse a serialized redirect object back into a redirect Response. */\n/** Parse a serialized redirect object back into a redirect Response. */\nfunction parseRedirect(obj) {\n\tif (obj !== null && typeof obj === \"object\" && obj.isSerializedRedirect) return redirect(obj);\n}\n//#endregion\nexport { isRedirect, isResolvedRedirect, parseRedirect, redirect };\n\n//# sourceMappingURL=redirect.js.map","import { joinPaths, trimPath } from \"./path.js\";\n//#region src/rewrite.ts\n/** Compose multiple rewrite pairs into a single in/out rewrite. */\nfunction composeRewrites(rewrites) {\n\treturn {\n\t\tinput: ({ url }) => {\n\t\t\tfor (const rewrite of rewrites) url = executeRewriteInput(rewrite, url);\n\t\t\treturn url;\n\t\t},\n\t\toutput: ({ url }) => {\n\t\t\tfor (let i = rewrites.length - 1; i >= 0; i--) url = executeRewriteOutput(rewrites[i], url);\n\t\t\treturn url;\n\t\t}\n\t};\n}\n/** Create a rewrite pair that strips/adds a basepath on input/output. */\nfunction rewriteBasepath(opts) {\n\tconst trimmedBasepath = trimPath(opts.basepath);\n\tconst normalizedBasepath = `/${trimmedBasepath}`;\n\tconst checkBasepath = opts.caseSensitive ? normalizedBasepath : normalizedBasepath.toLowerCase();\n\tconst checkBasepathWithSlash = `${checkBasepath}/`;\n\treturn {\n\t\tinput: ({ url }) => {\n\t\t\tconst pathname = opts.caseSensitive ? url.pathname : url.pathname.toLowerCase();\n\t\t\tif (pathname === checkBasepath) url.pathname = \"/\";\n\t\t\telse if (pathname.startsWith(checkBasepathWithSlash)) url.pathname = url.pathname.slice(normalizedBasepath.length);\n\t\t\treturn url;\n\t\t},\n\t\toutput: ({ url }) => {\n\t\t\turl.pathname = joinPaths([\n\t\t\t\t\"/\",\n\t\t\t\ttrimmedBasepath,\n\t\t\t\turl.pathname\n\t\t\t]);\n\t\t\treturn url;\n\t\t}\n\t};\n}\n/** Execute a location input rewrite if provided. */\nfunction executeRewriteInput(rewrite, url) {\n\tconst res = rewrite?.input?.({ url });\n\tif (res) {\n\t\tif (typeof res === \"string\") return new URL(res);\n\t\telse if (res instanceof URL) return res;\n\t}\n\treturn url;\n}\n/** Execute a location output rewrite if provided. */\nfunction executeRewriteOutput(rewrite, url) {\n\tconst res = rewrite?.output?.({ url });\n\tif (res) {\n\t\tif (typeof res === \"string\") return new URL(res);\n\t\telse if (res instanceof URL) return res;\n\t}\n\treturn url;\n}\n//#endregion\nexport { composeRewrites, executeRewriteInput, executeRewriteOutput, rewriteBasepath };\n\n//# sourceMappingURL=rewrite.js.map","import { arraysEqual, functionalUpdate } from \"./utils.js\";\n//#region src/stores.ts\n/** SSR non-reactive createMutableStore */\nfunction createNonReactiveMutableStore(initialValue) {\n\tlet value = initialValue;\n\treturn {\n\t\tget() {\n\t\t\treturn value;\n\t\t},\n\t\tset(nextOrUpdater) {\n\t\t\tvalue = functionalUpdate(nextOrUpdater, value);\n\t\t}\n\t};\n}\n/** SSR non-reactive createReadonlyStore */\nfunction createNonReactiveReadonlyStore(read) {\n\treturn { get() {\n\t\treturn read();\n\t} };\n}\nfunction createRouterStores(initialLocation, config) {\n\tconst { createMutableStore, createReadonlyStore, batch } = config;\n\tconst byRoute = /* @__PURE__ */ new Map();\n\tconst status = createMutableStore(\"idle\");\n\tconst location = createMutableStore(initialLocation);\n\tconst resolvedLocation = createMutableStore(void 0);\n\tconst ids = createMutableStore([]);\n\tconst matches = createReadonlyStore(() => ids.get().map((id) => byRoute.get(id).get()));\n\tconst __store = createReadonlyStore(() => ({\n\t\tstatus: status.get(),\n\t\tisLoading: status.get() === \"pending\",\n\t\tmatches: matches.get(),\n\t\tlocation: location.get(),\n\t\tresolvedLocation: resolvedLocation.get()\n\t}));\n\tfunction getMatchStore(routeId) {\n\t\tlet matchStore = byRoute.get(routeId);\n\t\tif (!matchStore) {\n\t\t\tmatchStore = createMutableStore(void 0);\n\t\t\tbyRoute.set(routeId, matchStore);\n\t\t}\n\t\treturn matchStore;\n\t}\n\tconst store = {\n\t\tstatus,\n\t\tlocation,\n\t\tresolvedLocation,\n\t\tids,\n\t\tmatches,\n\t\tbyRoute,\n\t\t__store,\n\t\tgetMatchStore,\n\t\tsetMatches\n\t};\n\tfunction setMatches(nextMatches) {\n\t\tconst previousIds = ids.get();\n\t\tconst nextIds = nextMatches.map((match) => match.routeId);\n\t\tbatch(() => {\n\t\t\tif (!arraysEqual(previousIds, nextIds)) ids.set(nextIds);\n\t\t\tfor (const id of previousIds) if (!nextIds.includes(id)) byRoute.get(id).set(() => void 0);\n\t\t\tfor (const nextMatch of nextMatches) {\n\t\t\t\tconst matchStore = getMatchStore(nextMatch.routeId);\n\t\t\t\tif (matchStore.get() !== nextMatch) matchStore.set(nextMatch);\n\t\t\t}\n\t\t});\n\t}\n\treturn store;\n}\n//#endregion\nexport { createNonReactiveMutableStore, createNonReactiveReadonlyStore, createRouterStores };\n\n//# sourceMappingURL=stores.js.map","//#region src/index.ts\nvar stateIndexKey = \"__TSR_index\";\nvar popStateEvent = \"popstate\";\nvar beforeUnloadEvent = \"beforeunload\";\nfunction createHistory(opts) {\n\tlet location = opts.getLocation();\n\tconst subscribers = /* @__PURE__ */ new Set();\n\tconst notify = (action) => {\n\t\tlocation = opts.getLocation();\n\t\tsubscribers.forEach((subscriber) => subscriber({\n\t\t\tlocation,\n\t\t\taction\n\t\t}));\n\t};\n\tconst handleIndexChange = (action) => {\n\t\tif (opts.notifyOnIndexChange ?? true) notify(action);\n\t\telse location = opts.getLocation();\n\t};\n\tconst tryNavigation = async ({ task, navigateOpts, ...actionInfo }) => {\n\t\tif (navigateOpts?.ignoreBlocker ?? false) {\n\t\t\ttask();\n\t\t\treturn;\n\t\t}\n\t\tconst blockers = opts.getBlockers?.() ?? [];\n\t\tconst isPushOrReplace = actionInfo.type === \"PUSH\" || actionInfo.type === \"REPLACE\";\n\t\tif (typeof document !== \"undefined\" && blockers.length && isPushOrReplace) for (const blocker of blockers) {\n\t\t\tconst nextLocation = parseHref(actionInfo.path, actionInfo.state);\n\t\t\tif (await blocker.blockerFn({\n\t\t\t\tcurrentLocation: location,\n\t\t\t\tnextLocation,\n\t\t\t\taction: actionInfo.type\n\t\t\t})) {\n\t\t\t\topts.onBlocked?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\ttask();\n\t};\n\treturn {\n\t\tget location() {\n\t\t\treturn location;\n\t\t},\n\t\tget length() {\n\t\t\treturn opts.getLength();\n\t\t},\n\t\tsubscribers,\n\t\tsubscribe: (cb) => {\n\t\t\tsubscribers.add(cb);\n\t\t\treturn () => {\n\t\t\t\tsubscribers.delete(cb);\n\t\t\t};\n\t\t},\n\t\tpush: (path, state, navigateOpts) => {\n\t\t\tconst currentIndex = location.state[stateIndexKey];\n\t\t\tstate = assignKeyAndIndex(currentIndex + 1, state);\n\t\t\ttryNavigation({\n\t\t\t\ttask: () => {\n\t\t\t\t\topts.pushState(path, state);\n\t\t\t\t\tnotify({ type: \"PUSH\" });\n\t\t\t\t},\n\t\t\t\tnavigateOpts,\n\t\t\t\ttype: \"PUSH\",\n\t\t\t\tpath,\n\t\t\t\tstate\n\t\t\t});\n\t\t},\n\t\treplace: (path, state, navigateOpts) => {\n\t\t\tconst currentIndex = location.state[stateIndexKey];\n\t\t\tstate = assignKeyAndIndex(currentIndex, state);\n\t\t\ttryNavigation({\n\t\t\t\ttask: () => {\n\t\t\t\t\topts.replaceState(path, state);\n\t\t\t\t\tnotify({ type: \"REPLACE\" });\n\t\t\t\t},\n\t\t\t\tnavigateOpts,\n\t\t\t\ttype: \"REPLACE\",\n\t\t\t\tpath,\n\t\t\t\tstate\n\t\t\t});\n\t\t},\n\t\tgo: (index, navigateOpts) => {\n\t\t\ttryNavigation({\n\t\t\t\ttask: () => {\n\t\t\t\t\topts.go(index);\n\t\t\t\t\thandleIndexChange({\n\t\t\t\t\t\ttype: \"GO\",\n\t\t\t\t\t\tindex\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tnavigateOpts,\n\t\t\t\ttype: \"GO\"\n\t\t\t});\n\t\t},\n\t\tback: (navigateOpts) => {\n\t\t\ttryNavigation({\n\t\t\t\ttask: () => {\n\t\t\t\t\topts.back(navigateOpts?.ignoreBlocker ?? false);\n\t\t\t\t\thandleIndexChange({ type: \"BACK\" });\n\t\t\t\t},\n\t\t\t\tnavigateOpts,\n\t\t\t\ttype: \"BACK\"\n\t\t\t});\n\t\t},\n\t\tforward: (navigateOpts) => {\n\t\t\ttryNavigation({\n\t\t\t\ttask: () => {\n\t\t\t\t\topts.forward(navigateOpts?.ignoreBlocker ?? false);\n\t\t\t\t\thandleIndexChange({ type: \"FORWARD\" });\n\t\t\t\t},\n\t\t\t\tnavigateOpts,\n\t\t\t\ttype: \"FORWARD\"\n\t\t\t});\n\t\t},\n\t\tcanGoBack: () => location.state[stateIndexKey] !== 0,\n\t\tcreateHref: (str) => opts.createHref(str),\n\t\tblock: (blocker) => {\n\t\t\tif (!opts.setBlockers) return () => {};\n\t\t\tconst blockers = opts.getBlockers?.() ?? [];\n\t\t\topts.setBlockers([...blockers, blocker]);\n\t\t\treturn () => {\n\t\t\t\tconst blockers = opts.getBlockers?.() ?? [];\n\t\t\t\topts.setBlockers?.(blockers.filter((b) => b !== blocker));\n\t\t\t};\n\t\t},\n\t\tflush: () => opts.flush?.(),\n\t\tdestroy: () => opts.destroy?.(),\n\t\tnotify\n\t};\n}\nfunction assignKeyAndIndex(index, state) {\n\tif (!state) state = {};\n\tconst key = createRandomKey();\n\treturn {\n\t\t...state,\n\t\tkey,\n\t\t__TSR_key: key,\n\t\t[stateIndexKey]: index\n\t};\n}\n/**\n* Creates a history object that can be used to interact with the browser's\n* navigation. This is a lightweight API wrapping the browser's native methods.\n* It is designed to work with TanStack Router, but could be used as a standalone API as well.\n* IMPORTANT: This API implements history throttling via a microtask to prevent\n* excessive calls to the history API. In some browsers, calling history.pushState or\n* history.replaceState in quick succession can cause the browser to ignore subsequent\n* calls. This API smooths out those differences and ensures that your application\n* state will *eventually* match the browser state. In most cases, this is not a problem,\n* but if you need to ensure that the browser state is up to date, you can use the\n* `history.flush` method to immediately flush all pending state changes to the browser URL.\n* @param opts\n* @param opts.getHref A function that returns the current href (path + search + hash)\n* @param opts.createHref A function that takes a path and returns a href (path + search + hash)\n* @returns A history instance\n*/\nfunction createBrowserHistory(opts) {\n\tconst win = opts?.window ?? (typeof document !== \"undefined\" ? window : void 0);\n\tconst originalPushState = win.history.pushState;\n\tconst originalReplaceState = win.history.replaceState;\n\tlet blockers = [];\n\tconst _getBlockers = () => blockers;\n\tconst _setBlockers = (newBlockers) => blockers = newBlockers;\n\tconst createHref = opts?.createHref ?? ((path) => path);\n\tconst parseLocation = opts?.parseLocation ?? (() => parseHref(`${win.location.pathname}${win.location.search}${win.location.hash}`, win.history.state));\n\tif (!win.history.state?.__TSR_key && !win.history.state?.key) {\n\t\tconst addedKey = createRandomKey();\n\t\twin.history.replaceState({\n\t\t\t[stateIndexKey]: 0,\n\t\t\tkey: addedKey,\n\t\t\t__TSR_key: addedKey\n\t\t}, \"\");\n\t}\n\tlet currentLocation = parseLocation();\n\tlet rollbackLocation;\n\tlet nextPopIsGo = false;\n\tlet ignoreNextPop = false;\n\tlet skipBlockerNextPop = false;\n\tlet ignoreNextBeforeUnload = false;\n\tconst getLocation = () => currentLocation;\n\tlet next;\n\tconst flush = () => {\n\t\tif (!next) return;\n\t\thistory._ignoreSubscribers = true;\n\t\t(next[2] ? win.history.pushState : win.history.replaceState)(next[1], \"\", next[0]);\n\t\thistory._ignoreSubscribers = false;\n\t\tnext = void 0;\n\t\trollbackLocation = void 0;\n\t};\n\tconst queueHistoryAction = (isPush, destHref, state) => {\n\t\tconst href = createHref(destHref);\n\t\tconst hasPendingAction = !!next;\n\t\tif (!hasPendingAction) rollbackLocation = currentLocation;\n\t\tcurrentLocation = parseHref(destHref, state);\n\t\tnext = [\n\t\t\thref,\n\t\t\tstate,\n\t\t\tnext?.[2] || isPush\n\t\t];\n\t\tif (!hasPendingAction) queueMicrotask(() => flush());\n\t};\n\tconst onPushPop = (type) => {\n\t\tcurrentLocation = parseLocation();\n\t\thistory.notify({ type });\n\t};\n\tconst onPushPopEvent = async () => {\n\t\tif (ignoreNextPop) {\n\t\t\tignoreNextPop = false;\n\t\t\treturn;\n\t\t}\n\t\tconst nextLocation = parseLocation();\n\t\tconst delta = nextLocation.state[stateIndexKey] - currentLocation.state[stateIndexKey];\n\t\tconst isForward = delta === 1;\n\t\tconst isBack = delta === -1;\n\t\tconst isGo = !isForward && !isBack || nextPopIsGo;\n\t\tnextPopIsGo = false;\n\t\tconst action = isGo ? \"GO\" : isBack ? \"BACK\" : \"FORWARD\";\n\t\tconst notify = isGo ? {\n\t\t\ttype: \"GO\",\n\t\t\tindex: delta\n\t\t} : { type: isBack ? \"BACK\" : \"FORWARD\" };\n\t\tif (skipBlockerNextPop) skipBlockerNextPop = false;\n\t\telse {\n\t\t\tconst blockers = _getBlockers();\n\t\t\tif (typeof document !== \"undefined\" && blockers.length) {\n\t\t\t\tfor (const blocker of blockers) if (await blocker.blockerFn({\n\t\t\t\t\tcurrentLocation,\n\t\t\t\t\tnextLocation,\n\t\t\t\t\taction\n\t\t\t\t})) {\n\t\t\t\t\tignoreNextPop = true;\n\t\t\t\t\twin.history.go(1);\n\t\t\t\t\thistory.notify(notify);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcurrentLocation = parseLocation();\n\t\thistory.notify(notify);\n\t};\n\tconst onBeforeUnload = (e) => {\n\t\tif (ignoreNextBeforeUnload) {\n\t\t\tignoreNextBeforeUnload = false;\n\t\t\treturn;\n\t\t}\n\t\tlet shouldBlock = false;\n\t\tconst blockers = _getBlockers();\n\t\tif (typeof document !== \"undefined\" && blockers.length) for (const blocker of blockers) {\n\t\t\tconst shouldHaveBeforeUnload = blocker.enableBeforeUnload ?? true;\n\t\t\tif (shouldHaveBeforeUnload === true) {\n\t\t\t\tshouldBlock = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (typeof shouldHaveBeforeUnload === \"function\" && shouldHaveBeforeUnload() === true) {\n\t\t\t\tshouldBlock = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (shouldBlock) {\n\t\t\te.preventDefault();\n\t\t\treturn e.returnValue = \"\";\n\t\t}\n\t};\n\tconst history = createHistory({\n\t\tgetLocation,\n\t\tgetLength: () => win.history.length,\n\t\tpushState: (href, state) => queueHistoryAction(true, href, state),\n\t\treplaceState: (href, state) => queueHistoryAction(false, href, state),\n\t\tback: (ignoreBlocker) => {\n\t\t\tif (ignoreBlocker) skipBlockerNextPop = true;\n\t\t\tignoreNextBeforeUnload = true;\n\t\t\treturn win.history.back();\n\t\t},\n\t\tforward: (ignoreBlocker) => {\n\t\t\tif (ignoreBlocker) skipBlockerNextPop = true;\n\t\t\tignoreNextBeforeUnload = true;\n\t\t\twin.history.forward();\n\t\t},\n\t\tgo: (n) => {\n\t\t\tnextPopIsGo = true;\n\t\t\twin.history.go(n);\n\t\t},\n\t\tcreateHref: (href) => createHref(href),\n\t\tflush,\n\t\tdestroy: () => {\n\t\t\twin.history.pushState = originalPushState;\n\t\t\twin.history.replaceState = originalReplaceState;\n\t\t\twin.removeEventListener(beforeUnloadEvent, onBeforeUnload, { capture: true });\n\t\t\twin.removeEventListener(popStateEvent, onPushPopEvent);\n\t\t},\n\t\tonBlocked: () => {\n\t\t\tif (rollbackLocation && currentLocation !== rollbackLocation) currentLocation = rollbackLocation;\n\t\t},\n\t\tgetBlockers: _getBlockers,\n\t\tsetBlockers: _setBlockers,\n\t\tnotifyOnIndexChange: false\n\t});\n\twin.addEventListener(beforeUnloadEvent, onBeforeUnload, { capture: true });\n\twin.addEventListener(popStateEvent, onPushPopEvent);\n\twin.history.pushState = function(...args) {\n\t\tconst res = originalPushState.apply(win.history, args);\n\t\tif (!history._ignoreSubscribers) onPushPop(\"PUSH\");\n\t\treturn res;\n\t};\n\twin.history.replaceState = function(...args) {\n\t\tconst res = originalReplaceState.apply(win.history, args);\n\t\tif (!history._ignoreSubscribers) onPushPop(\"REPLACE\");\n\t\treturn res;\n\t};\n\treturn history;\n}\n/**\n* Create a hash-based history implementation.\n* Useful for static hosts or environments without server URL rewriting.\n* @link https://tanstack.com/router/latest/docs/framework/react/guide/history-types\n*/\nfunction createHashHistory(opts) {\n\tconst win = opts?.window ?? (typeof document !== \"undefined\" ? window : void 0);\n\treturn createBrowserHistory({\n\t\twindow: win,\n\t\tparseLocation: () => {\n\t\t\tconst hashSplit = win.location.hash.split(\"#\").slice(1);\n\t\t\tconst pathPart = hashSplit[0] ?? \"/\";\n\t\t\tconst searchPart = win.location.search;\n\t\t\tconst hashEntries = hashSplit.slice(1);\n\t\t\treturn parseHref(`${pathPart}${searchPart}${hashEntries.length === 0 ? \"\" : `#${hashEntries.join(\"#\")}`}`, win.history.state);\n\t\t},\n\t\tcreateHref: (href) => `${win.location.pathname}${win.location.search}#${href}`\n\t});\n}\n/**\n* Create an in-memory history implementation.\n* Ideal for server rendering, tests, and non-DOM environments.\n* @link https://tanstack.com/router/latest/docs/framework/react/guide/history-types\n*/\nfunction createMemoryHistory(opts = { initialEntries: [\"/\"] }) {\n\tconst entries = opts.initialEntries;\n\tlet index = opts.initialIndex ? Math.min(Math.max(opts.initialIndex, 0), entries.length - 1) : entries.length - 1;\n\tconst states = entries.map((_entry, index) => assignKeyAndIndex(index, void 0));\n\tconst getLocation = () => parseHref(entries[index], states[index]);\n\tlet blockers = [];\n\tconst _getBlockers = () => blockers;\n\tconst _setBlockers = (newBlockers) => blockers = newBlockers;\n\treturn createHistory({\n\t\tgetLocation,\n\t\tgetLength: () => entries.length,\n\t\tpushState: (path, state) => {\n\t\t\tif (index < entries.length - 1) {\n\t\t\t\tentries.splice(index + 1);\n\t\t\t\tstates.splice(index + 1);\n\t\t\t}\n\t\t\tstates.push(state);\n\t\t\tentries.push(path);\n\t\t\tindex = Math.max(entries.length - 1, 0);\n\t\t},\n\t\treplaceState: (path, state) => {\n\t\t\tstates[index] = state;\n\t\t\tentries[index] = path;\n\t\t},\n\t\tback: () => {\n\t\t\tindex = Math.max(index - 1, 0);\n\t\t},\n\t\tforward: () => {\n\t\t\tindex = Math.min(index + 1, entries.length - 1);\n\t\t},\n\t\tgo: (n) => {\n\t\t\tindex = Math.min(Math.max(index + n, 0), entries.length - 1);\n\t\t},\n\t\tcreateHref: (path) => path,\n\t\tgetBlockers: _getBlockers,\n\t\tsetBlockers: _setBlockers\n\t});\n}\n/**\n* Sanitize a path to prevent open redirect vulnerabilities.\n* Removes control characters and collapses leading double slashes.\n*/\nfunction sanitizePath(path) {\n\tlet sanitized = path.replace(/[\\x00-\\x1f\\x7f]/g, \"\");\n\tif (sanitized.startsWith(\"//\")) sanitized = \"/\" + sanitized.replace(/^\\/+/, \"\");\n\treturn sanitized;\n}\nfunction parseHref(href, state) {\n\tconst sanitizedHref = sanitizePath(href);\n\tconst hashIndex = sanitizedHref.indexOf(\"#\");\n\tconst searchIndex = sanitizedHref.indexOf(\"?\");\n\tconst addedKey = createRandomKey();\n\treturn {\n\t\thref: sanitizedHref,\n\t\tpathname: sanitizedHref.substring(0, hashIndex > 0 ? searchIndex > 0 ? Math.min(hashIndex, searchIndex) : hashIndex : searchIndex > 0 ? searchIndex : sanitizedHref.length),\n\t\thash: hashIndex > -1 ? sanitizedHref.substring(hashIndex) : \"\",\n\t\tsearch: searchIndex > -1 ? sanitizedHref.slice(searchIndex, hashIndex === -1 ? void 0 : hashIndex) : \"\",\n\t\tstate: state || {\n\t\t\t[stateIndexKey]: 0,\n\t\t\tkey: addedKey,\n\t\t\t__TSR_key: addedKey\n\t\t}\n\t};\n}\nfunction createRandomKey() {\n\treturn (Math.random() + 1).toString(36).substring(7);\n}\n//#endregion\nexport { createBrowserHistory, createHashHistory, createHistory, createMemoryHistory, parseHref };\n\n//# sourceMappingURL=index.js.map","import { DEFAULT_PROTOCOL_ALLOWLIST, decodePath, deepEqual, encodePathLikeUrl, findLast, functionalUpdate, hasKeys, isDangerousProtocol, last, nullReplaceEqualDeep, replaceEqualDeep } from \"./utils.js\";\nimport { createLRUCache } from \"./lru-cache.js\";\nimport { buildRouteBranch, findFlatMatch, findRouteMatch, findSingleMatch, processRouteMasks, processRouteTree } from \"./new-process-route-tree.js\";\nimport { compileDecodeCharMap, interpolatePath, resolvePath, trimPath, trimPathRight } from \"./path.js\";\nimport { isNotFound } from \"./not-found.js\";\nimport { setupScrollRestoration } from \"./scroll-restoration.js\";\nimport { defaultParseSearch, defaultStringifySearch } from \"./searchParams.js\";\nimport { rootRouteId } from \"./root.js\";\nimport { isRedirect } from \"./redirect.js\";\nimport { loadClientRoute, loadRouteChunk, preloadClientRoute, refreshClientRoute, replaceRouteChunk } from \"./load-client.js\";\nimport { composeRewrites, executeRewriteInput, executeRewriteOutput, rewriteBasepath } from \"./rewrite.js\";\nimport { createRouterStores } from \"./stores.js\";\nimport { createBrowserHistory, parseHref } from \"@tanstack/history\";\nimport { isServer, loadServerRoute } from \"@tanstack/router-core/isServer\";\n//#region src/router.ts\nfunction routeNeedsLoad(route) {\n\treturn route.options.loader || route.options.beforeLoad || route.lazyFn || route.options.component?.preload || route.options.pendingComponent?.preload;\n}\n/**\n* Convert an unknown error into a minimal, serializable object.\n* Includes name and message (and stack in development).\n*/\nfunction defaultSerializeError(err) {\n\tif (err instanceof Error) {\n\t\tconst obj = {\n\t\t\tname: err.name,\n\t\t\tmessage: err.message\n\t\t};\n\t\tif (process.env.NODE_ENV === \"development\") obj.stack = err.stack;\n\t\treturn obj;\n\t}\n\treturn { data: err };\n}\n/** Options for configuring trailing-slash behavior. */\nconst trailingSlashOptions = {\n\talways: \"always\",\n\tnever: \"never\",\n\tpreserve: \"preserve\"\n};\n/**\n* Compute whether path, href or hash changed between previous and current\n* resolved locations.\n*/\nfunction getLocationChangeInfo(location, resolvedLocation) {\n\treturn {\n\t\tfromLocation: resolvedLocation,\n\t\ttoLocation: location,\n\t\tpathChanged: resolvedLocation?.pathname !== location.pathname,\n\t\threfChanged: resolvedLocation?.href !== location.href,\n\t\thashChanged: resolvedLocation?.hash !== location.hash\n\t};\n}\n/**\n* Return only state owned by the application, excluding volatile history\n* bookkeeping. Mask payloads (`__tempLocation`/`__tempKey`) are kept: they\n* distinguish otherwise-identical locations.\n*/\nfunction _getUserHistoryState({ key: _key, __TSR_key: _tsrKey, __TSR_index: _tsrIndex, __hashScrollIntoViewOptions: _hashScroll, ...state }) {\n\treturn state;\n}\n/** Run route lifecycle callbacks in leave/enter/stay phases. */\nfunction runRouteLifecycle(router, previous, matches, owner) {\n\tfor (const match of previous) {\n\t\tif (owner && router._tx !== owner) return;\n\t\tif (!matches.some((candidate) => candidate.routeId === match.routeId)) router.routesById[match.routeId].options.onLeave?.(match);\n\t}\n\tfor (const match of matches) {\n\t\tif (owner && router._tx !== owner) return;\n\t\trouter.routesById[match.routeId].options[previous.some((candidate) => candidate.routeId === match.routeId) ? \"onStay\" : \"onEnter\"]?.(match);\n\t}\n}\n/**\n* Core, framework-agnostic router engine that powers TanStack Router.\n*\n* Provides navigation, matching, loading, preloading, caching and event APIs\n* used by framework adapters (React/Solid). Prefer framework helpers like\n* `createRouter` in app code.\n*\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/RouterType\n*/\nvar RouterCore = class {\n\t/**\n\t* @deprecated Use the `createRouter` function instead\n\t*/\n\tconstructor(options, getStoreConfig) {\n\t\tthis.tempLocationKey = `${Math.round(Math.random() * 1e7)}`;\n\t\tthis._scroll = { next: true };\n\t\tthis.subscribers = /* @__PURE__ */ new Set();\n\t\tthis._cache = /* @__PURE__ */ new Map();\n\t\tthis._committed = [];\n\t\tthis.routeBranchCache = /* @__PURE__ */ new WeakMap();\n\t\tthis.lightweightCache = /* @__PURE__ */ new WeakMap();\n\t\tthis.startTransition = async (fn) => {\n\t\t\tfn();\n\t\t\treturn false;\n\t\t};\n\t\tthis.update = (newOptions) => {\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tif (newOptions.notFoundRoute) console.warn(\"The notFoundRoute API is deprecated and will be removed in the next major version. See https://tanstack.com/router/v1/docs/framework/react/guide/not-found-errors#migrating-from-notfoundroute for more info.\");\n\t\t\t}\n\t\t\tconst prevOptions = this.options;\n\t\t\tconst prevBasepath = this.basepath ?? prevOptions?.basepath ?? \"/\";\n\t\t\tconst basepathWasUnset = this.basepath === void 0;\n\t\t\tconst prevRewriteOption = prevOptions?.rewrite;\n\t\t\tthis.options = {\n\t\t\t\t...prevOptions,\n\t\t\t\t...newOptions\n\t\t\t};\n\t\t\tthis.isServer = this.options.isServer ?? isServer ?? typeof document === \"undefined\";\n\t\t\tthis.protocolAllowlist = new Set(this.options.protocolAllowlist);\n\t\t\tif (this.options.pathParamsAllowedCharacters) this.pathParamsDecoder = compileDecodeCharMap(this.options.pathParamsAllowedCharacters);\n\t\t\tif (!this.history || this.options.history && this.options.history !== this.history) if (!this.options.history) {\n\t\t\t\tif (!(isServer ?? this.isServer)) this.history = createBrowserHistory();\n\t\t\t} else this.history = this.options.history;\n\t\t\tthis.origin = this.options.origin;\n\t\t\tif (!this.origin) if (!(isServer ?? this.isServer) && window?.origin && window.origin !== \"null\") this.origin = window.origin;\n\t\t\telse this.origin = \"http://localhost\";\n\t\t\tif (this.history) this.updateLatestLocation();\n\t\t\tif (this.options.routeTree !== this.routeTree) {\n\t\t\t\tthis.routeTree = this.options.routeTree;\n\t\t\t\tlet processRouteTreeResult;\n\t\t\t\tif ((isServer ?? this.isServer) && process.env.NODE_ENV !== \"development\" && globalThis.__TSR_CACHE__ && globalThis.__TSR_CACHE__.routeTree === this.routeTree) {\n\t\t\t\t\tconst cached = globalThis.__TSR_CACHE__;\n\t\t\t\t\tthis.resolvePathCache = cached.resolvePathCache;\n\t\t\t\t\tprocessRouteTreeResult = cached.processRouteTreeResult;\n\t\t\t\t} else {\n\t\t\t\t\tthis.resolvePathCache = createLRUCache(1e3);\n\t\t\t\t\tprocessRouteTreeResult = this.buildRouteTree();\n\t\t\t\t\tif ((isServer ?? this.isServer) && process.env.NODE_ENV !== \"development\" && globalThis.__TSR_CACHE__ === void 0) globalThis.__TSR_CACHE__ = {\n\t\t\t\t\t\trouteTree: this.routeTree,\n\t\t\t\t\t\tprocessRouteTreeResult,\n\t\t\t\t\t\tresolvePathCache: this.resolvePathCache\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthis.setRoutes(processRouteTreeResult);\n\t\t\t}\n\t\t\tif (!this.stores && this.latestLocation) {\n\t\t\t\tconst config = this.getStoreConfig(this);\n\t\t\t\tthis.batch = config.batch;\n\t\t\t\tthis.stores = createRouterStores(this.latestLocation, config);\n\t\t\t\tif (!(isServer ?? this.isServer)) setupScrollRestoration(this);\n\t\t\t}\n\t\t\tconst nextBasepath = this.options.basepath ?? \"/\";\n\t\t\tconst nextRewriteOption = this.options.rewrite;\n\t\t\tif (basepathWasUnset || prevBasepath !== nextBasepath || prevRewriteOption !== nextRewriteOption) {\n\t\t\t\tthis.basepath = nextBasepath;\n\t\t\t\tconst rewrites = [];\n\t\t\t\tconst trimmed = trimPath(nextBasepath);\n\t\t\t\tif (trimmed && trimmed !== \"/\") rewrites.push(rewriteBasepath({ basepath: nextBasepath }));\n\t\t\t\tif (nextRewriteOption) rewrites.push(nextRewriteOption);\n\t\t\t\tthis.rewrite = rewrites.length === 0 ? void 0 : rewrites.length === 1 ? rewrites[0] : composeRewrites(rewrites);\n\t\t\t\tif (this.history) this.updateLatestLocation();\n\t\t\t\tif (this.stores) this.stores.location.set(this.latestLocation);\n\t\t\t}\n\t\t};\n\t\tthis.updateLatestLocation = () => {\n\t\t\tthis.latestLocation = this.parseLocation(this.history.location, this.latestLocation);\n\t\t};\n\t\tthis.buildRouteTree = () => {\n\t\t\tconst result = processRouteTree(this.routeTree, this.options.caseSensitive, (route, i) => {\n\t\t\t\troute.init({ originalIndex: i });\n\t\t\t});\n\t\t\tif (this.options.routeMasks) processRouteMasks(this.options.routeMasks, result.processedTree);\n\t\t\treturn result;\n\t\t};\n\t\tthis.subscribe = (eventType, fn) => {\n\t\t\tconst listener = {\n\t\t\t\teventType,\n\t\t\t\tfn\n\t\t\t};\n\t\t\tthis.subscribers.add(listener);\n\t\t\treturn () => {\n\t\t\t\tthis.subscribers.delete(listener);\n\t\t\t};\n\t\t};\n\t\tthis.emit = (routerEvent) => {\n\t\t\tfor (const listener of this.subscribers) if (listener.eventType === routerEvent.type) try {\n\t\t\t\tlistener.fn(routerEvent);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t}\n\t\t};\n\t\tthis.parseLocation = (locationToParse, previousLocation) => {\n\t\t\tconst parse = ({ pathname, search, hash, href, state }) => {\n\t\t\t\tif (!this.rewrite && !/[ \\x00-\\x1f\\x7f\\u0080-\\uffff]/.test(pathname)) {\n\t\t\t\t\tconst parsedSearch = this.options.parseSearch(search);\n\t\t\t\t\tconst searchStr = this.options.stringifySearch(parsedSearch);\n\t\t\t\t\treturn {\n\t\t\t\t\t\thref: pathname + searchStr + hash,\n\t\t\t\t\t\tpublicHref: pathname + searchStr + hash,\n\t\t\t\t\t\tpathname: decodePath(pathname).path,\n\t\t\t\t\t\texternal: false,\n\t\t\t\t\t\tsearchStr,\n\t\t\t\t\t\tsearch: nullReplaceEqualDeep(previousLocation?.search, parsedSearch),\n\t\t\t\t\t\thash: decodePath(hash.slice(1)).path,\n\t\t\t\t\t\tstate: replaceEqualDeep(previousLocation?.state, state)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst fullUrl = new URL(href, this.origin);\n\t\t\t\tconst url = executeRewriteInput(this.rewrite, fullUrl);\n\t\t\t\tconst parsedSearch = this.options.parseSearch(url.search);\n\t\t\t\tconst searchStr = this.options.stringifySearch(parsedSearch);\n\t\t\t\turl.search = searchStr;\n\t\t\t\treturn {\n\t\t\t\t\thref: url.href.replace(url.origin, \"\"),\n\t\t\t\t\tpublicHref: href,\n\t\t\t\t\tpathname: decodePath(url.pathname).path,\n\t\t\t\t\texternal: !!this.rewrite && url.origin !== this.origin,\n\t\t\t\t\tsearchStr,\n\t\t\t\t\tsearch: nullReplaceEqualDeep(previousLocation?.search, parsedSearch),\n\t\t\t\t\thash: decodePath(url.hash.slice(1)).path,\n\t\t\t\t\tstate: replaceEqualDeep(previousLocation?.state, state)\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst location = parse(locationToParse);\n\t\t\tconst { __tempLocation, __tempKey } = location.state;\n\t\t\tif (__tempLocation && (!__tempKey || __tempKey === this.tempLocationKey)) {\n\t\t\t\tconst parsedTempLocation = parse(__tempLocation);\n\t\t\t\tparsedTempLocation.state.key = location.state.key;\n\t\t\t\tparsedTempLocation.state.__TSR_key = location.state.__TSR_key;\n\t\t\t\tdelete parsedTempLocation.state.__tempLocation;\n\t\t\t\treturn {\n\t\t\t\t\t...parsedTempLocation,\n\t\t\t\t\tmaskedLocation: location\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn location;\n\t\t};\n\t\tthis.resolvePathWithBase = (from, path) => {\n\t\t\treturn resolvePath({\n\t\t\t\tbase: from,\n\t\t\t\tto: path,\n\t\t\t\ttrailingSlash: this.options.trailingSlash,\n\t\t\t\tcache: this.resolvePathCache\n\t\t\t});\n\t\t};\n\t\tthis.matchRoutes = (pathnameOrNext, locationSearchOrOpts, opts) => {\n\t\t\tif (typeof pathnameOrNext === \"string\") return this.matchRoutesInternal({\n\t\t\t\tpathname: pathnameOrNext,\n\t\t\t\tsearch: locationSearchOrOpts\n\t\t\t}, opts);\n\t\t\treturn this.matchRoutesInternal(pathnameOrNext, locationSearchOrOpts);\n\t\t};\n\t\tthis.getMatchedRoutes = (pathname) => {\n\t\t\tconst rawParams = Object.create(null);\n\t\t\tconst match = findRouteMatch(trimPathRight(pathname), this.processedTree, true);\n\t\t\tif (match) Object.assign(rawParams, match.rawParams);\n\t\t\treturn [\n\t\t\t\tmatch?.branch || [this.routesById[\"__root__\"]],\n\t\t\t\trawParams,\n\t\t\t\tmatch?.route\n\t\t\t];\n\t\t};\n\t\tthis.buildLocation = (opts) => {\n\t\t\tconst build = (dest = {}) => {\n\t\t\t\tif (dest.href) {\n\t\t\t\t\tconst parsed = parseHref(dest.href, {});\n\t\t\t\t\tdest = {\n\t\t\t\t\t\t...dest,\n\t\t\t\t\t\tto: executeRewriteInput(this.rewrite, new URL(parsed.pathname, this.origin)).pathname,\n\t\t\t\t\t\tsearch: this.options.parseSearch(parsed.search),\n\t\t\t\t\t\thash: parsed.hash.slice(1)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst currentLocation = dest._fromLocation || this._pendingLocation || this.latestLocation;\n\t\t\t\tconst lightweightResult = this.matchRoutesLightweight(currentLocation);\n\t\t\t\tif (dest.from && process.env.NODE_ENV !== \"production\" && dest._isNavigate) {\n\t\t\t\t\tconst [allFromMatches] = this.getMatchedRoutes(dest.from);\n\t\t\t\t\tconst matchedFrom = findLast(lightweightResult[0], (d) => {\n\t\t\t\t\t\treturn comparePaths(d.fullPath, dest.from);\n\t\t\t\t\t});\n\t\t\t\t\tconst matchedCurrent = findLast(allFromMatches, (d) => {\n\t\t\t\t\t\treturn comparePaths(d.fullPath, lightweightResult[1]);\n\t\t\t\t\t});\n\t\t\t\t\tif (!matchedFrom && !matchedCurrent) console.warn(`Could not find match for from: ${dest.from}`);\n\t\t\t\t}\n\t\t\t\tconst defaultedFromPath = dest.unsafeRelative === \"path\" ? currentLocation.pathname : dest.from ?? lightweightResult[1];\n\t\t\t\tconst fromSearch = lightweightResult[2];\n\t\t\t\tconst fromParams = lightweightResult[3];\n\t\t\t\tconst nextTo = this.resolvePathWithBase(defaultedFromPath, dest.to ? `${dest.to}` : \".\");\n\t\t\t\tlet nextParams = resolveNextParams(dest.params, fromParams);\n\t\t\t\tconst destRoute = this.routesByPath[trimPathRight(nextTo)];\n\t\t\t\tlet destRoutes;\n\t\t\t\tif (destRoute) destRoutes = this.getRouteBranch(destRoute);\n\t\t\t\telse if (nextTo.includes(\"$\")) destRoutes = [];\n\t\t\t\telse {\n\t\t\t\t\tconst [matchedRoutes, rawParams, foundRoute] = this.getMatchedRoutes(nextTo);\n\t\t\t\t\tdestRoutes = matchedRoutes;\n\t\t\t\t\tif (this.options.notFoundRoute && (!foundRoute || foundRoute.path !== \"/\" && rawParams[\"**\"])) destRoutes = [...destRoutes, this.options.notFoundRoute];\n\t\t\t\t}\n\t\t\t\tif (destRoutes.length && hasKeys(nextParams)) for (const route of destRoutes) {\n\t\t\t\t\tconst fn = route.options.params?.stringify ?? route.options.stringifyParams;\n\t\t\t\t\tif (fn) {\n\t\t\t\t\t\tif (nextParams === fromParams) nextParams = Object.assign(Object.create(null), nextParams);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tObject.assign(nextParams, fn(nextParams));\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst nextPathname = opts.leaveParams ? nextTo : decodePath(interpolatePath({\n\t\t\t\t\tpath: nextTo,\n\t\t\t\t\tparams: nextParams,\n\t\t\t\t\tdecoder: this.pathParamsDecoder,\n\t\t\t\t\tserver: this.isServer\n\t\t\t\t}).interpolatedPath).path;\n\t\t\t\tif (process.env.NODE_ENV !== \"production\" && destRoute && !opts.leaveParams) try {\n\t\t\t\t\tconst foundRoute = this.getMatchedRoutes(nextPathname)[2];\n\t\t\t\t\tif (foundRoute?.id !== destRoute.id) console.warn(`Generated path \"${nextPathname}\" for route \"${destRoute.id}\" matched route \"${foundRoute?.id}\" instead. This can happen when multiple route templates resolve to the same URL. Use the route template that matches the intended route, or adjust params.stringify if it changed the target path.`);\n\t\t\t\t} catch {}\n\t\t\t\tlet nextSearch = fromSearch;\n\t\t\t\tif (opts._includeValidateSearch && this.options.search?.strict) {\n\t\t\t\t\tconst validatedSearch = {};\n\t\t\t\t\tdestRoutes.forEach((route) => {\n\t\t\t\t\t\tif (route.options.validateSearch) try {\n\t\t\t\t\t\t\tObject.assign(validatedSearch, validateSearch(route.options.validateSearch, {\n\t\t\t\t\t\t\t\t...validatedSearch,\n\t\t\t\t\t\t\t\t...nextSearch\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t});\n\t\t\t\t\tnextSearch = validatedSearch;\n\t\t\t\t}\n\t\t\t\tnextSearch = applySearchMiddleware(nextSearch, dest, destRoutes, opts._includeValidateSearch);\n\t\t\t\tnextSearch = nullReplaceEqualDeep(fromSearch, nextSearch);\n\t\t\t\tconst searchStr = this.options.stringifySearch(nextSearch);\n\t\t\t\tconst hash = dest.hash === true ? currentLocation.hash : dest.hash ? functionalUpdate(dest.hash, currentLocation.hash) : void 0;\n\t\t\t\tconst hashStr = hash ? `#${hash}` : \"\";\n\t\t\t\tlet nextState = dest.state === true ? currentLocation.state : dest.state ? functionalUpdate(dest.state, currentLocation.state) : {};\n\t\t\t\tif (dest.state) nextState = replaceEqualDeep(currentLocation.state, nextState);\n\t\t\t\tconst fullPath = `${nextPathname}${searchStr}${hashStr}`;\n\t\t\t\tlet href;\n\t\t\t\tlet publicHref;\n\t\t\t\tlet external = false;\n\t\t\t\tif (this.rewrite) {\n\t\t\t\t\tconst url = new URL(fullPath, this.origin);\n\t\t\t\t\tconst rewrittenUrl = executeRewriteOutput(this.rewrite, url);\n\t\t\t\t\thref = url.href.replace(url.origin, \"\");\n\t\t\t\t\tif (rewrittenUrl.origin !== this.origin) {\n\t\t\t\t\t\tpublicHref = rewrittenUrl.href;\n\t\t\t\t\t\texternal = true;\n\t\t\t\t\t} else publicHref = rewrittenUrl.pathname + rewrittenUrl.search + rewrittenUrl.hash;\n\t\t\t\t} else {\n\t\t\t\t\thref = encodePathLikeUrl(fullPath);\n\t\t\t\t\tpublicHref = href;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tpublicHref,\n\t\t\t\t\thref,\n\t\t\t\t\tpathname: nextPathname,\n\t\t\t\t\tsearch: nextSearch,\n\t\t\t\t\tsearchStr,\n\t\t\t\t\tstate: nextState,\n\t\t\t\t\thash: hash ?? \"\",\n\t\t\t\t\texternal,\n\t\t\t\t\tunmaskOnReload: dest.unmaskOnReload\n\t\t\t\t};\n\t\t\t};\n\t\t\tconst next = build(opts);\n\t\t\tif (opts.mask) next.maskedLocation = build({\n\t\t\t\tfrom: opts.from,\n\t\t\t\t...opts.mask\n\t\t\t});\n\t\t\telse if (this.options.routeMasks) {\n\t\t\t\tconst match = findFlatMatch(next.pathname, this.processedTree);\n\t\t\t\tif (match) {\n\t\t\t\t\tconst params = Object.assign(Object.create(null), match.rawParams);\n\t\t\t\t\tconst { from: _from, params: maskParams, ...maskProps } = match.route;\n\t\t\t\t\tconst nextParams = resolveNextParams(maskParams, params);\n\t\t\t\t\tnext.maskedLocation = build({\n\t\t\t\t\t\tfrom: opts.from,\n\t\t\t\t\t\t...maskProps,\n\t\t\t\t\t\tparams: nextParams\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn next;\n\t\t};\n\t\tthis.commitLocation = async ({ viewTransition, ignoreBlocker, ...next }) => {\n\t\t\tlet historyAction;\n\t\t\tconst isSameLocation = trimPathRight(this.latestLocation.href) === trimPathRight(next.href) && deepEqual(_getUserHistoryState(next.state), _getUserHistoryState(this.latestLocation.state));\n\t\t\tconst previousCommitPromise = this._commitPromise;\n\t\t\tlet resolve;\n\t\t\tconst commitPromise = new Promise((done) => {\n\t\t\t\tresolve = done;\n\t\t\t});\n\t\t\tcommitPromise.resolve = () => {\n\t\t\t\tresolve();\n\t\t\t\tpreviousCommitPromise?.resolve();\n\t\t\t};\n\t\t\tthis._commitPromise = commitPromise;\n\t\t\tif (isSameLocation) this.load();\n\t\t\telse {\n\t\t\t\tlet { maskedLocation, hashScrollIntoView, ...nextHistory } = next;\n\t\t\t\tif (maskedLocation) {\n\t\t\t\t\tnextHistory = {\n\t\t\t\t\t\t...maskedLocation,\n\t\t\t\t\t\tstate: {\n\t\t\t\t\t\t\t...maskedLocation.state,\n\t\t\t\t\t\t\t__tempKey: void 0,\n\t\t\t\t\t\t\t__tempLocation: {\n\t\t\t\t\t\t\t\t...nextHistory,\n\t\t\t\t\t\t\t\tsearch: nextHistory.searchStr,\n\t\t\t\t\t\t\t\tstate: {\n\t\t\t\t\t\t\t\t\t...nextHistory.state,\n\t\t\t\t\t\t\t\t\t__tempKey: void 0,\n\t\t\t\t\t\t\t\t\t__tempLocation: void 0,\n\t\t\t\t\t\t\t\t\t__TSR_key: void 0,\n\t\t\t\t\t\t\t\t\tkey: void 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tif (nextHistory.unmaskOnReload ?? this.options.unmaskOnReload ?? false) nextHistory.state.__tempKey = this.tempLocationKey;\n\t\t\t\t}\n\t\t\t\tnextHistory.state.__hashScrollIntoViewOptions = hashScrollIntoView ?? this.options.defaultHashScrollIntoView ?? true;\n\t\t\t\tthis.shouldViewTransition = viewTransition;\n\t\t\t\thistoryAction = next.replace ? \"REPLACE\" : \"PUSH\";\n\t\t\t\tthis.history[historyAction === \"REPLACE\" ? \"replace\" : \"push\"](nextHistory.publicHref, nextHistory.state, { ignoreBlocker });\n\t\t\t\tif (!this.history.subscribers.size) this.load({ action: { type: historyAction } });\n\t\t\t}\n\t\t\tthis._scroll.next = next.resetScroll ?? true;\n\t\t\treturn this._commitPromise;\n\t\t};\n\t\tthis.buildAndCommitLocation = ({ replace, resetScroll, hashScrollIntoView, viewTransition, ignoreBlocker, ...rest } = {}) => {\n\t\t\tconst location = this.buildLocation({\n\t\t\t\t...rest,\n\t\t\t\t_includeValidateSearch: true\n\t\t\t});\n\t\t\tthis._pendingLocation = location;\n\t\t\tconst commitPromise = this.commitLocation({\n\t\t\t\t...location,\n\t\t\t\tviewTransition,\n\t\t\t\treplace,\n\t\t\t\tresetScroll,\n\t\t\t\thashScrollIntoView,\n\t\t\t\tignoreBlocker\n\t\t\t});\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tif (this._pendingLocation === location) this._pendingLocation = void 0;\n\t\t\t});\n\t\t\treturn commitPromise;\n\t\t};\n\t\tthis.navigate = async ({ to, reloadDocument, href, publicHref, ...rest }) => {\n\t\t\tlet hrefIsUrl = false;\n\t\t\tif (href) try {\n\t\t\t\tnew URL(`${href}`);\n\t\t\t\threfIsUrl = true;\n\t\t\t} catch {}\n\t\t\tif (hrefIsUrl && !reloadDocument) reloadDocument = true;\n\t\t\tif (reloadDocument) {\n\t\t\t\tif (to !== void 0 || !href) {\n\t\t\t\t\tconst location = this.buildLocation({\n\t\t\t\t\t\tto,\n\t\t\t\t\t\t...rest\n\t\t\t\t\t});\n\t\t\t\t\thref = href ?? location.publicHref;\n\t\t\t\t\tpublicHref = publicHref ?? location.publicHref;\n\t\t\t\t}\n\t\t\t\tconst reloadHref = !hrefIsUrl && publicHref ? publicHref : href;\n\t\t\t\tif (isDangerousProtocol(reloadHref, this.protocolAllowlist)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked navigation to dangerous protocol: ${reloadHref}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!rest.ignoreBlocker) {\n\t\t\t\t\tconst blockers = this.history.getBlockers?.() ?? [];\n\t\t\t\t\tfor (const blocker of blockers) if (blocker?.blockerFn) {\n\t\t\t\t\t\tif (await blocker.blockerFn({\n\t\t\t\t\t\t\tcurrentLocation: this.latestLocation,\n\t\t\t\t\t\t\tnextLocation: this.latestLocation,\n\t\t\t\t\t\t\taction: \"PUSH\"\n\t\t\t\t\t\t})) return;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (rest.replace) window.location.replace(reloadHref);\n\t\t\t\telse window.location.href = reloadHref;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn this.buildAndCommitLocation({\n\t\t\t\t...rest,\n\t\t\t\thref,\n\t\t\t\tto,\n\t\t\t\t_isNavigate: true\n\t\t\t});\n\t\t};\n\t\tthis.load = async (opts) => {\n\t\t\tif (isServer ?? this.isServer) return loadServerRoute(this, opts);\n\t\t\tthis.updateLatestLocation();\n\t\t\tif (opts?.action) this._scroll.hash = opts.action.type === \"PUSH\" || opts.action.type === \"REPLACE\";\n\t\t\tawait loadClientRoute(this, opts);\n\t\t};\n\t\tthis.startViewTransition = (fn) => {\n\t\t\tconst shouldViewTransition = this.shouldViewTransition ?? this.options.defaultViewTransition;\n\t\t\tthis.shouldViewTransition = void 0;\n\t\t\tif (shouldViewTransition && !(isServer ?? typeof document === \"undefined\") && typeof document.startViewTransition === \"function\") {\n\t\t\t\tlet startViewTransitionParams;\n\t\t\t\tif (typeof shouldViewTransition === \"object\" && window.CSS?.supports?.(\"selector(:active-view-transition-type(a))\")) {\n\t\t\t\t\tconst next = this.latestLocation;\n\t\t\t\t\tconst prevLocation = this.stores.resolvedLocation.get();\n\t\t\t\t\tconst resolvedViewTransitionTypes = typeof shouldViewTransition.types === \"function\" ? shouldViewTransition.types(getLocationChangeInfo(next, prevLocation)) : shouldViewTransition.types;\n\t\t\t\t\tif (resolvedViewTransitionTypes === false) return fn();\n\t\t\t\t\tstartViewTransitionParams = {\n\t\t\t\t\t\tupdate: fn,\n\t\t\t\t\t\ttypes: resolvedViewTransitionTypes\n\t\t\t\t\t};\n\t\t\t\t} else startViewTransitionParams = fn;\n\t\t\t\treturn document.startViewTransition(startViewTransitionParams).updateCallbackDone;\n\t\t\t}\n\t\t\treturn fn();\n\t\t};\n\t\tthis.invalidate = (opts) => {\n\t\t\tconst committedMatches = this._committed;\n\t\t\tconst filter = opts?.filter;\n\t\t\tconst preloads = this._preloads;\n\t\t\tconst invalidIds = new Set([\n\t\t\t\t...committedMatches,\n\t\t\t\t...this._cache.values(),\n\t\t\t\t...[...preloads?.values() ?? []].flat(),\n\t\t\t\t...this._tx?.[3] ?? []\n\t\t\t].filter((match) => !filter || filter(match)).map((match) => match.id));\n\t\t\tconst discardedPreloads = [];\n\t\t\tfor (const [controller, matches] of preloads ?? []) if (matches.some((match) => invalidIds.has(match.id))) {\n\t\t\t\tpreloads.delete(controller);\n\t\t\t\tdiscardedPreloads.push(controller);\n\t\t\t}\n\t\t\tconst invalidate = (d) => {\n\t\t\t\tif (invalidIds.has(d.id)) {\n\t\t\t\t\tconst route = this.routesById[d.routeId];\n\t\t\t\t\tconst next = {\n\t\t\t\t\t\t...d,\n\t\t\t\t\t\tinvalid: true,\n\t\t\t\t\t\t...(opts?.forcePending || d.status === \"error\" || d.status === \"notFound\") && routeNeedsLoad(route) ? {\n\t\t\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\t\t\terror: void 0\n\t\t\t\t\t\t} : void 0\n\t\t\t\t\t};\n\t\t\t\t\td._flight = void 0;\n\t\t\t\t\treturn next;\n\t\t\t\t}\n\t\t\t\treturn d;\n\t\t\t};\n\t\t\tthis._committed = committedMatches.map(invalidate);\n\t\t\tfor (const [id, match] of this._cache) if (invalidIds.has(id)) {\n\t\t\t\tmatch.invalid = true;\n\t\t\t\tif (opts?.forcePending) match.status = \"pending\";\n\t\t\t}\n\t\t\tfor (const id of invalidIds) this._flights?.delete(id);\n\t\t\tfor (const controller of discardedPreloads) controller.abort();\n\t\t\tthis.shouldViewTransition = false;\n\t\t\treturn this.load({ sync: opts?.sync });\n\t\t};\n\t\tthis.resolveRedirect = (redirect) => {\n\t\t\tconst locationHeader = redirect.headers.get(\"Location\");\n\t\t\tif (!redirect.options.href) {\n\t\t\t\tconst href = this.buildLocation(redirect.options).publicHref || \"/\";\n\t\t\t\tredirect.options.href = href;\n\t\t\t\tredirect.headers.set(\"Location\", href);\n\t\t\t} else if (locationHeader) try {\n\t\t\t\tconst url = new URL(locationHeader);\n\t\t\t\tif (this.origin && url.origin === this.origin) {\n\t\t\t\t\tconst href = url.pathname + url.search + url.hash;\n\t\t\t\t\tredirect.options.href = href;\n\t\t\t\t\tredirect.headers.set(\"Location\", href);\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\tif (redirect.options.href && isDangerousProtocol(redirect.options.href, this.protocolAllowlist)) throw new Error(process.env.NODE_ENV !== \"production\" ? `Redirect blocked: unsafe protocol in href \"${redirect.options.href}\". Allowed protocols: ${Array.from(this.protocolAllowlist).join(\", \")}.` : \"Redirect blocked: unsafe protocol\");\n\t\t\tif (!redirect.headers.get(\"Location\")) redirect.headers.set(\"Location\", redirect.options.href);\n\t\t\treturn redirect;\n\t\t};\n\t\tthis.clearCache = (opts) => {\n\t\t\tconst cached = this._cache;\n\t\t\tconst preloads = this._preloads;\n\t\t\tconst filter = opts?.filter;\n\t\t\tconst discarded = [];\n\t\t\tconst discardedIds = [];\n\t\t\tfor (const [id, match] of cached) if (!filter || filter(match)) {\n\t\t\t\tdiscardedIds.push(id);\n\t\t\t\tdiscarded.push(match);\n\t\t\t}\n\t\t\tconst abort = [];\n\t\t\tfor (const [controller, matches] of preloads ?? []) if (!filter || matches.some(filter)) {\n\t\t\t\tabort.push(controller);\n\t\t\t\tdiscarded.push(...matches);\n\t\t\t}\n\t\t\tfor (const id of discardedIds) cached.delete(id);\n\t\t\tfor (const controller of abort) preloads.delete(controller);\n\t\t\tfor (const match of discarded) {\n\t\t\t\tconst flight = match._flight;\n\t\t\t\tmatch._flight = void 0;\n\t\t\t\tif (flight && !--flight[2]) {\n\t\t\t\t\tif (this._flights?.get(match.id) === flight) this._flights.delete(match.id);\n\t\t\t\t\tabort.push(flight[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const controller of abort) controller.abort();\n\t\t};\n\t\tthis.loadRouteChunk = loadRouteChunk;\n\t\tthis.preloadRoute = (opts) => preloadClientRoute(this, opts);\n\t\tthis.matchRoute = (location, opts) => {\n\t\t\tconst matchLocation = {\n\t\t\t\t...location,\n\t\t\t\tto: location.to ? this.resolvePathWithBase(location.from || \"\", location.to) : void 0,\n\t\t\t\tparams: location.params || {},\n\t\t\t\tleaveParams: true\n\t\t\t};\n\t\t\tconst next = this.buildLocation(matchLocation);\n\t\t\tconst isPending = this.stores.status.get() === \"pending\";\n\t\t\tif (opts?.pending && !isPending) return false;\n\t\t\tconst baseLocation = opts?.pending ?? !isPending ? this.latestLocation : this.stores.resolvedLocation.get() || this.stores.location.get();\n\t\t\tconst match = findSingleMatch(next.pathname, opts?.caseSensitive ?? false, opts?.fuzzy ?? false, baseLocation.pathname, this.processedTree);\n\t\t\tif (!match) return false;\n\t\t\tif (location.params) {\n\t\t\t\tif (!deepEqual(match.rawParams, location.params, { partial: true })) return false;\n\t\t\t}\n\t\t\tif (opts?.includeSearch ?? true) return deepEqual(baseLocation.search, next.search, { partial: true }) ? match.rawParams : false;\n\t\t\treturn match.rawParams;\n\t\t};\n\t\tthis.getStoreConfig = getStoreConfig;\n\t\tthis.update({\n\t\t\tdefaultPreloadDelay: 50,\n\t\t\tdefaultPendingMs: 1e3,\n\t\t\tdefaultPendingMinMs: 500,\n\t\t\tcontext: void 0,\n\t\t\t...options,\n\t\t\tcaseSensitive: options.caseSensitive ?? false,\n\t\t\tnotFoundMode: options.notFoundMode ?? \"fuzzy\",\n\t\t\tstringifySearch: options.stringifySearch ?? defaultStringifySearch,\n\t\t\tparseSearch: options.parseSearch ?? defaultParseSearch,\n\t\t\tprotocolAllowlist: options.protocolAllowlist ?? DEFAULT_PROTOCOL_ALLOWLIST\n\t\t});\n\t\tif (!(isServer ?? typeof document === \"undefined\")) self.__TSR_ROUTER__ = this;\n\t}\n\tisShell() {\n\t\treturn !!this.options.isShell;\n\t}\n\tget state() {\n\t\treturn this.stores.__store.get();\n\t}\n\tsetRoutes({ routesById, routesByPath, processedTree }) {\n\t\tthis.routesById = routesById;\n\t\tthis.routesByPath = routesByPath;\n\t\tthis.processedTree = processedTree;\n\t\tconst notFoundRoute = this.options.notFoundRoute;\n\t\tif (notFoundRoute) {\n\t\t\tnotFoundRoute.init({ originalIndex: 99999999999 });\n\t\t\tthis.routesById[notFoundRoute.id] = notFoundRoute;\n\t\t}\n\t}\n\tgetRouteBranch(route) {\n\t\tlet branch = this.routeBranchCache.get(route);\n\t\tif (!branch) {\n\t\t\tbranch = buildRouteBranch(route);\n\t\t\tthis.routeBranchCache.set(route, branch);\n\t\t}\n\t\treturn branch;\n\t}\n\tmatchRoutesInternal(next, opts) {\n\t\tconst [initialMatchedRoutes, rawParams, foundRoute] = this.getMatchedRoutes(next.pathname);\n\t\tlet matchedRoutes = initialMatchedRoutes;\n\t\tlet isGlobalNotFound = false;\n\t\tif (foundRoute ? foundRoute.path !== \"/\" && rawParams[\"**\"] : trimPathRight(next.pathname)) if (this.options.notFoundRoute) matchedRoutes = [...matchedRoutes, this.options.notFoundRoute];\n\t\telse isGlobalNotFound = true;\n\t\tconst _notFoundRouteId = isGlobalNotFound ? findGlobalNotFoundRouteId(this.options.notFoundMode, matchedRoutes) : void 0;\n\t\tconst matches = new Array(matchedRoutes.length);\n\t\tconst committed = this._committed;\n\t\tconst previousAt = (route, index) => {\n\t\t\tconst match = committed[index];\n\t\t\treturn match?.routeId === route.id ? match : route === this.options.notFoundRoute ? committed.find((candidate) => candidate.routeId === route.id) : void 0;\n\t\t};\n\t\tlet strictParams;\n\t\tfor (let index = 0; index < matchedRoutes.length; index++) {\n\t\t\tconst route = matchedRoutes[index];\n\t\t\tconst parentMatch = matches[index - 1];\n\t\t\tlet preMatchSearch;\n\t\t\tlet strictMatchSearch;\n\t\t\tlet searchError;\n\t\t\t{\n\t\t\t\tconst parentSearch = parentMatch?.search ?? next.search;\n\t\t\t\tconst parentStrictSearch = parentMatch?._strictSearch ?? void 0;\n\t\t\t\ttry {\n\t\t\t\t\tconst strictSearch = validateSearch(route.options.validateSearch, { ...parentSearch }) ?? void 0;\n\t\t\t\t\tpreMatchSearch = {\n\t\t\t\t\t\t...parentSearch,\n\t\t\t\t\t\t...strictSearch\n\t\t\t\t\t};\n\t\t\t\t\tstrictMatchSearch = {\n\t\t\t\t\t\t...parentStrictSearch,\n\t\t\t\t\t\t...strictSearch\n\t\t\t\t\t};\n\t\t\t\t} catch (err) {\n\t\t\t\t\tlet searchParamError = err;\n\t\t\t\t\tif (!(err instanceof SearchParamError)) searchParamError = new SearchParamError(err.message, { cause: err });\n\t\t\t\t\tif (opts?.throwOnError) throw searchParamError;\n\t\t\t\t\tpreMatchSearch = parentSearch;\n\t\t\t\t\tstrictMatchSearch = {};\n\t\t\t\t\tsearchError = searchParamError;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet loaderDeps = \"\";\n\t\t\tlet loaderDepsHash = \"\";\n\t\t\ttry {\n\t\t\t\tloaderDeps = route.options.loaderDeps?.({ search: preMatchSearch }) ?? \"\";\n\t\t\t\tloaderDepsHash = loaderDeps ? JSON.stringify(loaderDeps) || \"\" : \"\";\n\t\t\t} catch (cause) {\n\t\t\t\tif (opts?.throwOnError) throw cause;\n\t\t\t\tsearchError ??= cause;\n\t\t\t}\n\t\t\tconst { interpolatedPath, usedParams } = interpolatePath({\n\t\t\t\tpath: route.fullPath,\n\t\t\t\tparams: rawParams,\n\t\t\t\tdecoder: this.pathParamsDecoder,\n\t\t\t\tserver: this.isServer\n\t\t\t});\n\t\t\tconst matchId = route.id + interpolatedPath + loaderDepsHash;\n\t\t\tconst previousMatch = previousAt(route, index);\n\t\t\tconst existingMatch = process.env.NODE_ENV !== \"production\" && opts?._rematerialize ? void 0 : this._cache.get(matchId) ?? (previousMatch?.id === matchId ? previousMatch : void 0);\n\t\t\tstrictParams = existingMatch?._strictParams ?? Object.assign(usedParams, strictParams);\n\t\t\tlet paramsError;\n\t\t\tif (!existingMatch) try {\n\t\t\t\textractStrictParams(route, strictParams);\n\t\t\t} catch (err) {\n\t\t\t\tif (isNotFound(err) || isRedirect(err)) paramsError = err;\n\t\t\t\telse paramsError = new PathParamError(err.message, { cause: err });\n\t\t\t\tif (opts?.throwOnError) throw paramsError;\n\t\t\t}\n\t\t\tconst cause = previousMatch ? \"stay\" : \"enter\";\n\t\t\tlet match;\n\t\t\tif (existingMatch) match = {\n\t\t\t\t...existingMatch,\n\t\t\t\tcause,\n\t\t\t\tsearch: previousMatch ? nullReplaceEqualDeep(previousMatch.search, preMatchSearch) : nullReplaceEqualDeep(existingMatch.search, preMatchSearch),\n\t\t\t\t_strictSearch: strictMatchSearch,\n\t\t\t\tsearchError\n\t\t\t};\n\t\t\telse {\n\t\t\t\tconst status = routeNeedsLoad(route) ? \"pending\" : \"success\";\n\t\t\t\tmatch = {\n\t\t\t\t\tid: matchId,\n\t\t\t\t\tssr: isServer ?? this.isServer ? void 0 : route.options.ssr,\n\t\t\t\t\tindex,\n\t\t\t\t\trouteId: route.id,\n\t\t\t\t\tparams: previousMatch?.params ?? strictParams,\n\t\t\t\t\t_strictParams: strictParams,\n\t\t\t\t\tpathname: interpolatedPath,\n\t\t\t\t\tupdatedAt: Date.now(),\n\t\t\t\t\tsearch: previousMatch ? nullReplaceEqualDeep(previousMatch.search, preMatchSearch) : preMatchSearch,\n\t\t\t\t\t_strictSearch: strictMatchSearch,\n\t\t\t\t\tsearchError,\n\t\t\t\t\tstatus,\n\t\t\t\t\tisFetching: false,\n\t\t\t\t\terror: void 0,\n\t\t\t\t\tparamsError,\n\t\t\t\t\tcontext: {},\n\t\t\t\t\tabortController: opts?._controller ?? new AbortController(),\n\t\t\t\t\tcause,\n\t\t\t\t\tloaderDeps: previousMatch ? replaceEqualDeep(previousMatch.loaderDeps, loaderDeps) : loaderDeps,\n\t\t\t\t\tinvalid: false,\n\t\t\t\t\tpreload: false,\n\t\t\t\t\tstaticData: route.options.staticData || {},\n\t\t\t\t\tfullPath: route.fullPath\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst _notFound = _notFoundRouteId === route.id;\n\t\t\tif (match._notFound && !_notFound) match.error = void 0;\n\t\t\tmatch._notFound = _notFound;\n\t\t\tmatches[index] = match;\n\t\t}\n\t\tfor (let index = 0; index < matches.length; index++) {\n\t\t\tconst match = matches[index];\n\t\t\tmatch.params = match.cause === \"stay\" ? nullReplaceEqualDeep(match.params, strictParams) : strictParams;\n\t\t\tif (opts?._controller) match.context = {};\n\t\t}\n\t\treturn matches;\n\t}\n\t/**\n\t* Lightweight route matching for buildLocation.\n\t* Only computes fullPath, accumulated search, and params - skipping expensive\n\t* operations like AbortController, loaderDeps, and full match objects.\n\t*/\n\tmatchRoutesLightweight(location) {\n\t\tconst lastRouteId = last(this.stores.ids.get());\n\t\tconst lastStateMatch = lastRouteId ? this.stores.byRoute.get(lastRouteId).get() : void 0;\n\t\tconst lastStateMatchId = lastStateMatch?.id;\n\t\tconst cached = this.lightweightCache.get(location);\n\t\tif (cached && cached[0] === lastStateMatchId) return cached[1];\n\t\tconst [matchedRoutes, rawParams] = this.getMatchedRoutes(location.pathname);\n\t\tconst lastRoute = last(matchedRoutes);\n\t\tconst accumulatedSearch = { ...location.search };\n\t\tfor (const route of matchedRoutes) try {\n\t\t\tObject.assign(accumulatedSearch, validateSearch(route.options.validateSearch, accumulatedSearch));\n\t\t} catch {}\n\t\tconst canReuseParams = lastStateMatch && lastStateMatch.routeId === lastRoute.id && lastStateMatch.pathname === location.pathname;\n\t\tlet params;\n\t\tif (canReuseParams) params = lastStateMatch.params;\n\t\telse {\n\t\t\tconst strictParams = Object.assign(Object.create(null), rawParams);\n\t\t\tfor (const route of matchedRoutes) try {\n\t\t\t\textractStrictParams(route, strictParams);\n\t\t\t} catch {}\n\t\t\tparams = strictParams;\n\t\t}\n\t\tconst result = [\n\t\t\tmatchedRoutes,\n\t\t\tlastRoute.fullPath,\n\t\t\taccumulatedSearch,\n\t\t\tparams\n\t\t];\n\t\tthis.lightweightCache.set(location, [lastStateMatchId, result]);\n\t\treturn result;\n\t}\n};\n/**\n* In non-production environments,\n* augment the RouterCore class with a `_refreshRoute` method\n* dedicated to HMR.\n*/\nif (process.env.NODE_ENV !== \"production\") {\n\tRouterCore.prototype._replaceRouteChunk = replaceRouteChunk;\n\tRouterCore.prototype._refreshRoute = async function() {\n\t\tthis._serverResult = void 0;\n\t\tthis.updateLatestLocation();\n\t\tawait refreshClientRoute(this);\n\t};\n}\n/** Error thrown when search parameter validation fails. */\nvar SearchParamError = class extends Error {};\n/** Error thrown when path parameter parsing/validation fails. */\nvar PathParamError = class extends Error {};\nconst normalize = (str) => str.endsWith(\"/\") && str.length > 1 ? str.slice(0, -1) : str;\nfunction comparePaths(a, b) {\n\treturn normalize(a) === normalize(b);\n}\n/**\n* Lazily import a module function and forward arguments to it, retaining\n* parameter and return types for the selected export key.\n*/\nfunction lazyFn(fn, key) {\n\treturn async (...args) => {\n\t\treturn (await fn())[key || \"default\"](...args);\n\t};\n}\n/** Create an initial RouterState from a parsed location. */\nfunction getInitialRouterState(location) {\n\treturn {\n\t\tisLoading: false,\n\t\tstatus: \"idle\",\n\t\tresolvedLocation: void 0,\n\t\tlocation,\n\t\tmatches: []\n\t};\n}\nfunction validateSearch(validateSearch, input) {\n\tif (validateSearch == null) return {};\n\tif (\"~standard\" in validateSearch) {\n\t\tconst result = validateSearch[\"~standard\"].validate(input);\n\t\tif (result instanceof Promise) throw new SearchParamError(\"Async validation not supported\");\n\t\tif (result.issues) throw new SearchParamError(JSON.stringify(result.issues, void 0, 2), { cause: result });\n\t\treturn result.value;\n\t}\n\tif (\"parse\" in validateSearch) return validateSearch.parse(input);\n\tif (typeof validateSearch === \"function\") return validateSearch(input);\n\treturn {};\n}\nfunction applySearchMiddleware(search, dest, destRoutes, includeValidateSearch) {\n\tconst middlewares = [];\n\tfor (const route of destRoutes) {\n\t\tconst routeOptions = route.options;\n\t\tif (\"search\" in routeOptions) {\n\t\t\tif (routeOptions.search?.middlewares) middlewares.push(...routeOptions.search.middlewares);\n\t\t} else if (routeOptions.preSearchFilters || routeOptions.postSearchFilters) {\n\t\t\tconst legacyMiddleware = ({ search, next }) => {\n\t\t\t\tconst result = next(routeOptions.preSearchFilters ? routeOptions.preSearchFilters.reduce((prev, next) => next(prev), search) : search);\n\t\t\t\treturn routeOptions.postSearchFilters ? routeOptions.postSearchFilters.reduce((prev, next) => next(prev), result) : result;\n\t\t\t};\n\t\t\tmiddlewares.push(legacyMiddleware);\n\t\t}\n\t\tconst routeValidateSearch = routeOptions.validateSearch;\n\t\tif (includeValidateSearch && routeValidateSearch) {\n\t\t\tconst validate = ({ search, next, meta }) => {\n\t\t\t\tconst result = next(search);\n\t\t\t\ttry {\n\t\t\t\t\tconst validated = validateSearch(routeValidateSearch, result);\n\t\t\t\t\tif (meta && validated) {\n\t\t\t\t\t\tfor (const key in validated) if (!(key in result)) (meta.defaulted ||= /* @__PURE__ */ new Map()).set(key, validated[key]);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t...validated\n\t\t\t\t\t};\n\t\t\t\t} catch {}\n\t\t\t\treturn result;\n\t\t\t};\n\t\t\tmiddlewares.push(validate);\n\t\t}\n\t}\n\tconst applyNext = (index, currentSearch, meta) => {\n\t\tif (index >= middlewares.length) {\n\t\t\tif (!dest.search) return {};\n\t\t\tif (dest.search === true) return currentSearch;\n\t\t\tconst result = functionalUpdate(dest.search, currentSearch);\n\t\t\tif (meta) meta.explicit = result;\n\t\t\treturn result;\n\t\t}\n\t\tconst next = (newSearch, collectMeta) => {\n\t\t\tif (collectMeta) {\n\t\t\t\tconst nextMeta = meta || {};\n\t\t\t\treturn {\n\t\t\t\t\tsearch: applyNext(index + 1, newSearch, nextMeta),\n\t\t\t\t\tmeta: nextMeta\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn applyNext(index + 1, newSearch, meta);\n\t\t};\n\t\treturn middlewares[index]({\n\t\t\tsearch: currentSearch,\n\t\t\tnext,\n\t\t\tmeta\n\t\t});\n\t};\n\treturn applyNext(0, search);\n}\nfunction findGlobalNotFoundRouteId(notFoundMode, routes) {\n\tif (notFoundMode !== \"root\") {\n\t\tlet fallback;\n\t\tfor (let i = routes.length - 1; i >= 0; i--) {\n\t\t\tconst route = routes[i];\n\t\t\tif (route.options.notFoundComponent) return route.id;\n\t\t\tfallback ||= route.children && route.id;\n\t\t}\n\t\tif (fallback) return fallback;\n\t}\n\treturn rootRouteId;\n}\nfunction resolveNextParams(spec, base) {\n\tif (spec === false || spec === null) return Object.create(null);\n\tif ((spec ?? true) === true) return base;\n\tconst next = Object.assign(Object.create(null), base);\n\treturn Object.assign(next, functionalUpdate(spec, next));\n}\nfunction extractStrictParams(route, accumulatedParams) {\n\tconst parseParams = route.options.params?.parse ?? route.options.parseParams;\n\tif (parseParams) Object.assign(accumulatedParams, parseParams(accumulatedParams));\n}\n//#endregion\nexport { PathParamError, RouterCore, SearchParamError, defaultSerializeError, getInitialRouterState, getLocationChangeInfo, lazyFn, runRouteLifecycle, trailingSlashOptions };\n\n//# sourceMappingURL=router.js.map","import { isNotFound } from \"./not-found.js\";\nimport { isRedirect } from \"./redirect.js\";\nimport { hydrateSsrMatchId } from \"./ssr/ssr-match-id.js\";\nimport { getLocationChangeInfo, runRouteLifecycle } from \"./router.js\";\n//#region src/load-client.ts\nfunction replaceRouteChunk(route, lazyFn) {\n\troute.lazyFn = lazyFn ?? route.lazyFn;\n\troute._lazy = void 0;\n}\nfunction preloadComponent(route, type) {\n\treturn route.options[type]?.preload?.();\n}\nfunction loadComponents(route, onPendingReady) {\n\tconst component = preloadComponent(route, \"component\");\n\tlet pending = preloadComponent(route, \"pendingComponent\");\n\tif (onPendingReady) if (pending) pending = pending.then(onPendingReady);\n\telse onPendingReady();\n\tif (component && pending) return Promise.all([component, pending]).then(() => {});\n\treturn component ?? pending;\n}\nfunction loadRouteChunk(route, componentType, onPendingReady) {\n\tconst afterLazy = () => componentType === false ? void 0 : componentType ? preloadComponent(route, componentType) : loadComponents(route, onPendingReady);\n\tconst current = route._lazy;\n\tif (current) return current === true ? afterLazy() : current.then(afterLazy);\n\tif (!route.lazyFn) return afterLazy();\n\tconst promise = route.lazyFn().then((lazyRoute) => {\n\t\tif (process.env.NODE_ENV === \"production\" || route._lazy === promise) {\n\t\t\tconst { id: _id, ...options } = lazyRoute.options;\n\t\t\tObject.assign(route.options, options);\n\t\t\troute._lazy = true;\n\t\t}\n\t}, (error) => {\n\t\tif (process.env.NODE_ENV === \"production\" || route._lazy === promise) route._lazy = void 0;\n\t\tthrow error;\n\t});\n\troute._lazy = promise;\n\treturn promise.then(afterLazy);\n}\n/** Return the structural lane through the first terminal render boundary. */\nfunction _getRenderedMatches(matches) {\n\tconst end = matches.findIndex((match) => match.status !== \"success\" || match._notFound) + 1;\n\treturn end && end < matches.length ? matches.slice(0, end) : matches;\n}\n/** Return the lane whose document assets belong to the current presentation. */\nfunction _getAssetMatches(matches) {\n\tlet end = matches.length;\n\tfor (let index = 0; index < end; index++) {\n\t\tconst match = matches[index];\n\t\tif (match._assetEnd !== void 0) {\n\t\t\tend = Math.min(end, Math.max(index + 1, match._assetEnd));\n\t\t\tcontinue;\n\t\t}\n\t\tif (match.status !== \"success\" || match._notFound) {\n\t\t\tend = index + 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn end < matches.length ? matches.slice(0, end) : matches;\n}\nconst SUCCESS = 0;\nconst ERROR = 1;\nconst NOT_FOUND = 2;\nconst REDIRECTED = 3;\nconst CANCELED_OUTCOME = [4];\nfunction isControl(result) {\n\treturn typeof result[0] === \"number\";\n}\nfunction waitFor(value, signal) {\n\tif (signal.aborted) return Promise.race([Promise.reject(signal), value]);\n\treturn new Promise((resolve, reject) => {\n\t\tconst abort = () => reject(signal);\n\t\tsignal.addEventListener(\"abort\", abort, { once: true });\n\t\tPromise.resolve(value).then(resolve, reject).finally(() => signal.removeEventListener(\"abort\", abort));\n\t});\n}\nfunction getRoute(router, match) {\n\treturn router.routesById[match.routeId];\n}\nfunction normalize(value, rejected, routeId) {\n\tif (isRedirect(value)) return [REDIRECTED, value];\n\tif (isNotFound(value)) {\n\t\tvalue.routeId ||= routeId;\n\t\treturn [NOT_FOUND, value];\n\t}\n\tif (!rejected) return [SUCCESS, value];\n\tif (typeof value?.then === \"function\") value = new Error(\"A Promise was thrown\", { cause: value });\n\treturn [ERROR, value];\n}\nfunction normalizeError(route, cause) {\n\tlet outcome = normalize(cause, true, route.id);\n\tif (outcome[0] !== ERROR) return outcome;\n\ttry {\n\t\troute.options.onError?.(outcome[1]);\n\t} catch (onErrorCause) {\n\t\toutcome = normalize(onErrorCause, true, route.id);\n\t}\n\treturn outcome;\n}\nfunction normalizeLaneError(router, lane, route, cause, options) {\n\tif (options[0].signal.aborted) return CANCELED_OUTCOME;\n\treturn materializeRedirect(router, lane, route, normalizeError(route, cause), options);\n}\nasync function contextualize(router, lane, options, end, planSuccessfulLane, retainedEnd) {\n\tconst [location, matches] = lane;\n\tconst signal = options[0].signal;\n\tconst preload = !!options[3];\n\tfor (let index = options[6] ?? 0; index < end; index++) {\n\t\tconst match = matches[index];\n\t\tconst route = getRoute(router, match);\n\t\tmatch.abortController = options[0];\n\t\tconst parentContext = matches[index - 1]?.context ?? router.options.context ?? {};\n\t\tconst common = {\n\t\t\tparams: match.params,\n\t\t\tlocation,\n\t\t\tnavigate: (opts) => router.navigate({\n\t\t\t\t...opts,\n\t\t\t\t_fromLocation: location\n\t\t\t}),\n\t\t\tbuildLocation: router.buildLocation,\n\t\t\tcause: preload ? \"preload\" : match.cause,\n\t\t\tabortController: options[0],\n\t\t\tpreload,\n\t\t\tmatches,\n\t\t\trouteId: route.id\n\t\t};\n\t\ttry {\n\t\t\tconst routeContext = match._ctx ||= route.options.context ? route.options.context({\n\t\t\t\t...common,\n\t\t\t\tdeps: match.loaderDeps,\n\t\t\t\tcontext: parentContext\n\t\t\t}) || {} : void 0;\n\t\t\tmatch.context = {\n\t\t\t\t...parentContext,\n\t\t\t\t...routeContext\n\t\t\t};\n\t\t} catch (cause) {\n\t\t\treleaseFlight(router, match);\n\t\t\treturn [index, normalizeLaneError(router, lane, route, cause, options)];\n\t\t}\n\t\tif (signal.aborted) return [index, CANCELED_OUTCOME];\n\t\tconst validationError = match.paramsError ?? match.searchError;\n\t\tif (validationError !== void 0) {\n\t\t\treleaseFlight(router, match);\n\t\t\treturn [index, normalizeLaneError(router, lane, route, validationError, options)];\n\t\t}\n\t\tconst beforeLoad = route.options.beforeLoad;\n\t\tif (!beforeLoad) continue;\n\t\tconst previousStatus = match.status;\n\t\tif (index >= retainedEnd) {\n\t\t\tmatch.status = \"pending\";\n\t\t\toptions[7]?.();\n\t\t}\n\t\ttry {\n\t\t\tsetFetching(router, match, \"beforeLoad\", options[0]);\n\t\t\tconst result = await waitFor(beforeLoad({\n\t\t\t\t...common,\n\t\t\t\tsearch: match.search,\n\t\t\t\tcontext: match.context,\n\t\t\t\t...router.options.additionalContext\n\t\t\t}), signal);\n\t\t\tif (signal.aborted) return [index, CANCELED_OUTCOME];\n\t\t\tconst outcome = materializeRedirect(router, lane, route, normalize(result, false, route.id), options);\n\t\t\tif (outcome[0] !== SUCCESS) {\n\t\t\t\treleaseFlight(router, match);\n\t\t\t\treturn [index, outcome];\n\t\t\t}\n\t\t\tmatch.context = {\n\t\t\t\t...match.context,\n\t\t\t\t...result\n\t\t\t};\n\t\t} catch (cause) {\n\t\t\treleaseFlight(router, match);\n\t\t\treturn [index, normalizeLaneError(router, lane, route, cause, options)];\n\t\t} finally {\n\t\t\tmatch.status = previousStatus;\n\t\t\tsetFetching(router, match, false, options[0]);\n\t\t}\n\t}\n\tplanSuccessfulLane();\n}\nfunction releaseOwnedFlight(router, match, flight) {\n\tif (!flight || --flight[2]) return;\n\tif (router._flights?.get(match.id) === flight) {\n\t\tconst current = router._tx;\n\t\tif (current && !current[0].signal.aborted && !current[3].includes(match) && current[3].some((candidate) => candidate.id === match.id) && current[3].some((candidate) => candidate.isFetching === \"beforeLoad\")) return;\n\t\trouter._flights.delete(match.id);\n\t}\n\treturn flight[1];\n}\nfunction releaseFlight(router, match) {\n\tconst flight = match._flight;\n\tmatch._flight = void 0;\n\treleaseOwnedFlight(router, match, flight)?.abort();\n}\n/**\n* Not passing in a `next` ownership recipient\n* is equivalent to discarding the match resources\n*/\nfunction transferMatchResources(router, previous, next, deferSameIdFlight) {\n\tconst abort = [];\n\tfor (const match of previous) if (!next?.includes(match)) {\n\t\tconst flight = match._flight;\n\t\tmatch._flight = void 0;\n\t\tif (deferSameIdFlight && flight?.[2] === 1 && router._flights?.get(match.id) === flight && next?.some((candidate) => candidate.id === match.id)) flight[2] = 0;\n\t\telse {\n\t\t\tconst controller = releaseOwnedFlight(router, match, flight);\n\t\t\tif (controller) abort.push(controller);\n\t\t}\n\t}\n\tfor (const controller of abort) controller.abort();\n}\nfunction acquireMatchResources(matches) {\n\tfor (const match of matches) {\n\t\tconst flight = match._flight;\n\t\tif (flight) flight[2]++;\n\t}\n}\nfunction setFetching(router, match, value, owner) {\n\tmatch.isFetching = value;\n\tif (owner && router._tx?.[0] !== owner) return;\n\tconst store = router.stores.byRoute.get(match.routeId);\n\tconst presented = store?.get();\n\tif (presented?.id === match.id) store.set({\n\t\t...presented,\n\t\tisFetching: value\n\t});\n}\nfunction getLoaderContext(router, lane, match, route, controller, parentMatchPromise, preload) {\n\tconst location = lane[0];\n\treturn {\n\t\tparams: match.params,\n\t\tlocation,\n\t\tnavigate: (opts) => router.navigate({\n\t\t\t...opts,\n\t\t\t_fromLocation: location\n\t\t}),\n\t\tcause: preload ? \"preload\" : match.cause,\n\t\tabortController: controller,\n\t\tpreload,\n\t\tdeps: match.loaderDeps,\n\t\tparentMatchPromise,\n\t\tcontext: match.context,\n\t\troute,\n\t\t...router.options.additionalContext\n\t};\n}\nasync function loadResource(router, lane, match, route, loader, parentMatchPromise, options) {\n\tconst owner = options[0];\n\tconst signal = owner.signal;\n\tif (signal.aborted) return CANCELED_OUTCOME;\n\tif (!loader) return [SUCCESS, void 0];\n\tlet flight = match._flight;\n\tsetFetching(router, match, \"loader\", owner);\n\ttry {\n\t\tif (!flight) {\n\t\t\tconst controller = new AbortController();\n\t\t\tflight = [\n\t\t\t\tPromise.resolve().then(() => loader(getLoaderContext(router, lane, match, route, controller, parentMatchPromise, !!options[3]))).then((value) => normalize(value, false, route.id), (cause) => normalize(cause, true, route.id)).then((result) => {\n\t\t\t\t\tif (result[0] !== SUCCESS && router._flights?.get(match.id) === flight) {\n\t\t\t\t\t\trouter._flights.delete(match.id);\n\t\t\t\t\t\tif (!flight[2]) controller.abort();\n\t\t\t\t\t}\n\t\t\t\t\treturn result[0] === ERROR && flight[2] ? normalizeError(route, result[1]) : result;\n\t\t\t\t}),\n\t\t\t\tcontroller,\n\t\t\t\t1\n\t\t\t];\n\t\t\t(router._flights ??= /* @__PURE__ */ new Map()).set(match.id, flight);\n\t\t}\n\t\tmatch._flight = flight;\n\t\tmatch.abortController = flight[1];\n\t\treturn materializeRedirect(router, lane, route, await waitFor(flight[0], signal), options);\n\t} catch (cause) {\n\t\tif (cause !== signal || !signal.aborted) throw cause;\n\t\treleaseFlight(router, match);\n\t\treturn CANCELED_OUTCOME;\n\t} finally {\n\t\tsetFetching(router, match, false, owner);\n\t}\n}\nfunction settleInto(match, result, preload) {\n\tif (result[0] === REDIRECTED) return;\n\tmatch.status = \"success\";\n\tmatch.error = void 0;\n\tif (result[0] === SUCCESS) {\n\t\tmatch.loaderData = result[1];\n\t\tmatch.invalid = false;\n\t\tmatch.updatedAt = Date.now();\n\t\tmatch.preload = preload;\n\t} else match.invalid = true;\n}\nfunction cacheLoaderMatch(router, match, planned) {\n\tconst current = router._cache.get(match.id);\n\tif (current !== planned || router._committed.some((candidate) => candidate.id === match.id && candidate._flight === match._flight)) return;\n\tconst cached = {\n\t\t...match,\n\t\t_notFound: void 0,\n\t\tcontext: {}\n\t};\n\tif (cached._flight) cached._flight[2]++;\n\trouter._cache.set(match.id, cached);\n\tif (current) releaseFlight(router, current);\n}\nfunction getParentSnapshot(match, outcome) {\n\tif (outcome[0] === ERROR || outcome[0] === NOT_FOUND) return {\n\t\t...match,\n\t\tstatus: outcome[0] === ERROR ? \"error\" : \"notFound\",\n\t\terror: outcome[1],\n\t\t_flight: void 0\n\t};\n\treturn match;\n}\nfunction createLoaderTask(router, lane, index, tasks, semanticParent, options, retainedEnd) {\n\tconst match = lane[1][index];\n\tconst route = getRoute(router, match);\n\tconst preload = !!options[3];\n\tconst plannedCacheMatch = router._cache.get(match.id);\n\tlet configured;\n\tlet reload = false;\n\tlet reloadFailure;\n\ttry {\n\t\tif (match.status === \"success\") {\n\t\t\tconfigured = route.options.shouldReload;\n\t\t\tif (typeof configured === \"function\") configured = configured(getLoaderContext(router, lane, match, route, options[0], semanticParent, preload));\n\t\t\tif (options[0].signal.aborted) reloadFailure = CANCELED_OUTCOME;\n\t\t}\n\t\tif (!reloadFailure) if (match.status !== \"success\") reload = true;\n\t\telse {\n\t\t\tconst staleAge = preload || match.preload ? route.options.preloadStaleTime ?? router.options.defaultPreloadStaleTime ?? 3e4 : route.options.staleTime ?? router.options.defaultStaleTime ?? 0;\n\t\t\treload = !!(match.invalid || configured || configured === void 0 && Date.now() - match.updatedAt >= staleAge && (options[5] || match.cause === \"enter\" || options[2].some((candidate) => candidate.routeId === match.routeId && candidate.id !== match.id)));\n\t\t}\n\t} catch (cause) {\n\t\tmatch.invalid = true;\n\t\treleaseFlight(router, match);\n\t\treloadFailure = normalizeLaneError(router, lane, route, cause, options);\n\t}\n\tconst routeLoader = route.options.loader;\n\tconst isLoaderFn = typeof routeLoader === \"function\";\n\tconst loader = isLoaderFn ? routeLoader : routeLoader?.handler;\n\tconst preloadable = !preload || route.options.preload !== false;\n\tlet donor = preloadable && routeLoader && !(process.env.NODE_ENV !== \"production\" && router._tx?.[6]) ? router._flights?.get(match.id) : void 0;\n\tif (donor === match._flight || reloadFailure) donor = void 0;\n\telse if (donor && !reload && !preload && configured === void 0) reload = true;\n\telse if (!reload) donor = void 0;\n\tconst background = !!(routeLoader && reload && match.status === \"success\" && !preload && !options[4] && ((isLoaderFn ? void 0 : routeLoader.staleReloadMode) ?? router.options.defaultStaleReloadMode) !== \"blocking\");\n\tconst loaded = reload && preloadable;\n\tconst blocking = loaded && !background && (match.status !== \"success\" || !!routeLoader);\n\tconst onReady = index >= retainedEnd ? options[7] : void 0;\n\tconst onLazyReady = route.lazyFn && route._lazy !== true ? onReady : void 0;\n\tif (loaded && !routeLoader) {\n\t\tmatch.invalid = false;\n\t\tmatch.updatedAt = Date.now();\n\t}\n\tif (donor) donor[2]++;\n\tif (blocking) {\n\t\tconst acceptedFlight = match._flight;\n\t\tmatch._flight = donor;\n\t\treleaseOwnedFlight(router, match, acceptedFlight)?.abort();\n\t\tif (index >= retainedEnd) match.status = \"pending\";\n\t\tonReady?.();\n\t}\n\tif (!loaded) match.isFetching = false;\n\tconst outcome = (reloadFailure ? Promise.resolve(reloadFailure) : !blocking ? Promise.resolve([SUCCESS, match.loaderData]) : loadResource(router, lane, match, route, loader, semanticParent, options)).then((result) => {\n\t\tif (blocking) {\n\t\t\tsettleInto(match, result, preload);\n\t\t\tif (result[0] === SUCCESS) {\n\t\t\t\tif (routeLoader && !options[0].signal.aborted) cacheLoaderMatch(router, match, plannedCacheMatch);\n\t\t\t\tif (index >= retainedEnd) match.status = \"pending\";\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t});\n\tconst chunkFailure = waitFor(Promise.resolve().then(() => loadRouteChunk(route, void 0, onLazyReady)), options[0].signal).then(() => void 0, (cause) => lane[1].some((candidate, candidateIndex) => candidateIndex <= index && (candidate.status === \"error\" || candidate.status === \"notFound\" || candidate._notFound)) ? void 0 : [index, normalizeLaneError(router, lane, route, cause, options)]).then((failure) => outcome.then((result) => {\n\t\tif (blocking && !failure && result[0] === SUCCESS && match.status === \"pending\" && !options[0].signal.aborted) {\n\t\t\tmatch.status = \"success\";\n\t\t\tonReady?.();\n\t\t}\n\t\treturn failure;\n\t}));\n\ttasks.push([\n\t\tindex,\n\t\toutcome,\n\t\tchunkFailure\n\t]);\n\tif (!background) return outcome.then((result) => getParentSnapshot(match, result));\n\tconst candidate = {\n\t\t...match,\n\t\tstatus: \"pending\",\n\t\tpreload: false,\n\t\t_flight: donor\n\t};\n\tmatch.invalid = false;\n\tmatch.isFetching = \"loader\";\n\tconst backgroundOutcome = loadResource(router, lane, candidate, route, loader, semanticParent, options).then((result) => {\n\t\tmatch.isFetching = false;\n\t\tsettleInto(candidate, result, false);\n\t\treturn result;\n\t});\n\t(lane[2] ??= []).push([\n\t\tindex,\n\t\tbackgroundOutcome,\n\t\tchunkFailure,\n\t\tcandidate\n\t]);\n\treturn backgroundOutcome.then((result) => getParentSnapshot(candidate, result));\n}\nasync function getNotFoundBoundary(router, matches, indexed, signal, fallback = 0) {\n\tconst cause = indexed?.[1][1];\n\tlet index = cause?.routeId ? matches.findIndex((match) => match.routeId === cause.routeId) : indexed?.[0] ?? matches.length - 1;\n\tif (index < 0) index = 0;\n\tfor (let i = index; i >= 0; i--) {\n\t\tconst route = getRoute(router, matches[i]);\n\t\ttry {\n\t\t\tconst loading = loadRouteChunk(route, false);\n\t\t\tif (loading) await waitFor(loading, signal);\n\t\t} catch (cause) {\n\t\t\tif (cause === signal && signal.aborted) throw cause;\n\t\t}\n\t\tif (route.options.notFoundComponent) return i;\n\t}\n\treturn cause?.routeId ? index : fallback;\n}\nfunction discardBackground(router, lane) {\n\tif (lane[2]) {\n\t\ttransferMatchResources(router, lane[2].map((task) => task[3]));\n\t\tlane[2] = void 0;\n\t}\n}\nasync function settleTasks(tasks, serialFailure, redirectTasks, gate) {\n\tlet loaderFailure;\n\ttry {\n\t\tawait Promise.all(tasks.map((task) => task[1].then(async (outcome) => {\n\t\t\tconst taskIndex = task[0];\n\t\t\tif (gate && taskIndex >= await gate) return;\n\t\t\tif (outcome[0] >= REDIRECTED) throw [taskIndex, outcome];\n\t\t\tif (!loaderFailure && outcome[0] !== SUCCESS) {\n\t\t\t\tloaderFailure = [taskIndex, outcome];\n\t\t\t\tawait Promise.all((redirectTasks ?? []).map((nextTask) => {\n\t\t\t\t\tif (nextTask[0] <= taskIndex) return;\n\t\t\t\t\treturn nextTask[1].then((nextOutcome) => {\n\t\t\t\t\t\tif (nextOutcome[0] === REDIRECTED) throw [nextTask[0], nextOutcome];\n\t\t\t\t\t});\n\t\t\t\t}));\n\t\t\t}\n\t\t})));\n\t} catch (cause) {\n\t\treturn cause;\n\t}\n\treturn serialFailure ?? loaderFailure;\n}\nfunction materializeRedirect(router, lane, route, outcome, options, failed) {\n\twhile (outcome[0] === REDIRECTED) {\n\t\tconst redirect = outcome[1];\n\t\tconst redirectOptions = redirect.options;\n\t\tif (redirectOptions.reloadDocument ? options[3] : options[1] >= 20) return outcome;\n\t\ttry {\n\t\t\tif (redirectOptions.href && redirectOptions.reloadDocument) {\n\t\t\t\trouter.resolveRedirect(redirect);\n\t\t\t\treturn outcome;\n\t\t\t}\n\t\t\treturn [\n\t\t\t\tREDIRECTED,\n\t\t\t\tredirect,\n\t\t\t\trouter.buildLocation({\n\t\t\t\t\t...redirectOptions,\n\t\t\t\t\t_fromLocation: lane[0],\n\t\t\t\t\t_includeValidateSearch: true\n\t\t\t\t})\n\t\t\t];\n\t\t} catch (cause) {\n\t\t\toutcome = failed ? [ERROR, cause] : normalizeError(route, cause);\n\t\t\tfailed = true;\n\t\t}\n\t}\n\treturn outcome;\n}\nasync function reduceLane(router, lane, tasks, controller, settlement, onReady) {\n\tconst matches = lane[1];\n\tlet failure = await settlement;\n\tlet redirectLimitExceeded = false;\n\tconst plannedBoundary = matches.findIndex((match) => match._notFound);\n\tconst boundaryOf = (found) => found[1][0] === NOT_FOUND ? getNotFoundBoundary(router, matches, found, controller.signal) : found[0];\n\tlet readinessEnd = plannedBoundary < 0 ? matches.length : plannedBoundary;\n\tif ((failure?.[1][0] ?? 0) >= REDIRECTED) readinessEnd = 0;\n\telse if (failure) {\n\t\treadinessEnd = failure[2] ??= await boundaryOf(failure);\n\t\tfor (const task of tasks) {\n\t\t\tif (task[0] >= readinessEnd) break;\n\t\t\tconst outcome = await task[1];\n\t\t\tif (outcome[0] !== SUCCESS && outcome[0] < REDIRECTED && !(\"loaderData\" in matches[task[0]])) {\n\t\t\t\tfailure = [task[0], outcome];\n\t\t\t\treadinessEnd = failure[2] = await boundaryOf(failure);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tfor (const task of tasks) {\n\t\tif (task[0] >= readinessEnd) break;\n\t\tconst chunkFailure = await task[2];\n\t\tif (!chunkFailure) continue;\n\t\tfailure = chunkFailure;\n\t\tbreak;\n\t}\n\tif ((failure?.[1][0] ?? 0) >= REDIRECTED) {\n\t\tconst outcome = failure[1];\n\t\tif (outcome[0] !== REDIRECTED || outcome[1].options.reloadDocument || outcome[2]) {\n\t\t\tdiscardBackground(router, lane);\n\t\t\treturn outcome;\n\t\t}\n\t\tredirectLimitExceeded = true;\n\t\tfailure = [0, [ERROR, /* @__PURE__ */ new Error(\"Too many redirects\")]];\n\t}\n\tconst boundary = failure ? failure[2] ?? await boundaryOf(failure) : plannedBoundary;\n\tif (boundary >= 0) {\n\t\tconst outcome = failure?.[1];\n\t\tconst kind = outcome?.[0];\n\t\tconst match = matches[boundary];\n\t\tconst cause = outcome?.[1];\n\t\tconst install = () => {\n\t\t\tif (outcome) {\n\t\t\t\tmatch._notFound = void 0;\n\t\t\t\tif (kind === ERROR) match.status = \"error\";\n\t\t\t\telse {\n\t\t\t\t\tcause.routeId = match.routeId;\n\t\t\t\t\tif (match.routeId === router.routeTree.id) {\n\t\t\t\t\t\tmatch.status = \"success\";\n\t\t\t\t\t\tmatch._notFound = true;\n\t\t\t\t\t} else match.status = \"notFound\";\n\t\t\t\t}\n\t\t\t\tmatch.error = cause;\n\t\t\t\tmatch.isFetching = false;\n\t\t\t}\n\t\t};\n\t\tinstall();\n\t\tif (!outcome) onReady?.();\n\t\tconst route = getRoute(router, match);\n\t\ttry {\n\t\t\tawait waitFor(outcome ? Promise.resolve().then(() => loadRouteChunk(route, kind === ERROR ? \"errorComponent\" : \"notFoundComponent\")) : Promise.all([loadRouteChunk(route), loadRouteChunk(route, \"notFoundComponent\")]), controller.signal);\n\t\t} catch (cause) {\n\t\t\tif (cause === controller.signal && controller.signal.aborted) {\n\t\t\t\tdiscardBackground(router, lane);\n\t\t\t\treturn CANCELED_OUTCOME;\n\t\t\t}\n\t\t}\n\t\tif (!outcome) match.status = \"success\";\n\t\telse if (redirectLimitExceeded) {\n\t\t\tcontroller.abort();\n\t\t\tawait Promise.all([\n\t\t\t\t...tasks.map((task) => task[1]),\n\t\t\t\t...tasks.map((task) => task[2]),\n\t\t\t\t...(lane[2] ?? []).map((task) => task[1])\n\t\t\t]);\n\t\t\tdiscardBackground(router, lane);\n\t\t\ttransferMatchResources(router, matches);\n\t\t\tinstall();\n\t\t}\n\t}\n\treturn lane;\n}\nasync function projectLane(router, lane, signal, start = 0, end = lane[1].length) {\n\tconst matches = lane[1];\n\tfor (let index = start; index < end; index++) {\n\t\tconst match = matches[index];\n\t\tconst routeOptions = getRoute(router, match).options;\n\t\tif (routeOptions.head || routeOptions.scripts) try {\n\t\t\tconst context = {\n\t\t\t\tssr: router.options.ssr,\n\t\t\t\tmatches,\n\t\t\t\tmatch,\n\t\t\t\tparams: match.params,\n\t\t\t\tloaderData: match.loaderData\n\t\t\t};\n\t\t\tconst [head, scripts] = await waitFor(Promise.all([routeOptions.head?.(context), routeOptions.scripts?.(context)]), signal);\n\t\t\tmatch.meta = head?.meta;\n\t\t\tmatch.links = head?.links;\n\t\t\tmatch.headScripts = head?.scripts;\n\t\t\tmatch.styles = head?.styles;\n\t\t\tmatch.scripts = scripts;\n\t\t} catch (cause) {\n\t\t\tif (cause === signal && signal.aborted) break;\n\t\t\tconsole.error(cause);\n\t\t}\n\t\tif (match.status !== \"success\" || match._notFound) break;\n\t}\n\treturn lane;\n}\nasync function executeClientLane(router, location, matches, options) {\n\tconst matched = [location, matches];\n\tconst signal = options[0].signal;\n\tlet reduced;\n\ttry {\n\t\tconst presented = router.stores.matches.get();\n\t\tlet plannedBoundary = matches.findIndex((match) => match._notFound);\n\t\tif (router.options.notFoundMode !== \"root\" && plannedBoundary >= 0) {\n\t\t\tconst boundary = await getNotFoundBoundary(router, matches, void 0, signal, plannedBoundary);\n\t\t\tmatches[plannedBoundary]._notFound = void 0;\n\t\t\tmatches[boundary]._notFound = true;\n\t\t\tplannedBoundary = boundary;\n\t\t}\n\t\tlet end = plannedBoundary < 0 ? matches.length : plannedBoundary + 1;\n\t\tlet retainedEnd = 0;\n\t\twhile (retainedEnd < end && retainedEnd !== plannedBoundary) {\n\t\t\tconst match = matches[retainedEnd];\n\t\t\tconst committed = options[2][retainedEnd];\n\t\t\tconst visible = presented[retainedEnd];\n\t\t\tif (committed?.id !== match.id || committed.status !== \"success\" || committed._notFound || match.preload || visible?.id !== match.id || visible.status !== \"success\" || visible._notFound) break;\n\t\t\tretainedEnd++;\n\t\t}\n\t\tconst tasks = [];\n\t\tconst start = options[6] ?? 0;\n\t\tlet semanticParent = start ? Promise.resolve(matches[start - 1]) : void 0;\n\t\tconst planSuccessfulLane = () => {\n\t\t\tfor (let index = start; index < end; index++) {\n\t\t\t\tif (signal.aborted) break;\n\t\t\t\tsemanticParent = createLoaderTask(router, matched, index, tasks, semanticParent, options, retainedEnd);\n\t\t\t}\n\t\t};\n\t\tconst failure = await contextualize(router, matched, options, end, planSuccessfulLane, retainedEnd);\n\t\tif (failure) {\n\t\t\toptions[4] = true;\n\t\t\tend = failure[0];\n\t\t\tif (failure[1][0] === NOT_FOUND) {\n\t\t\t\tconst boundary = await getNotFoundBoundary(router, matches, failure, signal);\n\t\t\t\tfailure[2] = boundary;\n\t\t\t\tend = Math.min(end, boundary + 1);\n\t\t\t} else if (failure[1][0] >= REDIRECTED) end = 0;\n\t\t\tplanSuccessfulLane();\n\t\t}\n\t\tif (!signal.aborted && !options[3]) {\n\t\t\tconst abort = [];\n\t\t\tfor (const [id, flight] of router._flights ?? []) if (!flight[2]) {\n\t\t\t\trouter._flights.delete(id);\n\t\t\t\tabort.push(flight[1]);\n\t\t\t}\n\t\t\tfor (const controller of abort) controller.abort();\n\t\t}\n\t\tconst reduction = reduceLane(router, matched, tasks, options[0], settleTasks(tasks, failure, matched[2]), options[7]);\n\t\tif (matched[2]?.length) matched[3] = settleTasks(matched[2], void 0, void 0, reduction.then((foreground) => isControl(foreground) ? 0 : _getRenderedMatches(matches).length, () => 0));\n\t\treduced = await reduction;\n\t} catch (cause) {\n\t\tdiscardBackground(router, matched);\n\t\tif (cause === signal && signal.aborted) return CANCELED_OUTCOME;\n\t\tthrow cause;\n\t}\n\tif (isControl(reduced)) return reduced;\n\treturn projectLane(router, reduced, signal, options[6] === matches.length ? options[6] : 0);\n}\n/**\n* Waits for `pendingMs`, then presents the complete lane. Rendering applies the\n* selected boundary cutoff while retaining every match's structural state.\n* A replacement load for the same match keeps the timer; choosing a different\n* match resets it. `pendingMinMs` starts after the fallback renders.\n*/\nfunction offerPending(router, tx) {\n\tif (router._tx !== tx) return;\n\tconst matches = tx[3];\n\tconst presented = router.stores.matches.get();\n\tlet session = router._pending;\n\tfor (let index = 0; index < matches.length; index++) {\n\t\tconst match = matches[index];\n\t\tconst success = match.status === \"success\" && !match._notFound;\n\t\tconst presentedPending = presented[index]?.id === match.id && presented[index]?.status === \"pending\";\n\t\tif (success && !presentedPending) continue;\n\t\tconst route = getRoute(router, match);\n\t\tconst delay = success || match.invalid ? 0 : route.options.pendingMs ?? router.options.defaultPendingMs;\n\t\tconst component = route.options.pendingComponent ?? router.options.defaultPendingComponent;\n\t\tif (!component || typeof delay !== \"number\" || delay === Infinity) {\n\t\t\tif (session) {\n\t\t\t\tsession[0] = tx;\n\t\t\t\tsession[2] = 0;\n\t\t\t\tsession[4] = true;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst min = route.options.pendingMinMs ?? router.options.defaultPendingMinMs ?? 0;\n\t\tlet tookOver = false;\n\t\tif (session?.[1] === match.id) {\n\t\t\ttookOver = session[0] !== tx;\n\t\t\tsession[0] = tx;\n\t\t} else {\n\t\t\tclearTimeout(session?.[3]);\n\t\t\trouter._pending = session = void 0;\n\t\t}\n\t\tif (!session) router._pending = session = [\n\t\t\ttx,\n\t\t\tmatch.id,\n\t\t\tpresentedPending ? Date.now() + min : tx[4] + delay,\n\t\t\tvoid 0,\n\t\t\tpresentedPending || void 0,\n\t\t\tcomponent\n\t\t];\n\t\tif (session[4] && !tookOver && session[5] === component) return;\n\t\tsession[5] = component;\n\t\tif (!session[4]) {\n\t\t\tclearTimeout(session[3]);\n\t\t\tconst remaining = session[2] - Date.now();\n\t\t\tif (remaining > 0) {\n\t\t\t\tsession[3] = setTimeout(() => offerPending(router, tx), remaining);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsession[2] = 0;\n\t\t}\n\t\tconst offered = matches.map((match) => ({\n\t\t\t...match,\n\t\t\t_flight: void 0\n\t\t}));\n\t\toffered[index].status = \"pending\";\n\t\tconst ack = session[4] = router.startTransition(() => router.stores.setMatches(offered), offered).then((rendered) => {\n\t\t\tif (rendered && router._pending === session && session[4] === ack && !session[2]) session[2] = Date.now() + min;\n\t\t\treturn rendered;\n\t\t});\n\t\treturn;\n\t}\n}\n/**\n* Cancels pending UI timing unless the current successor can take over the\n* same boundary that remains painted.\n*/\nfunction finishPending(router, tx) {\n\tconst session = router._pending;\n\tif (router._tx === tx || !router._tx?.[3].some((match) => match.id === session?.[1])) {\n\t\tclearTimeout(session?.[3]);\n\t\trouter._pending = void 0;\n\t}\n}\nasync function awaitPendingMinimum(router, tx) {\n\tconst session = router._pending;\n\tif (!session) return;\n\tclearTimeout(session[3]);\n\tconst remaining = session[2] - Date.now();\n\tif (!session[4] || remaining <= 0 || !_getRenderedMatches(tx[3]).some((match) => match.id === session[1])) return;\n\tlet timer;\n\ttry {\n\t\tawait waitFor(new Promise((resolve) => {\n\t\t\ttimer = setTimeout(resolve, remaining);\n\t\t}), tx[0].signal);\n\t} catch {}\n\tclearTimeout(timer);\n}\nfunction publishMatches(router, matches) {\n\trouter._committed = matches;\n\trouter.stores.setMatches(matches);\n}\nfunction commitMatches(router, tx, matches, resolvedPrefix) {\n\tconst previous = router._committed;\n\tconst previousCached = router._cache;\n\tfor (const match of matches) {\n\t\tmatch.preload = false;\n\t\tif (resolvedPrefix) match._assetEnd = void 0;\n\t}\n\tconst cut = _getRenderedMatches(matches).length;\n\tconst cached = /* @__PURE__ */ new Map();\n\tif (process.env.NODE_ENV === \"production\" || !tx[6]) {\n\t\tconst now = Date.now();\n\t\tfor (const match of [...previous, ...previousCached.values()]) {\n\t\t\tif (match.status !== \"success\" || matches.some((candidate, index) => candidate.id === match.id && (index < cut || candidate.status === \"success\"))) continue;\n\t\t\tconst route = getRoute(router, match);\n\t\t\tif (!route.options.loader || now - match.updatedAt >= (match.preload ? route.options.preloadGcTime ?? router.options.defaultPreloadGcTime ?? 3e5 : route.options.gcTime ?? router.options.defaultGcTime ?? 3e5)) continue;\n\t\t\tcached.set(match.id, previousCached.get(match.id) === match ? match : {\n\t\t\t\t...match,\n\t\t\t\t_flight: void 0,\n\t\t\t\tisFetching: false,\n\t\t\t\tcontext: {}\n\t\t\t});\n\t\t}\n\t}\n\ttx[3] = [];\n\trouter._cache = cached;\n\tpublishMatches(router, matches);\n\ttransferMatchResources(router, [...previousCached.values(), ...previous], [...matches, ...cached.values()]);\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst handoff = tx[6]?.[0];\n\t\tif (handoff && router._handoff === handoff) handoff[1]();\n\t}\n\trunRouteLifecycle(router, previous, matches, tx);\n}\nasync function awaitCurrent(router, owner) {\n\tlet current = router._tx;\n\twhile (current && current !== owner) {\n\t\tawait current[5];\n\t\tif (router._tx === current) return;\n\t\tcurrent = router._tx;\n\t}\n}\nfunction followRedirect(router, tx, outcome) {\n\tconst options = outcome[1].options;\n\tconst location = outcome[2];\n\tif (!location) return router.navigate({\n\t\t...options,\n\t\treplace: true,\n\t\tignoreBlocker: true\n\t});\n\tif (options.reloadDocument) return router.navigate({\n\t\thref: location.publicHref,\n\t\treloadDocument: true,\n\t\treplace: true,\n\t\tignoreBlocker: true\n\t});\n\tlocation._redirects = tx[1] + 1;\n\trouter._pendingLocation = location;\n\tconst committed = router.commitLocation({\n\t\t...location,\n\t\tviewTransition: options.viewTransition,\n\t\treplace: true,\n\t\tresetScroll: options.resetScroll,\n\t\thashScrollIntoView: options.hashScrollIntoView,\n\t\tignoreBlocker: true\n\t});\n\tqueueMicrotask(() => {\n\t\tif (router._pendingLocation === location) router._pendingLocation = void 0;\n\t});\n\treturn committed;\n}\nasync function runBackground(router, tx, base, tasks, settlement) {\n\tconst next = base.map((match) => ({ ...match }));\n\tacquireMatchResources(next);\n\tfor (const task of tasks) {\n\t\treleaseFlight(router, next[task[0]]);\n\t\tnext[task[0]] = task[3];\n\t}\n\tconst lane = [tx[2], next];\n\tlet reduced;\n\ttry {\n\t\treduced = await reduceLane(router, lane, tasks, tx[0], settlement);\n\t} catch (cause) {\n\t\ttransferMatchResources(router, next);\n\t\tthrow cause;\n\t}\n\tif (isControl(reduced)) {\n\t\ttransferMatchResources(router, next);\n\t\tif (reduced[0] === REDIRECTED && router._tx === tx && router._committed === base) await followRedirect(router, tx, reduced);\n\t\treturn;\n\t}\n\tawait projectLane(router, reduced, tx[0].signal);\n\tif (router._tx !== tx || router._committed !== base) {\n\t\ttransferMatchResources(router, next);\n\t\treturn;\n\t}\n\tfor (const match of next) {\n\t\tconst cached = router._cache.get(match.id);\n\t\tif (cached?._flight && cached._flight === match._flight) {\n\t\t\trouter._cache.delete(match.id);\n\t\t\treleaseFlight(router, cached);\n\t\t}\n\t}\n\tpublishMatches(router, next);\n\ttransferMatchResources(router, base, next);\n}\nasync function runClientTransaction(router, tx, forceStaleReload, onReady, sync, resolvedPrefix) {\n\tconst result = await executeClientLane(router, tx[2], tx[3], [\n\t\ttx[0],\n\t\ttx[1],\n\t\trouter._committed,\n\t\tvoid 0,\n\t\tsync,\n\t\tforceStaleReload,\n\t\tresolvedPrefix,\n\t\tonReady\n\t]);\n\tif (isControl(result)) {\n\t\tconst follow = result[0] === REDIRECTED && router._tx === tx;\n\t\tif (!follow || result[1].options.reloadDocument) finishPending(router, tx);\n\t\ttransferMatchResources(router, tx[3]);\n\t\ttx[3] = [];\n\t\tif (!follow) return;\n\t\tif (router._tx !== tx) {\n\t\t\tfinishPending(router, tx);\n\t\t\treturn;\n\t\t}\n\t\tif (process.env.NODE_ENV !== \"production\" && tx[6]) router._refreshNextLoad = true;\n\t\tawait followRedirect(router, tx, result);\n\t\treturn;\n\t}\n\tconst matches = result[1];\n\tif (router._tx === tx) await awaitPendingMinimum(router, tx);\n\tif (router._tx !== tx) {\n\t\tfinishPending(router, tx);\n\t\ttransferMatchResources(router, matches);\n\t\tdiscardBackground(router, result);\n\t\treturn;\n\t}\n\tconst toLocation = tx[2];\n\tconst changeInfo = getLocationChangeInfo(toLocation, router.stores.resolvedLocation.get());\n\tconst background = result[2];\n\tawait router.startViewTransition(async () => {\n\t\tif (router._tx === tx) await awaitPendingMinimum(router, tx);\n\t\tif (router._tx !== tx) {\n\t\t\tfinishPending(router, tx);\n\t\t\ttransferMatchResources(router, matches);\n\t\t\tdiscardBackground(router, result);\n\t\t\treturn;\n\t\t}\n\t\tconst commit = () => {\n\t\t\tfinishPending(router, tx);\n\t\t\tcommitMatches(router, tx, matches, resolvedPrefix);\n\t\t\tif (router._tx !== tx) return;\n\t\t\trouter.emit({\n\t\t\t\ttype: \"onLoad\",\n\t\t\t\t...changeInfo\n\t\t\t});\n\t\t\tif (router._tx === tx) router.emit({\n\t\t\t\ttype: \"onBeforeRouteMount\",\n\t\t\t\t...changeInfo\n\t\t\t});\n\t\t};\n\t\tconst rendered = await router.startTransition(commit, matches);\n\t\tif (process.env.NODE_ENV !== \"production\" && tx[6]) tx[6] = void 0;\n\t\tif (router._tx !== tx) {\n\t\t\tdiscardBackground(router, result);\n\t\t\treturn;\n\t\t}\n\t\tif (background?.length) runBackground(router, tx, matches, background, result[3]).catch(console.error);\n\t\trouter.batch(() => {\n\t\t\trouter.stores.resolvedLocation.set(toLocation);\n\t\t\trouter.stores.status.set(\"idle\");\n\t\t\tif (router._tx === tx) router.emit({\n\t\t\t\ttype: \"onResolved\",\n\t\t\t\t...changeInfo\n\t\t\t});\n\t\t\tif (rendered && router._tx === tx) router.emit({\n\t\t\t\ttype: \"onRendered\",\n\t\t\t\t...changeInfo\n\t\t\t});\n\t\t});\n\t\tif (router._tx !== tx) return;\n\t\trouter._commitPromise?.resolve();\n\t\trouter._commitPromise = void 0;\n\t});\n}\nasync function loadClientRoute(router, opts) {\n\tlet rematerialize = false;\n\tif (process.env.NODE_ENV !== \"production\") rematerialize = !!router._refreshNextLoad || !!router._tx?.[6];\n\tconst previousOwner = router._tx;\n\tconst resolvedLocation = router.stores.resolvedLocation.get();\n\tconst previousLocation = resolvedLocation ?? router.stores.location.get();\n\tconst location = router.latestLocation;\n\tconst pendingLocation = router._pendingLocation;\n\tconst redirects = pendingLocation?.href === location.href ? pendingLocation._redirects ?? 0 : 0;\n\tconst handoff = router._handoff;\n\tconst hydrationController = rematerialize ? void 0 : handoff?.[0]();\n\tconst preflight = new AbortController();\n\tconst previousPreflight = router._preflight;\n\trouter._preflight = preflight;\n\tif (!rematerialize && !hydrationController) handoff?.[1]();\n\tpreviousPreflight?.abort();\n\tif (!preflight.signal.aborted) {\n\t\tconst changeInfo = getLocationChangeInfo(location, resolvedLocation);\n\t\trouter.emit({\n\t\t\ttype: \"onBeforeNavigate\",\n\t\t\t...changeInfo\n\t\t});\n\t\tif (!preflight.signal.aborted) router.emit({\n\t\t\ttype: \"onBeforeLoad\",\n\t\t\t...changeInfo\n\t\t});\n\t}\n\tif (preflight.signal.aborted) {\n\t\tawait awaitCurrent(router, previousOwner);\n\t\treturn;\n\t}\n\tconst sameHref = previousLocation.href === location.href;\n\tlet controller = preflight;\n\tconst matches = process.env.NODE_ENV !== \"production\" && rematerialize ? router.matchRoutes(location, {\n\t\t_controller: preflight,\n\t\t_rematerialize: true\n\t}) : router.matchRoutes(location, { _controller: preflight });\n\tacquireMatchResources(matches);\n\tconst resolvedPrefix = hydrationController ? handoff[1](matches) : void 0;\n\tif (resolvedPrefix) controller = hydrationController;\n\telse hydrationController?.abort();\n\tif (preflight.signal.aborted) {\n\t\ttransferMatchResources(router, matches);\n\t\tawait awaitCurrent(router, previousOwner);\n\t\treturn;\n\t}\n\trouter._preflight = void 0;\n\tlet settle;\n\tconst run = () => runClientTransaction(router, tx, sameHref, () => offerPending(router, tx), opts?.sync, resolvedPrefix);\n\tconst done = opts?.sync ? new Promise((resolve) => settle = resolve) : Promise.resolve().then(run).then();\n\tconst tx = [\n\t\tcontroller,\n\t\tredirects,\n\t\tlocation,\n\t\tmatches,\n\t\tDate.now(),\n\t\tdone\n\t];\n\tif (process.env.NODE_ENV !== \"production\" && rematerialize) {\n\t\ttx[6] = [handoff];\n\t\trouter._refreshNextLoad = void 0;\n\t}\n\trouter._tx = tx;\n\tif (previousOwner) {\n\t\tfor (const match of router.stores.matches.get()) {\n\t\t\tif (router._tx !== tx) break;\n\t\t\tif (match.isFetching) setFetching(router, match, false);\n\t\t}\n\t\tpreviousOwner[0].abort();\n\t\ttransferMatchResources(router, previousOwner[3], tx[3], true);\n\t}\n\tif (router._tx !== tx) {\n\t\ttransferMatchResources(router, tx[3]);\n\t\ttx[3] = [];\n\t\tsettle?.();\n\t\tawait awaitCurrent(router, tx);\n\t\treturn;\n\t}\n\trouter.batch(() => {\n\t\trouter.stores.status.set(\"pending\");\n\t\trouter.stores.location.set(location);\n\t});\n\tif (resolvedPrefix || !router._committed.length && matches[0]?.status !== \"success\" && !matches.some((match) => match._notFound)) offerPending(router, tx);\n\tsettle?.(run());\n\tawait done;\n\tawait awaitCurrent(router, tx);\n}\nasync function refreshClientRoute(router) {\n\tconst pending = router._tx;\n\tif (pending && !pending[6] && router.stores.status.get() === \"pending\") {\n\t\tawait pending[5];\n\t\tif (router._tx !== pending) await awaitCurrent(router, pending);\n\t}\n\trouter._flights?.clear();\n\trouter.clearCache();\n\trouter._refreshNextLoad = true;\n\tawait loadClientRoute(router, { sync: true });\n}\nasync function preloadClientRoute(router, opts) {\n\tif (process.env.NODE_ENV !== \"production\" && (router._refreshNextLoad || router._tx?.[6])) return;\n\tlet location = router.buildLocation(opts);\n\tfor (let redirects = 0;; redirects++) {\n\t\tconst base = router._committed;\n\t\tconst controller = new AbortController();\n\t\tlet matches;\n\t\tlet active;\n\t\tlet result;\n\t\ttry {\n\t\t\ttry {\n\t\t\t\tmatches = router.matchRoutes(location, { _controller: controller });\n\t\t\t\tacquireMatchResources(matches);\n\t\t\t\tactive = (router._preloads ??= /* @__PURE__ */ new Map()).set(controller, matches);\n\t\t\t\tresult = await executeClientLane(router, location, matches, [\n\t\t\t\t\tcontroller,\n\t\t\t\t\tredirects,\n\t\t\t\t\tbase,\n\t\t\t\t\ttrue\n\t\t\t\t]);\n\t\t\t} finally {\n\t\t\t\tif (active) {\n\t\t\t\t\tactive = active.delete(controller);\n\t\t\t\t\ttransferMatchResources(router, matches);\n\t\t\t\t}\n\t\t\t\tcontroller.abort();\n\t\t\t}\n\t\t\tif (!isControl(result)) return result[1];\n\t\t\tif (!active || result.length < 3 || process.env.NODE_ENV !== \"production\" && (router._refreshNextLoad || router._tx?.[6])) return;\n\t\t\tlocation = result[2];\n\t\t} catch (cause) {\n\t\t\tif (!isNotFound(cause)) console.error(cause);\n\t\t\treturn;\n\t\t}\n\t}\n}\nasync function hydrate(router) {\n\tif (process.env.NODE_ENV !== \"production\" && !window.$_TSR) throw new Error(\"Invariant failed: Expected to find bootstrap data on window.$_TSR, but we did not. Please file an issue!\");\n\tconst tsr = window.$_TSR;\n\tconst adapters = router.options.serializationAdapters;\n\tif (adapters?.length) {\n\t\ttsr.t = new Map(adapters.map((adapter) => [adapter.key, adapter.fromSerializable]));\n\t\ttsr.buffer.forEach((script) => script());\n\t}\n\ttsr.initialized = true;\n\tconst dehydratedRouter = tsr.router;\n\tif (process.env.NODE_ENV !== \"production\" && !dehydratedRouter) throw new Error(\"Invariant failed: Expected to find a dehydrated data on window.$_TSR.router, but we did not. Please file an issue!\");\n\trouter.ssr = { manifest: dehydratedRouter.manifest };\n\trouter.options.ssr = { nonce: document.querySelector(\"meta[property=\\\"csp-nonce\\\"]\")?.content };\n\tconst dehydratedMatches = dehydratedRouter.matches;\n\tconst controller = new AbortController();\n\tconst previousPreflight = router._preflight;\n\trouter._preflight = controller;\n\tpreviousPreflight?.abort();\n\tconst isCurrent = () => router._preflight === controller;\n\tlet location;\n\tlet candidates;\n\tlet handoffHistoryHref;\n\tlet handoffHistoryState;\n\ttry {\n\t\tawait waitFor(router.options.hydrate?.(dehydratedRouter.dehydratedData), controller.signal);\n\t\tif (!isCurrent()) return;\n\t\tconst historyLocation = router.history.location;\n\t\thandoffHistoryHref = historyLocation.href;\n\t\thandoffHistoryState = historyLocation.state;\n\t\trouter.updateLatestLocation();\n\t\tlocation = router.latestLocation;\n\t\trouter.stores.location.set(location);\n\t\tcandidates = router.matchRoutes(location, { _controller: controller });\n\t} catch (cause) {\n\t\tif (isCurrent()) router._preflight = void 0;\n\t\tcontroller.abort(cause);\n\t\tif (cause !== controller.signal) throw cause;\n\t}\n\tif (!isCurrent()) return;\n\tconst committed = [];\n\tlet pendingBoundary;\n\tlet verifiedAssetEnd = 0;\n\tconst retryFrom = (index) => {\n\t\tverifiedAssetEnd = Math.min(verifiedAssetEnd, index + 1);\n\t\tconst removed = committed.splice(index);\n\t\tfor (const match of removed) if (getRoute(router, match).options.loader && (match.status === \"success\" || !match.invalid && \"loaderData\" in match)) cacheLoaderMatch(router, {\n\t\t\t...match,\n\t\t\tstatus: \"success\",\n\t\t\terror: void 0,\n\t\t\tpreload: true\n\t\t}, router._cache.get(match.id));\n\t\ttransferMatchResources(router, removed);\n\t};\n\tconst shared = dehydratedMatches.length > candidates.length ? candidates.findIndex((match) => match._notFound) + 1 : dehydratedMatches.length;\n\tlet isTerminal = false;\n\tfor (let index = 0; index < shared; index++) {\n\t\tconst candidate = candidates[index];\n\t\tconst dehydrated = dehydratedMatches[index];\n\t\tif (typeof dehydrated.i !== \"string\" || hydrateSsrMatchId(dehydrated.i) !== candidate.id) {\n\t\t\tpendingBoundary ??= index;\n\t\t\tbreak;\n\t\t}\n\t\tverifiedAssetEnd = index + 1;\n\t\tconst route = getRoute(router, candidate);\n\t\tif (\"l\" in dehydrated || dehydrated.s === \"success\" && dehydrated.e === void 0 && route.options.loader) candidate.loaderData = dehydrated.l;\n\t\tcandidate.status = dehydrated.s;\n\t\tcandidate.ssr = dehydrated.ssr;\n\t\troute.options.ssr = candidate.ssr;\n\t\tcandidate.updatedAt = dehydrated.u;\n\t\tcandidate.error = dehydrated.e;\n\t\tcandidate._notFound ||= dehydrated.g;\n\t\tif (candidate.status === \"error\" || candidate.status === \"notFound\" || candidate._notFound) {\n\t\t\tisTerminal = true;\n\t\t\tcommitted.push(candidate);\n\t\t\tif (candidate.ssr === false || candidate.ssr === \"data-only\") pendingBoundary ??= index;\n\t\t\tbreak;\n\t\t}\n\t\tif (candidate.status === \"pending\") {\n\t\t\tpendingBoundary ??= index;\n\t\t\tbreak;\n\t\t}\n\t\tcommitted.push(candidate);\n\t\tif (candidate.ssr === \"data-only\") pendingBoundary ??= index;\n\t}\n\tif (!isTerminal && committed.length === shared && shared < candidates.length) pendingBoundary = shared;\n\tconst chunks = committed.map(async (match) => {\n\t\ttry {\n\t\t\tconst route = getRoute(router, match);\n\t\t\tawait (match._notFound ? Promise.all([loadRouteChunk(route), loadRouteChunk(route, \"notFoundComponent\")]) : loadRouteChunk(route, match.status === \"error\" ? \"errorComponent\" : match.status === \"notFound\" ? \"notFoundComponent\" : void 0));\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t});\n\tlet chunkFailure = 0;\n\ttry {\n\t\twhile (chunkFailure < chunks.length && await waitFor(chunks[chunkFailure], controller.signal)) chunkFailure++;\n\t} catch {\n\t\treturn;\n\t}\n\tif (!isCurrent()) return;\n\tif (chunkFailure < committed.length) retryFrom(chunkFailure);\n\tconst contextEnd = Math.max(pendingBoundary === committed.length ? committed.length + 1 : committed.length, chunkFailure < chunks.length ? chunkFailure : verifiedAssetEnd);\n\tfor (let index = 0; index < contextEnd; index++) {\n\t\tconst match = candidates[index];\n\t\tconst route = getRoute(router, match);\n\t\tconst parentContext = candidates[index - 1]?.context ?? router.options.context ?? {};\n\t\tlet routeContext;\n\t\tif (route.options.context) {\n\t\t\ttry {\n\t\t\t\trouteContext = match._ctx = route.options.context({\n\t\t\t\t\tdeps: match.loaderDeps,\n\t\t\t\t\tparams: match.params,\n\t\t\t\t\tcontext: parentContext,\n\t\t\t\t\tlocation,\n\t\t\t\t\tnavigate: (opts) => router.navigate({\n\t\t\t\t\t\t...opts,\n\t\t\t\t\t\t_fromLocation: location\n\t\t\t\t\t}),\n\t\t\t\t\tbuildLocation: router.buildLocation,\n\t\t\t\t\tcause: match.cause,\n\t\t\t\t\tabortController: controller,\n\t\t\t\t\tpreload: false,\n\t\t\t\t\tmatches: candidates,\n\t\t\t\t\trouteId: route.id\n\t\t\t\t}) || {};\n\t\t\t} catch {\n\t\t\t\tif (!isCurrent()) return;\n\t\t\t\tif (match.status !== \"error\" && match.status !== \"notFound\" && !match._notFound) {\n\t\t\t\t\tpendingBoundary = Math.min(pendingBoundary ?? index, index);\n\t\t\t\t\tretryFrom(index);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!isCurrent()) return;\n\t\t}\n\t\tmatch.context = {\n\t\t\t...parentContext,\n\t\t\t...routeContext,\n\t\t\t...committed[index] && dehydratedMatches[index].b\n\t\t};\n\t}\n\tawait projectLane(router, [location, candidates], controller.signal, 0, verifiedAssetEnd);\n\tif (!isCurrent()) return;\n\tconst needsClientLoad = pendingBoundary !== void 0 || committed.length < shared;\n\tconst committedMatches = isTerminal && committed.length === shared ? candidates : committed;\n\tlet presented = needsClientLoad ? candidates : committedMatches;\n\tlet dataOnlyAssetEnd;\n\tif (needsClientLoad && pendingBoundary !== void 0) {\n\t\tconst boundary = presented[pendingBoundary];\n\t\tdataOnlyAssetEnd = boundary.ssr === \"data-only\" && verifiedAssetEnd > pendingBoundary + 1 ? verifiedAssetEnd : void 0;\n\t\tpresented = presented.slice();\n\t\tpresented[pendingBoundary] = {\n\t\t\t...boundary,\n\t\t\tstatus: \"pending\",\n\t\t\tssr: boundary.ssr === \"data-only\" ? \"data-only\" : false,\n\t\t\t_assetEnd: dataOnlyAssetEnd\n\t\t};\n\t}\n\tconst claim = () => {\n\t\tconst historyLocation = router.history.location;\n\t\treturn needsClientLoad && !router._tx && historyLocation.href === handoffHistoryHref && historyLocation.state === handoffHistoryState && router._committed === committedMatches && committedMatches.length && !controller.signal.aborted ? controller : void 0;\n\t};\n\tconst handoff = [claim, (matches) => {\n\t\tif (router._handoff !== handoff) return;\n\t\trouter._handoff = void 0;\n\t\tconst prefix = committedMatches.length;\n\t\tif (!matches || !claim() || committedMatches.some((match, index) => match.id !== matches[index]?.id)) {\n\t\t\tcontroller.abort();\n\t\t\treturn;\n\t\t}\n\t\tlet handoffAssetEnd = dataOnlyAssetEnd;\n\t\tif (handoffAssetEnd !== void 0) {\n\t\t\tfor (let index = prefix; index < handoffAssetEnd; index++) if (candidates[index]?.id !== matches[index]?.id) {\n\t\t\t\thandoffAssetEnd = index > pendingBoundary + 1 ? index : void 0;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst clones = committedMatches.map((match) => ({ ...match }));\n\t\tif (handoffAssetEnd !== void 0) clones[pendingBoundary]._assetEnd = handoffAssetEnd;\n\t\ttransferMatchResources(router, matches.splice(0, prefix, ...clones));\n\t\tfor (let index = prefix; index < matches.length; index++) {\n\t\t\tconst match = matches[index];\n\t\t\tconst hydrated = candidates[index];\n\t\t\tif (hydrated?.id === match.id && hydrated._ctx) match._ctx = hydrated._ctx;\n\t\t\tmatch.abortController = controller;\n\t\t}\n\t\treturn prefix;\n\t}];\n\trouter._committed = committedMatches;\n\trouter._handoff = handoff;\n\trouter._preflight = void 0;\n\trouter.batch(() => {\n\t\trouter.stores.setMatches(presented);\n\t\trouter.stores.status.set(\"idle\");\n\t\tif (!needsClientLoad) router.stores.resolvedLocation.set(router.stores.location.get());\n\t});\n}\n//#endregion\nexport { _getAssetMatches, _getRenderedMatches, hydrate, loadClientRoute, loadRouteChunk, preloadClientRoute, refreshClientRoute, replaceRouteChunk };\n\n//# sourceMappingURL=load-client.js.map","//#region src/link.ts\nconst preloadWarning = \"Error preloading route! ☝️\";\n//#endregion\nexport { preloadWarning };\n\n//# sourceMappingURL=link.js.map","import { invariant } from \"./invariant.js\";\nimport { joinPaths, trimPathLeft, trimPathRight } from \"./path.js\";\nimport { notFound } from \"./not-found.js\";\nimport { rootRouteId } from \"./root.js\";\nimport { redirect } from \"./redirect.js\";\n//#region src/route.ts\nvar BaseRoute = class {\n\tget to() {\n\t\treturn this._to;\n\t}\n\tget id() {\n\t\treturn this._id;\n\t}\n\tget path() {\n\t\treturn this._path;\n\t}\n\tget fullPath() {\n\t\treturn this._fullPath;\n\t}\n\tconstructor(options) {\n\t\tthis.init = (opts) => {\n\t\t\tthis.originalIndex = opts.originalIndex;\n\t\t\tconst options = this.options;\n\t\t\tconst isRoot = !options?.path && !options?.id;\n\t\t\tthis.parentRoute = this.options.getParentRoute?.();\n\t\t\tif (isRoot) this._path = rootRouteId;\n\t\t\telse if (!this.parentRoute) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Child Route instances must pass a 'getParentRoute: () => ParentRoute' option that returns a Route instance.`);\n\t\t\t\tinvariant();\n\t\t\t}\n\t\t\tlet path = isRoot ? rootRouteId : options?.path;\n\t\t\tif (path && path !== \"/\") path = trimPathLeft(path);\n\t\t\tconst customId = options?.id || path;\n\t\t\tlet id = isRoot ? rootRouteId : joinPaths([this.parentRoute.id === \"__root__\" ? \"\" : this.parentRoute.id, customId]);\n\t\t\tif (path === \"__root__\") path = \"/\";\n\t\t\tif (id !== \"__root__\") id = joinPaths([\"/\", id]);\n\t\t\tconst fullPath = id === \"__root__\" ? \"/\" : joinPaths([this.parentRoute.fullPath, path]);\n\t\t\tthis._path = path;\n\t\t\tthis._id = id;\n\t\t\tthis._fullPath = fullPath;\n\t\t\tthis._to = trimPathRight(fullPath);\n\t\t};\n\t\tthis.addChildren = (children) => {\n\t\t\treturn this._addFileChildren(children);\n\t\t};\n\t\tthis._addFileChildren = (children) => {\n\t\t\tif (Array.isArray(children)) this.children = children;\n\t\t\tif (typeof children === \"object\" && children !== null) this.children = Object.values(children);\n\t\t\treturn this;\n\t\t};\n\t\tthis._addFileTypes = () => {\n\t\t\treturn this;\n\t\t};\n\t\tthis.updateLoader = (options) => {\n\t\t\tObject.assign(this.options, options);\n\t\t\treturn this;\n\t\t};\n\t\tthis.update = (options) => {\n\t\t\tObject.assign(this.options, options);\n\t\t\treturn this;\n\t\t};\n\t\tthis.lazy = (lazyFn) => {\n\t\t\tthis.lazyFn = lazyFn;\n\t\t\treturn this;\n\t\t};\n\t\tthis.redirect = (opts) => redirect({\n\t\t\tfrom: this.fullPath,\n\t\t\t...opts\n\t\t});\n\t\tthis.options = options || {};\n\t\tthis.isRoot = !options?.getParentRoute;\n\t\tif (options?.id && options?.path) throw new Error(`Route cannot have both an 'id' and a 'path' option.`);\n\t}\n};\nvar BaseRouteApi = class {\n\tconstructor({ id }) {\n\t\tthis.notFound = (opts) => {\n\t\t\treturn notFound({\n\t\t\t\trouteId: this.id,\n\t\t\t\t...opts\n\t\t\t});\n\t\t};\n\t\tthis.redirect = (opts) => redirect({\n\t\t\tfrom: this.id,\n\t\t\t...opts\n\t\t});\n\t\tthis.id = id;\n\t}\n};\nvar BaseRootRoute = class extends BaseRoute {\n\tconstructor(options) {\n\t\tsuper(options);\n\t}\n};\n//#endregion\nexport { BaseRootRoute, BaseRoute, BaseRouteApi };\n\n//# sourceMappingURL=route.js.map","\"use client\";\nimport { wrapInNonRouteComponentContext } from \"./nonRouteComponentContext.js\";\nimport * as React$1 from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\n//#region src/CatchBoundary.tsx\nvar CatchBoundary = class extends React$1.Component {\n\tconstructor(..._args) {\n\t\tsuper(..._args);\n\t\tthis.state = { error: null };\n\t\tthis.reset = () => {\n\t\t\tthis.setState({ error: null });\n\t\t};\n\t}\n\tstatic getDerivedStateFromProps(props, state) {\n\t\tconst resetKey = props.getResetKey();\n\t\tif (state.error && state.resetKey !== resetKey) return {\n\t\t\tresetKey,\n\t\t\terror: null\n\t\t};\n\t\treturn { resetKey };\n\t}\n\tstatic getDerivedStateFromError(error) {\n\t\treturn { error };\n\t}\n\tcomponentDidCatch(error, errorInfo) {\n\t\tthis.props.onCatch?.(error, errorInfo);\n\t}\n\trender() {\n\t\tconst error = this.state.error;\n\t\tif (error) {\n\t\t\tconst element = React$1.createElement(this.props.errorComponent ?? ErrorComponent, {\n\t\t\t\terror,\n\t\t\t\treset: this.reset\n\t\t\t});\n\t\t\treturn process.env.NODE_ENV !== \"production\" ? wrapInNonRouteComponentContext(element, \"errorComponent\") : element;\n\t\t}\n\t\treturn this.props.children;\n\t}\n};\nfunction ErrorComponent({ error }) {\n\tconst [show, setShow] = React$1.useState(process.env.NODE_ENV !== \"production\");\n\treturn /* @__PURE__ */ jsxs(\"div\", {\n\t\tstyle: {\n\t\t\tpadding: \".5rem\",\n\t\t\tmaxWidth: \"100%\"\n\t\t},\n\t\tchildren: [\n\t\t\t/* @__PURE__ */ jsxs(\"div\", {\n\t\t\t\tstyle: {\n\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\tgap: \".5rem\"\n\t\t\t\t},\n\t\t\t\tchildren: [/* @__PURE__ */ jsx(\"strong\", {\n\t\t\t\t\tstyle: { fontSize: \"1rem\" },\n\t\t\t\t\tchildren: \"Something went wrong!\"\n\t\t\t\t}), /* @__PURE__ */ jsx(\"button\", {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tappearance: \"none\",\n\t\t\t\t\t\tfontSize: \".6em\",\n\t\t\t\t\t\tborder: \"1px solid currentColor\",\n\t\t\t\t\t\tpadding: \".1rem .2rem\",\n\t\t\t\t\t\tfontWeight: \"bold\",\n\t\t\t\t\t\tborderRadius: \".25rem\"\n\t\t\t\t\t},\n\t\t\t\t\tonClick: () => setShow((d) => !d),\n\t\t\t\t\tchildren: show ? \"Hide Error\" : \"Show Error\"\n\t\t\t\t})]\n\t\t\t}),\n\t\t\t/* @__PURE__ */ jsx(\"div\", { style: { height: \".25rem\" } }),\n\t\t\tshow ? /* @__PURE__ */ jsx(\"div\", { children: /* @__PURE__ */ jsx(\"pre\", {\n\t\t\t\tstyle: {\n\t\t\t\t\tfontSize: \".7em\",\n\t\t\t\t\tborder: \"1px solid red\",\n\t\t\t\t\tborderRadius: \".25rem\",\n\t\t\t\t\tpadding: \".3rem\",\n\t\t\t\t\tcolor: \"red\",\n\t\t\t\t\toverflow: \"auto\"\n\t\t\t\t},\n\t\t\t\tchildren: error.message ? /* @__PURE__ */ jsx(\"code\", { children: error.message }) : null\n\t\t\t}) }) : null\n\t\t]\n\t});\n}\n//#endregion\nexport { CatchBoundary, ErrorComponent };\n\n//# sourceMappingURL=CatchBoundary.js.map","\"use client\";\nimport React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/ClientOnly.tsx\n/**\n* Render the children only after the JS has loaded client-side. Use an optional\n* fallback component if the JS is not yet loaded.\n*\n* @example\n* Render a Chart component if JS loads, renders a simple FakeChart\n* component server-side or if there is no JS. The FakeChart can have only the\n* UI without the behavior or be a loading spinner or skeleton.\n*\n* ```tsx\n* return (\n* <ClientOnly fallback={<FakeChart />}>\n* <Chart />\n* </ClientOnly>\n* )\n* ```\n*/\nfunction ClientOnly({ children, fallback = null }) {\n\treturn /* @__PURE__ */ jsx(React.Fragment, { children: useHydrated() ? children : fallback });\n}\n/**\n* Return a boolean indicating if the JS has been hydrated already.\n* When doing Server-Side Rendering, the result will always be false.\n* When doing Client-Side Rendering, the result will always be false on the\n* first render and true from then on. Even if a new component renders it will\n* always start with true.\n*\n* @example\n* ```tsx\n* // Disable a button that needs JS to work.\n* let hydrated = useHydrated()\n* return (\n* <button type=\"button\" disabled={!hydrated} onClick={doSomethingCustom}>\n* Click me\n* </button>\n* )\n* ```\n* @returns True if the JS has been hydrated already, false otherwise.\n*/\nfunction useHydrated() {\n\treturn React.useSyncExternalStore(subscribe, () => true, () => false);\n}\nfunction subscribe() {\n\treturn () => {};\n}\n//#endregion\nexport { ClientOnly, useHydrated };\n\n//# sourceMappingURL=ClientOnly.js.map","\"use client\";\nimport * as React$1 from \"react\";\n//#region src/routerContext.tsx\nvar routerContext = React$1.createContext(null);\n//#endregion\nexport { routerContext };\n\n//# sourceMappingURL=routerContext.js.map","\"use client\";\nimport { routerContext } from \"./routerContext.js\";\nimport * as React$1 from \"react\";\n//#region src/useRouter.tsx\n/**\n* Access the current TanStack Router instance from React context.\n* Must be used within a `RouterProvider`.\n*\n* Options:\n* - `warn`: Log a warning if no router context is found (default: true).\n*\n* @returns The registered router instance.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useRouterHook\n*/\nfunction useRouter(opts) {\n\tconst value = React$1.useContext(routerContext);\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif ((opts?.warn ?? true) && !value) console.warn(\"Warning: useRouter must be used inside a <RouterProvider> component!\");\n\t}\n\treturn value;\n}\n//#endregion\nexport { useRouter };\n\n//# sourceMappingURL=useRouter.js.map","\"use client\";\nimport * as React$1 from \"react\";\n//#region src/matchContext.tsx\nvar matchContext = React$1.createContext(void 0);\nvar dummyMatchContext = React$1.createContext(void 0);\n//#endregion\nexport { dummyMatchContext, matchContext };\n\n//# sourceMappingURL=matchContext.js.map","var ReactiveFlags = /* @__PURE__ */ ((ReactiveFlags2) => {\n ReactiveFlags2[ReactiveFlags2[\"None\"] = 0] = \"None\";\n ReactiveFlags2[ReactiveFlags2[\"Mutable\"] = 1] = \"Mutable\";\n ReactiveFlags2[ReactiveFlags2[\"Watching\"] = 2] = \"Watching\";\n ReactiveFlags2[ReactiveFlags2[\"RecursedCheck\"] = 4] = \"RecursedCheck\";\n ReactiveFlags2[ReactiveFlags2[\"Recursed\"] = 8] = \"Recursed\";\n ReactiveFlags2[ReactiveFlags2[\"Dirty\"] = 16] = \"Dirty\";\n ReactiveFlags2[ReactiveFlags2[\"Pending\"] = 32] = \"Pending\";\n return ReactiveFlags2;\n})(ReactiveFlags || {});\n// @__NO_SIDE_EFFECTS__\nfunction createReactiveSystem({\n update,\n notify,\n unwatched\n}) {\n return {\n link,\n unlink,\n propagate,\n checkDirty,\n shallowPropagate\n };\n function link(dep, sub, version) {\n const prevDep = sub.depsTail;\n if (prevDep !== void 0 && prevDep.dep === dep) {\n return;\n }\n const nextDep = prevDep !== void 0 ? prevDep.nextDep : sub.deps;\n if (nextDep !== void 0 && nextDep.dep === dep) {\n nextDep.version = version;\n sub.depsTail = nextDep;\n return;\n }\n const prevSub = dep.subsTail;\n if (prevSub !== void 0 && prevSub.version === version && prevSub.sub === sub) {\n return;\n }\n const newLink = sub.depsTail = dep.subsTail = {\n version,\n dep,\n sub,\n prevDep,\n nextDep,\n prevSub,\n nextSub: void 0\n };\n if (nextDep !== void 0) {\n nextDep.prevDep = newLink;\n }\n if (prevDep !== void 0) {\n prevDep.nextDep = newLink;\n } else {\n sub.deps = newLink;\n }\n if (prevSub !== void 0) {\n prevSub.nextSub = newLink;\n } else {\n dep.subs = newLink;\n }\n }\n function unlink(link2, sub = link2.sub) {\n const dep = link2.dep;\n const prevDep = link2.prevDep;\n const nextDep = link2.nextDep;\n const nextSub = link2.nextSub;\n const prevSub = link2.prevSub;\n if (nextDep !== void 0) {\n nextDep.prevDep = prevDep;\n } else {\n sub.depsTail = prevDep;\n }\n if (prevDep !== void 0) {\n prevDep.nextDep = nextDep;\n } else {\n sub.deps = nextDep;\n }\n if (nextSub !== void 0) {\n nextSub.prevSub = prevSub;\n } else {\n dep.subsTail = prevSub;\n }\n if (prevSub !== void 0) {\n prevSub.nextSub = nextSub;\n } else if ((dep.subs = nextSub) === void 0) {\n unwatched(dep);\n }\n return nextDep;\n }\n function propagate(link2) {\n let next = link2.nextSub;\n let stack;\n top: do {\n const sub = link2.sub;\n let flags = sub.flags;\n if (!(flags & (4 | 8 | 16 | 32))) {\n sub.flags = flags | 32;\n } else if (!(flags & (4 | 8))) {\n flags = 0;\n } else if (!(flags & 4)) {\n sub.flags = flags & -9 | 32;\n } else if (!(flags & (16 | 32)) && isValidLink(link2, sub)) {\n sub.flags = flags | (8 | 32);\n flags &= 1;\n } else {\n flags = 0;\n }\n if (flags & 2) {\n notify(sub);\n }\n if (flags & 1) {\n const subSubs = sub.subs;\n if (subSubs !== void 0) {\n const nextSub = (link2 = subSubs).nextSub;\n if (nextSub !== void 0) {\n stack = { value: next, prev: stack };\n next = nextSub;\n }\n continue;\n }\n }\n if ((link2 = next) !== void 0) {\n next = link2.nextSub;\n continue;\n }\n while (stack !== void 0) {\n link2 = stack.value;\n stack = stack.prev;\n if (link2 !== void 0) {\n next = link2.nextSub;\n continue top;\n }\n }\n break;\n } while (true);\n }\n function checkDirty(link2, sub) {\n let stack;\n let checkDepth = 0;\n let dirty = false;\n top: do {\n const dep = link2.dep;\n const flags = dep.flags;\n if (sub.flags & 16) {\n dirty = true;\n } else if ((flags & (1 | 16)) === (1 | 16)) {\n if (update(dep)) {\n const subs = dep.subs;\n if (subs.nextSub !== void 0) {\n shallowPropagate(subs);\n }\n dirty = true;\n }\n } else if ((flags & (1 | 32)) === (1 | 32)) {\n if (link2.nextSub !== void 0 || link2.prevSub !== void 0) {\n stack = { value: link2, prev: stack };\n }\n link2 = dep.deps;\n sub = dep;\n ++checkDepth;\n continue;\n }\n if (!dirty) {\n const nextDep = link2.nextDep;\n if (nextDep !== void 0) {\n link2 = nextDep;\n continue;\n }\n }\n while (checkDepth--) {\n const firstSub = sub.subs;\n const hasMultipleSubs = firstSub.nextSub !== void 0;\n if (hasMultipleSubs) {\n link2 = stack.value;\n stack = stack.prev;\n } else {\n link2 = firstSub;\n }\n if (dirty) {\n if (update(sub)) {\n if (hasMultipleSubs) {\n shallowPropagate(firstSub);\n }\n sub = link2.sub;\n continue;\n }\n dirty = false;\n } else {\n sub.flags &= -33;\n }\n sub = link2.sub;\n const nextDep = link2.nextDep;\n if (nextDep !== void 0) {\n link2 = nextDep;\n continue top;\n }\n }\n return dirty;\n } while (true);\n }\n function shallowPropagate(link2) {\n do {\n const sub = link2.sub;\n const flags = sub.flags;\n if ((flags & (32 | 16)) === 32) {\n sub.flags = flags | 16;\n if ((flags & (2 | 4)) === 2) {\n notify(sub);\n }\n }\n } while ((link2 = link2.nextSub) !== void 0);\n }\n function isValidLink(checkLink, sub) {\n let link2 = sub.depsTail;\n while (link2 !== void 0) {\n if (link2 === checkLink) {\n return true;\n }\n link2 = link2.prevDep;\n }\n return false;\n }\n}\nexport {\n ReactiveFlags,\n createReactiveSystem\n};\n//# sourceMappingURL=alien.js.map\n","import { createReactiveSystem, ReactiveFlags } from \"./alien.js\";\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n const isObserver = typeof nextHandler === \"object\";\n const self = isObserver ? nextHandler : void 0;\n return {\n next: (isObserver ? nextHandler.next : nextHandler)?.bind(self),\n error: (isObserver ? nextHandler.error : errorHandler)?.bind(self),\n complete: (isObserver ? nextHandler.complete : completionHandler)?.bind(\n self\n )\n };\n}\nconst queuedEffects = [];\nlet cycle = 0;\nconst { link, unlink, propagate, checkDirty, shallowPropagate } = createReactiveSystem({\n update(atom) {\n return atom._update();\n },\n // eslint-disable-next-line no-shadow\n notify(effect2) {\n queuedEffects[queuedEffectsLength++] = effect2;\n effect2.flags &= ~ReactiveFlags.Watching;\n },\n unwatched(atom) {\n if (atom.depsTail !== void 0) {\n atom.depsTail = void 0;\n atom.flags = ReactiveFlags.Mutable | ReactiveFlags.Dirty;\n purgeDeps(atom);\n }\n }\n});\nlet notifyIndex = 0;\nlet queuedEffectsLength = 0;\nlet activeSub;\nlet batchDepth = 0;\nfunction batch(fn) {\n try {\n ++batchDepth;\n fn();\n } finally {\n if (!--batchDepth) {\n flush();\n }\n }\n}\nfunction purgeDeps(sub) {\n const depsTail = sub.depsTail;\n let dep = depsTail !== void 0 ? depsTail.nextDep : sub.deps;\n while (dep !== void 0) {\n dep = unlink(dep, sub);\n }\n}\nfunction flush() {\n if (batchDepth > 0) {\n return;\n }\n while (notifyIndex < queuedEffectsLength) {\n const effect2 = queuedEffects[notifyIndex];\n queuedEffects[notifyIndex++] = void 0;\n effect2.notify();\n }\n notifyIndex = 0;\n queuedEffectsLength = 0;\n}\nfunction createAsyncAtom(getValue, options) {\n const ref = {};\n const atom = createAtom(() => {\n getValue().then(\n (data) => {\n const internalAtom = ref.current;\n if (internalAtom._update({ status: \"done\", data })) {\n const subs = internalAtom.subs;\n if (subs !== void 0) {\n propagate(subs);\n shallowPropagate(subs);\n flush();\n }\n }\n },\n (error) => {\n const internalAtom = ref.current;\n if (internalAtom._update({ status: \"error\", error })) {\n const subs = internalAtom.subs;\n if (subs !== void 0) {\n propagate(subs);\n shallowPropagate(subs);\n flush();\n }\n }\n }\n );\n return { status: \"pending\" };\n }, options);\n ref.current = atom;\n return atom;\n}\nfunction createAtom(valueOrFn, options) {\n const isComputed = typeof valueOrFn === \"function\";\n const getter = valueOrFn;\n const atom = {\n _snapshot: isComputed ? void 0 : valueOrFn,\n subs: void 0,\n subsTail: void 0,\n deps: void 0,\n depsTail: void 0,\n flags: isComputed ? ReactiveFlags.None : ReactiveFlags.Mutable,\n get() {\n if (activeSub !== void 0) {\n link(atom, activeSub, cycle);\n }\n return atom._snapshot;\n },\n subscribe(observerOrFn) {\n const obs = toObserver(observerOrFn);\n const observed = { current: false };\n const e = effect(() => {\n atom.get();\n if (!observed.current) {\n observed.current = true;\n } else {\n obs.next?.(atom._snapshot);\n }\n });\n return {\n unsubscribe: () => {\n e.stop();\n }\n };\n },\n _update(getValue) {\n const prevSub = activeSub;\n const compare = options?.compare ?? Object.is;\n if (isComputed) {\n activeSub = atom;\n ++cycle;\n atom.depsTail = void 0;\n } else if (getValue === void 0) {\n return false;\n }\n if (isComputed) {\n atom.flags = ReactiveFlags.Mutable | ReactiveFlags.RecursedCheck;\n }\n try {\n const oldValue = atom._snapshot;\n const newValue = typeof getValue === \"function\" ? getValue(oldValue) : getValue === void 0 && isComputed ? getter(oldValue) : getValue;\n if (oldValue === void 0 || !compare(oldValue, newValue)) {\n atom._snapshot = newValue;\n return true;\n }\n return false;\n } finally {\n activeSub = prevSub;\n if (isComputed) {\n atom.flags &= ~ReactiveFlags.RecursedCheck;\n }\n purgeDeps(atom);\n }\n }\n };\n if (isComputed) {\n atom.flags = ReactiveFlags.Mutable | ReactiveFlags.Dirty;\n atom.get = function() {\n const flags = atom.flags;\n if (flags & ReactiveFlags.Dirty || flags & ReactiveFlags.Pending && checkDirty(atom.deps, atom)) {\n if (atom._update()) {\n const subs = atom.subs;\n if (subs !== void 0) {\n shallowPropagate(subs);\n }\n }\n } else if (flags & ReactiveFlags.Pending) {\n atom.flags = flags & ~ReactiveFlags.Pending;\n }\n if (activeSub !== void 0) {\n link(atom, activeSub, cycle);\n }\n return atom._snapshot;\n };\n } else {\n atom.set = function(valueOrFn2) {\n if (atom._update(valueOrFn2)) {\n const subs = atom.subs;\n if (subs !== void 0) {\n propagate(subs);\n shallowPropagate(subs);\n flush();\n }\n }\n };\n }\n return atom;\n}\nfunction effect(fn) {\n const run = () => {\n const prevSub = activeSub;\n activeSub = effectObj;\n ++cycle;\n effectObj.depsTail = void 0;\n effectObj.flags = ReactiveFlags.Watching | ReactiveFlags.RecursedCheck;\n try {\n return fn();\n } finally {\n activeSub = prevSub;\n effectObj.flags &= ~ReactiveFlags.RecursedCheck;\n purgeDeps(effectObj);\n }\n };\n const effectObj = {\n deps: void 0,\n depsTail: void 0,\n subs: void 0,\n subsTail: void 0,\n flags: ReactiveFlags.Watching | ReactiveFlags.RecursedCheck,\n notify() {\n const flags = this.flags;\n if (flags & ReactiveFlags.Dirty || flags & ReactiveFlags.Pending && checkDirty(this.deps, this)) {\n run();\n } else {\n this.flags = ReactiveFlags.Watching;\n }\n },\n stop() {\n this.flags = ReactiveFlags.None;\n this.depsTail = void 0;\n purgeDeps(this);\n }\n };\n run();\n return effectObj;\n}\nexport {\n batch,\n createAsyncAtom,\n createAtom,\n flush,\n toObserver\n};\n//# sourceMappingURL=atom.js.map\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import { useCallback } from \"react\";\nimport { useSyncExternalStoreWithSelector } from \"use-sync-external-store/shim/with-selector\";\nfunction defaultCompare(a, b) {\n return a === b;\n}\nfunction useStore(atom, selector, compare = defaultCompare) {\n const subscribe = useCallback(\n (handleStoreChange) => {\n if (!atom) {\n return () => {\n };\n }\n const { unsubscribe } = atom.subscribe(handleStoreChange);\n return unsubscribe;\n },\n [atom]\n );\n const boundGetSnapshot = useCallback(() => atom?.get(), [atom]);\n const selectedSnapshot = useSyncExternalStoreWithSelector(\n subscribe,\n boundGetSnapshot,\n boundGetSnapshot,\n selector,\n compare\n );\n return selectedSnapshot;\n}\nexport {\n useStore\n};\n//# sourceMappingURL=useStore.js.map\n","\"use client\";\nimport { dummyMatchContext, matchContext } from \"./matchContext.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { invariant, replaceEqualDeep } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { useStore } from \"@tanstack/react-store\";\n//#region src/useMatch.tsx\nvar dummyMatch = {};\nfunction useStructuralSharing(opts, router) {\n\tconst previousResult = React$1.useRef();\n\treturn (slice) => {\n\t\tconst selected = opts?.select ? opts.select(slice) : slice;\n\t\tif (opts?.structuralSharing ?? router.options.defaultStructuralSharing) return previousResult.current = replaceEqualDeep(previousResult.current, selected);\n\t\treturn selected;\n\t};\n}\n/**\n* Read and select the nearest or targeted route match.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchHook\n*/\nfunction useMatch(opts) {\n\tconst router = useRouter();\n\tconst nearestRouteId = React$1.useContext(opts.from ? dummyMatchContext : matchContext);\n\tconst routeId = opts.from ?? nearestRouteId;\n\tconst matchStore = router.stores.getMatchStore(routeId);\n\tif (isServer ?? router.isServer) {\n\t\tconst match = matchStore.get();\n\t\tif (!match) {\n\t\t\tif (opts.shouldThrow ?? true) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : \"a nearest match!\"}`);\n\t\t\t\tinvariant();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\treturn opts.select ? opts.select(match) : match;\n\t}\n\tconst selector = useStructuralSharing(opts, router);\n\tconst matchSelection = useStore(matchStore, (match) => match ? selector(match) : dummyMatch);\n\tif (matchSelection !== dummyMatch) return matchSelection;\n\tif (opts.shouldThrow ?? true) {\n\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : \"a nearest match!\"}`);\n\t\tinvariant();\n\t}\n}\n//#endregion\nexport { useMatch, useStructuralSharing };\n\n//# sourceMappingURL=useMatch.js.map","import { useMatch } from \"./useMatch.js\";\n//#region src/useLoaderData.tsx\n/**\n* Read and select the current route's loader data with type‑safety.\n*\n* Options:\n* - `from`/`strict`: Choose which route's data to read and strictness\n* - `select`: Map the loader data to a derived value\n* - `structuralSharing`: Enable structural sharing for stable references\n*\n* @returns The loader data (or selected value) for the matched route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useLoaderDataHook\n*/\nfunction useLoaderData(opts) {\n\treturn useMatch({\n\t\tfrom: opts.from,\n\t\tstrict: opts.strict,\n\t\tstructuralSharing: opts.structuralSharing,\n\t\tselect: (match) => {\n\t\t\treturn opts.select ? opts.select(match.loaderData) : match.loaderData;\n\t\t}\n\t});\n}\n//#endregion\nexport { useLoaderData };\n\n//# sourceMappingURL=useLoaderData.js.map","import { useMatch } from \"./useMatch.js\";\n//#region src/useLoaderDeps.tsx\n/**\n* Read and select the current route's loader dependencies object.\n*\n* Options:\n* - `from`: Choose which route's loader deps to read\n* - `select`: Map the deps to a derived value\n* - `structuralSharing`: Enable structural sharing for stable references\n*\n* @returns The loader deps (or selected value) for the matched route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useLoaderDepsHook\n*/\nfunction useLoaderDeps(opts) {\n\tconst { select, ...rest } = opts;\n\treturn useMatch({\n\t\t...rest,\n\t\tselect: (match) => {\n\t\t\treturn select ? select(match.loaderDeps) : match.loaderDeps;\n\t\t}\n\t});\n}\n//#endregion\nexport { useLoaderDeps };\n\n//# sourceMappingURL=useLoaderDeps.js.map","import { useMatch } from \"./useMatch.js\";\n//#region src/useParams.tsx\n/**\n* Access the current route's path parameters with type-safety.\n*\n* Options:\n* - `from`/`strict`: Specify the matched route and whether to enforce strict typing\n* - `select`: Project the params object to a derived value for memoized renders\n* - `structuralSharing`: Enable structural sharing for stable references\n* - `shouldThrow`: Throw if the route is not found in strict contexts\n*\n* @returns The params object (or selected value) for the matched route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useParamsHook\n*/\nfunction useParams(opts) {\n\treturn useMatch({\n\t\tfrom: opts.from,\n\t\tshouldThrow: opts.shouldThrow,\n\t\tstructuralSharing: opts.structuralSharing,\n\t\tstrict: opts.strict,\n\t\tselect: (match) => {\n\t\t\tconst params = opts.strict === false ? match.params : match._strictParams;\n\t\t\treturn opts.select ? opts.select(params) : params;\n\t\t}\n\t});\n}\n//#endregion\nexport { useParams };\n\n//# sourceMappingURL=useParams.js.map","import { useMatch } from \"./useMatch.js\";\n//#region src/useSearch.tsx\n/**\n* Read and select the current route's search parameters with type-safety.\n*\n* Options:\n* - `from`/`strict`: Control which route's search is read and how strictly it's typed\n* - `select`: Map the search object to a derived value for render optimization\n* - `structuralSharing`: Enable structural sharing for stable references\n* - `shouldThrow`: Throw when the route is not found (strict contexts)\n*\n* @returns The search object (or selected value) for the matched route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useSearchHook\n*/\nfunction useSearch(opts) {\n\treturn useMatch({\n\t\tfrom: opts.from,\n\t\tstrict: opts.strict,\n\t\tshouldThrow: opts.shouldThrow,\n\t\tstructuralSharing: opts.structuralSharing,\n\t\tselect: (match) => {\n\t\t\treturn opts.select ? opts.select(match.search) : match.search;\n\t\t}\n\t});\n}\n//#endregion\nexport { useSearch };\n\n//# sourceMappingURL=useSearch.js.map","\"use client\";\nimport { useLayoutEffect } from \"./utils.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport * as React$1 from \"react\";\n//#region src/useNavigate.tsx\n/**\n* Imperative navigation hook.\n*\n* Returns a stable `navigate(options)` function to change the current location\n* programmatically. Prefer the `Link` component for user-initiated navigation,\n* and use this hook from effects, callbacks, or handlers where imperative\n* navigation is required.\n*\n* Options:\n* - `from`: Optional route base used to resolve relative `to` paths.\n*\n* @returns A function that accepts `NavigateOptions`.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useNavigateHook\n*/\nfunction useNavigate(_defaultOpts) {\n\tconst router = useRouter();\n\treturn React$1.useCallback((options) => {\n\t\treturn router.navigate({\n\t\t\t...options,\n\t\t\tfrom: options.from ?? _defaultOpts?.from\n\t\t});\n\t}, [_defaultOpts?.from, router]);\n}\n/**\n* Component that triggers a navigation when rendered. Navigation executes\n* in an effect after mount/update.\n*\n* Props are the same as `NavigateOptions` used by `navigate()`.\n*\n* @returns null\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/navigateComponent\n*/\nfunction Navigate(props) {\n\tconst router = useRouter();\n\tconst navigate = useNavigate();\n\tconst previousPropsRef = React$1.useRef(null);\n\tuseLayoutEffect(() => {\n\t\tif (previousPropsRef.current !== props) {\n\t\t\tnavigate(props);\n\t\t\tpreviousPropsRef.current = props;\n\t\t}\n\t}, [\n\t\trouter,\n\t\tprops,\n\t\tnavigate\n\t]);\n\treturn null;\n}\n//#endregion\nexport { Navigate, useNavigate };\n\n//# sourceMappingURL=useNavigate.js.map","import { useMatch } from \"./useMatch.js\";\n//#region src/useRouteContext.ts\nfunction useRouteContext(opts) {\n\treturn useMatch({\n\t\t...opts,\n\t\tselect: (match) => opts.select ? opts.select(match.context) : match.context\n\t});\n}\n//#endregion\nexport { useRouteContext };\n\n//# sourceMappingURL=useRouteContext.js.map","\"use client\";\nimport { useForwardedRef, useIntersectionObserver } from \"./utils.js\";\nimport { useHydrated } from \"./ClientOnly.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { deepEqual, exactPathTest, functionalUpdate, hasKeys, isDangerousProtocol, preloadWarning, removeTrailingSlash } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { useStore } from \"@tanstack/react-store\";\n//#region src/link.tsx\nfunction useValueStable(value) {\n\tconst ref = React$1.useRef(value);\n\tif (!deepEqual(ref.current, value, { ignoreUndefined: false })) ref.current = value;\n\treturn ref.current;\n}\nfunction compareLinkState(a, b) {\n\treturn a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\nfunction resolveExternalLink(hrefOption, to, protocolAllowlist) {\n\tif (hrefOption?.external) {\n\t\tif (isDangerousProtocol(hrefOption.href, protocolAllowlist)) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${hrefOption.href}`);\n\t\t\treturn;\n\t\t}\n\t\treturn hrefOption.href;\n\t}\n\tif (isSafeInternal(to)) return;\n\tif (typeof to !== \"string\" || to.indexOf(\":\") === -1) return;\n\ttry {\n\t\tnew URL(to);\n\t\tif (isDangerousProtocol(to, protocolAllowlist)) {\n\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${to}`);\n\t\t\treturn;\n\t\t}\n\t\treturn to;\n\t} catch {}\n}\nfunction resolveIsActive(location, next, activeOptions, basepath, isHydrated, isExternal) {\n\tif (isExternal) return false;\n\tif (activeOptions?.exact) {\n\t\tif (!exactPathTest(location.pathname, next.pathname, basepath)) return false;\n\t} else {\n\t\tconst currentPathSplit = removeTrailingSlash(location.pathname, basepath);\n\t\tconst nextPathSplit = removeTrailingSlash(next.pathname, basepath);\n\t\tif (!(currentPathSplit.startsWith(nextPathSplit) && (currentPathSplit.length === nextPathSplit.length || currentPathSplit[nextPathSplit.length] === \"/\"))) return false;\n\t}\n\tif (activeOptions?.includeSearch ?? true) {\n\t\tif (!deepEqual(location.search, next.search, {\n\t\t\tpartial: !activeOptions?.exact,\n\t\t\tignoreUndefined: !activeOptions?.explicitUndefined\n\t\t})) return false;\n\t}\n\tif (activeOptions?.includeHash) return isHydrated && location.hash === next.hash;\n\treturn true;\n}\n/**\n* Build anchor-like props for declarative navigation and preloading.\n*\n* Returns stable `href`, event handlers and accessibility props derived from\n* router options and active state. Used internally by `Link` and custom links.\n*\n* Options cover `to`, `params`, `search`, `hash`, `state`, `preload`,\n* `activeProps`, `inactiveProps`, and more.\n*\n* @returns React anchor props suitable for `<a>` or custom components.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useLinkPropsHook\n*/\nfunction useLinkProps(options, forwardedRef) {\n\tconst router = useRouter();\n\tconst innerRef = useForwardedRef(forwardedRef);\n\tconst { activeProps, inactiveProps, activeOptions, to, preload: userPreload, preloadDelay: userPreloadDelay, preloadIntentProximity: _preloadIntentProximity, hashScrollIntoView, replace, startTransition, resetScroll, viewTransition, children, target, disabled, style, className, onClick, onBlur, onFocus, onMouseEnter, onMouseLeave, onTouchStart, ignoreBlocker, params: _params, search: _search, hash: _hash, state: _state, mask: _mask, reloadDocument: _reloadDocument, unsafeRelative: _unsafeRelative, from: _from, _fromLocation, ...propsSafeToSpread } = options;\n\tif (isServer ?? router.isServer) {\n\t\tconst safeInternal = isSafeInternal(to);\n\t\tif (typeof to === \"string\" && !safeInternal && to.indexOf(\":\") > -1) try {\n\t\t\tnew URL(to);\n\t\t\tif (isDangerousProtocol(to, router.protocolAllowlist)) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${to}`);\n\t\t\t\treturn {\n\t\t\t\t\t...propsSafeToSpread,\n\t\t\t\t\tref: innerRef,\n\t\t\t\t\thref: void 0,\n\t\t\t\t\t...children && { children },\n\t\t\t\t\t...target && { target },\n\t\t\t\t\t...disabled && { disabled },\n\t\t\t\t\t...style && { style },\n\t\t\t\t\t...className && { className }\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...propsSafeToSpread,\n\t\t\t\tref: innerRef,\n\t\t\t\thref: to,\n\t\t\t\t...children && { children },\n\t\t\t\t...target && { target },\n\t\t\t\t...disabled && { disabled },\n\t\t\t\t...style && { style },\n\t\t\t\t...className && { className }\n\t\t\t};\n\t\t} catch {}\n\t\tconst next = router.buildLocation({\n\t\t\t...options,\n\t\t\tfrom: options.from\n\t\t});\n\t\tconst hrefOption = getHrefOption(next.maskedLocation ? next.maskedLocation.publicHref : next.publicHref, next.maskedLocation ? next.maskedLocation.external : next.external, router.history, disabled);\n\t\tconst externalLink = (() => {\n\t\t\tif (hrefOption?.external) {\n\t\t\t\tif (isDangerousProtocol(hrefOption.href, router.protocolAllowlist)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${hrefOption.href}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn hrefOption.href;\n\t\t\t}\n\t\t\tif (safeInternal) return void 0;\n\t\t\tif (typeof to === \"string\" && to.indexOf(\":\") > -1) try {\n\t\t\t\tnew URL(to);\n\t\t\t\tif (isDangerousProtocol(to, router.protocolAllowlist)) {\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Blocked Link with dangerous protocol: ${to}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn to;\n\t\t\t} catch {}\n\t\t})();\n\t\tconst isActive = (() => {\n\t\t\tif (externalLink) return false;\n\t\t\tconst currentLocation = router.stores.location.get();\n\t\t\tconst exact = activeOptions?.exact ?? false;\n\t\t\tif (exact) {\n\t\t\t\tif (!exactPathTest(currentLocation.pathname, next.pathname, router.basepath)) return false;\n\t\t\t} else {\n\t\t\t\tconst currentPathSplit = removeTrailingSlash(currentLocation.pathname, router.basepath);\n\t\t\t\tconst nextPathSplit = removeTrailingSlash(next.pathname, router.basepath);\n\t\t\t\tif (!(currentPathSplit.startsWith(nextPathSplit) && (currentPathSplit.length === nextPathSplit.length || currentPathSplit[nextPathSplit.length] === \"/\"))) return false;\n\t\t\t}\n\t\t\tif (activeOptions?.includeSearch ?? true) {\n\t\t\t\tif (currentLocation.search !== next.search) {\n\t\t\t\t\tconst currentSearchEmpty = !currentLocation.search || typeof currentLocation.search === \"object\" && !hasKeys(currentLocation.search);\n\t\t\t\t\tconst nextSearchEmpty = !next.search || typeof next.search === \"object\" && !hasKeys(next.search);\n\t\t\t\t\tif (!(currentSearchEmpty && nextSearchEmpty)) {\n\t\t\t\t\t\tif (!deepEqual(currentLocation.search, next.search, {\n\t\t\t\t\t\t\tpartial: !exact,\n\t\t\t\t\t\t\tignoreUndefined: !activeOptions?.explicitUndefined\n\t\t\t\t\t\t})) return false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (activeOptions?.includeHash) return false;\n\t\t\treturn true;\n\t\t})();\n\t\tif (externalLink) return {\n\t\t\t...propsSafeToSpread,\n\t\t\tref: innerRef,\n\t\t\thref: externalLink,\n\t\t\t...children && { children },\n\t\t\t...target && { target },\n\t\t\t...disabled && { disabled },\n\t\t\t...style && { style },\n\t\t\t...className && { className }\n\t\t};\n\t\tconst resolvedActiveProps = isActive ? functionalUpdate(activeProps, {}) ?? STATIC_ACTIVE_OBJECT : STATIC_EMPTY_OBJECT;\n\t\tconst resolvedInactiveProps = isActive ? STATIC_EMPTY_OBJECT : functionalUpdate(inactiveProps, {}) ?? STATIC_EMPTY_OBJECT;\n\t\tconst resolvedStyle = (() => {\n\t\t\tconst baseStyle = style;\n\t\t\tconst activeStyle = resolvedActiveProps.style;\n\t\t\tconst inactiveStyle = resolvedInactiveProps.style;\n\t\t\tif (!baseStyle && !activeStyle && !inactiveStyle) return;\n\t\t\tif (baseStyle && !activeStyle && !inactiveStyle) return baseStyle;\n\t\t\tif (!baseStyle && activeStyle && !inactiveStyle) return activeStyle;\n\t\t\tif (!baseStyle && !activeStyle && inactiveStyle) return inactiveStyle;\n\t\t\treturn {\n\t\t\t\t...baseStyle,\n\t\t\t\t...activeStyle,\n\t\t\t\t...inactiveStyle\n\t\t\t};\n\t\t})();\n\t\tconst resolvedClassName = (() => {\n\t\t\tconst baseClassName = className;\n\t\t\tconst activeClassName = resolvedActiveProps.className;\n\t\t\tconst inactiveClassName = resolvedInactiveProps.className;\n\t\t\tif (!baseClassName && !activeClassName && !inactiveClassName) return \"\";\n\t\t\tlet out = \"\";\n\t\t\tif (baseClassName) out = baseClassName;\n\t\t\tif (activeClassName) out = out ? `${out} ${activeClassName}` : activeClassName;\n\t\t\tif (inactiveClassName) out = out ? `${out} ${inactiveClassName}` : inactiveClassName;\n\t\t\treturn out;\n\t\t})();\n\t\treturn {\n\t\t\t...propsSafeToSpread,\n\t\t\t...resolvedActiveProps,\n\t\t\t...resolvedInactiveProps,\n\t\t\thref: hrefOption?.href,\n\t\t\tref: innerRef,\n\t\t\tdisabled: !!disabled,\n\t\t\ttarget,\n\t\t\t...resolvedStyle && { style: resolvedStyle },\n\t\t\t...resolvedClassName && { className: resolvedClassName },\n\t\t\t...disabled && STATIC_DISABLED_PROPS,\n\t\t\t...isActive && STATIC_ACTIVE_PROPS\n\t\t};\n\t}\n\tconst isHydrated = useHydrated();\n\tconst stableSearch = useValueStable(options.search);\n\tconst stableParams = useValueStable(options.params);\n\tconst stableActiveOptions = useValueStable(activeOptions);\n\tconst _options = React$1.useMemo(() => options, [\n\t\trouter,\n\t\toptions.from,\n\t\toptions._fromLocation,\n\t\toptions.hash,\n\t\toptions.to,\n\t\tstableSearch,\n\t\tstableParams,\n\t\toptions.state,\n\t\toptions.mask,\n\t\toptions.unsafeRelative\n\t]);\n\tconst selectLinkState = React$1.useCallback((location) => {\n\t\tconst next = router.buildLocation({\n\t\t\t_fromLocation: location,\n\t\t\t..._options\n\t\t});\n\t\tconst hrefOption = getHrefOption(next.maskedLocation ? next.maskedLocation.publicHref : next.publicHref, next.maskedLocation ? next.maskedLocation.external : next.external, router.history, disabled);\n\t\tconst externalLink = resolveExternalLink(hrefOption, to, router.protocolAllowlist);\n\t\treturn [\n\t\t\threfOption?.href,\n\t\t\texternalLink,\n\t\t\tresolveIsActive(location, next, stableActiveOptions, router.basepath, isHydrated, externalLink !== void 0)\n\t\t];\n\t}, [\n\t\tstableActiveOptions,\n\t\tdisabled,\n\t\tisHydrated,\n\t\t_options,\n\t\trouter,\n\t\tto\n\t]);\n\tconst [href, externalLink, isActive] = useStore(router.stores.location, selectLinkState, compareLinkState);\n\tconst resolvedActiveProps = isActive ? functionalUpdate(activeProps, {}) ?? STATIC_ACTIVE_OBJECT : STATIC_EMPTY_OBJECT;\n\tconst resolvedInactiveProps = isActive ? STATIC_EMPTY_OBJECT : functionalUpdate(inactiveProps, {}) ?? STATIC_EMPTY_OBJECT;\n\tconst resolvedClassName = [\n\t\tclassName,\n\t\tresolvedActiveProps.className,\n\t\tresolvedInactiveProps.className\n\t].filter(Boolean).join(\" \");\n\tconst resolvedStyle = (style || resolvedActiveProps.style || resolvedInactiveProps.style) && {\n\t\t...style,\n\t\t...resolvedActiveProps.style,\n\t\t...resolvedInactiveProps.style\n\t};\n\tconst hasRenderFetched = React$1.useRef(false);\n\tconst preload = options.reloadDocument || externalLink || disabled ? false : userPreload ?? router.options.defaultPreload;\n\tconst preloadDelay = userPreloadDelay ?? router.options.defaultPreloadDelay ?? 0;\n\tconst doPreload = React$1.useCallback(() => {\n\t\trouter.preloadRoute(_options).catch((err) => {\n\t\t\tconsole.warn(err);\n\t\t\tconsole.warn(preloadWarning);\n\t\t});\n\t}, [router, _options]);\n\tconst enqueuePreload = React$1.useCallback((e) => {\n\t\tif (!e) {\n\t\t\tcancelPreload(innerRef);\n\t\t\treturn;\n\t\t}\n\t\tif (!(e.isIntersecting ?? preload === \"intent\")) {\n\t\t\tif (e.isIntersecting === false) cancelPreload(innerRef);\n\t\t\treturn;\n\t\t}\n\t\tif (!preloadDelay) {\n\t\t\tdoPreload();\n\t\t\treturn;\n\t\t}\n\t\tif (timeoutMap.has(innerRef)) return;\n\t\ttimeoutMap.set(innerRef, setTimeout(() => {\n\t\t\ttimeoutMap.delete(innerRef);\n\t\t\tdoPreload();\n\t\t}, preloadDelay));\n\t}, [\n\t\tdoPreload,\n\t\tinnerRef,\n\t\tpreload,\n\t\tpreloadDelay\n\t]);\n\tuseIntersectionObserver(innerRef, enqueuePreload, preload !== \"viewport\");\n\tReact$1.useEffect(() => {\n\t\tif (hasRenderFetched.current) return;\n\t\tif (preload === \"render\") {\n\t\t\tdoPreload();\n\t\t\thasRenderFetched.current = true;\n\t\t}\n\t}, [doPreload, preload]);\n\tconst handleClick = (e) => {\n\t\tconst elementTarget = e.currentTarget.getAttribute(\"target\");\n\t\tconst effectiveTarget = target !== void 0 ? target : elementTarget;\n\t\tif (!disabled && !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) && !e.defaultPrevented && (!effectiveTarget || effectiveTarget === \"_self\") && e.button === 0) {\n\t\t\te.preventDefault();\n\t\t\trouter.navigate({\n\t\t\t\t..._options,\n\t\t\t\treplace,\n\t\t\t\tresetScroll,\n\t\t\t\thashScrollIntoView,\n\t\t\t\tstartTransition,\n\t\t\t\tviewTransition,\n\t\t\t\tignoreBlocker\n\t\t\t});\n\t\t}\n\t};\n\tif (externalLink) return {\n\t\t...propsSafeToSpread,\n\t\tref: innerRef,\n\t\thref: externalLink,\n\t\t...children && { children },\n\t\t...target && { target },\n\t\t...disabled && { disabled },\n\t\t...style && { style },\n\t\t...className && { className },\n\t\t...onClick && { onClick },\n\t\t...onBlur && { onBlur },\n\t\t...onFocus && { onFocus },\n\t\t...onMouseEnter && { onMouseEnter },\n\t\t...onMouseLeave && { onMouseLeave },\n\t\t...onTouchStart && { onTouchStart }\n\t};\n\tconst handleTouchStart = () => {\n\t\tif (preload !== \"intent\") return;\n\t\tdoPreload();\n\t};\n\tconst handleLeave = () => {\n\t\tif (preload === \"intent\") cancelPreload(innerRef);\n\t};\n\treturn {\n\t\t...propsSafeToSpread,\n\t\t...resolvedActiveProps,\n\t\t...resolvedInactiveProps,\n\t\thref,\n\t\tref: innerRef,\n\t\tonClick: composeHandlers([onClick, handleClick]),\n\t\tonBlur: composeHandlers([onBlur, handleLeave]),\n\t\tonFocus: composeHandlers([onFocus, enqueuePreload]),\n\t\tonMouseEnter: composeHandlers([onMouseEnter, enqueuePreload]),\n\t\tonMouseLeave: composeHandlers([onMouseLeave, handleLeave]),\n\t\tonTouchStart: composeHandlers([onTouchStart, handleTouchStart]),\n\t\tdisabled: !!disabled,\n\t\ttarget,\n\t\t...resolvedStyle && { style: resolvedStyle },\n\t\t...resolvedClassName && { className: resolvedClassName },\n\t\t...disabled && STATIC_DISABLED_PROPS,\n\t\t...isActive && STATIC_ACTIVE_PROPS\n\t};\n}\nvar STATIC_EMPTY_OBJECT = {};\nvar STATIC_ACTIVE_OBJECT = { className: \"active\" };\nvar STATIC_DISABLED_PROPS = {\n\trole: \"link\",\n\t\"aria-disabled\": true\n};\nvar STATIC_ACTIVE_PROPS = {\n\t\"data-status\": \"active\",\n\t\"aria-current\": \"page\"\n};\nvar timeoutMap = /* @__PURE__ */ new WeakMap();\nvar cancelPreload = (eventTarget) => {\n\tclearTimeout(timeoutMap.get(eventTarget));\n\ttimeoutMap.delete(eventTarget);\n};\nvar composeHandlers = (handlers) => (e) => {\n\tfor (const handler of handlers) {\n\t\tif (!handler) continue;\n\t\tif (e.defaultPrevented) return;\n\t\thandler(e);\n\t}\n};\nfunction getHrefOption(publicHref, external, history, disabled) {\n\tif (disabled) return void 0;\n\tif (external) return {\n\t\thref: publicHref,\n\t\texternal: true\n\t};\n\treturn {\n\t\thref: history.createHref(publicHref) || \"/\",\n\t\texternal: false\n\t};\n}\nfunction isSafeInternal(to) {\n\tif (typeof to !== \"string\") return false;\n\tconst zero = to.charCodeAt(0);\n\tif (zero === 47) return to.charCodeAt(1) !== 47;\n\treturn zero === 46;\n}\n/**\n* Creates a typed Link-like component that preserves TanStack Router's\n* navigation semantics and type-safety while delegating rendering to the\n* provided host component.\n*\n* Useful for integrating design system anchors/buttons while keeping\n* router-aware props (eg. `to`, `params`, `search`, `preload`).\n*\n* @param Comp The host component to render (eg. a design-system Link/Button)\n* @returns A router-aware component with the same API as `Link`.\n* @link https://tanstack.com/router/latest/docs/framework/react/guide/custom-link\n*/\nfunction createLink(Comp) {\n\treturn React$1.forwardRef(function CreatedLink(props, ref) {\n\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t...props,\n\t\t\t_asChild: Comp,\n\t\t\tref\n\t\t});\n\t});\n}\n/**\n* A strongly-typed anchor component for declarative navigation.\n* Handles path, search, hash and state updates with optional route preloading\n* and active-state styling.\n*\n* Props:\n* - `preload`: Controls route preloading (eg. 'intent', 'render', 'viewport', true/false)\n* - `preloadDelay`: Delay in ms before preloading on focus, hover, or viewport entry\n* - `activeProps`/`inactiveProps`: Additional props merged when link is active/inactive\n* - `resetScroll`/`hashScrollIntoView`: Control scroll behavior on navigation\n* - `viewTransition`/`startTransition`: Use View Transitions/React transitions for navigation\n* - `ignoreBlocker`: Bypass registered blockers\n*\n* @returns An anchor-like element that navigates without full page reloads.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/linkComponent\n*/\nvar Link = React$1.forwardRef((props, ref) => {\n\tconst { _asChild, ...rest } = props;\n\tconst { type: _type, ...linkProps } = useLinkProps(rest, ref);\n\tconst children = typeof rest.children === \"function\" ? rest.children({ isActive: linkProps[\"data-status\"] === \"active\" }) : rest.children;\n\tif (!_asChild) {\n\t\tconst { disabled: _, ...rest } = linkProps;\n\t\treturn React$1.createElement(\"a\", rest, children);\n\t}\n\treturn React$1.createElement(_asChild, linkProps, children);\n});\n/**\n* Validate and reuse navigation options for `Link`, `navigate` or `redirect`.\n* Accepts a literal options object and returns it typed for later spreading.\n* @example\n* const opts = linkOptions({ to: '/dashboard', search: { tab: 'home' } })\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/linkOptions\n*/\nvar linkOptions = (options) => {\n\treturn options;\n};\n/**\n* Type-check a literal object for use with `Link`, `navigate` or `redirect`.\n* Use to validate and reuse navigation options across your app.\n* @example\n* const opts = linkOptions({ to: '/dashboard', search: { tab: 'home' } })\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/linkOptions\n*/\n//#endregion\nexport { Link, createLink, linkOptions, useLinkProps };\n\n//# sourceMappingURL=link.js.map","import { useRouter } from \"./useRouter.js\";\nimport { useMatch } from \"./useMatch.js\";\nimport { useLoaderData } from \"./useLoaderData.js\";\nimport { useLoaderDeps } from \"./useLoaderDeps.js\";\nimport { useParams } from \"./useParams.js\";\nimport { useSearch } from \"./useSearch.js\";\nimport { useNavigate } from \"./useNavigate.js\";\nimport { useRouteContext } from \"./useRouteContext.js\";\nimport { Link } from \"./link.js\";\nimport { BaseRootRoute, BaseRoute, BaseRouteApi, notFound } from \"@tanstack/router-core\";\nimport React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/route.tsx\n/**\n* Returns a route-specific API that exposes type-safe hooks pre-bound\n* to a single route ID. Useful for consuming a route's APIs from files\n* where the route object isn't directly imported (e.g. code-split files).\n*\n* @param id Route ID string literal for the target route.\n* @returns A `RouteApi` instance bound to the given route ID.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/getRouteApiFunction\n*/\nfunction getRouteApi(id) {\n\treturn new RouteApi({ id });\n}\nvar RouteApi = class extends BaseRouteApi {\n\t/**\n\t* @deprecated Use the `getRouteApi` function instead.\n\t*/\n\tconstructor({ id }) {\n\t\tsuper({ id });\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tfrom: this.id,\n\t\t\t\tstructuralSharing: opts?.structuralSharing\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tstructuralSharing: opts?.structuralSharing,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tstructuralSharing: opts?.structuralSharing,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id,\n\t\t\t\tstrict: false\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id,\n\t\t\t\tstrict: false\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: useRouter().routesById[this.id].fullPath });\n\t\t};\n\t\tthis.notFound = (opts) => {\n\t\t\treturn notFound({\n\t\t\t\trouteId: this.id,\n\t\t\t\t...opts\n\t\t\t});\n\t\t};\n\t\tthis.Link = React.forwardRef((props, ref) => {\n\t\t\tconst fullPath = useRouter().routesById[this.id].fullPath;\n\t\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t\tref,\n\t\t\t\tfrom: fullPath,\n\t\t\t\t...props\n\t\t\t});\n\t\t});\n\t}\n};\nvar Route = class extends BaseRoute {\n\t/**\n\t* @deprecated Use the `createRoute` function instead.\n\t*/\n\tconstructor(options) {\n\t\tsuper(options);\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tfrom: this.id,\n\t\t\t\tstructuralSharing: opts?.structuralSharing\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tstructuralSharing: opts?.structuralSharing,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tstructuralSharing: opts?.structuralSharing,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: this.fullPath });\n\t\t};\n\t\tthis.Link = React.forwardRef((props, ref) => {\n\t\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t\tref,\n\t\t\t\tfrom: this.fullPath,\n\t\t\t\t...props\n\t\t\t});\n\t\t});\n\t}\n};\n/**\n* Creates a non-root Route instance for code-based routing.\n*\n* Use this to define a route that will be composed into a route tree\n* (typically via a parent route's `addChildren`). If you're using file-based\n* routing, prefer `createFileRoute`.\n*\n* @param options Route options (path, component, loader, context, etc.).\n* @returns A Route instance to be attached to the route tree.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRouteFunction\n*/\nfunction createRoute(options) {\n\treturn new Route(options);\n}\n/**\n* Creates a root route factory that requires a router context type.\n*\n* Use when your root route expects `context` to be provided to `createRouter`.\n* The returned function behaves like `createRootRoute` but enforces a context type.\n*\n* @returns A factory function to configure and return a root route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRootRouteWithContextFunction\n*/\nfunction createRootRouteWithContext() {\n\treturn (options) => {\n\t\treturn createRootRoute(options);\n\t};\n}\n/**\n* @deprecated Use the `createRootRouteWithContext` function instead.\n*/\nvar rootRouteWithContext = createRootRouteWithContext;\nvar RootRoute = class extends BaseRootRoute {\n\t/**\n\t* @deprecated `RootRoute` is now an internal implementation detail. Use `createRootRoute()` instead.\n\t*/\n\tconstructor(options) {\n\t\tsuper(options);\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tfrom: this.id,\n\t\t\t\tstructuralSharing: opts?.structuralSharing\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tstructuralSharing: opts?.structuralSharing,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tstructuralSharing: opts?.structuralSharing,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.id\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: this.fullPath });\n\t\t};\n\t\tthis.Link = React.forwardRef((props, ref) => {\n\t\t\treturn /* @__PURE__ */ jsx(Link, {\n\t\t\t\tref,\n\t\t\t\tfrom: this.fullPath,\n\t\t\t\t...props\n\t\t\t});\n\t\t});\n\t}\n};\n/**\n* Creates a root Route instance used to build your route tree.\n*\n* Typically paired with `createRouter({ routeTree })`. If you need to require\n* a typed router context, use `createRootRouteWithContext` instead.\n*\n* @param options Root route options (component, error, pending, etc.).\n* @returns A root route instance.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRootRouteFunction\n*/\nfunction createRootRoute(options) {\n\treturn new RootRoute(options);\n}\nfunction createRouteMask(opts) {\n\treturn opts;\n}\nvar NotFoundRoute = class extends Route {\n\tconstructor(options) {\n\t\tsuper({\n\t\t\t...options,\n\t\t\tid: \"404\"\n\t\t});\n\t}\n};\n//#endregion\nexport { NotFoundRoute, RootRoute, Route, RouteApi, createRootRoute, createRootRouteWithContext, createRoute, createRouteMask, getRouteApi, rootRouteWithContext };\n\n//# sourceMappingURL=route.js.map","import { useRouter } from \"./useRouter.js\";\nimport { useMatch } from \"./useMatch.js\";\nimport { useLoaderData } from \"./useLoaderData.js\";\nimport { useLoaderDeps } from \"./useLoaderDeps.js\";\nimport { useParams } from \"./useParams.js\";\nimport { useSearch } from \"./useSearch.js\";\nimport { useNavigate } from \"./useNavigate.js\";\nimport { useRouteContext } from \"./useRouteContext.js\";\nimport { createRoute } from \"./route.js\";\n//#region src/fileRoute.ts\n/**\n* Creates a file-based Route factory for a given path.\n*\n* Used by TanStack Router's file-based routing to associate a file with a\n* route. The returned function accepts standard route options. In normal usage\n* the `path` string is inserted and maintained by the `tsr` generator.\n*\n* @param path File path literal for the route (usually auto-generated).\n* @returns A function that accepts Route options and returns a Route instance.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createFileRouteFunction\n*/\nfunction createFileRoute(path) {\n\treturn (options) => {\n\t\tconst route = createRoute(options);\n\t\troute.isRoot = false;\n\t\treturn route;\n\t};\n}\n/** \n@deprecated It's no longer recommended to use the `FileRoute` class directly.\nInstead, use `createFileRoute('/path/to/file')(options)` to create a file route.\n*/\nvar FileRoute = class {\n\tconstructor(path, _opts) {\n\t\tthis.path = path;\n\t\tthis.createRoute = (options) => {\n\t\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\t\tif (!this.silent) console.warn(\"Warning: FileRoute is deprecated and will be removed in the next major version. Use the createFileRoute(path)(options) function instead.\");\n\t\t\t}\n\t\t\tconst route = createRoute(options);\n\t\t\troute.isRoot = false;\n\t\t\treturn route;\n\t\t};\n\t\tthis.silent = _opts?.silent;\n\t}\n};\n/**\n@deprecated It's recommended not to split loaders into separate files.\nInstead, place the loader function in the main route file via `createFileRoute`.\n*/\nfunction FileRouteLoader(_path) {\n\tif (process.env.NODE_ENV !== \"production\") console.warn(`Warning: FileRouteLoader is deprecated and will be removed in the next major version. Please place the loader function in the main route file, inside the \\`createFileRoute('/path/to/file')(options)\\` options`);\n\treturn (loaderFn) => loaderFn;\n}\nvar LazyRoute = class {\n\tconstructor(opts) {\n\t\tthis.useMatch = (opts) => {\n\t\t\treturn useMatch({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tfrom: this.options.id,\n\t\t\t\tstructuralSharing: opts?.structuralSharing\n\t\t\t});\n\t\t};\n\t\tthis.useRouteContext = (opts) => {\n\t\t\treturn useRouteContext({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.options.id\n\t\t\t});\n\t\t};\n\t\tthis.useSearch = (opts) => {\n\t\t\treturn useSearch({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tstructuralSharing: opts?.structuralSharing,\n\t\t\t\tfrom: this.options.id\n\t\t\t});\n\t\t};\n\t\tthis.useParams = (opts) => {\n\t\t\treturn useParams({\n\t\t\t\tselect: opts?.select,\n\t\t\t\tstructuralSharing: opts?.structuralSharing,\n\t\t\t\tfrom: this.options.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderDeps = (opts) => {\n\t\t\treturn useLoaderDeps({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.options.id\n\t\t\t});\n\t\t};\n\t\tthis.useLoaderData = (opts) => {\n\t\t\treturn useLoaderData({\n\t\t\t\t...opts,\n\t\t\t\tfrom: this.options.id\n\t\t\t});\n\t\t};\n\t\tthis.useNavigate = () => {\n\t\t\treturn useNavigate({ from: useRouter().routesById[this.options.id].fullPath });\n\t\t};\n\t\tthis.options = opts;\n\t}\n};\n/**\n* Creates a lazily-configurable code-based route stub by ID.\n*\n* Use this for code-splitting with code-based routes. The returned function\n* accepts only non-critical route options like `component`, `pendingComponent`,\n* `errorComponent`, and `notFoundComponent` which are applied when the route\n* is matched.\n*\n* @param id Route ID string literal to associate with the lazy route.\n* @returns A function that accepts lazy route options and returns a `LazyRoute`.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createLazyRouteFunction\n*/\nfunction createLazyRoute(id) {\n\treturn (opts) => {\n\t\treturn new LazyRoute({\n\t\t\tid,\n\t\t\t...opts\n\t\t});\n\t};\n}\n/**\n* Creates a lazily-configurable file-based route stub by file path.\n*\n* Use this for code-splitting with file-based routes (eg. `.lazy.tsx` files).\n* The returned function accepts only non-critical route options like\n* `component`, `pendingComponent`, `errorComponent`, and `notFoundComponent`.\n*\n* @param id File path literal for the route file.\n* @returns A function that accepts lazy route options and returns a `LazyRoute`.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createLazyFileRouteFunction\n*/\nfunction createLazyFileRoute(id) {\n\tif (typeof id === \"object\") return new LazyRoute(id);\n\treturn (opts) => new LazyRoute({\n\t\tid,\n\t\t...opts\n\t});\n}\n//#endregion\nexport { FileRoute, FileRouteLoader, LazyRoute, createFileRoute, createLazyFileRoute, createLazyRoute };\n\n//# sourceMappingURL=fileRoute.js.map","import { reactUse } from \"./utils.js\";\nimport { isModuleNotFoundError } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\n//#region src/lazyRouteComponent.tsx\n/**\n* Wrap a dynamic import to create a route component that supports\n* `.preload()` and friendly reload-on-module-missing behavior.\n*\n* @param importer Function returning a module promise\n* @param exportName Named export to use (default: `default`)\n* @returns A lazy route component compatible with TanStack Router\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/lazyRouteComponentFunction\n*/\nfunction lazyRouteComponent(importer, exportName) {\n\tlet loadPromise;\n\tlet comp;\n\tlet error;\n\tconst load = () => {\n\t\tif (!loadPromise) {\n\t\t\terror = void 0;\n\t\t\tloadPromise = importer().then((res) => {\n\t\t\t\tif (!(isServer ?? typeof window === \"undefined\")) {\n\t\t\t\t\tloadPromise = void 0;\n\t\t\t\t\tlazyComp.preload = void 0;\n\t\t\t\t}\n\t\t\t\tcomp = res[exportName ?? \"default\"];\n\t\t\t}).catch((err) => {\n\t\t\t\tloadPromise = void 0;\n\t\t\t\terror = err;\n\t\t\t});\n\t\t}\n\t\treturn loadPromise;\n\t};\n\tconst lazyComp = function Lazy(props) {\n\t\tif (error) {\n\t\t\tif (isModuleNotFoundError(error) && !(isServer ?? typeof window === \"undefined\") && typeof sessionStorage !== \"undefined\") {\n\t\t\t\tconst storageKey = `tanstack_router_reload:${error.message}`;\n\t\t\t\tif (!sessionStorage.getItem(storageKey)) {\n\t\t\t\t\tsessionStorage.setItem(storageKey, \"1\");\n\t\t\t\t\twindow.location.reload();\n\t\t\t\t\tthrow new Promise(() => {});\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tif (!comp) if (reactUse) reactUse(load());\n\t\telse throw load();\n\t\treturn React$1.createElement(comp, props);\n\t};\n\tlazyComp.preload = load;\n\treturn lazyComp;\n}\n//#endregion\nexport { lazyRouteComponent };\n\n//# sourceMappingURL=lazyRouteComponent.js.map","import { CatchBoundary } from \"./CatchBoundary.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { isNotFound } from \"@tanstack/router-core\";\nimport \"react\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { useStore } from \"@tanstack/react-store\";\n//#region src/not-found.tsx\nfunction CatchNotFound(props) {\n\tconst router = useRouter();\n\tif (isServer ?? router.isServer) {\n\t\tconst resetKey = `not-found-${router.stores.location.get().pathname}-${router.stores.status.get()}`;\n\t\treturn /* @__PURE__ */ jsx(CatchBoundary, {\n\t\t\tgetResetKey: () => resetKey,\n\t\t\tonCatch: (error, errorInfo) => {\n\t\t\t\tif (isNotFound(error)) props.onCatch?.(error, errorInfo);\n\t\t\t\telse throw error;\n\t\t\t},\n\t\t\terrorComponent: ({ error }) => {\n\t\t\t\tif (isNotFound(error)) return props.fallback?.(error);\n\t\t\t\telse throw error;\n\t\t\t},\n\t\t\tchildren: props.children\n\t\t});\n\t}\n\tconst resetKey = `not-found-${useStore(router.stores.location, (location) => location.pathname)}-${useStore(router.stores.status, (status) => status)}`;\n\treturn /* @__PURE__ */ jsx(CatchBoundary, {\n\t\tgetResetKey: () => resetKey,\n\t\tonCatch: (error, errorInfo) => {\n\t\t\tif (isNotFound(error)) props.onCatch?.(error, errorInfo);\n\t\t\telse throw error;\n\t\t},\n\t\terrorComponent: ({ error }) => {\n\t\t\tif (isNotFound(error)) return props.fallback?.(error);\n\t\t\telse throw error;\n\t\t},\n\t\tchildren: props.children\n\t});\n}\nfunction DefaultGlobalNotFound() {\n\treturn /* @__PURE__ */ jsx(\"p\", { children: \"Not Found\" });\n}\n//#endregion\nexport { CatchNotFound, DefaultGlobalNotFound };\n\n//# sourceMappingURL=not-found.js.map","import { useRouter } from \"./useRouter.js\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/ScriptOnce.tsx\n/**\n* Server-only helper to emit a script tag exactly once during SSR.\n*/\nfunction ScriptOnce({ children }) {\n\tconst router = useRouter();\n\tif (!(isServer ?? router.isServer)) return null;\n\treturn /* @__PURE__ */ jsx(\"script\", {\n\t\tnonce: router.options.ssr?.nonce,\n\t\tdangerouslySetInnerHTML: { __html: children + \";document.currentScript.remove()\" }\n\t});\n}\n//#endregion\nexport { ScriptOnce };\n\n//# sourceMappingURL=ScriptOnce.js.map","import \"react\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\n//#region src/SafeFragment.tsx\nfunction SafeFragment(props) {\n\treturn /* @__PURE__ */ jsx(Fragment, { children: props.children });\n}\n//#endregion\nexport { SafeFragment };\n\n//# sourceMappingURL=SafeFragment.js.map","import { wrapInNonRouteComponentContext } from \"./nonRouteComponentContext.js\";\nimport { DefaultGlobalNotFound } from \"./not-found.js\";\nimport \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/renderRouteNotFound.tsx\n/**\n* Renders a not found component for a route when no matching route is found.\n*\n* @param router - The router instance containing the route configuration\n* @param route - The route that triggered the not found state\n* @param data - Additional data to pass to the not found component\n* @returns The rendered not found component or a default fallback component\n*/\nfunction renderRouteNotFound(router, route, data) {\n\tif (!route.options.notFoundComponent) {\n\t\tif (router.options.defaultNotFoundComponent) {\n\t\t\tconst notFoundElement = /* @__PURE__ */ jsx(router.options.defaultNotFoundComponent, { ...data });\n\t\t\treturn process.env.NODE_ENV !== \"production\" ? wrapInNonRouteComponentContext(notFoundElement, \"notFoundComponent\") : notFoundElement;\n\t\t}\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tif (!route.options.notFoundComponent) console.warn(`Warning: A notFoundError was encountered on the route with ID \"${route.id}\", but a notFoundComponent option was not configured, nor was a router level defaultNotFoundComponent configured. Consider configuring at least one of these to avoid TanStack Router's overly generic defaultNotFoundComponent (<p>Not Found</p>)`);\n\t\t}\n\t\treturn /* @__PURE__ */ jsx(DefaultGlobalNotFound, {});\n\t}\n\tconst notFoundElement = /* @__PURE__ */ jsx(route.options.notFoundComponent, { ...data });\n\treturn process.env.NODE_ENV !== \"production\" ? wrapInNonRouteComponentContext(notFoundElement, \"notFoundComponent\") : notFoundElement;\n}\n//#endregion\nexport { renderRouteNotFound };\n\n//# sourceMappingURL=renderRouteNotFound.js.map","//#region src/scroll-restoration-script/client.ts\nfunction getScrollRestorationScriptForRouter(_router) {\n\treturn null;\n}\n//#endregion\nexport { getScrollRestorationScriptForRouter };\n\n//# sourceMappingURL=client.js.map","import { useRouter } from \"./useRouter.js\";\nimport { ScriptOnce } from \"./ScriptOnce.js\";\nimport { jsx } from \"react/jsx-runtime\";\nimport { getScrollRestorationScriptForRouter } from \"@tanstack/router-core/scroll-restoration-script\";\n//#region src/scroll-restoration.tsx\nfunction ScrollRestoration() {\n\tconst script = getScrollRestorationScriptForRouter(useRouter());\n\tif (!script) return null;\n\treturn /* @__PURE__ */ jsx(ScriptOnce, { children: script });\n}\n//#endregion\nexport { ScrollRestoration };\n\n//# sourceMappingURL=scroll-restoration.js.map","\"use client\";\nimport { nonRouteComponentContext, wrapInNonRouteComponentContext } from \"./nonRouteComponentContext.js\";\nimport { CatchBoundary, ErrorComponent } from \"./CatchBoundary.js\";\nimport { ClientOnly } from \"./ClientOnly.js\";\nimport { matchContext } from \"./matchContext.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { CatchNotFound } from \"./not-found.js\";\nimport { SafeFragment } from \"./SafeFragment.js\";\nimport { renderRouteNotFound } from \"./renderRouteNotFound.js\";\nimport { ScrollRestoration } from \"./scroll-restoration.js\";\nimport { isNotFound, rootRouteId } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nimport { useStore } from \"@tanstack/react-store\";\n//#region src/Match.tsx\nfunction renderPending(router, route) {\n\tconst PendingComponent = route?.options.pendingComponent ?? router.options.defaultPendingComponent;\n\tif (!PendingComponent) return null;\n\tconst pendingElement = /* @__PURE__ */ jsx(PendingComponent, {});\n\treturn process.env.NODE_ENV !== \"production\" ? wrapInNonRouteComponentContext(pendingElement, \"pendingComponent\") : pendingElement;\n}\nvar outletMatchSelectionEqual = (a, b) => a[0] === b[0] && a[1] === b[1];\nvar canWrapInSuspense = (router, route, ssr) => !route.isRoot || route.options.shellComponent || route.options.wrapInSuspense || ssr === false || ssr === \"data-only\" || !((isServer ?? router.isServer) || router.ssr);\nvar Match = React$1.memo(function MatchImpl({ routeId }) {\n\tconst router = useRouter();\n\tif (isServer ?? router.isServer) return /* @__PURE__ */ jsx(MatchView, {\n\t\trouter,\n\t\tmatch: router.stores.byRoute.get(routeId).get()\n\t});\n\treturn /* @__PURE__ */ jsx(MatchView, {\n\t\trouter,\n\t\tmatch: useStore(router.stores.getMatchStore(routeId), (value) => value)\n\t});\n});\nfunction MatchView({ router, match }) {\n\tconst route = router.routesById[match.routeId];\n\tconst pendingElement = renderPending(router, route);\n\tconst routeErrorComponent = route.options.errorComponent ?? router.options.defaultErrorComponent;\n\tconst routeOnCatch = route.options.onCatch ?? router.options.defaultOnCatch;\n\tconst routeNotFoundComponent = route.isRoot ? route.options.notFoundComponent ?? router.options.notFoundRoute?.options.component : route.options.notFoundComponent;\n\tconst resolvedNoSsr = match.ssr === false || match.ssr === \"data-only\";\n\tconst ResolvedSuspenseBoundary = canWrapInSuspense(router, route, match.ssr) && (route.options.wrapInSuspense ?? pendingElement ?? (route.options.errorComponent?.preload || resolvedNoSsr)) ? React$1.Suspense : SafeFragment;\n\tconst ResolvedCatchBoundary = routeErrorComponent ? CatchBoundary : SafeFragment;\n\tconst ResolvedNotFoundBoundary = routeNotFoundComponent ? CatchNotFound : SafeFragment;\n\treturn /* @__PURE__ */ jsxs(route.isRoot ? route.options.shellComponent ?? SafeFragment : SafeFragment, { children: [/* @__PURE__ */ jsx(matchContext.Provider, {\n\t\tvalue: match.routeId,\n\t\tchildren: /* @__PURE__ */ jsx(ResolvedSuspenseBoundary, {\n\t\t\tfallback: pendingElement,\n\t\t\tchildren: /* @__PURE__ */ jsx(ResolvedCatchBoundary, {\n\t\t\t\tgetResetKey: () => match,\n\t\t\t\terrorComponent: routeErrorComponent,\n\t\t\t\tonCatch: (error, errorInfo) => {\n\t\t\t\t\tif (isNotFound(error)) {\n\t\t\t\t\t\terror.routeId ??= match.routeId;\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.warn(`Warning: Error in route match: ${match.id}`);\n\t\t\t\t\trouteOnCatch?.(error, errorInfo);\n\t\t\t\t},\n\t\t\t\tchildren: /* @__PURE__ */ jsx(ResolvedNotFoundBoundary, {\n\t\t\t\t\tfallback: (error) => {\n\t\t\t\t\t\terror.routeId ??= match.routeId;\n\t\t\t\t\t\tif (error.routeId !== match.routeId) throw error;\n\t\t\t\t\t\tconst notFoundElement = React$1.createElement(routeNotFoundComponent, error);\n\t\t\t\t\t\treturn process.env.NODE_ENV !== \"production\" ? wrapInNonRouteComponentContext(notFoundElement, \"notFoundComponent\") : notFoundElement;\n\t\t\t\t\t},\n\t\t\t\t\tchildren: resolvedNoSsr ? /* @__PURE__ */ jsx(ClientOnly, {\n\t\t\t\t\t\tfallback: pendingElement,\n\t\t\t\t\t\tchildren: /* @__PURE__ */ jsx(MatchInner, { match })\n\t\t\t\t\t}) : /* @__PURE__ */ jsx(MatchInner, { match })\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t}), (isServer ?? router.isServer) && route.parentRoute?.id === rootRouteId && router.options.scrollRestoration ? /* @__PURE__ */ jsx(ScrollRestoration, {}) : null] });\n}\nvar MatchInner = React$1.memo(function MatchInnerImpl({ match }) {\n\tconst router = useRouter();\n\tconst routeId = match.routeId;\n\tconst route = router.routesById[routeId];\n\tconst key = React$1.useMemo(() => {\n\t\tconst remountDeps = (route.options.remountDeps ?? router.options.defaultRemountDeps)?.({\n\t\t\trouteId,\n\t\t\tloaderDeps: match.loaderDeps,\n\t\t\tparams: match._strictParams,\n\t\t\tsearch: match._strictSearch\n\t\t});\n\t\treturn remountDeps ? JSON.stringify(remountDeps) : void 0;\n\t}, [\n\t\trouteId,\n\t\tmatch.loaderDeps,\n\t\tmatch._strictParams,\n\t\tmatch._strictSearch,\n\t\troute.options.remountDeps,\n\t\trouter.options.defaultRemountDeps\n\t]);\n\tconst out = React$1.useMemo(() => {\n\t\tconst Comp = route.options.component ?? router.options.defaultComponent;\n\t\treturn Comp ? /* @__PURE__ */ jsx(Comp, {}, key) : /* @__PURE__ */ jsx(Outlet, {});\n\t}, [\n\t\tkey,\n\t\troute.options.component,\n\t\trouter.options.defaultComponent\n\t]);\n\tif (match.status === \"pending\") {\n\t\tif (router.ssr && !canWrapInSuspense(router, route, match.ssr)) return out;\n\t\tif (router._tx) throw router._tx[5];\n\t\treturn renderPending(router, route);\n\t}\n\tif (match.status === \"notFound\") return renderRouteNotFound(router, route, match.error);\n\tif (match.status === \"error\") {\n\t\tif (isServer ?? router.isServer) {\n\t\t\tconst errorElement = /* @__PURE__ */ jsx((route.options.errorComponent ?? router.options.defaultErrorComponent) || ErrorComponent, {\n\t\t\t\terror: match.error,\n\t\t\t\treset: void 0,\n\t\t\t\tinfo: { componentStack: \"\" }\n\t\t\t});\n\t\t\treturn process.env.NODE_ENV !== \"production\" ? wrapInNonRouteComponentContext(errorElement, \"errorComponent\") : errorElement;\n\t\t}\n\t\tthrow match.error;\n\t}\n\treturn out;\n});\n/**\n* Render the next child match in the route tree. Typically used inside\n* a route component to render nested routes.\n*\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/outletComponent\n*/\nvar Outlet = React$1.memo(function OutletImpl() {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst nonRouteComponent = React$1.useContext(nonRouteComponentContext);\n\t\tif (nonRouteComponent) console.warn(`Warning: An <Outlet /> was rendered inside a ${nonRouteComponent}. <Outlet /> should only be rendered inside a route component.`);\n\t}\n\tconst router = useRouter();\n\tconst routeId = React$1.useContext(matchContext);\n\tlet parentGlobalNotFound;\n\tlet parentNotFoundError;\n\tlet childRouteId;\n\tif (isServer ?? router.isServer) {\n\t\tconst matches = router.stores.matches.get();\n\t\tconst parentIndex = matches.findIndex((match) => match.routeId === routeId);\n\t\tconst parentMatch = matches[parentIndex];\n\t\tparentGlobalNotFound = !!parentMatch._notFound;\n\t\tparentNotFoundError = parentMatch.error;\n\t\tchildRouteId = matches[parentIndex + 1]?.routeId;\n\t} else {\n\t\tconst parentMatchStore = router.stores.getMatchStore(routeId);\n\t\t[parentGlobalNotFound, parentNotFoundError] = useStore(parentMatchStore, (match) => [!!match._notFound, match.error], outletMatchSelectionEqual);\n\t\tchildRouteId = useStore(router.stores.ids, (ids) => {\n\t\t\treturn ids[ids.indexOf(routeId) + 1];\n\t\t});\n\t}\n\tif (parentGlobalNotFound) return renderRouteNotFound(router, router.routesById[routeId], parentNotFoundError);\n\tif (!childRouteId) return null;\n\tconst nextMatch = /* @__PURE__ */ jsx(Match, { routeId: childRouteId });\n\tif (routeId === rootRouteId) return /* @__PURE__ */ jsx(React$1.Suspense, {\n\t\tfallback: renderPending(router),\n\t\tchildren: nextMatch\n\t});\n\treturn nextMatch;\n});\n//#endregion\nexport { Match, Outlet, renderPending };\n\n//# sourceMappingURL=Match.js.map","\"use client\";\nimport { useLayoutEffect } from \"./utils.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { getLocationChangeInfo, trimPathRight } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\n//#region src/Transitioner.tsx\nfunction settleOwner(owner, rendered) {\n\tconst settle = owner[1];\n\towner.length = 0;\n\tsettle?.(rendered);\n}\nfunction Transitioner({ t }) {\n\tconst router = useRouter();\n\tconst acknowledgement = router._rendered ??= [];\n\tconst mounted = process.env.NODE_ENV !== \"production\" ? React$1.useRef(false) : void 0;\n\trouter.startTransition = (fn, expected) => new Promise((resolve) => {\n\t\tsettleOwner(acknowledgement, false);\n\t\tacknowledgement.push(expected, resolve);\n\t\tt(router);\n\t\tReact$1.startTransition(fn);\n\t});\n\tuseLayoutEffect(() => {\n\t\tconst unsub = router.history.subscribe(router.load);\n\t\tif (mounted?.current) return unsub;\n\t\tif (mounted) mounted.current = true;\n\t\trouter.updateLatestLocation();\n\t\tconst location = router.latestLocation;\n\t\tconst nextLocation = router.buildLocation({\n\t\t\tto: location.pathname,\n\t\t\tsearch: true,\n\t\t\tparams: true,\n\t\t\thash: true,\n\t\t\tstate: true,\n\t\t\t_includeValidateSearch: true\n\t\t});\n\t\tif (trimPathRight(location.publicHref) !== trimPathRight(nextLocation.publicHref)) {\n\t\t\trouter.commitLocation({\n\t\t\t\t...nextLocation,\n\t\t\t\treplace: true,\n\t\t\t\tignoreBlocker: true\n\t\t\t});\n\t\t\treturn unsub;\n\t\t}\n\t\tconst resolvedLocation = router.stores.resolvedLocation.get();\n\t\tif (resolvedLocation?.href === location.href && resolvedLocation.state.__TSR_key === location.state.__TSR_key) acknowledgement.push(router.stores.matches.get(), (rendered) => {\n\t\t\tif (rendered) router.emit({\n\t\t\t\ttype: \"onRendered\",\n\t\t\t\t...getLocationChangeInfo(resolvedLocation, resolvedLocation)\n\t\t\t});\n\t\t});\n\t\telse if (!router._tx) router.load({ sync: true }).catch(console.error);\n\t\treturn unsub;\n\t}, [router, router.history]);\n\treturn null;\n}\n//#endregion\nexport { Transitioner, settleOwner };\n\n//# sourceMappingURL=Transitioner.js.map","\"use client\";\nimport { useLayoutEffect } from \"./utils.js\";\nimport { CatchBoundary } from \"./CatchBoundary.js\";\nimport { matchContext } from \"./matchContext.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { useStructuralSharing } from \"./useMatch.js\";\nimport { Transitioner, settleOwner } from \"./Transitioner.js\";\nimport { SafeFragment } from \"./SafeFragment.js\";\nimport { Match, renderPending } from \"./Match.js\";\nimport { rootRouteId } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { useStore } from \"@tanstack/react-store\";\n//#region src/Matches.tsx\n/**\n* Internal component that renders the router's active match tree with\n* suspense, error, and not-found boundaries. Rendered by `RouterProvider`.\n*/\nfunction Matches() {\n\tconst router = useRouter();\n\tconst rootRoute = router.routesById[rootRouteId];\n\tconst pendingElement = renderPending(router, rootRoute);\n\tconst ResolvedSuspense = (isServer ?? router.isServer) || router.ssr ? SafeFragment : React$1.Suspense;\n\tconst inner = /* @__PURE__ */ jsxs(Fragment, { children: [!(isServer ?? router.isServer) && /* @__PURE__ */ jsx(Transitioner, { t: React$1.useState()[1] }), /* @__PURE__ */ jsx(ResolvedSuspense, {\n\t\tfallback: pendingElement,\n\t\tchildren: /* @__PURE__ */ jsx(MatchesInner, {})\n\t})] });\n\treturn router.options.InnerWrap ? /* @__PURE__ */ jsx(router.options.InnerWrap, { children: inner }) : inner;\n}\nfunction MatchesInner() {\n\tconst router = useRouter();\n\tconst acknowledgement = router._rendered;\n\tconst matches = isServer ?? router.isServer ? router.stores.matches.get() : useStore(router.stores.matches, (value) => acknowledgement[0] ?? value);\n\tconst match = matches[0];\n\tconst routeId = match?.routeId;\n\tuseLayoutEffect(() => {\n\t\tif (acknowledgement[0] === matches) settleOwner(acknowledgement, true);\n\t}, [acknowledgement, matches]);\n\tconst matchComponent = routeId ? /* @__PURE__ */ jsx(Match, { routeId }) : null;\n\treturn /* @__PURE__ */ jsx(matchContext.Provider, {\n\t\tvalue: routeId,\n\t\tchildren: router.options.disableGlobalCatchBoundary ? matchComponent : /* @__PURE__ */ jsx(CatchBoundary, {\n\t\t\tgetResetKey: () => match,\n\t\t\tonCatch: process.env.NODE_ENV !== \"production\" ? (error) => {\n\t\t\t\tconsole.warn(`Warning: The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`);\n\t\t\t\tconsole.warn(`Warning: ${error.message || error.toString()}`);\n\t\t\t} : void 0,\n\t\t\tchildren: matchComponent\n\t\t})\n\t});\n}\n/**\n* Create a matcher function for testing locations against route definitions.\n*\n* The returned function accepts standard navigation options (`to`, `params`,\n* `search`, etc.) and returns either `false` (no match) or the matched params\n* object when the route matches the current or pending location.\n*\n* Useful for conditional rendering and active UI states because it subscribes\n* the component to the router state used for matching. The returned function's\n* identity changes when that state changes. For imperative checks in event\n* handlers, get the router with `useRouter` and call `router.matchRoute(...)`\n* to avoid that subscription.\n*\n* @returns A `matchRoute(options)` function that returns `false` or params.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchRouteHook\n*/\nfunction useMatchRoute() {\n\tconst router = useRouter();\n\tif (isServer ?? router.isServer) return (opts) => {\n\t\tconst { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts;\n\t\treturn router.matchRoute(rest, {\n\t\t\tpending,\n\t\t\tcaseSensitive,\n\t\t\tfuzzy,\n\t\t\tincludeSearch\n\t\t});\n\t};\n\treturn React$1.useCallback((opts) => {\n\t\tconst { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts;\n\t\treturn router.matchRoute(rest, {\n\t\t\tpending,\n\t\t\tcaseSensitive,\n\t\t\tfuzzy,\n\t\t\tincludeSearch\n\t\t});\n\t}, [\n\t\trouter,\n\t\tuseStore(router.stores.location, (location) => location.href),\n\t\tuseStore(router.stores.resolvedLocation, (location) => location?.href),\n\t\tuseStore(router.stores.status, (status) => status)\n\t]);\n}\n/**\n* Component that conditionally renders its children based on whether a route\n* matches the provided `from`/`to` options. If `children` is a function, it\n* receives the matched params object.\n*\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/matchRouteComponent\n*/\nfunction MatchRoute(props) {\n\tconst params = useMatchRoute()(props);\n\tif (typeof props.children === \"function\") return props.children(params);\n\treturn params ? props.children : null;\n}\nfunction useMatches(opts) {\n\tconst router = useRouter();\n\tif (isServer ?? router.isServer) {\n\t\tconst matches = router.stores.matches.get();\n\t\treturn opts?.select ? opts.select(matches) : matches;\n\t}\n\treturn useStore(router.stores.matches, useStructuralSharing(opts, router));\n}\n/**\n* Read the presented route matches above the current match, or select a\n* derived value from them.\n*/\nfunction useParentMatches(opts) {\n\tconst contextRouteId = React$1.useContext(matchContext);\n\treturn useMatches({\n\t\tselect: (matches) => {\n\t\t\tmatches = matches.slice(0, matches.findIndex((d) => d.routeId === contextRouteId));\n\t\t\treturn opts?.select ? opts.select(matches) : matches;\n\t\t},\n\t\tstructuralSharing: opts?.structuralSharing\n\t});\n}\n/**\n* Read the presented route matches below the current match, or select a\n* derived value from them.\n*/\nfunction useChildMatches(opts) {\n\tconst contextRouteId = React$1.useContext(matchContext);\n\treturn useMatches({\n\t\tselect: (matches) => {\n\t\t\tmatches = matches.slice(matches.findIndex((d) => d.routeId === contextRouteId) + 1);\n\t\t\treturn opts?.select ? opts.select(matches) : matches;\n\t\t},\n\t\tstructuralSharing: opts?.structuralSharing\n\t});\n}\n//#endregion\nexport { MatchRoute, Matches, useChildMatches, useMatchRoute, useMatches, useParentMatches };\n\n//# sourceMappingURL=Matches.js.map","import { createNonReactiveMutableStore, createNonReactiveReadonlyStore } from \"@tanstack/router-core\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { batch, createAtom } from \"@tanstack/react-store\";\n//#region src/routerStores.ts\nvar getStoreFactory = (opts) => {\n\tif (isServer ?? opts.isServer) return {\n\t\tcreateMutableStore: createNonReactiveMutableStore,\n\t\tcreateReadonlyStore: createNonReactiveReadonlyStore,\n\t\tbatch: (fn) => fn()\n\t};\n\treturn {\n\t\tcreateMutableStore: createAtom,\n\t\tcreateReadonlyStore: createAtom,\n\t\tbatch\n\t};\n};\n//#endregion\nexport { getStoreFactory };\n\n//# sourceMappingURL=routerStores.js.map","import { getStoreFactory } from \"./routerStores.js\";\nimport { RouterCore } from \"@tanstack/router-core\";\n//#region src/router.ts\n/**\n* Creates a new Router instance for React.\n*\n* Pass the returned router to `RouterProvider` to enable routing.\n* Notable options: `routeTree` (your route definitions) and `context`\n* (required if the root route was created with `createRootRouteWithContext`).\n*\n* @param options Router options used to configure the router.\n* @returns A Router instance to be provided to `RouterProvider`.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRouterFunction\n*/\nvar createRouter = (options) => {\n\treturn new Router(options);\n};\nvar Router = class extends RouterCore {\n\tconstructor(options) {\n\t\tsuper(options, getStoreFactory);\n\t}\n};\n//#endregion\nexport { Router, createRouter };\n\n//# sourceMappingURL=router.js.map","\"use client\";\nimport { routerContext } from \"./routerContext.js\";\nimport { Matches } from \"./Matches.js\";\nimport { hasKeys } from \"@tanstack/router-core\";\nimport \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/RouterProvider.tsx\n/**\n* Low-level provider that places the router into React context and optionally\n* updates router options from props. Most apps should use `RouterProvider`.\n*/\nfunction RouterContextProvider({ router, children, ...rest }) {\n\tif (hasKeys(rest)) router.update({\n\t\t...router.options,\n\t\t...rest,\n\t\tcontext: {\n\t\t\t...router.options.context,\n\t\t\t...rest.context\n\t\t}\n\t});\n\tconst provider = /* @__PURE__ */ jsx(routerContext.Provider, {\n\t\tvalue: router,\n\t\tchildren\n\t});\n\tif (router.options.Wrap) return /* @__PURE__ */ jsx(router.options.Wrap, { children: provider });\n\treturn provider;\n}\n/**\n* Renders the current match presentation and provides the router to the React\n* tree via context.\n*\n* Accepts the same options as `createRouter` via props to update the router\n* instance after creation.\n*\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/createRouterFunction\n*/\nfunction RouterProvider({ router, ...rest }) {\n\treturn /* @__PURE__ */ jsx(RouterContextProvider, {\n\t\trouter,\n\t\t...rest,\n\t\tchildren: /* @__PURE__ */ jsx(Matches, {})\n\t});\n}\n//#endregion\nexport { RouterContextProvider, RouterProvider };\n\n//# sourceMappingURL=RouterProvider.js.map","\"use client\";\nimport { useRouter } from \"./useRouter.js\";\nimport { useStructuralSharing } from \"./useMatch.js\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { useStore } from \"@tanstack/react-store\";\n//#region src/useLocation.tsx\n/**\n* Read the current location from the router state with optional selection.\n* Useful for subscribing to just the pieces of location you care about.\n*\n* Options:\n* - `select`: Project the `location` object to a derived value\n* - `structuralSharing`: Enable structural sharing for stable references\n*\n* @returns The current location (or selected value).\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useLocationHook\n*/\nfunction useLocation(opts) {\n\tconst router = useRouter();\n\tif (isServer ?? router.isServer) {\n\t\tconst location = router.stores.location.get();\n\t\treturn opts?.select ? opts.select(location) : location;\n\t}\n\treturn useStore(router.stores.location, useStructuralSharing(opts, router));\n}\n//#endregion\nexport { useLocation };\n\n//# sourceMappingURL=useLocation.js.map","//#region src/byok/storage.ts\nfunction memoryStorage() {\n\treturn {\n\t\tid: \"memory\",\n\t\tlabel: \"Session only (not saved)\",\n\t\tpersistent: false,\n\t\twarning: \"Keys stay in memory for this tab only. They are not saved across reloads.\",\n\t\tload: () => ({}),\n\t\tsave: () => {},\n\t\tclear: () => {}\n\t};\n}\n//#endregion\nexport { memoryStorage };\n\n//# sourceMappingURL=storage.js.map","//#region src/byok/providers.ts\n/** `[a-z][a-z0-9-]{0,63}` — lowercase, no underscores, max 64 chars. */\nvar BYOK_PROVIDER_ID_PATTERN = /^[a-z][a-z0-9-]{0,63}$/;\nvar BYOK_HEADER_PREFIX = \"x-byok-\";\nfunction isProviderId(value) {\n\treturn typeof value === \"string\" && BYOK_PROVIDER_ID_PATTERN.test(value);\n}\nfunction resolveProviderId(provider) {\n\treturn typeof provider === \"string\" ? provider : provider.id;\n}\nfunction byokHeaderName(provider) {\n\tif (!isProviderId(provider)) throw new Error(`Invalid BYOK provider id: ${provider}`);\n\treturn `${BYOK_HEADER_PREFIX}${provider}`;\n}\n//#endregion\nexport { BYOK_HEADER_PREFIX, BYOK_PROVIDER_ID_PATTERN, byokHeaderName, isProviderId, resolveProviderId };\n\n//# sourceMappingURL=providers.js.map","import { isProviderId, resolveProviderId } from \"./providers.js\";\n//#region src/byok/missing.ts\nfunction isByokMissingBody(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tif (!(\"error\" in value)) return false;\n\tconst error = value.error;\n\tif (typeof error !== \"object\" || error === null) return false;\n\tif (!(\"type\" in error) || error.type !== \"byok_missing\") return false;\n\tif (!(\"provider\" in error) || typeof error.provider !== \"string\") return false;\n\tif (!isProviderId(error.provider)) return false;\n\tif (!(\"message\" in error) || typeof error.message !== \"string\") return false;\n\treturn true;\n}\nfunction byokMissing(provider) {\n\tconst id = resolveProviderId(provider);\n\tif (!isProviderId(id)) throw new Error(`Invalid BYOK provider id: ${id}`);\n\tconst body = { error: {\n\t\ttype: \"byok_missing\",\n\t\tprovider: id,\n\t\tmessage: `Missing ${id} API key`\n\t} };\n\treturn new Response(JSON.stringify(body), {\n\t\tstatus: 401,\n\t\theaders: { \"content-type\": \"application/json\" }\n\t});\n}\n//#endregion\nexport { byokMissing, isByokMissingBody };\n\n//# sourceMappingURL=missing.js.map","//#region src/byok/errors.ts\nvar ByokMissingError = class extends Error {\n\tprovider;\n\tconstructor(provider) {\n\t\tsuper(`Missing ${provider} API key`);\n\t\tthis.name = \"ByokMissingError\";\n\t\tthis.provider = provider;\n\t}\n};\nvar ByokBlockedError = class extends Error {\n\tprovider;\n\treason;\n\tconstructor(provider, reason) {\n\t\tsuper(reason === \"locked\" ? `${provider} key is locked` : `Missing ${provider} API key`);\n\t\tthis.name = \"ByokBlockedError\";\n\t\tthis.provider = provider;\n\t\tthis.reason = reason;\n\t}\n};\nvar ByokUnresolvedProviderError = class extends Error {\n\tconstructor() {\n\t\tsuper(\"BYOK is enabled but no provider slug was resolved. Pass byokProvider or forwardedProps.provider.\");\n\t\tthis.name = \"ByokUnresolvedProviderError\";\n\t}\n};\n//#endregion\nexport { ByokBlockedError, ByokMissingError, ByokUnresolvedProviderError };\n\n//# sourceMappingURL=errors.js.map","//#region src/byok/scrub.ts\nfunction maskKey(key) {\n\tif (key.length <= 4) return \"••\";\n\treturn key.slice(-4);\n}\nfunction scrubSecrets(input, secrets) {\n\tlet next = input;\n\tfor (const secret of secrets) {\n\t\tif (secret.length === 0) continue;\n\t\tnext = next.split(secret).join(\"[redacted]\");\n\t}\n\treturn next;\n}\n//#endregion\nexport { maskKey, scrubSecrets };\n\n//# sourceMappingURL=scrub.js.map","import { memoryStorage } from \"./storage.js\";\nimport { ByokBlockedError, byokHeaderName, isProviderId, maskKey } from \"@tanstack/ai/byok\";\n//#region src/byok/client.ts\nvar EMPTY_BYOK_SNAPSHOT = {\n\tstatus: {},\n\tlocked: false,\n\tprompt: null,\n\tstorageError: null\n};\nfunction requireProviderId(value) {\n\tif (!isProviderId(value)) throw new Error(`Invalid BYOK provider id: ${value}`);\n\treturn value;\n}\nfunction errorMessage(error, fallback) {\n\treturn error instanceof Error && error.message.length > 0 ? error.message : fallback;\n}\nfunction isByokCeremonyCancel(error) {\n\tif (typeof DOMException !== \"undefined\" && error instanceof DOMException && error.name === \"NotAllowedError\") return true;\n\tif (error instanceof Error) {\n\t\tif (error.name === \"NotAllowedError\") return true;\n\t\tconst message = error.message.toLowerCase();\n\t\treturn message.includes(\"cancelled\") || message.includes(\"not allowed\");\n\t}\n\treturn false;\n}\nfunction sanitizeKeyring(value) {\n\tif (typeof value !== \"object\" || value === null) return {};\n\tconst keys = {};\n\tfor (const [provider, key] of Object.entries(value)) if (isProviderId(provider) && typeof key === \"string\" && key.length > 0) keys[provider] = key;\n\treturn keys;\n}\nvar ByokClient = class {\n\tstorage;\n\t#keys = {};\n\t#statuses = {};\n\t#locked;\n\t#prompt = null;\n\t#coverageAll = false;\n\t#coverage = {};\n\t#companions = {};\n\t#listeners = /* @__PURE__ */ new Set();\n\t#snapshot;\n\t#storageError = null;\n\t#ready;\n\tconstructor(options = {}) {\n\t\tthis.storage = options.storage ?? memoryStorage();\n\t\tfor (const provider of options.providers ?? []) if (provider.with?.length) this.#companions[requireProviderId(provider.id)] = provider.with.map((companion) => requireProviderId(companion.id));\n\t\tthis.#locked = Boolean(this.storage.unlockable);\n\t\tthis.#snapshot = this.#buildSnapshot();\n\t\tthis.#ready = this.#hydrate();\n\t}\n\t/** Resolves when constructor hydration (peek/load) finishes. */\n\tready = () => this.#ready;\n\tsubscribe = (listener) => {\n\t\tthis.#listeners.add(listener);\n\t\treturn () => {\n\t\t\tthis.#listeners.delete(listener);\n\t\t};\n\t};\n\tgetSnapshot = () => this.#snapshot;\n\t#buildSnapshot() {\n\t\treturn {\n\t\t\tstatus: { ...this.#statuses },\n\t\t\tlocked: this.#locked,\n\t\t\tprompt: this.#prompt,\n\t\t\tstorageError: this.#storageError\n\t\t};\n\t}\n\tkeys() {\n\t\treturn { ...this.#keys };\n\t}\n\trequest(provider, reason) {\n\t\tthis.#prompt = {\n\t\t\tprovider: requireProviderId(provider),\n\t\t\treason\n\t\t};\n\t\tthis.#emit();\n\t}\n\t/**\n\t* `true` — the server can fill any slug from env.\n\t* `false` — no env coverage.\n\t* A record merges per-id flags and clears the all/none boolean.\n\t*/\n\tsetServerCoverage(flags) {\n\t\tif (typeof flags === \"boolean\") {\n\t\t\tthis.#coverageAll = flags;\n\t\t\tthis.#coverage = {};\n\t\t\treturn;\n\t\t}\n\t\tthis.#coverageAll = false;\n\t\tthis.#coverage = {\n\t\t\t...this.#coverage,\n\t\t\t...flags\n\t\t};\n\t}\n\t#hasCoverage(provider) {\n\t\treturn this.#coverageAll || this.#coverage[provider] === true;\n\t}\n\t/** The slug plus every companion declared on its descriptor. */\n\t#expand(provider) {\n\t\treturn [provider, ...this.#companions[provider] ?? []];\n\t}\n\theaders(provider) {\n\t\tconst headers = {};\n\t\tif (provider) {\n\t\t\trequireProviderId(provider);\n\t\t\tfor (const id of this.#expand(provider)) {\n\t\t\t\tconst key = this.#keys[id];\n\t\t\t\tif (key) headers[byokHeaderName(id)] = key;\n\t\t\t}\n\t\t\treturn headers;\n\t\t}\n\t\tfor (const [id, key] of Object.entries(this.#keys)) if (key) headers[byokHeaderName(id)] = key;\n\t\treturn headers;\n\t}\n\tasync prepare(provider) {\n\t\tawait this.#ready;\n\t\tif (this.storage.unlockable && this.#locked) await this.unlock();\n\t\tif (!provider) return;\n\t\trequireProviderId(provider);\n\t\tfor (const id of this.#expand(provider)) {\n\t\t\tif (this.#keys[id] || this.#hasCoverage(id)) continue;\n\t\t\tthis.request(id, \"missing\");\n\t\t\tthrow new ByokBlockedError(id, \"missing\");\n\t\t}\n\t}\n\tasync update(providerOrKey, key) {\n\t\tawait this.#ready;\n\t\tlet provider;\n\t\tlet nextKey;\n\t\tif (key === void 0) {\n\t\t\tif (!this.#prompt) throw new Error(\"byok.update(key) cannot run when prompt is null\");\n\t\t\tprovider = this.#prompt.provider;\n\t\t\tnextKey = providerOrKey;\n\t\t} else {\n\t\t\tprovider = requireProviderId(providerOrKey);\n\t\t\tnextKey = key;\n\t\t}\n\t\tnextKey = nextKey.trim();\n\t\tif (nextKey.length === 0) throw new Error(\"BYOK key must be non-empty\");\n\t\tif (this.storage.unlockable && this.#locked) await this.unlock();\n\t\tconst previousKeys = this.#keys;\n\t\tconst previousStatuses = { ...this.#statuses };\n\t\tconst previousLocked = this.#locked;\n\t\tconst previousPrompt = this.#prompt;\n\t\tconst previousStorageError = this.#storageError;\n\t\tconst next = {\n\t\t\t...this.#keys,\n\t\t\t[provider]: nextKey\n\t\t};\n\t\ttry {\n\t\t\tawait this.storage.save(next);\n\t\t} catch (error) {\n\t\t\tthis.#keys = previousKeys;\n\t\t\tthis.#statuses = previousStatuses;\n\t\t\tthis.#locked = previousLocked;\n\t\t\tthis.#prompt = previousPrompt;\n\t\t\tthis.#storageError = previousStorageError;\n\t\t\tthis.#statuses[provider] = {\n\t\t\t\tstate: \"error\",\n\t\t\t\tmasked: maskKey(nextKey),\n\t\t\t\tmessage: errorMessage(error, `Failed to persist ${provider} key`)\n\t\t\t};\n\t\t\tthis.#emit();\n\t\t\tthrow error;\n\t\t}\n\t\tthis.#keys = next;\n\t\tthis.#statuses[provider] = {\n\t\t\tstate: \"set\",\n\t\t\tmasked: maskKey(nextKey)\n\t\t};\n\t\tthis.#locked = false;\n\t\tthis.#prompt = null;\n\t\tthis.#storageError = null;\n\t\tthis.#emit();\n\t}\n\tasync clear(provider) {\n\t\tawait this.#ready;\n\t\tif (provider) {\n\t\t\trequireProviderId(provider);\n\t\t\tif (this.storage.unlockable && this.#locked) await this.unlock();\n\t\t\tconst previousKeys = this.#keys;\n\t\t\tconst previousStatuses = { ...this.#statuses };\n\t\t\tconst next = { ...this.#keys };\n\t\t\tdelete next[provider];\n\t\t\ttry {\n\t\t\t\tawait this.storage.save(next);\n\t\t\t} catch (error) {\n\t\t\t\tthis.#keys = previousKeys;\n\t\t\t\tthis.#statuses = previousStatuses;\n\t\t\t\tthis.#emit();\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthis.#keys = next;\n\t\t\tdelete this.#statuses[provider];\n\t\t\tthis.#emit();\n\t\t\treturn;\n\t\t}\n\t\tconst previousKeys = this.#keys;\n\t\tconst previousStatuses = this.#statuses;\n\t\tconst previousLocked = this.#locked;\n\t\tconst previousPrompt = this.#prompt;\n\t\ttry {\n\t\t\tawait this.storage.clear();\n\t\t} catch (error) {\n\t\t\tthis.#keys = previousKeys;\n\t\t\tthis.#statuses = previousStatuses;\n\t\t\tthis.#locked = previousLocked;\n\t\t\tthis.#prompt = previousPrompt;\n\t\t\tthis.#emit();\n\t\t\tthrow error;\n\t\t}\n\t\tthis.#keys = {};\n\t\tthis.#statuses = {};\n\t\tthis.#locked = false;\n\t\tthis.#prompt = null;\n\t\tthis.#storageError = null;\n\t\tthis.#emit();\n\t}\n\tasync unlock() {\n\t\tawait this.#ready;\n\t\tif (!this.storage.unlockable) return;\n\t\ttry {\n\t\t\tconst loaded = sanitizeKeyring(await this.storage.load());\n\t\t\tthis.#keys = {\n\t\t\t\t...loaded,\n\t\t\t\t...this.#keys\n\t\t\t};\n\t\t\tfor (const [id, value] of Object.entries(loaded)) {\n\t\t\t\tif (!isProviderId(id) || !value) continue;\n\t\t\t\tconst existing = this.#statuses[id];\n\t\t\t\tif (!existing || existing.state === \"locked\") this.#statuses[id] = {\n\t\t\t\t\tstate: \"set\",\n\t\t\t\t\tmasked: maskKey(value)\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.#locked = false;\n\t\t\tthis.#storageError = null;\n\t\t\tthis.#emit();\n\t\t} catch (error) {\n\t\t\tif (isByokCeremonyCancel(error)) {\n\t\t\t\tconst provider = this.#lockedProvider();\n\t\t\t\tif (provider) {\n\t\t\t\t\tthis.request(provider, \"locked\");\n\t\t\t\t\tthrow new ByokBlockedError(provider, \"locked\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.#storageError = errorMessage(error, \"Failed to unlock keyring\");\n\t\t\tthis.#emit();\n\t\t\tthrow error instanceof Error ? error : new Error(String(error));\n\t\t}\n\t}\n\t#lockedProvider() {\n\t\tif (this.#prompt && isProviderId(this.#prompt.provider)) return this.#prompt.provider;\n\t\tfor (const [id, status] of Object.entries(this.#statuses)) if (status?.state === \"locked\" && isProviderId(id)) return id;\n\t}\n\tasync #hydrate() {\n\t\tif (this.storage.unlockable) {\n\t\t\tif (!this.storage.peek) return;\n\t\t\ttry {\n\t\t\t\tconst preview = await this.storage.peek();\n\t\t\t\tfor (const [id, last4] of Object.entries(preview)) {\n\t\t\t\t\tif (!isProviderId(id) || this.#statuses[id]) continue;\n\t\t\t\t\tthis.#statuses[id] = {\n\t\t\t\t\t\tstate: \"locked\",\n\t\t\t\t\t\tmasked: last4 ? last4 : \"••\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthis.#locked = Object.keys(preview).length > 0;\n\t\t\t\tthis.#storageError = null;\n\t\t\t\tthis.#emit();\n\t\t\t} catch (error) {\n\t\t\t\tthis.#storageError = errorMessage(error, \"Failed to read keyring\");\n\t\t\t\tthis.#emit();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst loaded = sanitizeKeyring(await this.storage.load());\n\t\t\tthis.#keys = {\n\t\t\t\t...loaded,\n\t\t\t\t...this.#keys\n\t\t\t};\n\t\t\tfor (const [id, value] of Object.entries(loaded)) {\n\t\t\t\tif (!isProviderId(id) || !value) continue;\n\t\t\t\tthis.#statuses[id] = {\n\t\t\t\t\tstate: \"set\",\n\t\t\t\t\tmasked: maskKey(value)\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.#storageError = null;\n\t\t\tthis.#emit();\n\t\t} catch (error) {\n\t\t\tthis.#storageError = errorMessage(error, \"Failed to read keyring\");\n\t\t\tthis.#emit();\n\t\t}\n\t}\n\t#emit() {\n\t\tthis.#snapshot = this.#buildSnapshot();\n\t\tfor (const listener of this.#listeners) listener();\n\t}\n};\nfunction defineByok(options = {}) {\n\treturn new ByokClient(options);\n}\n//#endregion\nexport { ByokClient, EMPTY_BYOK_SNAPSHOT, defineByok };\n\n//# sourceMappingURL=client.js.map","//#region src/response-stream.ts\nvar UnsupportedResponseStreamError = class extends Error {\n\tmissingFeature;\n\tconstructor(missingFeature) {\n\t\tsuper(createUnsupportedResponseStreamMessage(missingFeature));\n\t\tthis.name = \"UnsupportedResponseStreamError\";\n\t\tthis.missingFeature = missingFeature;\n\t}\n};\nfunction createUnsupportedResponseStreamMessage(missingFeature) {\n\treturn `Streaming fetch responses are not supported in this runtime because ${missingFeature} is unavailable. React Native users need a compatible fetch/stream/TextDecoder polyfill, or should use a fetch, XHR, or custom transport that can deliver streaming chunks.`;\n}\nfunction getResponseStreamReader(response) {\n\tif (!response.body) throw new UnsupportedResponseStreamError(\"Response.body\");\n\tif (typeof response.body.getReader !== \"function\") throw new UnsupportedResponseStreamError(\"Response.body.getReader\");\n\treturn response.body.getReader();\n}\nfunction createResponseStreamTextDecoder() {\n\tif (typeof globalThis.TextDecoder !== \"function\") throw new UnsupportedResponseStreamError(\"TextDecoder\");\n\treturn new globalThis.TextDecoder();\n}\n//#endregion\nexport { UnsupportedResponseStreamError, createResponseStreamTextDecoder, getResponseStreamReader };\n\n//# sourceMappingURL=response-stream.js.map","//#region src/sse-utils.ts\nfunction parseSseDataLine(line) {\n\tif (!line.startsWith(\"data:\")) return line;\n\tconst data = line.slice(5);\n\treturn data.startsWith(\" \") ? data.slice(1) : data;\n}\n//#endregion\nexport { parseSseDataLine };\n\n//# sourceMappingURL=sse-utils.js.map","//#region src/message-date-normalizer.ts\nfunction validDate(value) {\n\tif (value instanceof Date) return Number.isNaN(value.getTime()) ? void 0 : value;\n\tif (typeof value !== \"string\") return void 0;\n\tconst date = new Date(value);\n\treturn Number.isNaN(date.getTime()) ? void 0 : date;\n}\nfunction normalizeMessageDates(message) {\n\tconst messageDate = validDate(message.createdAt);\n\tconst parts = message.parts.map((part) => {\n\t\tif (part.type !== \"tool-result\") return part;\n\t\tconst date = validDate(part.createdAt);\n\t\tconst { createdAt: _ignored, ...rest } = part;\n\t\treturn date ? {\n\t\t\t...rest,\n\t\t\tcreatedAt: date\n\t\t} : rest;\n\t});\n\tconst { createdAt: _ignored, ...rest } = message;\n\treturn messageDate ? {\n\t\t...rest,\n\t\tparts,\n\t\tcreatedAt: messageDate\n\t} : {\n\t\t...rest,\n\t\tparts\n\t};\n}\nfunction normalizeMessagesDates(messages) {\n\treturn messages.map(normalizeMessageDates);\n}\n//#endregion\nexport { normalizeMessageDates, normalizeMessagesDates };\n\n//# sourceMappingURL=message-date-normalizer.js.map","//#region src/utilities/ag-ui-usage.ts\nfunction definedDetails(value) {\n\treturn Object.keys(value).length > 0 ? value : void 0;\n}\nfunction withoutKey(value, key) {\n\tconst next = { ...value };\n\tdelete next[key];\n\treturn next;\n}\nfunction isTanstackUsage(usage) {\n\treturn typeof usage === \"object\" && usage != null && !Array.isArray(usage) && \"promptTokens\" in usage;\n}\nfunction toSpecTokenUsage(usage, options) {\n\tconst { promptTokens, completionTokens, totalTokens, promptTokensDetails, completionTokensDetails, ...rest } = usage;\n\tconst spec = {\n\t\t...options?.provider !== void 0 ? { provider: options.provider } : {},\n\t\t...options?.model !== void 0 ? { model: options.model } : {},\n\t\tinputTokens: promptTokens,\n\t\toutputTokens: completionTokens,\n\t\ttotalTokens\n\t};\n\tconst cachedInputTokens = promptTokensDetails?.cachedTokens;\n\tif (cachedInputTokens !== void 0) spec.cachedInputTokens = cachedInputTokens;\n\tconst reasoningTokens = completionTokensDetails?.reasoningTokens;\n\tif (reasoningTokens !== void 0) spec.reasoningTokens = reasoningTokens;\n\tconst leftoverPrompt = promptTokensDetails ? definedDetails(withoutKey(promptTokensDetails, \"cachedTokens\")) : void 0;\n\tconst leftoverCompletion = completionTokensDetails ? definedDetails(withoutKey(completionTokensDetails, \"reasoningTokens\")) : void 0;\n\treturn {\n\t\tusage: [spec],\n\t\tleftover: definedDetails({\n\t\t\t...rest,\n\t\t\t...leftoverPrompt !== void 0 ? { promptTokensDetails: leftoverPrompt } : {},\n\t\t\t...leftoverCompletion !== void 0 ? { completionTokensDetails: leftoverCompletion } : {}\n\t\t})\n\t};\n}\nfunction rebuildTokenUsage(usage, leftover) {\n\tif (isTanstackUsage(usage)) return usage;\n\tif (Array.isArray(usage)) return fromSpecTokenUsage(usage, leftover);\n\treturn fromSpecTokenUsage(void 0, leftover);\n}\nfunction fromSpecTokenUsage(usage, leftover) {\n\tconst spec = usage?.[0];\n\tif (spec == null && leftover == null) return;\n\tconst { promptTokensDetails: leftoverPromptDetails, completionTokensDetails: leftoverCompletionDetails, ...leftoverRest } = leftover ?? {};\n\tconst promptTokensDetails = definedDetails({\n\t\t...spec?.cachedInputTokens !== void 0 ? { cachedTokens: spec.cachedInputTokens } : {},\n\t\t...leftoverPromptDetails\n\t});\n\tconst completionTokensDetails = definedDetails({\n\t\t...spec?.reasoningTokens !== void 0 ? { reasoningTokens: spec.reasoningTokens } : {},\n\t\t...leftoverCompletionDetails\n\t});\n\treturn {\n\t\tpromptTokens: spec?.inputTokens ?? 0,\n\t\tcompletionTokens: spec?.outputTokens ?? 0,\n\t\ttotalTokens: spec?.totalTokens ?? 0,\n\t\t...leftoverRest,\n\t\t...promptTokensDetails !== void 0 ? { promptTokensDetails } : {},\n\t\t...completionTokensDetails !== void 0 ? { completionTokensDetails } : {}\n\t};\n}\n//#endregion\nexport { fromSpecTokenUsage, isTanstackUsage, rebuildTokenUsage, toSpecTokenUsage };\n\n//# sourceMappingURL=ag-ui-usage.js.map","//#region src/utilities/merge-metadata.ts\nfunction isPlainRecord(value) {\n\treturn value != null && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction mergeMetadata(current, incoming) {\n\tif (incoming == null) return current;\n\tif (current == null) return { ...incoming };\n\tconst merged = {\n\t\t...current,\n\t\t...incoming\n\t};\n\tif (isPlainRecord(current.tanstack) && isPlainRecord(incoming.tanstack)) merged.tanstack = {\n\t\t...current.tanstack,\n\t\t...incoming.tanstack\n\t};\n\treturn merged;\n}\n/** Read `metadata.tanstack`. Not part of the public SDK surface. */\nfunction tanstackMetadata(value) {\n\tif (value == null) return void 0;\n\tconst nested = \"metadata\" in value ? value.metadata : void 0;\n\tconst tanstack = (nested != null && typeof nested === \"object\" && !Array.isArray(nested) ? nested : value).tanstack;\n\tif (tanstack == null || typeof tanstack !== \"object\" || Array.isArray(tanstack)) return;\n\treturn tanstack;\n}\nfunction withTanstackMetadata(value, tanstack) {\n\tconst current = value.metadata;\n\tconst currentTanstack = tanstackMetadata(value) ?? {};\n\treturn {\n\t\t...value,\n\t\tmetadata: {\n\t\t\t...current ?? {},\n\t\t\ttanstack: {\n\t\t\t\t...currentTanstack,\n\t\t\t\t...tanstack\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\nexport { mergeMetadata, tanstackMetadata, withTanstackMetadata };\n\n//# sourceMappingURL=merge-metadata.js.map","//#region src/events.ts\nlet EventType = /* @__PURE__ */ function(EventType) {\n\tEventType[\"TEXT_MESSAGE_START\"] = \"TEXT_MESSAGE_START\";\n\tEventType[\"TEXT_MESSAGE_CONTENT\"] = \"TEXT_MESSAGE_CONTENT\";\n\tEventType[\"TEXT_MESSAGE_END\"] = \"TEXT_MESSAGE_END\";\n\tEventType[\"TEXT_MESSAGE_CHUNK\"] = \"TEXT_MESSAGE_CHUNK\";\n\tEventType[\"TOOL_CALL_START\"] = \"TOOL_CALL_START\";\n\tEventType[\"TOOL_CALL_ARGS\"] = \"TOOL_CALL_ARGS\";\n\tEventType[\"TOOL_CALL_END\"] = \"TOOL_CALL_END\";\n\tEventType[\"TOOL_CALL_CHUNK\"] = \"TOOL_CALL_CHUNK\";\n\tEventType[\"TOOL_CALL_RESULT\"] = \"TOOL_CALL_RESULT\";\n\t/** @deprecated Use REASONING_START instead. Will be removed in 1.0.0. */\n\tEventType[\"THINKING_START\"] = \"THINKING_START\";\n\t/** @deprecated Use REASONING_END instead. Will be removed in 1.0.0. */\n\tEventType[\"THINKING_END\"] = \"THINKING_END\";\n\t/** @deprecated Use REASONING_MESSAGE_START instead. Will be removed in 1.0.0. */\n\tEventType[\"THINKING_TEXT_MESSAGE_START\"] = \"THINKING_TEXT_MESSAGE_START\";\n\t/** @deprecated Use REASONING_MESSAGE_CONTENT instead. Will be removed in 1.0.0. */\n\tEventType[\"THINKING_TEXT_MESSAGE_CONTENT\"] = \"THINKING_TEXT_MESSAGE_CONTENT\";\n\t/** @deprecated Use REASONING_MESSAGE_END instead. Will be removed in 1.0.0. */\n\tEventType[\"THINKING_TEXT_MESSAGE_END\"] = \"THINKING_TEXT_MESSAGE_END\";\n\tEventType[\"STATE_SNAPSHOT\"] = \"STATE_SNAPSHOT\";\n\tEventType[\"STATE_DELTA\"] = \"STATE_DELTA\";\n\tEventType[\"MESSAGES_SNAPSHOT\"] = \"MESSAGES_SNAPSHOT\";\n\tEventType[\"ACTIVITY_SNAPSHOT\"] = \"ACTIVITY_SNAPSHOT\";\n\tEventType[\"ACTIVITY_DELTA\"] = \"ACTIVITY_DELTA\";\n\tEventType[\"RAW\"] = \"RAW\";\n\tEventType[\"CUSTOM\"] = \"CUSTOM\";\n\tEventType[\"RUN_STARTED\"] = \"RUN_STARTED\";\n\tEventType[\"RUN_FINISHED\"] = \"RUN_FINISHED\";\n\tEventType[\"RUN_ERROR\"] = \"RUN_ERROR\";\n\tEventType[\"STEP_STARTED\"] = \"STEP_STARTED\";\n\tEventType[\"STEP_FINISHED\"] = \"STEP_FINISHED\";\n\tEventType[\"REASONING_START\"] = \"REASONING_START\";\n\tEventType[\"REASONING_MESSAGE_START\"] = \"REASONING_MESSAGE_START\";\n\tEventType[\"REASONING_MESSAGE_CONTENT\"] = \"REASONING_MESSAGE_CONTENT\";\n\tEventType[\"REASONING_MESSAGE_END\"] = \"REASONING_MESSAGE_END\";\n\tEventType[\"REASONING_MESSAGE_CHUNK\"] = \"REASONING_MESSAGE_CHUNK\";\n\tEventType[\"REASONING_END\"] = \"REASONING_END\";\n\tEventType[\"REASONING_ENCRYPTED_VALUE\"] = \"REASONING_ENCRYPTED_VALUE\";\n\treturn EventType;\n}({});\n\n//#endregion\nexport { EventType as t };\n//# sourceMappingURL=events-BaoNrGbE.mjs.map","//#region src/interrupt-serialization.ts\nvar SHA256_K = new Uint32Array([\n\t1116352408,\n\t1899447441,\n\t3049323471,\n\t3921009573,\n\t961987163,\n\t1508970993,\n\t2453635748,\n\t2870763221,\n\t3624381080,\n\t310598401,\n\t607225278,\n\t1426881987,\n\t1925078388,\n\t2162078206,\n\t2614888103,\n\t3248222580,\n\t3835390401,\n\t4022224774,\n\t264347078,\n\t604807628,\n\t770255983,\n\t1249150122,\n\t1555081692,\n\t1996064986,\n\t2554220882,\n\t2821834349,\n\t2952996808,\n\t3210313671,\n\t3336571891,\n\t3584528711,\n\t113926993,\n\t338241895,\n\t666307205,\n\t773529912,\n\t1294757372,\n\t1396182291,\n\t1695183700,\n\t1986661051,\n\t2177026350,\n\t2456956037,\n\t2730485921,\n\t2820302411,\n\t3259730800,\n\t3345764771,\n\t3516065817,\n\t3600352804,\n\t4094571909,\n\t275423344,\n\t430227734,\n\t506948616,\n\t659060556,\n\t883997877,\n\t958139571,\n\t1322822218,\n\t1537002063,\n\t1747873779,\n\t1955562222,\n\t2024104815,\n\t2227730452,\n\t2361852424,\n\t2428436474,\n\t2756734187,\n\t3204031479,\n\t3329325298\n]);\nfunction rotr(x, n) {\n\treturn x >>> n | x << 32 - n;\n}\nfunction sha256Hex(input) {\n\tconst msg = new TextEncoder().encode(input);\n\tconst bitLen = msg.length * 8;\n\tconst withOne = msg.length + 1;\n\tconst total = withOne + (56 - withOne % 64 + 64) % 64 + 8;\n\tconst bytes = new Uint8Array(total);\n\tbytes.set(msg);\n\tbytes[msg.length] = 128;\n\tconst view = new DataView(bytes.buffer);\n\tview.setUint32(total - 8, Math.floor(bitLen / 4294967296));\n\tview.setUint32(total - 4, bitLen >>> 0);\n\tlet h0 = 1779033703;\n\tlet h1 = 3144134277;\n\tlet h2 = 1013904242;\n\tlet h3 = 2773480762;\n\tlet h4 = 1359893119;\n\tlet h5 = 2600822924;\n\tlet h6 = 528734635;\n\tlet h7 = 1541459225;\n\tconst w = /* @__PURE__ */ new Uint32Array(64);\n\tfor (let offset = 0; offset < total; offset += 64) {\n\t\tfor (let i = 0; i < 16; i++) w[i] = view.getUint32(offset + i * 4);\n\t\tfor (let i = 16; i < 64; i++) {\n\t\t\tconst x15 = w[i - 15] ?? 0;\n\t\t\tconst x2 = w[i - 2] ?? 0;\n\t\t\tconst s0 = rotr(x15, 7) ^ rotr(x15, 18) ^ x15 >>> 3;\n\t\t\tconst s1 = rotr(x2, 17) ^ rotr(x2, 19) ^ x2 >>> 10;\n\t\t\tw[i] = (w[i - 16] ?? 0) + s0 + (w[i - 7] ?? 0) + s1 >>> 0;\n\t\t}\n\t\tlet a = h0;\n\t\tlet b = h1;\n\t\tlet c = h2;\n\t\tlet d = h3;\n\t\tlet e = h4;\n\t\tlet f = h5;\n\t\tlet g = h6;\n\t\tlet hh = h7;\n\t\tfor (let i = 0; i < 64; i++) {\n\t\t\tconst bigS1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n\t\t\tconst ch = e & f ^ ~e & g;\n\t\t\tconst t1 = hh + bigS1 + ch + (SHA256_K[i] ?? 0) + (w[i] ?? 0) >>> 0;\n\t\t\tconst t2 = (rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22)) + (a & b ^ a & c ^ b & c) >>> 0;\n\t\t\thh = g;\n\t\t\tg = f;\n\t\t\tf = e;\n\t\t\te = d + t1 >>> 0;\n\t\t\td = c;\n\t\t\tc = b;\n\t\t\tb = a;\n\t\t\ta = t1 + t2 >>> 0;\n\t\t}\n\t\th0 = h0 + a >>> 0;\n\t\th1 = h1 + b >>> 0;\n\t\th2 = h2 + c >>> 0;\n\t\th3 = h3 + d >>> 0;\n\t\th4 = h4 + e >>> 0;\n\t\th5 = h5 + f >>> 0;\n\t\th6 = h6 + g >>> 0;\n\t\th7 = h7 + hh >>> 0;\n\t}\n\tconst hex = (n) => (n >>> 0).toString(16).padStart(8, \"0\");\n\treturn hex(h0) + hex(h1) + hex(h2) + hex(h3) + hex(h4) + hex(h5) + hex(h6) + hex(h7);\n}\n/** The built-in default: SHA-256, prefixed so the algorithm is self-describing. */\nfunction defaultInterruptHash(canonicalJson) {\n\treturn `sha256:${sha256Hex(canonicalJson)}`;\n}\nfunction canonical(value, active) {\n\tif (value === null) return \"null\";\n\tif (typeof value === \"string\" || typeof value === \"boolean\") return JSON.stringify(value);\n\tif (typeof value === \"number\" && Number.isFinite(value)) return JSON.stringify(value);\n\tif (typeof value !== \"object\") throw new TypeError(\"Interrupt values must be JSON-compatible.\");\n\tif (active.has(value)) throw new TypeError(\"Interrupt values must not cycle.\");\n\tif (!Array.isArray(value) && Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) throw new TypeError(\"Interrupt values must use plain JSON objects.\");\n\tactive.add(value);\n\tlet encoded;\n\tif (Array.isArray(value)) {\n\t\tconst items = [];\n\t\tfor (let index = 0; index < value.length; index++) items.push(canonical(value[index], active));\n\t\tencoded = `[${items.join(\",\")}]`;\n\t} else {\n\t\tconst record = value;\n\t\tencoded = `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonical(record[key], active)}`).join(\",\")}}`;\n\t}\n\tactive.delete(value);\n\treturn encoded;\n}\nfunction canonicalInterruptJson(value) {\n\treturn canonical(value, /* @__PURE__ */ new WeakSet());\n}\nfunction digestInterruptJson(canonicalJson, hash = defaultInterruptHash) {\n\tif (typeof canonicalJson !== \"string\") throw new TypeError(\"Interrupt digests require canonical JSON text.\");\n\treturn hash(canonicalJson);\n}\nfunction freezeTree(value) {\n\tif (value === null || typeof value !== \"object\" || Object.isFrozen(value)) return;\n\tObject.values(value).forEach(freezeTree);\n\tObject.freeze(value);\n}\nfunction cloneAndDeepFreezeJson(value) {\n\tconst clone = JSON.parse(canonicalInterruptJson(value));\n\tfreezeTree(clone);\n\treturn clone;\n}\n//#endregion\nexport { canonicalInterruptJson, cloneAndDeepFreezeJson, defaultInterruptHash, digestInterruptJson };\n\n//# sourceMappingURL=interrupt-serialization.js.map","import { canonicalInterruptJson, cloneAndDeepFreezeJson, digestInterruptJson } from \"./interrupt-serialization.js\";\n//#region src/interrupts.ts\n/**\n* Wire version of {@link InterruptBinding}.\n*\n* The binding is the only part of an AG-UI `Interrupt` that this package\n* claims — it rides in `metadata` under\n* {@link INTERRUPT_BINDING_METADATA_KEY} and tells the resume path how to\n* correlate an answer back to a paused run. Producers stamp `v`; readers\n* reject any version they don't understand rather than duck-typing the fields.\n*\n* That matters because an AG-UI `Interrupt` is a shared envelope. Another\n* producer — a workflow engine projecting a durable approval, a third-party\n* agent — can legitimately put its own binding in the same envelope. Versioning\n* makes \"not mine\" a clean rejection instead of a partial match that resumes\n* against the wrong owner.\n*/\nvar INTERRUPT_BINDING_VERSION = 1;\nfunction canonicalizeInterruptResolutions(resolutions) {\n\tconst sorted = [...resolutions].sort((left, right) => left.interruptId.localeCompare(right.interruptId));\n\tconst frozen = cloneAndDeepFreezeJson(sorted);\n\tconst canonicalResolutions = canonicalInterruptJson(frozen);\n\treturn Object.freeze({\n\t\tresolutions: frozen,\n\t\tcanonicalResolutions,\n\t\tfingerprint: digestInterruptJson(canonicalResolutions)\n\t});\n}\n//#endregion\nexport { INTERRUPT_BINDING_VERSION, canonicalizeInterruptResolutions };\n\n//# sourceMappingURL=interrupts.js.map","//#region src/activities/chat/tools/schema-converter.ts\n/**\n* Build a JSONSchema object from any plain key/value source. The `JSONSchema`\n* interface's `[key: string]: any` index signature makes every property\n* assignable through bracket access without a type cast — copying keys here\n* lets us narrow either `Record<string, unknown>` (returned by\n* `~standard.jsonSchema.input()`) or a `JSONSchema` (from the SchemaInput\n* pass-through arm) into the typed view used by the rest of this module.\n*\n* Accepts `object` so callers don't need a cast when narrowing from union\n* types like `SchemaInput`.\n*/\nfunction toJsonSchema(obj) {\n\tconst result = {};\n\tfor (const [key, value] of Object.entries(obj)) {\n\t\tif (key === \"$schema\") continue;\n\t\tresult[key] = value;\n\t}\n\treturn result;\n}\n/**\n* Whether a value can carry a `~standard` property. Most schema libraries\n* (Zod, Valibot) return plain objects, but ArkType's `type()` returns a\n* *callable function* with `~standard` attached — so `typeof` must accept\n* both `'object'` and `'function'` or ArkType schemas are missed entirely\n* (issue #276).\n*/\nfunction isPropertyCarrier(schema) {\n\treturn (typeof schema === \"object\" || typeof schema === \"function\") && schema !== null;\n}\n/**\n* Check if a value is a Standard JSON Schema compliant schema.\n* Standard JSON Schema compliant libraries (Zod v4+, ArkType, Valibot with toStandardJsonSchema, etc.)\n* implement the '~standard' property with jsonSchema converter methods.\n*/\nfunction isStandardJSONSchema(schema) {\n\tif (!isPropertyCarrier(schema) || !(\"~standard\" in schema)) return false;\n\tconst standard = schema[\"~standard\"];\n\tif (typeof standard !== \"object\" || standard === null || !(\"version\" in standard) || standard.version !== 1 || !(\"jsonSchema\" in standard) || typeof standard.jsonSchema !== \"object\" || standard.jsonSchema === null || !(\"input\" in standard.jsonSchema)) return false;\n\treturn typeof standard.jsonSchema.input === \"function\";\n}\n/**\n* Check if a value is a Standard Schema compliant schema (for validation).\n* Standard Schema compliant libraries implement the '~standard' property with a validate function.\n*/\nfunction isStandardSchema(schema) {\n\treturn isPropertyCarrier(schema) && \"~standard\" in schema && typeof schema[\"~standard\"] === \"object\" && schema[\"~standard\"] !== null && \"version\" in schema[\"~standard\"] && schema[\"~standard\"].version === 1 && \"validate\" in schema[\"~standard\"] && typeof schema[\"~standard\"].validate === \"function\";\n}\n/** Drop an empty map to `undefined` so leaf/no-op subtrees don't litter it. */\nfunction pruneMap(map) {\n\treturn Object.keys(map).length > 0 ? map : void 0;\n}\nfunction coerceArrayItems(items) {\n\tif (Array.isArray(items)) {\n\t\tconst nested = items.map((item) => makeStructuredOutputCompatible(item, item.required || []));\n\t\tconst itemMaps = nested.map((entry) => entry.nullWidening ?? {});\n\t\treturn {\n\t\t\tschema: nested.map((entry) => entry.schema),\n\t\t\titemMap: itemMaps.some((entry) => Object.keys(entry).length > 0) ? itemMaps : void 0\n\t\t};\n\t}\n\tconst nested = makeStructuredOutputCompatible(items, items.required || []);\n\treturn {\n\t\tschema: nested.schema,\n\t\titemMap: nested.nullWidening\n\t};\n}\n/**\n* Transform a JSON schema to be compatible with OpenAI's structured output requirements.\n* OpenAI requires:\n* - All properties must be in the `required` array\n* - Optional fields should have null added to their type union\n* - additionalProperties must be false for objects\n*\n* Alongside the transformed schema it returns a {@link NullWideningMap} marking\n* exactly the positions where `null` was added, so `undoNullWidening` can strip\n* those synthesized nulls (and only those) from the provider's response.\n*\n* @param schema - JSON schema to transform\n* @param originalRequired - Original required array (to know which fields were optional)\n* @returns Transformed schema + the null-widening map for the round trip\n*/\nfunction makeStructuredOutputCompatible(schema, originalRequired = []) {\n\tconst result = { ...schema };\n\tconst map = {};\n\tif (result.type === \"object\" && result.properties) {\n\t\tconst properties = { ...result.properties };\n\t\tconst allPropertyNames = Object.keys(properties);\n\t\tconst propertyMaps = {};\n\t\tfor (const propName of allPropertyNames) {\n\t\t\tconst prop = properties[propName];\n\t\t\tif (!prop) continue;\n\t\t\tconst wasOptional = !originalRequired.includes(propName);\n\t\t\tlet widenedHere = false;\n\t\t\tlet childMap;\n\t\t\tif (prop.type === \"object\" && prop.properties) {\n\t\t\t\tconst nested = makeStructuredOutputCompatible(prop, prop.required || []);\n\t\t\t\tproperties[propName] = wasOptional ? {\n\t\t\t\t\t...nested.schema,\n\t\t\t\t\ttype: [\"object\", \"null\"]\n\t\t\t\t} : nested.schema;\n\t\t\t\twidenedHere = wasOptional;\n\t\t\t\tchildMap = nested.nullWidening;\n\t\t\t} else if (prop.type === \"array\" && prop.items) {\n\t\t\t\tconst nestedItems = coerceArrayItems(prop.items);\n\t\t\t\tproperties[propName] = {\n\t\t\t\t\t...prop,\n\t\t\t\t\titems: nestedItems.schema,\n\t\t\t\t\t...wasOptional ? { type: [\"array\", \"null\"] } : {}\n\t\t\t\t};\n\t\t\t\twidenedHere = wasOptional;\n\t\t\t\tchildMap = nestedItems.itemMap ? { items: nestedItems.itemMap } : void 0;\n\t\t\t} else if (wasOptional) {\n\t\t\t\tif (prop.type && !Array.isArray(prop.type)) {\n\t\t\t\t\tproperties[propName] = {\n\t\t\t\t\t\t...prop,\n\t\t\t\t\t\ttype: [prop.type, \"null\"]\n\t\t\t\t\t};\n\t\t\t\t\twidenedHere = true;\n\t\t\t\t} else if (Array.isArray(prop.type) && !prop.type.includes(\"null\")) {\n\t\t\t\t\tproperties[propName] = {\n\t\t\t\t\t\t...prop,\n\t\t\t\t\t\ttype: [...prop.type, \"null\"]\n\t\t\t\t\t};\n\t\t\t\t\twidenedHere = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (widenedHere || childMap) propertyMaps[propName] = {\n\t\t\t\t...childMap ?? {},\n\t\t\t\t...widenedHere ? { widened: true } : {}\n\t\t\t};\n\t\t}\n\t\tresult.properties = properties;\n\t\tresult.required = allPropertyNames;\n\t\tresult.additionalProperties = false;\n\t\tif (Object.keys(propertyMaps).length > 0) map.properties = propertyMaps;\n\t}\n\tif (result.type === \"array\" && result.items) {\n\t\tconst nestedItems = coerceArrayItems(result.items);\n\t\tresult.items = nestedItems.schema;\n\t\tif (nestedItems.itemMap) map.items = nestedItems.itemMap;\n\t}\n\treturn {\n\t\tschema: result,\n\t\tnullWidening: pruneMap(map)\n\t};\n}\n/**\n* Normalize any supported schema input to a typed, UN-widened `JSONSchema` —\n* the shared first half of conversion, before any structured-output widening.\n*\n* - Standard JSON Schemas are rebuilt structurally (dropping `$schema`, which\n* LLM providers ignore) and given the explicit `type`/`properties`/`required`\n* defaults object shapes need downstream.\n* - Plain `JSONSchema` inputs are rebuilt into the typed view; non-object inputs\n* are surfaced untouched (they can't be widened).\n* - Standard Schema validators lacking a `~standard.jsonSchema` converter throw\n* with actionable guidance, rather than shipping `{ '~standard': … }` to the\n* provider and producing an opaque downstream error.\n*/\nfunction toTypedJsonSchema(schema) {\n\tif (isStandardJSONSchema(schema)) {\n\t\tconst result = toJsonSchema(schema[\"~standard\"].jsonSchema.input({ target: \"draft-07\" }));\n\t\tif (\"properties\" in result && !result.type) result.type = \"object\";\n\t\tif (result.type === \"object\" && !(\"properties\" in result)) result.properties = {};\n\t\tif (result.type === \"object\" && !(\"required\" in result)) result.required = [];\n\t\treturn result;\n\t}\n\tif (isStandardSchema(schema)) throw new Error(\"Schema is a Standard Schema validator but does not expose a JSON Schema converter on `~standard.jsonSchema`. Use Zod v4.2+, ArkType v2.1.28+, or wrap a Valibot schema with `toStandardJsonSchema()` from `@valibot/to-json-schema` before passing it as `outputSchema`.\");\n\tif (typeof schema !== \"object\") return schema;\n\treturn toJsonSchema(schema);\n}\n/**\n* Converts a Standard JSON Schema compliant schema or plain JSONSchema to JSON Schema format\n* compatible with LLM providers.\n*\n* Supports any schema library that implements the Standard JSON Schema spec (v1):\n* - Zod v4+ (natively supports StandardJSONSchemaV1)\n* - ArkType (natively supports StandardJSONSchemaV1)\n* - Valibot (via `toStandardJsonSchema()` from `@valibot/to-json-schema`)\n*\n* If the input is already a plain JSONSchema object, it is returned as-is.\n*\n* @param schema - Standard JSON Schema compliant schema or plain JSONSchema object to convert\n* @param options - Conversion options\n* @returns JSON Schema object that can be sent to LLM providers\n*\n* @example\n* ```typescript\n* // Using Zod v4+ (natively supports Standard JSON Schema)\n* import * as z from 'zod';\n*\n* const zodSchema = z.object({\n* location: z.string().describe('City name'),\n* unit: z.enum(['celsius', 'fahrenheit']).optional()\n* });\n*\n* const jsonSchema = convertSchemaToJsonSchema(zodSchema);\n*\n* @example\n* // Using ArkType (natively supports Standard JSON Schema)\n* import { type } from 'arktype';\n*\n* const arkSchema = type({\n* location: 'string',\n* unit: \"'celsius' | 'fahrenheit'\"\n* });\n*\n* const jsonSchema = convertSchemaToJsonSchema(arkSchema);\n*\n* @example\n* // Using Valibot (via toStandardJsonSchema)\n* import * as v from 'valibot';\n* import { toStandardJsonSchema } from '@valibot/to-json-schema';\n*\n* const valibotSchema = toStandardJsonSchema(v.object({\n* location: v.string(),\n* unit: v.optional(v.picklist(['celsius', 'fahrenheit']))\n* }));\n*\n* const jsonSchema = convertSchemaToJsonSchema(valibotSchema);\n*\n* @example\n* // Using JSONSchema directly (passes through unchanged)\n* const rawSchema = {\n* type: 'object',\n* properties: { location: { type: 'string' } },\n* required: ['location']\n* };\n* const result = convertSchemaToJsonSchema(rawSchema);\n* ```\n*/\nfunction convertSchemaToJsonSchema(schema, options = {}) {\n\tif (!schema) return void 0;\n\tconst { forStructuredOutput = false } = options;\n\tif (!forStructuredOutput && !isStandardJSONSchema(schema) && !isStandardSchema(schema)) return schema;\n\tconst base = toTypedJsonSchema(schema);\n\tif (!base || typeof base !== \"object\") return base;\n\tif (!forStructuredOutput) return base;\n\treturn makeStructuredOutputCompatible(base, base.required || []).schema;\n}\n/**\n* Convert a schema for structured output AND capture the {@link NullWideningMap}\n* recording every `null` the strict-mode widening synthesized. The map lets the\n* caller undo that widening on the provider's response (via `undoNullWidening`)\n* before validating against the original schema — optional fields read back as\n* absent while genuine `.nullable()` nulls survive. The map is `undefined` when\n* the schema isn't a widenable object or when no field needed widening.\n*/\nfunction convertSchemaForStructuredOutput(schema) {\n\tif (!schema) return {\n\t\tjsonSchema: void 0,\n\t\tnullWideningMap: void 0\n\t};\n\tconst base = toTypedJsonSchema(schema);\n\tif (!base || typeof base !== \"object\") return {\n\t\tjsonSchema: base,\n\t\tnullWideningMap: void 0\n\t};\n\tconst { schema: jsonSchema, nullWidening } = makeStructuredOutputCompatible(base, base.required || []);\n\treturn {\n\t\tjsonSchema,\n\t\tnullWideningMap: nullWidening\n\t};\n}\n/**\n* Validates data against a Standard Schema compliant schema.\n*\n* @param schema - Standard Schema compliant schema\n* @param data - Data to validate\n* @returns Validation result with success status, data or issues\n*/\nasync function validateWithStandardSchema(schema, data) {\n\tif (!isStandardSchema(schema)) return {\n\t\tsuccess: true,\n\t\tdata\n\t};\n\tconst result = await schema[\"~standard\"].validate(data);\n\tif (!result.issues) return {\n\t\tsuccess: true,\n\t\tdata: result.value\n\t};\n\treturn {\n\t\tsuccess: false,\n\t\tissues: result.issues.map((issue) => ({\n\t\t\tmessage: issue.message || \"Validation failed\",\n\t\t\tpath: issue.path?.map(String)\n\t\t}))\n\t};\n}\n/**\n* Error thrown when Standard Schema validation fails. Carries the original\n* `issues` array so consumers (middleware `onError`, callers catching from\n* `chat({ outputSchema })`) can programmatically inspect each failure.\n*/\nvar StandardSchemaValidationError = class extends Error {\n\tname = \"StandardSchemaValidationError\";\n\tissues;\n\tconstructor(issues) {\n\t\tsuper(`Validation failed: ${issues.map((i) => i.message || \"Validation failed\").join(\", \")}`);\n\t\tthis.issues = issues;\n\t}\n};\n/**\n* Synchronously validates data against a Standard Schema compliant schema.\n* Note: Some Standard Schema implementations may only support async validation.\n* In those cases, this function will throw.\n*\n* @param schema - Standard Schema compliant schema\n* @param data - Data to validate\n* @returns Parsed/validated data\n* @throws StandardSchemaValidationError if validation fails; Error if the\n* schema only supports async validation.\n*/\nfunction parseWithStandardSchema(schema, data) {\n\tif (!isStandardSchema(schema)) return data;\n\tconst result = schema[\"~standard\"].validate(data);\n\tif (result instanceof Promise) throw new Error(\"Schema validation returned a Promise. Use validateWithStandardSchema for async validation.\");\n\tif (!result.issues) return result.value;\n\tthrow new StandardSchemaValidationError(result.issues);\n}\n//#endregion\nexport { StandardSchemaValidationError, convertSchemaForStructuredOutput, convertSchemaToJsonSchema, isStandardJSONSchema, isStandardSchema, parseWithStandardSchema, validateWithStandardSchema };\n\n//# sourceMappingURL=schema-converter.js.map","import { canonicalInterruptJson, digestInterruptJson } from \"../../../interrupt-serialization.js\";\nimport { isStandardJSONSchema, isStandardSchema } from \"./schema-converter.js\";\n//#region src/activities/chat/tools/approval-schema.ts\nvar jsonSchemaKeywords = /* @__PURE__ */ new Set([\n\t\"$schema\",\n\t\"$id\",\n\t\"$ref\",\n\t\"$defs\",\n\t\"type\",\n\t\"properties\",\n\t\"required\",\n\t\"additionalProperties\",\n\t\"items\",\n\t\"oneOf\",\n\t\"anyOf\",\n\t\"allOf\",\n\t\"enum\",\n\t\"const\",\n\t\"format\",\n\t\"minimum\",\n\t\"maximum\",\n\t\"minLength\",\n\t\"maxLength\",\n\t\"pattern\"\n]);\nfunction isPlainRecord(value) {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value) && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);\n}\nfunction isRawJsonSchema(value) {\n\treturn isPlainRecord(value) && Object.keys(value).some((key) => jsonSchemaKeywords.has(key));\n}\nfunction isSchemaInput(value) {\n\treturn isStandardSchema(value) || isStandardJSONSchema(value) || isRawJsonSchema(value);\n}\nfunction isApprovalBranchMap(value) {\n\tif (!isPlainRecord(value)) return false;\n\tconst keys = Object.keys(value);\n\treturn keys.length > 0 && keys.every((key) => key === \"approve\" || key === \"reject\") && keys.every((key) => isSchemaInput(value[key]));\n}\nfunction toJsonSchema(value) {\n\tconst result = {};\n\tfor (const [key, item] of Object.entries(value)) result[key] = item;\n\treturn result;\n}\nfunction schemaToWire(schema) {\n\tif (isStandardSchema(schema)) {\n\t\tconst jsonSchema = isStandardJSONSchema(schema) ? toJsonSchema(schema[\"~standard\"].jsonSchema.input({ target: \"draft-2020-12\" })) : void 0;\n\t\treturn {\n\t\t\tsource: schema,\n\t\t\tvalidator: schema,\n\t\t\t...jsonSchema !== void 0 && { jsonSchema }\n\t\t};\n\t}\n\tif (isRawJsonSchema(schema)) return {\n\t\tsource: schema,\n\t\tjsonSchema: schema\n\t};\n\tthrow new TypeError(\"Expected a supported SchemaInput.\");\n}\nfunction decisionEnvelope(input) {\n\tconst properties = { approved: { const: input.approved } };\n\tconst required = [\"approved\"];\n\tif (input.approved && input.inputSchema) properties[\"editedArgs\"] = input.inputSchema.jsonSchema ?? {};\n\tif (input.payload) {\n\t\tproperties[\"payload\"] = input.payload.jsonSchema ?? {};\n\t\trequired.push(\"payload\");\n\t}\n\treturn {\n\t\ttype: \"object\",\n\t\tproperties,\n\t\trequired,\n\t\tadditionalProperties: false\n\t};\n}\nfunction normalizeApprovalSchema(approvalSchema, inputSchema) {\n\tconst normalizedInput = inputSchema === void 0 ? null : schemaToWire(inputSchema);\n\tlet approve = null;\n\tlet reject = null;\n\tif (approvalSchema !== void 0) {\n\t\tif (isStandardSchema(approvalSchema) || isRawJsonSchema(approvalSchema)) {\n\t\t\tapprove = schemaToWire(approvalSchema);\n\t\t\treject = approve;\n\t\t} else if (isApprovalBranchMap(approvalSchema)) {\n\t\t\tapprove = approvalSchema.approve === void 0 ? null : schemaToWire(approvalSchema.approve);\n\t\t\treject = approvalSchema.reject === void 0 ? null : schemaToWire(approvalSchema.reject);\n\t\t} else throw new TypeError(\"approvalSchema must be a SchemaInput or a nonempty map containing approve or reject.\");\n\t}\n\tconst responseSchema = { oneOf: [decisionEnvelope({\n\t\tapproved: true,\n\t\tpayload: approve,\n\t\tinputSchema: normalizedInput\n\t}), decisionEnvelope({\n\t\tapproved: false,\n\t\tpayload: reject,\n\t\tinputSchema: null\n\t})] };\n\tconst responseCanonical = canonicalInterruptJson(responseSchema);\n\tconst approvalCanonical = canonicalInterruptJson({\n\t\tapprove: approve?.jsonSchema ?? null,\n\t\treject: reject?.jsonSchema ?? null\n\t});\n\treturn {\n\t\tbranches: {\n\t\t\tapprove,\n\t\t\treject\n\t\t},\n\t\tresponseSchema,\n\t\tresponseSchemaHash: digestInterruptJson(responseCanonical),\n\t\tapprovalSchemaHash: digestInterruptJson(approvalCanonical)\n\t};\n}\nfunction hashSchemaInput(schema) {\n\tif (schema === void 0) return digestInterruptJson(\"undefined\");\n\tconst identity = schemaToWire(schema).jsonSchema ?? { standardValidator: \"unserialized\" };\n\treturn digestInterruptJson(canonicalInterruptJson(identity));\n}\n//#endregion\nexport { hashSchemaInput, normalizeApprovalSchema };\n\n//# sourceMappingURL=approval-schema.js.map","import { canonicalInterruptJson, digestInterruptJson } from \"./interrupt-serialization.js\";\nimport { canonicalizeInterruptResolutions } from \"./interrupts.js\";\nimport { isStandardSchema, validateWithStandardSchema } from \"./activities/chat/tools/schema-converter.js\";\nimport { hashSchemaInput, normalizeApprovalSchema } from \"./activities/chat/tools/approval-schema.js\";\n//#region src/interrupt-resume.ts\n/**\n* The `Interrupt.metadata` key under which this package's resume binding\n* travels.\n*\n* Exported so anything that produces an interrupt this package must later\n* resume — an application middleware raising a generic pause, a future\n* workflow-to-AG-UI projection — attaches the binding through\n* {@link withInterruptBinding} rather than copying the string. Everything\n* outside this key is the plain AG-UI envelope and is left untouched.\n*/\nvar INTERRUPT_BINDING_METADATA_KEY = \"tanstack:interruptBinding\";\nvar interruptBindingMetadataKey = INTERRUPT_BINDING_METADATA_KEY;\nvar InterruptResumeValidationError = class extends Error {\n\terrors;\n\tname = \"InterruptResumeValidationError\";\n\tconstructor(errors) {\n\t\tsuper(errors.map((error) => error.message).join(\" \"));\n\t\tthis.errors = errors;\n\t}\n};\nfunction objectValue(value) {\n\treturn value && typeof value === \"object\" ? value : null;\n}\nfunction stringField(value, key) {\n\treturn typeof value[key] === \"string\" ? value[key] : void 0;\n}\nfunction normalizeIssuePath(path) {\n\tif (!path) return void 0;\n\treturn path.map((segment) => {\n\t\tif (typeof segment === \"string\" || typeof segment === \"number\") return segment;\n\t\tconst key = objectValue(segment)?.key;\n\t\treturn typeof key === \"number\" ? key : String(key ?? segment);\n\t});\n}\nfunction interruptItemError(input, interruptId, code, message, options) {\n\treturn {\n\t\tscope: \"item\",\n\t\tthreadId: input.threadId,\n\t\tinterruptedRunId: input.interruptedRunId,\n\t\tgeneration: input.generation,\n\t\tinterruptId,\n\t\tcode,\n\t\tmessage,\n\t\tsource: options?.source ?? \"client\",\n\t\tretryable: options?.retryable ?? false,\n\t\t...options?.path ? { path: options.path } : {}\n\t};\n}\nasync function validateSchemaValue(input) {\n\tif (isStandardSchema(input.schema)) {\n\t\tconst result = await validateWithStandardSchema(input.schema, input.value);\n\t\tif (!result.success) for (const issue of result.issues) input.onIssue(issue.message, normalizeIssuePath(issue.path));\n\t\treturn;\n\t}\n}\nfunction runtimeTool(tools, name) {\n\treturn tools.find((tool) => tool.name === name);\n}\nasync function parseSchemaValue(schema, value) {\n\tif (!isStandardSchema(schema)) return {\n\t\tsuccess: true,\n\t\tdata: value\n\t};\n\tconst result = await validateWithStandardSchema(schema, value);\n\treturn result.success ? {\n\t\tsuccess: true,\n\t\tdata: result.data\n\t} : { success: false };\n}\nfunction descriptorResponseSchema(record) {\n\treturn objectValue(record.payload)?.responseSchema;\n}\nfunction schemaHash(schema) {\n\treturn digestInterruptJson(canonicalInterruptJson(schema));\n}\nasync function pushSchemaIssues(input) {\n\ttry {\n\t\tawait validateSchemaValue({\n\t\t\tschema: input.schema,\n\t\t\tvalue: input.value,\n\t\t\tonIssue: (message, path) => {\n\t\t\t\tinput.errors.push(interruptItemError(input.request, input.interruptId, input.code, `${input.label}: ${message}`, { path }));\n\t\t\t}\n\t\t});\n\t} catch (error) {\n\t\tinput.errors.push(interruptItemError(input.request, input.interruptId, \"invalid-response-schema\", `${input.label} could not be validated: ${error instanceof Error ? error.message : String(error)}`, { source: \"server\" }));\n\t}\n}\nfunction validateDescriptorSchema(input, record, binding, errors) {\n\tconst schema = descriptorResponseSchema(record);\n\tconst responseSchemaHash = binding.responseSchemaHash;\n\tif (schema === void 0 && responseSchemaHash === void 0) return;\n\tif (schema === void 0 || responseSchemaHash === void 0 || schemaHash(schema) !== responseSchemaHash) errors.push(interruptItemError(input, record.interruptId, \"invalid-response-schema\", `Interrupt ${record.interruptId} response schema no longer matches its binding.`, { source: \"server\" }));\n\treturn schema;\n}\n/**\n* Validate and translate a complete interrupt batch before any tool executes.\n* Used by ephemeral chat resume; a durable layer may share the same validator.\n*/\nasync function validateInterruptResumeBatch(input) {\n\tconst grouped = /* @__PURE__ */ new Map();\n\tconst batchErrors = [];\n\tconst group = (interruptId) => {\n\t\tconst existing = grouped.get(interruptId);\n\t\tif (existing) return existing;\n\t\tconst created = [];\n\t\tgrouped.set(interruptId, created);\n\t\treturn created;\n\t};\n\tconst pendingById = new Map(input.pending.map((record) => [record.interruptId, record]));\n\tconst resumeById = /* @__PURE__ */ new Map();\n\tconst counts = /* @__PURE__ */ new Map();\n\tfor (const entry of input.resume ?? []) {\n\t\tcounts.set(entry.interruptId, (counts.get(entry.interruptId) ?? 0) + 1);\n\t\tif (!resumeById.has(entry.interruptId)) resumeById.set(entry.interruptId, entry);\n\t}\n\tfor (const [interruptId, count] of counts) if (count > 1) group(interruptId).push(interruptItemError(input, interruptId, \"conflict\", `Interrupt ${interruptId} has duplicate resume entries.`));\n\tconst pendingGenerics = input.pending.filter((record) => record.binding.kind === \"generic\");\n\tconst genericBatchSatisfied = pendingGenerics.length > 0 && pendingGenerics.every((record) => resumeById.has(record.interruptId));\n\tlet incomplete = false;\n\tfor (const record of input.pending) {\n\t\tconst errors = group(record.interruptId);\n\t\tconst entry = resumeById.get(record.interruptId);\n\t\tconst binding = record.binding;\n\t\tif (!entry) {\n\t\t\tif (genericBatchSatisfied && binding.kind === \"client-tool-execution\") continue;\n\t\t\tincomplete = true;\n\t\t\terrors.push(interruptItemError(input, record.interruptId, \"unknown-interrupt\", `Missing resume entry for interrupt ${record.interruptId}.`));\n\t\t}\n\t\tif (binding.interruptedRunId !== input.interruptedRunId || binding.generation !== input.generation || binding.interruptId !== record.interruptId) errors.push(interruptItemError(input, record.interruptId, \"stale\", `Interrupt ${record.interruptId} has stale correlation metadata.`, { source: \"server\" }));\n\t\tif (binding.expiresAt !== void 0) {\n\t\t\tconst expiresAt = Date.parse(binding.expiresAt);\n\t\t\tif (!Number.isFinite(expiresAt)) errors.push(interruptItemError(input, record.interruptId, \"invalid-payload\", `Interrupt ${record.interruptId} has an invalid expiresAt.`, { source: \"server\" }));\n\t\t\telse if (expiresAt <= (input.now ?? Date.now())) errors.push(interruptItemError(input, record.interruptId, \"expired\", `Interrupt ${record.interruptId} has expired.`, { source: \"server\" }));\n\t\t}\n\t\tconst responseSchema = validateDescriptorSchema(input, record, binding, errors);\n\t\tif (!entry) continue;\n\t\tconst entryStatus = entry.status;\n\t\tif (entryStatus !== \"resolved\" && entryStatus !== \"cancelled\") {\n\t\t\terrors.push(interruptItemError(input, record.interruptId, \"invalid-payload\", `Interrupt ${record.interruptId} has invalid status ${String(entryStatus)}.`));\n\t\t\tcontinue;\n\t\t}\n\t\tif (binding.kind === \"generic\") {\n\t\t\tconst genericRequest = record.genericRequest;\n\t\t\tif (genericRequest !== void 0) {\n\t\t\t\tconst batchIndex = binding.batchIndex;\n\t\t\t\tif (binding.definitionId !== genericRequest.definition.id || binding.key !== genericRequest.key || binding.interruptId !== record.interruptId || batchIndex === void 0 || !Number.isInteger(batchIndex) || batchIndex < 0) errors.push(interruptItemError(input, record.interruptId, \"stale\", `Generic interrupt ${record.interruptId} has stale definition metadata.`, { source: \"server\" }));\n\t\t\t}\n\t\t\tif (entry.status === \"cancelled\") {\n\t\t\t\tif (entry.payload !== void 0) errors.push(interruptItemError(input, record.interruptId, \"invalid-payload\", `Cancelled interrupt ${record.interruptId} must not include a payload.`));\n\t\t\t} else if (genericRequest !== void 0) await pushSchemaIssues({\n\t\t\t\trequest: input,\n\t\t\t\terrors,\n\t\t\t\tinterruptId: record.interruptId,\n\t\t\t\tschema: genericRequest.definition.responseSchema,\n\t\t\t\tvalue: entry.payload,\n\t\t\t\tcode: \"invalid-payload\",\n\t\t\t\tlabel: `Interrupt ${record.interruptId} payload is invalid`\n\t\t\t});\n\t\t\telse if (responseSchema !== void 0) await pushSchemaIssues({\n\t\t\t\trequest: input,\n\t\t\t\terrors,\n\t\t\t\tinterruptId: record.interruptId,\n\t\t\t\tschema: responseSchema,\n\t\t\t\tvalue: entry.payload,\n\t\t\t\tcode: \"invalid-payload\",\n\t\t\t\tlabel: `Interrupt ${record.interruptId} payload is invalid`\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.status === \"cancelled\") {\n\t\t\tif (entry.payload !== void 0) errors.push(interruptItemError(input, record.interruptId, \"invalid-payload\", `Cancelled interrupt ${record.interruptId} must not include a payload.`));\n\t\t\tcontinue;\n\t\t}\n\t\tconst tool = runtimeTool(input.tools, binding.toolName);\n\t\tif (!tool) {\n\t\t\terrors.push(interruptItemError(input, record.interruptId, \"stale\", `Tool ${binding.toolName} is unavailable for interrupt ${record.interruptId}.`, { source: \"server\" }));\n\t\t\tcontinue;\n\t\t}\n\t\tlet approval;\n\t\tlet schemaDrifted = false;\n\t\tif (binding.kind === \"client-tool-execution\") {\n\t\t\tif (hashSchemaInput(tool.outputSchema) !== binding.outputSchemaHash) {\n\t\t\t\terrors.push(interruptItemError(input, record.interruptId, \"stale\", `Tool ${binding.toolName} output schema has changed.`, { source: \"server\" }));\n\t\t\t\tschemaDrifted = true;\n\t\t\t}\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tapproval = normalizeApprovalSchema(tool.approvalSchema, tool.inputSchema);\n\t\t\t} catch {\n\t\t\t\terrors.push(interruptItemError(input, record.interruptId, \"stale\", `Tool ${binding.toolName} approval schema is unavailable.`, { source: \"server\" }));\n\t\t\t\tschemaDrifted = true;\n\t\t\t}\n\t\t\tif (approval !== void 0 && (hashSchemaInput(tool.inputSchema) !== binding.inputSchemaHash || approval.approvalSchemaHash !== binding.approvalSchemaHash || approval.responseSchemaHash !== binding.responseSchemaHash)) {\n\t\t\t\terrors.push(interruptItemError(input, record.interruptId, \"stale\", `Tool ${binding.toolName} approval schema has changed.`, { source: \"server\" }));\n\t\t\t\tschemaDrifted = true;\n\t\t\t}\n\t\t}\n\t\tif (schemaDrifted) continue;\n\t\tif (binding.kind === \"client-tool-execution\") {\n\t\t\tif (responseSchema !== void 0) await pushSchemaIssues({\n\t\t\t\trequest: input,\n\t\t\t\terrors,\n\t\t\t\tinterruptId: record.interruptId,\n\t\t\t\tschema: responseSchema,\n\t\t\t\tvalue: entry.payload,\n\t\t\t\tcode: \"invalid-tool-output\",\n\t\t\t\tlabel: `Tool ${binding.toolName} output is invalid`\n\t\t\t});\n\t\t\tif (tool.outputSchema !== void 0) await pushSchemaIssues({\n\t\t\t\trequest: input,\n\t\t\t\terrors,\n\t\t\t\tinterruptId: record.interruptId,\n\t\t\t\tschema: tool.outputSchema,\n\t\t\t\tvalue: entry.payload,\n\t\t\t\tcode: \"invalid-tool-output\",\n\t\t\t\tlabel: `Tool ${binding.toolName} output is invalid`\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (approval === void 0) continue;\n\t\tconst envelope = objectValue(entry.payload);\n\t\tconst approved = typeof entry.payload === \"boolean\" ? entry.payload : typeof envelope?.approved === \"boolean\" ? envelope.approved : void 0;\n\t\tif (approved === void 0) {\n\t\t\terrors.push(interruptItemError(input, record.interruptId, \"invalid-payload\", `Approval ${record.interruptId} must be a boolean or decision envelope.`));\n\t\t\tcontinue;\n\t\t}\n\t\tif (envelope) await pushSchemaIssues({\n\t\t\trequest: input,\n\t\t\terrors,\n\t\t\tinterruptId: record.interruptId,\n\t\t\tschema: approval.responseSchema,\n\t\t\tvalue: entry.payload,\n\t\t\tcode: \"invalid-payload\",\n\t\t\tlabel: `Approval ${record.interruptId} envelope is invalid`\n\t\t});\n\t\tif (approved && envelope?.editedArgs !== void 0) {\n\t\t\tif (tool.inputSchema === void 0) errors.push(interruptItemError(input, record.interruptId, \"invalid-edited-args\", `Approval ${record.interruptId} cannot edit arguments without an input schema.`));\n\t\t\telse await pushSchemaIssues({\n\t\t\t\trequest: input,\n\t\t\t\terrors,\n\t\t\t\tinterruptId: record.interruptId,\n\t\t\t\tschema: tool.inputSchema,\n\t\t\t\tvalue: envelope.editedArgs,\n\t\t\t\tcode: \"invalid-edited-args\",\n\t\t\t\tlabel: `Approval ${record.interruptId} edited arguments are invalid`\n\t\t\t});\n\t\t}\n\t\tconst branch = approved ? approval.branches.approve : approval.branches.reject;\n\t\tif (branch) {\n\t\t\tif (!envelope) errors.push(interruptItemError(input, record.interruptId, \"invalid-payload\", `Approval ${record.interruptId} requires a payload for the ${approved ? \"approve\" : \"reject\"} decision.`));\n\t\t\telse await pushSchemaIssues({\n\t\t\t\trequest: input,\n\t\t\t\terrors,\n\t\t\t\tinterruptId: record.interruptId,\n\t\t\t\tschema: branch.source,\n\t\t\t\tvalue: envelope.payload,\n\t\t\t\tcode: \"invalid-payload\",\n\t\t\t\tlabel: `Approval ${record.interruptId} payload is invalid`\n\t\t\t});\n\t\t}\n\t}\n\tfor (const entry of input.resume ?? []) if (!pendingById.has(entry.interruptId)) {\n\t\tincomplete = true;\n\t\tgroup(entry.interruptId).push(interruptItemError(input, entry.interruptId, \"unknown-interrupt\", `Resume entry references unknown interrupt ${entry.interruptId}.`));\n\t}\n\tif (incomplete) batchErrors.push({\n\t\tscope: \"batch\",\n\t\tthreadId: input.threadId,\n\t\tinterruptedRunId: input.interruptedRunId,\n\t\tgeneration: input.generation,\n\t\tcode: \"incomplete-batch\",\n\t\tmessage: \"Resume entries must resolve or cancel the complete interrupt batch.\",\n\t\tsource: \"client\",\n\t\tretryable: false,\n\t\tinterruptIds: input.pending.map((record) => record.interruptId)\n\t});\n\tconst itemErrors = [...grouped.entries()].sort(([left], [right]) => left.localeCompare(right)).flatMap(([, errors]) => errors);\n\tif (itemErrors.length > 0) {\n\t\tbatchErrors.push({\n\t\t\tscope: \"batch\",\n\t\t\tthreadId: input.threadId,\n\t\t\tinterruptedRunId: input.interruptedRunId,\n\t\t\tgeneration: input.generation,\n\t\t\tcode: \"item-validation-failed\",\n\t\t\tmessage: \"One or more interrupt resolutions are invalid.\",\n\t\t\tsource: \"client\",\n\t\t\tretryable: false,\n\t\t\tinterruptIds: input.pending.map((record) => record.interruptId)\n\t\t});\n\t\treturn { errors: [...itemErrors, ...batchErrors] };\n\t}\n\tconst canonical = canonicalizeInterruptResolutions(input.resume ?? []);\n\tconst approvals = /* @__PURE__ */ new Map();\n\tconst clientToolResults = /* @__PURE__ */ new Map();\n\tconst genericInterrupts = /* @__PURE__ */ new Map();\n\tconst deniedToolResults = /* @__PURE__ */ new Map();\n\tconst cancelledToolCallIds = /* @__PURE__ */ new Set();\n\tfor (const record of input.pending) {\n\t\tconst entry = resumeById.get(record.interruptId);\n\t\tif (!entry) continue;\n\t\tconst binding = record.binding;\n\t\tif (binding.kind === \"generic\") {\n\t\t\tif (entry.status !== \"resolved\") {\n\t\t\t\tgenericInterrupts.set(record.interruptId, {\n\t\t\t\t\tinterruptId: record.interruptId,\n\t\t\t\t\tstatus: \"cancelled\"\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (record.genericRequest === void 0) {\n\t\t\t\tgenericInterrupts.set(record.interruptId, {\n\t\t\t\t\tinterruptId: record.interruptId,\n\t\t\t\t\tstatus: \"resolved\",\n\t\t\t\t\tpayload: entry.payload\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parsed = await parseSchemaValue(record.genericRequest.definition.responseSchema, entry.payload);\n\t\t\tif (!parsed.success) return { errors: [interruptItemError(input, record.interruptId, \"invalid-payload\", `Interrupt ${record.interruptId} payload is invalid.`)] };\n\t\t\tgenericInterrupts.set(record.interruptId, {\n\t\t\t\tinterruptId: record.interruptId,\n\t\t\t\tstatus: \"resolved\",\n\t\t\t\tpayload: parsed.data\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (entry.status === \"cancelled\") {\n\t\t\tcancelledToolCallIds.add(binding.toolCallId);\n\t\t\tcontinue;\n\t\t}\n\t\tif (binding.kind === \"client-tool-execution\") {\n\t\t\tclientToolResults.set(binding.toolCallId, entry.payload);\n\t\t\tcontinue;\n\t\t}\n\t\tconst envelope = objectValue(entry.payload);\n\t\tconst resolution = typeof entry.payload === \"boolean\" ? entry.payload : envelope?.approved === true ? {\n\t\t\tapproved: true,\n\t\t\t...envelope.editedArgs !== void 0 ? { editedArgs: envelope.editedArgs } : {},\n\t\t\t...envelope.payload !== void 0 ? { payload: envelope.payload } : {}\n\t\t} : {\n\t\t\tapproved: false,\n\t\t\t...envelope?.payload !== void 0 ? { payload: envelope.payload } : {}\n\t\t};\n\t\tapprovals.set(binding.toolCallId, resolution);\n\t\tif (resolution === false || typeof resolution === \"object\" && !resolution.approved) deniedToolResults.set(binding.toolCallId, typeof resolution === \"object\" ? resolution.payload : void 0);\n\t}\n\treturn {\n\t\terrors: [],\n\t\tresolutions: canonical.resolutions,\n\t\tcanonicalResolutions: canonical.canonicalResolutions,\n\t\tfingerprint: canonical.fingerprint,\n\t\tresumeToolState: {\n\t\t\tapprovals,\n\t\t\tclientToolResults,\n\t\t\tgenericInterrupts,\n\t\t\tdeniedToolResults,\n\t\t\tcancelledToolCallIds\n\t\t}\n\t};\n}\n/**\n* Is this a binding written by a version of the protocol we understand?\n*\n* A missing `v` is read as {@link INTERRUPT_BINDING_VERSION} so bindings\n* written before the field existed still resume. A `v` we don't recognise is\n* rejected outright — a newer or foreign producer's binding must not be\n* duck-typed into ours.\n*/\nfunction isSupportedBindingVersion(raw) {\n\tconst version = raw[\"v\"];\n\tif (version === void 0) return true;\n\treturn version === 1;\n}\nfunction readUnopenedInterruptBinding(descriptor) {\n\tconst metadata = objectValue(descriptor.metadata);\n\tconst raw = metadata ? objectValue(metadata[interruptBindingMetadataKey]) : null;\n\tif (!raw || stringField(raw, \"interruptId\") !== descriptor.id) return void 0;\n\tif (!isSupportedBindingVersion(raw)) return void 0;\n\tconst kind = stringField(raw, \"kind\");\n\tconst interruptId = stringField(raw, \"interruptId\");\n\tconst responseSchemaHash = stringField(raw, \"responseSchemaHash\");\n\tconst expiresAt = stringField(raw, \"expiresAt\");\n\tif (!interruptId || responseSchemaHash === \"\") return void 0;\n\tif (expiresAt !== void 0 && !Number.isFinite(Date.parse(expiresAt))) return;\n\tconst v = 1;\n\tif (kind === \"generic\") {\n\t\tconst definitionId = stringField(raw, \"definitionId\");\n\t\tconst key = stringField(raw, \"key\");\n\t\tconst batchIndex = raw[\"batchIndex\"];\n\t\tconst payloadSchemaHash = stringField(raw, \"payloadSchemaHash\");\n\t\tif ((definitionId !== void 0 || key !== void 0 || batchIndex !== void 0 || payloadSchemaHash !== void 0) && (!definitionId || !key || typeof batchIndex !== \"number\" || !Number.isInteger(batchIndex) || batchIndex < 0)) return;\n\t\treturn {\n\t\t\tv,\n\t\t\tkind,\n\t\t\tinterruptId,\n\t\t\t...responseSchemaHash ? { responseSchemaHash } : {},\n\t\t\t...expiresAt ? { expiresAt } : {},\n\t\t\t...definitionId ? { definitionId } : {},\n\t\t\t...key ? { key } : {},\n\t\t\t...typeof batchIndex === \"number\" ? { batchIndex } : {},\n\t\t\t...payloadSchemaHash ? { payloadSchemaHash } : {}\n\t\t};\n\t}\n\tif (!responseSchemaHash) return void 0;\n\tconst toolName = stringField(raw, \"toolName\");\n\tconst toolCallId = stringField(raw, \"toolCallId\");\n\tif (!toolName || !toolCallId) return void 0;\n\tif (kind === \"client-tool-execution\") {\n\t\tconst outputSchemaHash = stringField(raw, \"outputSchemaHash\");\n\t\tif (!outputSchemaHash) return void 0;\n\t\treturn {\n\t\t\tv,\n\t\t\tkind,\n\t\t\tinterruptId,\n\t\t\ttoolName,\n\t\t\ttoolCallId,\n\t\t\toutputSchemaHash,\n\t\t\tresponseSchemaHash,\n\t\t\t...expiresAt ? { expiresAt } : {}\n\t\t};\n\t}\n\tif (kind === \"tool-approval\") {\n\t\tconst inputSchemaHash = stringField(raw, \"inputSchemaHash\");\n\t\tconst approvalSchemaHash = stringField(raw, \"approvalSchemaHash\");\n\t\tif (!inputSchemaHash || !approvalSchemaHash) return void 0;\n\t\treturn {\n\t\t\tv,\n\t\t\tkind,\n\t\t\tinterruptId,\n\t\t\ttoolName,\n\t\t\ttoolCallId,\n\t\t\toriginalArgs: raw.originalArgs,\n\t\t\tinputSchemaHash,\n\t\t\tapprovalSchemaHash,\n\t\t\tresponseSchemaHash,\n\t\t\t...expiresAt ? { expiresAt } : {}\n\t\t};\n\t}\n}\n/**\n* Attach a resume binding to an interrupt descriptor, under\n* {@link INTERRUPT_BINDING_METADATA_KEY}.\n*\n* This is the supported way to make an interrupt resumable by this package.\n* The descriptor keeps its AG-UI shape; only `metadata` gains the namespaced\n* key. Pass the unopened form (no `interruptedRunId` / `generation`) when\n* emitting from inside a run — those fields are stamped as the run finishes.\n*/\nfunction withInterruptBinding(descriptor, binding) {\n\treturn {\n\t\t...descriptor,\n\t\tmetadata: {\n\t\t\t...descriptor.metadata,\n\t\t\t[interruptBindingMetadataKey]: {\n\t\t\t\t...binding,\n\t\t\t\tv: 1,\n\t\t\t\tinterruptId: descriptor.id\n\t\t\t}\n\t\t}\n\t};\n}\n/**\n* Read the opened resume binding off a descriptor, or `undefined` when the\n* descriptor carries no binding of a version we understand.\n*\n* `undefined` means \"this interrupt is not ours to resume\" — it is not a\n* failure to recover from by inventing a binding.\n*/\nfunction readInterruptBinding(descriptor) {\n\tconst unopened = readUnopenedInterruptBinding(descriptor);\n\tif (!unopened) return void 0;\n\tconst metadata = objectValue(descriptor.metadata);\n\tconst raw = metadata ? objectValue(metadata[interruptBindingMetadataKey]) : null;\n\tif (!raw) return void 0;\n\tconst interruptedRunId = stringField(raw, \"interruptedRunId\");\n\tconst generation = raw[\"generation\"];\n\tif (!interruptedRunId || typeof generation !== \"number\" || !Number.isInteger(generation) || generation < 0) return;\n\treturn {\n\t\t...unopened,\n\t\tinterruptedRunId,\n\t\tgeneration\n\t};\n}\nfunction withoutInterruptBinding(descriptor) {\n\tconst metadata = objectValue(descriptor.metadata);\n\tif (!metadata || !(interruptBindingMetadataKey in metadata)) return descriptor;\n\tconst publicMetadata = { ...metadata };\n\tdelete publicMetadata[interruptBindingMetadataKey];\n\treturn {\n\t\t...descriptor,\n\t\tmetadata: publicMetadata\n\t};\n}\n//#endregion\nexport { INTERRUPT_BINDING_METADATA_KEY, InterruptResumeValidationError, interruptItemError, readInterruptBinding, readUnopenedInterruptBinding, validateInterruptResumeBatch, withInterruptBinding, withoutInterruptBinding };\n\n//# sourceMappingURL=interrupt-resume.js.map","import { canonicalInterruptJson, cloneAndDeepFreezeJson, digestInterruptJson } from \"./interrupt-serialization.js\";\nimport \"./interrupts.js\";\nimport { isStandardJSONSchema, isStandardSchema } from \"./activities/chat/tools/schema-converter.js\";\n//#region src/interrupt-definition.ts\nvar INTERRUPT_PAYLOAD_METADATA_KEY = \"tanstack:interruptPayload\";\nvar INTERRUPT_BINDING_KIND = \"generic\";\nvar definitionSchemaState = /* @__PURE__ */ new WeakMap();\nfunction createInterruptBinding(request, fields = {}) {\n\tconst schemaState = definitionSchemaState.get(request.definition);\n\tif (!schemaState) throw new TypeError(\"Interrupt definition schema state is unavailable.\");\n\tconst { threadId, interruptedRunId, generation, batchIndex } = fields;\n\treturn {\n\t\tdescriptor: {\n\t\t\tv: 1,\n\t\t\tkind: INTERRUPT_BINDING_KIND,\n\t\t\tdefinitionId: request.definition.id,\n\t\t\tkey: request.key,\n\t\t\t...threadId !== void 0 ? { threadId } : {},\n\t\t\t...interruptedRunId !== void 0 ? { interruptedRunId } : {},\n\t\t\t...generation !== void 0 ? { generation } : {},\n\t\t\t...batchIndex !== void 0 ? { batchIndex } : {},\n\t\t\t...schemaState.responseSchemaCanonicalJson ? { responseSchemaCanonicalJson: schemaState.responseSchemaCanonicalJson } : {},\n\t\t\t...schemaState.payloadSchemaCanonicalJson ? { payloadSchemaCanonicalJson: schemaState.payloadSchemaCanonicalJson } : {},\n\t\t\t...schemaState.payloadSchemaHash ? { payloadSchemaHash: schemaState.payloadSchemaHash } : {},\n\t\t\t...schemaState.responseSchemaHash ? { responseSchemaHash: schemaState.responseSchemaHash } : {}\n\t\t},\n\t\t...\"payload\" in request && request.payload !== void 0 ? { payload: request.payload } : {}\n\t};\n}\nvar interruptRequestFactories = /* @__PURE__ */ new WeakMap();\nvar interruptRequestInputs = /* @__PURE__ */ new WeakMap();\n/**\n* Returns the schema input captured for a newly emitted request. This is\n* internal because continuation state can cross a client boundary and must be\n* parsed again when it returns to the server.\n*/\nfunction getInterruptRequestInput(request) {\n\tconst input = interruptRequestInputs.get(request);\n\tif (!input) throw new TypeError(\"Interrupt request input is unavailable.\");\n\treturn input;\n}\n/**\n* Rebuild a request from a persisted display payload that has already passed\n* the definition's payload schema. This is internal because callers must not\n* bypass public input validation for new requests.\n*/\nfunction rehydrateInterruptRequest(definition, input) {\n\tconst factory = interruptRequestFactories.get(definition);\n\tif (!factory) throw new TypeError(\"Interrupt definition request factory is unavailable.\");\n\treturn factory(input, true);\n}\nfunction schemaJson(schema, name) {\n\tif (!isStandardJSONSchema(schema)) throw new TypeError(`${name} must be a Standard Schema with a JSON Schema converter.`);\n\ttry {\n\t\tconst exported = schema[\"~standard\"].jsonSchema.input({ target: \"draft-07\" });\n\t\tif (exported === void 0) throw new TypeError(\"The exported schema is undefined.\");\n\t\tif (typeof exported === \"function\") throw new TypeError(\"The exported schema must not be a function.\");\n\t\tif (Array.isArray(exported)) throw new TypeError(\"The exported schema must be a plain JSON object.\");\n\t\tif (!exported || typeof exported !== \"object\" || ![Object.prototype, null].includes(Object.getPrototypeOf(exported))) throw new TypeError(\"The exported schema must be a plain JSON object.\");\n\t\tconst converted = {};\n\t\tfor (const [key, value] of Object.entries(exported)) if (key !== \"$schema\") converted[key] = value;\n\t\treturn {\n\t\t\tjson: converted,\n\t\t\tcanonicalJson: canonicalInterruptJson(converted)\n\t\t};\n\t} catch (error) {\n\t\tthrow new TypeError(`${name} could not export compatible JSON Schema: ${error instanceof Error ? error.message : String(error)}`);\n\t}\n}\n/** Same hash the producer stamps on a first-party generic binding. */\nfunction hashInterruptDefinitionSchema(schema) {\n\treturn digestInterruptJson(schemaJson(schema, \"Interrupt schema\").canonicalJson);\n}\nfunction validateJson(value, label) {\n\ttry {\n\t\tcanonicalInterruptJson(value);\n\t} catch (error) {\n\t\tthrow new TypeError(`${label} must be JSON-compatible: ${error instanceof Error ? error.message : String(error)}`);\n\t}\n}\nfunction validateNonEmptyString(value, label) {\n\tif (typeof value !== \"string\" || value.trim() === \"\") throw new TypeError(`${label} must be a non-empty string.`);\n\treturn value;\n}\nfunction validateExpiresAt(value) {\n\tif (typeof value !== \"string\" || !Number.isFinite(Date.parse(value))) throw new TypeError(\"Interrupt expiresAt must be a valid date string.\");\n\treturn value;\n}\nfunction isPromiseLike(value) {\n\treturn value !== null && (typeof value === \"object\" || typeof value === \"function\") && \"then\" in value && typeof value.then === \"function\";\n}\nfunction parseInterruptPayload(schema, value) {\n\tif (!isStandardSchema(schema)) return value;\n\tconst result = schema[\"~standard\"].validate(value);\n\tif (isPromiseLike(result)) throw new TypeError(\"Interrupt payloadSchema validation must be synchronous.\");\n\tif (result.issues !== void 0) throw new TypeError(`Interrupt payload is invalid: ${result.issues.map((issue) => issue.message).join(\" \")}`);\n\treturn result.value;\n}\nfunction defineInterrupt(options) {\n\tvalidateNonEmptyString(options.id, \"Interrupt definition id\");\n\tconst responseJson = options.responseSchema !== void 0 ? schemaJson(options.responseSchema, \"responseSchema\") : void 0;\n\tconst hasPayloadSchema = Object.prototype.hasOwnProperty.call(options, \"payloadSchema\");\n\tconst payloadJson = hasPayloadSchema ? schemaJson(options.payloadSchema, \"payloadSchema\") : void 0;\n\tconst schemaState = {\n\t\t...responseJson ? {\n\t\t\tresponseSchemaCanonicalJson: responseJson.canonicalJson,\n\t\t\tresponseSchemaHash: digestInterruptJson(responseJson.canonicalJson)\n\t\t} : {},\n\t\t...payloadJson ? {\n\t\t\tpayloadSchemaCanonicalJson: payloadJson.canonicalJson,\n\t\t\tpayloadSchemaHash: digestInterruptJson(payloadJson.canonicalJson)\n\t\t} : {}\n\t};\n\tconst definition = {\n\t\tid: options.id,\n\t\tpayloadSchema: options.payloadSchema,\n\t\tresponseSchema: options.responseSchema,\n\t\tinterrupt(input) {\n\t\t\treturn createRequest(input, false);\n\t\t}\n\t};\n\tconst parsePayload = (payload) => {\n\t\tconst payloadSchema = options.payloadSchema;\n\t\tif (payloadSchema === void 0) throw new TypeError(\"This interrupt definition does not accept a payload.\");\n\t\treturn parseInterruptPayload(payloadSchema, payload);\n\t};\n\tconst createRequest = (input, payloadIsParsed) => {\n\t\tfor (const key of Object.keys(input)) if (![\n\t\t\t\"key\",\n\t\t\t\"payload\",\n\t\t\t\"reason\",\n\t\t\t\"message\",\n\t\t\t\"expiresAt\"\n\t\t].includes(key)) throw new TypeError(`Interrupt input field ${key} is not allowed.`);\n\t\tconst key = validateNonEmptyString(input.key, \"Interrupt key\");\n\t\tconst reason = validateNonEmptyString(input.reason, \"Interrupt reason\");\n\t\tconst message = validateNonEmptyString(input.message, \"Interrupt message\");\n\t\tif (\"payload\" in input) {\n\t\t\tif (!hasPayloadSchema) throw new TypeError(\"This interrupt definition does not accept a payload.\");\n\t\t\tif (input.payload !== void 0) validateJson(input.payload, \"Interrupt payload\");\n\t\t}\n\t\tconst parsedPayload = \"payload\" in input ? payloadIsParsed ? input.payload : parsePayload(input.payload) : void 0;\n\t\tconst payload = parsedPayload === void 0 ? void 0 : cloneAndDeepFreezeJson(parsedPayload);\n\t\tconst expiresAt = input.expiresAt === void 0 ? void 0 : validateExpiresAt(input.expiresAt);\n\t\tconst request = Object.freeze({\n\t\t\tdefinition,\n\t\t\tkey,\n\t\t\t...hasPayloadSchema && payload !== void 0 ? { payload } : {},\n\t\t\treason,\n\t\t\tmessage,\n\t\t\t...expiresAt !== void 0 ? { expiresAt } : {}\n\t\t});\n\t\tif (!payloadIsParsed) interruptRequestInputs.set(request, cloneAndDeepFreezeJson({\n\t\t\tkey,\n\t\t\treason,\n\t\t\tmessage,\n\t\t\t...expiresAt !== void 0 ? { expiresAt } : {},\n\t\t\t...parsedPayload !== void 0 ? { payload: parsedPayload } : {}\n\t\t}));\n\t\treturn request;\n\t};\n\tdefinitionSchemaState.set(definition, schemaState);\n\tinterruptRequestFactories.set(definition, createRequest);\n\treturn Object.freeze(definition);\n}\n//#endregion\nexport { INTERRUPT_BINDING_KIND, INTERRUPT_PAYLOAD_METADATA_KEY, createInterruptBinding, defineInterrupt, getInterruptRequestInput, hashInterruptDefinitionSchema, rehydrateInterruptRequest };\n\n//# sourceMappingURL=interrupt-definition.js.map","import { readUnopenedInterruptBinding } from \"./interrupt-resume.js\";\nimport { INTERRUPT_PAYLOAD_METADATA_KEY } from \"./interrupt-definition.js\";\n//#region src/generic-interrupt-continuation.ts\n/**\n* `ResumeEntry.metadata` key for a first-party generic request.\n*\n* AG-UI `resume` only carries the answer (`interruptId`, `status`, `payload`).\n* The original request rides here so an ephemeral server can rebuild it.\n*/\nvar INTERRUPT_CONTINUATION_METADATA_KEY = \"tanstack:interruptContinuation\";\nvar INTERRUPT_CONTINUATION_VERSION = 1;\nfunction isRecord(value) {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction invalid(message) {\n\treturn {\n\t\tstatus: \"invalid\",\n\t\tmessage\n\t};\n}\n/**\n* Read one generic request from `resume[].metadata`.\n*\n* Missing key means this resume item is not a first-party generic continuation.\n* A present key that fails the shape is a protocol error.\n*/\nfunction readGenericInterruptContinuation(metadata) {\n\tif (metadata === void 0) return { status: \"absent\" };\n\tif (!isRecord(metadata)) return invalid(\"Generic interrupt resume metadata must be an object.\");\n\tif (!Object.prototype.hasOwnProperty.call(metadata, \"tanstack:interruptContinuation\")) return { status: \"absent\" };\n\tconst raw = metadata[INTERRUPT_CONTINUATION_METADATA_KEY];\n\tif (!isRecord(raw)) return invalid(\"Generic interrupt continuation is invalid.\");\n\tif (raw.v !== 1 || typeof raw.definitionId !== \"string\" || typeof raw.key !== \"string\" || typeof raw.reason !== \"string\" || typeof raw.message !== \"string\" || typeof raw.batchIndex !== \"number\" || !Number.isInteger(raw.batchIndex) || raw.batchIndex < 0 || raw.responseSchemaHash !== void 0 && typeof raw.responseSchemaHash !== \"string\" || raw.expiresAt !== void 0 && typeof raw.expiresAt !== \"string\" || raw.payloadSchemaHash !== void 0 && typeof raw.payloadSchemaHash !== \"string\") return invalid(\"Generic interrupt continuation contains invalid fields.\");\n\treturn {\n\t\tstatus: \"ok\",\n\t\tvalue: {\n\t\t\tv: 1,\n\t\t\tdefinitionId: raw.definitionId,\n\t\t\tkey: raw.key,\n\t\t\tbatchIndex: raw.batchIndex,\n\t\t\treason: raw.reason,\n\t\t\tmessage: raw.message,\n\t\t\t...typeof raw.expiresAt === \"string\" ? { expiresAt: raw.expiresAt } : {},\n\t\t\t...typeof raw.responseSchemaHash === \"string\" ? { responseSchemaHash: raw.responseSchemaHash } : {},\n\t\t\t...typeof raw.payloadSchemaHash === \"string\" ? { payloadSchemaHash: raw.payloadSchemaHash } : {},\n\t\t\t...Object.prototype.hasOwnProperty.call(raw, \"payload\") ? { payload: raw.payload } : {}\n\t\t}\n\t};\n}\n/** Put a parsed continuation on `ResumeEntry.metadata`. */\nfunction wrapGenericInterruptContinuation(continuation) {\n\treturn { [INTERRUPT_CONTINUATION_METADATA_KEY]: continuation };\n}\n/**\n* Build the resume-metadata continuation from an outbound AG-UI interrupt.\n*\n* Returns `undefined` when the descriptor is not a first-party generic item.\n*/\nfunction genericInterruptContinuationFromDescriptor(interrupt) {\n\tconst binding = readUnopenedInterruptBinding(interrupt);\n\tif (binding?.kind !== \"generic\" || binding.definitionId === void 0 || binding.key === void 0 || binding.batchIndex === void 0) return;\n\tconst metadata = isRecord(interrupt.metadata) ? interrupt.metadata : void 0;\n\tconst hasPayload = metadata !== void 0 && Object.prototype.hasOwnProperty.call(metadata, \"tanstack:interruptPayload\");\n\treturn {\n\t\tv: 1,\n\t\tdefinitionId: binding.definitionId,\n\t\tkey: binding.key,\n\t\tbatchIndex: binding.batchIndex,\n\t\treason: interrupt.reason,\n\t\tmessage: interrupt.message ?? \"\",\n\t\t...interrupt.expiresAt !== void 0 ? { expiresAt: interrupt.expiresAt } : {},\n\t\t...binding.responseSchemaHash !== void 0 ? { responseSchemaHash: binding.responseSchemaHash } : {},\n\t\t...binding.payloadSchemaHash !== void 0 ? { payloadSchemaHash: binding.payloadSchemaHash } : {},\n\t\t...hasPayload ? { payload: metadata[INTERRUPT_PAYLOAD_METADATA_KEY] } : {}\n\t};\n}\n//#endregion\nexport { INTERRUPT_CONTINUATION_METADATA_KEY, INTERRUPT_CONTINUATION_VERSION, genericInterruptContinuationFromDescriptor, readGenericInterruptContinuation, wrapGenericInterruptContinuation };\n\n//# sourceMappingURL=generic-interrupt-continuation.js.map","//#region src/utilities/tool-result.ts\nvar CONTENT_PART_TYPES = /* @__PURE__ */ new Set([\n\t\"text\",\n\t\"image\",\n\t\"audio\",\n\t\"video\",\n\t\"document\"\n]);\n/**\n* Structural check for a single `ContentPart`. A text part must carry a string\n* `content`; every other modality must carry a `source` with `type` of\n* `'url' | 'data'` and a string `value`.\n*/\nfunction isContentPart(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst part = value;\n\tif (typeof part.type !== \"string\" || !CONTENT_PART_TYPES.has(part.type)) return false;\n\tif (part.type === \"text\") return typeof part.content === \"string\";\n\tconst source = part.source;\n\tif (typeof source !== \"object\" || source === null) return false;\n\tconst src = source;\n\tif (typeof src.value !== \"string\") return false;\n\tif (src.type === \"data\") return typeof src.mimeType === \"string\";\n\treturn src.type === \"url\";\n}\n/**\n* True iff `value` is a NON-EMPTY array whose every element is a valid\n* `ContentPart`. Empty arrays and mixed arrays return false so they continue\n* to be treated as ordinary (stringified) data — this keeps the auto-detection\n* footgun narrow.\n*/\nfunction isContentPartArray(value) {\n\treturn Array.isArray(value) && value.length > 0 && value.every(isContentPart);\n}\n/**\n* Normalize a tool's return value for transport:\n* - string → unchanged\n* - ContentPart array → unchanged (multimodal, passed through to the adapter)\n* - anything else → `JSON.stringify`\n*/\nfunction normalizeToolResult(result) {\n\tif (typeof result === \"string\") return result;\n\tif (isContentPartArray(result)) return result;\n\treturn JSON.stringify(result);\n}\n//#endregion\nexport { isContentPart, isContentPartArray, normalizeToolResult };\n\n//# sourceMappingURL=tool-result.js.map","//#region src/utilities/provider-executed.ts\n/**\n* Narrow a tool call's opaque `metadata` to the provider-executed convention.\n* Returns the typed metadata when the call is provider-executed, else `null`.\n*\n* @see ProviderExecutedToolMetadata\n*/\nfunction getProviderExecutedMetadata(toolCall) {\n\tconst metadata = toolCall?.metadata;\n\tif (typeof metadata === \"object\" && metadata !== null && metadata.providerExecuted === true) return metadata;\n\treturn null;\n}\n/**\n* True when a tool call was executed by the provider (e.g. Anthropic\n* `web_search` / `web_fetch` server tools) rather than the agent loop. Such\n* calls must not be routed to client-side execution and are already \"complete\".\n*/\nfunction isProviderExecutedToolCall(toolCall) {\n\treturn getProviderExecutedMetadata(toolCall) !== null;\n}\n//#endregion\nexport { getProviderExecutedMetadata, isProviderExecutedToolCall };\n\n//# sourceMappingURL=provider-executed.js.map","import { tanstackMetadata } from \"../../utilities/merge-metadata.js\";\nimport { isContentPartArray, normalizeToolResult } from \"../../utilities/tool-result.js\";\nimport { isProviderExecutedToolCall } from \"../../utilities/provider-executed.js\";\n//#region src/activities/chat/messages.ts\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n/**\n* Check if a MessagePart is a content part (text, image, audio, video, document)\n* that maps directly to a ModelMessage ContentPart.\n*/\nfunction isContentPart(part) {\n\treturn part.type === \"text\" || part.type === \"image\" || part.type === \"audio\" || part.type === \"video\" || part.type === \"document\";\n}\nfunction safeJsonStringify(value) {\n\ttry {\n\t\treturn JSON.stringify(value) ?? \"\";\n\t} catch {\n\t\treturn \"\";\n\t}\n}\nfunction nonEmptyString(value) {\n\treturn typeof value === \"string\" && value !== \"\" ? value : void 0;\n}\nfunction encryptedValueFrom(value) {\n\tif (\"encryptedValue\" in value) {\n\t\tconst fromSpec = nonEmptyString(value.encryptedValue);\n\t\tif (fromSpec !== void 0) return fromSpec;\n\t}\n\treturn nonEmptyString(tanstackMetadata(value)?.signature);\n}\nfunction toolCallFromWire(toolCall, bag) {\n\tconst fromBag = bag != null && typeof bag === \"object\" && !Array.isArray(bag) ? bag : void 0;\n\tconst encrypted = encryptedValueFrom(toolCall);\n\tif (bag === null && encrypted === void 0) return {\n\t\t...toolCall,\n\t\tmetadata: null\n\t};\n\tif (fromBag === void 0 && encrypted === void 0) return toolCall;\n\treturn {\n\t\t...toolCall,\n\t\tmetadata: {\n\t\t\t...fromBag ?? {},\n\t\t\t...encrypted !== void 0 ? { thoughtSignature: encrypted } : {}\n\t\t}\n\t};\n}\nfunction parseToolResultContent(content) {\n\ttry {\n\t\treturn JSON.parse(content);\n\t} catch {\n\t\treturn content;\n\t}\n}\n/**\n* Collapse an array of ContentParts into the most compact ModelMessage content:\n* - Empty array → null\n* - All text parts → joined string (or null if empty)\n* - Mixed content → ContentPart array as-is\n*/\nfunction collapseContentParts(parts) {\n\tif (parts.length === 0) return null;\n\tif (parts.every((p) => p.type === \"text\")) return parts.map((p) => p.content).join(\"\") || null;\n\treturn parts;\n}\n/**\n* Extract text content from ModelMessage content (string, null, or ContentPart array).\n* Used when only the text portion is needed (e.g., tool result content).\n*/\nfunction getTextContent(content) {\n\tif (content === null || content === void 0) return \"\";\n\tif (typeof content === \"string\") return content;\n\treturn content.filter((part) => part.type === \"text\").map((part) => part.content).join(\"\");\n}\nfunction toolResultContent(content) {\n\treturn Array.isArray(content) ? content : getTextContent(content);\n}\n/**\n* Convert UIMessages or ModelMessages to ModelMessages\n*/\nfunction convertMessagesToModelMessages(messages) {\n\tconst anchoredToolCallIds = /* @__PURE__ */ new Set();\n\tfor (const msg of messages) if (\"parts\" in msg) {\n\t\tfor (const part of msg.parts) if (part.type === \"tool-result\") anchoredToolCallIds.add(part.toolCallId);\n\t}\n\tconst modelMessages = [];\n\tlet pendingThinking = [];\n\tfor (const msg of messages) {\n\t\tif (\"parts\" in msg) {\n\t\t\tmodelMessages.push(...uiMessageToModelMessages(msg));\n\t\t\tcontinue;\n\t\t}\n\t\tconst modelMessage = restoreModelMessageCreatedAt(restoreToolResultOwnership(msg));\n\t\tconst role = modelMessage.role;\n\t\tif (role === \"tool\" && modelMessage.toolCallId && anchoredToolCallIds.has(modelMessage.toolCallId)) continue;\n\t\tif (role === \"reasoning\") {\n\t\t\tconst content = msg.content;\n\t\t\tconst signature = encryptedValueFrom(msg);\n\t\t\tif (content || signature !== void 0) pendingThinking.push({\n\t\t\t\tcontent: typeof content === \"string\" ? content : \"\",\n\t\t\t\t...signature !== void 0 ? { signature } : {}\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (role === \"activity\") continue;\n\t\tif (role === \"developer\") {\n\t\t\tmodelMessages.push({\n\t\t\t\trole: \"system\",\n\t\t\t\tcontent: msg.content,\n\t\t\t\t...optionalName(modelMessage),\n\t\t\t\t...optionalCreatedAt(modelMessage),\n\t\t\t\t...modelMessage.metadata !== void 0 && { metadata: modelMessage.metadata }\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (role === \"user\" && Array.isArray(msg.content)) {\n\t\t\tconst content = msg.content;\n\t\t\tif (!content.some((part) => part.type === \"text\" && \"text\" in part && !(\"content\" in part))) {\n\t\t\t\tmodelMessages.push(modelMessage);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst contentParts = aguiUserContentToParts(content).filter(isContentPart);\n\t\t\tmodelMessages.push({\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: collapseContentParts(contentParts),\n\t\t\t\t...msg.id !== void 0 && { id: msg.id },\n\t\t\t\t...optionalName(modelMessage),\n\t\t\t\t...optionalCreatedAt(modelMessage),\n\t\t\t\t...modelMessage.metadata !== void 0 && { metadata: modelMessage.metadata }\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (role === \"assistant\") {\n\t\t\tconst source = modelMessage;\n\t\t\tconst toolCallMetadata = tanstackMetadata(msg)?.toolCallMetadata;\n\t\t\tconst toolCalls = source.toolCalls?.map((toolCall) => toolCallFromWire(toolCall, toolCallMetadata?.[toolCall.id]));\n\t\t\tmodelMessages.push({\n\t\t\t\t...source,\n\t\t\t\t...toolCalls !== void 0 ? { toolCalls } : {},\n\t\t\t\t...pendingThinking.length > 0 ? { thinking: [...source.thinking ?? [], ...pendingThinking] } : {}\n\t\t\t});\n\t\t\tpendingThinking = [];\n\t\t\tcontinue;\n\t\t}\n\t\tmodelMessages.push(modelMessage);\n\t}\n\treturn modelMessages;\n}\nfunction restoreModelMessageCreatedAt(message) {\n\tconst createdAt = coerceCreatedAt(message.createdAt) ?? createdAtFromMetadata(message);\n\tif (createdAt === void 0) {\n\t\tif (message.createdAt === void 0) return message;\n\t\tconst { createdAt: _invalid, ...rest } = message;\n\t\treturn rest;\n\t}\n\treturn Object.is(message.createdAt, createdAt) ? message : {\n\t\t...message,\n\t\tcreatedAt\n\t};\n}\nfunction restoreToolResultOwnership(message) {\n\tif (!(\"role\" in message) || message.role !== \"tool\") return message;\n\tconst source = message;\n\tconst owned = tanstackMetadata(source)?.toolResult;\n\tif (!isRecord(owned)) return message;\n\tif (\"content\" in owned && !isContentPartArray(owned.content)) return message;\n\tconst next = { ...message };\n\tif (!(\"id\" in owned)) Reflect.deleteProperty(next, \"id\");\n\tif (!(\"createdAt\" in owned)) Reflect.deleteProperty(next, \"createdAt\");\n\tif (typeof owned.id === \"string\") Reflect.set(next, \"id\", owned.id);\n\tif (typeof owned.createdAt === \"string\") {\n\t\tconst createdAt = coerceCreatedAt(owned.createdAt);\n\t\tif (createdAt) Reflect.set(next, \"createdAt\", createdAt);\n\t}\n\tif (isContentPartArray(owned.content)) Reflect.set(next, \"content\", owned.content);\n\tconst sourceMetadata = Reflect.get(source, \"metadata\");\n\tif (isRecord(sourceMetadata)) {\n\t\tconst tanstack = sourceMetadata.tanstack;\n\t\tif (isRecord(tanstack)) {\n\t\t\tconst { toolResult: _toolResult, ...restTanstack } = tanstack;\n\t\t\tconst restMetadata = { ...sourceMetadata };\n\t\t\tif (Object.keys(restTanstack).length) restMetadata.tanstack = restTanstack;\n\t\t\telse delete restMetadata.tanstack;\n\t\t\tif (Object.keys(restMetadata).length) Reflect.set(next, \"metadata\", restMetadata);\n\t\t\telse Reflect.deleteProperty(next, \"metadata\");\n\t\t}\n\t}\n\treturn next;\n}\n/**\n* Rebuild a `Date` from a live `Date` or from an ISO string.\n* `JSON.stringify` turns `Date` into a string, so persistence reload\n* and AG-UI wire both land here as strings.\n*/\nfunction coerceCreatedAt(value) {\n\tif (value instanceof Date) return Number.isNaN(value.getTime()) ? void 0 : value;\n\tif (typeof value !== \"string\") return void 0;\n\tconst createdAt = new Date(value);\n\treturn Number.isNaN(createdAt.getTime()) ? void 0 : createdAt;\n}\nfunction normalizeMessagePart(part) {\n\tif (part.type !== \"tool-result\") return part;\n\tconst createdAt = coerceCreatedAt(part.createdAt);\n\tconst { createdAt: _createdAt, ...rest } = part;\n\treturn createdAt === void 0 ? rest : {\n\t\t...rest,\n\t\tcreatedAt\n\t};\n}\nfunction createdAtFromMetadata(source) {\n\treturn coerceCreatedAt(tanstackMetadata(source)?.createdAt);\n}\nfunction optionalCreatedAt(source) {\n\tconst createdAt = coerceCreatedAt(source.createdAt);\n\treturn createdAt !== void 0 ? { createdAt } : {};\n}\nfunction optionalName(source) {\n\treturn source.name !== void 0 ? { name: source.name } : {};\n}\nfunction isUiResourcePart(value) {\n\tif (value == null || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tif (!(\"type\" in value) || value.type !== \"ui-resource\") return false;\n\tif (!(\"toolCallId\" in value) || typeof value.toolCallId !== \"string\") return false;\n\tif (!(\"toolName\" in value) || typeof value.toolName !== \"string\") return false;\n\tif (!(\"resource\" in value) || value.resource == null || typeof value.resource !== \"object\" || Array.isArray(value.resource)) return false;\n\tconst resource = value.resource;\n\treturn \"uri\" in resource && typeof resource.uri === \"string\" && \"mimeType\" in resource && typeof resource.mimeType === \"string\";\n}\nfunction uiResourceKey(part) {\n\treturn `${part.toolCallId}\\0${part.toolName}\\0${part.resource.uri}`;\n}\nfunction appendUiResources(ui, resources) {\n\tif (resources.length === 0) return ui;\n\tconst seen = new Set(ui.parts.filter(isUiResourcePart).map((part) => uiResourceKey(part)));\n\tconst extra = resources.filter((part) => !seen.has(uiResourceKey(part)));\n\tif (extra.length === 0) return ui;\n\treturn {\n\t\t...ui,\n\t\tparts: [...ui.parts, ...extra]\n\t};\n}\nfunction assistantMetadata(uiMessage) {\n\tconst fromParts = uiMessage.parts.filter(isUiResourcePart);\n\tconst current = uiMessage.metadata ?? {};\n\tconst previous = tanstackMetadata(uiMessage);\n\tconst tanstack = {};\n\tif (previous?.model !== void 0) tanstack.model = previous.model;\n\tif (previous?.signature !== void 0) tanstack.signature = previous.signature;\n\tif (fromParts.length > 0) tanstack.uiResources = fromParts;\n\tconst result = { ...current };\n\tif (Object.keys(tanstack).length > 0) result.tanstack = tanstack;\n\telse delete result.tanstack;\n\treturn Object.keys(result).length > 0 ? result : void 0;\n}\n/**\n* Convert a UIMessage to ModelMessage(s)\n*\n* Walks the parts array IN ORDER to preserve the interleaving of text,\n* tool calls, and tool results. This is critical for multi-round tool\n* flows where the model generates text, calls a tool, gets the result,\n* then generates more text and calls another tool.\n*\n* The output preserves the sequential structure:\n* text1 → toolCall1 → toolResult1 → text2 → toolCall2 → toolResult2\n* becomes:\n* assistant: {content: \"text1\", toolCalls: [toolCall1]}\n* tool: toolResult1\n* assistant: {content: \"text2\", toolCalls: [toolCall2]}\n* tool: toolResult2\n*\n* @param uiMessage - The UIMessage to convert\n* @returns An array of ModelMessages preserving part ordering\n*/\nfunction uiMessageToModelMessages(uiMessage) {\n\tif (uiMessage.role === \"system\") return [];\n\tif (uiMessage.role !== \"assistant\") return [buildUserOrToolMessage(uiMessage)];\n\treturn buildAssistantMessages(uiMessage);\n}\n/**\n* Build a single ModelMessage for user messages (simple path).\n* Preserves ordering of text and multimodal content parts.\n*/\nfunction buildUserOrToolMessage(uiMessage) {\n\tconst contentParts = [];\n\tfor (const part of uiMessage.parts) if (isContentPart(part)) contentParts.push(part);\n\treturn {\n\t\tid: uiMessage.id,\n\t\trole: uiMessage.role,\n\t\tcontent: collapseContentParts(contentParts),\n\t\t...optionalName(uiMessage),\n\t\t...optionalCreatedAt(uiMessage),\n\t\t...uiMessage.metadata !== void 0 && { metadata: uiMessage.metadata }\n\t};\n}\nfunction createSegment() {\n\treturn {\n\t\tcontentParts: [],\n\t\ttoolCalls: []\n\t};\n}\nfunction isToolCallIncluded(part) {\n\treturn part.state === \"input-complete\" || part.state === \"complete\" || part.state === \"approval-requested\" || part.state === \"approval-responded\" || part.state === \"error\" || part.output !== void 0;\n}\n/**\n* Build ModelMessages for an assistant UIMessage, preserving the\n* sequential interleaving of text, tool calls, and tool results.\n*\n* Walks parts in order. Text and tool-call parts accumulate into the\n* current \"segment\". When a tool-result part is encountered, the\n* current segment is flushed as an assistant message, then the tool\n* result is emitted as a tool message.\n*/\nfunction buildAssistantMessages(uiMessage) {\n\tconst messageList = [];\n\tlet current = createSegment();\n\tlet pendingThinking = [];\n\tconst emittedToolResultIds = /* @__PURE__ */ new Set();\n\tconst identityFields = {\n\t\tid: uiMessage.id,\n\t\t...optionalName(uiMessage),\n\t\t...optionalCreatedAt(uiMessage)\n\t};\n\tconst metadata = assistantMetadata(uiMessage);\n\tconst assistantFields = {\n\t\t...identityFields,\n\t\t...metadata !== void 0 && { metadata }\n\t};\n\tfunction flushSegment(force = false) {\n\t\tconst content = collapseContentParts(current.contentParts);\n\t\tconst hasContent = content !== null;\n\t\tconst hasToolCalls = current.toolCalls.length > 0;\n\t\tconst hasThinking = pendingThinking.length > 0;\n\t\tif (force || hasContent || hasToolCalls || hasThinking) {\n\t\t\tmessageList.push({\n\t\t\t\t...assistantFields,\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent,\n\t\t\t\t...hasToolCalls && { toolCalls: current.toolCalls },\n\t\t\t\t...hasThinking && { thinking: pendingThinking },\n\t\t\t\t...current.structuredOutput && { structuredOutput: current.structuredOutput }\n\t\t\t});\n\t\t\tpendingThinking = [];\n\t\t}\n\t\tcurrent = createSegment();\n\t}\n\tfor (const part of uiMessage.parts) switch (part.type) {\n\t\tcase \"text\":\n\t\tcase \"image\":\n\t\tcase \"audio\":\n\t\tcase \"video\":\n\t\tcase \"document\":\n\t\t\tcurrent.contentParts.push(part);\n\t\t\tbreak;\n\t\tcase \"tool-call\":\n\t\t\tif (isToolCallIncluded(part)) current.toolCalls.push({\n\t\t\t\tid: part.id,\n\t\t\t\ttype: \"function\",\n\t\t\t\tfunction: {\n\t\t\t\t\tname: part.name,\n\t\t\t\t\targuments: part.arguments\n\t\t\t\t},\n\t\t\t\t...part.metadata !== void 0 && { metadata: part.metadata }\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"tool-result\":\n\t\t\tflushSegment(messageList.length === 0);\n\t\t\tif ((part.state === \"complete\" || part.state === \"error\") && !emittedToolResultIds.has(part.toolCallId)) {\n\t\t\t\tmessageList.push({\n\t\t\t\t\t...part.id !== void 0 && { id: part.id },\n\t\t\t\t\t...optionalCreatedAt(part),\n\t\t\t\t\trole: \"tool\",\n\t\t\t\t\tcontent: part.content,\n\t\t\t\t\ttoolCallId: part.toolCallId,\n\t\t\t\t\t...part.name !== void 0 && { name: part.name },\n\t\t\t\t\t...part.metadata !== void 0 && { metadata: part.metadata },\n\t\t\t\t\t...part.error !== void 0 && { error: part.error }\n\t\t\t\t});\n\t\t\t\temittedToolResultIds.add(part.toolCallId);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"thinking\":\n\t\t\tif (part.content || part.signature) {\n\t\t\t\tif (current.toolCalls.some(isProviderExecutedToolCall)) flushSegment();\n\t\t\t\tpendingThinking.push({\n\t\t\t\t\tcontent: part.content,\n\t\t\t\t\t...part.signature && { signature: part.signature }\n\t\t\t\t});\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"structured-output\": if (part.status === \"complete\") {\n\t\t\tconst serialized = part.raw !== \"\" ? part.raw : part.data !== void 0 ? safeJsonStringify(part.data) : \"\";\n\t\t\tif (serialized !== \"\") {\n\t\t\t\tcurrent.contentParts.push({\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\tcontent: serialized\n\t\t\t\t});\n\t\t\t\tcurrent.structuredOutput = part;\n\t\t\t}\n\t\t}\n\t}\n\tflushSegment();\n\tfor (const part of uiMessage.parts) {\n\t\tif (part.type !== \"tool-call\") continue;\n\t\tif (part.output !== void 0 && !emittedToolResultIds.has(part.id)) {\n\t\t\tmessageList.push({\n\t\t\t\trole: \"tool\",\n\t\t\t\tcontent: normalizeToolResult(part.output),\n\t\t\t\ttoolCallId: part.id\n\t\t\t});\n\t\t\temittedToolResultIds.add(part.id);\n\t\t}\n\t\tif (part.output === void 0 && part.state === \"approval-responded\" && part.approval?.approved !== void 0 && !emittedToolResultIds.has(part.id)) {\n\t\t\tconst approved = part.approval.approved;\n\t\t\tmessageList.push({\n\t\t\t\trole: \"tool\",\n\t\t\t\tcontent: JSON.stringify({\n\t\t\t\t\tapproved,\n\t\t\t\t\t...approved && { pendingExecution: true },\n\t\t\t\t\tmessage: approved ? \"User approved this action\" : \"User denied this action\"\n\t\t\t\t}),\n\t\t\t\ttoolCallId: part.id\n\t\t\t});\n\t\t\temittedToolResultIds.add(part.id);\n\t\t}\n\t}\n\tif (messageList.length === 0) messageList.push({\n\t\t...assistantFields,\n\t\trole: \"assistant\",\n\t\tcontent: null\n\t});\n\treturn messageList;\n}\n/**\n* Convert a ModelMessage to UIMessage\n*\n* This conversion creates a parts-based structure:\n* - content field → TextPart\n* - toolCalls array → ToolCallPart[]\n* - role=\"tool\" messages should be converted separately and merged\n*\n* @param modelMessage - The ModelMessage to convert\n* @param id - Optional ID for the UIMessage (generated if not provided)\n* @returns A UIMessage with parts\n*/\nfunction modelMessageToUIMessage(modelMessage, id) {\n\tconst parts = [];\n\tconst createdAt = coerceCreatedAt(modelMessage.createdAt);\n\tif (modelMessage.role === \"assistant\" && modelMessage.thinking?.length) for (const thinking of modelMessage.thinking) {\n\t\tif (!thinking.content && !thinking.signature) continue;\n\t\tparts.push({\n\t\t\ttype: \"thinking\",\n\t\t\tcontent: thinking.content,\n\t\t\t...thinking.signature && { signature: thinking.signature }\n\t\t});\n\t}\n\tconst structuredOutput = modelMessage.structuredOutput ?? snapshotStructuredOutput(tanstackMetadata(modelMessage)?.structuredOutput);\n\tif (modelMessage.role === \"assistant\" && structuredOutput) {\n\t\tif (typeof modelMessage.content === \"string\" && modelMessage.content && modelMessage.content !== structuredOutput.raw) {\n\t\t\tconst suffix = structuredOutput.raw;\n\t\t\tconst text = suffix !== \"\" && modelMessage.content.endsWith(suffix) ? modelMessage.content.slice(0, -suffix.length) : modelMessage.content;\n\t\t\tif (text) parts.push({\n\t\t\t\ttype: \"text\",\n\t\t\t\tcontent: text\n\t\t\t});\n\t\t}\n\t\tparts.push(structuredOutput);\n\t} else if (modelMessage.role === \"tool\" && modelMessage.toolCallId) parts.push({\n\t\ttype: \"tool-result\",\n\t\ttoolCallId: modelMessage.toolCallId,\n\t\tcontent: toolResultContent(modelMessage.content),\n\t\tstate: modelMessage.error === void 0 ? \"complete\" : \"error\",\n\t\t...modelMessage.id !== void 0 && { id: modelMessage.id },\n\t\t...modelMessage.name !== void 0 && { name: modelMessage.name },\n\t\t...modelMessage.metadata !== void 0 && { metadata: modelMessage.metadata },\n\t\t...createdAt !== void 0 && { createdAt },\n\t\t...modelMessage.error !== void 0 && { error: modelMessage.error }\n\t});\n\telse if (Array.isArray(modelMessage.content)) for (const part of modelMessage.content) parts.push(part);\n\telse {\n\t\tconst textContent = getTextContent(modelMessage.content);\n\t\tif (textContent) parts.push({\n\t\t\ttype: \"text\",\n\t\t\tcontent: textContent\n\t\t});\n\t}\n\tif (modelMessage.toolCalls && modelMessage.toolCalls.length > 0) for (const toolCall of modelMessage.toolCalls) {\n\t\tlet input;\n\t\ttry {\n\t\t\tinput = JSON.parse(toolCall.function.arguments);\n\t\t} catch {\n\t\t\tinput = void 0;\n\t\t}\n\t\tparts.push({\n\t\t\ttype: \"tool-call\",\n\t\t\tid: toolCall.id,\n\t\t\tname: toolCall.function.name,\n\t\t\targuments: toolCall.function.arguments,\n\t\t\tstate: \"input-complete\",\n\t\t\t...input !== void 0 && { input },\n\t\t\t...toolCall.metadata !== void 0 && { metadata: toolCall.metadata }\n\t\t});\n\t}\n\tconst ui = {\n\t\tid: id || generateMessageId(),\n\t\trole: modelMessage.role === \"tool\" ? \"assistant\" : modelMessage.role,\n\t\tparts,\n\t\t...optionalName(modelMessage),\n\t\t...createdAt !== void 0 && { createdAt },\n\t\t...modelMessage.metadata !== void 0 && { metadata: modelMessage.metadata }\n\t};\n\tconst storedResources = tanstackMetadata(modelMessage)?.uiResources;\n\treturn appendUiResources(ui, Array.isArray(storedResources) ? storedResources.filter(isUiResourcePart) : []);\n}\n/**\n* Normalize a single AG-UI `MESSAGES_SNAPSHOT` message into a `UIMessage`.\n*\n* AG-UI snapshot messages use the wire shape `{ id, role, content }` and have\n* no `parts` array. Casting them directly to `UIMessage` is unsafe: any code\n* that later reads `message.parts` (e.g. the devtools `onToolCallStateChange`\n* handler) crashes with \"Cannot read properties of undefined (reading 'find')\".\n*\n* Each role is mapped to the canonical `UIMessage` shape, reusing\n* `modelMessageToUIMessage` for the roles that share `ModelMessage`'s structure.\n* The original AG-UI `id` is preserved so later `TEXT_MESSAGE_CONTENT` /\n* `TOOL_CALL_*` events still route by `messageId` (falling back to a generated\n* id only when the snapshot omits one). Messages that already carry `parts`\n* (e.g. a TanStack server echoing `UIMessage`s back over the wire) pass through\n* unchanged apart from ensuring an id.\n*/\nfunction aguiSnapshotMessageToUIMessage(message) {\n\tif (\"parts\" in message) return applySnapshotMetadata(message, {\n\t\t...message,\n\t\tid: message.id || generateMessageId()\n\t});\n\tconst id = message.id || generateMessageId();\n\tswitch (message.role) {\n\t\tcase \"user\": return applySnapshotMetadata(message, {\n\t\t\tid,\n\t\t\trole: \"user\",\n\t\t\tparts: aguiUserContentToParts(message.content)\n\t\t});\n\t\tcase \"assistant\": {\n\t\t\tconst metadata = tanstackMetadata(message);\n\t\t\tconst toolCallMetadata = metadata?.toolCallMetadata;\n\t\t\tconst structuredOutput = snapshotStructuredOutput(metadata?.structuredOutput);\n\t\t\tconst toolCalls = message.toolCalls?.map((toolCall) => {\n\t\t\t\tconst callMetadata = toolCallMetadata != null && typeof toolCallMetadata === \"object\" ? toolCallMetadata[toolCall.id] : void 0;\n\t\t\t\treturn callMetadata !== void 0 ? {\n\t\t\t\t\t...toolCall,\n\t\t\t\t\tmetadata: callMetadata\n\t\t\t\t} : toolCall;\n\t\t\t});\n\t\t\treturn applySnapshotMetadata(message, modelMessageToUIMessage({\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: message.content ?? null,\n\t\t\t\t...optionalName(message),\n\t\t\t\t...toolCalls && { toolCalls },\n\t\t\t\t...structuredOutput && { structuredOutput }\n\t\t\t}, id));\n\t\t}\n\t\tcase \"tool\": {\n\t\t\tmessage = restoreToolResultOwnership(message);\n\t\t\tconst createdAt = coerceCreatedAt(\"createdAt\" in message ? message.createdAt : void 0) ?? createdAtFromMetadata(message);\n\t\t\treturn applySnapshotMetadata(message, modelMessageToUIMessage({\n\t\t\t\trole: \"tool\",\n\t\t\t\tcontent: message.content,\n\t\t\t\ttoolCallId: message.toolCallId,\n\t\t\t\t...\"name\" in message && typeof message.name === \"string\" ? { name: message.name } : {},\n\t\t\t\t...\"id\" in message && typeof message.id === \"string\" ? { id: message.id } : {},\n\t\t\t\t...\"metadata\" in message && message.metadata != null ? { metadata: message.metadata } : {},\n\t\t\t\t...createdAt !== void 0 ? { createdAt } : {},\n\t\t\t\t...message.error !== void 0 && { error: message.error }\n\t\t\t}, id));\n\t\t}\n\t\tcase \"system\":\n\t\tcase \"developer\": return applySnapshotMetadata(message, {\n\t\t\tid,\n\t\t\trole: \"system\",\n\t\t\tparts: message.content ? [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tcontent: message.content\n\t\t\t}] : []\n\t\t});\n\t\tcase \"reasoning\": {\n\t\t\tconst signature = encryptedValueFrom(message);\n\t\t\tconst content = typeof message.content === \"string\" ? message.content : \"\";\n\t\t\treturn applySnapshotMetadata(message, {\n\t\t\t\tid,\n\t\t\t\trole: \"assistant\",\n\t\t\t\tparts: content || signature !== void 0 ? [{\n\t\t\t\t\ttype: \"thinking\",\n\t\t\t\t\tcontent,\n\t\t\t\t\t...signature !== void 0 ? { signature } : {}\n\t\t\t\t}] : []\n\t\t\t});\n\t\t}\n\t\tdefault: return applySnapshotMetadata(message, {\n\t\t\tid,\n\t\t\trole: \"assistant\",\n\t\t\tparts: []\n\t\t});\n\t}\n}\n/** Copy snapshot metadata when it is a record. Rebuild createdAt from tanstack.createdAt. */\nfunction applySnapshotMetadata(source, ui) {\n\tconst normalizedParts = ui.parts.map((part) => normalizeMessagePart(part));\n\tif (normalizedParts !== ui.parts) ui = {\n\t\t...ui,\n\t\tparts: normalizedParts\n\t};\n\tconst name = \"name\" in source && typeof source.name === \"string\" ? source.name : void 0;\n\tlet next = name !== void 0 ? {\n\t\t...ui,\n\t\tname\n\t} : ui;\n\tlet metadata;\n\tif (\"metadata\" in source) {\n\t\tconst raw = source.metadata;\n\t\tif (raw != null && typeof raw === \"object\" && !Array.isArray(raw)) {\n\t\t\tmetadata = raw;\n\t\t\tnext = {\n\t\t\t\t...next,\n\t\t\t\tmetadata\n\t\t\t};\n\t\t}\n\t}\n\tconst createdAt = coerceCreatedAt(next.createdAt) ?? (metadata !== void 0 ? createdAtFromMetadata(metadata) : void 0);\n\tif (createdAt !== void 0 && !Object.is(createdAt, next.createdAt)) next = {\n\t\t...next,\n\t\tcreatedAt\n\t};\n\telse if (createdAt === void 0 && next.createdAt !== void 0) {\n\t\tconst { createdAt: _invalid, ...rest } = next;\n\t\tnext = rest;\n\t}\n\tconst uiResources = tanstackMetadata(metadata)?.uiResources;\n\tconst resources = Array.isArray(uiResources) ? uiResources.filter(isUiResourcePart) : [];\n\treturn appendUiResources(next, resources);\n}\nfunction snapshotStructuredOutput(value) {\n\tif (value == null || value.status !== \"streaming\" && value.status !== \"complete\" && value.status !== \"error\" || typeof value.raw !== \"string\") return;\n\treturn {\n\t\ttype: \"structured-output\",\n\t\tstatus: value.status,\n\t\traw: value.raw,\n\t\t...value.partial !== void 0 ? { partial: value.partial } : {},\n\t\t...value.data !== void 0 ? { data: value.data } : {},\n\t\t...value.reasoning ? { reasoning: value.reasoning } : {},\n\t\t...value.errorMessage !== void 0 ? { errorMessage: value.errorMessage } : {}\n\t};\n}\n/**\n* Convert AG-UI user message content into `UIMessage` parts.\n*\n* AG-UI user content is either a plain string or a multimodal array whose text\n* entries use `{ type: 'text', text }` (vs. TanStack's `{ type: 'text', content }`).\n* Text entries are rewritten to the TanStack shape; image/audio/video/document\n* entries already match `ContentPart` and pass through. `binary` entries have no\n* TanStack equivalent and are dropped.\n*/\nfunction aguiUserContentToParts(content) {\n\tif (typeof content === \"string\") return content ? [{\n\t\ttype: \"text\",\n\t\tcontent\n\t}] : [];\n\tconst parts = [];\n\tfor (const part of content) if (part.type === \"text\") parts.push({\n\t\ttype: \"text\",\n\t\tcontent: part.text\n\t});\n\telse if (part.type !== \"binary\") parts.push(part);\n\treturn parts;\n}\n/**\n* Convert an array of ModelMessages to UIMessages\n*\n* This handles merging tool result messages with their corresponding assistant messages\n*\n* @param modelMessages - Array of ModelMessages to convert\n* @returns Array of UIMessages\n*/\nfunction modelMessagesToUIMessages(modelMessages) {\n\tconst uiMessages = [];\n\tlet currentAssistantMessage = null;\n\tfor (const msg of modelMessages) if (msg.role === \"tool\") {\n\t\tif (msg.toolCallId !== void 0 && currentAssistantMessage && currentAssistantMessage.role === \"assistant\") {\n\t\t\tconst content = toolResultContent(msg.content);\n\t\t\tconst toolCallPart = currentAssistantMessage.parts.find((part) => part.type === \"tool-call\" && part.id === msg.toolCallId);\n\t\t\tif (toolCallPart) {\n\t\t\t\ttoolCallPart.output = typeof content === \"string\" ? parseToolResultContent(content) : content;\n\t\t\t\ttoolCallPart.state = msg.error === void 0 ? \"complete\" : \"error\";\n\t\t\t}\n\t\t\tcurrentAssistantMessage.parts.push({\n\t\t\t\ttype: \"tool-result\",\n\t\t\t\ttoolCallId: msg.toolCallId,\n\t\t\t\tcontent,\n\t\t\t\tstate: msg.error === void 0 ? \"complete\" : \"error\",\n\t\t\t\t...msg.id !== void 0 && msg.id !== currentAssistantMessage.id && { id: msg.id },\n\t\t\t\t...msg.name !== void 0 && { name: msg.name },\n\t\t\t\t...msg.metadata !== void 0 && { metadata: msg.metadata },\n\t\t\t\t...optionalCreatedAt(msg),\n\t\t\t\t...msg.error !== void 0 && { error: msg.error }\n\t\t\t});\n\t\t} else {\n\t\t\tconst toolResultUIMessage = modelMessageToUIMessage(msg, msg.id);\n\t\t\tuiMessages.push(toolResultUIMessage);\n\t\t}\n\t} else {\n\t\tconst uiMessage = modelMessageToUIMessage(msg, msg.id);\n\t\tuiMessages.push(uiMessage);\n\t\tif (msg.role === \"assistant\") currentAssistantMessage = uiMessage;\n\t\telse currentAssistantMessage = null;\n\t}\n\treturn uiMessages;\n}\n/**\n* Normalize a message (UIMessage or ModelMessage) to a UIMessage\n* Ensures the message has an ID and createdAt timestamp\n*\n* @param message - Either a UIMessage or ModelMessage\n* @param generateId - Function to generate a message ID if needed\n* @returns A UIMessage with guaranteed id and createdAt\n*/\nfunction normalizeToUIMessage(message, generateId) {\n\tif (\"parts\" in message) {\n\t\tconst parts = message.parts.map((part) => normalizeMessagePart(part));\n\t\treturn {\n\t\t\t...message,\n\t\t\tparts,\n\t\t\tid: message.id || generateId(),\n\t\t\tcreatedAt: coerceCreatedAt(message.createdAt) ?? /* @__PURE__ */ new Date()\n\t\t};\n\t} else return {\n\t\t...modelMessageToUIMessage(message, generateId()),\n\t\tcreatedAt: coerceCreatedAt(message.createdAt) ?? /* @__PURE__ */ new Date()\n\t};\n}\n/**\n* Generate a unique message ID\n*/\nfunction generateMessageId() {\n\treturn `msg-${Date.now()}-${Math.random().toString(36).substring(7)}`;\n}\n//#endregion\nexport { aguiSnapshotMessageToUIMessage, coerceCreatedAt, convertMessagesToModelMessages, generateMessageId, modelMessageToUIMessage, modelMessagesToUIMessages, normalizeToUIMessage, restoreToolResultOwnership, safeJsonStringify, uiMessageToModelMessages };\n\n//# sourceMappingURL=messages.js.map","import { tanstackMetadata } from \"./merge-metadata.js\";\nimport { normalizeToolResult } from \"./tool-result.js\";\nimport { coerceCreatedAt, modelMessageToUIMessage } from \"../activities/chat/messages.js\";\n//#region src/utilities/ag-ui-wire.ts\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction rebuiltToolMetadata(metadata, createdAt, id, content, anchorOwnsUiResources = false) {\n\tconst source = isRecord(metadata) ? metadata : {};\n\tconst tanstack = isRecord(source.tanstack) ? { ...source.tanstack } : {};\n\tif (anchorOwnsUiResources) delete tanstack.uiResources;\n\tconst date = coerceCreatedAt(createdAt);\n\tconst toolResult = {\n\t\t...id !== void 0 ? { id } : {},\n\t\t...date && { createdAt: date.toISOString() },\n\t\t...Array.isArray(content) && { content }\n\t};\n\tconst result = {\n\t\t...source,\n\t\ttanstack: {\n\t\t\t...tanstack,\n\t\t\ttoolResult\n\t\t}\n\t};\n\treturn Object.keys(result).length ? result : void 0;\n}\n/**\n* Serialize TanStack `UIMessage`s and `ModelMessage`s into the AG-UI\n* `RunAgentInput.messages` wire shape. Anchors are spec-only (`id`, `role`,\n* `name`, `content`, `toolCalls`, `metadata`). Tool results and thinking parts\n* on assistant messages are additionally emitted as fan-out\n* `{role:'tool',...}` and `{role:'reasoning',...}` entries for strict AG-UI\n* server consumers. Set `includeSnapshotStructuredOutput` to retain complete\n* structured-output metadata for UI snapshots.\n*/\nfunction uiMessagesToWire(messages, options) {\n\tconst wire = [];\n\tconst usedWireIds = new Set(messages.flatMap((message) => \"id\" in message && message.id && message.role !== \"tool\" ? [message.id] : []));\n\tconst includeSnapshotStructuredOutput = options?.includeSnapshotStructuredOutput ?? false;\n\tconst assistantIds = /* @__PURE__ */ new Set();\n\tfor (const msg of messages) if (msg.role === \"assistant\" && msg.id !== void 0) assistantIds.add(msg.id);\n\tfor (const msg of messages) {\n\t\tif (!(\"parts\" in msg) && msg.role === \"tool\" && msg.toolCallId) {\n\t\t\tconst id = uniqueToolWireId(toolWireId(msg.id, msg.toolCallId, assistantIds), usedWireIds);\n\t\t\tconst metadata = rebuiltToolMetadata(msg.metadata, msg.createdAt, msg.id, msg.content);\n\t\t\twire.push({\n\t\t\t\trole: \"tool\",\n\t\t\t\tid,\n\t\t\t\t...msg.name !== void 0 && { name: msg.name },\n\t\t\t\ttoolCallId: msg.toolCallId,\n\t\t\t\tcontent: typeof msg.content === \"string\" ? msg.content : JSON.stringify(msg.content),\n\t\t\t\t...msg.error !== void 0 && { error: msg.error },\n\t\t\t\t...metadata !== void 0 && { metadata }\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst uiMessage = \"parts\" in msg ? msg : modelMessageToUIMessage(msg, msg.id);\n\t\tconst parts = uiMessage.parts;\n\t\tusedWireIds.add(uiMessage.id);\n\t\tif (msg.role === \"system\") {\n\t\t\twire.push(toAnchor(uiMessage, \"system\", { content: parts.length > 0 ? collectText(parts) : msg.content ?? \"\" }, parts, includeSnapshotStructuredOutput));\n\t\t\tcontinue;\n\t\t}\n\t\tif (msg.role === \"user\") {\n\t\t\twire.push(toAnchor(uiMessage, \"user\", { content: parts.length > 0 ? collectUserContent(parts) : msg.content ?? \"\" }, parts, includeSnapshotStructuredOutput));\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const part of parts) if (part.type === \"thinking\") {\n\t\t\tconst reasoning = {\n\t\t\t\trole: \"reasoning\",\n\t\t\t\tid: uniqueWireId(deriveReasoningId(uiMessage.id, part), usedWireIds),\n\t\t\t\tcontent: part.content\n\t\t\t};\n\t\t\tif (part.signature) reasoning.encryptedValue = part.signature;\n\t\t\twire.push(reasoning);\n\t\t}\n\t\tconst text = collectText(parts);\n\t\tconst toolCalls = collectToolCalls(parts);\n\t\twire.push(toAnchor(uiMessage, \"assistant\", {\n\t\t\t...text !== \"\" && { content: text },\n\t\t\t...toolCalls && { toolCalls }\n\t\t}, parts, includeSnapshotStructuredOutput));\n\t\tconst explicitToolResults = new Set(parts.flatMap((part) => part.type === \"tool-result\" ? [part.toolCallId] : []));\n\t\tfor (const part of parts) if (part.type === \"tool-result\") {\n\t\t\tconst id = uniqueToolWireId(part.id ?? deriveToolMessageId(part.toolCallId), usedWireIds);\n\t\t\tconst metadata = rebuiltToolMetadata(part.metadata, part.createdAt, part.id, part.content, true);\n\t\t\twire.push({\n\t\t\t\trole: \"tool\",\n\t\t\t\tid,\n\t\t\t\ttoolCallId: part.toolCallId,\n\t\t\t\t...part.name !== void 0 && { name: part.name },\n\t\t\t\tcontent: typeof part.content === \"string\" ? part.content : JSON.stringify(part.content),\n\t\t\t\t...part.error !== void 0 && { error: part.error },\n\t\t\t\t...metadata !== void 0 && { metadata }\n\t\t\t});\n\t\t} else if (part.type === \"tool-call\") {\n\t\t\tconst approved = part.approval?.approved;\n\t\t\tif (explicitToolResults.has(part.id) || part.output === void 0 && (part.state !== \"approval-responded\" || approved === void 0)) continue;\n\t\t\tconst result = part.output !== void 0 ? normalizeToolResult(part.output) : JSON.stringify({\n\t\t\t\tapproved,\n\t\t\t\t...approved && { pendingExecution: true },\n\t\t\t\tmessage: approved ? \"User approved this action\" : \"User denied this action\"\n\t\t\t});\n\t\t\tconst content = typeof result === \"string\" ? result : JSON.stringify(result);\n\t\t\twire.push({\n\t\t\t\trole: \"tool\",\n\t\t\t\tid: uniqueToolWireId(deriveToolMessageId(part.id), usedWireIds),\n\t\t\t\ttoolCallId: part.id,\n\t\t\t\tcontent,\n\t\t\t\tmetadata: rebuiltToolMetadata(void 0, void 0, void 0, result)\n\t\t\t});\n\t\t}\n\t}\n\treturn wire;\n}\nfunction toAnchor(msg, role, extras, parts, includeSnapshotStructuredOutput) {\n\tconst metadata = messageMetadata(msg, parts, includeSnapshotStructuredOutput);\n\tconst base = {\n\t\tid: msg.id,\n\t\t...msg.name !== void 0 && { name: msg.name },\n\t\t...metadata !== void 0 && { metadata }\n\t};\n\tif (role === \"system\") return {\n\t\t...base,\n\t\trole,\n\t\tcontent: String(extras.content ?? \"\")\n\t};\n\tif (role === \"user\") return {\n\t\t...base,\n\t\trole,\n\t\tcontent: extras.content ?? \"\"\n\t};\n\treturn {\n\t\t...base,\n\t\trole,\n\t\t...typeof extras.content === \"string\" && { content: extras.content },\n\t\t...extras.toolCalls !== void 0 && { toolCalls: extras.toolCalls }\n\t};\n}\nfunction messageMetadata(msg, parts, includeSnapshotStructuredOutput) {\n\tconst base = { ...msg.metadata ?? {} };\n\tconst previousTanstack = tanstackMetadata(msg);\n\tconst tanstack = {};\n\tif (previousTanstack?.model !== void 0) tanstack.model = previousTanstack.model;\n\tif (previousTanstack?.signature !== void 0) tanstack.signature = previousTanstack.signature;\n\tconst createdAt = coerceCreatedAt(msg.createdAt);\n\tif (createdAt !== void 0) tanstack.createdAt = createdAt.toISOString();\n\tconst structuredOutput = serializedStructuredOutput(parts, includeSnapshotStructuredOutput);\n\tif (structuredOutput) tanstack.structuredOutput = structuredOutput;\n\tconst toolCallMetadata = {};\n\tfor (const part of parts) if (part.type === \"tool-call\" && part.metadata !== void 0) toolCallMetadata[part.id] = part.metadata;\n\tif (Object.keys(toolCallMetadata).length > 0) tanstack.toolCallMetadata = toolCallMetadata;\n\tconst uiResources = parts.filter((p) => p.type === \"ui-resource\");\n\tif (uiResources.length > 0) tanstack.uiResources = uiResources;\n\tif (Object.keys(tanstack).length > 0) base.tanstack = tanstack;\n\telse delete base.tanstack;\n\treturn Object.keys(base).length > 0 ? base : void 0;\n}\nfunction serializedStructuredOutput(parts, includeSnapshotStructuredOutput) {\n\tfor (const p of parts) if (p.type === \"structured-output\" && (includeSnapshotStructuredOutput || p.status !== \"complete\")) return structuredOutputMetadata(p, includeSnapshotStructuredOutput);\n}\nfunction structuredOutputMetadata(part, includeSnapshotStructuredOutput) {\n\treturn {\n\t\tstatus: part.status,\n\t\traw: part.raw,\n\t\t...includeSnapshotStructuredOutput && part.partial !== void 0 ? { partial: part.partial } : {},\n\t\t...includeSnapshotStructuredOutput && part.data !== void 0 ? { data: part.data } : {},\n\t\t...includeSnapshotStructuredOutput && part.reasoning ? { reasoning: part.reasoning } : {},\n\t\t...part.errorMessage !== void 0 && { errorMessage: part.errorMessage }\n\t};\n}\nfunction collectText(parts) {\n\tconst out = [];\n\tfor (const p of parts) if (p.type === \"text\") out.push(p.content);\n\telse if (p.type === \"structured-output\" && p.status === \"complete\" && p.raw !== \"\") out.push(p.raw);\n\treturn out.join(\"\");\n}\nfunction collectUserContent(parts) {\n\tif (!parts.some((p) => p.type === \"image\" || p.type === \"audio\" || p.type === \"video\" || p.type === \"document\")) return collectText(parts);\n\tconst out = [];\n\tfor (const p of parts) if (p.type === \"text\") out.push({\n\t\ttype: \"text\",\n\t\ttext: p.content\n\t});\n\telse if (p.type === \"image\" || p.type === \"audio\" || p.type === \"video\" || p.type === \"document\") out.push(p);\n\treturn out;\n}\nfunction thoughtSignatureFromMetadata(metadata) {\n\tif (metadata == null || typeof metadata !== \"object\" || Array.isArray(metadata)) return;\n\tif (!(\"thoughtSignature\" in metadata)) return void 0;\n\tconst value = metadata.thoughtSignature;\n\treturn typeof value === \"string\" && value !== \"\" ? value : void 0;\n}\nfunction collectToolCalls(parts) {\n\tconst calls = [];\n\tfor (const p of parts) if (p.type === \"tool-call\") {\n\t\tconst encryptedValue = thoughtSignatureFromMetadata(p.metadata);\n\t\tcalls.push({\n\t\t\tid: p.id,\n\t\t\ttype: \"function\",\n\t\t\tfunction: {\n\t\t\t\tname: p.name,\n\t\t\t\targuments: p.arguments\n\t\t\t},\n\t\t\t...encryptedValue !== void 0 ? { encryptedValue } : {}\n\t\t});\n\t}\n\treturn calls.length > 0 ? calls : void 0;\n}\nfunction deriveReasoningId(messageId, part) {\n\treturn `${messageId}-reasoning-${part.id ?? hashContent(part.content)}`;\n}\nfunction deriveToolMessageId(toolCallId) {\n\treturn `tool-${toolCallId}`;\n}\nfunction uniqueToolWireId(id, used) {\n\treturn uniqueWireId(id, used);\n}\nfunction uniqueWireId(id, used) {\n\tif (!used.has(id)) {\n\t\tused.add(id);\n\t\treturn id;\n\t}\n\tlet suffix = 2;\n\twhile (used.has(`${id}-${suffix}`)) suffix++;\n\tconst unique = `${id}-${suffix}`;\n\tused.add(unique);\n\treturn unique;\n}\nfunction toolWireId(id, toolCallId, assistantIds) {\n\tconst derived = deriveToolMessageId(toolCallId);\n\tif (id === void 0 || assistantIds.has(id)) return derived;\n\treturn id;\n}\nfunction hashContent(s) {\n\tlet h = 0;\n\tfor (let i = 0; i < s.length; i++) h = h * 31 + s.charCodeAt(i) | 0;\n\treturn Math.abs(h).toString(36);\n}\n//#endregion\nexport { uiMessagesToWire };\n\n//# sourceMappingURL=ag-ui-wire.js.map","import { EventType } from \"../types.js\";\nimport { isTanstackUsage, rebuildTokenUsage } from \"./ag-ui-usage.js\";\nimport { tanstackMetadata } from \"./merge-metadata.js\";\n//#region src/utilities/restore-inbound-chunk.ts\n/**\n* Rebuild TanStack `TokenUsage` (`promptTokens`) from spec `usage[]` plus\n* leftover fields in `metadata.tanstack.usage`. Restore in-process aliases\n* that the wire does not keep (`toolName`, `TOOL_CALL_END.input`). Mutates\n* in place so WeakMap run-id stamps stay attached.\n*/\nfunction restorePublicUsage(chunk) {\n\tif ((chunk.type === EventType.RUN_FINISHED || chunk.type === EventType.RUN_ERROR) && (Array.isArray(chunk.usage) || isTanstackUsage(chunk.usage))) {\n\t\tconst rebuilt = rebuildTokenUsage(chunk.usage, tanstackMetadata(chunk)?.usage);\n\t\tif (rebuilt !== void 0) chunk.usage = rebuilt;\n\t}\n\tif (chunk.type === EventType.TOOL_CALL_START && chunk.toolName === void 0 && chunk.toolCallName) chunk.toolName = chunk.toolCallName;\n\tif (chunk.type === EventType.TOOL_CALL_END && chunk.input === void 0) {\n\t\tconst input = tanstackMetadata(chunk)?.input;\n\t\tif (input !== void 0) chunk.input = input;\n\t}\n\treturn chunk;\n}\n/**\n* Rebuild the pre-wire chunk shape after SSE/HTTP/WS ingest.\n* Copies `metadata.tanstack` extras back to top-level fields and rebuilds\n* TanStack `TokenUsage` from spec `usage[]` when present.\n*/\nfunction restoreInboundChunk(chunk) {\n\trestorePublicUsage(chunk);\n\tconst tanstack = tanstackMetadata(chunk);\n\tconst next = chunk;\n\tif (tanstack == null) return next;\n\tfor (const [key, value] of Object.entries(tanstack)) {\n\t\tif (key === \"usage\" || key === \"interruptErrors\") continue;\n\t\tif (next[key] === void 0 && value !== void 0) next[key] = value;\n\t}\n\tif (tanstack.interruptErrors !== void 0) next[\"tanstack:interruptErrors\"] = tanstack.interruptErrors;\n\treturn next;\n}\n//#endregion\nexport { restoreInboundChunk, restorePublicUsage };\n\n//# sourceMappingURL=restore-inbound-chunk.js.map","import { tanstackMetadata } from \"./merge-metadata.js\";\n//#region src/utilities/chunk-ids.ts\nfunction stringField(value) {\n\treturn typeof value === \"string\" && value !== \"\" ? value : void 0;\n}\n/** Run id on the spec event, or `metadata.tanstack.runId` after normalize. */\nfunction getChunkRunId(chunk) {\n\tif (\"runId\" in chunk) {\n\t\tconst top = stringField(chunk.runId);\n\t\tif (top !== void 0) return top;\n\t}\n\treturn stringField(tanstackMetadata(chunk)?.runId);\n}\n/** Thread id on the spec event, or `metadata.tanstack.threadId` after normalize. */\nfunction getChunkThreadId(chunk) {\n\tif (\"threadId\" in chunk) {\n\t\tconst top = stringField(chunk.threadId);\n\t\tif (top !== void 0) return top;\n\t}\n\treturn stringField(tanstackMetadata(chunk)?.threadId);\n}\n//#endregion\nexport { getChunkRunId, getChunkThreadId };\n\n//# sourceMappingURL=chunk-ids.js.map","\"use strict\";\n/**\n * Sometimes you don't allow every type to be partially parsed.\n * For example, you may not want a partial number because it may increase its size gradually before it's complete.\n * In this case, you can use the `Allow` object to control what types you allow to be partially parsed.\n * @module\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Allow = exports.ALL = exports.COLLECTION = exports.ATOM = exports.SPECIAL = exports.INF = exports._INFINITY = exports.INFINITY = exports.NAN = exports.BOOL = exports.NULL = exports.OBJ = exports.ARR = exports.NUM = exports.STR = void 0;\n/**\n * allow partial strings like `\"hello \\u12` to be parsed as `\"hello \"`\n */\nexports.STR = 0b000000001;\n/**\n * allow partial numbers like `123.` to be parsed as `123`\n */\nexports.NUM = 0b000000010;\n/**\n * allow partial arrays like `[1, 2,` to be parsed as `[1, 2]`\n */\nexports.ARR = 0b000000100;\n/**\n * allow partial objects like `{\"a\": 1, \"b\":` to be parsed as `{\"a\": 1}`\n */\nexports.OBJ = 0b000001000;\n/**\n * allow `nu` to be parsed as `null`\n */\nexports.NULL = 0b000010000;\n/**\n * allow `tr` to be parsed as `true`, and `fa` to be parsed as `false`\n */\nexports.BOOL = 0b000100000;\n/**\n * allow `Na` to be parsed as `NaN`\n */\nexports.NAN = 0b001000000;\n/**\n * allow `Inf` to be parsed as `Infinity`\n */\nexports.INFINITY = 0b010000000;\n/**\n * allow `-Inf` to be parsed as `-Infinity`\n */\nexports._INFINITY = 0b100000000;\nexports.INF = exports.INFINITY | exports._INFINITY;\nexports.SPECIAL = exports.NULL | exports.BOOL | exports.INF | exports.NAN;\nexports.ATOM = exports.STR | exports.NUM | exports.SPECIAL;\nexports.COLLECTION = exports.ARR | exports.OBJ;\nexports.ALL = exports.ATOM | exports.COLLECTION;\n/**\n * Control what types you allow to be partially parsed.\n * The default is to allow all types to be partially parsed, which in most casees is the best option.\n * @example\n * If you don't want to allow partial objects, you can use the following code:\n * ```ts\n * import { Allow, parse } from \"partial-json\";\n * parse(`[{\"a\": 1, \"b\": 2}, {\"a\": 3,`, Allow.ARR); // [ { a: 1, b: 2 } ]\n * ```\n * Or you can use `~` to disallow a type:\n * ```ts\n * parse(`[{\"a\": 1, \"b\": 2}, {\"a\": 3,`, ~Allow.OBJ); // [ { a: 1, b: 2 } ]\n * ```\n * @example\n * If you don't want to allow partial strings, you can use the following code:\n * ```ts\n * import { Allow, parse } from \"partial-json\";\n * parse(`[\"complete string\", \"incompl`, ~Allow.STR); // [ 'complete string' ]\n * ```\n */\nexports.Allow = { STR: exports.STR, NUM: exports.NUM, ARR: exports.ARR, OBJ: exports.OBJ, NULL: exports.NULL, BOOL: exports.BOOL, NAN: exports.NAN, INFINITY: exports.INFINITY, _INFINITY: exports._INFINITY, INF: exports.INF, SPECIAL: exports.SPECIAL, ATOM: exports.ATOM, COLLECTION: exports.COLLECTION, ALL: exports.ALL };\nexports.default = exports.Allow;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Allow = exports.MalformedJSON = exports.PartialJSON = exports.parseJSON = exports.parse = void 0;\nconst options_1 = require(\"./options\");\nObject.defineProperty(exports, \"Allow\", { enumerable: true, get: function () { return options_1.Allow; } });\n__exportStar(require(\"./options\"), exports);\nclass PartialJSON extends Error {\n}\nexports.PartialJSON = PartialJSON;\nclass MalformedJSON extends Error {\n}\nexports.MalformedJSON = MalformedJSON;\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = options_1.Allow.ALL) {\n if (typeof jsonString !== \"string\") {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nexports.parseJSON = parseJSON;\n;\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON(\"Unexpected end of input\");\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === \"{\")\n return parseObj();\n if (jsonString[index] === \"[\")\n return parseArr();\n if (jsonString.substring(index, index + 4) === \"null\" || (options_1.Allow.NULL & allow && length - index < 4 && \"null\".startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === \"true\" || (options_1.Allow.BOOL & allow && length - index < 4 && \"true\".startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === \"false\" || (options_1.Allow.BOOL & allow && length - index < 5 && \"false\".startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === \"Infinity\" || (options_1.Allow.INFINITY & allow && length - index < 8 && \"Infinity\".startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === \"-Infinity\" || (options_1.Allow._INFINITY & allow && 1 < length - index && length - index < 9 && \"-Infinity\".startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === \"NaN\" || (options_1.Allow.NAN & allow && length - index < 3 && \"NaN\".startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === \"\\\\\"))) {\n escape = jsonString[index] === \"\\\\\" ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (options_1.Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf(\"\\\\\")) + '\"');\n }\n }\n markPartialJSON(\"Unterminated string literal\");\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== \"}\") {\n skipBlank();\n if (index >= length && options_1.Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n obj[key] = value;\n }\n catch (e) {\n if (options_1.Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === \",\")\n index++; // skip comma\n }\n }\n catch (e) {\n if (options_1.Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== \"]\") {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === \",\") {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (options_1.Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === \"-\")\n throwMalformedError(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (options_1.Allow.NUM & allow)\n try {\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf(\"e\")));\n }\n catch (e) { }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === \"-\")\n index++;\n while (jsonString[index] && \",]}\".indexOf(jsonString[index]) === -1)\n index++;\n if (index == length && !(options_1.Allow.NUM & allow))\n markPartialJSON(\"Unterminated number literal\");\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === \"-\")\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf(\"e\")));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && \" \\n\\r\\t\".includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\nconst parse = parseJSON;\nexports.parse = parse;\n","import { parse } from \"partial-json\";\n//#region src/activities/chat/stream/json-parser.ts\n/**\n* JSON Parser for partial/incomplete JSON strings\n*\n* Used during streaming to parse tool call arguments that may be incomplete.\n*/\n/**\n* Partial JSON Parser implementation using the partial-json library\n* This parser can handle incomplete JSON strings during streaming\n*/\nvar PartialJSONParser = class {\n\t/**\n\t* Parse a potentially incomplete JSON string\n\t* @param jsonString - The JSON string to parse (may be incomplete)\n\t* @returns The parsed object, or undefined if parsing fails\n\t*/\n\tparse(jsonString) {\n\t\tif (!jsonString || jsonString.trim() === \"\") return;\n\t\ttry {\n\t\t\treturn parse(jsonString);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t}\n};\n/**\n* Default parser instance\n*/\nvar defaultJSONParser = new PartialJSONParser();\n/**\n* Parse partial JSON string (convenience function)\n* @param jsonString - The JSON string to parse (may be incomplete)\n* @returns The parsed object, or undefined if parsing fails\n*/\nfunction parsePartialJSON(jsonString) {\n\treturn defaultJSONParser.parse(jsonString);\n}\n//#endregion\nexport { PartialJSONParser, defaultJSONParser, parsePartialJSON };\n\n//# sourceMappingURL=json-parser.js.map","//#region src/activities/chat/stream/strategies.ts\n/**\n* Immediate Strategy - emit on every chunk (default behavior)\n*/\nvar ImmediateStrategy = class {\n\tshouldEmit(_chunk, _accumulated) {\n\t\treturn true;\n\t}\n};\n/**\n* Punctuation Strategy - emit when chunk contains punctuation\n* Useful for natural text flow in UI\n*/\nvar PunctuationStrategy = class {\n\tpunctuation = /[.,!?;:\\n]/;\n\tshouldEmit(chunk, _accumulated) {\n\t\treturn this.punctuation.test(chunk);\n\t}\n};\n/**\n* Batch Strategy - emit every N chunks\n* Useful for reducing UI update frequency\n*/\nvar BatchStrategy = class {\n\tbatchSize;\n\tchunkCount = 0;\n\tconstructor(batchSize = 5) {\n\t\tthis.batchSize = batchSize;\n\t}\n\tshouldEmit(_chunk, _accumulated) {\n\t\tthis.chunkCount++;\n\t\tif (this.chunkCount >= this.batchSize) {\n\t\t\tthis.chunkCount = 0;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treset() {\n\t\tthis.chunkCount = 0;\n\t}\n};\n/**\n* Word Boundary Strategy - emit at word boundaries\n* Prevents cutting words in half\n*/\nvar WordBoundaryStrategy = class {\n\tshouldEmit(chunk, _accumulated) {\n\t\treturn /\\s$/.test(chunk);\n\t}\n};\n/**\n* Composite Strategy - combine multiple strategies (OR logic)\n* Emits if ANY strategy says to emit\n*/\nvar CompositeStrategy = class {\n\tstrategies;\n\tconstructor(strategies) {\n\t\tthis.strategies = strategies;\n\t}\n\tshouldEmit(chunk, accumulated) {\n\t\treturn this.strategies.some((s) => s.shouldEmit(chunk, accumulated));\n\t}\n\treset() {\n\t\tthis.strategies.forEach((s) => s.reset?.());\n\t}\n};\n//#endregion\nexport { BatchStrategy, CompositeStrategy, ImmediateStrategy, PunctuationStrategy, WordBoundaryStrategy };\n\n//# sourceMappingURL=strategies.js.map","//#region src/utilities/errors.ts\nvar SkillLimitError = class extends Error {\n\tprovider;\n\tpath;\n\tlimit;\n\tallowed;\n\tactual;\n\toffending;\n\tconstructor(init) {\n\t\tsuper(`${init.provider} ${init.path} skills limit exceeded (${init.limit}): ${init.actual} > ${init.allowed}`);\n\t\tthis.name = \"SkillLimitError\";\n\t\tthis.provider = init.provider;\n\t\tthis.path = init.path;\n\t\tthis.limit = init.limit;\n\t\tthis.allowed = init.allowed;\n\t\tthis.actual = init.actual;\n\t\tthis.offending = init.offending;\n\t}\n};\n/**\n* Best-effort extraction of a human-readable message from an unknown thrown\n* value, returning `undefined` when none can be found.\n*\n* Used by `otelMiddleware` so error reporting stays identical across chat and\n* media spans.\n*/\nfunction errorMessage(err) {\n\tif (err instanceof Error) return err.message;\n\tif (typeof err === \"string\") return err;\n\tif (err && typeof err === \"object\" && \"message\" in err) {\n\t\tconst m = err.message;\n\t\tif (typeof m === \"string\") return m;\n\t}\n}\n/**\n* Best-effort extraction of an error's type name (used for the `error.type`\n* metric attribute), falling back to `'Error'` when no name is available.\n*/\nfunction errorTypeName(err) {\n\tif (err instanceof Error) return err.name || \"Error\";\n\tif (err && typeof err === \"object\" && \"name\" in err) {\n\t\tconst n = err.name;\n\t\tif (typeof n === \"string\") return n;\n\t}\n\treturn \"Error\";\n}\n/**\n* Convert an AG-UI RUN_ERROR event to the Error shape exposed to consumers.\n* Preserves the provider code and sanitized raw event when available, while\n* accepting the deprecated nested error payload for backward compatibility.\n*/\nfunction runErrorEventToError(chunk) {\n\tconst error = new Error(chunk.message || chunk.error?.message || \"An error occurred\");\n\tconst code = chunk.code ?? chunk.error?.code;\n\tif (code !== void 0) Object.assign(error, { code });\n\tif (chunk.rawEvent !== void 0) Object.assign(error, { rawEvent: chunk.rawEvent });\n\treturn error;\n}\n//#endregion\nexport { SkillLimitError, errorMessage, errorTypeName, runErrorEventToError };\n\n//# sourceMappingURL=errors.js.map","import { parsePartialJSON } from \"./json-parser.js\";\n//#region src/activities/chat/stream/message-updaters.ts\n/**\n* Message Updaters (Internal)\n*\n* Internal helper functions for updating UIMessage parts.\n* These are used by StreamProcessor to manage the message array.\n*/\n/**\n* Update or add a text part to a message.\n*\n* If the last part is a text part, update it (continuing the same text segment).\n* Otherwise, create a new text part (starting a new text segment after tool calls).\n*/\nfunction updateTextPart(messages, messageId, content) {\n\treturn messages.map((msg) => {\n\t\tif (msg.id !== messageId) return msg;\n\t\tconst parts = [...msg.parts];\n\t\tconst lastPart = parts.length > 0 ? parts[parts.length - 1] : null;\n\t\tif (lastPart && lastPart.type === \"text\") parts[parts.length - 1] = {\n\t\t\ttype: \"text\",\n\t\t\tcontent\n\t\t};\n\t\telse parts.push({\n\t\t\ttype: \"text\",\n\t\t\tcontent\n\t\t});\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n/**\n* Update or add a tool call part to a message.\n*/\nfunction updateToolCallPart(messages, messageId, toolCall) {\n\treturn messages.map((msg) => {\n\t\tif (msg.id !== messageId) return msg;\n\t\tconst parts = [...msg.parts];\n\t\tconst existing = parts.find((p) => p.type === \"tool-call\" && p.id === toolCall.id);\n\t\tconst metadata = toolCall.metadata ?? existing?.metadata;\n\t\tconst input = toolCall.input ?? existing?.input;\n\t\tconst toolCallPart = {\n\t\t\ttype: \"tool-call\",\n\t\t\tid: toolCall.id,\n\t\t\tname: toolCall.name,\n\t\t\targuments: toolCall.arguments,\n\t\t\tstate: toolCall.state,\n\t\t\t...existing?.approval && { approval: { ...existing.approval } },\n\t\t\t...existing?.output !== void 0 && { output: existing.output },\n\t\t\t...input !== void 0 && { input },\n\t\t\t...metadata !== void 0 && { metadata }\n\t\t};\n\t\tif (existing) parts[parts.indexOf(existing)] = toolCallPart;\n\t\telse parts.push(toolCallPart);\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n/**\n* Update or add a tool result part to a message.\n*/\nfunction updateToolResultPart(messages, messageId, toolCallId, content, state, error) {\n\treturn messages.map((msg) => {\n\t\tif (msg.id !== messageId) return msg;\n\t\tconst parts = [...msg.parts];\n\t\tconst resultPartIndex = parts.findIndex((p) => p.type === \"tool-result\" && p.toolCallId === toolCallId);\n\t\tconst toolResultPart = {\n\t\t\ttype: \"tool-result\",\n\t\t\ttoolCallId,\n\t\t\tcontent,\n\t\t\tstate,\n\t\t\t...error && { error }\n\t\t};\n\t\tif (resultPartIndex >= 0) parts[resultPartIndex] = toolResultPart;\n\t\telse parts.push(toolResultPart);\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n/**\n* Update a tool call part with approval request metadata.\n*/\nfunction updateToolCallApproval(messages, messageId, toolCallId, approvalId) {\n\treturn messages.map((msg) => {\n\t\tif (msg.id !== messageId) return msg;\n\t\tconst parts = [...msg.parts];\n\t\tconst toolCallPart = parts.find((p) => p.type === \"tool-call\" && p.id === toolCallId);\n\t\tif (toolCallPart) {\n\t\t\tconst index = parts.indexOf(toolCallPart);\n\t\t\tparts[index] = {\n\t\t\t\t...toolCallPart,\n\t\t\t\tstate: \"approval-requested\",\n\t\t\t\tapproval: {\n\t\t\t\t\tid: approvalId,\n\t\t\t\t\tneedsApproval: true\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n/**\n* Update a tool call part with output.\n* Searches all messages to find the tool call by ID.\n*/\nfunction updateToolCallWithOutput(messages, toolCallId, output, state, errorText) {\n\treturn messages.map((msg) => {\n\t\tconst parts = [...msg.parts];\n\t\tconst toolCallPart = parts.find((p) => p.type === \"tool-call\" && p.id === toolCallId);\n\t\tif (toolCallPart) {\n\t\t\tconst index = parts.indexOf(toolCallPart);\n\t\t\tparts[index] = {\n\t\t\t\t...toolCallPart,\n\t\t\t\toutput: errorText ? { error: errorText } : output,\n\t\t\t\tstate: state ?? (errorText ? \"error\" : \"complete\")\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n/**\n* Update a tool call part with approval response.\n* Searches all messages to find the tool call by approval ID.\n*/\nfunction updateToolCallApprovalResponse(messages, approvalId, approved) {\n\treturn messages.map((msg) => {\n\t\tconst parts = [...msg.parts];\n\t\tconst toolCallPart = parts.find((p) => p.type === \"tool-call\" && p.approval?.id === approvalId);\n\t\tif (toolCallPart && toolCallPart.approval) {\n\t\t\tconst index = parts.indexOf(toolCallPart);\n\t\t\tparts[index] = {\n\t\t\t\t...toolCallPart,\n\t\t\t\tapproval: {\n\t\t\t\t\t...toolCallPart.approval,\n\t\t\t\t\tapproved\n\t\t\t\t},\n\t\t\t\tstate: \"approval-responded\"\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n/**\n* Append a delta to the structured-output part on `messageId`, or create one\n* if absent. Progressive parse of the accumulated buffer fills `partial`.\n*\n* Callers must only invoke this while the part is still in flight — the\n* helper unconditionally writes `status: 'streaming'`, so feeding it a delta\n* after a `complete`/`error` terminal would regress the part. In practice the\n* processor gates calls via `structuredMessageIds`, which is dropped on\n* terminal events.\n*\n* If the progressive parse returns null/undefined (the buffer is not yet a\n* parseable JSON prefix), the previously-good `partial` is preserved so the\n* UI doesn't flicker back to empty for a single render.\n*/\nfunction appendStructuredOutputDelta(messages, messageId, delta) {\n\treturn messages.map((msg) => {\n\t\tif (msg.id !== messageId) return msg;\n\t\tconst parts = [...msg.parts];\n\t\tconst existingIndex = parts.findIndex((p) => p.type === \"structured-output\");\n\t\tconst existing = existingIndex >= 0 ? parts[existingIndex] : null;\n\t\tconst nextRaw = (existing?.raw ?? \"\") + delta;\n\t\tconst progressive = parsePartialJSON(nextRaw);\n\t\tconst nextPartial = progressive !== void 0 && progressive !== null ? progressive : existing?.partial;\n\t\tconst nextPart = {\n\t\t\ttype: \"structured-output\",\n\t\t\tstatus: \"streaming\",\n\t\t\traw: nextRaw,\n\t\t\t...nextPartial !== void 0 ? { partial: nextPartial } : {},\n\t\t\t...existing?.reasoning !== void 0 ? { reasoning: existing.reasoning } : {}\n\t\t};\n\t\tif (existingIndex >= 0) parts[existingIndex] = nextPart;\n\t\telse parts.push(nextPart);\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n/**\n* Snap the structured-output part on `messageId` to `complete` with the\n* validated `data`. Picks the freshest available `raw` so the wire\n* round-trip stays internally consistent:\n*\n* 1. Caller-supplied `raw` (the original streamed bytes from the model).\n* 2. The existing part's `raw` (deltas accumulated before this terminal).\n* 3. `JSON.stringify(data)` as a defensive fallback for terminal-only\n* completes that never shipped raw — keeps the part self-consistent\n* so downstream consumers never see a complete part with empty raw.\n*/\nfunction completeStructuredOutputPart(messages, messageId, data, raw, reasoning) {\n\treturn messages.map((msg) => {\n\t\tif (msg.id !== messageId) return msg;\n\t\tconst parts = [...msg.parts];\n\t\tconst existingIndex = parts.findIndex((p) => p.type === \"structured-output\");\n\t\tconst existingRaw = existingIndex >= 0 ? parts[existingIndex].raw : \"\";\n\t\tlet resolvedRaw = raw || existingRaw;\n\t\tif (resolvedRaw === \"\" && data !== void 0) try {\n\t\t\tresolvedRaw = JSON.stringify(data);\n\t\t} catch {}\n\t\tconst nextPart = {\n\t\t\ttype: \"structured-output\",\n\t\t\tstatus: \"complete\",\n\t\t\tdata,\n\t\t\tpartial: data,\n\t\t\traw: resolvedRaw,\n\t\t\t...reasoning !== void 0 ? { reasoning } : {}\n\t\t};\n\t\tif (existingIndex >= 0) parts[existingIndex] = nextPart;\n\t\telse parts.push(nextPart);\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n/**\n* Mark the structured-output part on `messageId` as errored. If no part\n* exists yet — RUN_ERROR fired after `structured-output.start` but before\n* any delta — create an empty errored placeholder so consumers have\n* something renderable. Existing complete parts are left alone (an error\n* after a successful complete should not retroactively un-complete it).\n*/\nfunction errorStructuredOutputPart(messages, messageId, errorMessage) {\n\treturn messages.map((msg) => {\n\t\tif (msg.id !== messageId) return msg;\n\t\tconst parts = [...msg.parts];\n\t\tconst existingIndex = parts.findIndex((p) => p.type === \"structured-output\");\n\t\tif (existingIndex < 0) {\n\t\t\tparts.push({\n\t\t\t\ttype: \"structured-output\",\n\t\t\t\tstatus: \"error\",\n\t\t\t\traw: \"\",\n\t\t\t\terrorMessage\n\t\t\t});\n\t\t\treturn {\n\t\t\t\t...msg,\n\t\t\t\tparts\n\t\t\t};\n\t\t}\n\t\tconst existing = parts[existingIndex];\n\t\tif (existing.status === \"complete\") return msg;\n\t\tparts[existingIndex] = {\n\t\t\t...existing,\n\t\t\tstatus: \"error\",\n\t\t\terrorMessage\n\t\t};\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n/**\n* Update or add a thinking part to a message, keyed by stepId.\n* Each distinct stepId produces its own ThinkingPart.\n*/\nfunction updateThinkingPart(messages, messageId, stepId, content, signature) {\n\treturn messages.map((msg) => {\n\t\tif (msg.id !== messageId) return msg;\n\t\tconst parts = [...msg.parts];\n\t\tconst thinkingPartIndex = parts.findIndex((p) => p.type === \"thinking\" && p.stepId === stepId);\n\t\tconst thinkingPart = {\n\t\t\ttype: \"thinking\",\n\t\t\tcontent,\n\t\t\tstepId,\n\t\t\t...signature && { signature }\n\t\t};\n\t\tif (thinkingPartIndex >= 0) parts[thinkingPartIndex] = thinkingPart;\n\t\telse parts.push(thinkingPart);\n\t\treturn {\n\t\t\t...msg,\n\t\t\tparts\n\t\t};\n\t});\n}\n//#endregion\nexport { appendStructuredOutputDelta, completeStructuredOutputPart, errorStructuredOutputPart, updateTextPart, updateThinkingPart, updateToolCallApproval, updateToolCallApprovalResponse, updateToolCallPart, updateToolCallWithOutput, updateToolResultPart };\n\n//# sourceMappingURL=message-updaters.js.map","import { mergeMetadata, tanstackMetadata } from \"../../../utilities/merge-metadata.js\";\nimport { runErrorEventToError } from \"../../../utilities/errors.js\";\nimport { INTERRUPT_BINDING_METADATA_KEY } from \"../../../interrupt-resume.js\";\nimport { normalizeToolResult } from \"../../../utilities/tool-result.js\";\nimport { isProviderExecutedToolCall } from \"../../../utilities/provider-executed.js\";\nimport { aguiSnapshotMessageToUIMessage, coerceCreatedAt, generateMessageId, uiMessageToModelMessages } from \"../messages.js\";\nimport { getChunkRunId } from \"../../../utilities/chunk-ids.js\";\nimport { defaultJSONParser } from \"./json-parser.js\";\nimport { appendStructuredOutputDelta, completeStructuredOutputPart, errorStructuredOutputPart, updateTextPart, updateThinkingPart, updateToolCallApproval, updateToolCallApprovalResponse, updateToolCallPart, updateToolCallWithOutput, updateToolResultPart } from \"./message-updaters.js\";\nimport { ImmediateStrategy } from \"./strategies.js\";\n//#region src/activities/chat/stream/processor.ts\n/**\n* Unified Stream Processor\n*\n* Core stream processing engine that manages the full UIMessage[] conversation.\n* Single source of truth for message state.\n*\n* Handles:\n* - Full conversation management (UIMessage[])\n* - Text content accumulation with configurable chunking strategies\n* - Parallel tool calls with lifecycle state tracking\n* - Tool results and approval flows\n* - Thinking/reasoning content\n* - Recording/replay for testing\n* - Event-driven architecture for UI updates\n* - Per-message stream state tracking for multi-message sessions\n*\n* @see docs/chat-architecture.md — Canonical reference for AG-UI chunk ordering,\n* adapter contract, single-shot flows, and expected UIMessage output.\n*/\nvar STRUCTURED_OUTPUT_UPDATE_BATCH_SIZE = 12;\nfunction interruptBatchHasGeneric(interrupts) {\n\treturn interrupts.some((interrupt) => {\n\t\tconst metadata = interrupt.metadata;\n\t\tif (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) return false;\n\t\tconst binding = metadata[INTERRUPT_BINDING_METADATA_KEY];\n\t\treturn binding !== null && typeof binding === \"object\" && !Array.isArray(binding) && binding.kind === \"generic\";\n\t});\n}\n/**\n* StreamProcessor - State machine for processing AI response streams\n*\n* Manages the full UIMessage[] conversation and emits events on changes.\n* Trusts the adapter contract: adapters emit clean AG-UI events in the\n* correct order.\n*\n* State tracking:\n* - Full message array\n* - Per-message stream state (text, tool calls, thinking)\n* - Multiple concurrent message streams\n* - Tool call completion via TOOL_CALL_END events\n*\n* @see docs/chat-architecture.md#streamprocessor-internal-state — State field reference\n* @see docs/chat-architecture.md#adapter-contract — What this class expects from adapters\n*/\nvar StreamProcessor = class StreamProcessor {\n\tchunkStrategy;\n\tevents;\n\tjsonParser;\n\trecordingEnabled;\n\tmessages = [];\n\tmessageStates = /* @__PURE__ */ new Map();\n\tactiveMessageIds = /* @__PURE__ */ new Set();\n\ttoolCallToMessage = /* @__PURE__ */ new Map();\n\tpendingManualMessageId = null;\n\tpendingThinkingStepId = null;\n\tstructuredMessageIds = /* @__PURE__ */ new Set();\n\tstructuredOutputUpdateBatches = /* @__PURE__ */ new Map();\n\tactiveRuns = /* @__PURE__ */ new Set();\n\tfinishReason = null;\n\thasError = false;\n\tisDone = false;\n\tstreamEndEmitted = false;\n\trecording = null;\n\trecordingStartTime = 0;\n\tconstructor(options = {}) {\n\t\tthis.chunkStrategy = options.chunkStrategy || new ImmediateStrategy();\n\t\tthis.events = options.events || {};\n\t\tthis.jsonParser = options.jsonParser || defaultJSONParser;\n\t\tthis.recordingEnabled = options.recording ?? false;\n\t\tif (options.initialMessages) this.messages = [...options.initialMessages];\n\t}\n\t/**\n\t* Set the messages array (e.g., from persisted state)\n\t*/\n\tsetMessages(messages) {\n\t\tthis.messages = [...messages];\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Add a user message to the conversation.\n\t* Supports both simple string content and multimodal content arrays.\n\t*\n\t* @param content - The message content (string or array of content parts)\n\t* @param id - Optional custom message ID (generated if not provided)\n\t* @param metadata - Optional AG-UI metadata bag\n\t* @returns The created UIMessage\n\t*\n\t* @example\n\t* ```ts\n\t* // Simple text message\n\t* processor.addUserMessage('Hello!')\n\t*\n\t* // Multimodal message with image\n\t* processor.addUserMessage([\n\t* { type: 'text', content: 'What is in this image?' },\n\t* { type: 'image', source: { type: 'url', value: 'https://example.com/photo.jpg' } }\n\t* ])\n\t*\n\t* // With custom ID\n\t* processor.addUserMessage('Hello!', 'custom-id-123')\n\t* ```\n\t*/\n\taddUserMessage(content, id, metadata) {\n\t\tconst parts = typeof content === \"string\" ? [{\n\t\t\ttype: \"text\",\n\t\t\tcontent\n\t\t}] : content.map((part) => {\n\t\t\treturn part;\n\t\t});\n\t\tconst userMessage = {\n\t\t\tid: id ?? generateMessageId(),\n\t\t\trole: \"user\",\n\t\t\tparts,\n\t\t\tcreatedAt: /* @__PURE__ */ new Date(),\n\t\t\t...metadata != null ? { metadata } : {}\n\t\t};\n\t\tthis.messages = [...this.messages, userMessage];\n\t\tthis.emitMessagesChange();\n\t\treturn userMessage;\n\t}\n\t/**\n\t* Prepare for a new assistant message stream.\n\t* Does NOT create the message immediately -- the message is created lazily\n\t* when the first content-bearing chunk arrives via ensureAssistantMessage().\n\t* This prevents empty assistant messages from flickering in the UI when\n\t* auto-continuation produces no content.\n\t*/\n\tprepareAssistantMessage() {\n\t\tthis.resetStreamState();\n\t}\n\t/**\n\t* @deprecated Use prepareAssistantMessage() instead. This eagerly creates\n\t* an assistant message which can cause empty message flicker.\n\t*/\n\tstartAssistantMessage(messageId) {\n\t\tthis.prepareAssistantMessage();\n\t\tconst { messageId: id } = this.ensureAssistantMessage(messageId);\n\t\tthis.pendingManualMessageId = id;\n\t\treturn id;\n\t}\n\t/**\n\t* Get the current assistant message ID (if one has been created).\n\t* Returns null if prepareAssistantMessage() was called but no content\n\t* has arrived yet.\n\t*/\n\tgetCurrentAssistantMessageId() {\n\t\tlet lastId = null;\n\t\tfor (const [id, state] of this.messageStates) if (state.role === \"assistant\") lastId = id;\n\t\treturn lastId;\n\t}\n\t/**\n\t* Add a tool result (called by client after handling onToolCall)\n\t*/\n\taddToolResult(toolCallId, output, error) {\n\t\tconst messageWithToolCall = this.messages.find((msg) => msg.parts.some((p) => p.type === \"tool-call\" && p.id === toolCallId));\n\t\tif (!messageWithToolCall) {\n\t\t\tconsole.warn(`[StreamProcessor] Could not find message with tool call ${toolCallId}`);\n\t\t\treturn;\n\t\t}\n\t\tlet updatedMessages = updateToolCallWithOutput(this.messages, toolCallId, output, error ? \"error\" : void 0, error);\n\t\tconst content = normalizeToolResult(output);\n\t\tconst toolResultState = error ? \"error\" : \"complete\";\n\t\tupdatedMessages = updateToolResultPart(updatedMessages, messageWithToolCall.id, toolCallId, content, toolResultState, error);\n\t\tthis.messages = updatedMessages;\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Add an approval response (called by client after handling onApprovalRequest)\n\t*/\n\taddToolApprovalResponse(approvalId, approved) {\n\t\tthis.messages = updateToolCallApprovalResponse(this.messages, approvalId, approved);\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Get the conversation as ModelMessages (for sending to LLM)\n\t*/\n\ttoModelMessages() {\n\t\tconst modelMessages = [];\n\t\tfor (const msg of this.messages) modelMessages.push(...uiMessageToModelMessages(msg));\n\t\treturn modelMessages;\n\t}\n\t/**\n\t* Get current messages\n\t*/\n\tgetMessages() {\n\t\treturn this.messages;\n\t}\n\t/**\n\t* Check if all tool calls in the last assistant message are complete\n\t* Useful for auto-continue logic\n\t*/\n\tareAllToolsComplete() {\n\t\tconst lastAssistant = this.messages.findLast((m) => m.role === \"assistant\");\n\t\tif (!lastAssistant) return true;\n\t\tconst toolParts = lastAssistant.parts.filter((p) => p.type === \"tool-call\");\n\t\tif (toolParts.length === 0) return true;\n\t\tconst toolResultIds = new Set(lastAssistant.parts.filter((p) => p.type === \"tool-result\").map((p) => p.toolCallId));\n\t\treturn toolParts.every((part) => part.state === \"complete\" || part.state === \"approval-responded\" || part.output !== void 0 && !part.approval || toolResultIds.has(part.id) || isProviderExecutedToolCall(part));\n\t}\n\t/**\n\t* Remove messages after a certain index (for reload/retry)\n\t*/\n\tremoveMessagesAfter(index) {\n\t\tconst keptIds = new Set(this.messages.slice(0, index + 1).map((m) => m.id));\n\t\tfor (const id of this.structuredMessageIds) if (!keptIds.has(id)) this.structuredMessageIds.delete(id);\n\t\tfor (const id of this.structuredOutputUpdateBatches.keys()) if (!keptIds.has(id)) this.structuredOutputUpdateBatches.delete(id);\n\t\tfor (const id of this.messageStates.keys()) if (!keptIds.has(id)) this.messageStates.delete(id);\n\t\tfor (const [toolCallId, msgId] of this.toolCallToMessage) if (!keptIds.has(msgId)) this.toolCallToMessage.delete(toolCallId);\n\t\tfor (const id of this.activeMessageIds) if (!keptIds.has(id)) this.activeMessageIds.delete(id);\n\t\tthis.messages = this.messages.slice(0, index + 1);\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Clear all messages\n\t*/\n\tclearMessages() {\n\t\tthis.messages = [];\n\t\tthis.messageStates.clear();\n\t\tthis.activeMessageIds.clear();\n\t\tthis.toolCallToMessage.clear();\n\t\tthis.structuredMessageIds.clear();\n\t\tthis.structuredOutputUpdateBatches.clear();\n\t\tthis.pendingManualMessageId = null;\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Process a stream and emit events through handlers\n\t*/\n\tasync process(stream) {\n\t\tthis.resetStreamState();\n\t\tif (this.recordingEnabled) this.startRecording();\n\t\tfor await (const chunk of stream) this.processChunk(chunk);\n\t\tthis.finalizeStream();\n\t\tif (this.recording) this.recording.result = this.getResult();\n\t\treturn this.getResult();\n\t}\n\t/**\n\t* Process a single chunk from the stream.\n\t*\n\t* Central dispatch for all AG-UI events. Each event type maps to a specific\n\t* handler. Events not listed in the switch are intentionally ignored\n\t* (STEP_STARTED, STATE_SNAPSHOT, STATE_DELTA).\n\t*\n\t* @see docs/chat-architecture.md#adapter-contract — Expected event types and ordering\n\t*/\n\tprocessChunk(chunk) {\n\t\tif (this.recording) this.recording.chunks.push({\n\t\t\tchunk,\n\t\t\ttimestamp: Date.now(),\n\t\t\tindex: this.recording.chunks.length\n\t\t});\n\t\tswitch (chunk.type) {\n\t\t\tcase \"TEXT_MESSAGE_START\":\n\t\t\t\tthis.handleTextMessageStartEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"TEXT_MESSAGE_CONTENT\":\n\t\t\t\tthis.handleTextMessageContentEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"TEXT_MESSAGE_END\":\n\t\t\t\tthis.handleTextMessageEndEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"TOOL_CALL_START\":\n\t\t\t\tthis.handleToolCallStartEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"TOOL_CALL_ARGS\":\n\t\t\t\tthis.handleToolCallArgsEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"TOOL_CALL_END\":\n\t\t\t\tthis.handleToolCallEndEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"RUN_FINISHED\":\n\t\t\t\tthis.handleRunFinishedEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"RUN_ERROR\":\n\t\t\t\tthis.handleRunErrorEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"STEP_FINISHED\":\n\t\t\t\tthis.handleStepFinishedEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"MESSAGES_SNAPSHOT\":\n\t\t\t\tthis.handleMessagesSnapshotEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"CUSTOM\":\n\t\t\t\tthis.handleCustomEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"RUN_STARTED\":\n\t\t\t\tthis.handleRunStartedEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"REASONING_START\":\n\t\t\tcase \"REASONING_MESSAGE_START\":\n\t\t\tcase \"REASONING_MESSAGE_END\":\n\t\t\tcase \"REASONING_END\": break;\n\t\t\tcase \"REASONING_MESSAGE_CONTENT\":\n\t\t\t\tthis.handleReasoningMessageContentEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"REASONING_ENCRYPTED_VALUE\":\n\t\t\t\tthis.handleReasoningEncryptedValueEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"TOOL_CALL_RESULT\":\n\t\t\t\tthis.handleToolCallResultEvent(chunk);\n\t\t\t\tbreak;\n\t\t\tcase \"STEP_STARTED\": this.handleStepStartedEvent(chunk);\n\t\t}\n\t}\n\t/**\n\t* Create a new MessageStreamState for a message\n\t*/\n\tcreateMessageState(messageId, role) {\n\t\tconst state = {\n\t\t\tid: messageId,\n\t\t\trole,\n\t\t\ttotalTextContent: \"\",\n\t\t\tcurrentSegmentText: \"\",\n\t\t\tlastEmittedText: \"\",\n\t\t\thasSeenReasoningEvents: false,\n\t\t\tthinkingSteps: /* @__PURE__ */ new Map(),\n\t\t\tthinkingStepSignatures: /* @__PURE__ */ new Map(),\n\t\t\tthinkingStepOrder: [],\n\t\t\tcurrentThinkingStepId: null,\n\t\t\ttoolCalls: /* @__PURE__ */ new Map(),\n\t\t\ttoolCallOrder: [],\n\t\t\thasToolCallsSinceTextStart: false,\n\t\t\tisComplete: false\n\t\t};\n\t\tthis.messageStates.set(messageId, state);\n\t\treturn state;\n\t}\n\t/**\n\t* Get the MessageStreamState for a message\n\t*/\n\tgetMessageState(messageId) {\n\t\treturn this.messageStates.get(messageId);\n\t}\n\t/**\n\t* Promote a pending stepId from a STEP_STARTED that fired before the\n\t* assistant message existed onto the given message state, so the next\n\t* thinking event (STEP_FINISHED or REASONING_MESSAGE_CONTENT) attributes\n\t* to the correct step.\n\t*/\n\tconsumePendingThinkingStep(state) {\n\t\tif (!this.pendingThinkingStepId) return;\n\t\tconst stepId = this.pendingThinkingStepId;\n\t\tstate.currentThinkingStepId = stepId;\n\t\tif (!state.thinkingSteps.has(stepId)) {\n\t\t\tstate.thinkingSteps.set(stepId, \"\");\n\t\t\tstate.thinkingStepOrder.push(stepId);\n\t\t}\n\t\tthis.pendingThinkingStepId = null;\n\t}\n\t/**\n\t* Get the most recent active assistant message ID.\n\t* Used as fallback for events that don't include a messageId.\n\t*/\n\tgetActiveAssistantMessageId() {\n\t\tconst ids = Array.from(this.activeMessageIds).reverse();\n\t\tfor (const id of ids) {\n\t\t\tconst state = this.messageStates.get(id);\n\t\t\tif (state && state.role === \"assistant\") return id;\n\t\t}\n\t\tfor (const [id, state] of [...this.messageStates].reverse()) if (state.role === \"assistant\") return id;\n\t\treturn null;\n\t}\n\tresumeAssistantState(id, state) {\n\t\tthis.activeMessageIds.add(id);\n\t\tif (state.isComplete || this.isDone) {\n\t\t\tstate.isComplete = false;\n\t\t\tthis.isDone = false;\n\t\t}\n\t}\n\t/**\n\t* Ensure an active assistant message exists, creating one if needed.\n\t* Used for backward compat when events arrive without prior TEXT_MESSAGE_START.\n\t*\n\t* On reconnect/resume, a TEXT_MESSAGE_CONTENT may arrive for a message that\n\t* already exists in this.messages (e.g. from initialMessages or a prior\n\t* MESSAGES_SNAPSHOT) but whose transient state was cleared. In that case we\n\t* hydrate state from the existing message rather than creating a duplicate.\n\t*/\n\tensureAssistantMessage(preferredId) {\n\t\tif (preferredId) {\n\t\t\tconst state = this.getMessageState(preferredId);\n\t\t\tif (state) {\n\t\t\t\tthis.resumeAssistantState(preferredId, state);\n\t\t\t\treturn {\n\t\t\t\t\tmessageId: preferredId,\n\t\t\t\t\tstate\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tconst activeId = this.getActiveAssistantMessageId();\n\t\tif (activeId) {\n\t\t\tconst state = this.getMessageState(activeId);\n\t\t\tif (state) {\n\t\t\t\tthis.resumeAssistantState(activeId, state);\n\t\t\t\treturn {\n\t\t\t\t\tmessageId: activeId,\n\t\t\t\t\tstate\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tif (preferredId) {\n\t\t\tconst existingMsg = this.messages.find((m) => m.id === preferredId);\n\t\t\tif (existingMsg) {\n\t\t\t\tconst state = this.createMessageState(preferredId, existingMsg.role);\n\t\t\t\tthis.activeMessageIds.add(preferredId);\n\t\t\t\tconst lastPart = existingMsg.parts.length > 0 ? existingMsg.parts[existingMsg.parts.length - 1] : null;\n\t\t\t\tif (lastPart && lastPart.type === \"text\") {\n\t\t\t\t\tstate.currentSegmentText = lastPart.content;\n\t\t\t\t\tstate.lastEmittedText = lastPart.content;\n\t\t\t\t\tstate.totalTextContent = lastPart.content;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tmessageId: preferredId,\n\t\t\t\t\tstate\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tconst id = preferredId || generateMessageId();\n\t\tconst assistantMessage = {\n\t\t\tid,\n\t\t\trole: \"assistant\",\n\t\t\tparts: [],\n\t\t\tcreatedAt: /* @__PURE__ */ new Date()\n\t\t};\n\t\tthis.messages = [...this.messages, assistantMessage];\n\t\tconst state = this.createMessageState(id, \"assistant\");\n\t\tthis.activeMessageIds.add(id);\n\t\tthis.pendingManualMessageId = id;\n\t\tthis.events.onStreamStart?.();\n\t\tthis.emitMessagesChange();\n\t\treturn {\n\t\t\tmessageId: id,\n\t\t\tstate\n\t\t};\n\t}\n\t/**\n\t* Merge event metadata onto a UIMessage. `tanstack` is deep-merged so a\n\t* later delta does not wipe `tanstack.model`. High-frequency leftover\n\t* keys (`content`, `args`) never stamp onto the message.\n\t* Rebuilds `createdAt` when `tanstack.createdAt` is an ISO string.\n\t*/\n\tmergeMessageMetadata(messageId, incoming) {\n\t\tif (incoming == null || typeof incoming !== \"object\" || Array.isArray(incoming)) return;\n\t\tconst message = this.messages.find((msg) => msg.id === messageId);\n\t\tif (!message) return;\n\t\tconst incomingRecord = incoming;\n\t\tconst incomingTanstack = tanstackMetadata(incomingRecord);\n\t\tconst toMerge = incomingTanstack != null && (\"content\" in incomingTanstack || \"args\" in incomingTanstack) ? {\n\t\t\t...incomingRecord,\n\t\t\ttanstack: Object.fromEntries(Object.entries(incomingTanstack).filter(([key]) => key !== \"content\" && key !== \"args\"))\n\t\t} : incomingRecord;\n\t\tconst metadata = mergeMetadata(message.metadata, toMerge);\n\t\tconst createdAt = coerceCreatedAt(tanstackMetadata(incomingRecord)?.createdAt);\n\t\tconst createdAtValid = createdAt !== void 0;\n\t\tthis.messages = this.messages.map((msg) => msg.id === messageId ? {\n\t\t\t...msg,\n\t\t\t...metadata !== void 0 ? { metadata } : {},\n\t\t\t...createdAtValid ? { createdAt } : {}\n\t\t} : msg);\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Handle TEXT_MESSAGE_START event\n\t*/\n\thandleTextMessageStartEvent(chunk) {\n\t\tconst { messageId, role } = chunk;\n\t\tconst uiRole = role === \"user\" || role === \"system\" ? role : \"assistant\";\n\t\tif (this.pendingManualMessageId) {\n\t\t\tconst pendingId = this.pendingManualMessageId;\n\t\t\tthis.pendingManualMessageId = null;\n\t\t\tif (pendingId !== messageId) {\n\t\t\t\tthis.messages = this.messages.map((msg) => msg.id === pendingId ? {\n\t\t\t\t\t...msg,\n\t\t\t\t\tid: messageId\n\t\t\t\t} : msg);\n\t\t\t\tconst existingState = this.messageStates.get(pendingId);\n\t\t\t\tif (existingState) {\n\t\t\t\t\texistingState.id = messageId;\n\t\t\t\t\tthis.messageStates.delete(pendingId);\n\t\t\t\t\tthis.messageStates.set(messageId, existingState);\n\t\t\t\t}\n\t\t\t\tthis.activeMessageIds.delete(pendingId);\n\t\t\t\tthis.activeMessageIds.add(messageId);\n\t\t\t\tfor (const [toolCallId, mappedMessageId] of this.toolCallToMessage) if (mappedMessageId === pendingId) this.toolCallToMessage.set(toolCallId, messageId);\n\t\t\t}\n\t\t\tlet pendingState = this.messageStates.get(messageId);\n\t\t\tif (!pendingState) {\n\t\t\t\tpendingState = this.createMessageState(messageId, uiRole);\n\t\t\t\tthis.activeMessageIds.add(messageId);\n\t\t\t} else if (pendingState.hasToolCallsSinceTextStart) {\n\t\t\t\tif (pendingState.currentSegmentText !== pendingState.lastEmittedText) this.emitTextUpdateForMessage(messageId);\n\t\t\t\tpendingState.currentSegmentText = \"\";\n\t\t\t\tpendingState.lastEmittedText = \"\";\n\t\t\t\tpendingState.hasToolCallsSinceTextStart = false;\n\t\t\t}\n\t\t\tthis.mergeMessageMetadata(messageId, chunk.metadata);\n\t\t\tthis.emitMessagesChange();\n\t\t\treturn;\n\t\t}\n\t\tif (this.messages.find((m) => m.id === messageId)) {\n\t\t\tthis.activeMessageIds.add(messageId);\n\t\t\tconst existingState = this.messageStates.get(messageId);\n\t\t\tif (!existingState) this.createMessageState(messageId, uiRole);\n\t\t\telse if (existingState.hasToolCallsSinceTextStart) {\n\t\t\t\tif (existingState.currentSegmentText !== existingState.lastEmittedText) this.emitTextUpdateForMessage(messageId);\n\t\t\t\texistingState.currentSegmentText = \"\";\n\t\t\t\texistingState.lastEmittedText = \"\";\n\t\t\t\texistingState.hasToolCallsSinceTextStart = false;\n\t\t\t}\n\t\t\tthis.mergeMessageMetadata(messageId, chunk.metadata);\n\t\t\treturn;\n\t\t}\n\t\tconst newMessage = {\n\t\t\tid: messageId,\n\t\t\trole: uiRole,\n\t\t\tparts: [],\n\t\t\tcreatedAt: /* @__PURE__ */ new Date()\n\t\t};\n\t\tthis.messages = [...this.messages, newMessage];\n\t\tthis.createMessageState(messageId, uiRole);\n\t\tthis.activeMessageIds.add(messageId);\n\t\tthis.mergeMessageMetadata(messageId, chunk.metadata);\n\t\tthis.events.onStreamStart?.();\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Handle TEXT_MESSAGE_END event\n\t*/\n\thandleTextMessageEndEvent(chunk) {\n\t\tconst { messageId } = chunk;\n\t\tthis.mergeMessageMetadata(messageId, chunk.metadata);\n\t\tconst state = this.getMessageState(messageId);\n\t\tif (!state) return;\n\t\tif (state.isComplete) return;\n\t\tif (state.currentSegmentText !== state.lastEmittedText) this.emitTextUpdateForMessage(messageId);\n\t}\n\t/**\n\t* Handle MESSAGES_SNAPSHOT event\n\t*/\n\thandleMessagesSnapshotEvent(chunk) {\n\t\tthis.resetStreamState();\n\t\tconst prevMessages = this.messages;\n\t\tconst prevById = new Map(prevMessages.map((msg) => [msg.id, msg]));\n\t\tconst normalized = this.mergeReasoningFanOut(chunk.messages.map(aguiSnapshotMessageToUIMessage));\n\t\tthis.messages = this.reconcileSnapshotToolCalls(normalized, prevMessages).map((msg) => {\n\t\t\tif (msg.metadata != null) return msg;\n\t\t\tconst prev = prevById.get(msg.id);\n\t\t\tif (prev?.metadata == null) return msg;\n\t\t\treturn {\n\t\t\t\t...msg,\n\t\t\t\tmetadata: prev.metadata\n\t\t\t};\n\t\t});\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Reconcile a freshly normalized snapshot with the pre-snapshot message\n\t* state so unreconstructable tool-call metadata is preserved.\n\t*\n\t* Post-pass (a): anchor `tool-result`-only assistant messages (the shape\n\t* `aguiSnapshotMessageToUIMessage` emits for AG-UI `role: 'tool'` wire\n\t* messages) into the message containing the matching `tool-call` part, or —\n\t* when the snapshot supplies no such part — the nearest earlier anchorable\n\t* assistant message, matching the in-stream fan-out shape\n\t* `assistant: [text, tool-call, tool-result, ...]`. Detached messages with\n\t* no earlier anchorable assistant are kept verbatim.\n\t*\n\t* Post-pass (b): when a `tool-result` part references a `toolCallId` whose\n\t* `tool-call` part is absent from the snapshot, carry the `tool-call` part\n\t* forward from the pre-snapshot state (state and output untouched) so a\n\t* subsequent `addToolResult(toolCallId)` can still locate the call.\n\t*\n\t* Post-pass (c): AG-UI wire snapshots rebuild `tool-call` parts as\n\t* `input-complete` without `output` (ModelMessage has no result field on\n\t* the call). After anchoring results, copy each `tool-result` onto its\n\t* matching `tool-call` (and prefer pre-snapshot complete/output when the\n\t* snapshot is poorer) so server tools keep the same UI shape as client tools.\n\t*/\n\t/**\n\t* Wire order is reasoning fan-outs, then the assistant anchor.\n\t* Snapshot conversion turns each reasoning row into its own assistant\n\t* message. Fold leading thinking-only messages into the next real\n\t* assistant. Do not fold into a tool-result-only message (`role: 'tool'`\n\t* on the wire). `reconcileSnapshotToolCalls` anchors those results.\n\t*/\n\tmergeReasoningFanOut(messages) {\n\t\tconst out = [];\n\t\tlet pending = [];\n\t\tconst thinkingParts = (msg) => msg.parts.filter((part) => part.type === \"thinking\");\n\t\tconst isThinkingOnly = (msg) => msg.role === \"assistant\" && msg.parts.length > 0 && msg.parts.every((part) => part.type === \"thinking\");\n\t\tconst isToolResultOnly = (msg) => msg.role === \"assistant\" && msg.parts.some((part) => part.type === \"tool-result\") && msg.parts.every((part) => part.type === \"tool-result\" || part.type === \"ui-resource\");\n\t\tconst flushPending = () => {\n\t\t\tout.push(...pending);\n\t\t\tpending = [];\n\t\t};\n\t\tfor (const msg of messages) {\n\t\t\tif (isThinkingOnly(msg)) {\n\t\t\t\tpending.push(msg);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (msg.role === \"assistant\" && pending.length > 0 && !isToolResultOnly(msg)) {\n\t\t\t\tout.push({\n\t\t\t\t\t...msg,\n\t\t\t\t\tparts: [...pending.flatMap(thinkingParts), ...msg.parts]\n\t\t\t\t});\n\t\t\t\tpending = [];\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tflushPending();\n\t\t\tout.push(msg);\n\t\t}\n\t\tflushPending();\n\t\treturn out;\n\t}\n\treconcileSnapshotToolCalls(snapshot, prevMessages) {\n\t\tconst prevToolCalls = /* @__PURE__ */ new Map();\n\t\tfor (const msg of prevMessages) for (const part of msg.parts) if (part.type === \"tool-call\") prevToolCalls.set(part.id, part);\n\t\tconst snapshotToolCallIds = /* @__PURE__ */ new Set();\n\t\tfor (const msg of snapshot) for (const part of msg.parts) if (part.type === \"tool-call\") snapshotToolCallIds.add(part.id);\n\t\tconst reconciled = [];\n\t\tfor (const msg of snapshot) {\n\t\t\tconst toolResultParts = msg.parts.filter((part) => part.type === \"tool-result\");\n\t\t\tconst toolResultPart = msg.role === \"assistant\" && toolResultParts.length === 1 && msg.parts.every((part) => part.type === \"tool-result\" || part.type === \"ui-resource\") ? toolResultParts[0] : void 0;\n\t\t\tif (!toolResultPart) {\n\t\t\t\treconciled.push(msg);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst target = reconciled.findLast((m) => m.parts.some((p) => p.type === \"tool-call\" && p.id === toolResultPart.toolCallId)) ?? reconciled.findLast((m) => m.role === \"assistant\" && !(m.parts.length === 1 && m.parts[0]?.type === \"tool-result\"));\n\t\t\tif (!target) {\n\t\t\t\tif (!snapshotToolCallIds.has(toolResultPart.toolCallId)) console.warn(`[StreamProcessor] MESSAGES_SNAPSHOT contains a tool-result for \"${toolResultPart.toolCallId}\" but no matching tool-call exists in the snapshot, and there is no assistant message to anchor into; addToolResult(\"${toolResultPart.toolCallId}\") will not be able to locate this call`);\n\t\t\t\treconciled.push(msg);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parts = [...target.parts];\n\t\t\tif (!snapshotToolCallIds.has(toolResultPart.toolCallId) && !parts.some((p) => p.type === \"tool-call\" && p.id === toolResultPart.toolCallId)) {\n\t\t\t\tconst prev = prevToolCalls.get(toolResultPart.toolCallId);\n\t\t\t\tif (prev) {\n\t\t\t\t\tparts.push({ ...prev });\n\t\t\t\t\tsnapshotToolCallIds.add(prev.id);\n\t\t\t\t} else console.warn(`[StreamProcessor] MESSAGES_SNAPSHOT contains a tool-result for \"${toolResultPart.toolCallId}\" but no matching tool-call exists in the snapshot or the pre-snapshot state; addToolResult(\"${toolResultPart.toolCallId}\") will not be able to locate this call`);\n\t\t\t}\n\t\t\tparts.push(...msg.parts);\n\t\t\ttarget.parts = parts;\n\t\t}\n\t\treturn this.enrichSnapshotToolCallsFromResults(reconciled, prevToolCalls);\n\t}\n\t/**\n\t* Post-pass (c): fold `tool-result` content into sibling `tool-call` parts\n\t* and prefer pre-snapshot complete/output when the snapshot rebuilt a\n\t* poorer `input-complete` call (AG-UI ModelMessage has no result on calls).\n\t*/\n\tenrichSnapshotToolCallsFromResults(messages, prevToolCalls) {\n\t\tconst resultsByCallId = /* @__PURE__ */ new Map();\n\t\tfor (const msg of messages) for (const part of msg.parts) if (part.type === \"tool-result\") resultsByCallId.set(part.toolCallId, part);\n\t\treturn messages.map((msg) => {\n\t\t\tconst parts = msg.parts.map((part) => {\n\t\t\t\tif (part.type !== \"tool-call\") return part;\n\t\t\t\tconst prev = prevToolCalls.get(part.id);\n\t\t\t\tconst result = resultsByCallId.get(part.id);\n\t\t\t\tlet next = part;\n\t\t\t\tif (prev && (prev.output !== void 0 || prev.state === \"complete\" || prev.state === \"error\") && (part.output === void 0 || part.state === \"input-complete\" || part.state === \"input-streaming\" || part.state === \"awaiting-input\")) next = {\n\t\t\t\t\t...part,\n\t\t\t\t\t...prev.output !== void 0 ? { output: prev.output } : {},\n\t\t\t\t\tstate: prev.state,\n\t\t\t\t\t...prev.approval !== void 0 ? { approval: prev.approval } : {},\n\t\t\t\t\t...prev.metadata !== void 0 ? { metadata: prev.metadata } : {}\n\t\t\t\t};\n\t\t\t\tif (result && next.output === void 0) {\n\t\t\t\t\tlet output;\n\t\t\t\t\tif (Array.isArray(result.content)) output = result.content;\n\t\t\t\t\telse try {\n\t\t\t\t\t\toutput = JSON.parse(result.content);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\toutput = result.content;\n\t\t\t\t\t}\n\t\t\t\t\tconst errorText = result.state === \"error\" ? this.extractToolResultError(output) : void 0;\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\toutput: errorText ? { error: errorText } : output,\n\t\t\t\t\t\tstate: result.state === \"error\" ? \"error\" : \"complete\"\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn next;\n\t\t\t});\n\t\t\treturn parts.some((part, index) => part !== msg.parts[index]) ? {\n\t\t\t\t...msg,\n\t\t\t\tparts\n\t\t\t} : msg;\n\t\t});\n\t}\n\t/**\n\t* Handle TEXT_MESSAGE_CONTENT event.\n\t*\n\t* Accumulates delta into both currentSegmentText (for UI emission) and\n\t* totalTextContent (for ProcessorResult). Lazily creates the assistant\n\t* UIMessage on first content. Uses updateTextPart() which replaces the\n\t* last TextPart or creates a new one depending on part ordering.\n\t*\n\t* @see docs/chat-architecture.md#single-shot-text-response — Text accumulation step-by-step\n\t* @see docs/chat-architecture.md#uimessage-part-ordering-invariants — Replace vs. push logic\n\t*/\n\thandleTextMessageContentEvent(chunk) {\n\t\tconst { messageId, state } = this.ensureAssistantMessage(chunk.messageId);\n\t\tthis.mergeMessageMetadata(messageId, chunk.metadata);\n\t\tif (this.structuredMessageIds.has(messageId)) {\n\t\t\tconst delta = chunk.delta || \"\";\n\t\t\tif (delta !== \"\") {\n\t\t\t\tthis.messages = appendStructuredOutputDelta(this.messages, messageId, delta);\n\t\t\t\tstate.totalTextContent += delta;\n\t\t\t\tthis.queueStructuredOutputUpdate(messageId, delta);\n\t\t\t\tthis.emitMessagesChange();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst previousSegment = state.currentSegmentText;\n\t\tif (state.hasToolCallsSinceTextStart && previousSegment.length > 0 && this.isNewTextSegment(chunk, previousSegment)) {\n\t\t\tif (previousSegment !== state.lastEmittedText) this.emitTextUpdateForMessage(messageId);\n\t\t\tstate.currentSegmentText = \"\";\n\t\t\tstate.lastEmittedText = \"\";\n\t\t\tstate.hasToolCallsSinceTextStart = false;\n\t\t}\n\t\tstate.hasToolCallsSinceTextStart = false;\n\t\tconst currentText = state.currentSegmentText;\n\t\tconst delta = chunk.delta || \"\";\n\t\tconst nextText = delta !== \"\" ? currentText + delta : currentText;\n\t\tconst textDelta = nextText.slice(currentText.length);\n\t\tstate.currentSegmentText = nextText;\n\t\tstate.totalTextContent += textDelta;\n\t\tconst chunkPortion = chunk.delta || \"\";\n\t\tif (this.chunkStrategy.shouldEmit(chunkPortion, state.currentSegmentText) && state.currentSegmentText !== state.lastEmittedText) this.emitTextUpdateForMessage(messageId);\n\t}\n\t/**\n\t* Handle TOOL_CALL_START event.\n\t*\n\t* Creates a new InternalToolCallState entry in the toolCalls Map and appends\n\t* a ToolCallPart to the UIMessage. Duplicate toolCallId is a no-op.\n\t*\n\t* CRITICAL: This MUST be received before any TOOL_CALL_ARGS for the same\n\t* toolCallId. Args for unknown IDs are silently dropped.\n\t*\n\t* @see docs/chat-architecture.md#single-shot-tool-call-response — Tool call state transitions\n\t* @see docs/chat-architecture.md#parallel-tool-calls-single-shot — Parallel tracking by ID\n\t* @see docs/chat-architecture.md#adapter-contract — Ordering requirements\n\t*/\n\thandleToolCallStartEvent(chunk) {\n\t\tconst targetMessageId = chunk.parentMessageId ?? this.getActiveAssistantMessageId();\n\t\tconst { messageId, state } = this.ensureAssistantMessage(targetMessageId ?? void 0);\n\t\tstate.hasToolCallsSinceTextStart = true;\n\t\tconst toolCallId = chunk.toolCallId;\n\t\tif (!state.toolCalls.get(toolCallId)) {\n\t\t\tconst initialState = \"awaiting-input\";\n\t\t\tconst toolName = chunk.toolCallName;\n\t\t\tconst chunkMetadata = chunk.metadata;\n\t\t\tconst newToolCall = {\n\t\t\t\tid: chunk.toolCallId,\n\t\t\t\tname: toolName,\n\t\t\t\targuments: \"\",\n\t\t\t\tstate: initialState,\n\t\t\t\tparsedArguments: void 0,\n\t\t\t\tindex: state.toolCalls.size,\n\t\t\t\t...chunkMetadata !== void 0 && { metadata: chunkMetadata }\n\t\t\t};\n\t\t\tstate.toolCalls.set(toolCallId, newToolCall);\n\t\t\tstate.toolCallOrder.push(toolCallId);\n\t\t\tthis.toolCallToMessage.set(toolCallId, messageId);\n\t\t\tthis.messages = updateToolCallPart(this.messages, messageId, {\n\t\t\t\tid: chunk.toolCallId,\n\t\t\t\tname: toolName,\n\t\t\t\targuments: \"\",\n\t\t\t\tstate: initialState,\n\t\t\t\t...chunkMetadata !== void 0 && { metadata: chunkMetadata }\n\t\t\t});\n\t\t\tthis.emitMessagesChange();\n\t\t\tthis.events.onToolCallStateChange?.(messageId, chunk.toolCallId, initialState, \"\");\n\t\t}\n\t}\n\t/**\n\t* Handle TOOL_CALL_ARGS event.\n\t*\n\t* Appends the delta to the tool call's accumulated arguments string.\n\t* Transitions state from awaiting-input → input-streaming on first non-empty delta.\n\t* Attempts partial JSON parse on each update for UI preview.\n\t*\n\t* If toolCallId is not found in the Map (no preceding TOOL_CALL_START),\n\t* this event is silently dropped.\n\t*\n\t* @see docs/chat-architecture.md#single-shot-tool-call-response — Step-by-step tool call processing\n\t*/\n\thandleToolCallArgsEvent(chunk) {\n\t\tconst toolCallId = chunk.toolCallId;\n\t\tconst messageId = this.toolCallToMessage.get(toolCallId);\n\t\tif (!messageId) return;\n\t\tconst state = this.getMessageState(messageId);\n\t\tif (!state) return;\n\t\tconst existingToolCall = state.toolCalls.get(toolCallId);\n\t\tif (!existingToolCall) return;\n\t\tconst wasAwaitingInput = existingToolCall.state === \"awaiting-input\";\n\t\texistingToolCall.arguments += chunk.delta || \"\";\n\t\tif (wasAwaitingInput && chunk.delta) existingToolCall.state = \"input-streaming\";\n\t\texistingToolCall.parsedArguments = this.jsonParser.parse(existingToolCall.arguments);\n\t\tthis.messages = updateToolCallPart(this.messages, messageId, {\n\t\t\tid: existingToolCall.id,\n\t\t\tname: existingToolCall.name,\n\t\t\targuments: existingToolCall.arguments,\n\t\t\tstate: existingToolCall.state\n\t\t});\n\t\tthis.emitMessagesChange();\n\t\tthis.events.onToolCallStateChange?.(messageId, existingToolCall.id, existingToolCall.state, existingToolCall.arguments);\n\t}\n\t/**\n\t* Handle TOOL_CALL_END event — arguments are finalized (input-complete).\n\t* Tool output arrives on TOOL_CALL_RESULT, not on this event.\n\t*\n\t* If TOOL_CALL_END carries parsed `input`, use it as the canonical arguments:\n\t* back-fill the accumulated string when no TOOL_CALL_ARGS deltas were seen\n\t* (adapters that deliver the whole input on END — e.g. Anthropic\n\t* server_tool_use / web_search — issue #839) and override the rendered part's\n\t* `input` with the canonical value.\n\t*\n\t* @see docs/chat-architecture.md#single-shot-tool-call-response — End-to-end flow\n\t*/\n\thandleToolCallEndEvent(chunk) {\n\t\tconst messageId = this.toolCallToMessage.get(chunk.toolCallId);\n\t\tif (!messageId) return;\n\t\tconst msgState = this.getMessageState(messageId);\n\t\tif (!msgState) return;\n\t\tconst input = chunk.input !== void 0 ? chunk.input : tanstackMetadata(chunk)?.input;\n\t\tconst existingToolCall = msgState.toolCalls.get(chunk.toolCallId);\n\t\tif (existingToolCall && existingToolCall.state !== \"input-complete\") {\n\t\t\tif (input !== void 0 && !existingToolCall.arguments) try {\n\t\t\t\texistingToolCall.arguments = JSON.stringify(input);\n\t\t\t} catch {}\n\t\t\tconst index = msgState.toolCallOrder.indexOf(chunk.toolCallId);\n\t\t\tthis.completeToolCall(messageId, index, existingToolCall);\n\t\t\tif (input !== void 0) {\n\t\t\t\texistingToolCall.parsedArguments = input;\n\t\t\t\tthis.messages = updateToolCallPart(this.messages, messageId, {\n\t\t\t\t\tid: existingToolCall.id,\n\t\t\t\t\tname: existingToolCall.name,\n\t\t\t\t\targuments: existingToolCall.arguments,\n\t\t\t\t\tstate: \"input-complete\",\n\t\t\t\t\tinput,\n\t\t\t\t\t...existingToolCall.metadata !== void 0 && { metadata: existingToolCall.metadata }\n\t\t\t\t});\n\t\t\t\tthis.emitMessagesChange();\n\t\t\t}\n\t\t}\n\t}\n\textractToolResultError(output) {\n\t\tif (output && typeof output === \"object\" && \"error\" in output && typeof output.error === \"string\") return output.error;\n\t\treturn typeof output === \"string\" ? output : \"Tool execution failed\";\n\t}\n\t/**\n\t* Handle TOOL_CALL_RESULT event (AG-UI spec).\n\t*\n\t* Creates a tool-result part and updates the tool-call output field,\n\t* mirroring the logic from TOOL_CALL_END when it carries a result.\n\t* This is the spec-compliant path for delivering tool results to the client.\n\t*/\n\thandleToolCallResultEvent(chunk) {\n\t\tconst messageId = this.toolCallToMessage.get(chunk.toolCallId) ?? this.messages.find((m) => m.parts.some((p) => p.type === \"tool-call\" && p.id === chunk.toolCallId))?.id;\n\t\tif (!messageId) return;\n\t\tconst isOutputError = chunk.state === \"output-error\" || tanstackMetadata(chunk)?.state === \"output-error\";\n\t\tlet output;\n\t\ttry {\n\t\t\toutput = JSON.parse(chunk.content);\n\t\t} catch {\n\t\t\toutput = chunk.content;\n\t\t}\n\t\tthis.messages = updateToolCallWithOutput(this.messages, chunk.toolCallId, output, isOutputError ? \"error\" : void 0);\n\t\tconst resultState = isOutputError ? \"error\" : \"complete\";\n\t\tthis.messages = updateToolResultPart(this.messages, messageId, chunk.toolCallId, chunk.content, resultState, resultState === \"error\" ? this.extractToolResultError(output) : void 0);\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Handle RUN_STARTED event.\n\t*\n\t* Registers the run so that RUN_FINISHED can determine whether other\n\t* runs are still active before finalizing.\n\t*/\n\thandleRunStartedEvent(chunk) {\n\t\tthis.activeRuns.add(chunk.runId);\n\t}\n\t/**\n\t* Handle RUN_FINISHED event.\n\t*\n\t* Records the finishReason and removes the run from activeRuns.\n\t* Only finalizes when no more runs are active, so that concurrent\n\t* runs don't interfere with each other.\n\t*\n\t* @see docs/chat-architecture.md#single-shot-tool-call-response — finishReason semantics\n\t* @see docs/chat-architecture.md#adapter-contract — Why RUN_FINISHED is mandatory\n\t*/\n\thandleRunFinishedEvent(chunk) {\n\t\tconst extra = chunk;\n\t\tthis.finishReason = extra.finishReason !== void 0 ? extra.finishReason : tanstackMetadata(chunk)?.finishReason ?? null;\n\t\tthis.activeRuns.delete(chunk.runId);\n\t\tif (chunk.outcome?.type === \"interrupt\") this.handleInterrupts(chunk.outcome.interrupts);\n\t\tif (this.activeRuns.size === 0) {\n\t\t\tthis.completeAllToolCalls();\n\t\t\tif (this.finishReason === \"tool_calls\" && chunk.outcome?.type !== \"interrupt\") return;\n\t\t\tthis.isDone = true;\n\t\t\tthis.finalizeStream();\n\t\t}\n\t}\n\thandleInterrupts(interrupts) {\n\t\tconst hasGeneric = interruptBatchHasGeneric(interrupts);\n\t\tfor (const interrupt of interrupts) {\n\t\t\tconst metadata = interrupt.metadata && typeof interrupt.metadata === \"object\" ? interrupt.metadata : {};\n\t\t\tconst kind = typeof metadata.kind === \"string\" ? metadata.kind : void 0;\n\t\t\tconst toolCallId = interrupt.toolCallId;\n\t\t\tif (!toolCallId) continue;\n\t\t\tconst toolName = typeof metadata.toolName === \"string\" ? metadata.toolName : this.findToolCallName(toolCallId);\n\t\t\tconst input = Object.hasOwn(metadata, \"input\") ? metadata.input : {};\n\t\t\tif (kind === \"approval\" || interrupt.reason === \"approval_required\") {\n\t\t\t\tconst resolvedMessageId = this.getActiveAssistantMessageId() ?? this.toolCallToMessage.get(toolCallId) ?? this.messages.find((m) => m.role === \"assistant\" && m.parts.some((p) => p.type === \"tool-call\" && p.id === toolCallId))?.id;\n\t\t\t\tif (resolvedMessageId) {\n\t\t\t\t\tthis.messages = updateToolCallApproval(this.messages, resolvedMessageId, toolCallId, interrupt.id);\n\t\t\t\t\tthis.emitMessagesChange();\n\t\t\t\t}\n\t\t\t\tthis.events.onApprovalRequest?.({\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tinput,\n\t\t\t\t\tapprovalId: interrupt.id\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (kind === \"client_tool\" || interrupt.reason === \"client_tool_input\") {\n\t\t\t\tif (hasGeneric) continue;\n\t\t\t\tthis.events.onToolCall?.({\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tinput\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tfindToolCallName(toolCallId) {\n\t\tfor (const state of this.messageStates.values()) {\n\t\t\tconst toolCall = state.toolCalls.get(toolCallId);\n\t\t\tif (toolCall) return toolCall.name;\n\t\t}\n\t\treturn \"\";\n\t}\n\t/**\n\t* Handle RUN_ERROR event\n\t*/\n\thandleRunErrorEvent(chunk) {\n\t\tthis.hasError = true;\n\t\tconst runId = getChunkRunId(chunk);\n\t\tif (runId) this.activeRuns.delete(runId);\n\t\telse this.activeRuns.clear();\n\t\tconst { messageId } = this.ensureAssistantMessage();\n\t\tconst errorMessage = chunk.message || \"An error occurred\";\n\t\tif (!chunk.message) console.error(\"[StreamProcessor] RUN_ERROR with no message; original chunk:\", chunk);\n\t\tif (this.structuredMessageIds.has(messageId)) {\n\t\t\tthis.flushStructuredOutputUpdate(messageId);\n\t\t\tthis.messages = errorStructuredOutputPart(this.messages, messageId, errorMessage);\n\t\t\tthis.structuredMessageIds.delete(messageId);\n\t\t\tthis.emitStructuredOutputChange(messageId, \"error\");\n\t\t\tthis.emitMessagesChange();\n\t\t}\n\t\tthis.events.onError?.(runErrorEventToError(chunk));\n\t}\n\t/**\n\t* Handle STEP_STARTED event (for thinking/reasoning content).\n\t*\n\t* Records the stepId so later REASONING_MESSAGE_CONTENT deltas accumulate\n\t* into their own ThinkingPart. Does not create a message — the message\n\t* is lazily created when the first REASONING_MESSAGE_CONTENT arrives.\n\t*/\n\thandleStepStartedEvent(chunk) {\n\t\tconst stepId = chunk.stepName || generateMessageId();\n\t\tconst activeId = this.getActiveAssistantMessageId();\n\t\tif (activeId) {\n\t\t\tconst state = this.getMessageState(activeId);\n\t\t\tif (state) {\n\t\t\t\tstate.currentThinkingStepId = stepId;\n\t\t\t\tif (!state.thinkingSteps.has(stepId)) {\n\t\t\t\t\tstate.thinkingSteps.set(stepId, \"\");\n\t\t\t\t\tstate.thinkingStepOrder.push(stepId);\n\t\t\t\t}\n\t\t\t\tthis.pendingThinkingStepId = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthis.pendingThinkingStepId = stepId;\n\t}\n\t/**\n\t* Handle STEP_FINISHED event.\n\t*\n\t* Thinking *content* comes from REASONING_MESSAGE_CONTENT, not STEP_FINISHED.\n\t* But some adapters (e.g. BytePlus thinking-summary) carry the provider\n\t* signature blob ONLY on the STEP_FINISHED event, so still extract that here\n\t* and attach it to the thinking step the reasoning events already built.\n\t*/\n\thandleStepFinishedEvent(chunk) {\n\t\tconst extra = chunk;\n\t\tconst signature = extra.signature;\n\t\tif (!signature) return;\n\t\tconst { messageId, state } = this.ensureAssistantMessage(this.getActiveAssistantMessageId() ?? void 0);\n\t\tconst stepId = state.currentThinkingStepId ?? extra.stepId;\n\t\tif (!stepId) return;\n\t\tconst thinking = state.thinkingSteps.get(stepId);\n\t\tif (thinking === void 0) return;\n\t\tstate.thinkingStepSignatures.set(stepId, signature);\n\t\tthis.messages = updateThinkingPart(this.messages, messageId, stepId, thinking, signature);\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Handle REASONING_MESSAGE_CONTENT event (AG-UI reasoning protocol).\n\t*\n\t* Accumulates reasoning delta into thinking content and updates the\n\t* corresponding ThinkingPart in the UIMessage.\n\t*/\n\thandleReasoningMessageContentEvent(chunk) {\n\t\tconst { messageId, state } = this.ensureAssistantMessage(this.getActiveAssistantMessageId() ?? void 0);\n\t\tstate.hasSeenReasoningEvents = true;\n\t\tconst delta = chunk.delta || \"\";\n\t\tthis.consumePendingThinkingStep(state);\n\t\tconst stepId = state.currentThinkingStepId ?? chunk.messageId;\n\t\tif (!state.thinkingSteps.has(stepId)) {\n\t\t\tstate.thinkingSteps.set(stepId, \"\");\n\t\t\tstate.thinkingStepOrder.push(stepId);\n\t\t\tstate.currentThinkingStepId = stepId;\n\t\t}\n\t\tconst nextThinking = (state.thinkingSteps.get(stepId) ?? \"\") + delta;\n\t\tstate.thinkingSteps.set(stepId, nextThinking);\n\t\tthis.messages = updateThinkingPart(this.messages, messageId, stepId, nextThinking, state.thinkingStepSignatures.get(stepId));\n\t\tthis.emitMessagesChange();\n\t\tthis.events.onThinkingUpdate?.(messageId, stepId, nextThinking);\n\t}\n\t/**\n\t* Attach a provider signature blob from REASONING_ENCRYPTED_VALUE.\n\t* `subtype: 'message'` updates ThinkingPart.signature.\n\t* `subtype: 'tool-call'` stores Gemini thoughtSignature on the tool-call part.\n\t*/\n\thandleReasoningEncryptedValueEvent(chunk) {\n\t\tconst encryptedValue = chunk.encryptedValue;\n\t\tif (typeof encryptedValue !== \"string\" || encryptedValue === \"\") return;\n\t\tif (chunk.subtype === \"tool-call\") {\n\t\t\tthis.attachToolCallSignature(chunk.entityId, encryptedValue);\n\t\t\treturn;\n\t\t}\n\t\tconst { messageId, state } = this.ensureAssistantMessage(this.getActiveAssistantMessageId() ?? void 0);\n\t\tconst stepId = state.currentThinkingStepId ?? chunk.entityId;\n\t\tstate.thinkingStepSignatures.set(stepId, encryptedValue);\n\t\tconst content = state.thinkingSteps.get(stepId) ?? \"\";\n\t\tif (!state.thinkingSteps.has(stepId)) {\n\t\t\tstate.thinkingSteps.set(stepId, content);\n\t\t\tstate.thinkingStepOrder.push(stepId);\n\t\t}\n\t\tthis.messages = updateThinkingPart(this.messages, messageId, stepId, content, encryptedValue);\n\t\tthis.emitMessagesChange();\n\t}\n\tattachToolCallSignature(toolCallId, thoughtSignature) {\n\t\tthis.messages = this.messages.map((msg) => {\n\t\t\tlet changed = false;\n\t\t\tconst parts = msg.parts.map((part) => {\n\t\t\t\tif (part.type !== \"tool-call\" || part.id !== toolCallId) return part;\n\t\t\t\tchanged = true;\n\t\t\t\treturn {\n\t\t\t\t\t...part,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t...part.metadata != null && typeof part.metadata === \"object\" ? part.metadata : {},\n\t\t\t\t\t\tthoughtSignature\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t});\n\t\t\treturn changed ? {\n\t\t\t\t...msg,\n\t\t\t\tparts\n\t\t\t} : msg;\n\t\t});\n\t\tfor (const state of this.messageStates.values()) {\n\t\t\tconst call = state.toolCalls.get(toolCallId);\n\t\t\tif (!call) continue;\n\t\t\tcall.metadata = {\n\t\t\t\t...call.metadata ?? {},\n\t\t\t\tthoughtSignature\n\t\t\t};\n\t\t}\n\t\tthis.emitMessagesChange();\n\t}\n\t/**\n\t* Handle CUSTOM event.\n\t*\n\t* Handles custom events consumed by the processor:\n\t* - 'tool-input-available': Legacy/replay-compatible input for client tool\n\t* execution. Fires onToolCall.\n\t* - 'approval-requested': Legacy/replay-compatible input for tool approval.\n\t* Updates tool-call part state and fires onApprovalRequest.\n\t*\n\t* Current core streams represent user-actionable waits through\n\t* RUN_FINISHED.outcome.type === 'interrupt'; these custom events are not the\n\t* source of truth for new emissions.\n\t*\n\t* @see docs/chat-architecture.md#client-tools-and-approval-flows — Full flow details\n\t*/\n\thandleCustomEvent(chunk) {\n\t\tconst messageId = this.getActiveAssistantMessageId();\n\t\tif (chunk.name === \"structured-output.start\" && chunk.value) {\n\t\t\tconst v = chunk.value;\n\t\t\tconst { messageId: targetId } = this.ensureAssistantMessage(v.messageId ?? messageId ?? void 0);\n\t\t\tif (targetId) {\n\t\t\t\tthis.structuredMessageIds.add(targetId);\n\t\t\t\tthis.structuredOutputUpdateBatches.delete(targetId);\n\t\t\t\tthis.events.onStructuredOutputChange?.({\n\t\t\t\t\tphase: \"start\",\n\t\t\t\t\tmessageId: targetId,\n\t\t\t\t\tstatus: \"streaming\",\n\t\t\t\t\traw: \"\"\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (chunk.name === \"structured-output.complete\" && chunk.value) {\n\t\t\tconst v = chunk.value;\n\t\t\tconst { messageId: targetId } = this.ensureAssistantMessage(v.messageId ?? messageId ?? void 0);\n\t\t\tif (targetId) {\n\t\t\t\tthis.flushStructuredOutputUpdate(targetId);\n\t\t\t\tthis.messages = completeStructuredOutputPart(this.messages, targetId, v.object, v.raw ?? \"\", v.reasoning);\n\t\t\t\tthis.structuredMessageIds.delete(targetId);\n\t\t\t\tthis.emitStructuredOutputChange(targetId, \"complete\");\n\t\t\t\tthis.emitMessagesChange();\n\t\t\t}\n\t\t}\n\t\tif (chunk.name === \"tool-input-available\" && chunk.value) {\n\t\t\tconst { toolCallId, toolName, input } = chunk.value;\n\t\t\tthis.events.onToolCall?.({\n\t\t\t\ttoolCallId,\n\t\t\t\ttoolName,\n\t\t\t\tinput\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (chunk.name === \"approval-requested\" && chunk.value) {\n\t\t\tconst { toolCallId, toolName, input, approval } = chunk.value;\n\t\t\tconst resolvedMessageId = messageId ?? this.toolCallToMessage.get(toolCallId);\n\t\t\tif (resolvedMessageId) {\n\t\t\t\tthis.messages = updateToolCallApproval(this.messages, resolvedMessageId, toolCallId, approval.id);\n\t\t\t\tthis.emitMessagesChange();\n\t\t\t}\n\t\t\tthis.events.onApprovalRequest?.({\n\t\t\t\ttoolCallId,\n\t\t\t\ttoolName,\n\t\t\t\tinput,\n\t\t\t\tapprovalId: approval.id\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (chunk.name === \"ui-resource\" && chunk.value) {\n\t\t\tconst v = chunk.value;\n\t\t\tconst resolvedMessageId = this.toolCallToMessage.get(v.toolCallId) ?? messageId;\n\t\t\tif (resolvedMessageId) {\n\t\t\t\tconst part = {\n\t\t\t\t\ttype: \"ui-resource\",\n\t\t\t\t\tresource: v.resource,\n\t\t\t\t\ttoolCallId: v.toolCallId,\n\t\t\t\t\ttoolName: v.toolName,\n\t\t\t\t\t...v.serverId !== void 0 && { serverId: v.serverId },\n\t\t\t\t\t...v.meta !== void 0 && { meta: v.meta }\n\t\t\t\t};\n\t\t\t\tthis.messages = this.messages.map((msg) => msg.id === resolvedMessageId ? {\n\t\t\t\t\t...msg,\n\t\t\t\t\tparts: [...msg.parts, part]\n\t\t\t\t} : msg);\n\t\t\t\tthis.emitMessagesChange();\n\t\t\t} else console.warn(`[mcp-apps] dropped ui-resource: no target message for toolCallId \"${v.toolCallId}\" (toolName \"${v.toolName}\")`);\n\t\t\treturn;\n\t\t}\n\t\tif (this.events.onCustomEvent) {\n\t\t\tconst toolCallId = chunk.value && typeof chunk.value === \"object\" ? chunk.value.toolCallId : void 0;\n\t\t\tthis.events.onCustomEvent(chunk.name, chunk.value, { toolCallId });\n\t\t}\n\t}\n\t/**\n\t* Detect if an incoming content chunk represents a NEW text segment\n\t*/\n\tisNewTextSegment(_chunk, _previous) {\n\t\treturn true;\n\t}\n\t/**\n\t* Complete all tool calls across all active messages — safety net for stream termination.\n\t*\n\t* Called by RUN_FINISHED and finalizeStream(). Force-transitions any tool call\n\t* not yet in input-complete state. Handles cases where TOOL_CALL_END was\n\t* missed (adapter bug, network error, aborted stream).\n\t*\n\t* @see docs/chat-architecture.md#single-shot-tool-call-response — Safety net behavior\n\t*/\n\tcompleteAllToolCalls() {\n\t\tfor (const messageId of this.activeMessageIds) this.completeAllToolCallsForMessage(messageId);\n\t}\n\t/**\n\t* Complete all tool calls for a specific message\n\t*/\n\tcompleteAllToolCallsForMessage(messageId) {\n\t\tconst state = this.getMessageState(messageId);\n\t\tif (!state) return;\n\t\tstate.toolCalls.forEach((toolCall, id) => {\n\t\t\tif (toolCall.state !== \"input-complete\") {\n\t\t\t\tconst index = state.toolCallOrder.indexOf(id);\n\t\t\t\tthis.completeToolCall(messageId, index, toolCall);\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Mark a tool call as complete and emit event\n\t*/\n\tcompleteToolCall(messageId, _index, toolCall) {\n\t\ttoolCall.state = \"input-complete\";\n\t\tlet strictParseSucceeded = false;\n\t\ttry {\n\t\t\ttoolCall.parsedArguments = JSON.parse(toolCall.arguments);\n\t\t\tstrictParseSucceeded = true;\n\t\t} catch {\n\t\t\ttoolCall.parsedArguments = void 0;\n\t\t}\n\t\tif (this.isToolCallPartErrored(toolCall.id)) return;\n\t\tif (this.isToolCallPartAwaitingUserAction(toolCall.id)) return;\n\t\tthis.messages = updateToolCallPart(this.messages, messageId, {\n\t\t\tid: toolCall.id,\n\t\t\tname: toolCall.name,\n\t\t\targuments: toolCall.arguments,\n\t\t\tstate: \"input-complete\",\n\t\t\t...strictParseSucceeded && { input: toolCall.parsedArguments },\n\t\t\t...toolCall.metadata !== void 0 && { metadata: toolCall.metadata }\n\t\t});\n\t\tthis.emitMessagesChange();\n\t\tthis.events.onToolCallStateChange?.(messageId, toolCall.id, \"input-complete\", toolCall.arguments);\n\t}\n\tisToolCallPartAwaitingUserAction(toolCallId) {\n\t\treturn this.messages.some((msg) => msg.parts?.some((part) => part.type === \"tool-call\" && part.id === toolCallId && (part.state === \"approval-requested\" || part.state === \"approval-responded\")));\n\t}\n\t/**\n\t* Whether the rendered tool-call part for the given id has reached the\n\t* terminal 'error' state. Used to prevent the completion safety net from\n\t* downgrading a failed call back to 'input-complete'.\n\t*/\n\tisToolCallPartErrored(toolCallId) {\n\t\treturn this.messages.some((msg) => msg.parts?.some((part) => part.type === \"tool-call\" && part.id === toolCallId && part.state === \"error\"));\n\t}\n\t/**\n\t* Emit pending text update for a specific message.\n\t*\n\t* Calls updateTextPart() which has critical append-vs-replace logic:\n\t* - If last UIMessage part is TextPart → replaces its content (same segment).\n\t* - If last part is anything else → pushes new TextPart (new segment after tools).\n\t*\n\t* @see docs/chat-architecture.md#uimessage-part-ordering-invariants — Replace vs. push logic\n\t*/\n\temitTextUpdateForMessage(messageId) {\n\t\tconst state = this.getMessageState(messageId);\n\t\tif (!state) return;\n\t\tstate.lastEmittedText = state.currentSegmentText;\n\t\tthis.messages = updateTextPart(this.messages, messageId, state.currentSegmentText);\n\t\tthis.emitMessagesChange();\n\t\tthis.events.onTextUpdate?.(messageId, state.currentSegmentText);\n\t}\n\tqueueStructuredOutputUpdate(messageId, delta) {\n\t\tconst existing = this.structuredOutputUpdateBatches.get(messageId);\n\t\tconst next = {\n\t\t\tdelta: `${existing?.delta ?? \"\"}${delta}`,\n\t\t\tchunkCount: (existing?.chunkCount ?? 0) + 1\n\t\t};\n\t\tthis.structuredOutputUpdateBatches.set(messageId, next);\n\t\tif (next.chunkCount >= STRUCTURED_OUTPUT_UPDATE_BATCH_SIZE) this.flushStructuredOutputUpdate(messageId);\n\t}\n\tflushStructuredOutputUpdate(messageId) {\n\t\tconst batch = this.structuredOutputUpdateBatches.get(messageId);\n\t\tif (!batch || batch.chunkCount === 0) return;\n\t\tthis.structuredOutputUpdateBatches.delete(messageId);\n\t\tthis.emitStructuredOutputChange(messageId, \"update\", batch.delta);\n\t}\n\temitStructuredOutputChange(messageId, phase, delta) {\n\t\tconst part = this.messages.find((message) => message.id === messageId)?.parts.find((messagePart) => messagePart.type === \"structured-output\");\n\t\tif (!part) return;\n\t\tthis.events.onStructuredOutputChange?.({\n\t\t\tphase,\n\t\t\tmessageId,\n\t\t\tstatus: part.status,\n\t\t\traw: part.raw,\n\t\t\t...part.partial !== void 0 ? { partial: part.partial } : {},\n\t\t\t...part.data !== void 0 ? { data: part.data } : {},\n\t\t\t...part.reasoning !== void 0 ? { reasoning: part.reasoning } : {},\n\t\t\t...part.errorMessage !== void 0 ? { errorMessage: part.errorMessage } : {},\n\t\t\t...delta !== void 0 ? { delta } : {}\n\t\t});\n\t}\n\t/**\n\t* Emit messages change event\n\t*/\n\temitMessagesChange() {\n\t\tthis.events.onMessagesChange?.([...this.messages]);\n\t}\n\t/**\n\t* Finalize the stream — complete all pending operations.\n\t*\n\t* Called when the async iterable ends (stream closed). Acts as the final\n\t* safety net: completes any remaining tool calls, flushes un-emitted text,\n\t* and fires onStreamEnd.\n\t*\n\t* @see docs/chat-architecture.md#single-shot-text-response — Finalization step\n\t*/\n\tfinalizeStream() {\n\t\tthis.isDone = true;\n\t\tlet lastAssistantMessage;\n\t\tfor (const messageId of this.activeMessageIds) {\n\t\t\tconst state = this.getMessageState(messageId);\n\t\t\tif (!state) continue;\n\t\t\tthis.completeAllToolCallsForMessage(messageId);\n\t\t\tif (state.currentSegmentText !== state.lastEmittedText) this.emitTextUpdateForMessage(messageId);\n\t\t\tstate.isComplete = true;\n\t\t\tconst msg = this.messages.find((m) => m.id === messageId);\n\t\t\tif (msg && msg.role === \"assistant\") lastAssistantMessage = msg;\n\t\t}\n\t\tfor (const messageId of this.structuredMessageIds) {\n\t\t\tthis.flushStructuredOutputUpdate(messageId);\n\t\t\tthis.messages = errorStructuredOutputPart(this.messages, messageId, \"Stream ended without structured-output.complete\");\n\t\t\tthis.emitStructuredOutputChange(messageId, \"error\");\n\t\t}\n\t\tthis.structuredMessageIds.clear();\n\t\tthis.structuredOutputUpdateBatches.clear();\n\t\tthis.activeMessageIds.clear();\n\t\tif (lastAssistantMessage && !this.hasError) {\n\t\t\tif (this.isWhitespaceOnlyMessage(lastAssistantMessage)) {\n\t\t\t\tthis.messages = this.messages.filter((m) => m.id !== lastAssistantMessage.id);\n\t\t\t\tthis.emitMessagesChange();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (lastAssistantMessage && !this.streamEndEmitted) {\n\t\t\tthis.streamEndEmitted = true;\n\t\t\tthis.events.onStreamEnd?.(lastAssistantMessage);\n\t\t}\n\t}\n\t/**\n\t* Get completed tool calls in API format (aggregated across all messages)\n\t*/\n\tgetCompletedToolCalls() {\n\t\tconst result = [];\n\t\tfor (const state of this.messageStates.values()) for (const tc of state.toolCalls.values()) if (tc.state === \"input-complete\") result.push({\n\t\t\tid: tc.id,\n\t\t\ttype: \"function\",\n\t\t\tfunction: {\n\t\t\t\tname: tc.name,\n\t\t\t\targuments: tc.arguments\n\t\t\t},\n\t\t\t...tc.metadata !== void 0 && { metadata: tc.metadata }\n\t\t});\n\t\treturn result;\n\t}\n\t/**\n\t* Get current result (aggregated across all messages)\n\t*/\n\tgetResult() {\n\t\tconst toolCalls = this.getCompletedToolCalls();\n\t\tlet content = \"\";\n\t\tlet thinking = \"\";\n\t\tfor (const state of this.messageStates.values()) {\n\t\t\tcontent += state.totalTextContent;\n\t\t\tfor (const stepId of state.thinkingStepOrder) thinking += state.thinkingSteps.get(stepId) ?? \"\";\n\t\t}\n\t\treturn {\n\t\t\tcontent,\n\t\t\tthinking: thinking || void 0,\n\t\t\ttoolCalls: toolCalls.length > 0 ? toolCalls : void 0,\n\t\t\tfinishReason: this.finishReason\n\t\t};\n\t}\n\t/**\n\t* Get current processor state (aggregated across all messages)\n\t*/\n\tgetState() {\n\t\tlet content = \"\";\n\t\tlet thinking = \"\";\n\t\tconst toolCalls = /* @__PURE__ */ new Map();\n\t\tconst toolCallOrder = [];\n\t\tfor (const state of this.messageStates.values()) {\n\t\t\tcontent += state.totalTextContent;\n\t\t\tfor (const stepId of state.thinkingStepOrder) thinking += state.thinkingSteps.get(stepId) ?? \"\";\n\t\t\tfor (const [id, tc] of state.toolCalls) toolCalls.set(id, tc);\n\t\t\ttoolCallOrder.push(...state.toolCallOrder);\n\t\t}\n\t\treturn {\n\t\t\tcontent,\n\t\t\tthinking,\n\t\t\ttoolCalls,\n\t\t\ttoolCallOrder,\n\t\t\tfinishReason: this.finishReason,\n\t\t\tdone: this.isDone\n\t\t};\n\t}\n\t/**\n\t* Start recording chunks\n\t*/\n\tstartRecording() {\n\t\tthis.recordingEnabled = true;\n\t\tthis.recordingStartTime = Date.now();\n\t\tthis.recording = {\n\t\t\tversion: \"1.0\",\n\t\t\ttimestamp: this.recordingStartTime,\n\t\t\tchunks: []\n\t\t};\n\t}\n\t/**\n\t* Get the current recording\n\t*/\n\tgetRecording() {\n\t\treturn this.recording;\n\t}\n\t/**\n\t* Reset stream state (but keep messages)\n\t*/\n\tresetStreamState() {\n\t\tthis.messageStates.clear();\n\t\tthis.activeMessageIds.clear();\n\t\tthis.activeRuns.clear();\n\t\tthis.toolCallToMessage.clear();\n\t\tthis.structuredMessageIds.clear();\n\t\tthis.structuredOutputUpdateBatches.clear();\n\t\tthis.pendingManualMessageId = null;\n\t\tthis.pendingThinkingStepId = null;\n\t\tthis.finishReason = null;\n\t\tthis.hasError = false;\n\t\tthis.isDone = false;\n\t\tthis.streamEndEmitted = false;\n\t\tthis.chunkStrategy.reset?.();\n\t}\n\t/**\n\t* Full reset (including messages)\n\t*/\n\treset() {\n\t\tthis.resetStreamState();\n\t\tthis.messages = [];\n\t}\n\t/**\n\t* Check if a message contains only whitespace text and no other meaningful parts\n\t* (no tool calls, tool results, thinking, etc.)\n\t*/\n\tisWhitespaceOnlyMessage(message) {\n\t\tif (message.parts.length === 0) return false;\n\t\treturn message.parts.every((part) => part.type === \"text\" && part.content.trim() === \"\");\n\t}\n\t/**\n\t* Replay a recording through the processor\n\t*/\n\tstatic async replay(recording, options) {\n\t\treturn new StreamProcessor(options).process(createReplayStream(recording));\n\t}\n};\n/**\n* Create an async iterable from a recording\n*/\nfunction createReplayStream(recording) {\n\treturn { async *[Symbol.asyncIterator]() {\n\t\tfor (const { chunk } of recording.chunks) yield chunk;\n\t} };\n}\n//#endregion\nexport { StreamProcessor, createReplayStream };\n\n//# sourceMappingURL=processor.js.map","import { fromSpecTokenUsage, toSpecTokenUsage } from \"./utilities/ag-ui-usage.js\";\nimport { mergeMetadata, tanstackMetadata, withTanstackMetadata } from \"./utilities/merge-metadata.js\";\nimport { normalizeStreamChunk } from \"./utilities/normalize-stream-chunk.js\";\nimport { canonicalInterruptJson, cloneAndDeepFreezeJson, digestInterruptJson } from \"./interrupt-serialization.js\";\nimport { INTERRUPT_BINDING_VERSION, canonicalizeInterruptResolutions } from \"./interrupts.js\";\nimport { convertSchemaToJsonSchema, isStandardSchema, parseWithStandardSchema, validateWithStandardSchema } from \"./activities/chat/tools/schema-converter.js\";\nimport { hashSchemaInput, normalizeApprovalSchema } from \"./activities/chat/tools/approval-schema.js\";\nimport { INTERRUPT_BINDING_METADATA_KEY, readInterruptBinding, readUnopenedInterruptBinding, withInterruptBinding, withoutInterruptBinding } from \"./interrupt-resume.js\";\nimport { INTERRUPT_PAYLOAD_METADATA_KEY, defineInterrupt, hashInterruptDefinitionSchema } from \"./interrupt-definition.js\";\nimport { INTERRUPT_CONTINUATION_METADATA_KEY, INTERRUPT_CONTINUATION_VERSION, genericInterruptContinuationFromDescriptor, readGenericInterruptContinuation, wrapGenericInterruptContinuation } from \"./generic-interrupt-continuation.js\";\nimport { convertMessagesToModelMessages, generateMessageId, modelMessageToUIMessage, modelMessagesToUIMessages, normalizeToUIMessage, uiMessageToModelMessages } from \"./activities/chat/messages.js\";\nimport { uiMessagesToWire } from \"./utilities/ag-ui-wire.js\";\nimport { restoreInboundChunk } from \"./utilities/restore-inbound-chunk.js\";\nimport { toolDefinition } from \"./activities/chat/tools/tool-definition.js\";\nimport { getChunkRunId, getChunkThreadId } from \"./utilities/chunk-ids.js\";\nimport { PartialJSONParser, defaultJSONParser, parsePartialJSON } from \"./activities/chat/stream/json-parser.js\";\nimport { BatchStrategy, CompositeStrategy, ImmediateStrategy, PunctuationStrategy, WordBoundaryStrategy } from \"./activities/chat/stream/strategies.js\";\nimport { StreamProcessor } from \"./activities/chat/stream/processor.js\";\n//#region src/client.ts\nvar generationKinds = [\n\t\"image\",\n\t\"audio\",\n\t\"tts\",\n\t\"video\",\n\t\"transcription\"\n];\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction hasOwnKey(value, key) {\n\treturn Object.prototype.hasOwnProperty.call(value, key);\n}\nfunction isGenerationEnvelope(body) {\n\treturn isRecord(body) && (hasOwnKey(body, \"data\") || hasOwnKey(body, \"forwardedProps\"));\n}\nfunction assertGenerationKind(kind) {\n\tif (!generationKinds.includes(kind)) throw new Error(`Unsupported generation kind: ${String(kind)}. Expected one of ${generationKinds.join(\", \")}.`);\n}\nfunction assertInputForKind(kind, input) {\n\tif (!isRecord(input)) throw new Error(`Generation ${kind} input must be an object.`);\n\tconst requiredKey = kind === \"tts\" ? \"text\" : kind === \"transcription\" ? \"audio\" : \"prompt\";\n\tif (!hasOwnKey(input, requiredKey)) throw new Error(`Generation ${kind} input must include ${requiredKey}.`);\n}\nfunction isInputForKind(kind, input) {\n\tif (!isRecord(input)) return false;\n\treturn hasOwnKey(input, kind === \"tts\" ? \"text\" : kind === \"transcription\" ? \"audio\" : \"prompt\");\n}\nfunction forwardedPropsFromEnvelope(envelope) {\n\tif (!hasOwnKey(envelope, \"forwardedProps\")) return {};\n\tif (!isRecord(envelope.forwardedProps)) throw new Error(\"Generation envelope forwardedProps must be an object.\");\n\treturn envelope.forwardedProps;\n}\nfunction optionalStringField(envelope, key) {\n\tif (!hasOwnKey(envelope, key)) return;\n\tconst value = envelope[key];\n\tif (typeof value !== \"string\") throw new Error(`Generation envelope ${key} must be a string.`);\n\treturn value;\n}\nfunction generationIdentityFields(envelope) {\n\tconst identity = {};\n\tconst threadId = optionalStringField(envelope, \"threadId\");\n\tconst runId = optionalStringField(envelope, \"runId\");\n\tif (threadId !== void 0) identity.threadId = threadId;\n\tif (runId !== void 0) identity.runId = runId;\n\treturn identity;\n}\nfunction generationParamsFromBody(kind, body) {\n\tassertGenerationKind(kind);\n\tif (isInputForKind(kind, body)) {\n\t\tassertInputForKind(kind, body);\n\t\treturn {\n\t\t\tinput: body,\n\t\t\tforwardedProps: {}\n\t\t};\n\t}\n\tif (!isGenerationEnvelope(body)) {\n\t\tassertInputForKind(kind, body);\n\t\treturn {\n\t\t\tinput: body,\n\t\t\tforwardedProps: {}\n\t\t};\n\t}\n\tif (!hasOwnKey(body, \"data\")) throw new Error(`Generation ${kind} envelope must include data.`);\n\tconst input = body.data;\n\tassertInputForKind(kind, input);\n\treturn {\n\t\tinput,\n\t\tforwardedProps: forwardedPropsFromEnvelope(body),\n\t\t...generationIdentityFields(body)\n\t};\n}\nasync function generationParamsFromRequest(kind, request) {\n\tlet body;\n\ttry {\n\t\tbody = await request.json();\n\t} catch (error) {\n\t\tthrow new Error(\"Invalid JSON request body.\", { cause: error });\n\t}\n\tif (!isRecord(body)) throw new Error(\"Generation request body must be a JSON object.\");\n\treturn generationParamsFromBody(kind, body);\n}\nvar EventType = /* @__PURE__ */ function(EventType) {\n\tEventType[\"TEXT_MESSAGE_START\"] = \"TEXT_MESSAGE_START\";\n\tEventType[\"TEXT_MESSAGE_CONTENT\"] = \"TEXT_MESSAGE_CONTENT\";\n\tEventType[\"TEXT_MESSAGE_END\"] = \"TEXT_MESSAGE_END\";\n\tEventType[\"TEXT_MESSAGE_CHUNK\"] = \"TEXT_MESSAGE_CHUNK\";\n\tEventType[\"TOOL_CALL_START\"] = \"TOOL_CALL_START\";\n\tEventType[\"TOOL_CALL_ARGS\"] = \"TOOL_CALL_ARGS\";\n\tEventType[\"TOOL_CALL_END\"] = \"TOOL_CALL_END\";\n\tEventType[\"TOOL_CALL_CHUNK\"] = \"TOOL_CALL_CHUNK\";\n\tEventType[\"TOOL_CALL_RESULT\"] = \"TOOL_CALL_RESULT\";\n\tEventType[\"THINKING_START\"] = \"THINKING_START\";\n\tEventType[\"THINKING_END\"] = \"THINKING_END\";\n\tEventType[\"THINKING_TEXT_MESSAGE_START\"] = \"THINKING_TEXT_MESSAGE_START\";\n\tEventType[\"THINKING_TEXT_MESSAGE_CONTENT\"] = \"THINKING_TEXT_MESSAGE_CONTENT\";\n\tEventType[\"THINKING_TEXT_MESSAGE_END\"] = \"THINKING_TEXT_MESSAGE_END\";\n\tEventType[\"STATE_SNAPSHOT\"] = \"STATE_SNAPSHOT\";\n\tEventType[\"STATE_DELTA\"] = \"STATE_DELTA\";\n\tEventType[\"MESSAGES_SNAPSHOT\"] = \"MESSAGES_SNAPSHOT\";\n\tEventType[\"ACTIVITY_SNAPSHOT\"] = \"ACTIVITY_SNAPSHOT\";\n\tEventType[\"ACTIVITY_DELTA\"] = \"ACTIVITY_DELTA\";\n\tEventType[\"RAW\"] = \"RAW\";\n\tEventType[\"CUSTOM\"] = \"CUSTOM\";\n\tEventType[\"RUN_STARTED\"] = \"RUN_STARTED\";\n\tEventType[\"RUN_FINISHED\"] = \"RUN_FINISHED\";\n\tEventType[\"RUN_ERROR\"] = \"RUN_ERROR\";\n\tEventType[\"STEP_STARTED\"] = \"STEP_STARTED\";\n\tEventType[\"STEP_FINISHED\"] = \"STEP_FINISHED\";\n\tEventType[\"REASONING_START\"] = \"REASONING_START\";\n\tEventType[\"REASONING_MESSAGE_START\"] = \"REASONING_MESSAGE_START\";\n\tEventType[\"REASONING_MESSAGE_CONTENT\"] = \"REASONING_MESSAGE_CONTENT\";\n\tEventType[\"REASONING_MESSAGE_END\"] = \"REASONING_MESSAGE_END\";\n\tEventType[\"REASONING_MESSAGE_CHUNK\"] = \"REASONING_MESSAGE_CHUNK\";\n\tEventType[\"REASONING_END\"] = \"REASONING_END\";\n\tEventType[\"REASONING_ENCRYPTED_VALUE\"] = \"REASONING_ENCRYPTED_VALUE\";\n\treturn EventType;\n}({});\n//#endregion\nexport { BatchStrategy, CompositeStrategy, EventType, INTERRUPT_BINDING_METADATA_KEY, INTERRUPT_BINDING_VERSION, INTERRUPT_CONTINUATION_METADATA_KEY, INTERRUPT_CONTINUATION_VERSION, INTERRUPT_PAYLOAD_METADATA_KEY, ImmediateStrategy, PartialJSONParser, PunctuationStrategy, StreamProcessor, WordBoundaryStrategy, canonicalInterruptJson, canonicalizeInterruptResolutions, cloneAndDeepFreezeJson, convertMessagesToModelMessages, convertSchemaToJsonSchema, defaultJSONParser, defineInterrupt, digestInterruptJson, fromSpecTokenUsage, generateMessageId, generationParamsFromBody, generationParamsFromRequest, genericInterruptContinuationFromDescriptor, getChunkRunId, getChunkThreadId, hashInterruptDefinitionSchema, hashSchemaInput, isStandardSchema, mergeMetadata, modelMessageToUIMessage, modelMessagesToUIMessages, normalizeApprovalSchema, normalizeStreamChunk, normalizeToUIMessage, parsePartialJSON, parseWithStandardSchema, readGenericInterruptContinuation, readInterruptBinding, readUnopenedInterruptBinding, restoreInboundChunk, tanstackMetadata, toSpecTokenUsage, toolDefinition, uiMessageToModelMessages, uiMessagesToWire, validateWithStandardSchema, withInterruptBinding, withTanstackMetadata, withoutInterruptBinding, wrapGenericInterruptContinuation };\n\n//# sourceMappingURL=client.js.map","import { createResponseStreamTextDecoder, getResponseStreamReader } from \"./response-stream.js\";\nimport { parseSseDataLine } from \"./sse-utils.js\";\nimport { normalizeMessagesDates } from \"./message-date-normalizer.js\";\nimport { EventType, getChunkRunId, restoreInboundChunk, tanstackMetadata, uiMessagesToWire, withTanstackMetadata } from \"@tanstack/ai/client\";\nimport { ByokMissingError, isByokMissingBody } from \"@tanstack/ai/byok\";\n//#region src/connection-adapters.ts\n/**\n* Associates connect-wrapped chunks with the run they were produced under.\n* Content events (TEXT_MESSAGE_CONTENT, TOOL_CALL_*, …) carry no `runId` of\n* their own, so the connect wrapper stamps the caller's run id here. Lets\n* run-scoped consumers (e.g. clear-during-stream suppression) attribute those\n* otherwise-runless chunks to their originating request.\n*/\nvar chunkRunIds = /* @__PURE__ */ new WeakMap();\n/**\n* Resolve a chunk's run id, preferring the value on the chunk itself\n* (RUN_STARTED / RUN_FINISHED / RUN_ERROR carry one) and falling back to the\n* run the connect wrapper stamped it with.\n*/\nfunction getChunkRunId$1(chunk) {\n\treturn chunkRunIds.get(chunk) ?? getChunkRunId(chunk);\n}\n/**\n* Thrown when an SSE/HTTP stream ends with a non-empty unterminated buffer.\n* Indicates the connection was cut mid-line (server crash, dropped TCP, proxy\n* timeout) so the partial content cannot be safely parsed.\n*/\nvar StreamTruncatedError = class extends Error {\n\tconstructor() {\n\t\tsuper(\"Stream ended with unterminated trailing data — connection was likely cut short.\");\n\t\tthis.name = \"StreamTruncatedError\";\n\t}\n};\nvar StreamReadError = class extends Error {\n\tconstructor(cause) {\n\t\tsuper(\"Stream response body read failed\", { cause });\n\t\tthis.name = \"StreamReadError\";\n\t}\n};\n/**\n* Thrown when a durable (id-tagged) run's stream ends with no terminal event\n* and a reconnect makes no forward progress — the run cannot complete, so the\n* consumer must not be left silently hanging on a stream that just stops.\n*/\nvar DurableStreamIncompleteError = class extends Error {\n\tconstructor() {\n\t\tsuper(\"Durable run ended without a terminal event and could not resume — the run did not complete.\");\n\t\tthis.name = \"DurableStreamIncompleteError\";\n\t}\n};\n/**\n* Thrown when a durable run exceeds its reconnect ceiling. Bounds the\n* otherwise-unbounded reconnect loop so a flapping producer (or a proxy that\n* rolls the socket after every event) surfaces a failure instead of\n* reconnecting without end.\n*/\nvar StreamReconnectLimitError = class extends Error {\n\tconstructor(attempts) {\n\t\tsuper(`Durable run exceeded its reconnect ceiling of ${attempts} attempts — giving up.`);\n\t\tthis.name = \"StreamReconnectLimitError\";\n\t}\n};\nfunction resolveReconnectOptions(options) {\n\tconst maxAttempts = options?.maxAttempts ?? 5;\n\tconst delayMs = options?.delayMs ?? 250;\n\tif (!Number.isInteger(maxAttempts) || maxAttempts < 0) throw new Error(`Invalid reconnect.maxAttempts: ${maxAttempts}. Must be a non-negative integer.`);\n\tif (!Number.isFinite(delayMs) || delayMs < 0) throw new Error(`Invalid reconnect.delayMs: ${delayMs}. Must be a non-negative finite number.`);\n\treturn {\n\t\tmaxAttempts,\n\t\tdelayMs\n\t};\n}\n/** Create a {@link ReconnectTracker} bound to the given reconnect bounds. */\nfunction createReconnectTracker(options) {\n\tconst reconnect = resolveReconnectOptions(options);\n\tconst seen = /* @__PURE__ */ new Set();\n\tlet lastEventId;\n\tlet reconnectAttempts = 0;\n\treturn {\n\t\tget lastEventId() {\n\t\t\treturn lastEventId;\n\t\t},\n\t\tnote(id) {\n\t\t\tif (id === void 0) return \"new\";\n\t\t\tif (id === \"\") {\n\t\t\t\tlastEventId = void 0;\n\t\t\t\tseen.clear();\n\t\t\t\treturn \"reset\";\n\t\t\t}\n\t\t\tif (seen.has(id)) return \"duplicate\";\n\t\t\tseen.add(id);\n\t\t\tlastEventId = id;\n\t\t\treturn \"new\";\n\t\t},\n\t\tasync waitBeforeReconnect(madeProgress, signal) {\n\t\t\tif (madeProgress) reconnectAttempts = 0;\n\t\t\telse {\n\t\t\t\treconnectAttempts += 1;\n\t\t\t\tif (reconnectAttempts > reconnect.maxAttempts) throw new StreamReconnectLimitError(reconnect.maxAttempts);\n\t\t\t}\n\t\t\tawait abortableDelay(reconnect.delayMs, signal);\n\t\t}\n\t};\n}\n/** Resolve after `ms`, or immediately once `signal` aborts. Never rejects. */\nfunction abortableDelay(ms, signal) {\n\tif (ms <= 0 || signal?.aborted) return Promise.resolve();\n\treturn new Promise((resolve) => {\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tresolve();\n\t\t};\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\nfunction generateRunId(prefix) {\n\treturn `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n/**\n* Asserts an id is present when synthesizing a terminal event. The chat\n* client always supplies `runContext.threadId` / `runContext.runId`, so an\n* absent id at this layer indicates the adapter was wired up by a caller\n* that bypassed that contract — surface it rather than fabricating one.\n*/\nfunction requireSyntheticId(value, field) {\n\tif (!value) throw new Error(`Cannot synthesize terminal event: ${field} not supplied via runContext and not observed in the upstream stream.`);\n\treturn value;\n}\n/**\n* Merge custom headers into request headers\n*/\nfunction mergeHeaders(customHeaders) {\n\tif (!customHeaders) return {};\n\tif (customHeaders instanceof Headers) {\n\t\tconst result = {};\n\t\tcustomHeaders.forEach((value, key) => {\n\t\t\tresult[key] = value;\n\t\t});\n\t\treturn result;\n\t}\n\treturn customHeaders;\n}\n/**\n* Request header carrying the client-chosen run id to a delivery-durability\n* sink. The durable log is then keyed by the SAME id the client already holds,\n* so a later join/resume can address the run without first reading back a\n* server-generated id. Sent as a header — NOT a query param — so the POST URL\n* stays byte-identical to a plain, non-durable request; a server that isn't\n* durable simply ignores the header. (The GET join path keeps `?runId` in the\n* query, since a GET has no body/handler contract to disturb.)\n*/\nvar RUN_ID_HEADER = \"X-Run-Id\";\nfunction runIdHeader(runId) {\n\treturn runId === void 0 ? {} : { [RUN_ID_HEADER]: runId };\n}\nfunction withSearchParams(url, values) {\n\tconst hashIndex = url.indexOf(\"#\");\n\tconst hash = hashIndex === -1 ? \"\" : url.slice(hashIndex);\n\tconst withoutHash = hashIndex === -1 ? url : url.slice(0, hashIndex);\n\tconst queryIndex = withoutHash.indexOf(\"?\");\n\tconst base = queryIndex === -1 ? withoutHash : withoutHash.slice(0, queryIndex);\n\tconst search = new URLSearchParams(queryIndex === -1 ? \"\" : withoutHash.slice(queryIndex + 1));\n\tfor (const [key, value] of Object.entries(values)) search.set(key, value);\n\tconst query = search.toString();\n\treturn `${base}${query.length === 0 ? \"\" : `?${query}`}${hash}`;\n}\n/**\n* Read lines from a stream (newline-delimited)\n*/\nasync function* readStreamLines(reader, abortSignal) {\n\ttry {\n\t\tconst decoder = createResponseStreamTextDecoder();\n\t\tlet buffer = \"\";\n\t\twhile (!abortSignal?.aborted) {\n\t\t\tlet result;\n\t\t\ttry {\n\t\t\t\tresult = await reader.read();\n\t\t\t} catch (error) {\n\t\t\t\tif (abortSignal?.aborted) return;\n\t\t\t\tthrow new StreamReadError(error);\n\t\t\t}\n\t\t\tconst { done, value } = result;\n\t\t\tif (done) break;\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\tbuffer = lines.pop() || \"\";\n\t\t\tfor (const line of lines) {\n\t\t\t\tconst normalized = line.endsWith(\"\\r\") ? line.slice(0, -1) : line;\n\t\t\t\tif (normalized.trim()) yield normalized;\n\t\t\t}\n\t\t}\n\t\tbuffer += decoder.decode();\n\t\tif (buffer.trim() && !abortSignal?.aborted) throw new StreamTruncatedError();\n\t} finally {\n\t\treader.releaseLock();\n\t}\n}\n/**\n* Type guard for a durable NDJSON envelope `{ id, chunk }`. NDJSON has no\n* native event-id field, so durability rides the offset inside the payload.\n* A bare `StreamChunk` always has a top-level `type`, and the envelope never\n* does, so the two forms are unambiguous — a non-durable line stays bare.\n*/\nfunction isNdjsonEnvelope(value) {\n\treturn typeof value === \"object\" && value !== null && \"chunk\" in value && \"id\" in value && typeof value.id === \"string\" && !(\"type\" in value);\n}\n/** Rebuild pre-wire extras after SSE/NDJSON ingest. */\nfunction restoreInboundUsage(chunk) {\n\treturn restoreInboundChunk(chunk);\n}\nfunction sseChunkModel(chunk) {\n\tconst tanstackModel = tanstackMetadata(chunk)?.model;\n\tif (typeof tanstackModel === \"string\") return tanstackModel;\n\tconst usage = \"usage\" in chunk ? chunk.usage : void 0;\n\tif (Array.isArray(usage)) {\n\t\tconst model = usage[0]?.model;\n\t\tif (typeof model === \"string\") return model;\n\t}\n}\n/**\n* Parse SSE-format lines into stream events, pairing each chunk with the `id:`\n* offset of the event it arrived on. Shared by the fetch- and XHR-backed SSE\n* adapters so both track delivery offsets identically.\n*\n* Accepts either `data: {...}` lines or bare JSON lines. Skips comments\n* starting with `:` (proxies and CDNs inject these as keepalives) and the\n* `event:` / `retry:` SSE control fields. A `[DONE]` sentinel is treated as a\n* terminal event: a synthesized RUN_FINISHED is yielded using the most recent\n* upstream `threadId` / `runId` (falling back to `fallbackIds`), so the\n* consumer sees a clean terminal event with real correlation ids.\n*\n* A JSON parse failure throws — the consumer surfaces it as an error.\n*/\nasync function* linesToSSEEvents(lines, fallbackIds) {\n\tlet lastThreadId;\n\tlet lastRunId;\n\tlet lastModel;\n\tlet pendingId;\n\tfor await (const line of lines) {\n\t\tif (line === \"id\" || line.startsWith(\"id:\")) {\n\t\t\tconst rawId = line === \"id\" ? \"\" : line.slice(3);\n\t\t\tpendingId = rawId.startsWith(\" \") ? rawId.slice(1) : rawId;\n\t\t\tcontinue;\n\t\t}\n\t\tif (line.startsWith(\":\") || line.startsWith(\"event:\") || line.startsWith(\"retry:\")) continue;\n\t\tconst data = parseSseDataLine(line);\n\t\tif (data === \"[DONE]\") {\n\t\t\tyield { chunk: withTanstackMetadata({\n\t\t\t\ttype: EventType.RUN_FINISHED,\n\t\t\t\tthreadId: lastThreadId ?? fallbackIds?.threadId ?? \"\",\n\t\t\t\trunId: lastRunId ?? fallbackIds?.runId ?? \"\",\n\t\t\t\ttimestamp: Date.now()\n\t\t\t}, {\n\t\t\t\tfinishReason: \"stop\",\n\t\t\t\t...lastModel !== void 0 ? { model: lastModel } : {}\n\t\t\t}) };\n\t\t\treturn;\n\t\t}\n\t\tconst chunk = restoreInboundUsage(JSON.parse(data));\n\t\tif (\"threadId\" in chunk && typeof chunk.threadId === \"string\") lastThreadId = chunk.threadId;\n\t\tif (\"runId\" in chunk && typeof chunk.runId === \"string\") lastRunId = chunk.runId;\n\t\tconst model = sseChunkModel(chunk);\n\t\tif (model !== void 0) lastModel = model;\n\t\tconst id = pendingId;\n\t\tpendingId = void 0;\n\t\tyield {\n\t\t\tchunk,\n\t\t\t...id !== void 0 ? { id } : {}\n\t\t};\n\t}\n}\n/**\n* Parse NDJSON-format lines into stream events. Durable streams emit each line\n* as an `{ id, chunk }` envelope carrying the delivery offset; non-durable\n* streams emit bare chunks. Both are auto-detected (see {@link isNdjsonEnvelope}),\n* so an untagged stream behaves exactly as a plain single fetch used to.\n*/\nasync function* linesToNdjsonEvents(lines) {\n\tfor await (const line of lines) {\n\t\tconst parsed = JSON.parse(line);\n\t\tif (isNdjsonEnvelope(parsed)) yield {\n\t\t\tchunk: restoreInboundUsage(parsed.chunk),\n\t\t\tid: parsed.id\n\t\t};\n\t\telse yield { chunk: restoreInboundUsage(parsed) };\n\t}\n}\nasync function assertResponseOk(response) {\n\tif (response.ok) return;\n\tif (response.status === 401) {\n\t\tconst body = await response.clone().json().catch(() => null);\n\t\tif (isByokMissingBody(body)) throw new ByokMissingError(body.error.provider);\n\t}\n\tthrow new Error(`HTTP error! status: ${response.status} ${response.statusText}`);\n}\nfunction errorFromXhrStatus(xhr) {\n\tif (xhr.status === 401) {\n\t\tlet parsed = null;\n\t\ttry {\n\t\t\tparsed = JSON.parse(xhr.responseText);\n\t\t} catch {\n\t\t\tparsed = null;\n\t\t}\n\t\tif (isByokMissingBody(parsed)) return new ByokMissingError(parsed.error.provider);\n\t}\n\treturn /* @__PURE__ */ new Error(`XHR error! status: ${xhr.status} ${xhr.statusText}`);\n}\n/**\n* GET the hydration endpoint for a thread and parse its JSON `{ messages,\n* activeRun }` body. This is the transport-agnostic reconnect probe: keyed on\n* the STABLE thread id, it returns the stored transcript and — if a run is still\n* generating — a cursor the caller tails via `joinRun`. Shared by every fetch/\n* XHR adapter so the client never has to know which transport is in use.\n*/\nasync function fetchThreadHydration(fetchClient, url, headers, credentials, threadId) {\n\tconst response = await fetchClient(withSearchParams(url, { threadId }), {\n\t\tmethod: \"GET\",\n\t\theaders: {\n\t\t\tAccept: \"application/json\",\n\t\t\t...headers\n\t\t},\n\t\tcredentials\n\t});\n\tawait assertResponseOk(response);\n\tconst data = await response.json();\n\tconst activeRun = data.activeRun && typeof data.activeRun.runId === \"string\" ? { runId: data.activeRun.runId } : null;\n\tconst interrupts = data.interrupts && typeof data.interrupts.runId === \"string\" && Array.isArray(data.interrupts.pending) && data.interrupts.pending.length > 0 ? {\n\t\trunId: data.interrupts.runId,\n\t\tpending: data.interrupts.pending\n\t} : null;\n\treturn {\n\t\tmessages: Array.isArray(data.messages) ? normalizeMessagesDates(data.messages) : [],\n\t\tactiveRun,\n\t\tinterrupts\n\t};\n}\n/**\n* GET the hydration endpoint for a generation thread and parse its JSON\n* `{ resumeSnapshot, activeRun }` body. Mirrors {@link fetchThreadHydration} for\n* the generation clients: keyed on the stable thread id, it returns the last\n* generation's resume snapshot (re-validated client-side before adoption) and —\n* if a run is still generating — a cursor. Shared by every fetch/XHR adapter.\n*/\nasync function fetchGenerationHydration(fetchClient, url, headers, credentials, threadId) {\n\tconst response = await fetchClient(withSearchParams(url, { threadId }), {\n\t\tmethod: \"GET\",\n\t\theaders: {\n\t\t\tAccept: \"application/json\",\n\t\t\t...headers\n\t\t},\n\t\tcredentials\n\t});\n\tawait assertResponseOk(response);\n\tconst raw = await response.json();\n\tif (raw === null) return {\n\t\tresumeSnapshot: null,\n\t\tactiveRun: null\n\t};\n\tif (typeof raw !== \"object\" || Array.isArray(raw)) throw new Error(`Generation hydration expected a JSON object from ${url}, received ${Array.isArray(raw) ? \"an array\" : typeof raw}.`);\n\tconst data = raw;\n\tconst activeRun = data.activeRun && typeof data.activeRun.runId === \"string\" ? { runId: data.activeRun.runId } : null;\n\treturn {\n\t\tresumeSnapshot: data.resumeSnapshot ?? null,\n\t\tactiveRun\n\t};\n}\n/** Yield SSE stream events (chunk + offset) from a fetch Response body. */\nasync function* responseToSSEEvents(response, abortSignal, fallbackIds) {\n\tawait assertResponseOk(response);\n\tyield* linesToSSEEvents(readStreamLines(getResponseStreamReader(response), abortSignal), fallbackIds);\n}\n/** Yield NDJSON stream events (chunk + offset) from a fetch Response body. */\nasync function* responseToNdjsonEvents(response, abortSignal) {\n\tawait assertResponseOk(response);\n\tyield* linesToNdjsonEvents(readStreamLines(getResponseStreamReader(response), abortSignal));\n}\nasync function* responseToSSEChunks(response, abortSignal) {\n\tfor await (const { chunk } of responseToSSEEvents(response, abortSignal)) yield chunk;\n}\n/**\n* Build a fetch-backed {@link StreamEventSource}. `parseResponse` decodes the\n* body into events (SSE or NDJSON) — the reconnect engine is identical for both.\n*/\nfunction fetchEventSource(fetchClient, url, requestInit, parseResponse) {\n\treturn async function* (extraHeaders, abortSignal) {\n\t\tlet response;\n\t\ttry {\n\t\t\tresponse = await fetchClient(url, {\n\t\t\t\t...requestInit,\n\t\t\t\theaders: {\n\t\t\t\t\t...requestInit.headers,\n\t\t\t\t\t...extraHeaders\n\t\t\t\t},\n\t\t\t\t...abortSignal ? { signal: abortSignal } : {}\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow new StreamReadError(error);\n\t\t}\n\t\tyield* parseResponse(response, abortSignal);\n\t};\n}\n/**\n* Drive a {@link StreamEventSource} with native-style resumability. Each event's\n* adapter-owned delivery offset (its `id`) is remembered; if the connection\n* drops or ends before a terminal event, the source is re-opened with a\n* `Last-Event-ID` header so the server replays strictly after the last offset.\n* Already-seen offsets are de-duped, so an overlapping replay is safe.\n*\n* When the server does NOT tag events (no durability), no offset is ever seen,\n* so no reconnect happens — behaviour is identical to a plain single request.\n* This engine is transport-agnostic: fetch/XHR × SSE/NDJSON all share it, the\n* only difference being the {@link StreamEventSource} they pass in.\n*/\nasync function* resumableStream(openEventSource, abortSignal, reconnectOptions) {\n\tconst tracker = createReconnectTracker(reconnectOptions);\n\tfor (;;) {\n\t\tif (abortSignal?.aborted) return;\n\t\tconst extraHeaders = tracker.lastEventId !== void 0 ? { \"Last-Event-ID\": tracker.lastEventId } : {};\n\t\tlet sawTerminal = false;\n\t\tlet progressed = false;\n\t\ttry {\n\t\t\tfor await (const { chunk, id } of openEventSource(extraHeaders, abortSignal)) {\n\t\t\t\tif (tracker.note(id) === \"duplicate\") continue;\n\t\t\t\tprogressed = true;\n\t\t\t\tif (chunk.type === \"RUN_FINISHED\" || chunk.type === \"RUN_ERROR\") sawTerminal = true;\n\t\t\t\tyield chunk;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (abortSignal?.aborted) return;\n\t\t\tif ((error instanceof StreamTruncatedError || error instanceof StreamReadError) && tracker.lastEventId !== void 0) {\n\t\t\t\tawait tracker.waitBeforeReconnect(progressed, abortSignal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tif (abortSignal?.aborted) return;\n\t\tif (sawTerminal) return;\n\t\tif (tracker.lastEventId !== void 0) {\n\t\t\tif (progressed) {\n\t\t\t\tawait tracker.waitBeforeReconnect(true, abortSignal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthrow new DurableStreamIncompleteError();\n\t\t}\n\t\treturn;\n\t}\n}\n/**\n* Normalize a ConnectionAdapter to subscribe/send operations.\n*\n* If a connection provides native subscribe/send, that mode is used.\n* Otherwise, connect() is wrapped using an async queue.\n*/\nfunction normalizeConnectionAdapter(connection) {\n\tif (!connection) throw new Error(\"Connection adapter is required\");\n\tconst hasConnect = \"connect\" in connection;\n\tconst hasSubscribe = \"subscribe\" in connection;\n\tconst hasSend = \"send\" in connection;\n\tif (hasConnect && (hasSubscribe || hasSend)) throw new Error(\"Connection adapter must provide either connect or both subscribe and send, not both modes\");\n\tif (hasSubscribe && hasSend) {\n\t\tconst joinRun = connection.joinRun?.bind(connection);\n\t\tconst hydrate = connection.hydrate?.bind(connection);\n\t\treturn {\n\t\t\tsubscribe: connection.subscribe.bind(connection),\n\t\t\tsend: connection.send.bind(connection),\n\t\t\t...joinRun ? { joinRun } : {},\n\t\t\t...hydrate ? { hydrate } : {}\n\t\t};\n\t}\n\tif (!hasConnect) throw new Error(\"Connection adapter must provide either connect or both subscribe and send\");\n\tlet activeBuffer = [];\n\tlet activeWaiters = [];\n\tfunction push(chunk, runId) {\n\t\tif (runId) chunkRunIds.set(chunk, runId);\n\t\tconst waiter = activeWaiters.shift();\n\t\tif (waiter) waiter(chunk);\n\t\telse activeBuffer.push(chunk);\n\t}\n\tasync function waitUntilSubscriberIdle(abortSignal) {\n\t\tconst idle = () => activeBuffer.length === 0 && (activeWaiters.length > 0 || abortSignal?.aborted);\n\t\tfor (let i = 0; i < 16 && !abortSignal?.aborted; i++) {\n\t\t\tif (idle()) return;\n\t\t\tawait Promise.resolve();\n\t\t}\n\t\tlet macrotaskWaits = 0;\n\t\twhile (!abortSignal?.aborted) {\n\t\t\tif (idle()) return;\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, 0));\n\t\t\tmacrotaskWaits++;\n\t\t\tif (activeWaiters.length === 0 && macrotaskWaits >= 32) return;\n\t\t}\n\t}\n\treturn {\n\t\tsubscribe(abortSignal) {\n\t\t\tconst myBuffer = activeBuffer.splice(0);\n\t\t\tconst myWaiters = [];\n\t\t\tactiveBuffer = myBuffer;\n\t\t\tactiveWaiters = myWaiters;\n\t\t\treturn (async function* () {\n\t\t\t\twhile (!abortSignal?.aborted) {\n\t\t\t\t\tlet chunk;\n\t\t\t\t\tconst buffered = myBuffer.shift();\n\t\t\t\t\tif (buffered !== void 0) chunk = buffered;\n\t\t\t\t\telse chunk = await new Promise((resolve) => {\n\t\t\t\t\t\tconst onAbort = () => resolve(null);\n\t\t\t\t\t\tmyWaiters.push((c) => {\n\t\t\t\t\t\t\tabortSignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\t\tresolve(c);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tabortSignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\t\t});\n\t\t\t\t\tif (chunk !== null) yield chunk;\n\t\t\t\t}\n\t\t\t})();\n\t\t},\n\t\tasync send(messages, data, abortSignal, runContext) {\n\t\t\tlet hasTerminalEvent = false;\n\t\t\tlet upstreamThreadId;\n\t\t\tlet upstreamRunId;\n\t\t\ttry {\n\t\t\t\tconst stream = connection.connect(messages, data, abortSignal, runContext);\n\t\t\t\tfor await (const chunk of stream) {\n\t\t\t\t\tif (\"threadId\" in chunk && typeof chunk.threadId === \"string\") upstreamThreadId = chunk.threadId;\n\t\t\t\t\tif (\"runId\" in chunk && typeof chunk.runId === \"string\") upstreamRunId = chunk.runId;\n\t\t\t\t\tif (chunk.type === \"RUN_FINISHED\" || chunk.type === \"RUN_ERROR\") hasTerminalEvent = true;\n\t\t\t\t\tpush(chunk, runContext?.runId);\n\t\t\t\t}\n\t\t\t\tif (!abortSignal?.aborted && !hasTerminalEvent) push(withTanstackMetadata({\n\t\t\t\t\ttype: EventType.RUN_FINISHED,\n\t\t\t\t\tthreadId: requireSyntheticId(upstreamThreadId ?? runContext?.threadId, \"threadId\"),\n\t\t\t\t\trunId: requireSyntheticId(upstreamRunId ?? runContext?.runId, \"runId\"),\n\t\t\t\t\ttimestamp: Date.now()\n\t\t\t\t}, {\n\t\t\t\t\tfinishReason: \"stop\",\n\t\t\t\t\tmodel: \"connect-wrapper\"\n\t\t\t\t}), runContext?.runId);\n\t\t\t} catch (err) {\n\t\t\t\tif (!abortSignal?.aborted && !hasTerminalEvent) try {\n\t\t\t\t\tconst message = err instanceof Error ? err.message : \"Unknown error in connect()\";\n\t\t\t\t\tpush({\n\t\t\t\t\t\ttype: EventType.RUN_ERROR,\n\t\t\t\t\t\tthreadId: requireSyntheticId(upstreamThreadId ?? runContext?.threadId, \"threadId\"),\n\t\t\t\t\t\trunId: requireSyntheticId(upstreamRunId ?? runContext?.runId, \"runId\"),\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\tmessage\n\t\t\t\t\t}, runContext?.runId);\n\t\t\t\t} catch {}\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tawait waitUntilSubscriberIdle(abortSignal);\n\t\t},\n\t\t...typeof connection.joinRun === \"function\" ? { joinRun: (runId, abortSignal) => connection.joinRun(runId, abortSignal) } : {},\n\t\t...(() => {\n\t\t\tconst hydrate = connection.hydrate;\n\t\t\treturn typeof hydrate === \"function\" ? { hydrate: (threadId) => hydrate(threadId) } : {};\n\t\t})()\n\t};\n}\nfunction buildRunAgentInputBody(messages, data, runContext, options) {\n\tconst wireMessages = uiMessagesToWire(messages);\n\tconst forwardedProps = {\n\t\t...options.body,\n\t\t...runContext?.forwardedProps ?? {},\n\t\t...data\n\t};\n\treturn {\n\t\tthreadId: runContext?.threadId ?? generateRunId(\"thread\"),\n\t\trunId: runContext?.runId ?? generateRunId(\"run\"),\n\t\t...runContext?.parentRunId !== void 0 && { parentRunId: runContext.parentRunId },\n\t\t...runContext?.resume !== void 0 && { resume: runContext.resume },\n\t\tstate: {},\n\t\tmessages: wireMessages,\n\t\ttools: runContext?.clientTools ?? [],\n\t\tcontext: [],\n\t\tforwardedProps,\n\t\tdata: { ...forwardedProps }\n\t};\n}\n/**\n* Create a Server-Sent Events connection adapter\n*\n* @param url - The API endpoint URL (or a function that returns the URL)\n* @param options - Fetch options (headers, credentials, body, etc.) or a function that returns options (can be async)\n* @returns A connection adapter for SSE streams\n*\n* @example\n* ```typescript\n* // Static URL\n* const connection = fetchServerSentEvents('/api/chat');\n*\n* // Dynamic URL\n* const connection = fetchServerSentEvents(() => `/api/chat?user=${userId}`);\n*\n* // With options\n* const connection = fetchServerSentEvents('/api/chat', {\n* headers: { 'Authorization': 'Bearer token' }\n* });\n*\n* // With dynamic options\n* const connection = fetchServerSentEvents('/api/chat', () => ({\n* headers: { 'Authorization': `Bearer ${getToken()}` }\n* }));\n*\n* // With additional body data\n* const connection = fetchServerSentEvents('/api/chat', async () => ({\n* body: {\n* provider: 'openai',\n* model: 'gpt-5.5',\n* }\n* }));\n* ```\n*/\nfunction fetchServerSentEvents(url, options = {}) {\n\treturn {\n\t\tasync *connect(messages, data, abortSignal, runContext) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = typeof options === \"function\" ? await options() : options;\n\t\t\tconst requestHeaders = {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t...mergeHeaders(resolvedOptions.headers),\n\t\t\t\t...mergeHeaders(runContext?.headers),\n\t\t\t\t...runIdHeader(runContext?.runId)\n\t\t\t};\n\t\t\tconst requestBody = buildRunAgentInputBody(messages, data, runContext, resolvedOptions);\n\t\t\tconst fetchClient = resolvedOptions.fetchClient ?? fetch;\n\t\t\tconst signal = abortSignal || resolvedOptions.signal;\n\t\t\tyield* resumableStream(fetchEventSource(fetchClient, resolvedUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: requestHeaders,\n\t\t\t\tbody: JSON.stringify(requestBody),\n\t\t\t\tcredentials: resolvedOptions.credentials || \"same-origin\"\n\t\t\t}, (response, sseSignal) => responseToSSEEvents(response, sseSignal, {\n\t\t\t\t...runContext?.threadId !== void 0 ? { threadId: runContext.threadId } : {},\n\t\t\t\t...runContext?.runId !== void 0 ? { runId: runContext.runId } : {}\n\t\t\t})), signal, resolvedOptions.reconnect);\n\t\t},\n\t\tasync *joinRun(runId, abortSignal) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = typeof options === \"function\" ? await options() : options;\n\t\t\tconst joinUrl = withSearchParams(resolvedUrl, {\n\t\t\t\toffset: \"-1\",\n\t\t\t\trunId\n\t\t\t});\n\t\t\tconst requestHeaders = { ...mergeHeaders(resolvedOptions.headers) };\n\t\t\tconst fetchClient = resolvedOptions.fetchClient ?? fetch;\n\t\t\tconst signal = abortSignal || resolvedOptions.signal;\n\t\t\tyield* resumableStream(fetchEventSource(fetchClient, joinUrl, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: requestHeaders,\n\t\t\t\tcredentials: resolvedOptions.credentials || \"same-origin\"\n\t\t\t}, (response, sseSignal) => responseToSSEEvents(response, sseSignal, { runId })), signal, resolvedOptions.reconnect);\n\t\t},\n\t\tasync hydrate(threadId) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = typeof options === \"function\" ? await options() : options;\n\t\t\treturn fetchThreadHydration(resolvedOptions.fetchClient ?? fetch, resolvedUrl, mergeHeaders(resolvedOptions.headers), resolvedOptions.credentials || \"same-origin\", threadId);\n\t\t},\n\t\tasync hydrateGeneration(threadId) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = typeof options === \"function\" ? await options() : options;\n\t\t\treturn fetchGenerationHydration(resolvedOptions.fetchClient ?? fetch, resolvedUrl, mergeHeaders(resolvedOptions.headers), resolvedOptions.credentials || \"same-origin\", threadId);\n\t\t}\n\t};\n}\n/**\n* Create an HTTP streaming connection adapter (for raw streaming without SSE format)\n*\n* @param url - The API endpoint URL (or a function that returns the URL)\n* @param options - Fetch options (headers, credentials, body, etc.) or a function that returns options (can be async)\n* @returns A connection adapter for HTTP streams\n*\n* @example\n* ```typescript\n* // Static URL\n* const connection = fetchHttpStream('/api/chat');\n*\n* // Dynamic URL\n* const connection = fetchHttpStream(() => `/api/chat?user=${userId}`);\n*\n* // With options\n* const connection = fetchHttpStream('/api/chat', {\n* headers: { 'Authorization': 'Bearer token' }\n* });\n*\n* // With dynamic options\n* const connection = fetchHttpStream('/api/chat', () => ({\n* headers: { 'Authorization': `Bearer ${getToken()}` }\n* }));\n*\n* // With additional body data\n* const connection = fetchHttpStream('/api/chat', async () => ({\n* body: {\n* provider: 'openai',\n* model: 'gpt-5.5',\n* }\n* }));\n* ```\n*/\nfunction fetchHttpStream(url, options = {}) {\n\treturn {\n\t\tasync *connect(messages, data, abortSignal, runContext) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = typeof options === \"function\" ? await options() : options;\n\t\t\tconst requestHeaders = {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t...mergeHeaders(resolvedOptions.headers),\n\t\t\t\t...mergeHeaders(runContext?.headers),\n\t\t\t\t...runIdHeader(runContext?.runId)\n\t\t\t};\n\t\t\tconst requestBody = buildRunAgentInputBody(messages, data, runContext, resolvedOptions);\n\t\t\tconst fetchClient = resolvedOptions.fetchClient ?? fetch;\n\t\t\tconst signal = abortSignal || resolvedOptions.signal;\n\t\t\tyield* resumableStream(fetchEventSource(fetchClient, resolvedUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: requestHeaders,\n\t\t\t\tbody: JSON.stringify(requestBody),\n\t\t\t\tcredentials: resolvedOptions.credentials || \"same-origin\"\n\t\t\t}, responseToNdjsonEvents), signal, resolvedOptions.reconnect);\n\t\t},\n\t\tasync *joinRun(runId, abortSignal) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = typeof options === \"function\" ? await options() : options;\n\t\t\tconst joinUrl = withSearchParams(resolvedUrl, {\n\t\t\t\toffset: \"-1\",\n\t\t\t\trunId\n\t\t\t});\n\t\t\tconst requestHeaders = { ...mergeHeaders(resolvedOptions.headers) };\n\t\t\tconst fetchClient = resolvedOptions.fetchClient ?? fetch;\n\t\t\tconst signal = abortSignal || resolvedOptions.signal;\n\t\t\tyield* resumableStream(fetchEventSource(fetchClient, joinUrl, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: requestHeaders,\n\t\t\t\tcredentials: resolvedOptions.credentials || \"same-origin\"\n\t\t\t}, responseToNdjsonEvents), signal, resolvedOptions.reconnect);\n\t\t},\n\t\tasync hydrate(threadId) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = typeof options === \"function\" ? await options() : options;\n\t\t\treturn fetchThreadHydration(resolvedOptions.fetchClient ?? fetch, resolvedUrl, mergeHeaders(resolvedOptions.headers), resolvedOptions.credentials || \"same-origin\", threadId);\n\t\t},\n\t\tasync hydrateGeneration(threadId) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = typeof options === \"function\" ? await options() : options;\n\t\t\treturn fetchGenerationHydration(resolvedOptions.fetchClient ?? fetch, resolvedUrl, mergeHeaders(resolvedOptions.headers), resolvedOptions.credentials || \"same-origin\", threadId);\n\t\t}\n\t};\n}\nfunction createDefaultXMLHttpRequest() {\n\tif (typeof globalThis.XMLHttpRequest !== \"function\") throw new Error(\"XMLHttpRequest is not available in this runtime\");\n\treturn new globalThis.XMLHttpRequest();\n}\nfunction cleanupXhr(xhr, abortSignal, onAbort) {\n\txhr.onprogress = null;\n\txhr.onload = null;\n\txhr.onerror = null;\n\txhr.onabort = null;\n\txhr.onloadend = null;\n\tif (abortSignal && onAbort) abortSignal.removeEventListener(\"abort\", onAbort);\n}\nfunction readXhrLines(xhr, abortSignal) {\n\tlet offset = 0;\n\tlet buffer = \"\";\n\tconst lines = [];\n\tconst waiters = [];\n\tlet done = false;\n\tlet aborted = false;\n\tlet error;\n\tlet onAbort;\n\tconst wake = () => {\n\t\twaiters.shift()?.();\n\t};\n\tconst enqueueDelta = () => {\n\t\tif (xhr.status !== 0 && (xhr.status < 200 || xhr.status >= 300)) {\n\t\t\terror = errorFromXhrStatus(xhr);\n\t\t\tdone = true;\n\t\t\treturn;\n\t\t}\n\t\tconst responseText = xhr.responseText;\n\t\tif (responseText.length <= offset) return;\n\t\tbuffer += responseText.slice(offset);\n\t\toffset = responseText.length;\n\t\tconst splitLines = buffer.split(\"\\n\");\n\t\tbuffer = splitLines.pop() ?? \"\";\n\t\tfor (const line of splitLines) {\n\t\t\tconst normalized = line.endsWith(\"\\r\") ? line.slice(0, -1) : line;\n\t\t\tif (normalized.trim()) lines.push(normalized);\n\t\t}\n\t};\n\tconst finish = () => {\n\t\tenqueueDelta();\n\t\tif (xhr.status !== 0 && (xhr.status < 200 || xhr.status >= 300)) error = errorFromXhrStatus(xhr);\n\t\telse if (buffer.trim() && !aborted) error = new StreamTruncatedError();\n\t\tdone = true;\n\t\twake();\n\t};\n\txhr.onprogress = () => {\n\t\tenqueueDelta();\n\t\twake();\n\t};\n\txhr.onload = finish;\n\txhr.onerror = () => {\n\t\terror = new StreamReadError(/* @__PURE__ */ new Error(\"XHR request failed\"));\n\t\tdone = true;\n\t\twake();\n\t};\n\txhr.onabort = () => {\n\t\taborted = true;\n\t\tdone = true;\n\t\twake();\n\t};\n\txhr.onloadend = () => {\n\t\tif (!done) finish();\n\t};\n\tif (abortSignal) {\n\t\tonAbort = () => {\n\t\t\taborted = true;\n\t\t\txhr.abort();\n\t\t};\n\t\tif (abortSignal.aborted) onAbort();\n\t\telse abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n\t}\n\treturn (async function* () {\n\t\ttry {\n\t\t\twhile (true) {\n\t\t\t\tconst line = lines.shift();\n\t\t\t\tif (line !== void 0) {\n\t\t\t\t\tyield line;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (error) throw error;\n\t\t\t\tif (done || abortSignal?.aborted) return;\n\t\t\t\tawait new Promise((resolve) => {\n\t\t\t\t\twaiters.push(resolve);\n\t\t\t\t});\n\t\t\t}\n\t\t} finally {\n\t\t\tcleanupXhr(xhr, abortSignal, onAbort);\n\t\t}\n\t})();\n}\nfunction createConfiguredXhrRequest(url, options, messages, data, runContext, method = \"POST\", extraHeaders = {}) {\n\tconst xhr = options.xhrFactory?.() ?? createDefaultXMLHttpRequest();\n\txhr.open(method, url);\n\tif (options.withCredentials !== void 0) xhr.withCredentials = options.withCredentials;\n\tconst requestHeaders = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t...mergeHeaders(options.headers),\n\t\t...mergeHeaders(method === \"POST\" ? runContext?.headers : void 0),\n\t\t...method === \"POST\" ? runIdHeader(runContext?.runId) : {},\n\t\t...extraHeaders\n\t};\n\tfor (const [name, value] of Object.entries(requestHeaders)) xhr.setRequestHeader(name, value);\n\tconst requestBody = buildRunAgentInputBody(messages, data, runContext, options);\n\treturn {\n\t\txhr,\n\t\tbody: JSON.stringify(requestBody)\n\t};\n}\nasync function resolveXhrConnectionOptions(options) {\n\treturn typeof options === \"function\" ? await options() : options;\n}\n/**\n* Build an XHR-backed {@link StreamEventSource}. `parseLines` decodes the raw\n* newline-delimited body into events (SSE or NDJSON); the reconnect engine is\n* shared with the fetch adapters. A fresh XHR is opened per attempt, so a\n* `Last-Event-ID` reconnect header (via `extraHeaders`) is applied at open time.\n*/\nfunction xhrEventSource(url, options, method, messages, data, runContext, parseLines) {\n\treturn async function* (extraHeaders, abortSignal) {\n\t\tconst request = createConfiguredXhrRequest(url, options, messages, data, runContext, method, extraHeaders);\n\t\tconst lines = readXhrLines(request.xhr, abortSignal);\n\t\tif (abortSignal?.aborted) {\n\t\t\tawait lines.next();\n\t\t\treturn;\n\t\t}\n\t\trequest.xhr.send(method === \"GET\" ? null : request.body);\n\t\ttry {\n\t\t\tyield* parseLines(lines);\n\t\t} finally {\n\t\t\tif (!abortSignal?.aborted) request.xhr.abort();\n\t\t}\n\t};\n}\n/** SSE line parser bound to the run's ids for a `[DONE]` fallback. */\nfunction xhrSSEParser(runContext) {\n\tconst fallbackIds = {\n\t\t...runContext?.threadId !== void 0 ? { threadId: runContext.threadId } : {},\n\t\t...runContext?.runId !== void 0 ? { runId: runContext.runId } : {}\n\t};\n\treturn (lines) => linesToSSEEvents(lines, fallbackIds);\n}\n/**\n* Create an XMLHttpRequest-backed Server-Sent Events connection adapter.\n*\n* Resumable: against a durable (`id:`-tagged) server response, a dropped socket\n* auto-reconnects with `Last-Event-ID` and de-dupes the replayed prefix, and\n* `joinRun` attaches to an existing run from the start. A non-durable response\n* is a single plain request, exactly as before.\n*/\nfunction xhrServerSentEvents(url, options = {}) {\n\treturn {\n\t\tasync *connect(messages, data, abortSignal, runContext) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = await resolveXhrConnectionOptions(options);\n\t\t\tconst signal = abortSignal || resolvedOptions.signal;\n\t\t\tyield* resumableStream(xhrEventSource(resolvedUrl, resolvedOptions, \"POST\", messages, data, runContext, xhrSSEParser(runContext)), signal, resolvedOptions.reconnect);\n\t\t},\n\t\tasync *joinRun(runId, abortSignal) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = await resolveXhrConnectionOptions(options);\n\t\t\tconst signal = abortSignal || resolvedOptions.signal;\n\t\t\tyield* resumableStream(xhrEventSource(withSearchParams(resolvedUrl, {\n\t\t\t\toffset: \"-1\",\n\t\t\t\trunId\n\t\t\t}), resolvedOptions, \"GET\", [], void 0, void 0, (lines) => linesToSSEEvents(lines, { runId })), signal, resolvedOptions.reconnect);\n\t\t},\n\t\tasync hydrate(threadId) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = await resolveXhrConnectionOptions(options);\n\t\t\treturn fetchThreadHydration(fetch, resolvedUrl, mergeHeaders(resolvedOptions.headers), resolvedOptions.withCredentials ? \"include\" : \"same-origin\", threadId);\n\t\t},\n\t\tasync hydrateGeneration(threadId) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = await resolveXhrConnectionOptions(options);\n\t\t\treturn fetchGenerationHydration(fetch, resolvedUrl, mergeHeaders(resolvedOptions.headers), resolvedOptions.withCredentials ? \"include\" : \"same-origin\", threadId);\n\t\t}\n\t};\n}\n/**\n* Create an XMLHttpRequest-backed newline-delimited JSON stream adapter.\n*\n* Resumable: against a durable (envelope-tagged) server response, a dropped\n* socket auto-reconnects with `Last-Event-ID` and de-dupes the replayed prefix,\n* and `joinRun` attaches to an existing run from the start. A non-durable\n* (bare-line) response is a single plain request, exactly as before.\n*/\nfunction xhrHttpStream(url, options = {}) {\n\treturn {\n\t\tasync *connect(messages, data, abortSignal, runContext) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = await resolveXhrConnectionOptions(options);\n\t\t\tconst signal = abortSignal || resolvedOptions.signal;\n\t\t\tyield* resumableStream(xhrEventSource(resolvedUrl, resolvedOptions, \"POST\", messages, data, runContext, linesToNdjsonEvents), signal, resolvedOptions.reconnect);\n\t\t},\n\t\tasync *joinRun(runId, abortSignal) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = await resolveXhrConnectionOptions(options);\n\t\t\tconst signal = abortSignal || resolvedOptions.signal;\n\t\t\tyield* resumableStream(xhrEventSource(withSearchParams(resolvedUrl, {\n\t\t\t\toffset: \"-1\",\n\t\t\t\trunId\n\t\t\t}), resolvedOptions, \"GET\", [], void 0, void 0, linesToNdjsonEvents), signal, resolvedOptions.reconnect);\n\t\t},\n\t\tasync hydrate(threadId) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = await resolveXhrConnectionOptions(options);\n\t\t\treturn fetchThreadHydration(fetch, resolvedUrl, mergeHeaders(resolvedOptions.headers), resolvedOptions.withCredentials ? \"include\" : \"same-origin\", threadId);\n\t\t},\n\t\tasync hydrateGeneration(threadId) {\n\t\t\tconst resolvedUrl = typeof url === \"function\" ? url() : url;\n\t\t\tconst resolvedOptions = await resolveXhrConnectionOptions(options);\n\t\t\treturn fetchGenerationHydration(fetch, resolvedUrl, mergeHeaders(resolvedOptions.headers), resolvedOptions.withCredentials ? \"include\" : \"same-origin\", threadId);\n\t\t}\n\t};\n}\nfunction runIdQuery(url, runId) {\n\treturn runId ? withSearchParams(url, { runId }) : url;\n}\nfunction isPingFrame(parsed) {\n\treturn typeof parsed === \"object\" && parsed !== null && parsed.type === \"ping\";\n}\n/**\n* A push→pull bridge from socket callbacks to an async iterable: chunks queue\n* until the consumer pulls, a recorded failure rejects the iterator, and\n* `end()` (or the abort signal) finishes it cleanly. Shared by `webSocket()`'s\n* `subscribe()` and `joinRun()`.\n*/\nfunction createChunkPipe(abortSignal, onFinally) {\n\tconst queue = [];\n\tconst waiters = [];\n\tlet failure;\n\tlet ended = false;\n\tconst wake = () => waiters.shift()?.(null);\n\tconst push = (chunk) => {\n\t\tconst w = waiters.shift();\n\t\tif (w) w(chunk);\n\t\telse queue.push(chunk);\n\t};\n\tconst fail = (error) => {\n\t\tfailure = error;\n\t\twake();\n\t};\n\tconst end = () => {\n\t\tended = true;\n\t\twake();\n\t};\n\tconst onAbort = () => wake();\n\tabortSignal?.addEventListener(\"abort\", onAbort);\n\treturn {\n\t\tpush,\n\t\tfail,\n\t\tend,\n\t\titerable: (async function* () {\n\t\t\ttry {\n\t\t\t\twhile (!abortSignal?.aborted) {\n\t\t\t\t\tconst buffered = queue.shift();\n\t\t\t\t\tif (buffered !== void 0) {\n\t\t\t\t\t\tyield buffered;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (failure !== void 0) throw failure;\n\t\t\t\t\tif (ended) return;\n\t\t\t\t\tconst chunk = await new Promise((r) => waiters.push(r));\n\t\t\t\t\tif (failure !== void 0) throw failure;\n\t\t\t\t\tif (chunk === null) return;\n\t\t\t\t\tyield chunk;\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tabortSignal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\tonFinally();\n\t\t\t}\n\t\t})()\n\t};\n}\n/**\n* Full-duplex, conversation-scoped WebSocket connection adapter. Pairs with the\n* server `toWebSocketResponse` / `toWebSocketStream`. `send()` writes a\n* RunAgentInput frame; `subscribe()` yields inbound chunks.\n*\n* Resumable: `send()` establishes a run session backed by a\n* {@link createReconnectTracker}. If the socket closes before a terminal\n* (`RUN_FINISHED`/`RUN_ERROR`) chunk is seen and the run is durable\n* (offset-tagged `{ id, chunk }` envelopes), the socket is reopened at\n* `?runId=&offset=<lastEventId>`, de-duping the replayed boundary. A drop with\n* no offset ever observed (non-durable) surfaces {@link StreamReadError}\n* instead of reconnecting — there is nothing to resume from.\n*/\nfunction webSocket(url, options = {}) {\n\tconst Impl = options.WebSocketImpl ?? WebSocket;\n\tlet socket;\n\tlet socketMode;\n\tlet openPromise;\n\tconst listeners = /* @__PURE__ */ new Set();\n\tlet currentSession;\n\tfunction failAll(error) {\n\t\tfor (const l of listeners) l.fail(error);\n\t}\n\tfunction openOnce(target, mode) {\n\t\tif (socket && socket.readyState <= 1 && mode === \"run\" && socketMode === \"run\") return socket;\n\t\tconst prior = socket;\n\t\tconst ws = options.protocols ? new Impl(target, options.protocols) : new Impl(target);\n\t\tsocket = ws;\n\t\tsocketMode = mode;\n\t\topenPromise = new Promise((resolve, reject) => {\n\t\t\tws.onopen = () => resolve();\n\t\t\tws.onerror = (e) => reject(new StreamReadError(e));\n\t\t});\n\t\topenPromise.catch(() => {});\n\t\tws.onmessage = (event) => {\n\t\t\tif (ws !== socket) return;\n\t\t\tlet parsed;\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(String(event.data));\n\t\t\t} catch (error) {\n\t\t\t\tfailAll(new StreamReadError(error));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isPingFrame(parsed)) return;\n\t\t\tconst envelopeId = isNdjsonEnvelope(parsed) ? parsed.id : void 0;\n\t\t\tconst chunk = restoreInboundUsage(isNdjsonEnvelope(parsed) ? parsed.chunk : parsed);\n\t\t\tconst session = currentSession;\n\t\t\tif (session) {\n\t\t\t\tif (session.tracker.note(envelopeId) === \"duplicate\") return;\n\t\t\t\tsession.progressed = true;\n\t\t\t\tif (session.runId === void 0) session.runId = getChunkRunId$1(chunk);\n\t\t\t\tif (chunk.type === \"RUN_FINISHED\" || chunk.type === \"RUN_ERROR\") session.sawTerminal = true;\n\t\t\t}\n\t\t\tfor (const l of listeners) l.push(chunk);\n\t\t};\n\t\tws.onclose = () => {\n\t\t\tif (ws !== socket) return;\n\t\t\tconst session = currentSession;\n\t\t\tif (!session) {\n\t\t\t\tfailAll(new StreamReadError(/* @__PURE__ */ new Error(\"WebSocket connection closed\")));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (session.signal?.aborted || session.sawTerminal) return;\n\t\t\tconst lastEventId = session.tracker.lastEventId;\n\t\t\tif (lastEventId === void 0) {\n\t\t\t\tcurrentSession = void 0;\n\t\t\t\tfailAll(new StreamReadError(/* @__PURE__ */ new Error(\"WebSocket connection closed\")));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treconnect(session, lastEventId);\n\t\t};\n\t\tif (prior && prior.readyState <= 1) prior.close();\n\t\treturn ws;\n\t}\n\tasync function reconnect(session, offset) {\n\t\ttry {\n\t\t\tawait session.tracker.waitBeforeReconnect(session.progressed, session.signal);\n\t\t} catch (error) {\n\t\t\tif (currentSession === session) currentSession = void 0;\n\t\t\tfailAll(error);\n\t\t\treturn;\n\t\t}\n\t\tif (session.signal?.aborted) return;\n\t\tif (currentSession !== session) return;\n\t\tif (socket && socket.readyState <= 1) return;\n\t\tsession.progressed = false;\n\t\topenOnce(withSearchParams(typeof url === \"function\" ? url() : url, {\n\t\t\t...session.runId !== void 0 ? { runId: session.runId } : {},\n\t\t\toffset\n\t\t}), \"resume\");\n\t}\n\tfunction waitOpen(ws) {\n\t\tif (ws.readyState === 1) return Promise.resolve();\n\t\treturn openPromise ?? Promise.resolve();\n\t}\n\treturn {\n\t\tsubscribe(abortSignal) {\n\t\t\tconst pipe = createChunkPipe(abortSignal, () => listeners.delete(sink));\n\t\t\tconst sink = {\n\t\t\t\tpush: pipe.push,\n\t\t\t\tfail: pipe.fail\n\t\t\t};\n\t\t\tlisteners.add(sink);\n\t\t\treturn pipe.iterable;\n\t\t},\n\t\tasync send(messages, data, abortSignal, runContext) {\n\t\t\tconst ws = openOnce(runIdQuery(typeof url === \"function\" ? url() : url, runContext?.runId), \"run\");\n\t\t\tawait waitOpen(ws);\n\t\t\tif (!currentSession || currentSession.runId !== runContext?.runId) currentSession = {\n\t\t\t\trunId: runContext?.runId,\n\t\t\t\ttracker: createReconnectTracker(options.reconnect),\n\t\t\t\tsawTerminal: false,\n\t\t\t\tprogressed: false,\n\t\t\t\tsignal: abortSignal\n\t\t\t};\n\t\t\telse {\n\t\t\t\tcurrentSession.signal = abortSignal;\n\t\t\t\tcurrentSession.sawTerminal = false;\n\t\t\t\tcurrentSession.progressed = false;\n\t\t\t}\n\t\t\tconst session = currentSession;\n\t\t\tabortSignal?.addEventListener(\"abort\", () => {\n\t\t\t\tconst abortRunId = session.runId;\n\t\t\t\tconst live = socket;\n\t\t\t\tif (abortRunId === void 0 || session.sawTerminal || socketMode !== \"run\" || live === void 0 || live.readyState !== 1) return;\n\t\t\t\ttry {\n\t\t\t\t\tlive.send(JSON.stringify({\n\t\t\t\t\t\ttype: \"abort\",\n\t\t\t\t\t\trunId: abortRunId\n\t\t\t\t\t}));\n\t\t\t\t} catch {}\n\t\t\t}, { once: true });\n\t\t\tconst body = buildRunAgentInputBody(messages, data, runContext, { body: options.body });\n\t\t\tws.send(JSON.stringify(body));\n\t\t},\n\t\tjoinRun(runId, abortSignal) {\n\t\t\tconst target = withSearchParams(typeof url === \"function\" ? url() : url, {\n\t\t\t\toffset: \"-1\",\n\t\t\t\trunId\n\t\t\t});\n\t\t\tconst ws = options.protocols ? new Impl(target, options.protocols) : new Impl(target);\n\t\t\tconst pipe = createChunkPipe(abortSignal, () => {\n\t\t\t\tif (ws.readyState <= 1) ws.close();\n\t\t\t});\n\t\t\tws.onmessage = (event) => {\n\t\t\t\tlet parsed;\n\t\t\t\ttry {\n\t\t\t\t\tparsed = JSON.parse(String(event.data));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tpipe.fail(new StreamReadError(error));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (isPingFrame(parsed)) return;\n\t\t\t\tpipe.push(restoreInboundUsage(isNdjsonEnvelope(parsed) ? parsed.chunk : parsed));\n\t\t\t};\n\t\t\tws.onclose = (event) => {\n\t\t\t\tif (event?.code === 1e3) {\n\t\t\t\t\tpipe.end();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst detail = event ? `${event.code}${event.reason ? `: ${event.reason}` : \"\"}` : \"unknown\";\n\t\t\t\tpipe.fail(new StreamReadError(/* @__PURE__ */ new Error(`WebSocket connection closed (${detail})`)));\n\t\t\t};\n\t\t\treturn pipe.iterable;\n\t\t}\n\t};\n}\n/**\n* Create a direct stream connection adapter (for server functions or direct streams)\n*\n* @param streamFactory - A function that returns an async iterable of StreamChunks\n* @param handlers - Optional persistence handlers (`hydrate`,\n* `hydrateGeneration`, `joinRun`) that let server-driven persistence work\n* without an HTTP endpoint — each is usually a one-line server-function call\n* @returns A connection adapter for direct streams\n*\n* @example\n* ```typescript\n* // With TanStack Start server function\n* const connection = stream(() => serverFunction({ messages }));\n*\n* const client = new ChatClient({ connection });\n*\n* // With generation persistence over server functions\n* const connection = stream(\n* () => generateImageFn({ data: input }),\n* {\n* hydrateGeneration: (threadId) => getImageHydrationFn({ data: threadId }),\n* joinRun: (runId) => joinImageRunFn({ data: runId }),\n* },\n* );\n* ```\n*/\nfunction stream(streamFactory, handlers) {\n\treturn {\n\t\tasync *connect(messages, data, abortSignal) {\n\t\t\tyield* streamFactory(messages, data, abortSignal);\n\t\t},\n\t\t...handlers?.hydrate ? { hydrate: handlers.hydrate } : {},\n\t\t...handlers?.hydrateGeneration ? { hydrateGeneration: handlers.hydrateGeneration } : {},\n\t\t...handlers?.joinRun ? { joinRun: handlers.joinRun } : {}\n\t};\n}\n/**\n* Wrap a `ChatFetcher` as a `ConnectConnectionAdapter` so the chat client can\n* consume it through the same `subscribe`/`send` plumbing used for SSE /\n* HTTP-stream / RPC connections. May return either a `Response` (parsed as\n* SSE) or an `AsyncIterable<StreamChunk>` (yielded directly).\n*\n* @internal\n*/\nfunction fetcherToConnectionAdapter(fetcher) {\n\treturn { async *connect(messages, data, abortSignal, runContext) {\n\t\tif (!abortSignal) throw new Error(\"fetcherToConnectionAdapter requires an AbortSignal — the chat client always supplies one.\");\n\t\tif (!runContext) throw new Error(\"fetcherToConnectionAdapter requires a RunAgentInputContext — the chat client always supplies one.\");\n\t\tconst result = await fetcher({\n\t\t\tmessages,\n\t\t\tdata,\n\t\t\tthreadId: runContext.threadId,\n\t\t\trunId: runContext.runId,\n\t\t\t...runContext.parentRunId !== void 0 ? { parentRunId: runContext.parentRunId } : {},\n\t\t\t...runContext.resume !== void 0 ? { resume: runContext.resume } : {}\n\t\t}, {\n\t\t\tsignal: abortSignal,\n\t\t\theaders: runContext.headers\n\t\t});\n\t\tif (result instanceof Response) yield* responseToSSEChunks(result, abortSignal);\n\t\telse yield* abortableIterable(result, abortSignal);\n\t} };\n}\n/**\n* Wrap an AsyncIterable so iteration aborts when `signal` fires. Without\n* this, a fetcher that returns a generator ignoring its signal would leave\n* the for-await loop hanging until the iterable naturally ends.\n*/\nasync function* abortableIterable(iterable, signal) {\n\tif (signal.aborted) return;\n\tconst iterator = iterable[Symbol.asyncIterator]();\n\tconst abortPromise = new Promise((resolve) => {\n\t\tsignal.addEventListener(\"abort\", () => resolve({\n\t\t\tdone: true,\n\t\t\tvalue: void 0\n\t\t}), { once: true });\n\t});\n\ttry {\n\t\twhile (true) {\n\t\t\tconst result = await Promise.race([iterator.next(), abortPromise]);\n\t\t\tif (result.done) return;\n\t\t\tyield result.value;\n\t\t}\n\t} finally {\n\t\tawait iterator.return?.();\n\t}\n}\n/**\n* Create an RPC stream connection adapter (for RPC-based streaming like Cap'n Web RPC)\n*\n* @param rpcCall - A function that accepts messages and returns an async iterable of StreamChunks\n* @param handlers - Optional persistence handlers (`hydrate`,\n* `hydrateGeneration`, `joinRun`) that let server-driven persistence work\n* without an HTTP endpoint — each is usually a one-line RPC call\n* @returns A connection adapter for RPC streams\n*\n* @example\n* ```typescript\n* // With Cap'n Web RPC\n* const connection = rpcStream((messages, data) =>\n* api.streamMurfResponse(messages, data)\n* );\n*\n* const client = new ChatClient({ connection });\n*\n* // With generation persistence over RPC\n* const connection = rpcStream(\n* (messages, data) => api.streamMurfResponse(messages, data),\n* {\n* hydrateGeneration: (threadId) => api.getGenerationHydration(threadId),\n* joinRun: (runId) => api.replayRun(runId),\n* },\n* );\n* ```\n*/\nfunction rpcStream(rpcCall, handlers) {\n\treturn {\n\t\tasync *connect(messages, data, abortSignal) {\n\t\t\tyield* rpcCall(messages, data, abortSignal);\n\t\t},\n\t\t...handlers?.hydrate ? { hydrate: handlers.hydrate } : {},\n\t\t...handlers?.hydrateGeneration ? { hydrateGeneration: handlers.hydrateGeneration } : {},\n\t\t...handlers?.joinRun ? { joinRun: handlers.joinRun } : {}\n\t};\n}\n//#endregion\nexport { DurableStreamIncompleteError, StreamReconnectLimitError, StreamTruncatedError, createReconnectTracker, fetchHttpStream, fetchServerSentEvents, fetcherToConnectionAdapter, getChunkRunId$1 as getChunkRunId, normalizeConnectionAdapter, rpcStream, stream, webSocket, xhrHttpStream, xhrServerSentEvents };\n\n//# sourceMappingURL=connection-adapters.js.map","import { INTERRUPT_BINDING_METADATA_KEY, INTERRUPT_BINDING_VERSION, canonicalInterruptJson, canonicalizeInterruptResolutions, cloneAndDeepFreezeJson, digestInterruptJson, genericInterruptContinuationFromDescriptor, hashInterruptDefinitionSchema, hashSchemaInput, isStandardSchema, normalizeApprovalSchema, readInterruptBinding, wrapGenericInterruptContinuation } from \"@tanstack/ai/client\";\n//#region src/interrupt-manager.ts\nfunction isClientOwnedInterrupt(item) {\n\treturn item.resumable;\n}\nfunction resolutionWithContinuation(item, resolution) {\n\tconst continuation = genericInterruptContinuationFromDescriptor(item.descriptor);\n\tif (!continuation) return resolution;\n\treturn {\n\t\t...resolution,\n\t\tmetadata: wrapGenericInterruptContinuation(continuation)\n\t};\n}\nfunction isRootResolvableInterrupt(interrupt) {\n\treturn \"cancel\" in interrupt && \"clearResolution\" in interrupt;\n}\nvar itemErrorCodes = /* @__PURE__ */ new Set([\n\t\"invalid-payload\",\n\t\"invalid-edited-args\",\n\t\"invalid-tool-output\",\n\t\"invalid-response-schema\",\n\t\"unknown-interrupt\",\n\t\"expired\",\n\t\"stale\",\n\t\"conflict\",\n\t\"legacy-unsupported\"\n]);\nvar batchErrorCodes = /* @__PURE__ */ new Set([\n\t\"incomplete-batch\",\n\t\"item-validation-failed\",\n\t\"unsupported-bulk-operation\",\n\t\"async-resolver\",\n\t\"inactive-transaction\",\n\t\"mixed-provenance\",\n\t\"transport\",\n\t\"server\",\n\t\"protocol\",\n\t\"invalid-response-schema\",\n\t\"expired\",\n\t\"stale\",\n\t\"conflict\",\n\t\"legacy-submit-failed\"\n]);\nfunction isUnknownObject(value) {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction isLegacyApprovalMetadata(value) {\n\treturn isUnknownObject(value) && value[\"kind\"] === \"approval\" && typeof value[\"toolName\"] === \"string\" && \"input\" in value;\n}\nfunction isLegacyClientToolMetadata(value) {\n\treturn isUnknownObject(value) && value[\"kind\"] === \"client_tool\" && typeof value[\"toolName\"] === \"string\" && \"input\" in value;\n}\n/**\n* Does this descriptor carry the pre-binding TanStack metadata marker?\n*\n* Descriptors emitted before the resume binding existed are still ours to\n* resume, so they must not be mistaken for another producer's interrupt.\n*/\nfunction isLegacyInterruptMetadata(interrupt) {\n\treturn isLegacyApprovalMetadata(interrupt.metadata) || isLegacyClientToolMetadata(interrupt.metadata);\n}\nfunction getDescriptorBinding(interrupt) {\n\treturn readInterruptBinding(interrupt);\n}\nfunction hasReservedFirstPartyBindingMarker(interrupt) {\n\tif (!isUnknownObject(interrupt.metadata)) return false;\n\tconst binding = interrupt.metadata[INTERRUPT_BINDING_METADATA_KEY];\n\tif (!isUnknownObject(binding)) return false;\n\tif (binding[\"v\"] !== void 0 && binding[\"v\"] !== INTERRUPT_BINDING_VERSION) return false;\n\treturn binding[\"kind\"] === \"generic\" || binding[\"kind\"] === \"tool-approval\" || binding[\"kind\"] === \"client-tool-execution\" || \"definitionId\" in binding || \"key\" in binding || \"batchIndex\" in binding || \"payloadSchemaHash\" in binding;\n}\nfunction hasFirstPartyGenericMarker(interrupt) {\n\tif (!isUnknownObject(interrupt.metadata)) return false;\n\tconst binding = interrupt.metadata[INTERRUPT_BINDING_METADATA_KEY];\n\tif (!isUnknownObject(binding) || binding[\"kind\"] !== \"generic\") return false;\n\treturn \"definitionId\" in binding || \"key\" in binding || \"batchIndex\" in binding || \"payloadSchemaHash\" in binding;\n}\nfunction getInterruptPayload(interrupt) {\n\treturn interrupt.metadata?.[\"tanstack:interruptPayload\"];\n}\n/**\n* Only used to route *legacy* (pre-binding) descriptors, which have no binding\n* to classify off. Current descriptors are classified by their binding alone.\n*/\nfunction isClientToolExecutionReason(reason) {\n\treturn reason === \"tanstack:client_tool_execution\" || reason === \"client_tool_input\";\n}\nfunction responseSchemaHash(interrupt) {\n\tif (interrupt.responseSchema === void 0) return void 0;\n\ttry {\n\t\treturn digestInterruptJson(canonicalInterruptJson(interrupt.responseSchema));\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction definitionSchemaHash(schema) {\n\tif (schema === void 0) return void 0;\n\ttry {\n\t\treturn hashInterruptDefinitionSchema(schema);\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction isPromiseLike(value) {\n\treturn value !== null && (typeof value === \"object\" || typeof value === \"function\") && \"then\" in value && typeof value.then === \"function\";\n}\nfunction validateWithSchema(schema, value, code) {\n\tif (schema === void 0) return {\n\t\tvalid: true,\n\t\tpayload: value\n\t};\n\tif (isStandardSchema(schema)) {\n\t\tconst result = schema[\"~standard\"].validate(value);\n\t\tconst normalize = (validation) => {\n\t\t\tif (!validation.issues) return {\n\t\t\t\tvalid: true,\n\t\t\t\tpayload: validation.value\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tcode,\n\t\t\t\tmessage: validation.issues[0]?.message ?? \"Schema validation failed.\"\n\t\t\t};\n\t\t};\n\t\treturn isPromiseLike(result) ? Promise.resolve(result).then(normalize) : normalize(result);\n\t}\n\treturn {\n\t\tvalid: true,\n\t\tpayload: value\n\t};\n}\nfunction isItemErrorCode(value) {\n\tfor (const code of itemErrorCodes) if (code === value) return true;\n\treturn false;\n}\nfunction isBatchErrorCode(value) {\n\tfor (const code of batchErrorCodes) if (code === value) return true;\n\treturn false;\n}\nfunction isSubmissionError(value) {\n\tif (!isUnknownObject(value)) return false;\n\tconst scope = value[\"scope\"];\n\tconst code = value[\"code\"];\n\tif (!(typeof code === \"string\" && typeof value[\"message\"] === \"string\" && typeof value[\"retryable\"] === \"boolean\" && typeof value[\"threadId\"] === \"string\" && typeof value[\"interruptedRunId\"] === \"string\" && typeof value[\"generation\"] === \"number\")) return false;\n\tif (scope === \"item\") return isItemErrorCode(code) && typeof value[\"interruptId\"] === \"string\" && (value[\"source\"] === \"client\" || value[\"source\"] === \"server\");\n\treturn scope === \"batch\" && isBatchErrorCode(code) && Array.isArray(value[\"interruptIds\"]) && value[\"interruptIds\"].every((id) => typeof id === \"string\") && (value[\"source\"] === \"client\" || value[\"source\"] === \"server\" || value[\"source\"] === \"transport\");\n}\nfunction readSubmissionErrors(error) {\n\tif (isSubmissionError(error)) return [error];\n\tif (!isUnknownObject(error) || !Array.isArray(error[\"errors\"])) return [];\n\treturn error[\"errors\"].every(isSubmissionError) ? error[\"errors\"] : [];\n}\nfunction haveSameInterruptIds(left, right) {\n\tif (left.length !== right.length) return false;\n\tconst sortedLeft = [...left].sort();\n\tconst sortedRight = [...right].sort();\n\treturn sortedLeft.every((id, index) => id === sortedRight[index]);\n}\nfunction haveSameBatchCorrelation(left, right) {\n\treturn left.threadId === right.threadId && left.interruptedRunId === right.interruptedRunId && left.generation === right.generation && haveSameInterruptIds(left.interruptIds, right.interruptIds);\n}\nfunction mergeSubmissionBatchErrors(current, previousSubmission, incoming) {\n\tconst replaceableIncoming = incoming.filter((error) => error.source !== \"transport\");\n\tconst isSuperseded = (candidate) => previousSubmission.includes(candidate) && replaceableIncoming.some((error) => haveSameBatchCorrelation(candidate, error));\n\tconst retainedRootErrors = current.filter((candidate) => !isSuperseded(candidate));\n\tconst retainedSubmissionRootErrors = previousSubmission.filter((candidate) => !replaceableIncoming.some((error) => haveSameBatchCorrelation(candidate, error)));\n\treturn Object.freeze({\n\t\trootErrors: Object.freeze([...retainedRootErrors, ...incoming]),\n\t\tsubmissionRootErrors: Object.freeze([...retainedSubmissionRootErrors, ...replaceableIncoming])\n\t});\n}\nfunction submissionErrorMatchesActiveBatch(error, submission) {\n\tif (error.threadId !== submission.threadId || error.interruptedRunId !== submission.interruptedRunId || error.generation !== submission.generation) return false;\n\tconst interruptIds = submission.resolutions.map((resolution) => resolution.interruptId);\n\treturn error.scope === \"item\" ? interruptIds.includes(error.interruptId) : haveSameInterruptIds(error.interruptIds, interruptIds);\n}\nfunction genericBinding(interrupt, hydration, candidate) {\n\tconst schemaHash = responseSchemaHash(interrupt) ?? candidate?.responseSchemaHash;\n\treturn cloneAndDeepFreezeJson({\n\t\tv: INTERRUPT_BINDING_VERSION,\n\t\tkind: \"generic\",\n\t\tinterruptId: interrupt.id,\n\t\tinterruptedRunId: hydration.interruptedRunId,\n\t\tgeneration: hydration.generation,\n\t\t...schemaHash !== void 0 ? { responseSchemaHash: schemaHash } : {},\n\t\t...interrupt.expiresAt !== void 0 ? { expiresAt: interrupt.expiresAt } : {}\n\t});\n}\nfunction baseSnapshot(item, hydration) {\n\tconst descriptor = cloneAndDeepFreezeJson(item.descriptor);\n\tconst errors = item.error === void 0 ? Object.freeze([]) : Object.freeze([cloneAndDeepFreezeJson(item.error)]);\n\tconst error = errors[0];\n\treturn {\n\t\tid: descriptor.id,\n\t\tinterruptId: descriptor.id,\n\t\treason: descriptor.reason,\n\t\t...descriptor.message !== void 0 ? { message: descriptor.message } : {},\n\t\t...descriptor.responseSchema !== void 0 ? { responseSchema: descriptor.responseSchema } : {},\n\t\t...descriptor.expiresAt !== void 0 ? { expiresAt: descriptor.expiresAt } : {},\n\t\t...descriptor.metadata !== void 0 ? { metadata: descriptor.metadata } : {},\n\t\tthreadId: hydration.threadId,\n\t\tinterruptedRunId: hydration.interruptedRunId,\n\t\tgeneration: hydration.generation,\n\t\tstatus: item.status,\n\t\terrors,\n\t\t...error !== void 0 ? { error } : {},\n\t\tcanResolve: item.canResolve\n\t};\n}\nvar InterruptManager = class {\n\toptions;\n\thydration;\n\titems = [];\n\tsnapshot = Object.freeze([]);\n\trootErrors = Object.freeze([]);\n\tsubmissionRootErrors = Object.freeze([]);\n\tstate = Object.freeze({\n\t\tinterrupts: this.snapshot,\n\t\tpendingInterrupts: this.snapshot,\n\t\tinterruptErrors: this.rootErrors,\n\t\tresuming: false\n\t});\n\tactiveTransaction;\n\tactiveSubmissionOperation;\n\tretrySubmission;\n\tresuming = false;\n\ttools;\n\tinterruptDefinitions;\n\tconstructor(options) {\n\t\tthis.options = options;\n\t\tthis.tools = options.tools;\n\t\tconst definitions = /* @__PURE__ */ new Map();\n\t\tfor (const definition of options.interrupts ?? []) {\n\t\t\tif (definitions.has(definition.id)) throw new Error(`Duplicate interrupt definition id: ${definition.id}`);\n\t\t\tdefinitions.set(definition.id, definition);\n\t\t}\n\t\tthis.interruptDefinitions = definitions;\n\t}\n\tupdateTools(tools) {\n\t\tthis.tools = tools;\n\t}\n\thydrate(hydration, source = \"live\") {\n\t\tthis.activeSubmissionOperation = void 0;\n\t\tthis.hydration = {\n\t\t\tthreadId: hydration.threadId,\n\t\t\tinterruptedRunId: hydration.interruptedRunId,\n\t\t\tgeneration: hydration.generation,\n\t\t\tinterrupts: cloneAndDeepFreezeJson(hydration.interrupts)\n\t\t};\n\t\tconst firstPartyIndexes = /* @__PURE__ */ new Map();\n\t\tfor (const interrupt of hydration.interrupts) {\n\t\t\tconst binding = getDescriptorBinding(interrupt);\n\t\t\tif (binding?.kind === \"generic\" && binding.definitionId !== void 0 && binding.key !== void 0 && binding.batchIndex !== void 0) firstPartyIndexes.set(binding.batchIndex, (firstPartyIndexes.get(binding.batchIndex) ?? 0) + 1);\n\t\t}\n\t\tthis.items = hydration.interrupts.map((interrupt) => this.hydrateInterrupt(interrupt, hydration, firstPartyIndexes));\n\t\tthis.rootErrors = Object.freeze([]);\n\t\tthis.submissionRootErrors = Object.freeze([]);\n\t\tthis.retrySubmission = void 0;\n\t\tthis.resuming = false;\n\t\tthis.publish(source);\n\t}\n\tgetInterrupts() {\n\t\treturn this.snapshot;\n\t}\n\tgetState() {\n\t\treturn this.state;\n\t}\n\tgetDescriptors() {\n\t\treturn this.hydration?.interrupts ?? Object.freeze([]);\n\t}\n\thasValidatedFirstPartyGenericBatch() {\n\t\treturn this.items.some((item) => item.kind === \"generic\" && item.definition !== void 0);\n\t}\n\treset(options) {\n\t\tthis.activeSubmissionOperation = void 0;\n\t\tthis.hydration = void 0;\n\t\tthis.items = [];\n\t\tthis.snapshot = Object.freeze([]);\n\t\tif (options?.preserveRootErrors !== true) {\n\t\t\tthis.rootErrors = Object.freeze([]);\n\t\t\tthis.submissionRootErrors = Object.freeze([]);\n\t\t}\n\t\tthis.retrySubmission = void 0;\n\t\tthis.resuming = false;\n\t\tthis.state = Object.freeze({\n\t\t\tinterrupts: this.snapshot,\n\t\t\tpendingInterrupts: this.snapshot,\n\t\t\tinterruptErrors: this.rootErrors,\n\t\t\tresuming: false\n\t\t});\n\t\tthis.options.onChange?.(options?.source ?? \"live\");\n\t}\n\tgetInterruptErrors() {\n\t\treturn this.rootErrors;\n\t}\n\tgetResuming() {\n\t\treturn this.resuming;\n\t}\n\tresolve(resolution) {\n\t\tthis.assertRootMutable();\n\t\tif (typeof resolution === \"boolean\") {\n\t\t\tthis.resolveBooleanBulk(resolution);\n\t\t\treturn;\n\t\t}\n\t\tthis.resolveTransaction(resolution);\n\t}\n\tcancel() {\n\t\tthis.assertRootMutable();\n\t\tthis.invalidateRetry();\n\t\tfor (const item of this.items) {\n\t\t\tif (!isClientOwnedInterrupt(item)) continue;\n\t\t\titem.validationGeneration++;\n\t\t\titem.resolution = Object.freeze(resolutionWithContinuation(item, {\n\t\t\t\tinterruptId: item.descriptor.id,\n\t\t\t\tstatus: \"cancelled\"\n\t\t\t}));\n\t\t\titem.status = \"staged\";\n\t\t\titem.error = void 0;\n\t\t}\n\t\tthis.publish();\n\t\tthis.maybeSubmit();\n\t}\n\tretry() {\n\t\tif (this.resuming) throw new Error(\"Interrupt submission is already active.\");\n\t\tconst submission = this.retrySubmission;\n\t\tif (!submission) {\n\t\t\tthis.addRootError(\"transport\", \"There is no retryable interrupt submission.\", false);\n\t\t\treturn;\n\t\t}\n\t\tthis.submitBatch(submission);\n\t}\n\tresolveClientToolOutput(toolCallId, output) {\n\t\tconst item = this.items.find((candidate) => candidate.kind === \"client-tool-execution\" && candidate.binding?.kind === \"client-tool-execution\" && candidate.binding.toolCallId === toolCallId || candidate.kind === \"generic\" && isClientToolExecutionReason(candidate.descriptor.reason) && candidate.descriptor.toolCallId === toolCallId && isLegacyClientToolMetadata(candidate.descriptor.metadata));\n\t\tif (!item) return false;\n\t\tthis.resolveItem(item.descriptor.id, output);\n\t\treturn true;\n\t}\n\tresolveToolApprovalDecision(interruptId, approved) {\n\t\tconst item = this.items.find((candidate) => candidate.descriptor.id === interruptId && (candidate.kind === \"tool-approval\" || candidate.kind === \"generic\" && candidate.descriptor.reason === \"approval_required\" && isLegacyApprovalMetadata(candidate.descriptor.metadata)));\n\t\tif (!item) return false;\n\t\tthis.resolveItem(item.descriptor.id, { approved });\n\t\treturn true;\n\t}\n\thydrateInterrupt(descriptor, hydration, firstPartyIndexes) {\n\t\tconst interrupt = cloneAndDeepFreezeJson(descriptor);\n\t\tconst candidate = getDescriptorBinding(interrupt);\n\t\tconst legacyResumable = candidate === void 0 && isLegacyInterruptMetadata(interrupt);\n\t\tif (candidate === void 0 && !legacyResumable) {\n\t\t\tif (hasReservedFirstPartyBindingMarker(interrupt)) return {\n\t\t\t\tdescriptor: interrupt,\n\t\t\t\tbinding: genericBinding(interrupt, hydration, void 0),\n\t\t\t\tkind: \"generic\",\n\t\t\t\tstatus: \"error\",\n\t\t\t\tcanResolve: false,\n\t\t\t\tresumable: false,\n\t\t\t\terror: this.itemError(interrupt.id, \"stale\", \"The interrupt binding is invalid or incomplete.\"),\n\t\t\t\tvalidationGeneration: 0\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tdescriptor: interrupt,\n\t\t\t\tbinding: void 0,\n\t\t\t\tkind: \"unbound\",\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tcanResolve: false,\n\t\t\t\tresumable: false,\n\t\t\t\tvalidationGeneration: 0\n\t\t\t};\n\t\t}\n\t\tconst correlated = candidate !== void 0 && candidate.interruptId === interrupt.id && candidate.interruptedRunId === hydration.interruptedRunId && candidate.generation === hydration.generation && responseSchemaHash(interrupt) === candidate.responseSchemaHash;\n\t\tconst structurallyCorrelated = candidate !== void 0 && candidate.interruptId === interrupt.id && candidate.interruptedRunId === hydration.interruptedRunId && candidate.generation === hydration.generation && candidate.responseSchemaHash === (responseSchemaHash(interrupt) ?? candidate.responseSchemaHash);\n\t\tif (candidate !== void 0 && hasFirstPartyGenericMarker(interrupt) && (!structurallyCorrelated || candidate.kind !== \"generic\" || candidate.definitionId === void 0 || candidate.key === void 0 || candidate.batchIndex === void 0)) return {\n\t\t\tdescriptor: interrupt,\n\t\t\tbinding: genericBinding(interrupt, hydration, candidate),\n\t\t\tkind: \"generic\",\n\t\t\tstatus: \"error\",\n\t\t\tcanResolve: false,\n\t\t\tresumable: false,\n\t\t\terror: this.itemError(interrupt.id, \"stale\", \"The interrupt binding does not match this interrupted run.\"),\n\t\t\tvalidationGeneration: 0\n\t\t};\n\t\tif (structurallyCorrelated && candidate.kind === \"tool-approval\") {\n\t\t\tconst tool = this.tools?.find((configured) => configured.name === candidate.toolName);\n\t\t\tif (tool?.needsApproval === true && interrupt.toolCallId === candidate.toolCallId) try {\n\t\t\t\tconst approval = normalizeApprovalSchema(tool.approvalSchema, tool.inputSchema);\n\t\t\t\tif (hashSchemaInput(tool.inputSchema) === candidate.inputSchemaHash && approval.approvalSchemaHash === candidate.approvalSchemaHash && approval.responseSchemaHash === candidate.responseSchemaHash) return {\n\t\t\t\t\tdescriptor: interrupt,\n\t\t\t\t\tbinding: cloneAndDeepFreezeJson(candidate),\n\t\t\t\t\tkind: \"tool-approval\",\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\tcanResolve: true,\n\t\t\t\t\tresumable: true,\n\t\t\t\t\ttool,\n\t\t\t\t\tvalidationGeneration: 0\n\t\t\t\t};\n\t\t\t} catch {}\n\t\t}\n\t\tif (structurallyCorrelated && candidate.kind === \"client-tool-execution\") {\n\t\t\tconst tool = this.tools?.find((configured) => configured.name === candidate.toolName);\n\t\t\tif (tool !== void 0 && interrupt.toolCallId === candidate.toolCallId && hashSchemaInput(tool.outputSchema) === candidate.outputSchemaHash) return {\n\t\t\t\tdescriptor: interrupt,\n\t\t\t\tbinding: cloneAndDeepFreezeJson(candidate),\n\t\t\t\tkind: \"client-tool-execution\",\n\t\t\t\tstatus: \"pending\",\n\t\t\t\tcanResolve: true,\n\t\t\t\tresumable: true,\n\t\t\t\ttool,\n\t\t\t\tvalidationGeneration: 0\n\t\t\t};\n\t\t}\n\t\tif (candidate !== void 0 && candidate.kind === \"generic\" && candidate.definitionId !== void 0 && candidate.key !== void 0 && candidate.batchIndex !== void 0 && candidate.key.length > 0 && firstPartyIndexes.get(candidate.batchIndex) !== 1) return {\n\t\t\tdescriptor: interrupt,\n\t\t\tbinding: cloneAndDeepFreezeJson(candidate),\n\t\t\tkind: \"generic\",\n\t\t\tstatus: \"error\",\n\t\t\tcanResolve: false,\n\t\t\tresumable: false,\n\t\t\terror: this.itemError(interrupt.id, \"stale\", \"Generic interrupt batch contains a duplicate batchIndex.\"),\n\t\t\tvalidationGeneration: 0\n\t\t};\n\t\tif (correlated && candidate.kind === \"generic\" && candidate.definitionId !== void 0 && candidate.key !== void 0 && candidate.batchIndex !== void 0 && candidate.key.length > 0 && firstPartyIndexes.get(candidate.batchIndex) === 1) {\n\t\t\tconst definition = this.interruptDefinitions.get(candidate.definitionId);\n\t\t\tif (definition !== void 0 && definitionSchemaHash(definition.responseSchema) === candidate.responseSchemaHash && (definition.payloadSchema === void 0 ? candidate.payloadSchemaHash === void 0 : candidate.payloadSchemaHash === definitionSchemaHash(definition.payloadSchema))) {\n\t\t\t\tconst rawPayload = getInterruptPayload(interrupt);\n\t\t\t\treturn {\n\t\t\t\t\tdescriptor: interrupt,\n\t\t\t\t\tbinding: cloneAndDeepFreezeJson(candidate),\n\t\t\t\t\tdefinition,\n\t\t\t\t\tkind: \"generic\",\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\tcanResolve: true,\n\t\t\t\t\tresumable: true,\n\t\t\t\t\t...rawPayload === void 0 ? {} : { payload: cloneAndDeepFreezeJson(rawPayload) },\n\t\t\t\t\tvalidationGeneration: 0\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tconst resumable = legacyResumable || candidate !== void 0 && candidate.interruptId === interrupt.id && candidate.interruptedRunId === hydration.interruptedRunId && candidate.generation === hydration.generation && (candidate.kind !== \"generic\" || responseSchemaHash(interrupt) === void 0 || candidate.responseSchemaHash === responseSchemaHash(interrupt));\n\t\treturn {\n\t\t\tdescriptor: interrupt,\n\t\t\tbinding: genericBinding(interrupt, hydration, candidate),\n\t\t\tkind: \"generic\",\n\t\t\tstatus: \"pending\",\n\t\t\tcanResolve: resumable,\n\t\t\tresumable,\n\t\t\tvalidationGeneration: 0\n\t\t};\n\t}\n\tbuildSnapshot(transaction) {\n\t\tconst hydration = this.requireHydration();\n\t\tconst next = this.items.filter((item) => item.kind !== \"client-tool-execution\" && item.status !== \"submitting\").map((item) => {\n\t\t\tconst base = baseSnapshot(item, hydration);\n\t\t\tif (item.kind === \"unbound\" || item.binding === void 0) {\n\t\t\t\tconst snapshot = {\n\t\t\t\t\t...base,\n\t\t\t\t\tkind: \"unbound\",\n\t\t\t\t\tcanResolve: false\n\t\t\t\t};\n\t\t\t\treturn Object.freeze(snapshot);\n\t\t\t}\n\t\t\tif (item.kind === \"tool-approval\" && item.binding.kind === \"tool-approval\") {\n\t\t\t\tconst binding = cloneAndDeepFreezeJson(item.binding);\n\t\t\t\tconst snapshot = {\n\t\t\t\t\t...base,\n\t\t\t\t\tkind: \"tool-approval\",\n\t\t\t\t\tbinding,\n\t\t\t\t\ttoolName: item.binding.toolName,\n\t\t\t\t\ttoolCallId: item.binding.toolCallId,\n\t\t\t\t\toriginalArgs: cloneAndDeepFreezeJson(item.binding.originalArgs),\n\t\t\t\t\tcancel: () => this.cancelItem(item.descriptor.id, transaction),\n\t\t\t\t\tclearResolution: () => this.clearItem(item.descriptor.id, transaction),\n\t\t\t\t\tresolveInterrupt: (approved, options) => {\n\t\t\t\t\t\tconst details = isUnknownObject(options) ? options : void 0;\n\t\t\t\t\t\tthis.resolveItem(item.descriptor.id, {\n\t\t\t\t\t\t\tapproved,\n\t\t\t\t\t\t\t...approved && details?.[\"editedArgs\"] !== void 0 ? { editedArgs: details[\"editedArgs\"] } : {},\n\t\t\t\t\t\t\t...details?.[\"payload\"] !== void 0 ? { payload: details[\"payload\"] } : {}\n\t\t\t\t\t\t}, transaction);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn Object.freeze(snapshot);\n\t\t\t}\n\t\t\tconst boundGeneric = item.binding.kind === \"generic\" ? cloneAndDeepFreezeJson(item.binding) : cloneAndDeepFreezeJson({\n\t\t\t\tv: INTERRUPT_BINDING_VERSION,\n\t\t\t\tkind: \"generic\",\n\t\t\t\tinterruptId: item.descriptor.id,\n\t\t\t\tinterruptedRunId: hydration.interruptedRunId,\n\t\t\t\tgeneration: hydration.generation,\n\t\t\t\t...typeof item.binding.responseSchemaHash === \"string\" ? { responseSchemaHash: item.binding.responseSchemaHash } : {}\n\t\t\t});\n\t\t\tif (item.definition !== void 0 && item.binding.kind === \"generic\") {\n\t\t\t\tconst snapshot = {\n\t\t\t\t\t...base,\n\t\t\t\t\tkind: \"generic\",\n\t\t\t\t\tdefinitionId: item.definition.id,\n\t\t\t\t\tkey: item.binding.key ?? \"\",\n\t\t\t\t\tpayload: item.payload,\n\t\t\t\t\tbinding: boundGeneric,\n\t\t\t\t\tcancel: () => this.cancelItem(item.descriptor.id, transaction),\n\t\t\t\t\tclearResolution: () => this.clearItem(item.descriptor.id, transaction),\n\t\t\t\t\tresolveInterrupt: (response) => this.resolveItem(item.descriptor.id, response, transaction)\n\t\t\t\t};\n\t\t\t\treturn Object.freeze(snapshot);\n\t\t\t}\n\t\t\tconst snapshot = {\n\t\t\t\t...base,\n\t\t\t\tkind: \"generic\",\n\t\t\t\tbinding: boundGeneric,\n\t\t\t\tcancel: () => this.cancelItem(item.descriptor.id, transaction),\n\t\t\t\tclearResolution: () => this.clearItem(item.descriptor.id, transaction),\n\t\t\t\tresolveInterrupt: (payload) => this.resolveItem(item.descriptor.id, payload, transaction)\n\t\t\t};\n\t\t\treturn Object.freeze(snapshot);\n\t\t});\n\t\treturn Object.freeze(next);\n\t}\n\tpublish(source = \"live\") {\n\t\tif (!this.hydration) {\n\t\t\tthis.snapshot = Object.freeze([]);\n\t\t\tthis.state = Object.freeze({\n\t\t\t\tinterrupts: this.snapshot,\n\t\t\t\tpendingInterrupts: this.snapshot,\n\t\t\t\tinterruptErrors: this.rootErrors,\n\t\t\t\tresuming: this.resuming\n\t\t\t});\n\t\t\tthis.options.onChange?.(source);\n\t\t\treturn;\n\t\t}\n\t\tthis.snapshot = this.buildSnapshot();\n\t\tthis.state = Object.freeze({\n\t\t\tinterrupts: this.snapshot,\n\t\t\tpendingInterrupts: this.snapshot,\n\t\t\tinterruptErrors: this.rootErrors,\n\t\t\tresuming: this.resuming\n\t\t});\n\t\tthis.options.onChange?.(source);\n\t}\n\tresolveItem(interruptId, payload, transaction) {\n\t\tthis.assertItemMutable(transaction);\n\t\tconst item = this.findItem(interruptId);\n\t\tthis.invalidateRetry();\n\t\tif (!item.canResolve) {\n\t\t\titem.status = \"error\";\n\t\t\titem.error = this.itemError(interruptId, \"invalid-response-schema\", \"The interrupt response schema is invalid and cannot be resolved.\");\n\t\t\tif (!transaction) this.publish();\n\t\t\treturn;\n\t\t}\n\t\tconst validationGeneration = ++item.validationGeneration;\n\t\tconst validation = this.validateCandidate(item, payload);\n\t\tif (isPromiseLike(validation)) {\n\t\t\titem.status = \"validating\";\n\t\t\titem.error = void 0;\n\t\t\tif (!transaction) this.publish();\n\t\t\tPromise.resolve(validation).then((result) => {\n\t\t\t\tif (validationGeneration !== item.validationGeneration) return;\n\t\t\t\tthis.applyValidation(item, result, transaction);\n\t\t\t}).catch((error) => {\n\t\t\t\tif (validationGeneration !== item.validationGeneration) return;\n\t\t\t\tthis.applyValidation(item, {\n\t\t\t\t\tcode: this.validationCode(item),\n\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error)\n\t\t\t\t}, transaction);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis.applyValidation(item, validation, transaction);\n\t}\n\tcancelItem(interruptId, transaction) {\n\t\tthis.assertItemMutable(transaction);\n\t\tconst item = this.findItem(interruptId);\n\t\tthis.invalidateRetry();\n\t\titem.validationGeneration++;\n\t\titem.resolution = Object.freeze(resolutionWithContinuation(item, {\n\t\t\tinterruptId,\n\t\t\tstatus: \"cancelled\"\n\t\t}));\n\t\titem.status = \"staged\";\n\t\titem.error = void 0;\n\t\tif (!transaction) {\n\t\t\tthis.publish();\n\t\t\tthis.maybeSubmit();\n\t\t}\n\t}\n\tclearItem(interruptId, transaction) {\n\t\tthis.assertItemMutable(transaction);\n\t\tconst item = this.findItem(interruptId);\n\t\tthis.invalidateRetry();\n\t\titem.validationGeneration++;\n\t\titem.resolution = void 0;\n\t\titem.error = void 0;\n\t\titem.status = \"pending\";\n\t\tif (!transaction) this.publish();\n\t}\n\tmaybeSubmit() {\n\t\tconst hasGeneric = this.items.some((item) => item.kind === \"generic\");\n\t\tconst ours = this.items.filter((item) => isClientOwnedInterrupt(item) && !(hasGeneric && item.kind === \"client-tool-execution\"));\n\t\tif (ours.length === 0 || ours.some((item) => item.resolution === void 0 || item.status !== \"staged\")) return;\n\t\tconst hydration = this.requireHydration();\n\t\tconst canonical = canonicalizeInterruptResolutions(ours.map((item) => item.resolution).filter((item) => item !== void 0));\n\t\tconst submission = Object.freeze({\n\t\t\tthreadId: hydration.threadId,\n\t\t\tinterruptedRunId: hydration.interruptedRunId,\n\t\t\tgeneration: hydration.generation,\n\t\t\tresolutions: canonical.resolutions,\n\t\t\tcanonicalResolutions: canonical.canonicalResolutions,\n\t\t\tfingerprint: canonical.fingerprint\n\t\t});\n\t\tthis.submitBatch(submission);\n\t}\n\tapplyValidation(item, result, transaction) {\n\t\tif (!(\"valid\" in result)) {\n\t\t\titem.status = \"error\";\n\t\t\tconst itemError = this.itemError(item.descriptor.id, result.code, result.message, result.path);\n\t\t\titem.error = itemError;\n\t\t\tif (item.kind === \"client-tool-execution\") this.rootErrors = Object.freeze([...this.rootErrors.filter((error) => !(error.code === \"item-validation-failed\" && error.interruptIds.includes(item.descriptor.id))), Object.freeze({\n\t\t\t\tscope: \"batch\",\n\t\t\t\tcode: \"item-validation-failed\",\n\t\t\t\tmessage: itemError.message,\n\t\t\t\tsource: \"client\",\n\t\t\t\tretryable: false,\n\t\t\t\tinterruptIds: Object.freeze([item.descriptor.id]),\n\t\t\t\tthreadId: itemError.threadId,\n\t\t\t\tinterruptedRunId: itemError.interruptedRunId,\n\t\t\t\tgeneration: itemError.generation\n\t\t\t})]);\n\t\t\tif (!transaction) this.publish();\n\t\t\treturn;\n\t\t}\n\t\titem.resolution = cloneAndDeepFreezeJson(resolutionWithContinuation(item, {\n\t\t\tinterruptId: item.descriptor.id,\n\t\t\tstatus: \"resolved\",\n\t\t\tpayload: result.payload\n\t\t}));\n\t\titem.status = \"staged\";\n\t\titem.error = void 0;\n\t\tif (!transaction) {\n\t\t\tthis.publish();\n\t\t\tthis.maybeSubmit();\n\t\t}\n\t}\n\tvalidateCandidate(item, payload) {\n\t\tif (item.kind === \"generic\") {\n\t\t\tconst validation = validateWithSchema(item.definition?.responseSchema ?? item.descriptor.responseSchema, payload, \"invalid-payload\");\n\t\t\tif (item.definition === void 0) return validation;\n\t\t\tconst preserveInput = (result) => \"valid\" in result ? {\n\t\t\t\tvalid: true,\n\t\t\t\tpayload\n\t\t\t} : result;\n\t\t\treturn isPromiseLike(validation) ? Promise.resolve(validation).then(preserveInput) : preserveInput(validation);\n\t\t}\n\t\tif (item.kind === \"client-tool-execution\") return validateWithSchema(item.tool?.outputSchema, payload, \"invalid-tool-output\");\n\t\treturn this.validateApprovalCandidate(item, payload);\n\t}\n\tvalidateApprovalCandidate(item, payload) {\n\t\tif (!isUnknownObject(payload) || typeof payload[\"approved\"] !== \"boolean\") return {\n\t\t\tcode: \"invalid-payload\",\n\t\t\tmessage: \"Tool approval resolutions require an approved boolean.\"\n\t\t};\n\t\tconst approved = payload[\"approved\"];\n\t\tconst editedArgs = payload[\"editedArgs\"];\n\t\tif (!approved && editedArgs !== void 0) return {\n\t\t\tcode: \"invalid-edited-args\",\n\t\t\tmessage: \"Rejected tool approvals cannot edit tool arguments.\"\n\t\t};\n\t\tif (approved && editedArgs !== void 0) {\n\t\t\tconst editedValidation = validateWithSchema(item.tool?.inputSchema, editedArgs, \"invalid-edited-args\");\n\t\t\tif (isPromiseLike(editedValidation)) return Promise.resolve(editedValidation).then((result) => \"valid\" in result ? this.validateApprovalPayload(item, payload, result.payload) : result);\n\t\t\tif (!(\"valid\" in editedValidation)) return editedValidation;\n\t\t\treturn this.validateApprovalPayload(item, payload, editedValidation.payload);\n\t\t}\n\t\treturn this.validateApprovalPayload(item, payload, void 0);\n\t}\n\tvalidateApprovalPayload(item, envelope, validatedEditedArgs) {\n\t\tconst approved = envelope[\"approved\"] === true;\n\t\tconst schema = this.approvalBranchSchema(item.tool, approved);\n\t\tconst branchPayload = envelope[\"payload\"];\n\t\tif (schema === void 0 && branchPayload !== void 0) return {\n\t\t\tcode: \"invalid-payload\",\n\t\t\tmessage: \"This approval branch does not accept a payload.\"\n\t\t};\n\t\tif (schema !== void 0 && branchPayload === void 0) return {\n\t\t\tcode: \"invalid-payload\",\n\t\t\tmessage: \"This approval branch requires a payload.\"\n\t\t};\n\t\tconst validation = validateWithSchema(schema, branchPayload, \"invalid-payload\");\n\t\tconst buildEnvelope = (result) => {\n\t\t\tif (!(\"valid\" in result)) return result;\n\t\t\treturn {\n\t\t\t\tvalid: true,\n\t\t\t\tpayload: {\n\t\t\t\t\tapproved,\n\t\t\t\t\t...validatedEditedArgs !== void 0 ? { editedArgs: validatedEditedArgs } : {},\n\t\t\t\t\t...schema !== void 0 ? { payload: result.payload } : {}\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t\treturn isPromiseLike(validation) ? Promise.resolve(validation).then(buildEnvelope) : buildEnvelope(validation);\n\t}\n\tapprovalBranchSchema(tool, approved) {\n\t\tconst approvalSchema = tool?.approvalSchema;\n\t\tif (!isUnknownObject(approvalSchema)) return approvalSchema;\n\t\tif (!(\"approve\" in approvalSchema || \"reject\" in approvalSchema)) return approvalSchema;\n\t\treturn approved ? approvalSchema[\"approve\"] : approvalSchema[\"reject\"];\n\t}\n\tvalidationCode(item) {\n\t\treturn item.kind === \"client-tool-execution\" ? \"invalid-tool-output\" : \"invalid-payload\";\n\t}\n\tresolveBooleanBulk(approved) {\n\t\tconst resolvable = this.items.filter((item) => isClientOwnedInterrupt(item) && item.kind !== \"client-tool-execution\");\n\t\tif (!resolvable.every((item) => item.kind === \"tool-approval\" && this.approvalBranchSchema(item.tool, approved) === void 0) || resolvable.length === 0) {\n\t\t\tthis.addRootError(\"unsupported-bulk-operation\", \"Boolean bulk resolution requires payloadless tool approvals.\", false);\n\t\t\treturn;\n\t\t}\n\t\tthis.invalidateRetry();\n\t\tfor (const item of resolvable) {\n\t\t\titem.validationGeneration++;\n\t\t\titem.resolution = cloneAndDeepFreezeJson({\n\t\t\t\tinterruptId: item.descriptor.id,\n\t\t\t\tstatus: \"resolved\",\n\t\t\t\tpayload: { approved }\n\t\t\t});\n\t\t\titem.status = \"staged\";\n\t\t\titem.error = void 0;\n\t\t}\n\t\tthis.publish();\n\t\tthis.maybeSubmit();\n\t}\n\tresolveTransaction(resolver) {\n\t\tconst checkpoints = this.items.map((item) => ({\n\t\t\tstatus: item.status,\n\t\t\t...item.resolution !== void 0 ? { resolution: item.resolution } : {},\n\t\t\t...item.error !== void 0 ? { error: item.error } : {},\n\t\t\tvalidationGeneration: item.validationGeneration\n\t\t}));\n\t\tconst token = { active: true };\n\t\tthis.activeTransaction = token;\n\t\tconst stable = this.buildSnapshot(token).filter(isRootResolvableInterrupt);\n\t\tlet failure;\n\t\ttry {\n\t\t\tfor (const interrupt of stable) {\n\t\t\t\tconst result = resolver(interrupt);\n\t\t\t\tif (result !== void 0) {\n\t\t\t\t\tfailure = {\n\t\t\t\t\t\tcode: isPromiseLike(result) ? \"async-resolver\" : \"inactive-transaction\",\n\t\t\t\t\t\tmessage: isPromiseLike(result) ? \"Interrupt transaction resolvers must be synchronous.\" : \"Interrupt transaction resolvers must return literal undefined.\"\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (failure === void 0 && this.items.some((item) => isClientOwnedInterrupt(item) && item.kind !== \"client-tool-execution\" && (item.resolution === void 0 || item.status !== \"staged\"))) failure = {\n\t\t\t\tcode: \"incomplete-batch\",\n\t\t\t\tmessage: \"Interrupt transaction did not resolve every item.\"\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tfailure = {\n\t\t\t\tcode: \"item-validation-failed\",\n\t\t\t\tmessage: error instanceof Error ? error.message : String(error)\n\t\t\t};\n\t\t} finally {\n\t\t\ttoken.active = false;\n\t\t\tthis.activeTransaction = void 0;\n\t\t}\n\t\tif (failure) {\n\t\t\tthis.restoreCheckpoints(checkpoints);\n\t\t\tthis.addRootError(failure.code, failure.message, false);\n\t\t\treturn;\n\t\t}\n\t\tthis.publish();\n\t\tthis.maybeSubmit();\n\t}\n\trestoreCheckpoints(checkpoints) {\n\t\tthis.items.forEach((item, index) => {\n\t\t\tconst checkpoint = checkpoints[index];\n\t\t\tif (!checkpoint) return;\n\t\t\titem.status = checkpoint.status;\n\t\t\titem.resolution = checkpoint.resolution;\n\t\t\titem.error = checkpoint.error;\n\t\t\titem.validationGeneration = checkpoint.validationGeneration + 1;\n\t\t});\n\t\tthis.publish();\n\t}\n\tassertItemMutable(transaction) {\n\t\tif (transaction && !transaction.active) throw new Error(\"Interrupt transaction is inactive.\");\n\t\tif (this.activeTransaction && transaction !== this.activeTransaction) throw new Error(\"Interrupt transaction is inactive.\");\n\t\tif (this.resuming) throw new Error(\"Interrupts cannot be mutated while submitting.\");\n\t}\n\tassertRootMutable() {\n\t\tif (this.activeTransaction) throw new Error(\"Interrupt transaction is already active.\");\n\t\tif (this.resuming) throw new Error(\"Interrupts cannot be mutated while submitting.\");\n\t}\n\tinvalidateRetry() {\n\t\tthis.retrySubmission = void 0;\n\t}\n\tsubmitBatch(submission) {\n\t\tconst operation = { submission };\n\t\tthis.activeSubmissionOperation = operation;\n\t\tthis.resuming = true;\n\t\tthis.retrySubmission = void 0;\n\t\tfor (const item of this.items) if (isClientOwnedInterrupt(item)) item.status = \"submitting\";\n\t\tthis.publish();\n\t\tthis.performSubmission(operation);\n\t}\n\tasync performSubmission(operation) {\n\t\ttry {\n\t\t\tawait this.options.submit(operation.submission);\n\t\t} catch (error) {\n\t\t\tif (this.activeSubmissionOperation !== operation) return;\n\t\t\tthis.handleSubmissionFailure(error, operation.submission);\n\t\t} finally {\n\t\t\tif (this.activeSubmissionOperation === operation) {\n\t\t\t\tthis.activeSubmissionOperation = void 0;\n\t\t\t\tthis.resuming = false;\n\t\t\t\tthis.publish();\n\t\t\t}\n\t\t}\n\t}\n\thandleSubmissionFailure(error, submission) {\n\t\tconst errors = readSubmissionErrors(error);\n\t\tif (errors.length === 0) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.addRootError(\"transport\", message, true, \"transport\");\n\t\t\tthis.retrySubmission = submission;\n\t\t\tfor (const item of this.items) if (isClientOwnedInterrupt(item)) item.status = \"error\";\n\t\t\treturn;\n\t\t}\n\t\tconst correlatedErrors = errors.filter((submissionError) => submissionErrorMatchesActiveBatch(submissionError, submission));\n\t\tif (correlatedErrors.length !== errors.length) this.addRootError(\"protocol\", \"Interrupt submission errors did not match the active batch.\", false);\n\t\tlet nonRetryable = false;\n\t\tlet retryable = false;\n\t\tconst batchErrors = [];\n\t\tfor (const submissionError of correlatedErrors) {\n\t\t\tif (submissionError.code === \"stale\" || submissionError.code === \"expired\" || submissionError.code === \"conflict\") nonRetryable = true;\n\t\t\tretryable ||= submissionError.retryable;\n\t\t\tif (submissionError.scope === \"item\") {\n\t\t\t\tconst item = this.items.find((candidate) => isClientOwnedInterrupt(candidate) && candidate.descriptor.id === submissionError.interruptId);\n\t\t\t\tif (item) {\n\t\t\t\t\titem.status = \"error\";\n\t\t\t\t\titem.error = cloneAndDeepFreezeJson(submissionError);\n\t\t\t\t}\n\t\t\t} else batchErrors.push(cloneAndDeepFreezeJson(submissionError));\n\t\t}\n\t\tconst mergedBatchErrors = mergeSubmissionBatchErrors(this.rootErrors, this.submissionRootErrors, batchErrors);\n\t\tthis.rootErrors = mergedBatchErrors.rootErrors;\n\t\tthis.submissionRootErrors = mergedBatchErrors.submissionRootErrors;\n\t\tfor (const item of this.items) if (isClientOwnedInterrupt(item) && item.status === \"submitting\") item.status = \"error\";\n\t\tthis.retrySubmission = retryable && !nonRetryable ? submission : void 0;\n\t}\n\taddRootError(code, message, retryable, source = \"client\") {\n\t\tconst hydration = this.requireHydration();\n\t\tthis.rootErrors = Object.freeze([...this.rootErrors, Object.freeze({\n\t\t\tscope: \"batch\",\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\tsource,\n\t\t\tretryable,\n\t\t\tinterruptIds: Object.freeze(this.items.filter(isClientOwnedInterrupt).map((item) => item.descriptor.id)),\n\t\t\tthreadId: hydration.threadId,\n\t\t\tinterruptedRunId: hydration.interruptedRunId,\n\t\t\tgeneration: hydration.generation\n\t\t})]);\n\t\tthis.publish();\n\t}\n\tfindItem(interruptId) {\n\t\tconst item = this.items.find((candidate) => candidate.descriptor.id === interruptId);\n\t\tif (!item) throw new Error(`Unknown interrupt: ${interruptId}`);\n\t\treturn item;\n\t}\n\trequireHydration() {\n\t\tif (!this.hydration) throw new Error(\"InterruptManager is not hydrated.\");\n\t\treturn this.hydration;\n\t}\n\titemError(interruptId, code, message, path) {\n\t\tconst hydration = this.requireHydration();\n\t\treturn Object.freeze({\n\t\t\tscope: \"item\",\n\t\t\tinterruptId,\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\t...path !== void 0 ? { path: Object.freeze([...path]) } : {},\n\t\t\tsource: \"client\",\n\t\t\tretryable: false,\n\t\t\tthreadId: hydration.threadId,\n\t\t\tinterruptedRunId: hydration.interruptedRunId,\n\t\t\tgeneration: hydration.generation\n\t\t});\n\t}\n};\n//#endregion\nexport { InterruptManager };\n\n//# sourceMappingURL=interrupt-manager.js.map","import { ByokUnresolvedProviderError, isProviderId } from \"@tanstack/ai/byok\";\n//#region src/byok/resolve.ts\nfunction resolveByokProviderId(byokProvider, ...candidates) {\n\tconst fromFn = byokProvider?.();\n\tif (isProviderId(fromFn)) return fromFn;\n\tfor (const candidate of candidates) if (isProviderId(candidate)) return candidate;\n}\n/**\n* Prepare and stamp headers for one resolved slug. Throws instead of\n* attaching every stored key when the slug is missing.\n*/\nasync function prepareResolvedByokHeaders(byok, provider) {\n\tif (!provider) throw new ByokUnresolvedProviderError();\n\tawait byok.prepare(provider);\n\treturn byok.headers(provider);\n}\n//#endregion\nexport { prepareResolvedByokHeaders, resolveByokProviderId };\n\n//# sourceMappingURL=resolve.js.map","//#region src/envelope.ts\nfunction createRuntimeId() {\n\tconst cryptoLike = globalThis.crypto;\n\tif (cryptoLike?.randomUUID) return cryptoLike.randomUUID();\n\treturn Math.random().toString(36).slice(2);\n}\nvar memoizedRuntimeId;\nfunction getRuntimeId() {\n\tif (memoizedRuntimeId !== void 0) return memoizedRuntimeId;\n\tif (!globalThis.__TANSTACK_AI_DEVTOOLS_RUNTIME_ID__) globalThis.__TANSTACK_AI_DEVTOOLS_RUNTIME_ID__ = createRuntimeId();\n\tmemoizedRuntimeId = globalThis.__TANSTACK_AI_DEVTOOLS_RUNTIME_ID__;\n\treturn memoizedRuntimeId;\n}\nvar eventCounter = 0;\nfunction idPart(value) {\n\tif (value === void 0 || value === null || value === \"\") return \"missing\";\n\treturn `value-${encodeURIComponent(String(value))}`;\n}\nfunction timestampBucket(timestamp) {\n\treturn Math.floor(timestamp / 1e3) * 1e3;\n}\nfunction createAIDevtoolsEventEnvelope(input) {\n\tconst resolvedRuntimeId = input.runtimeId ?? getRuntimeId();\n\tconst eventId = input.eventId && input.eventId.length > 0 ? input.eventId : [\n\t\tinput.source,\n\t\tinput.eventType,\n\t\tidPart(resolvedRuntimeId),\n\t\tidPart(input.clientId),\n\t\tidPart(input.requestId),\n\t\tidPart(input.streamId),\n\t\tidPart(input.hookId),\n\t\tidPart(input.threadId),\n\t\tidPart(input.runId),\n\t\tidPart(input.messageId),\n\t\tidPart(input.toolCallId),\n\t\tidPart(input.sequence),\n\t\tinput.timestamp,\n\t\tgetRuntimeId(),\n\t\teventCounter++\n\t].join(\":\");\n\treturn {\n\t\t...input,\n\t\truntimeId: resolvedRuntimeId,\n\t\teventId\n\t};\n}\nfunction getAIDevtoolsRuntimeId() {\n\treturn getRuntimeId();\n}\nfunction getAIDevtoolsDedupeKey(event) {\n\tif (event.eventId && event.eventId.length > 0) return `event:${event.eventId}`;\n\treturn [\n\t\t\"fallback\",\n\t\tevent.source,\n\t\tevent.eventType,\n\t\tevent.visibility,\n\t\tidPart(event.clientId),\n\t\tidPart(event.requestId),\n\t\tidPart(event.streamId),\n\t\tidPart(event.hookId),\n\t\tidPart(event.threadId),\n\t\tidPart(event.runId),\n\t\tidPart(event.messageId),\n\t\tidPart(event.toolCallId),\n\t\tidPart(event.sequence),\n\t\ttimestampBucket(event.timestamp)\n\t].join(\":\");\n}\n//#endregion\nexport { createAIDevtoolsEventEnvelope, getAIDevtoolsDedupeKey, getAIDevtoolsRuntimeId };\n\n//# sourceMappingURL=envelope.js.map","class EventClient {\n #enabled = true;\n #pluginId;\n #eventTarget;\n #debug;\n #queuedEvents;\n #connected;\n #connectIntervalId;\n #connectEveryMs;\n #retryCount = 0;\n #maxRetries = 5;\n #connecting = false;\n #failedToConnect = false;\n #internalEventTarget = null;\n #onConnected = () => {\n this.debugLog(\"Connected to event bus\");\n this.#connected = true;\n this.#connecting = false;\n this.debugLog(\"Emitting queued events\", this.#queuedEvents);\n this.#queuedEvents.forEach((event) => this.emitEventToBus(event));\n this.#queuedEvents = [];\n this.stopConnectLoop();\n this.#eventTarget().removeEventListener(\n \"tanstack-connect-success\",\n this.#onConnected\n );\n };\n // fired off right away and then at intervals\n #retryConnection = () => {\n if (this.#retryCount < this.#maxRetries) {\n this.#retryCount++;\n this.dispatchCustomEvent(\"tanstack-connect\", {});\n return;\n }\n this.#eventTarget().removeEventListener(\n \"tanstack-connect\",\n this.#retryConnection\n );\n this.#failedToConnect = true;\n this.debugLog(\"Max retries reached, giving up on connection\");\n this.stopConnectLoop();\n };\n // This is run to register connection handlers on first emit attempt\n #connectFunction = () => {\n if (this.#connecting) return;\n this.#connecting = true;\n this.#eventTarget().addEventListener(\n \"tanstack-connect-success\",\n this.#onConnected\n );\n this.#retryConnection();\n };\n constructor({\n pluginId,\n debug = false,\n enabled = true,\n reconnectEveryMs = 300\n }) {\n this.#pluginId = pluginId;\n this.#enabled = enabled;\n this.#eventTarget = this.getGlobalTarget;\n this.#debug = debug;\n this.debugLog(\" Initializing event subscription for plugin\", this.#pluginId);\n this.#queuedEvents = [];\n this.#connected = false;\n this.#failedToConnect = false;\n this.#connectIntervalId = null;\n this.#connectEveryMs = reconnectEveryMs;\n }\n startConnectLoop() {\n if (this.#connectIntervalId !== null || this.#connected) return;\n this.debugLog(`Starting connect loop (every ${this.#connectEveryMs}ms)`);\n this.#connectIntervalId = setInterval(\n this.#retryConnection,\n this.#connectEveryMs\n );\n }\n stopConnectLoop() {\n this.#connecting = false;\n if (this.#connectIntervalId === null) {\n return;\n }\n clearInterval(this.#connectIntervalId);\n this.#connectIntervalId = null;\n this.#queuedEvents = [];\n this.debugLog(\"Stopped connect loop\");\n }\n debugLog(...args) {\n if (this.#debug) {\n console.log(`🌴 [tanstack-devtools:${this.#pluginId}-plugin]`, ...args);\n }\n }\n getGlobalTarget() {\n if (typeof globalThis !== \"undefined\" && globalThis.__TANSTACK_EVENT_TARGET__) {\n this.debugLog(\"Using global event target\");\n return globalThis.__TANSTACK_EVENT_TARGET__;\n }\n if (typeof window !== \"undefined\" && typeof window.addEventListener !== \"undefined\") {\n this.debugLog(\"Using window as event target\");\n return window;\n }\n const eventTarget = typeof EventTarget !== \"undefined\" ? new EventTarget() : void 0;\n if (typeof eventTarget === \"undefined\" || typeof eventTarget.addEventListener === \"undefined\") {\n this.debugLog(\n \"No event mechanism available, running in non-web environment\"\n );\n return {\n addEventListener: () => {\n },\n removeEventListener: () => {\n },\n dispatchEvent: () => false\n };\n }\n this.debugLog(\"Using new EventTarget as fallback\");\n return eventTarget;\n }\n getPluginId() {\n return this.#pluginId;\n }\n dispatchCustomEventShim(eventName, detail) {\n try {\n const event = new Event(eventName, {\n detail\n });\n this.#eventTarget().dispatchEvent(event);\n } catch (e) {\n this.debugLog(\"Failed to dispatch shim event\");\n }\n }\n dispatchCustomEvent(eventName, detail) {\n try {\n this.#eventTarget().dispatchEvent(new CustomEvent(eventName, { detail }));\n } catch (e) {\n this.dispatchCustomEventShim(eventName, detail);\n }\n }\n emitEventToBus(event) {\n this.debugLog(\"Emitting event to client bus\", event);\n this.dispatchCustomEvent(\"tanstack-dispatch-event\", event);\n }\n createEventPayload(eventSuffix, payload) {\n return {\n type: `${this.#pluginId}:${eventSuffix}`,\n payload,\n pluginId: this.#pluginId\n };\n }\n emit(eventSuffix, payload) {\n if (!this.#enabled) {\n this.debugLog(\n \"Event bus client is disabled, not emitting event\",\n eventSuffix,\n payload\n );\n return;\n }\n if (this.#internalEventTarget) {\n this.debugLog(\n \"Emitting event to internal event target\",\n eventSuffix,\n payload\n );\n this.#internalEventTarget.dispatchEvent(\n new CustomEvent(`${this.#pluginId}:${eventSuffix}`, {\n detail: this.createEventPayload(eventSuffix, payload)\n })\n );\n }\n if (this.#failedToConnect) {\n this.debugLog(\"Previously failed to connect, not emitting to bus\");\n return;\n }\n if (!this.#connected) {\n this.debugLog(\"Bus not available, will be pushed as soon as connected\");\n this.#queuedEvents.push(this.createEventPayload(eventSuffix, payload));\n if (typeof CustomEvent !== \"undefined\" && !this.#connecting) {\n this.#connectFunction();\n this.startConnectLoop();\n }\n return;\n }\n return this.emitEventToBus(this.createEventPayload(eventSuffix, payload));\n }\n on(eventSuffix, cb, options) {\n const withEventTarget = options?.withEventTarget ?? false;\n const eventName = `${this.#pluginId}:${eventSuffix}`;\n if (withEventTarget) {\n if (!this.#internalEventTarget) {\n this.#internalEventTarget = new EventTarget();\n }\n this.#internalEventTarget.addEventListener(eventName, (e) => {\n cb(e.detail);\n });\n }\n if (!this.#enabled) {\n this.debugLog(\n \"Event bus client is disabled, not registering event\",\n eventName\n );\n return () => {\n };\n }\n const handler = (e) => {\n this.debugLog(\"Received event from bus\", e.detail);\n cb(e.detail);\n };\n this.#eventTarget().addEventListener(eventName, handler);\n this.debugLog(\"Registered event to bus\", eventName);\n return () => {\n if (withEventTarget) {\n this.#internalEventTarget?.removeEventListener(eventName, handler);\n }\n this.#eventTarget().removeEventListener(eventName, handler);\n };\n }\n onAll(cb) {\n if (!this.#enabled) {\n this.debugLog(\"Event bus client is disabled, not registering event\");\n return () => {\n };\n }\n const handler = (e) => {\n const event = e.detail;\n cb(event);\n };\n this.#eventTarget().addEventListener(\"tanstack-devtools-global\", handler);\n return () => this.#eventTarget().removeEventListener(\n \"tanstack-devtools-global\",\n handler\n );\n }\n onAllPluginEvents(cb) {\n if (!this.#enabled) {\n this.debugLog(\"Event bus client is disabled, not registering event\");\n return () => {\n };\n }\n const handler = (e) => {\n const event = e.detail;\n if (this.#pluginId && event.pluginId !== this.#pluginId) {\n return;\n }\n cb(event);\n };\n this.#eventTarget().addEventListener(\"tanstack-devtools-global\", handler);\n return () => this.#eventTarget().removeEventListener(\n \"tanstack-devtools-global\",\n handler\n );\n }\n}\nexport {\n EventClient\n};\n//# sourceMappingURL=plugin.js.map\n","import { createAIDevtoolsEventEnvelope, getAIDevtoolsDedupeKey, getAIDevtoolsRuntimeId } from \"./envelope.js\";\nimport { devtoolsMiddleware } from \"./devtools-middleware.js\";\nimport { EventClient } from \"@tanstack/devtools-event-client\";\n//#region src/index.ts\nvar AiEventClient = class extends EventClient {\n\tconstructor() {\n\t\tsuper({ pluginId: \"tanstack-ai-devtools\" });\n\t}\n};\nvar aiEventClientKey = Symbol.for(\"tanstack.ai.devtools.eventClient\");\nfunction getAiEventClient() {\n\tconst global = globalThis;\n\tconst existing = global[aiEventClientKey];\n\tif (existing) return existing;\n\tconst eventClient = new AiEventClient();\n\tglobal[aiEventClientKey] = eventClient;\n\treturn eventClient;\n}\nvar aiEventClient = getAiEventClient();\nfunction emitAIDevtoolsEvent(eventName, payload) {\n\taiEventClient.emit(eventName, payload);\n}\nfunction dispatchAIDevtoolsEvent(eventName, payload) {\n\tif (typeof window === \"undefined\" || typeof window.dispatchEvent !== \"function\" || typeof CustomEvent === \"undefined\") return;\n\twindow.dispatchEvent(new CustomEvent(\"tanstack-dispatch-event\", { detail: aiEventClient.createEventPayload(eventName, payload) }));\n}\n//#endregion\nexport { aiEventClient, createAIDevtoolsEventEnvelope, devtoolsMiddleware, dispatchAIDevtoolsEvent, emitAIDevtoolsEvent, getAIDevtoolsDedupeKey, getAIDevtoolsRuntimeId };\n\n//# sourceMappingURL=index.js.map","import { aiEventClient, createAIDevtoolsEventEnvelope } from \"@tanstack/ai-event-client\";\n//#region src/events.ts\n/**\n* Abstract base class for ChatClient event emission\n*/\nvar ChatClientEventEmitter = class {\n\tclientId;\n\tconstructor(clientId) {\n\t\tthis.clientId = clientId;\n\t}\n\t/**\n\t* Emit client created event\n\t*/\n\tclientCreated(initialMessageCount) {\n\t\tthis.emitEvent(\"client:created\", { initialMessageCount });\n\t}\n\t/**\n\t* Emit loading state changed event\n\t*/\n\tloadingChanged(isLoading) {\n\t\tthis.emitEvent(\"client:loading:changed\", { isLoading });\n\t}\n\t/**\n\t* Emit error state changed event\n\t*/\n\terrorChanged(error) {\n\t\tthis.emitEvent(\"client:error:changed\", { error });\n\t}\n\t/**\n\t* Emit text update events (combines processor and client events)\n\t*/\n\ttextUpdated(streamId, messageId, content, context) {\n\t\tthis.emitEvent(\"text:chunk:content\", {\n\t\t\tstreamId,\n\t\t\tmessageId,\n\t\t\tcontent,\n\t\t\t...context\n\t\t});\n\t}\n\t/**\n\t* Emit tool call state change events (combines processor and client events)\n\t*/\n\ttoolCallStateChanged(streamId, messageId, toolCallId, toolName, state, args, context) {\n\t\tthis.emitEvent(\"tools:call:updated\", {\n\t\t\tstreamId,\n\t\t\tmessageId,\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tstate,\n\t\t\targuments: args,\n\t\t\t...context\n\t\t});\n\t}\n\t/**\n\t* Emit tool result state change event\n\t*/\n\t/**\n\t* Emit thinking update event\n\t*/\n\tthinkingUpdated(streamId, messageId, content, delta, context) {\n\t\tthis.emitEvent(\"text:chunk:thinking\", {\n\t\t\tstreamId,\n\t\t\tmessageId,\n\t\t\tcontent,\n\t\t\tdelta,\n\t\t\t...context\n\t\t});\n\t}\n\tstructuredOutputChanged(eventName, streamId, messageId, output, context) {\n\t\tthis.emitEvent(eventName, {\n\t\t\tstreamId,\n\t\t\tmessageId,\n\t\t\t...output,\n\t\t\t...context\n\t\t});\n\t}\n\t/**\n\t* Emit approval requested event\n\t*/\n\tapprovalRequested(streamId, messageId, toolCallId, toolName, input, approvalId, context) {\n\t\tthis.emitEvent(\"tools:approval:requested\", {\n\t\t\tstreamId,\n\t\t\tmessageId,\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\tinput,\n\t\t\tapprovalId,\n\t\t\t...context\n\t\t});\n\t}\n\t/**\n\t* Emit message appended event\n\t*/\n\tmessageAppended(uiMessage, streamId, context) {\n\t\tconst content = uiMessage.parts.filter((part) => part.type === \"text\").map((part) => part.content).join(\" \");\n\t\tthis.emitEvent(\"text:message:created\", {\n\t\t\tstreamId,\n\t\t\tmessageId: uiMessage.id,\n\t\t\trole: uiMessage.role,\n\t\t\tcontent,\n\t\t\tparts: uiMessage.parts,\n\t\t\t...context\n\t\t});\n\t}\n\t/**\n\t* Emit message sent event.\n\t* Supports both simple string content and multimodal content arrays.\n\t*\n\t* @param messageId - The ID of the sent message\n\t* @param content - The message content (string or array of ContentPart for multimodal)\n\t*/\n\tmessageSent(messageId, content) {\n\t\tconst textContent = typeof content === \"string\" ? content : content.filter((part) => part.type === \"text\").map((part) => part.content).join(\"\");\n\t\tthis.emitEvent(\"text:message:created\", {\n\t\t\tmessageId,\n\t\t\trole: \"user\",\n\t\t\tcontent: textContent,\n\t\t\t...Array.isArray(content) && { parts: content }\n\t\t});\n\t\tthis.emitEvent(\"text:message:user\", {\n\t\t\tmessageId,\n\t\t\trole: \"user\",\n\t\t\tcontent: textContent,\n\t\t\t...Array.isArray(content) && { parts: content }\n\t\t});\n\t}\n\t/**\n\t* Emit reloaded event\n\t*/\n\treloaded(fromMessageIndex) {\n\t\tthis.emitEvent(\"client:reloaded\", { fromMessageIndex });\n\t}\n\t/**\n\t* Emit stopped event\n\t*/\n\tstopped() {\n\t\tthis.emitEvent(\"client:stopped\");\n\t}\n\t/**\n\t* Emit messages cleared event\n\t*/\n\tmessagesCleared() {\n\t\tthis.emitEvent(\"client:messages:cleared\");\n\t}\n\t/**\n\t* Emit tool result added event\n\t*/\n\ttoolResultAdded(toolCallId, toolName, output, state, context) {\n\t\tthis.emitEvent(\"tools:result:added\", {\n\t\t\ttoolCallId,\n\t\t\ttoolName,\n\t\t\toutput,\n\t\t\tstate,\n\t\t\t...context\n\t\t});\n\t}\n\t/**\n\t* Emit tool approval responded event\n\t*/\n\ttoolApprovalResponded(approvalId, toolCallId, approved, context) {\n\t\tthis.emitEvent(\"tools:approval:responded\", {\n\t\t\tapprovalId,\n\t\t\ttoolCallId,\n\t\t\tapproved,\n\t\t\t...context\n\t\t});\n\t}\n\t/**\n\t* Emit tool fixture applied event.\n\t*/\n\ttoolFixtureApplied(fixture) {\n\t\tthis.emitEvent(\"devtools:tool-fixture:applied\", { ...fixture });\n\t}\n};\n/**\n* Default implementation of ChatClientEventEmitter\n*/\nvar DefaultChatClientEventEmitter = class extends ChatClientEventEmitter {\n\t/**\n\t* Emit an event with automatic clientId and timestamp for client/tool events\n\t*/\n\temitEvent(eventName, data) {\n\t\tconst timestamp = Date.now();\n\t\tconst isUserVisibleEvent = eventName.startsWith(\"text:\") || eventName.startsWith(\"tools:\") || eventName.startsWith(\"structured-output:\") || eventName === \"devtools:tool-fixture:applied\";\n\t\tconst includesClientContext = eventName.startsWith(\"client:\") || eventName.startsWith(\"tools:\") || eventName.startsWith(\"text:\") || eventName.startsWith(\"structured-output:\") || eventName === \"devtools:tool-fixture:applied\";\n\t\tconst visibility = isUserVisibleEvent ? \"user-visible\" : \"client-state\";\n\t\tconst envelopeContext = {\n\t\t\thookId: this.clientId,\n\t\t\t...typeof data?.threadId === \"string\" ? { threadId: data.threadId } : {},\n\t\t\t...typeof data?.runId === \"string\" ? { runId: data.runId } : {},\n\t\t\t...typeof data?.streamId === \"string\" ? { streamId: data.streamId } : {},\n\t\t\t...typeof data?.messageId === \"string\" ? { messageId: data.messageId } : {},\n\t\t\t...typeof data?.toolCallId === \"string\" ? { toolCallId: data.toolCallId } : {}\n\t\t};\n\t\tif (includesClientContext) {\n\t\t\tconst envelope = createAIDevtoolsEventEnvelope({\n\t\t\t\teventType: eventName,\n\t\t\t\tclientId: this.clientId,\n\t\t\t\t...envelopeContext,\n\t\t\t\tsource: \"client\",\n\t\t\t\tvisibility,\n\t\t\t\ttimestamp\n\t\t\t});\n\t\t\taiEventClient.emit(eventName, {\n\t\t\t\t...data,\n\t\t\t\t...envelope\n\t\t\t});\n\t\t} else {\n\t\t\tconst envelope = createAIDevtoolsEventEnvelope({\n\t\t\t\teventType: eventName,\n\t\t\t\tsource: \"client\",\n\t\t\t\tvisibility: \"client-state\",\n\t\t\t\ttimestamp\n\t\t\t});\n\t\t\taiEventClient.emit(eventName, {\n\t\t\t\t...data,\n\t\t\t\t...envelope\n\t\t\t});\n\t\t}\n\t}\n};\n//#endregion\nexport { ChatClientEventEmitter, DefaultChatClientEventEmitter };\n\n//# sourceMappingURL=events.js.map","import { ChatClientEventEmitter } from \"./events.js\";\n//#region src/devtools-noop.ts\nvar NoOpChatClientEventEmitter = class extends ChatClientEventEmitter {\n\temitEvent() {}\n};\nvar NoOpChatDevtoolsBridge = class {\n\tevents;\n\tconstructor(options) {\n\t\tthis.events = new NoOpChatClientEventEmitter(options.clientId);\n\t}\n\temitRegistered() {}\n\temitUpdated() {}\n\temitSnapshot() {}\n\temitToolsRegistered() {}\n\temitRunLifecycle(_eventType, _runId, _status, _options) {}\n\tdeactivate() {}\n\tsupersede() {}\n\tdispose() {}\n\tmountWithTools(_initialMessageCount) {}\n\tnotifyToolsChanged() {}\n\tsetCurrentStreamId(_streamId) {}\n\trecordStreamId(_streamId) {}\n\tgetCurrentStreamId() {\n\t\treturn null;\n\t}\n\tgetLastStreamId() {\n\t\treturn null;\n\t}\n\tresolveStreamId() {\n\t\treturn \"\";\n\t}\n\tobserveChunk(_chunk) {}\n\trecordMemoryState(_value) {}\n\trecordCompactionEvent(_eventType, _value) {}\n\trecordCompactionState(_value) {}\n\trecordSkillsState(_value) {}\n\tbeginRun(_runId, _threadId) {}\n\tgetCurrentRunEventContext() {}\n\tgetCurrentOrLastRunEventContext() {}\n\tfindToolCallContext(toolCallId) {\n\t\treturn { toolCallId };\n\t}\n\tasync applyFixture(_fixture) {}\n};\nvar NoOpGenerationDevtoolsBridge = class {\n\tconstructor(_options) {}\n\temitRegistered() {}\n\temitUpdated() {}\n\temitSnapshot() {}\n\temitToolsRegistered() {}\n\temitRunLifecycle() {}\n\tdeactivate() {}\n\tsupersede() {}\n\tdispose() {}\n\tbeginRun(_input) {\n\t\treturn `noop-run-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\t}\n\tensureRunStarted(_runId) {}\n\tfinishRun(_runId, _eventType, _status, _error) {}\n\tgetActiveRunId() {\n\t\treturn null;\n\t}\n\tresetRuns() {}\n\trecordResultChange() {}\n\trecordLoadingChange() {}\n\trecordErrorChange(_error) {}\n\trecordStatusChange() {}\n\trecordProgressChange() {}\n\temitState() {}\n};\nvar NoOpVideoDevtoolsBridge = class extends NoOpGenerationDevtoolsBridge {\n\tconstructor(options) {\n\t\tsuper(options);\n\t}\n\trecordJobIdChange() {}\n\trecordVideoStatusChange() {}\n};\nvar createNoOpChatDevtoolsBridge = (options) => new NoOpChatDevtoolsBridge(options);\nvar createNoOpGenerationDevtoolsBridge = (options) => new NoOpGenerationDevtoolsBridge(options);\nvar createNoOpVideoDevtoolsBridge = (options) => new NoOpVideoDevtoolsBridge(options);\n//#endregion\nexport { NoOpChatDevtoolsBridge, NoOpGenerationDevtoolsBridge, NoOpVideoDevtoolsBridge, createNoOpChatDevtoolsBridge, createNoOpGenerationDevtoolsBridge, createNoOpVideoDevtoolsBridge };\n\n//# sourceMappingURL=devtools-noop.js.map","import { getChunkRunId } from \"./connection-adapters.js\";\n//#region src/client-persistor.ts\n/** Normalize a raw `getItem` result (legacy bare array or combined record). */\nfunction normalizePersistedState(raw) {\n\tif (Array.isArray(raw)) return { messages: raw };\n\tif (raw && Array.isArray(raw.messages)) return raw;\n}\nfunction getChunkToolCallId(chunk) {\n\treturn \"toolCallId\" in chunk && typeof chunk.toolCallId === \"string\" ? chunk.toolCallId : void 0;\n}\nfunction getChunkMessageId(chunk) {\n\treturn \"messageId\" in chunk && typeof chunk.messageId === \"string\" ? chunk.messageId : void 0;\n}\nfunction getChunkParentMessageId(chunk) {\n\treturn \"parentMessageId\" in chunk && typeof chunk.parentMessageId === \"string\" ? chunk.parentMessageId : void 0;\n}\n/**\n* Encapsulates everything persistence-related for `ChatClient` so the client\n* itself stays focused on streaming and message state.\n*\n* Two responsibilities live here:\n*\n* 1. **Storage orchestration** — hydrate from `getItem(id)` on creation, save a\n* combined `{ messages, resume? }` record via `setItem` on every change\n* through an ordered write queue, and `removeItem(id)` on clear (or when\n* both the transcript and resume pointer are empty). A generation counter\n* discards stale writes when a removal or a newer conversation supersedes\n* an in-flight async operation.\n* 2. **Clear-during-stream suppression** — when a conversation is cleared while a\n* stream is still producing, late chunks for the cleared run(s) must not\n* repopulate the now-empty state. The persistor tracks the cleared ids and\n* decides, per chunk, whether the client should ignore it.\n*\n* All adapter calls are best-effort: a throwing or rejecting adapter is swallowed\n* so storage problems never break the chat.\n*/\nvar ChatPersistor = class {\n\tadapter;\n\tid;\n\tapplyMessages;\n\tapplyResume;\n\tskipNextPersist = false;\n\tgeneration = 0;\n\tqueue = Promise.resolve();\n\tqueuePending = false;\n\tmessagesGeneration = 0;\n\tlastMessages = [];\n\tlastResume = null;\n\tclearedMessageIds = /* @__PURE__ */ new Set();\n\tclearedRunIds = /* @__PURE__ */ new Set();\n\tignoredActiveRunIds = /* @__PURE__ */ new Set();\n\tclearedToolCallIds = /* @__PURE__ */ new Set();\n\tcurrentRunlessRunId = null;\n\tconstructor(adapter, id, applyMessages, applyResume) {\n\t\tthis.adapter = adapter;\n\t\tthis.id = id;\n\t\tthis.applyMessages = applyMessages;\n\t\tthis.applyResume = applyResume;\n\t}\n\t/** Persist the current state as one combined `{ messages, resume? }` record. */\n\twriteState() {\n\t\tconst messages = [...this.lastMessages];\n\t\tif (messages.length === 0 && !this.lastResume) {\n\t\t\tconst generation = this.generation;\n\t\t\tthis.runOperation(() => {\n\t\t\t\tif (generation !== this.generation) return;\n\t\t\t\treturn this.adapter.removeItem(this.id);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tconst generation = this.generation;\n\t\tconst state = {\n\t\t\tmessages,\n\t\t\t...this.lastResume ? { resume: this.lastResume } : {}\n\t\t};\n\t\tthis.runOperation(() => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\treturn this.adapter.setItem(this.id, state);\n\t\t});\n\t}\n\t/**\n\t* Synchronously read the persisted state for constructor-time hydration.\n\t* Returns the normalized combined record, or a promise of it for async stores.\n\t*/\n\treadInitial() {\n\t\ttry {\n\t\t\tconst raw = this.adapter.getItem(this.id);\n\t\t\tif (raw instanceof Promise) return raw.then(normalizePersistedState).catch(() => void 0);\n\t\t\tconst state = normalizePersistedState(raw);\n\t\t\tif (state) {\n\t\t\t\tthis.lastMessages = state.messages;\n\t\t\t\tthis.lastResume = state.resume ?? null;\n\t\t\t}\n\t\t\treturn state;\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t}\n\t/**\n\t* Apply state from an async `getItem` once it resolves, unless the message\n\t* list has already changed since hydration began.\n\t*/\n\thydrateAsync(persistedState) {\n\t\tif (!(persistedState instanceof Promise)) return;\n\t\tconst hydrationGeneration = this.messagesGeneration;\n\t\tpersistedState.then((state) => {\n\t\t\tif (!state || this.messagesGeneration !== hydrationGeneration) return;\n\t\t\tthis.lastResume = state.resume ?? null;\n\t\t\tthis.lastMessages = state.messages;\n\t\t\tthis.applyMessages(state.messages);\n\t\t\tif (state.resume && this.applyResume) this.applyResume(state.resume);\n\t\t}).catch(() => {});\n\t}\n\t/**\n\t* Record a message-list change and queue a combined write for it. Skips a\n\t* single write after {@link beginClear} so the clear's empty snapshot isn't\n\t* persisted between `clearMessages()` and {@link remove}.\n\t*/\n\tnotifyMessagesChanged(messages) {\n\t\tthis.messagesGeneration++;\n\t\tthis.lastMessages = [...messages];\n\t\tif (this.skipNextPersist) {\n\t\t\tthis.skipNextPersist = false;\n\t\t\treturn;\n\t\t}\n\t\tthis.writeState();\n\t}\n\t/**\n\t* Record the current resume snapshot (which run to rejoin / which interrupts\n\t* are pending) and persist it alongside the messages. Pass `null` to clear it\n\t* once the run reaches a non-interrupt terminal.\n\t*/\n\tpersistResumeSnapshot(snapshot) {\n\t\tthis.lastResume = snapshot;\n\t\tif (this.skipNextPersist) return;\n\t\tthis.writeState();\n\t}\n\t/** Remove the persisted conversation. Invalidates any queued writes. */\n\tremove() {\n\t\tthis.lastMessages = [];\n\t\tthis.lastResume = null;\n\t\tconst generation = ++this.generation;\n\t\tthis.runOperation(() => {\n\t\t\tif (generation !== this.generation) return;\n\t\t\treturn this.adapter.removeItem(this.id);\n\t\t});\n\t}\n\trunOperation(operation) {\n\t\tif (this.queuePending) {\n\t\t\tconst queued = this.queue.then(operation).catch(() => {});\n\t\t\tthis.queue = queued;\n\t\t\tqueued.finally(() => {\n\t\t\t\tif (this.queue === queued) this.queuePending = false;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst result = operation();\n\t\t\tif (result instanceof Promise) {\n\t\t\t\tthis.queuePending = true;\n\t\t\t\tconst queued = result.catch(() => {});\n\t\t\t\tthis.queue = queued;\n\t\t\t\tqueued.finally(() => {\n\t\t\t\t\tif (this.queue === queued) this.queuePending = false;\n\t\t\t\t});\n\t\t\t}\n\t\t} catch {}\n\t}\n\t/**\n\t* Capture the message/run ids that exist at the moment of a clear so chunks\n\t* still arriving for them can be ignored.\n\t*/\n\tsnapshotClear(context) {\n\t\tfor (const message of context.messages) this.clearedMessageIds.add(message.id);\n\t\tfor (const runId of context.activeRunIds) {\n\t\t\tthis.clearedRunIds.add(runId);\n\t\t\tthis.ignoredActiveRunIds.add(runId);\n\t\t}\n\t\tif (context.currentRunId) {\n\t\t\tthis.clearedRunIds.add(context.currentRunId);\n\t\t\tthis.ignoredActiveRunIds.add(context.currentRunId);\n\t\t}\n\t}\n\t/** Mark that the next persisted message change (the clear itself) is skipped. */\n\tbeginClear() {\n\t\tthis.skipNextPersist = true;\n\t}\n\t/** Whether a chunk belongs to cleared state and should not be processed. */\n\tshouldIgnoreChunk(chunk) {\n\t\tconst runId = getChunkRunId(chunk);\n\t\tif (runId && this.clearedRunIds.has(runId)) {\n\t\t\tif (chunk.type === \"RUN_STARTED\") {\n\t\t\t\tthis.ignoredActiveRunIds.add(runId);\n\t\t\t\tthis.currentRunlessRunId = runId;\n\t\t\t}\n\t\t\tthis.markIgnoredChunkIds(chunk);\n\t\t\treturn true;\n\t\t}\n\t\tif (runId && this.ignoredActiveRunIds.has(runId)) {\n\t\t\tthis.markIgnoredChunkIds(chunk);\n\t\t\treturn true;\n\t\t}\n\t\tif (this.isRunlessChunkFromIgnoredRun(chunk)) {\n\t\t\tthis.markIgnoredChunkIds(chunk);\n\t\t\treturn true;\n\t\t}\n\t\tconst toolCallId = getChunkToolCallId(chunk);\n\t\tif (toolCallId && this.clearedToolCallIds.has(toolCallId)) return true;\n\t\tconst parentMessageId = getChunkParentMessageId(chunk);\n\t\tif (parentMessageId && this.clearedMessageIds.has(parentMessageId)) {\n\t\t\tif (toolCallId) this.clearedToolCallIds.add(toolCallId);\n\t\t\treturn true;\n\t\t}\n\t\tconst messageId = getChunkMessageId(chunk);\n\t\tif (!messageId) return false;\n\t\tif (this.clearedMessageIds.has(messageId)) return true;\n\t\treturn false;\n\t}\n\t/**\n\t* The owning client calls this when a run starts so runless content chunks\n\t* (adapters that omit `runId` on content events) can be attributed to it.\n\t*/\n\tonRunStarted(runId) {\n\t\tthis.currentRunlessRunId = runId;\n\t}\n\t/** Forget a settled run, advancing the runless pointer to another ignored run. */\n\tonRunSettled(runId) {\n\t\tthis.ignoredActiveRunIds.delete(runId);\n\t\tthis.clearedRunIds.delete(runId);\n\t\tif (this.currentRunlessRunId === runId) this.currentRunlessRunId = this.ignoredActiveRunIds.values().next().value ?? null;\n\t}\n\t/** A session-level (runId-less) RUN_ERROR clears all ignored-run tracking. */\n\tonSessionRunError() {\n\t\tthis.ignoredActiveRunIds.clear();\n\t\tthis.currentRunlessRunId = null;\n\t}\n\t/** Clear the ignored-active-run markers (mirrors a session-generating reset). */\n\tresetIgnored() {\n\t\tthis.ignoredActiveRunIds.clear();\n\t}\n\t/**\n\t* Consume the current runless run id (if any), forgetting it. Used when an\n\t* ignored, runId-less RUN_ERROR drains the run the client is still tracking.\n\t*/\n\ttakeRunlessRunId() {\n\t\tconst runId = this.currentRunlessRunId;\n\t\tif (!runId) return null;\n\t\tthis.ignoredActiveRunIds.delete(runId);\n\t\tthis.clearedRunIds.delete(runId);\n\t\tthis.currentRunlessRunId = this.ignoredActiveRunIds.values().next().value ?? null;\n\t\treturn runId;\n\t}\n\tmarkIgnoredChunkIds(chunk) {\n\t\tconst messageId = getChunkMessageId(chunk);\n\t\tif (messageId) this.clearedMessageIds.add(messageId);\n\t\tconst toolCallId = getChunkToolCallId(chunk);\n\t\tif (toolCallId) this.clearedToolCallIds.add(toolCallId);\n\t}\n\tisRunlessChunkFromIgnoredRun(chunk) {\n\t\tif (getChunkRunId(chunk) || !this.currentRunlessRunId) return false;\n\t\tif (!this.ignoredActiveRunIds.has(this.currentRunlessRunId) && !this.clearedRunIds.has(this.currentRunlessRunId)) return false;\n\t\treturn chunk.type === \"TEXT_MESSAGE_START\" || chunk.type === \"TEXT_MESSAGE_CONTENT\" || chunk.type === \"TOOL_CALL_START\" || chunk.type === \"TOOL_CALL_ARGS\" || chunk.type === \"TOOL_CALL_END\" || chunk.type === \"TOOL_CALL_RESULT\" || chunk.type === \"MESSAGES_SNAPSHOT\" || chunk.type === \"RUN_ERROR\";\n\t}\n};\n//#endregion\nexport { ChatPersistor };\n\n//# sourceMappingURL=client-persistor.js.map","import { getChunkRunId } from \"./connection-adapters.js\";\n//#region src/cleared-stream-tracker.ts\nfunction getChunkToolCallId(chunk) {\n\treturn \"toolCallId\" in chunk && typeof chunk.toolCallId === \"string\" ? chunk.toolCallId : void 0;\n}\nfunction getChunkMessageId(chunk) {\n\treturn \"messageId\" in chunk && typeof chunk.messageId === \"string\" ? chunk.messageId : void 0;\n}\nfunction getChunkParentMessageId(chunk) {\n\treturn \"parentMessageId\" in chunk && typeof chunk.parentMessageId === \"string\" ? chunk.parentMessageId : void 0;\n}\n/** Tracks stream chunks that must be ignored after the owning chat is cleared. */\nvar ClearedStreamTracker = class {\n\tclearedMessageIds = /* @__PURE__ */ new Set();\n\tclearedRunIds = /* @__PURE__ */ new Set();\n\tignoredActiveRunIds = /* @__PURE__ */ new Set();\n\tclearedToolCallIds = /* @__PURE__ */ new Set();\n\tcurrentRunlessRunId = null;\n\tsnapshotClear(context) {\n\t\tfor (const message of context.messages) this.clearedMessageIds.add(message.id);\n\t\tfor (const runId of context.activeRunIds) {\n\t\t\tthis.clearedRunIds.add(runId);\n\t\t\tthis.ignoredActiveRunIds.add(runId);\n\t\t}\n\t\tif (context.currentRunId) {\n\t\t\tthis.clearedRunIds.add(context.currentRunId);\n\t\t\tthis.ignoredActiveRunIds.add(context.currentRunId);\n\t\t}\n\t}\n\tshouldIgnoreChunk(chunk) {\n\t\tconst runId = getChunkRunId(chunk);\n\t\tif (runId && this.clearedRunIds.has(runId)) {\n\t\t\tif (chunk.type === \"RUN_STARTED\") {\n\t\t\t\tthis.ignoredActiveRunIds.add(runId);\n\t\t\t\tthis.currentRunlessRunId = runId;\n\t\t\t}\n\t\t\tthis.markIgnoredChunkIds(chunk);\n\t\t\treturn true;\n\t\t}\n\t\tif (runId && this.ignoredActiveRunIds.has(runId)) {\n\t\t\tthis.markIgnoredChunkIds(chunk);\n\t\t\treturn true;\n\t\t}\n\t\tif (this.isRunlessChunkFromIgnoredRun(chunk)) {\n\t\t\tthis.markIgnoredChunkIds(chunk);\n\t\t\treturn true;\n\t\t}\n\t\tconst toolCallId = getChunkToolCallId(chunk);\n\t\tif (toolCallId && this.clearedToolCallIds.has(toolCallId)) return true;\n\t\tconst parentMessageId = getChunkParentMessageId(chunk);\n\t\tif (parentMessageId && this.clearedMessageIds.has(parentMessageId)) {\n\t\t\tif (toolCallId) this.clearedToolCallIds.add(toolCallId);\n\t\t\treturn true;\n\t\t}\n\t\tconst messageId = getChunkMessageId(chunk);\n\t\treturn Boolean(messageId && this.clearedMessageIds.has(messageId));\n\t}\n\tonRunStarted(runId) {\n\t\tthis.currentRunlessRunId = runId;\n\t}\n\tonRunSettled(runId) {\n\t\tthis.ignoredActiveRunIds.delete(runId);\n\t\tthis.clearedRunIds.delete(runId);\n\t\tif (this.currentRunlessRunId === runId) this.currentRunlessRunId = this.ignoredActiveRunIds.values().next().value ?? null;\n\t}\n\tonSessionRunError() {\n\t\tthis.ignoredActiveRunIds.clear();\n\t\tthis.currentRunlessRunId = null;\n\t}\n\tresetActiveRuns() {\n\t\tthis.ignoredActiveRunIds.clear();\n\t\tthis.currentRunlessRunId = null;\n\t}\n\ttakeRunlessRunId() {\n\t\tconst runId = this.currentRunlessRunId;\n\t\tif (!runId) return null;\n\t\tthis.ignoredActiveRunIds.delete(runId);\n\t\tthis.clearedRunIds.delete(runId);\n\t\tthis.currentRunlessRunId = this.ignoredActiveRunIds.values().next().value ?? null;\n\t\treturn runId;\n\t}\n\tmarkIgnoredChunkIds(chunk) {\n\t\tconst messageId = getChunkMessageId(chunk);\n\t\tif (messageId) this.clearedMessageIds.add(messageId);\n\t\tconst toolCallId = getChunkToolCallId(chunk);\n\t\tif (toolCallId) this.clearedToolCallIds.add(toolCallId);\n\t}\n\tisRunlessChunkFromIgnoredRun(chunk) {\n\t\tif (getChunkRunId(chunk) || !this.currentRunlessRunId) return false;\n\t\tif (!this.ignoredActiveRunIds.has(this.currentRunlessRunId) && !this.clearedRunIds.has(this.currentRunlessRunId)) return false;\n\t\treturn chunk.type === \"TEXT_MESSAGE_START\" || chunk.type === \"TEXT_MESSAGE_CONTENT\" || chunk.type === \"TOOL_CALL_START\" || chunk.type === \"TOOL_CALL_ARGS\" || chunk.type === \"TOOL_CALL_END\" || chunk.type === \"TOOL_CALL_RESULT\" || chunk.type === \"MESSAGES_SNAPSHOT\" || chunk.type === \"RUN_ERROR\";\n\t}\n};\n//#endregion\nexport { ClearedStreamTracker };\n\n//# sourceMappingURL=cleared-stream-tracker.js.map","import { prepareResolvedByokHeaders, resolveByokProviderId } from \"./byok/resolve.js\";\nimport { createNoOpChatDevtoolsBridge } from \"./devtools-noop.js\";\nimport { normalizeMessagesDates } from \"./message-date-normalizer.js\";\nimport { fetcherToConnectionAdapter, getChunkRunId as getChunkRunId$1, normalizeConnectionAdapter } from \"./connection-adapters.js\";\nimport { ChatPersistor } from \"./client-persistor.js\";\nimport { ClearedStreamTracker } from \"./cleared-stream-tracker.js\";\nimport { InterruptManager } from \"./interrupt-manager.js\";\nimport { StreamProcessor, convertSchemaToJsonSchema, generateMessageId, isStandardSchema, mergeMetadata, normalizeToUIMessage, parseWithStandardSchema, restoreInboundChunk, tanstackMetadata } from \"@tanstack/ai/client\";\nimport { ByokBlockedError, ByokMissingError, ByokUnresolvedProviderError } from \"@tanstack/ai/byok\";\n//#region src/chat-client.ts\nfunction assertUniqueInterruptDefinitions(interrupts) {\n\tconst ids = /* @__PURE__ */ new Set();\n\tfor (const interrupt of interrupts ?? []) {\n\t\tif (ids.has(interrupt.id)) throw new Error(`Duplicate interrupt definition id: ${interrupt.id}`);\n\t\tids.add(interrupt.id);\n\t}\n}\nfunction resolveTransport(transport) {\n\tconst { connection, fetcher } = transport;\n\tif (connection && fetcher) throw new Error(\"ChatClient: pass either `connection` or `fetcher`, not both.\");\n\tif (connection) return connection;\n\tif (fetcher) return fetcherToConnectionAdapter(fetcher);\n\tthrow new Error(\"ChatClient: either `connection` or `fetcher` is required.\");\n}\nfunction connectionDrainsOnSend(connection) {\n\treturn \"connect\" in connection;\n}\nfunction isIntermediateToolTurn(chunk) {\n\tif (chunk.type !== \"RUN_FINISHED\") return false;\n\tif (chunk.outcome?.type === \"interrupt\") return false;\n\tconst extra = chunk;\n\tif (extra.finishReason !== void 0) return extra.finishReason === \"tool_calls\";\n\treturn tanstackMetadata(chunk)?.finishReason === \"tool_calls\";\n}\nfunction normalizeQueueOption(option) {\n\tconst base = {\n\t\twhenBusy: \"queue\",\n\t\tdrain: \"fifo\",\n\t\tonOverflow: \"reject\"\n\t};\n\tif (!option) return base;\n\tif (typeof option === \"string\") return {\n\t\t...base,\n\t\twhenBusy: option\n\t};\n\tif (typeof option === \"function\") return {\n\t\t...base,\n\t\tstrategy: option\n\t};\n\tconst maxSize = option.maxSize;\n\tif (maxSize !== void 0) {\n\t\tif (!Number.isInteger(maxSize) || maxSize < 0) throw new Error(\"ChatClient: queue.maxSize must be a non-negative integer\");\n\t}\n\treturn {\n\t\twhenBusy: option.whenBusy ?? \"queue\",\n\t\tdrain: option.drain ?? \"fifo\",\n\t\tonOverflow: option.onOverflow ?? \"reject\",\n\t\t...maxSize !== void 0 ? { maxSize } : {}\n\t};\n}\n/**\n* Merge a run of queued messages into a single send for `drain: 'batch'`.\n* All-string content is joined with newlines; mixed/multimodal content is\n* flattened into a single `ContentPart` array. The last item's `body` wins.\n* Object-form metadata is merged last-write-wins per key.\n*/\nfunction mergeQueuedMessages(items) {\n\tconst body = items.at(-1)?.body;\n\tconst stringContents = [];\n\tfor (const item of items) {\n\t\tif (typeof item.content !== \"string\") break;\n\t\tstringContents.push(item.content);\n\t}\n\tif (stringContents.length === items.length) return {\n\t\tcontent: stringContents.join(\"\\n\"),\n\t\t...body !== void 0 ? { body } : {}\n\t};\n\tconst parts = [];\n\tlet metadata;\n\tfor (const item of items) {\n\t\tif (typeof item.content === \"string\") {\n\t\t\tparts.push({\n\t\t\t\ttype: \"text\",\n\t\t\t\tcontent: item.content\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof item.content.content === \"string\") parts.push({\n\t\t\ttype: \"text\",\n\t\t\tcontent: item.content.content\n\t\t});\n\t\telse parts.push(...item.content.content);\n\t\tmetadata = mergeMetadata(metadata, item.content.metadata);\n\t}\n\treturn {\n\t\tcontent: {\n\t\t\tcontent: parts,\n\t\t\t...metadata !== void 0 ? { metadata } : {}\n\t\t},\n\t\t...body !== void 0 ? { body } : {}\n\t};\n}\n/**\n* Extract a boolean approval decision from an AG-UI resume payload, if present.\n* Tool-approval resolutions carry `{ approved: boolean, ... }`; generic\n* interrupt payloads do not.\n*/\nfunction readApprovalApproved(payload) {\n\tif (payload === null || typeof payload !== \"object\" || Array.isArray(payload)) return;\n\tif (!(\"approved\" in payload) || typeof payload.approved !== \"boolean\") return;\n\treturn payload.approved;\n}\nfunction readResumeState(snapshot) {\n\tconst value = snapshot;\n\tif (value === null || typeof value !== \"object\" || !(\"resumeState\" in value)) return;\n\tconst resumeState = value.resumeState;\n\tif (resumeState === null || typeof resumeState !== \"object\" || !(\"threadId\" in resumeState) || typeof resumeState.threadId !== \"string\" || resumeState.threadId.length === 0 || !(\"runId\" in resumeState) || typeof resumeState.runId !== \"string\" || resumeState.runId.length === 0) return;\n\treturn {\n\t\tthreadId: resumeState.threadId,\n\t\trunId: resumeState.runId\n\t};\n}\n/**\n* How long a reload rejoin waits for its first chunk before giving up. A durable\n* backend keeps a from-start join open waiting for a producer; without this\n* bound a stale pointer to an unknown/evicted run would pin the UI loading for\n* the backend's full first-chunk deadline (tens of seconds). Kept short so the\n* client decides \"reachable or not\" quickly.\n*/\nvar REJOIN_CONNECT_DEADLINE_MS = 2e3;\n/**\n* Chunk types that (re)build the assistant message on a rejoin. The hydrated\n* in-flight partial is dropped only when one of these arrives — never on\n* `RUN_STARTED` alone — so a rejoin that connects but delivers no content cannot\n* leave an empty assistant bubble.\n*/\nvar REJOIN_REBUILD_TRIGGERS = /* @__PURE__ */ new Set([\n\t\"TEXT_MESSAGE_START\",\n\t\"TEXT_MESSAGE_CONTENT\",\n\t\"TOOL_CALL_START\",\n\t\"MESSAGES_SNAPSHOT\"\n]);\nvar ChatClient = class {\n\tprocessor;\n\tconnection;\n\tuniqueId;\n\tthreadId;\n\tpersistor;\n\tclearedStreamTracker = new ClearedStreamTracker();\n\tcurrentRunId = null;\n\tlastResume = null;\n\trejoinedRunId = null;\n\tinterruptManager;\n\tactiveInterruptSubmission;\n\tinterruptSubmissionFailure;\n\tjoinedRunWaiters = /* @__PURE__ */ new Map();\n\tpendingResumeParentRunId = null;\n\tpendingResumeThreadId = null;\n\tpendingResumeItems = null;\n\tactiveResumeThreadId = null;\n\tactiveResumeRunId = null;\n\tbodyOption = {};\n\tforwardedPropsOption = {};\n\tbyok;\n\tbyokProvider;\n\tcontext = void 0;\n\tpendingMessageBody = void 0;\n\tqueueConfig;\n\tmessageQueue = [];\n\t/**\n\t* True from the moment `sendMessage` claims the client until its\n\t* `streamResponse` settles. Closes the race where concurrent callers both\n\t* see `isLoading === false`, both append a user message, and only one stream\n\t* actually runs (leaving stranded user messages with no reply).\n\t*/\n\tsendInFlight = false;\n\t/**\n\t* True while `drainQueue` is delivering queued messages. Concurrent\n\t* `sendMessage` calls during a drain are treated as busy and follow\n\t* `whenBusy` (default: queue).\n\t*/\n\tmessageQueueDraining = false;\n\t/**\n\t* Set by `whenBusy: 'interrupt'` so an in-progress FIFO drain loop stops\n\t* before starting the next queued item (the interrupting send owns the client).\n\t*/\n\tstopMessageQueueDrain = false;\n\t/**\n\t* Sync claim held for the duration of `deliverMessage` so concurrent\n\t* deliverers cannot both append a user message before only one stream runs.\n\t*/\n\tdeliverClaim = false;\n\tisLoading = false;\n\tisSubscribed = false;\n\terror = void 0;\n\tstatus = \"ready\";\n\tconnectionStatus = \"disconnected\";\n\tabortController = null;\n\tclientToolsRef;\n\tdevtoolsBridge;\n\t/**\n\t* Alias for `this.events`. The bridge installs an\n\t* emitter that auto-attaches run/thread context and auto-emits a\n\t* snapshot after every event, so chat-client only ever calls\n\t* `this.events.X(...)` exactly like it did before devtools landed.\n\t*/\n\tevents;\n\tcurrentStreamId = null;\n\tcurrentMessageId = null;\n\tpostStreamActions = [];\n\tpendingToolExecutions = /* @__PURE__ */ new Map();\n\tactiveClientTools = null;\n\tactiveContext = void 0;\n\tcontinuationPending = false;\n\tsubscriptionAbortController = null;\n\tprocessingResolve = null;\n\t/**\n\t* `connect()` adapters push the full HTTP body into the subscribe queue, then\n\t* wait until that queue is idle. After `send()` returns, every chunk from this\n\t* request has been processed. Subscribe/send sockets do not drain that way.\n\t*/\n\tconnectionDrainsOnSend = false;\n\terrorReportedGeneration = null;\n\tstreamGeneration = 0;\n\tcontinuationGeneration = 0;\n\tstreamContinuationGeneration = 0;\n\tcontinuationSkipped = false;\n\tdraining = false;\n\tsessionGenerating = false;\n\tactiveRunIds = /* @__PURE__ */ new Set();\n\t/** Latched by `dispose()`; stops any late async callback starting new work. */\n\tdisposed = false;\n\t/** Whether a view is currently watching. See `attach` / `detach`. */\n\ttailing = false;\n\t/** Constructor inputs `attach()` needs on every re-attach, not just the first. */\n\trejoinRunId;\n\tcachesMessages;\n\tdevtoolsMounted = false;\n\tcallbacksRef;\n\tconstructor(options) {\n\t\tassertUniqueInterruptDefinitions(options.interrupts);\n\t\tthis.threadId = options.threadId || \"\";\n\t\tthis.uniqueId = this.threadId;\n\t\tlet cachesMessages = true;\n\t\tif (options.persistence === true) {\n\t\t\tif (!options.threadId) throw new Error(\"[TanStack AI] persistence needs a stable `threadId` to key on. Pass a threadId from your app (for example support-42).\");\n\t\t\tcachesMessages = false;\n\t\t} else if (options.persistence) {\n\t\t\tif (!options.threadId) throw new Error(\"[TanStack AI] persistence needs a stable `threadId` to key on. Pass a threadId from your app (for example support-42).\");\n\t\t\tthis.persistor = new ChatPersistor(options.persistence, options.threadId, (messages) => this.processor.setMessages(messages), (snapshot) => this.applyPersistedResume(snapshot));\n\t\t}\n\t\tthis.bodyOption = options.body || {};\n\t\tthis.forwardedPropsOption = options.forwardedProps || {};\n\t\tthis.byok = options.byok;\n\t\tthis.byokProvider = options.byokProvider;\n\t\tthis.context = options.context;\n\t\tthis.queueConfig = normalizeQueueOption(options.queue);\n\t\tconst transport = resolveTransport(options);\n\t\tthis.connectionDrainsOnSend = connectionDrainsOnSend(transport);\n\t\tthis.connection = normalizeConnectionAdapter(transport);\n\t\tthis.clientToolsRef = { current: /* @__PURE__ */ new Map() };\n\t\tif (options.tools) for (const tool of options.tools) this.clientToolsRef.current.set(tool.name, tool);\n\t\tthis.devtoolsBridge = (options.devtoolsBridgeFactory ?? createNoOpChatDevtoolsBridge)(this.buildDevtoolsBridgeOptions(options.devtools));\n\t\tthis.events = this.devtoolsBridge.events;\n\t\tthis.callbacksRef = { current: {\n\t\t\tonResponse: options.onResponse || (() => {}),\n\t\t\tonChunk: options.onChunk || (() => {}),\n\t\t\tonFinish: options.onFinish || (() => {}),\n\t\t\tonError: options.onError || (() => {}),\n\t\t\tonMessagesChange: options.onMessagesChange || (() => {}),\n\t\t\tonLoadingChange: options.onLoadingChange || (() => {}),\n\t\t\tonErrorChange: options.onErrorChange || (() => {}),\n\t\t\tonStatusChange: options.onStatusChange || (() => {}),\n\t\t\tonSubscriptionChange: options.onSubscriptionChange || (() => {}),\n\t\t\tonConnectionStatusChange: options.onConnectionStatusChange || (() => {}),\n\t\t\tonSessionGeneratingChange: options.onSessionGeneratingChange || (() => {}),\n\t\t\tonQueueChange: options.onQueueChange || (() => {}),\n\t\t\tonResumeStateChange: options.onResumeStateChange || (() => {}),\n\t\t\tonRunIdChange: options.onRunIdChange || (() => {}),\n\t\t\tonInterruptStateChange: options.onInterruptStateChange || (() => {}),\n\t\t\tonCustomEvent: options.onCustomEvent || (() => {})\n\t\t} };\n\t\tthis.interruptManager = new InterruptManager({\n\t\t\t...options.tools !== void 0 ? { tools: options.tools } : {},\n\t\t\t...options.interrupts !== void 0 ? { interrupts: options.interrupts } : {},\n\t\t\tsubmit: (submission) => this.submitInterruptBatch(submission),\n\t\t\tonChange: (source) => this.notifyResumeStateChange(source)\n\t\t});\n\t\tif (options.initialResumeSnapshot) this.applyResumeSnapshot(options.initialResumeSnapshot);\n\t\tconst persistedState = this.persistor?.readInitial();\n\t\tconst syncPersistedState = persistedState instanceof Promise ? void 0 : persistedState;\n\t\tconst initialMessages = syncPersistedState ? syncPersistedState.messages : options.initialMessages;\n\t\tlet rejoinRunId = null;\n\t\tif (syncPersistedState?.resume) {\n\t\t\tconst snapshot = syncPersistedState.resume;\n\t\t\tif (Array.isArray(snapshot.pendingInterrupts) && snapshot.pendingInterrupts.length > 0) this.applyResumeSnapshot(snapshot);\n\t\t\telse if (snapshot.resumeState.runId) rejoinRunId = snapshot.resumeState.runId;\n\t\t}\n\t\tif (!rejoinRunId && options.initialResumeSnapshot) {\n\t\t\tconst snapshot = options.initialResumeSnapshot;\n\t\t\tif (!(Array.isArray(snapshot.pendingInterrupts) && snapshot.pendingInterrupts.length > 0) && snapshot.resumeState.runId) rejoinRunId = snapshot.resumeState.runId;\n\t\t}\n\t\tthis.processor = new StreamProcessor({\n\t\t\t...options.streamProcessor?.chunkStrategy ? { chunkStrategy: options.streamProcessor.chunkStrategy } : {},\n\t\t\t...initialMessages ? { initialMessages } : {},\n\t\t\tevents: {\n\t\t\t\tonMessagesChange: (messages) => {\n\t\t\t\t\tthis.persistor?.notifyMessagesChanged(messages);\n\t\t\t\t\tthis.callbacksRef.current.onMessagesChange(messages);\n\t\t\t\t},\n\t\t\t\tonStreamStart: () => {\n\t\t\t\t\tthis.setStatus(\"streaming\");\n\t\t\t\t\tconst assistantMessageId = this.processor.getCurrentAssistantMessageId();\n\t\t\t\t\tif (!assistantMessageId) return;\n\t\t\t\t\tconst assistantMessage = this.processor.getMessages().find((m) => m.id === assistantMessageId);\n\t\t\t\t\tif (assistantMessage) {\n\t\t\t\t\t\tthis.currentMessageId = assistantMessage.id;\n\t\t\t\t\t\tthis.events.messageAppended(assistantMessage, this.currentStreamId || void 0);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonStreamEnd: (message) => {\n\t\t\t\t\tthis.callbacksRef.current.onFinish(message);\n\t\t\t\t\tthis.setStatus(\"ready\");\n\t\t\t\t\tthis.resolveProcessing();\n\t\t\t\t},\n\t\t\t\tonError: (error) => {\n\t\t\t\t\tthis.reportStreamError(error);\n\t\t\t\t},\n\t\t\t\tonTextUpdate: (messageId, content) => {\n\t\t\t\t\tif (this.currentStreamId) this.events.textUpdated(this.currentStreamId, messageId, content);\n\t\t\t\t},\n\t\t\t\tonThinkingUpdate: (messageId, content) => {\n\t\t\t\t\tif (this.currentStreamId) this.events.thinkingUpdated(this.currentStreamId, messageId, content, void 0);\n\t\t\t\t},\n\t\t\t\tonStructuredOutputChange: (args) => {\n\t\t\t\t\tconst streamId = this.devtoolsBridge.resolveStreamId();\n\t\t\t\t\tconst eventName = args.phase === \"start\" ? \"structured-output:started\" : args.phase === \"complete\" ? \"structured-output:completed\" : args.phase === \"error\" ? \"structured-output:errored\" : \"structured-output:updated\";\n\t\t\t\t\tthis.currentMessageId = args.messageId;\n\t\t\t\t\tthis.events.structuredOutputChanged(eventName, streamId, args.messageId, {\n\t\t\t\t\t\tstatus: args.status,\n\t\t\t\t\t\traw: args.raw,\n\t\t\t\t\t\t...args.partial !== void 0 ? { partial: args.partial } : {},\n\t\t\t\t\t\t...args.data !== void 0 ? { data: args.data } : {},\n\t\t\t\t\t\t...args.reasoning !== void 0 ? { reasoning: args.reasoning } : {},\n\t\t\t\t\t\t...args.errorMessage !== void 0 ? { errorMessage: args.errorMessage } : {},\n\t\t\t\t\t\t...args.delta !== void 0 ? { delta: args.delta } : {}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonToolCallStateChange: (messageId, toolCallId, state, args) => {\n\t\t\t\t\tconst toolName = (this.processor.getMessages().find((m) => m.id === messageId)?.parts.find((p) => p.type === \"tool-call\" && p.id === toolCallId))?.name || \"unknown\";\n\t\t\t\t\tif (this.currentStreamId) this.events.toolCallStateChanged(this.currentStreamId, messageId, toolCallId, toolName, state, args);\n\t\t\t\t},\n\t\t\t\tonToolCall: (args) => {\n\t\t\t\t\tconst clientTool = (this.activeClientTools ?? this.clientToolsRef.current).get(args.toolName);\n\t\t\t\t\tconst executeFunc = clientTool?.execute;\n\t\t\t\t\tif (executeFunc) {\n\t\t\t\t\t\tconst continuationGeneration = this.continuationGeneration;\n\t\t\t\t\t\tconst runEventContext = this.devtoolsBridge.getCurrentRunEventContext();\n\t\t\t\t\t\tconst executionPromise = (async () => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst context = this.activeClientTools === null ? this.context : this.activeContext;\n\t\t\t\t\t\t\t\tconst output = await executeFunc(args.input, {\n\t\t\t\t\t\t\t\t\ttoolCallId: args.toolCallId,\n\t\t\t\t\t\t\t\t\tcontext,\n\t\t\t\t\t\t\t\t\temitCustomEvent: () => {}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tawait this.addToolResultForClientTool({\n\t\t\t\t\t\t\t\t\ttoolCallId: args.toolCallId,\n\t\t\t\t\t\t\t\t\ttool: args.toolName,\n\t\t\t\t\t\t\t\t\toutput,\n\t\t\t\t\t\t\t\t\tstate: \"output-available\"\n\t\t\t\t\t\t\t\t}, clientTool, continuationGeneration, runEventContext);\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tawait this.addToolResultForClientTool({\n\t\t\t\t\t\t\t\t\ttoolCallId: args.toolCallId,\n\t\t\t\t\t\t\t\t\ttool: args.toolName,\n\t\t\t\t\t\t\t\t\toutput: null,\n\t\t\t\t\t\t\t\t\tstate: \"output-error\",\n\t\t\t\t\t\t\t\t\terrorText: error.message\n\t\t\t\t\t\t\t\t}, clientTool, continuationGeneration, runEventContext);\n\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\tthis.pendingToolExecutions.delete(args.toolCallId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})();\n\t\t\t\t\t\tthis.pendingToolExecutions.set(args.toolCallId, executionPromise);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonApprovalRequest: (args) => {\n\t\t\t\t\tconst streamId = this.devtoolsBridge.resolveStreamId();\n\t\t\t\t\tconst messageIdForApproval = this.findMessageIdForToolCall(args.toolCallId) ?? this.currentMessageId ?? \"\";\n\t\t\t\t\tthis.events.approvalRequested(streamId, messageIdForApproval, args.toolCallId, args.toolName, args.input, args.approvalId);\n\t\t\t\t},\n\t\t\t\tonCustomEvent: (eventType, data, context) => {\n\t\t\t\t\tif (eventType === \"memory:state\") this.devtoolsBridge.recordMemoryState(data);\n\t\t\t\t\tif (eventType === \"compaction:started\" || eventType === \"compaction:state\" || eventType === \"compaction:ended\") this.devtoolsBridge.recordCompactionEvent(eventType, data);\n\t\t\t\t\tif (eventType === \"skills:state\") this.devtoolsBridge.recordSkillsState(data);\n\t\t\t\t\tthis.callbacksRef.current.onCustomEvent(eventType, data, context);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.persistor?.hydrateAsync(persistedState);\n\t\tthis.rejoinRunId = rejoinRunId;\n\t\tthis.cachesMessages = cachesMessages;\n\t}\n\t/**\n\t* START TAILING: re-attach to an in-flight run so its chunks arrive here.\n\t*\n\t* Called by the constructor, and again by a UI wrapper every time its view\n\t* mounts. Idempotent — attaching while already attached does nothing — so the\n\t* constructor call and a wrapper's first mount cost one attach between them.\n\t*\n\t* Pairs with {@link detach}. The pair exists because tailing used to begin ONLY\n\t* in the constructor, which meant a view could never stop tailing and then\n\t* resume: unmount had to either keep the connection open or lose it for good.\n\t* Keeping it open is what starved the page — a browser allows ~6 connections per\n\t* origin, and one long-lived stream per view reaches that after a handful of\n\t* views, after which every other request queues (measured: an in-page fetch took\n\t* over two minutes while the same request from outside the browser took 17ms).\n\t*/\n\tattach() {\n\t\tif (this.disposed || this.tailing) return;\n\t\tthis.ensureThreadId();\n\t\tthis.tailing = true;\n\t\tif (this.rejoinRunId) this.maybeRejoinInFlight(this.rejoinRunId);\n\t\tif (!this.cachesMessages && this.connection.hydrate) this.hydrateFromServer();\n\t}\n\t/**\n\t* STOP TAILING: drop the connection, keep everything else.\n\t*\n\t* Called by a UI wrapper when its view unmounts. The transcript, the resume\n\t* pointer and the run id all stay, so a later {@link attach} repaints instantly\n\t* and re-tails from the durable log — nothing is lost, because the run keeps\n\t* going server-side and its log holds every chunk.\n\t*\n\t* Deliberately NOT `dispose()`: this client is expected back. And deliberately\n\t* not `stop()`, which means \"the user ended this run\" — detaching says only that\n\t* nobody is watching right now.\n\t*\n\t* `rejoinedRunId` is cleared so the next `attach` can re-join the same run;\n\t* without that reset the guard in {@link maybeRejoinInFlight} would treat the\n\t* run as already joined and the view would come back silent.\n\t*/\n\tdetach() {\n\t\tif (!this.tailing) return;\n\t\tthis.tailing = false;\n\t\tthis.cancelInFlightStream({ setReadyStatus: true });\n\t\tthis.rejoinedRunId = null;\n\t}\n\tapplyResumeSnapshot(snapshot) {\n\t\tconst resumeState = readResumeState(snapshot);\n\t\tif (resumeState === void 0) {\n\t\t\tthis.interruptManager.reset({ source: \"hydrate\" });\n\t\t\treturn;\n\t\t}\n\t\tthis.lastResume = resumeState;\n\t\tconst pendingInterrupts = Array.isArray(snapshot.pendingInterrupts) ? snapshot.pendingInterrupts : [];\n\t\tif (pendingInterrupts.length === 0) {\n\t\t\tthis.interruptManager.reset({ source: \"hydrate\" });\n\t\t\treturn;\n\t\t}\n\t\tconst generation = this.interruptGeneration(pendingInterrupts);\n\t\tthis.interruptManager.hydrate({\n\t\t\tthreadId: resumeState.threadId,\n\t\t\tinterruptedRunId: resumeState.runId,\n\t\t\tgeneration,\n\t\t\tinterrupts: pendingInterrupts\n\t\t}, \"hydrate\");\n\t}\n\t/**\n\t* Apply a resume snapshot read from durable storage. Restores interrupt state,\n\t* and for a bare in-flight run (no pending interrupts) also rejoins it. This is\n\t* the async-store counterpart to the synchronous rejoin in the constructor:\n\t* `applyResumeSnapshot` alone only handles interrupts, so an async store\n\t* (`indexedDBPersistence`) would otherwise never rejoin a mid-stream run.\n\t*/\n\tapplyPersistedResume(snapshot) {\n\t\tthis.applyResumeSnapshot(snapshot);\n\t\tconst hasInterrupts = Array.isArray(snapshot.pendingInterrupts) && snapshot.pendingInterrupts.length > 0;\n\t\tconst runId = snapshot.resumeState?.runId;\n\t\tif (!hasInterrupts && runId) this.maybeRejoinInFlight(runId);\n\t}\n\t/**\n\t* Rejoin a persisted in-flight run, guarded so it fires at most once and never\n\t* while another run is already active. Skipped when the connection is not\n\t* resumable (`joinRun` absent), so a non-durable transport is a no-op.\n\t*/\n\tmaybeRejoinInFlight(runId) {\n\t\tif (!this.connection.joinRun) return;\n\t\tif (this.disposed || !this.tailing) return;\n\t\tif (this.rejoinedRunId === runId) return;\n\t\tif (this.isLoading || this.abortController) return;\n\t\tthis.rejoinedRunId = runId;\n\t\tthis.resumeInFlightRun(runId);\n\t}\n\t/**\n\t* Server-authoritative mount hydration (`persistence: true`). The client holds\n\t* no transcript and no run pointer; on mount it asks the server — keyed by the\n\t* stable threadId — for the stored transcript and whether a run is still\n\t* generating. The transcript repaints immediately; an in-flight run is tailed\n\t* through the same durability rejoin as a reload. Best-effort and\n\t* non-blocking: a failure leaves the client empty rather than throwing, and a\n\t* send that starts first owns the client (hydration then backs off).\n\t*/\n\thydrateFromServer() {\n\t\tconst hydrate = this.connection.hydrate;\n\t\tif (!hydrate) return;\n\t\tif (this.isLoading || this.abortController) return;\n\t\tif (this.disposed) return;\n\t\t(async () => {\n\t\t\tlet result;\n\t\t\ttry {\n\t\t\t\tresult = await hydrate(this.threadId);\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.disposed || !this.tailing) return;\n\t\t\tif (this.isLoading || this.abortController) return;\n\t\t\tif (result.messages.length > 0) this.processor.setMessages(normalizeMessagesDates(result.messages));\n\t\t\tif (result.interrupts && result.interrupts.pending.length > 0) this.applyResumeSnapshot({\n\t\t\t\tresumeState: {\n\t\t\t\t\tthreadId: this.threadId,\n\t\t\t\t\trunId: result.interrupts.runId\n\t\t\t\t},\n\t\t\t\tpendingInterrupts: result.interrupts.pending\n\t\t\t});\n\t\t\telse if (result.activeRun?.runId) this.maybeRejoinInFlight(result.activeRun.runId);\n\t\t})();\n\t}\n\tmountDevtools() {\n\t\tthis.ensureThreadId();\n\t\tif (this.devtoolsMounted) return;\n\t\tthis.devtoolsMounted = true;\n\t\tthis.devtoolsBridge.mountWithTools(this.processor.getMessages().length);\n\t}\n\tensureThreadId() {\n\t\tif (!this.threadId) this.threadId = this.generateUniqueId(\"thread\");\n\t\tthis.uniqueId = this.threadId;\n\t\treturn this.threadId;\n\t}\n\t/**\n\t* Drain a runId-less RUN_ERROR that belongs to a cleared run the client is\n\t* still tracking. The persistor owns the cleared-run bookkeeping; the client\n\t* owns the active-run / session / processing state.\n\t*/\n\tdrainIgnoredRunlessChunk(chunk) {\n\t\tif (chunk.type !== \"RUN_ERROR\") return;\n\t\tconst runId = this.clearedStreamTracker.takeRunlessRunId();\n\t\tif (!runId) return;\n\t\tthis.activeRunIds.delete(runId);\n\t\tthis.setSessionGenerating(this.activeRunIds.size > 0);\n\t\tthis.resolveProcessing();\n\t}\n\tretireIgnoredClearedTerminalChunk(chunk) {\n\t\tif (chunk.type !== \"RUN_FINISHED\" && chunk.type !== \"RUN_ERROR\") return;\n\t\tconst runId = getChunkRunId$1(chunk) ?? this.clearedStreamTracker.takeRunlessRunId();\n\t\tif (!runId) return;\n\t\tthis.activeRunIds.delete(runId);\n\t\tthis.setSessionGenerating(this.activeRunIds.size > 0);\n\t\tif (!getChunkRunId$1(chunk)) this.resolveProcessing();\n\t}\n\tupdateRunLifecycle(chunk, options) {\n\t\tif (chunk.type === \"RUN_STARTED\") {\n\t\t\tconst chunkRunId = getChunkRunId$1(chunk) ?? chunk.runId;\n\t\t\tthis.activeResumeThreadId = \"threadId\" in chunk && typeof chunk.threadId === \"string\" ? chunk.threadId : this.activeResumeThreadId;\n\t\t\tthis.activeResumeRunId = chunkRunId;\n\t\t\tthis.activeRunIds.add(chunkRunId);\n\t\t\tthis.clearedStreamTracker.onRunStarted(chunkRunId);\n\t\t\tthis.setSessionGenerating(true);\n\t\t\tif (this.persistor && this.connection.joinRun && !this.lastResume) this.persistResumeSnapshot({\n\t\t\t\tthreadId: this.activeResumeThreadId ?? this.threadId,\n\t\t\t\trunId: chunkRunId\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (chunk.type !== \"RUN_FINISHED\" && chunk.type !== \"RUN_ERROR\") return;\n\t\tconst runId = getChunkRunId$1(chunk);\n\t\tif (runId) {\n\t\t\tthis.activeRunIds.delete(runId);\n\t\t\tthis.clearedStreamTracker.onRunSettled(runId);\n\t\t} else if (chunk.type === \"RUN_ERROR\") {\n\t\t\tthis.activeRunIds.clear();\n\t\t\tthis.clearedStreamTracker.onSessionRunError();\n\t\t}\n\t\tthis.setSessionGenerating(this.activeRunIds.size > 0);\n\t\tconst skipProcessingResolve = chunk.type === \"RUN_FINISHED\" && isIntermediateToolTurn(chunk);\n\t\tif (options?.resolveProcessing !== false && !skipProcessingResolve) this.resolveProcessing();\n\t}\n\t/**\n\t* Track interrupt state off the stream's terminal events. A RUN_FINISHED with\n\t* an interrupt outcome records the pending interrupts + the run/thread to\n\t* resume; any other terminal event for the tracked/current run clears that\n\t* state. This is interrupt (state) resume — there is no delivery cursor.\n\t*/\n\tobserveInterruptState(chunk) {\n\t\tif (chunk.type !== \"RUN_FINISHED\" && chunk.type !== \"RUN_ERROR\") return;\n\t\tif (this.activeInterruptSubmission && chunk.type === \"RUN_ERROR\") return;\n\t\tconst runId = getChunkRunId$1(chunk);\n\t\tconst threadId = \"threadId\" in chunk && typeof chunk.threadId === \"string\" ? chunk.threadId : this.activeResumeThreadId;\n\t\tif (chunk.type === \"RUN_FINISHED\" && chunk.outcome?.type === \"interrupt\") {\n\t\t\tconst interruptedRunId = this.currentRunId ?? runId ?? this.activeResumeRunId ?? \"\";\n\t\t\tthis.lastResume = {\n\t\t\t\tthreadId: threadId ?? this.threadId,\n\t\t\t\trunId: interruptedRunId\n\t\t\t};\n\t\t\tthis.interruptManager.hydrate({\n\t\t\t\tthreadId: this.lastResume.threadId,\n\t\t\t\tinterruptedRunId,\n\t\t\t\tgeneration: this.interruptGeneration(chunk.outcome.interrupts),\n\t\t\t\tinterrupts: chunk.outcome.interrupts\n\t\t\t}, \"live\");\n\t\t\treturn;\n\t\t}\n\t\tconst isRunlessSessionError = chunk.type === \"RUN_ERROR\" && !runId;\n\t\tconst isTrackedRunTerminal = Boolean(runId && this.lastResume?.runId === runId);\n\t\tconst isCurrentRunTerminal = Boolean(runId && this.currentRunId === runId || this.currentRunId && this.lastResume?.runId === this.currentRunId);\n\t\tconst isActiveStreamRunTerminal = Boolean(this.isLoading && runId && (runId === this.activeResumeRunId || runId === this.currentRunId));\n\t\tconst isCurrentStreamTerminal = this.isLoading && chunk.type === \"RUN_FINISHED\" && !runId;\n\t\tconst isActiveInterruptSubmissionTerminal = Boolean(this.activeInterruptSubmission && this.isLoading && chunk.type === \"RUN_FINISHED\" && chunk.outcome?.type !== \"interrupt\");\n\t\tif (isRunlessSessionError || isTrackedRunTerminal || isCurrentRunTerminal || isActiveStreamRunTerminal || isCurrentStreamTerminal || isActiveInterruptSubmissionTerminal) {\n\t\t\tthis.lastResume = null;\n\t\t\tthis.persistor?.persistResumeSnapshot(null);\n\t\t\tthis.interruptManager.reset();\n\t\t\treturn;\n\t\t}\n\t\tthis.notifyResumeStateChange(\"live\");\n\t}\n\t/**\n\t* The interrupt-resume state for the active/interrupted run (its run/thread\n\t* ids), or null when there is nothing to resume. Apps can persist this to\n\t* resume interrupts across a full reload.\n\t*/\n\tgetResumeState() {\n\t\treturn this.lastResume ? { ...this.lastResume } : null;\n\t}\n\t/**\n\t* The id of the run this client has in flight — one it started via a send or\n\t* rejoined via `joinRun` — or null when there is none. Unlike\n\t* {@link getResumeState}, this tracks ordinary runs too, not only one that is\n\t* interrupted or being resumed. A run another client started and that arrives\n\t* over a live subscription is not this client's run and is not reported here.\n\t*/\n\tgetCurrentRunId() {\n\t\treturn this.currentRunId;\n\t}\n\tsetCurrentRunId(runId) {\n\t\tif (this.currentRunId === runId) return;\n\t\tthis.currentRunId = runId;\n\t\tthis.callbacksRef.current.onRunIdChange(runId);\n\t}\n\tgetInterruptState() {\n\t\treturn this.interruptManager.getState();\n\t}\n\tgetInterrupts() {\n\t\treturn this.interruptManager.getInterrupts();\n\t}\n\t/** @deprecated Use getInterrupts(). */\n\tgetPendingInterrupts() {\n\t\treturn this.interruptManager.getInterrupts();\n\t}\n\tresolveInterrupts(resolution) {\n\t\tif (typeof resolution === \"boolean\") {\n\t\t\tthis.interruptManager.resolve(resolution);\n\t\t\treturn;\n\t\t}\n\t\tthis.interruptManager.resolve(resolution);\n\t}\n\tcancelInterrupts() {\n\t\tthis.interruptManager.cancel();\n\t}\n\tretryInterrupts() {\n\t\tthis.interruptManager.retry();\n\t}\n\t/** Unsafe low-level resume escape hatch. Prefer bound interrupt methods. */\n\tresumeInterruptsUnsafe(resume, state) {\n\t\tconst target = state ?? this.lastResume;\n\t\tif (!target) return Promise.resolve(false);\n\t\treturn this.resumeInterruptsUnsafeForGeneration(resume, target, this.continuationGeneration);\n\t}\n\tresumeInterruptsUnsafeForGeneration(resume, target, continuationGeneration) {\n\t\tif (continuationGeneration !== this.continuationGeneration) return Promise.resolve(false);\n\t\tif (this.isLoading) return new Promise((resolve, reject) => {\n\t\t\tthis.queuePostStreamAction(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(await this.resumeInterruptsUnsafeForGeneration(resume, target, continuationGeneration));\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis.pendingResumeThreadId = target.threadId;\n\t\tthis.pendingResumeParentRunId = target.runId;\n\t\tthis.pendingResumeItems = [...resume];\n\t\treturn this.streamResponse();\n\t}\n\t/** @deprecated Use bound interrupt methods or resumeInterruptsUnsafe(). */\n\tresumeInterrupts(resume, state) {\n\t\treturn this.resumeInterruptsUnsafe(resume, state);\n\t}\n\tasync submitInterruptBatch(submission) {\n\t\tconst continuationGeneration = this.continuationGeneration;\n\t\tthis.activeInterruptSubmission = submission;\n\t\tthis.interruptSubmissionFailure = void 0;\n\t\tfor (const resolution of submission.resolutions) {\n\t\t\tconst approved = readApprovalApproved(resolution.payload);\n\t\t\tif (approved === void 0) continue;\n\t\t\tconst approvalId = resolution.interruptId;\n\t\t\tthis.processor.addToolApprovalResponse(approvalId, approved);\n\t\t}\n\t\tconst resumed = await this.resumeInterruptsUnsafeForGeneration([...submission.resolutions], {\n\t\t\tthreadId: submission.threadId,\n\t\t\trunId: submission.interruptedRunId\n\t\t}, continuationGeneration).finally(() => {\n\t\t\tif (this.activeInterruptSubmission === submission) this.activeInterruptSubmission = void 0;\n\t\t});\n\t\tif (continuationGeneration !== this.continuationGeneration) return;\n\t\tconst failure = this.takeInterruptSubmissionFailure();\n\t\tif (failure !== void 0) throw { errors: failure.errors };\n\t\tif (!resumed) throw new Error(\"Interrupt continuation could not be started.\");\n\t\tif (this.lastResume?.runId === submission.interruptedRunId) {\n\t\t\tthis.lastResume = null;\n\t\t\tthis.interruptManager.reset();\n\t\t}\n\t}\n\ttakeInterruptSubmissionFailure() {\n\t\tconst failure = this.interruptSubmissionFailure;\n\t\tthis.interruptSubmissionFailure = void 0;\n\t\treturn failure;\n\t}\n\tinterruptGeneration(interrupts) {\n\t\tlet generation;\n\t\tfor (const interrupt of interrupts) {\n\t\t\tconst candidate = interrupt.metadata?.[\"tanstack:interruptBinding\"];\n\t\t\tif (candidate === null || typeof candidate !== \"object\" || !(\"generation\" in candidate) || typeof candidate.generation !== \"number\" || !Number.isInteger(candidate.generation) || candidate.generation < 0) return 0;\n\t\t\tif (generation !== void 0 && generation !== candidate.generation) return 0;\n\t\t\tgeneration = candidate.generation;\n\t\t}\n\t\treturn generation ?? 0;\n\t}\n\tgenerateUniqueId(prefix) {\n\t\treturn `${prefix}-${Date.now()}-${Math.random().toString(36).substring(7)}`;\n\t}\n\tsetIsLoading(isLoading) {\n\t\tthis.isLoading = isLoading;\n\t\tthis.callbacksRef.current.onLoadingChange(isLoading);\n\t\tthis.events.loadingChanged(isLoading);\n\t}\n\tsetStatus(status) {\n\t\tthis.status = status;\n\t\tthis.callbacksRef.current.onStatusChange(status);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t}\n\tsetIsSubscribed(isSubscribed) {\n\t\tthis.isSubscribed = isSubscribed;\n\t\tthis.callbacksRef.current.onSubscriptionChange(isSubscribed);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t}\n\tsetConnectionStatus(status) {\n\t\tthis.connectionStatus = status;\n\t\tthis.callbacksRef.current.onConnectionStatusChange(status);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t}\n\tsetSessionGenerating(isGenerating) {\n\t\tif (this.sessionGenerating === isGenerating) return;\n\t\tthis.sessionGenerating = isGenerating;\n\t\tthis.callbacksRef.current.onSessionGeneratingChange(isGenerating);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t}\n\tnotifyResumeStateChange(source) {\n\t\tconst resumeState = this.getResumeState();\n\t\tconst interruptState = this.interruptManager.getState();\n\t\tthis.persistResumeSnapshot(resumeState);\n\t\tthis.callbacksRef.current.onResumeStateChange(resumeState, interruptState.interrupts);\n\t\tthis.callbacksRef.current.onInterruptStateChange(interruptState, { source });\n\t}\n\t/**\n\t* Build the durable resume snapshot from the current resume state + pending\n\t* interrupt descriptors and hand it to the persistor (null clears it).\n\t*/\n\tpersistResumeSnapshot(resumeState) {\n\t\tif (!this.persistor) return;\n\t\tif (!resumeState) {\n\t\t\tthis.persistor.persistResumeSnapshot(null);\n\t\t\treturn;\n\t\t}\n\t\tconst descriptors = this.interruptManager.getDescriptors();\n\t\tthis.persistor.persistResumeSnapshot({\n\t\t\tresumeState,\n\t\t\t...descriptors.length > 0 ? { pendingInterrupts: [...descriptors] } : {}\n\t\t});\n\t}\n\tresetSessionGenerating(options) {\n\t\tthis.activeRunIds.clear();\n\t\tif (!options?.preserveClearedStreamTracking) this.clearedStreamTracker.resetActiveRuns();\n\t\tthis.setSessionGenerating(false);\n\t}\n\tsetError(error) {\n\t\tthis.error = error;\n\t\tthis.callbacksRef.current.onErrorChange(error);\n\t\tthis.events.errorChanged(error?.message || null);\n\t}\n\tbuildDevtoolsBridgeOptions(devtools) {\n\t\tconst client = this;\n\t\treturn {\n\t\t\tget hookId() {\n\t\t\t\treturn client.uniqueId;\n\t\t\t},\n\t\t\tget clientId() {\n\t\t\t\treturn client.uniqueId;\n\t\t\t},\n\t\t\tget threadId() {\n\t\t\t\treturn client.threadId;\n\t\t\t},\n\t\t\tmetadata: {\n\t\t\t\thookName: devtools?.hookName ?? \"useChat\",\n\t\t\t\toutputKind: devtools?.outputKind ?? \"chat\",\n\t\t\t\t...devtools?.framework ? { framework: devtools.framework } : {},\n\t\t\t\t...devtools?.name ? { name: devtools.name } : {}\n\t\t\t},\n\t\t\tgetSnapshot: () => this.getDevtoolsSnapshot(),\n\t\t\tgetTools: () => this.clientToolsRef.current.values(),\n\t\t\tgetMessages: () => this.processor.getMessages(),\n\t\t\tsetMessages: (messages) => {\n\t\t\t\tthis.processor.setMessages(messages);\n\t\t\t},\n\t\t\taddToolResult: (toolCallId, output, errorText) => {\n\t\t\t\tthis.processor.addToolResult(toolCallId, output, errorText);\n\t\t\t},\n\t\t\tgenerateId: (prefix) => this.generateUniqueId(prefix)\n\t\t};\n\t}\n\tgetDevtoolsSnapshot() {\n\t\treturn {\n\t\t\tmessages: this.processor.getMessages(),\n\t\t\tstatus: this.status,\n\t\t\tisLoading: this.isLoading,\n\t\t\tisSubscribed: this.isSubscribed,\n\t\t\tconnectionStatus: this.connectionStatus,\n\t\t\tsessionGenerating: this.sessionGenerating,\n\t\t\tactiveRunIds: Array.from(this.activeRunIds),\n\t\t\tqueue: this.getQueue(),\n\t\t\t...this.error ? { error: this.error.message } : {}\n\t\t};\n\t}\n\tfindMessageIdForToolCall(toolCallId) {\n\t\tconst messages = this.processor.getMessages();\n\t\tfor (const message of messages) if (message.parts.find((part) => part.type === \"tool-call\" && part.id === toolCallId)) return message.id;\n\t}\n\tabortSubscriptionLoop() {\n\t\tthis.subscriptionAbortController?.abort();\n\t\tthis.subscriptionAbortController = null;\n\t}\n\tresolveProcessing() {\n\t\tthis.processingResolve?.();\n\t\tthis.processingResolve = null;\n\t}\n\tcancelInFlightStream(options) {\n\t\tthis.abortController?.abort();\n\t\tthis.abortController = null;\n\t\tif (options?.abortSubscription) this.abortSubscriptionLoop();\n\t\tthis.resolveProcessing();\n\t\tthis.setIsLoading(false);\n\t\tthis.deliverClaim = false;\n\t\tif (options?.setReadyStatus) this.setStatus(\"ready\");\n\t}\n\treportStreamError(error) {\n\t\tconst alreadyReported = this.errorReportedGeneration === this.streamGeneration;\n\t\tthis.setError(error);\n\t\tif (this.isLoading || this.status === \"submitted\" || this.status === \"streaming\") this.setStatus(\"error\");\n\t\tif (!alreadyReported) {\n\t\t\tthis.errorReportedGeneration = this.streamGeneration;\n\t\t\tthis.callbacksRef.current.onError(error);\n\t\t}\n\t}\n\t/**\n\t* Start the background subscription loop.\n\t*/\n\tstartSubscription() {\n\t\tthis.subscriptionAbortController = new AbortController();\n\t\tconst signal = this.subscriptionAbortController.signal;\n\t\tthis.consumeSubscription(signal).catch((err) => {\n\t\t\tif (err instanceof Error && err.name !== \"AbortError\") {\n\t\t\t\tthis.setConnectionStatus(\"error\");\n\t\t\t\tthis.resetSessionGenerating();\n\t\t\t\tthis.setIsSubscribed(false);\n\t\t\t\tthis.reportStreamError(err);\n\t\t\t}\n\t\t\tthis.resolveProcessing();\n\t\t}).finally(() => {\n\t\t\tif (this.subscriptionAbortController?.signal !== signal) return;\n\t\t\tthis.subscriptionAbortController = null;\n\t\t\tif (!signal.aborted && this.isSubscribed) {\n\t\t\t\tthis.setIsSubscribed(false);\n\t\t\t\tif (this.connectionStatus !== \"error\") this.setConnectionStatus(\"disconnected\");\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Consume chunks from the connection subscription.\n\t*/\n\tasync consumeSubscription(signal) {\n\t\tconst stream = this.connection.subscribe(signal);\n\t\tfor await (const chunk of stream) {\n\t\t\tif (signal.aborted) break;\n\t\t\tawait this.processIncomingChunk(chunk);\n\t\t}\n\t}\n\t/**\n\t* Re-attach to an in-flight run after a full page reload, replaying its stream\n\t* from the server's delivery-durability log via `joinRun` (which returns the\n\t* whole run so far, then tails live to completion).\n\t*\n\t* The log is the single source of truth for the run, so we rebuild the\n\t* in-flight assistant bubble from it rather than trying to reconcile the\n\t* server-hydrated partial with the replay: on the first chunk that actually\n\t* (re)builds a message we drop the hydrated in-flight assistant, and the\n\t* replay reconstructs one clean bubble. Dropping only on real content (not on\n\t* `RUN_STARTED`) means a rejoin that connects but delivers nothing can never\n\t* leave an empty bubble behind.\n\t*\n\t* Bounded connect: a durable backend keeps a from-start join open waiting for\n\t* a producer, so a stale pointer to an unknown/evicted run would otherwise pin\n\t* the UI in a loading state for the backend's full first-chunk deadline. We\n\t* give up after {@link REJOIN_CONNECT_DEADLINE_MS} if no chunk arrives and\n\t* clear the dead pointer so it does not retry on the next load.\n\t*\n\t* Replay chunks are processed WITHOUT the per-chunk yield the live path uses,\n\t* so the buffered prefix snaps in and only the genuinely-live tail streams at\n\t* network speed — a reload looks like the run continued, not like it re-typed.\n\t*/\n\tresumeInFlightRun(runId) {\n\t\tconst joinRun = this.connection.joinRun;\n\t\tif (!joinRun) return;\n\t\tconst controller = new AbortController();\n\t\tthis.abortController = controller;\n\t\tthis.setCurrentRunId(runId);\n\t\tthis.lastResume = {\n\t\t\tthreadId: this.threadId,\n\t\t\trunId\n\t\t};\n\t\tthis.streamContinuationGeneration = this.continuationGeneration;\n\t\tthis.setIsLoading(true);\n\t\tthis.setStatus(\"streaming\");\n\t\t(async () => {\n\t\t\tlet rebuilt = false;\n\t\t\tlet attached = false;\n\t\t\tlet refused = false;\n\t\t\tconst connectTimer = setTimeout(() => {\n\t\t\t\tif (!attached) controller.abort();\n\t\t\t}, REJOIN_CONNECT_DEADLINE_MS);\n\t\t\ttry {\n\t\t\t\tfor await (const chunk of joinRun(runId, controller.signal)) {\n\t\t\t\t\tif (controller.signal.aborted) break;\n\t\t\t\t\tif (!attached) {\n\t\t\t\t\t\tattached = true;\n\t\t\t\t\t\tclearTimeout(connectTimer);\n\t\t\t\t\t}\n\t\t\t\t\tif (!rebuilt && REJOIN_REBUILD_TRIGGERS.has(chunk.type)) {\n\t\t\t\t\t\trebuilt = true;\n\t\t\t\t\t\tthis.dropTrailingInFlightAssistant();\n\t\t\t\t\t}\n\t\t\t\t\tawait this.processIncomingChunk(chunk, { defer: false });\n\t\t\t\t}\n\t\t\t\tif (this.pendingToolExecutions.size > 0) await Promise.all(this.pendingToolExecutions.values());\n\t\t\t} catch (error) {\n\t\t\t\tconst isAbort = error instanceof Error && (error.name === \"AbortError\" || error.name === \"TimeoutError\");\n\t\t\t\tif (!attached && !isAbort) refused = true;\n\t\t\t\tif (attached && !isAbort) this.reportStreamError(error instanceof Error ? error : new Error(String(error)));\n\t\t\t} finally {\n\t\t\t\tclearTimeout(connectTimer);\n\t\t\t\tif (!attached && refused && this.tailing && !this.disposed) {\n\t\t\t\t\tthis.lastResume = null;\n\t\t\t\t\tthis.persistor?.persistResumeSnapshot(null);\n\t\t\t\t}\n\t\t\t\tif (this.abortController === controller) {\n\t\t\t\t\tthis.abortController = null;\n\t\t\t\t\tthis.setIsLoading(false);\n\t\t\t\t\tif (this.status === \"streaming\") this.setStatus(\"ready\");\n\t\t\t\t\tawait this.drainPostStreamActions();\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t}\n\t/**\n\t* Drop a hydrated, still-in-flight assistant turn so a resume replay can\n\t* rebuild it cleanly. Only touches a trailing assistant message (the shape a\n\t* reload-mid-stream leaves); a thread whose last turn is a user message (run\n\t* never produced, or already settled) is left untouched.\n\t*/\n\tdropTrailingInFlightAssistant() {\n\t\tconst messages = this.processor.getMessages();\n\t\tconst last = messages[messages.length - 1];\n\t\tif (last && last.role === \"assistant\") this.processor.setMessages(messages.slice(0, -1));\n\t}\n\tasync processIncomingChunk(chunk, options) {\n\t\tchunk = restoreInboundChunk(chunk);\n\t\tif (chunk.type === \"RUN_ERROR\" && this.isActiveInterruptSubmissionFailure(chunk)) {\n\t\t\tconst interruptErrors = tanstackMetadata(chunk)?.interruptErrors;\n\t\t\tthis.interruptSubmissionFailure = { errors: Array.isArray(interruptErrors) ? interruptErrors : [] };\n\t\t}\n\t\tif (this.connectionStatus === \"connecting\") this.setConnectionStatus(\"connected\");\n\t\tif (this.clearedStreamTracker.shouldIgnoreChunk(chunk)) {\n\t\t\tif (chunk.type === \"RUN_FINISHED\" || chunk.type === \"RUN_ERROR\") {\n\t\t\t\tif (getChunkRunId$1(chunk)) this.updateRunLifecycle(chunk, { resolveProcessing: false });\n\t\t\t\telse this.drainIgnoredRunlessChunk(chunk);\n\t\t\t\tthis.retireIgnoredClearedTerminalChunk(chunk);\n\t\t\t\tthis.resolveJoinedRun(chunk);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.callbacksRef.current.onChunk(chunk);\n\t\tthis.devtoolsBridge.observeChunk(chunk);\n\t\tthis.processor.processChunk(chunk);\n\t\tthis.updateRunLifecycle(chunk);\n\t\tthis.observeInterruptState(chunk);\n\t\tif (options?.defer !== false && (typeof document === \"undefined\" || !document.hidden)) await new Promise((resolve) => setTimeout(resolve, 0));\n\t\tthis.resolveJoinedRun(chunk);\n\t}\n\tisActiveInterruptSubmissionFailure(chunk) {\n\t\tconst submission = this.activeInterruptSubmission;\n\t\tconst errors = tanstackMetadata(chunk)?.interruptErrors;\n\t\tif (!submission || !Array.isArray(errors) || errors.length === 0) return false;\n\t\tconst runId = getChunkRunId$1(chunk);\n\t\tif (runId !== void 0 && runId !== this.currentRunId) return false;\n\t\tif (typeof chunk.threadId === \"string\" && chunk.threadId !== submission.threadId) return false;\n\t\treturn errors.every((error) => {\n\t\t\tif (error == null || typeof error !== \"object\" || typeof error.threadId !== \"string\" || typeof error.interruptedRunId !== \"string\" || typeof error.generation !== \"number\") return false;\n\t\t\treturn error.threadId === submission.threadId && error.interruptedRunId === submission.interruptedRunId && error.generation === submission.generation;\n\t\t});\n\t}\n\tresolveJoinedRun(chunk) {\n\t\tif (chunk.type !== \"RUN_FINISHED\" && chunk.type !== \"RUN_ERROR\") return;\n\t\tconst runId = getChunkRunId$1(chunk);\n\t\tif (runId === void 0) return;\n\t\tconst resolve = this.joinedRunWaiters.get(runId);\n\t\tif (resolve === void 0) return;\n\t\tthis.joinedRunWaiters.delete(runId);\n\t\tresolve();\n\t}\n\t/**\n\t* Ensure subscription loop is running, starting it if needed.\n\t*/\n\tensureSubscription() {\n\t\tif (!this.isSubscribed) {\n\t\t\tthis.subscribe();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.subscriptionAbortController || this.subscriptionAbortController.signal.aborted) this.subscribe({ restart: true });\n\t}\n\t/**\n\t* Create a promise that resolves when onStreamEnd fires.\n\t* Used by streamResponse to await processing completion.\n\t*/\n\twaitForProcessing() {\n\t\tthis.resolveProcessing();\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.processingResolve = resolve;\n\t\t});\n\t}\n\t/**\n\t* Send a message and stream the response.\n\t* Supports both simple string content and multimodal content (images, audio, video, documents).\n\t*\n\t* @param content - The message content. Can be:\n\t* - A simple string for text-only messages\n\t* - A MultimodalContent object with content array and optional custom ID\n\t* @param body - Optional body parameters to merge with the client's base body for this request.\n\t* Uses shallow merge with per-message body taking priority.\n\t* @param sendOptions - Per-call overrides. `{ whenBusy }` overrides the\n\t* queue policy for this one send. `{ body }`\n\t* shallow-merges with `body` and with the chat-level\n\t* `body` / `forwardedProps`. `sendOptions.body` wins\n\t* on key collisions. Framework hooks forward this\n\t* object as their second argument.\n\t*\n\t* @example\n\t* ```ts\n\t* // Simple text message\n\t* await client.sendMessage('Hello!')\n\t*\n\t* // Text message with custom body params\n\t* await client.sendMessage('Hello!', { temperature: 0.7 })\n\t*\n\t* // Per-call whenBusy override\n\t* await client.sendMessage('Urgent', undefined, { whenBusy: 'interrupt' })\n\t*\n\t* // Per-call body via options. Same effect as the positional arg.\n\t* // This is the shape the framework hooks (`useChat`, `injectChat`) forward.\n\t* await client.sendMessage('Hello!', undefined, { body: { temperature: 0.7 } })\n\t*\n\t* // Multimodal message with image\n\t* await client.sendMessage({\n\t* content: [\n\t* { type: 'text', content: 'What is in this image?' },\n\t* { type: 'image', source: { type: 'url', value: 'https://example.com/photo.jpg' } }\n\t* ]\n\t* })\n\t*\n\t* // Multimodal message with custom ID and body params\n\t* await client.sendMessage(\n\t* {\n\t* content: [\n\t* { type: 'text', content: 'Describe this audio' },\n\t* { type: 'audio', source: { type: 'data', value: 'base64...' } }\n\t* ],\n\t* id: 'custom-message-id'\n\t* },\n\t* { model: 'gpt-5.5' }\n\t* )\n\t* ```\n\t*/\n\tasync sendMessage(content, body, sendOptions) {\n\t\tthis.mountDevtools();\n\t\tif (typeof content === \"string\" && !content.trim()) return;\n\t\tif (this.hasPendingInterrupts()) throw new Error(\"ChatClient: cannot send normal input while pending interrupts exist. Use resumeInterrupts() instead.\");\n\t\tconst resolvedBody = {\n\t\t\t...body,\n\t\t\t...sendOptions?.body\n\t\t};\n\t\tif (this.isSendBusy()) {\n\t\t\tconst { action, id } = this.decideWhenBusy(content, sendOptions);\n\t\t\tif (action === \"drop\") return;\n\t\t\tif (action === \"queue\") {\n\t\t\t\tthis.enqueueMessage(content, resolvedBody, id);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.stopMessageQueueDrain = true;\n\t\t\tthis.sendInFlight = true;\n\t\t\tthis.cancelInFlightStream({ setReadyStatus: true });\n\t\t\tthis.resetSessionGenerating();\n\t\t} else this.sendInFlight = true;\n\t\ttry {\n\t\t\tawait this.deliverMessage(content, resolvedBody);\n\t\t} finally {\n\t\t\tthis.sendInFlight = false;\n\t\t}\n\t}\n\t/** True while interrupt descriptors still own continuation. */\n\thasPendingInterrupts() {\n\t\treturn this.interruptManager.getDescriptors().length > 0;\n\t}\n\t/** True while a stream is active, a send is claiming the client, or the queue is draining. */\n\tisSendBusy() {\n\t\treturn this.isLoading || this.sendInFlight || this.messageQueueDraining;\n\t}\n\tresolveBusyReason() {\n\t\tif (this.isLoading) return \"streaming\";\n\t\tif (this.messageQueueDraining) return \"draining\";\n\t\treturn \"sendInFlight\";\n\t}\n\t/**\n\t* Append a user message and run the stream. Used by both direct sends and\n\t* queue drains — callers are responsible for busy/queue policy.\n\t*\n\t* Claims delivery synchronously before appending so concurrent callers\n\t* cannot both add a user message when only one stream can run.\n\t*/\n\tasync deliverMessage(content, body) {\n\t\tif (this.isLoading || this.deliverClaim) return false;\n\t\tthis.deliverClaim = true;\n\t\ttry {\n\t\t\tconst normalizedContent = this.normalizeMessageInput(content);\n\t\t\tthis.pendingMessageBody = body;\n\t\t\tconst userMessage = this.processor.addUserMessage(normalizedContent.content, normalizedContent.id, normalizedContent.metadata);\n\t\t\tthis.events.messageSent(userMessage.id, normalizedContent.content);\n\t\t\treturn await this.streamResponse();\n\t\t} finally {\n\t\t\tthis.deliverClaim = false;\n\t\t}\n\t}\n\t/**\n\t* Resolve the effective action for a send that arrives while busy.\n\t* The returned `id` is the id that will be stored if the action is `queue`.\n\t*/\n\tdecideWhenBusy(content, sendOptions) {\n\t\tconst id = this.generateUniqueId(\"queued\");\n\t\tif (sendOptions?.whenBusy) return {\n\t\t\taction: sendOptions.whenBusy,\n\t\t\tid\n\t\t};\n\t\tconst { strategy, whenBusy } = this.queueConfig;\n\t\tif (strategy) {\n\t\t\tconst { action } = strategy({\n\t\t\t\tpending: {\n\t\t\t\t\tid,\n\t\t\t\t\tcontent,\n\t\t\t\t\tcreatedAt: Date.now()\n\t\t\t\t},\n\t\t\t\tbusyReason: this.resolveBusyReason(),\n\t\t\t\tqueued: this.getQueue()\n\t\t\t});\n\t\t\treturn {\n\t\t\t\taction,\n\t\t\t\tid\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\taction: whenBusy,\n\t\t\tid\n\t\t};\n\t}\n\tenqueueMessage(content, body, id) {\n\t\tconst { maxSize, onOverflow } = this.queueConfig;\n\t\tif (maxSize !== void 0 && this.messageQueue.length >= maxSize) {\n\t\t\tif (onOverflow === \"reject\" || maxSize === 0) return;\n\t\t\tthis.messageQueue.shift();\n\t\t}\n\t\tthis.messageQueue.push({\n\t\t\tid: id ?? this.generateUniqueId(\"queued\"),\n\t\t\tcontent,\n\t\t\tcreatedAt: Date.now(),\n\t\t\t...body !== void 0 ? { body } : {}\n\t\t});\n\t\tthis.emitQueueChange();\n\t}\n\t/**\n\t* Normalize the message input to extract content, optional id, and\n\t* optional metadata. String form has no metadata. Trims string content.\n\t*/\n\tnormalizeMessageInput(input) {\n\t\tif (typeof input === \"string\") return { content: input.trim() };\n\t\treturn {\n\t\t\tcontent: input.content,\n\t\t\tid: input.id,\n\t\t\t...input.metadata !== void 0 ? { metadata: input.metadata } : {}\n\t\t};\n\t}\n\t/**\n\t* Append a message and stream the response\n\t*/\n\tasync append(message) {\n\t\tthis.mountDevtools();\n\t\tif (this.hasPendingInterrupts()) throw new Error(\"ChatClient: cannot append normal input while pending interrupts exist. Use resumeInterrupts() instead.\");\n\t\tconst normalizedMessage = normalizeToUIMessage(message, generateMessageId);\n\t\tif (normalizedMessage.role === \"system\") return;\n\t\tconst uiMessage = normalizedMessage;\n\t\tthis.events.messageAppended(uiMessage);\n\t\tconst messages = this.processor.getMessages();\n\t\tthis.processor.setMessages([...messages, uiMessage]);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t\tif (this.isLoading) {\n\t\t\tthis.queuePostStreamAction(async () => {\n\t\t\t\tawait this.streamResponse();\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tawait this.streamResponse();\n\t}\n\t/**\n\t* Stream a response from the LLM.\n\t* Returns true if the stream completed successfully, false on abort or error.\n\t*/\n\tasync streamResponse() {\n\t\tif (this.isLoading) return false;\n\t\tconst generation = ++this.streamGeneration;\n\t\tthis.streamContinuationGeneration = this.continuationGeneration;\n\t\tconst resumeThreadId = this.pendingResumeThreadId;\n\t\tconst resumeParentRunId = this.pendingResumeParentRunId;\n\t\tconst resumeItems = this.pendingResumeItems;\n\t\tthis.pendingResumeThreadId = null;\n\t\tthis.pendingResumeParentRunId = null;\n\t\tthis.pendingResumeItems = null;\n\t\tconst runId = `run-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n\t\tthis.setCurrentRunId(runId);\n\t\tthis.activeResumeThreadId = resumeThreadId ?? this.threadId;\n\t\tthis.activeResumeRunId = runId;\n\t\tthis.setIsLoading(true);\n\t\tthis.deliverClaim = false;\n\t\tthis.setStatus(\"submitted\");\n\t\tthis.setError(void 0);\n\t\tthis.errorReportedGeneration = null;\n\t\tthis.abortController = new AbortController();\n\t\tconst signal = this.abortController.signal;\n\t\tthis.pendingToolExecutions.clear();\n\t\tlet streamCompletedSuccessfully = false;\n\t\tlet activeDevtoolsRunId = null;\n\t\tlet runTerminalEventEmitted = false;\n\t\ttry {\n\t\t\tconst messages = this.processor.getMessages();\n\t\t\tconst clientTools = new Map(this.clientToolsRef.current);\n\t\t\tconst runtimeContext = this.context;\n\t\t\tawait this.callbacksRef.current.onResponse();\n\t\t\tif (signal.aborted) return false;\n\t\t\tconst mergedBody = {\n\t\t\t\t...this.bodyOption,\n\t\t\t\t...this.forwardedPropsOption,\n\t\t\t\t...this.pendingMessageBody\n\t\t\t};\n\t\t\tthis.pendingMessageBody = void 0;\n\t\t\tthis.currentStreamId = this.generateUniqueId(\"stream\");\n\t\t\tthis.devtoolsBridge.setCurrentStreamId(this.currentStreamId);\n\t\t\tthis.currentMessageId = null;\n\t\t\tthis.activeClientTools = clientTools;\n\t\t\tthis.activeContext = runtimeContext;\n\t\t\tthis.processor.prepareAssistantMessage();\n\t\t\tthis.ensureSubscription();\n\t\t\tconst processingComplete = this.waitForProcessing();\n\t\t\tlet byokHeaders;\n\t\t\tif (this.byok) {\n\t\t\t\tconst provider = resolveByokProviderId(this.byokProvider, mergedBody.provider);\n\t\t\t\tbyokHeaders = await prepareResolvedByokHeaders(this.byok, provider);\n\t\t\t}\n\t\t\tconst runContext = {\n\t\t\t\tthreadId: resumeThreadId ?? this.threadId,\n\t\t\t\trunId,\n\t\t\t\t...resumeParentRunId !== null ? { parentRunId: resumeParentRunId } : {},\n\t\t\t\tclientTools: Array.from(clientTools.values()).map((t) => ({\n\t\t\t\t\tname: t.name,\n\t\t\t\t\tdescription: t.description,\n\t\t\t\t\tparameters: t.inputSchema ? convertSchemaToJsonSchema(t.inputSchema) : { type: \"object\" }\n\t\t\t\t})),\n\t\t\t\tforwardedProps: { ...mergedBody },\n\t\t\t\t...resumeItems ? { resume: resumeItems } : {},\n\t\t\t\t...byokHeaders ? { headers: byokHeaders } : {}\n\t\t\t};\n\t\t\tthis.devtoolsBridge.beginRun(runContext.runId, runContext.threadId);\n\t\t\tactiveDevtoolsRunId = runContext.runId;\n\t\t\tthis.devtoolsBridge.emitRunLifecycle(\"run:created\", runContext.runId, \"created\");\n\t\t\tthis.devtoolsBridge.emitRunLifecycle(\"run:started\", runContext.runId, \"started\");\n\t\t\tthis.devtoolsBridge.emitSnapshot();\n\t\t\tawait this.connection.send(messages, mergedBody, signal, runContext);\n\t\t\tif (generation !== this.streamGeneration || signal.aborted) return false;\n\t\t\tif (this.connectionDrainsOnSend) this.resolveProcessing();\n\t\t\tawait processingComplete;\n\t\t\tif (generation !== this.streamGeneration) return false;\n\t\t\tif (this.status === \"error\") {\n\t\t\t\tif (activeDevtoolsRunId) {\n\t\t\t\t\tthis.devtoolsBridge.emitRunLifecycle(\"run:errored\", activeDevtoolsRunId, \"errored\", this.error ? { error: this.error.message } : {});\n\t\t\t\t\trunTerminalEventEmitted = true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this.pendingToolExecutions.size > 0) await Promise.all(this.pendingToolExecutions.values());\n\t\t\tthis.processor.finalizeStream();\n\t\t\tstreamCompletedSuccessfully = true;\n\t\t} catch (err) {\n\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\tif (error.name === \"AbortError\") {\n\t\t\t\tif (activeDevtoolsRunId) {\n\t\t\t\t\tthis.devtoolsBridge.emitRunLifecycle(\"run:cancelled\", activeDevtoolsRunId, \"cancelled\");\n\t\t\t\t\trunTerminalEventEmitted = true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (error instanceof ByokMissingError) this.byok?.request(error.provider, \"missing\");\n\t\t\tif (error instanceof ByokBlockedError && error.reason === \"locked\") this.byok?.request(error.provider, \"locked\");\n\t\t\tif (generation === this.streamGeneration) {\n\t\t\t\tthis.reportStreamError(error);\n\t\t\t\tif (activeDevtoolsRunId) {\n\t\t\t\t\tthis.devtoolsBridge.emitRunLifecycle(\"run:errored\", activeDevtoolsRunId, \"errored\", { error: error.message });\n\t\t\t\t\trunTerminalEventEmitted = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (generation === this.streamGeneration && (error instanceof ByokMissingError || error instanceof ByokBlockedError || error instanceof ByokUnresolvedProviderError)) throw error;\n\t\t} finally {\n\t\t\tif (generation === this.streamGeneration) {\n\t\t\t\tthis.currentStreamId = null;\n\t\t\t\tthis.devtoolsBridge.setCurrentStreamId(null);\n\t\t\t\tthis.currentMessageId = null;\n\t\t\t\tthis.setCurrentRunId(null);\n\t\t\t\tthis.activeClientTools = null;\n\t\t\t\tthis.activeContext = void 0;\n\t\t\t\tthis.abortController = null;\n\t\t\t\tthis.setIsLoading(false);\n\t\t\t\tthis.pendingMessageBody = void 0;\n\t\t\t\tif (activeDevtoolsRunId && !runTerminalEventEmitted) {\n\t\t\t\t\tif (streamCompletedSuccessfully) this.devtoolsBridge.emitRunLifecycle(\"run:completed\", activeDevtoolsRunId, \"completed\");\n\t\t\t\t\telse if (signal.aborted) this.devtoolsBridge.emitRunLifecycle(\"run:cancelled\", activeDevtoolsRunId, \"cancelled\");\n\t\t\t\t}\n\t\t\t\tawait this.drainPostStreamActions();\n\t\t\t\tif (streamCompletedSuccessfully) {\n\t\t\t\t\tif (this.status !== \"ready\") this.setStatus(\"ready\");\n\t\t\t\t\tif (!this.messageQueueDraining) await this.drainQueue();\n\t\t\t\t} else this.flushQueue();\n\t\t\t}\n\t\t}\n\t\treturn streamCompletedSuccessfully;\n\t}\n\t/**\n\t* Start the client subscription loop.\n\t* This controls the connection lifecycle independently from request lifecycle.\n\t*/\n\tsubscribe(options) {\n\t\tconst restart = options?.restart === true;\n\t\tif (this.isSubscribed && !restart) return;\n\t\tif (this.isSubscribed && restart) this.abortSubscriptionLoop();\n\t\tthis.setIsSubscribed(true);\n\t\tthis.setConnectionStatus(\"connecting\");\n\t\tthis.startSubscription();\n\t}\n\t/**\n\t* Unsubscribe and fully tear down live behavior.\n\t* This aborts an in-flight request and the subscription loop.\n\t*/\n\tunsubscribe() {\n\t\tthis.cancelInFlightStream({\n\t\t\tsetReadyStatus: true,\n\t\t\tabortSubscription: true\n\t\t});\n\t\tthis.discardPendingSends();\n\t\tthis.resetSessionGenerating();\n\t\tthis.setIsSubscribed(false);\n\t\tthis.setConnectionStatus(\"disconnected\");\n\t}\n\t/**\n\t* Reload the last assistant message\n\t*/\n\tasync reload() {\n\t\tconst messages = this.processor.getMessages();\n\t\tif (messages.length === 0) return;\n\t\tconst lastUserMessageIndex = messages.findLastIndex((m) => m.role === \"user\");\n\t\tif (lastUserMessageIndex === -1) return;\n\t\tif (this.isLoading) this.cancelInFlightStream();\n\t\tthis.discardPendingSends();\n\t\tthis.events.reloaded(lastUserMessageIndex);\n\t\tthis.processor.removeMessagesAfter(lastUserMessageIndex);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t\tawait this.streamResponse();\n\t}\n\t/**\n\t* Stop the current stream\n\t*/\n\tstop() {\n\t\tthis.continuationGeneration++;\n\t\tconst hadLocalStream = this.abortController !== null;\n\t\tthis.cancelInFlightStream({ setReadyStatus: true });\n\t\tthis.discardPendingSends();\n\t\tthis.lastResume = null;\n\t\tthis.activeInterruptSubmission = void 0;\n\t\tthis.interruptManager.reset();\n\t\tif (hadLocalStream) this.resetSessionGenerating();\n\t\tthis.events.stopped();\n\t}\n\t/**\n\t* Clear all messages\n\t*/\n\tclear() {\n\t\tconst hadLocalStream = this.abortController !== null;\n\t\tthis.clearedStreamTracker.snapshotClear({\n\t\t\tmessages: this.processor.getMessages(),\n\t\t\tactiveRunIds: this.activeRunIds,\n\t\t\tcurrentRunId: this.currentRunId\n\t\t});\n\t\tif (this.isLoading || hadLocalStream) {\n\t\t\tthis.cancelInFlightStream({ setReadyStatus: true });\n\t\t\tthis.resetSessionGenerating({ preserveClearedStreamTracking: true });\n\t\t} else if (this.activeRunIds.size > 0) this.resetSessionGenerating({ preserveClearedStreamTracking: true });\n\t\tthis.persistor?.beginClear();\n\t\tthis.processor.clearMessages();\n\t\tthis.discardPendingSends();\n\t\tthis.persistor?.remove();\n\t\tthis.lastResume = null;\n\t\tthis.interruptManager.reset();\n\t\tthis.pendingResumeThreadId = null;\n\t\tthis.pendingResumeParentRunId = null;\n\t\tthis.pendingResumeItems = null;\n\t\tthis.setError(void 0);\n\t\tthis.events.messagesCleared();\n\t}\n\t/**\n\t* Add the result of a client-side tool execution\n\t*/\n\tasync addToolResult(result) {\n\t\tconst clientTool = this.clientToolsRef.current.get(result.tool);\n\t\tawait this.addToolResultForClientTool(result, clientTool, this.streamContinuationGeneration);\n\t}\n\tasync addToolResultForClientTool(result, clientTool, continuationGeneration, context) {\n\t\tif (clientTool && result.state !== \"output-error\") try {\n\t\t\tresult = {\n\t\t\t\t...result,\n\t\t\t\toutput: this.validateClientToolOutput(clientTool, result.output)\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tresult = {\n\t\t\t\t...result,\n\t\t\t\toutput: null,\n\t\t\t\tstate: \"output-error\",\n\t\t\t\terrorText: error.message\n\t\t\t};\n\t\t}\n\t\tthis.events.toolResultAdded(result.toolCallId, result.tool, result.output, result.state || \"output-available\", context);\n\t\tif (continuationGeneration !== this.continuationGeneration) return;\n\t\tthis.processor.addToolResult(result.toolCallId, result.output, result.state === \"output-error\" ? result.errorText || \"Tool execution failed\" : void 0);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t\tif (this.interruptManager.resolveClientToolOutput(result.toolCallId, result.state === \"output-error\" ? { error: result.errorText || \"Tool execution failed\" } : result.output)) return;\n\t\tif (this.isLoading) {\n\t\t\tthis.queuePostStreamAction(() => continuationGeneration === this.continuationGeneration ? this.checkForContinuation() : Promise.resolve());\n\t\t\treturn;\n\t\t}\n\t\tawait this.checkForContinuation();\n\t}\n\tvalidateClientToolOutput(clientTool, output) {\n\t\tif (clientTool.outputSchema && isStandardSchema(clientTool.outputSchema)) return parseWithStandardSchema(clientTool.outputSchema, output);\n\t\treturn output;\n\t}\n\t/**\n\t* Respond to a tool approval request\n\t*/\n\tasync addToolApprovalResponse(response) {\n\t\tthis.processor.addToolApprovalResponse(response.id, response.approved);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t\tif (this.interruptManager.resolveToolApprovalDecision(response.id, response.approved)) return;\n\t\tconst messages = this.processor.getMessages();\n\t\tlet foundToolCallId;\n\t\tfor (const msg of messages) {\n\t\t\tconst toolCallPart = msg.parts.find((p) => p.type === \"tool-call\" && p.approval?.id === response.id);\n\t\t\tif (toolCallPart) {\n\t\t\t\tfoundToolCallId = toolCallPart.id;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (foundToolCallId) this.events.toolApprovalResponded(response.id, foundToolCallId, response.approved);\n\t\tthis.processor.addToolApprovalResponse(response.id, response.approved);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t\tif (this.isLoading) {\n\t\t\tthis.queuePostStreamAction(() => this.checkForContinuation());\n\t\t\treturn;\n\t\t}\n\t\tawait this.checkForContinuation();\n\t}\n\t/**\n\t* Queue an action to be executed after the current stream ends\n\t*/\n\tqueuePostStreamAction(action) {\n\t\tconst continuationGeneration = this.continuationGeneration;\n\t\tthis.postStreamActions.push(async () => {\n\t\t\tif (continuationGeneration !== this.continuationGeneration) return;\n\t\t\tawait action();\n\t\t});\n\t}\n\t/**\n\t* Drain and execute all queued post-stream actions\n\t*/\n\tasync drainPostStreamActions() {\n\t\tif (this.draining) return;\n\t\tthis.draining = true;\n\t\ttry {\n\t\t\tlet action;\n\t\t\twhile ((action = this.postStreamActions.shift()) !== void 0) await action();\n\t\t} finally {\n\t\t\tthis.draining = false;\n\t\t}\n\t}\n\t/**\n\t* Check if we should continue the flow and do so if needed\n\t*/\n\tasync checkForContinuation() {\n\t\tif (this.streamContinuationGeneration !== this.continuationGeneration) return;\n\t\tif (this.hasPendingInterrupts()) return;\n\t\tif (this.continuationPending || this.isLoading) {\n\t\t\tthis.continuationSkipped = true;\n\t\t\treturn;\n\t\t}\n\t\tif (this.shouldAutoSend()) {\n\t\t\tthis.continuationPending = true;\n\t\t\tthis.continuationSkipped = false;\n\t\t\tlet succeeded = false;\n\t\t\ttry {\n\t\t\t\tsucceeded = await this.streamResponse();\n\t\t\t} finally {\n\t\t\t\tthis.continuationPending = false;\n\t\t\t}\n\t\t\tif (this.continuationSkipped && succeeded) {\n\t\t\t\tthis.continuationSkipped = false;\n\t\t\t\tawait this.checkForContinuation();\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* Check if all tool calls are complete and we should auto-send.\n\t* Requires that there is at least one tool call in the last assistant message;\n\t* a text-only response has nothing to auto-send.\n\t*/\n\tshouldAutoSend() {\n\t\tif (this.lastResume) return false;\n\t\tif (this.activeInterruptSubmission && this.hasPendingInterrupts()) return false;\n\t\tif (this.interruptManager.getInterrupts().length > 0) return false;\n\t\tconst lastAssistant = this.processor.getMessages().findLast((m) => m.role === \"assistant\");\n\t\tif (!lastAssistant) return false;\n\t\tif (!lastAssistant.parts.some((p) => p.type === \"tool-call\")) return false;\n\t\treturn this.processor.areAllToolsComplete();\n\t}\n\t/**\n\t* Get current messages\n\t*/\n\tgetMessages() {\n\t\treturn this.processor.getMessages();\n\t}\n\t/**\n\t* True when an interrupt (or another direct send) claimed the client during\n\t* a drain. Read via a method so cross-await mutations are not constant-folded\n\t* by control-flow analysis.\n\t*/\n\tshouldAbortMessageQueueDrain() {\n\t\treturn this.isLoading || this.stopMessageQueueDrain;\n\t}\n\t/**\n\t* Deliver queued messages after a successful settle.\n\t* - `batch`: merge everything currently queued into one send, looping so\n\t* messages enqueued during that batch stream are not stranded.\n\t* - `fifo`: walk the queue in a loop, one stream at a time, until empty\n\t* (or until another send claims the client via interrupt).\n\t*\n\t* Uses `deliverMessage` directly so drains do not re-enter `sendMessage`'s\n\t* busy/queue policy (which would re-queue items and strand the rest).\n\t*/\n\tasync drainQueue() {\n\t\tif (this.messageQueueDraining || this.isLoading || this.messageQueue.length === 0) return;\n\t\tthis.messageQueueDraining = true;\n\t\tthis.stopMessageQueueDrain = false;\n\t\ttry {\n\t\t\tif (this.queueConfig.drain === \"batch\") {\n\t\t\t\twhile (this.messageQueue.length > 0) {\n\t\t\t\t\tif (this.shouldAbortMessageQueueDrain()) return;\n\t\t\t\t\tconst items = this.messageQueue.splice(0);\n\t\t\t\t\tthis.emitQueueChange();\n\t\t\t\t\tconst merged = mergeQueuedMessages(items);\n\t\t\t\t\tif (!await this.deliverMessage(merged.content, merged.body) || this.shouldAbortMessageQueueDrain()) return;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\twhile (this.messageQueue.length > 0) {\n\t\t\t\tif (this.shouldAbortMessageQueueDrain()) return;\n\t\t\t\tconst next = this.messageQueue.shift();\n\t\t\t\tif (next === void 0) return;\n\t\t\t\tthis.emitQueueChange();\n\t\t\t\tif (!await this.deliverMessage(next.content, next.body) || this.shouldAbortMessageQueueDrain()) return;\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.messageQueueDraining = false;\n\t\t\tthis.stopMessageQueueDrain = false;\n\t\t}\n\t}\n\t/**\n\t* Drop any in-flight send claim and discard pending queued messages\n\t* (stop / error / clear / unsubscribe / reload).\n\t*/\n\tdiscardPendingSends() {\n\t\tthis.sendInFlight = false;\n\t\tthis.flushQueue();\n\t}\n\t/**\n\t* Get the current send queue (messages held while a stream was in flight).\n\t*/\n\tgetQueue() {\n\t\treturn this.messageQueue.map(({ id, content, createdAt }) => ({\n\t\t\tid,\n\t\t\tcontent,\n\t\t\tcreatedAt\n\t\t}));\n\t}\n\temitQueueChange() {\n\t\tthis.callbacksRef.current.onQueueChange(this.getQueue());\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t}\n\t/**\n\t* Remove a queued message by id before it drains.\n\t*/\n\tcancelQueued(id) {\n\t\tconst index = this.messageQueue.findIndex((m) => m.id === id);\n\t\tif (index === -1) return;\n\t\tthis.messageQueue.splice(index, 1);\n\t\tthis.emitQueueChange();\n\t}\n\t/**\n\t* Discard all pending queued messages (stop / error / clear / unsubscribe /\n\t* reload). Does not send them. Emits `onQueueChange([])` when anything was\n\t* removed.\n\t*/\n\tflushQueue() {\n\t\tif (this.messageQueue.length === 0) return;\n\t\tthis.messageQueue = [];\n\t\tthis.emitQueueChange();\n\t}\n\t/**\n\t* Get loading state\n\t*/\n\tgetIsLoading() {\n\t\treturn this.isLoading;\n\t}\n\t/**\n\t* Get current status\n\t*/\n\tgetStatus() {\n\t\treturn this.status;\n\t}\n\t/**\n\t* Get whether the subscription loop is active\n\t*/\n\tgetIsSubscribed() {\n\t\treturn this.isSubscribed;\n\t}\n\t/**\n\t* Get current connection lifecycle status\n\t*/\n\tgetConnectionStatus() {\n\t\treturn this.connectionStatus;\n\t}\n\t/**\n\t* Whether the shared session is actively generating.\n\t* Derived from stream run events (RUN_STARTED / RUN_FINISHED / RUN_ERROR).\n\t* Unlike `isLoading` (request-local), this reflects shared generation\n\t* activity visible to all subscribers (e.g. across tabs/devices).\n\t*/\n\tgetSessionGenerating() {\n\t\treturn this.sessionGenerating;\n\t}\n\t/**\n\t* Get current error\n\t*/\n\tgetError() {\n\t\treturn this.error;\n\t}\n\t/**\n\t* Manually set messages\n\t*/\n\tsetMessagesManually(messages) {\n\t\tthis.processor.setMessages(messages);\n\t\tthis.devtoolsBridge.emitSnapshot();\n\t}\n\tupdateOptions(options) {\n\t\tif (options.connection !== void 0 || options.fetcher !== void 0) {\n\t\t\tconst wasSubscribed = this.isSubscribed;\n\t\t\tif (this.isLoading) this.cancelInFlightStream({\n\t\t\t\tsetReadyStatus: true,\n\t\t\t\tabortSubscription: true\n\t\t\t});\n\t\t\telse if (wasSubscribed) this.abortSubscriptionLoop();\n\t\t\tthis.resetSessionGenerating();\n\t\t\tthis.setIsSubscribed(false);\n\t\t\tthis.setConnectionStatus(\"disconnected\");\n\t\t\tconst transport = resolveTransport({\n\t\t\t\tconnection: options.connection,\n\t\t\t\tfetcher: options.fetcher\n\t\t\t});\n\t\t\tthis.connectionDrainsOnSend = connectionDrainsOnSend(transport);\n\t\t\tthis.connection = normalizeConnectionAdapter(transport);\n\t\t\tif (wasSubscribed) this.subscribe();\n\t\t}\n\t\tif (options.body !== void 0) this.bodyOption = options.body;\n\t\tif (options.forwardedProps !== void 0) this.forwardedPropsOption = options.forwardedProps;\n\t\tif (options.byok !== void 0) this.byok = options.byok;\n\t\tif (options.byokProvider !== void 0) this.byokProvider = options.byokProvider;\n\t\tif (\"context\" in options) this.context = options.context;\n\t\tif (options.tools !== void 0) {\n\t\t\tthis.interruptManager.updateTools(options.tools);\n\t\t\tthis.clientToolsRef.current = /* @__PURE__ */ new Map();\n\t\t\tfor (const tool of options.tools) this.clientToolsRef.current.set(tool.name, tool);\n\t\t\tthis.devtoolsBridge.notifyToolsChanged();\n\t\t}\n\t\tif (options.queue !== void 0) this.queueConfig = normalizeQueueOption(options.queue);\n\t\tif (options.onResponse !== void 0) this.callbacksRef.current.onResponse = options.onResponse;\n\t\tif (options.onChunk !== void 0) this.callbacksRef.current.onChunk = options.onChunk;\n\t\tif (options.onFinish !== void 0) this.callbacksRef.current.onFinish = options.onFinish;\n\t\tif (options.onError !== void 0) this.callbacksRef.current.onError = options.onError;\n\t\tif (options.onSubscriptionChange !== void 0) this.callbacksRef.current.onSubscriptionChange = options.onSubscriptionChange;\n\t\tif (options.onConnectionStatusChange !== void 0) this.callbacksRef.current.onConnectionStatusChange = options.onConnectionStatusChange;\n\t\tif (options.onSessionGeneratingChange !== void 0) this.callbacksRef.current.onSessionGeneratingChange = options.onSessionGeneratingChange;\n\t\tif (options.onQueueChange !== void 0) this.callbacksRef.current.onQueueChange = options.onQueueChange;\n\t\tif (options.onResumeStateChange !== void 0) this.callbacksRef.current.onResumeStateChange = options.onResumeStateChange;\n\t\tif (options.onRunIdChange !== void 0) this.callbacksRef.current.onRunIdChange = options.onRunIdChange;\n\t\tif (options.onInterruptStateChange !== void 0) this.callbacksRef.current.onInterruptStateChange = options.onInterruptStateChange;\n\t\tif (options.onCustomEvent !== void 0) this.callbacksRef.current.onCustomEvent = options.onCustomEvent;\n\t}\n\tdispose() {\n\t\tthis.disposed = true;\n\t\tthis.unsubscribe();\n\t\tthis.devtoolsBridge.dispose();\n\t\tthis.devtoolsMounted = false;\n\t}\n};\n//#endregion\nexport { ChatClient, normalizeQueueOption };\n\n//# sourceMappingURL=chat-client.js.map","import { DefaultChatClientEventEmitter } from \"./events.js\";\nimport { convertSchemaToJsonSchema } from \"@tanstack/ai/client\";\nimport { aiEventClient, createAIDevtoolsEventEnvelope, emitAIDevtoolsEvent } from \"@tanstack/ai-event-client\";\n//#region src/devtools.ts\nfunction readCompactionBoundaryValue(rawValue) {\n\tif (!rawValue || typeof rawValue !== \"object\") return {};\n\treturn {\n\t\t...\"before\" in rawValue && typeof rawValue.before === \"number\" ? { before: rawValue.before } : {},\n\t\t...\"after\" in rawValue && typeof rawValue.after === \"number\" ? { after: rawValue.after } : {},\n\t\t...\"messagesBefore\" in rawValue && typeof rawValue.messagesBefore === \"number\" ? { messagesBefore: rawValue.messagesBefore } : {},\n\t\t...\"messagesAfter\" in rawValue && typeof rawValue.messagesAfter === \"number\" ? { messagesAfter: rawValue.messagesAfter } : {},\n\t\t...\"reusedCheckpoint\" in rawValue && typeof rawValue.reusedCheckpoint === \"boolean\" ? { reusedCheckpoint: rawValue.reusedCheckpoint } : {},\n\t\t...\"maxTokens\" in rawValue && typeof rawValue.maxTokens === \"number\" ? { maxTokens: rawValue.maxTokens } : {},\n\t\t...\"strategyKey\" in rawValue && typeof rawValue.strategyKey === \"string\" ? { strategyKey: rawValue.strategyKey } : {},\n\t\t...\"durationMs\" in rawValue && typeof rawValue.durationMs === \"number\" ? { durationMs: rawValue.durationMs } : {}\n\t};\n}\nfunction readPreviewList(value) {\n\tif (!Array.isArray(value)) return void 0;\n\tconst previews = [];\n\tfor (const item of value) {\n\t\tif (!item || typeof item !== \"object\") continue;\n\t\tif (!(\"role\" in item) || !(\"tokens\" in item) || !(\"text\" in item)) continue;\n\t\tif (typeof item.role !== \"string\" || typeof item.tokens !== \"number\" || typeof item.text !== \"string\") continue;\n\t\tpreviews.push({\n\t\t\trole: item.role,\n\t\t\ttokens: item.tokens,\n\t\t\ttext: item.text\n\t\t});\n\t}\n\treturn previews;\n}\nfunction readCompactionStateValue(rawValue) {\n\tif (!rawValue || typeof rawValue !== \"object\") return null;\n\tif (!(\"before\" in rawValue) || !(\"after\" in rawValue) || !(\"messagesBefore\" in rawValue) || !(\"messagesAfter\" in rawValue)) return null;\n\tif (typeof rawValue.before !== \"number\" || typeof rawValue.after !== \"number\" || typeof rawValue.messagesBefore !== \"number\" || typeof rawValue.messagesAfter !== \"number\") return null;\n\tconst reusedCheckpoint = \"reusedCheckpoint\" in rawValue && rawValue.reusedCheckpoint === true;\n\tconst maxTokens = \"maxTokens\" in rawValue && typeof rawValue.maxTokens === \"number\" ? rawValue.maxTokens : void 0;\n\tconst strategyKey = \"strategyKey\" in rawValue && typeof rawValue.strategyKey === \"string\" ? rawValue.strategyKey : void 0;\n\tconst dropped = \"dropped\" in rawValue ? readPreviewList(rawValue.dropped) : void 0;\n\tconst result = \"result\" in rawValue ? readPreviewList(rawValue.result) : void 0;\n\treturn {\n\t\tbefore: rawValue.before,\n\t\tafter: rawValue.after,\n\t\tmessagesBefore: rawValue.messagesBefore,\n\t\tmessagesAfter: rawValue.messagesAfter,\n\t\treusedCheckpoint,\n\t\t...maxTokens !== void 0 ? { maxTokens } : {},\n\t\t...strategyKey ? { strategyKey } : {},\n\t\t...dropped ? { dropped } : {},\n\t\t...result ? { result } : {}\n\t};\n}\nfunction createAIDevtoolsGenerationPreview(input) {\n\tif (input.outputKind === \"image\") return imagePreviewFromResult(input.result);\n\tif (input.outputKind === \"audio\") return audioPreviewFromResult(input.result);\n\tif (input.outputKind === \"video\") return videoPreviewFromResult(input.result, input.videoStatus);\n\tif (input.outputKind === \"text\") return textPreviewFromResult(input.result);\n\tif (input.result === null || input.result === void 0) return { kind: \"empty\" };\n\treturn {\n\t\tkind: \"structured\",\n\t\tvalue: input.result\n\t};\n}\nfunction imagePreviewFromResult(result) {\n\tconst record = asRecord(result);\n\tconst items = (Array.isArray(record?.images) ? record.images : []).map((image) => mediaItemFromSource(image, \"image/png\")).filter(isGenerationMediaItem);\n\tif (items.length === 0 && result !== null && result !== void 0) {\n\t\tconst directItem = mediaItemFromSource(result, \"image/png\");\n\t\tif (directItem) items.push(directItem);\n\t}\n\treturn {\n\t\tkind: \"image\",\n\t\titems\n\t};\n}\nfunction audioPreviewFromResult(result) {\n\tconst record = asRecord(result);\n\tconst audio = record?.audio;\n\tconst resultContentType = stringField(record, \"contentType\");\n\tconst format = stringField(record, \"format\");\n\tconst mimeType = resultContentType ?? mimeTypeFromAudioFormat(format);\n\tconst items = [];\n\tconst directItem = typeof audio === \"string\" ? base64MediaItem(audio, mimeType, {\n\t\tformat,\n\t\tduration: numberField(record, \"duration\")\n\t}) : mediaItemFromSource(audio, mimeType, { format });\n\tif (directItem) items.push(directItem);\n\treturn {\n\t\tkind: \"audio\",\n\t\titems\n\t};\n}\nfunction videoPreviewFromResult(result, videoStatus) {\n\tconst resultRecord = asRecord(result);\n\tconst statusRecord = asRecord(videoStatus);\n\tconst item = mediaItemFromSource(result, \"video/mp4\") ?? mediaItemFromSource(videoStatus, \"video/mp4\");\n\tconst items = item ? [item] : [];\n\tconst job = videoJobFromStatus(statusRecord ?? resultRecord);\n\treturn {\n\t\tkind: \"video\",\n\t\titems,\n\t\t...job ? { job } : {}\n\t};\n}\nfunction textPreviewFromResult(result) {\n\tconst record = asRecord(result);\n\tconst text = stringField(record, \"text\") ?? stringField(record, \"summary\") ?? stringField(record, \"content\") ?? (typeof result === \"string\" ? result : void 0);\n\tif (text !== void 0) return {\n\t\tkind: \"text\",\n\t\ttext\n\t};\n\tif (result === null || result === void 0) return { kind: \"empty\" };\n\treturn {\n\t\tkind: \"structured\",\n\t\tvalue: result\n\t};\n}\nfunction videoJobFromStatus(record) {\n\tconst jobId = stringField(record, \"jobId\");\n\tif (!jobId) return void 0;\n\treturn {\n\t\tjobId,\n\t\t...stringField(record, \"status\") ? { status: stringField(record, \"status\") } : {},\n\t\t...numberField(record, \"progress\") !== void 0 ? { progress: numberField(record, \"progress\") } : {},\n\t\t...stringField(record, \"error\") ? { error: stringField(record, \"error\") } : {}\n\t};\n}\nfunction mediaItemFromSource(value, defaultMimeType, extras = {}) {\n\tconst record = asRecord(value);\n\tif (!record) return void 0;\n\tconst explicitContentType = stringField(record, \"contentType\") ?? stringField(record, \"mimeType\");\n\tconst duration = numberField(record, \"duration\") ?? extras.duration;\n\tconst format = stringField(record, \"format\") ?? extras.format;\n\tconst url = stringField(record, \"url\");\n\tif (url) return {\n\t\tsrc: url,\n\t\tsourceType: \"url\",\n\t\t...explicitContentType ? { mimeType: explicitContentType } : {},\n\t\t...format ? { format } : {},\n\t\t...duration !== void 0 ? { duration } : {}\n\t};\n\tconst b64Json = stringField(record, \"b64Json\");\n\tif (!b64Json) return void 0;\n\treturn base64MediaItem(b64Json, explicitContentType ?? defaultMimeType, {\n\t\tformat,\n\t\tduration\n\t});\n}\nfunction base64MediaItem(value, mimeType, extras = {}) {\n\treturn {\n\t\tsrc: value.startsWith(\"data:\") ? value : `data:${mimeType ?? \"application/octet-stream\"};base64,${value}`,\n\t\tsourceType: \"base64\",\n\t\t...mimeType ? { mimeType } : {},\n\t\t...extras.format ? { format: extras.format } : {},\n\t\t...extras.duration !== void 0 ? { duration: extras.duration } : {}\n\t};\n}\nfunction mimeTypeFromAudioFormat(format) {\n\tif (!format) return \"audio/mpeg\";\n\tif (format === \"mp3\") return \"audio/mpeg\";\n\treturn `audio/${format}`;\n}\nfunction asRecord(value) {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return;\n\treturn value;\n}\nfunction stringField(record, field) {\n\tconst value = record?.[field];\n\treturn typeof value === \"string\" && value.length > 0 ? value : void 0;\n}\nfunction numberField(record, field) {\n\tconst value = record?.[field];\n\treturn typeof value === \"number\" ? value : void 0;\n}\nfunction isGenerationMediaItem(value) {\n\treturn Boolean(value);\n}\nvar activeBridgeRegistryKey = Symbol.for(\"tanstack.ai.devtools.activeBridgeByHookId\");\nfunction getActiveBridgeRegistry() {\n\tconst global = globalThis;\n\tconst existing = global[activeBridgeRegistryKey];\n\tif (existing) return existing;\n\tconst registry = /* @__PURE__ */ new Map();\n\tglobal[activeBridgeRegistryKey] = registry;\n\treturn registry;\n}\n/**\n* `{...options}` turns `get hookId()` into a data property. Chat/generation\n* clients mint `threadId` after construct (`ensureThreadId` on mount), so a\n* spread would freeze `hookId: ''` and DevTools could never select the hook.\n*/\nfunction withLiveClientIdentity(identity, rest) {\n\treturn {\n\t\tget hookId() {\n\t\t\treturn identity.hookId;\n\t\t},\n\t\tget clientId() {\n\t\t\treturn identity.clientId;\n\t\t},\n\t\tget threadId() {\n\t\t\treturn identity.threadId;\n\t\t},\n\t\tmetadata: identity.metadata,\n\t\tgetSnapshot: rest.getSnapshot,\n\t\t...rest.getTools || identity.getTools ? { getTools: rest.getTools ?? identity.getTools } : {},\n\t\t...rest.applyToolFixture || identity.applyToolFixture ? { applyToolFixture: rest.applyToolFixture ?? identity.applyToolFixture } : {}\n\t};\n}\nvar ClientDevtoolsBridge = class {\n\toptions;\n\tunsubscribers = [];\n\tdisposed = false;\n\tsuperseded = false;\n\tregistered = false;\n\tconstructor(options) {\n\t\tthis.options = options;\n\t}\n\temitRegistered() {\n\t\tif (!this.prepareForMountEmit()) return;\n\t\tthis.registered = true;\n\t\temitAIDevtoolsEvent(\"hook:registered\", {\n\t\t\t...this.createEnvelope(\"hook:registered\"),\n\t\t\t...this.createMetadataPayload(),\n\t\t\tlifecycle: \"mounted\"\n\t\t});\n\t}\n\temitUpdated() {\n\t\tif (!this.prepareForEmit()) return;\n\t\temitAIDevtoolsEvent(\"hook:updated\", {\n\t\t\t...this.createEnvelope(\"hook:updated\"),\n\t\t\t...this.createMetadataPayload(),\n\t\t\tlifecycle: \"active\"\n\t\t});\n\t}\n\temitSnapshot() {\n\t\tif (!this.prepareForEmit()) return;\n\t\temitAIDevtoolsEvent(\"hook:state-snapshot\", {\n\t\t\t...this.createEnvelope(\"hook:state-snapshot\"),\n\t\t\t...this.createMetadataPayload(),\n\t\t\tstate: this.options.getSnapshot()\n\t\t});\n\t}\n\temitToolsRegistered() {\n\t\tif (!this.prepareForEmit()) return;\n\t\tconst tools = this.options.getTools ? Array.from(this.options.getTools()).map((tool) => ({\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tinputSchema: tool.inputSchema ? convertSchemaToJsonSchema(tool.inputSchema) : { type: \"object\" },\n\t\t\toutputSchema: tool.outputSchema ? convertSchemaToJsonSchema(tool.outputSchema) : void 0,\n\t\t\tneedsApproval: tool.needsApproval,\n\t\t\tmetadata: tool.metadata\n\t\t})) : [];\n\t\temitAIDevtoolsEvent(\"tools:registered\", {\n\t\t\t...this.createEnvelope(\"tools:registered\"),\n\t\t\t...this.createMetadataPayload(),\n\t\t\ttools\n\t\t});\n\t}\n\temitRunLifecycle(eventType, runId, status, options = {}) {\n\t\tif (!this.prepareForEmit()) return;\n\t\temitAIDevtoolsEvent(eventType, {\n\t\t\t...this.createEnvelope(eventType, \"client-state\", { runId }),\n\t\t\trunId,\n\t\t\tstatus,\n\t\t\t...options.error ? { error: options.error } : {}\n\t\t});\n\t}\n\tdeactivate() {\n\t\tconst activeBridgeByHookId = getActiveBridgeRegistry();\n\t\tif (activeBridgeByHookId.get(this.options.hookId) === this) activeBridgeByHookId.delete(this.options.hookId);\n\t\tfor (const unsubscribe of this.unsubscribers.splice(0)) unsubscribe();\n\t}\n\tsupersede() {\n\t\tif (this.disposed) return;\n\t\tthis.superseded = true;\n\t\tthis.disposed = true;\n\t\tthis.deactivate();\n\t}\n\tdispose() {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tif (!this.registered) {\n\t\t\tthis.deactivate();\n\t\t\treturn;\n\t\t}\n\t\tif (getActiveBridgeRegistry().get(this.options.hookId) !== this) {\n\t\t\tthis.deactivate();\n\t\t\treturn;\n\t\t}\n\t\tconst payload = {\n\t\t\t...this.createEnvelope(\"hook:unregistered\"),\n\t\t\t...this.createMetadataPayload(),\n\t\t\treason: \"disposed\"\n\t\t};\n\t\temitAIDevtoolsEvent(\"hook:unregistered\", payload);\n\t\tthis.deactivate();\n\t}\n\tprepareForEmit() {\n\t\tif (this.disposed || this.superseded) return false;\n\t\tthis.activate();\n\t\treturn true;\n\t}\n\tprepareForMountEmit() {\n\t\tif (this.superseded) return false;\n\t\tif (this.disposed) {\n\t\t\tthis.disposed = false;\n\t\t\tthis.registered = false;\n\t\t}\n\t\tthis.activate();\n\t\treturn true;\n\t}\n\tactivate() {\n\t\tif (this.disposed) return;\n\t\tconst activeBridgeByHookId = getActiveBridgeRegistry();\n\t\tconst activeBridge = activeBridgeByHookId.get(this.options.hookId);\n\t\tif (activeBridge && activeBridge !== this) {\n\t\t\tif (typeof activeBridge.supersede === \"function\") activeBridge.supersede();\n\t\t\telse activeBridge.deactivate();\n\t\t}\n\t\tactiveBridgeByHookId.set(this.options.hookId, this);\n\t\tif (this.unsubscribers.length > 0) return;\n\t\tthis.unsubscribers.push(aiEventClient.on(\"devtools:request-state\", (event) => {\n\t\t\tthis.handleRequestState(event);\n\t\t}));\n\t\tif (this.options.applyToolFixture) this.unsubscribers.push(aiEventClient.on(\"devtools:tool-fixture:apply\", (event) => {\n\t\t\tthis.handleToolFixtureApply(event);\n\t\t}));\n\t}\n\thandleRequestState(event) {\n\t\tif (this.disposed || this.superseded) return;\n\t\tconst targetHookId = event.payload.targetHookId;\n\t\tif (targetHookId && targetHookId !== this.options.hookId) return;\n\t\tthis.emitRegistered();\n\t\tthis.emitToolsRegistered();\n\t\tthis.emitSnapshot();\n\t\tthis.onReplayState();\n\t}\n\t/**\n\t* Extension hook for subclasses to replay any additional cached state on a\n\t* `devtools:request-state` (i.e. when a panel opens). Called only after the\n\t* base guards (disposed/superseded/targetHookId) pass. No-op by default.\n\t*/\n\tonReplayState() {}\n\tasync handleToolFixtureApply(event) {\n\t\tconst fixture = event.payload;\n\t\tif (!this.matchesFixtureTarget(fixture)) return;\n\t\tawait this.options.applyToolFixture?.(fixture);\n\t}\n\tmatchesFixtureTarget(fixture) {\n\t\tif (!fixture.hookId && !fixture.threadId) return false;\n\t\tif (fixture.hookId) return fixture.hookId === this.options.hookId;\n\t\tif (fixture.threadId && (!this.options.threadId || fixture.threadId !== this.options.threadId)) return false;\n\t\treturn true;\n\t}\n\tcreateEnvelope(eventType, visibility = \"client-state\", context = {}) {\n\t\treturn createAIDevtoolsEventEnvelope({\n\t\t\teventType,\n\t\t\tsource: \"client\",\n\t\t\tvisibility,\n\t\t\tclientId: this.options.clientId,\n\t\t\thookId: this.options.hookId,\n\t\t\t...this.options.threadId ? { threadId: this.options.threadId } : {},\n\t\t\t...context.runId ? { runId: context.runId } : {},\n\t\t\ttimestamp: Date.now()\n\t\t});\n\t}\n\tcreateMetadataPayload() {\n\t\treturn {\n\t\t\thookId: this.options.hookId,\n\t\t\thookName: this.options.metadata.hookName,\n\t\t\t...this.options.metadata.name ? { displayName: this.options.metadata.name } : {},\n\t\t\t...this.options.metadata.outputKind ? { outputKind: this.options.metadata.outputKind } : {},\n\t\t\t...this.options.metadata.framework ? { framework: this.options.metadata.framework } : {}\n\t\t};\n\t}\n};\nvar ChatDevtoolsBridge = class extends ClientDevtoolsBridge {\n\tevents;\n\tchatOptions;\n\tcurrentRunId = null;\n\tcurrentRunThreadId = null;\n\tcurrentStreamId = null;\n\tlastStreamId = null;\n\tlastRunEventContext;\n\t/** Last transported `memory:state` value, replayed when a panel opens. */\n\tlastMemoryStateValue = null;\n\t/** Transported compaction CUSTOM events, replayed when a panel opens. */\n\tlastCompactionEvents = [];\n\t/** Last transported `skills:state` value, replayed when a panel opens. */\n\tlastSkillsStateValue = null;\n\tconstructor(options) {\n\t\tsuper(withLiveClientIdentity(options, {\n\t\t\tgetSnapshot: options.getSnapshot,\n\t\t\tapplyToolFixture: (fixture) => this.applyFixture(fixture)\n\t\t}));\n\t\tthis.chatOptions = options;\n\t\tthis.events = new ChatDevtoolsAwareEventEmitter(() => options.clientId, this);\n\t}\n\tsetCurrentStreamId(streamId) {\n\t\tthis.currentStreamId = streamId;\n\t\tif (streamId) this.lastStreamId = streamId;\n\t}\n\t/**\n\t* Called by the auto-attaching emitter every time it sees a non-empty\n\t* streamId pass through. Lets devtools track the latest stream id\n\t* without the chat client wiring it up explicitly.\n\t*/\n\trecordStreamId(streamId) {\n\t\tif (streamId) this.lastStreamId = streamId;\n\t}\n\tmountWithTools(initialMessageCount) {\n\t\tthis.events.clientCreated(initialMessageCount);\n\t\tthis.emitRegistered();\n\t\tthis.emitToolsRegistered();\n\t\tthis.emitSnapshot();\n\t}\n\tnotifyToolsChanged() {\n\t\tthis.emitToolsRegistered();\n\t\tthis.emitSnapshot();\n\t}\n\tgetCurrentStreamId() {\n\t\treturn this.currentStreamId;\n\t}\n\tgetLastStreamId() {\n\t\treturn this.lastStreamId;\n\t}\n\tresolveStreamId() {\n\t\treturn this.currentStreamId ?? this.lastStreamId ?? this.chatOptions.generateId(\"stream\");\n\t}\n\tbeginRun(runId, threadId) {\n\t\tthis.currentRunId = runId;\n\t\tthis.currentRunThreadId = threadId;\n\t\tthis.lastRunEventContext = {\n\t\t\trunId,\n\t\t\tthreadId\n\t\t};\n\t}\n\tobserveChunk(chunk) {\n\t\tif (chunk.type === \"RUN_STARTED\") {\n\t\t\tthis.beginRun(chunk.runId, chunk.threadId);\n\t\t\treturn;\n\t\t}\n\t\tif (chunk.type === \"RUN_FINISHED\" || chunk.type === \"RUN_ERROR\") {\n\t\t\tconst runId = chunk.type === \"RUN_FINISHED\" ? chunk.runId : chunk.runId;\n\t\t\tif (!runId || runId === this.currentRunId) {\n\t\t\t\tconst context = this.getCurrentRunEventContext();\n\t\t\t\tif (context) this.lastRunEventContext = context;\n\t\t\t\tthis.currentRunId = null;\n\t\t\t\tthis.currentRunThreadId = null;\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* Record a transported `memory:state` value (the server memory middleware's\n\t* per-turn recall metrics + store snapshot). Called from the chat client's\n\t* `onCustomEvent` handler — the designated path for CUSTOM stream events —\n\t* NOT from `observeChunk`. Re-emits the browser `memory:*` events the devtools\n\t* store consumes, and caches the value so a panel opened later can replay it\n\t* (see {@link onReplayState}). Symmetric with the generation bridge's\n\t* `recordResultChange` / `recordProgressChange`.\n\t*/\n\trecordMemoryState(rawValue) {\n\t\tthis.lastMemoryStateValue = rawValue;\n\t\tthis.emitMemoryState(rawValue);\n\t}\n\trecordSkillsState(rawValue) {\n\t\tthis.lastSkillsStateValue = rawValue;\n\t\tthis.emitSkillsState(rawValue);\n\t}\n\t/**\n\t* Re-emit the browser-side `memory:*` events from a transported\n\t* `memory:state` value. The devtools store consumes these to render the\n\t* Memory tab (operations timeline + live contents). The recall pair mirrors\n\t* the server middleware's own emits; the snapshot is included only when the\n\t* adapter supports introspection.\n\t*/\n\temitMemoryState(rawValue) {\n\t\tif (!rawValue || typeof rawValue !== \"object\") return;\n\t\tconst value = rawValue;\n\t\tconst scope = value.scope;\n\t\tconst adapter = value.adapter;\n\t\tif (!scope || typeof adapter !== \"string\") return;\n\t\tconst runContext = this.currentRunId ? { runId: this.currentRunId } : {};\n\t\temitAIDevtoolsEvent(\"memory:retrieve:started\", {\n\t\t\t...this.createEnvelope(\"memory:retrieve:started\", \"client-state\", runContext),\n\t\t\tscope,\n\t\t\tadapter,\n\t\t\tquery: value.query ?? \"\"\n\t\t});\n\t\tif (value.recall) emitAIDevtoolsEvent(\"memory:retrieve:completed\", {\n\t\t\t...this.createEnvelope(\"memory:retrieve:completed\", \"client-state\", runContext),\n\t\t\tscope,\n\t\t\tadapter,\n\t\t\tfragmentCount: value.recall.fragmentCount ?? 0,\n\t\t\thasTools: Boolean(value.recall.hasTools),\n\t\t\tsystemPromptChars: value.recall.systemPromptChars ?? 0,\n\t\t\tdurationMs: value.recall.durationMs ?? 0\n\t\t});\n\t\tif (value.snapshot) emitAIDevtoolsEvent(\"memory:snapshot\", {\n\t\t\t...this.createEnvelope(\"memory:snapshot\", \"client-state\", runContext),\n\t\t\tscope,\n\t\t\tadapter,\n\t\t\ttakenAt: value.snapshot.takenAt,\n\t\t\tdata: value.snapshot.data,\n\t\t\tfacts: value.snapshot.facts ?? []\n\t\t});\n\t}\n\t/**\n\t* Record a transported compaction CUSTOM event. Called from the chat\n\t* client's `onCustomEvent` handler so server-side compaction reaches the\n\t* browser DevTools panel.\n\t*/\n\trecordCompactionEvent(eventType, rawValue) {\n\t\tthis.lastCompactionEvents.push({\n\t\t\teventType,\n\t\t\tvalue: rawValue\n\t\t});\n\t\tif (this.lastCompactionEvents.length > 60) this.lastCompactionEvents.splice(0, this.lastCompactionEvents.length - 60);\n\t\tthis.emitCompactionEvent(eventType, rawValue);\n\t}\n\trecordCompactionState(rawValue) {\n\t\tthis.recordCompactionEvent(\"compaction:state\", rawValue);\n\t}\n\temitCompactionEvent(eventType, rawValue) {\n\t\tconst runContext = this.currentRunId ? { runId: this.currentRunId } : {};\n\t\tif (eventType === \"compaction:started\") {\n\t\t\tconst value = readCompactionBoundaryValue(rawValue);\n\t\t\temitAIDevtoolsEvent(\"compaction:started\", {\n\t\t\t\t...this.createEnvelope(\"compaction:started\", \"client-state\", runContext),\n\t\t\t\t...value\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (eventType === \"compaction:ended\") {\n\t\t\tconst value = readCompactionBoundaryValue(rawValue);\n\t\t\temitAIDevtoolsEvent(\"compaction:ended\", {\n\t\t\t\t...this.createEnvelope(\"compaction:ended\", \"client-state\", runContext),\n\t\t\t\t...value\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (eventType === \"compaction:state\") {\n\t\t\tconst value = readCompactionStateValue(rawValue);\n\t\t\tif (!value) return;\n\t\t\temitAIDevtoolsEvent(\"compaction:state\", {\n\t\t\t\t...this.createEnvelope(\"compaction:state\", \"client-state\", runContext),\n\t\t\t\t...value\n\t\t\t});\n\t\t}\n\t}\n\temitSkillsState(rawValue) {\n\t\tif (!rawValue || typeof rawValue !== \"object\") return;\n\t\tconst value = rawValue;\n\t\tconst catalog = Array.isArray(value.catalog) ? value.catalog : [];\n\t\tconst activated = Array.isArray(value.activated) ? value.activated : [];\n\t\tconst runContext = this.currentRunId ? { runId: this.currentRunId } : {};\n\t\temitAIDevtoolsEvent(\"skills:snapshot\", {\n\t\t\t...this.createEnvelope(\"skills:snapshot\", \"client-state\", runContext),\n\t\t\tcatalog,\n\t\t\tactivated\n\t\t});\n\t}\n\tonReplayState() {\n\t\tif (this.lastMemoryStateValue != null) this.emitMemoryState(this.lastMemoryStateValue);\n\t\tfor (const event of this.lastCompactionEvents) this.emitCompactionEvent(event.eventType, event.value);\n\t\tif (this.lastSkillsStateValue != null) this.emitSkillsState(this.lastSkillsStateValue);\n\t}\n\tgetCurrentRunEventContext() {\n\t\tif (!this.currentRunId) return void 0;\n\t\treturn {\n\t\t\tthreadId: this.currentRunThreadId ?? this.chatOptions.threadId ?? \"\",\n\t\t\trunId: this.currentRunId\n\t\t};\n\t}\n\tgetCurrentOrLastRunEventContext() {\n\t\treturn this.getCurrentRunEventContext() ?? this.lastRunEventContext;\n\t}\n\tfindToolCallContext(toolCallId) {\n\t\tconst base = { toolCallId };\n\t\tconst runContext = this.getCurrentRunEventContext();\n\t\tif (runContext) return {\n\t\t\tthreadId: runContext.threadId,\n\t\t\trunId: runContext.runId,\n\t\t\ttoolCallId\n\t\t};\n\t\tif (this.chatOptions.threadId) return {\n\t\t\tthreadId: this.chatOptions.threadId,\n\t\t\ttoolCallId\n\t\t};\n\t\treturn base;\n\t}\n\t/**\n\t* Entry point invoked when the devtools panel emits\n\t* `devtools:tool-fixture:apply`. The chat client never calls this\n\t* directly; it is wired through the base bridge's fixture subscription.\n\t*/\n\tasync applyFixture(fixture) {\n\t\tconst messages = this.chatOptions.getMessages();\n\t\tconst threadId = fixture.threadId ?? this.chatOptions.threadId ?? \"\";\n\t\tif (fixture.execute) {\n\t\t\tawait this.executeFixture(fixture, messages, threadId);\n\t\t\treturn;\n\t\t}\n\t\tconst { message, toolCallId } = this.createReplayMessageFromFixture(fixture, messages);\n\t\tconst messageId = message.id;\n\t\tthis.events.messageAppended(message, void 0, {\n\t\t\tthreadId,\n\t\t\ttoolCallId,\n\t\t\t...fixture.runId ? { runId: fixture.runId } : {}\n\t\t});\n\t\tthis.chatOptions.setMessages([...messages, message]);\n\t\tthis.events.toolFixtureApplied({\n\t\t\thookId: this.chatOptions.hookId,\n\t\t\tthreadId,\n\t\t\t...fixture.runId ? { runId: fixture.runId } : {},\n\t\t\ttoolName: fixture.toolName,\n\t\t\tinput: fixture.input,\n\t\t\toutput: fixture.output,\n\t\t\tmessageId,\n\t\t\ttoolCallId,\n\t\t\t...fixture.execute !== void 0 ? { execute: fixture.execute } : {},\n\t\t\t...fixture.message ? { message: fixture.message } : {},\n\t\t\t...fixture.errorText ? { errorText: fixture.errorText } : {}\n\t\t});\n\t\tthis.emitSnapshot();\n\t}\n\tasync executeFixture(fixture, messages, threadId) {\n\t\tconst toolCallId = this.resolveFixtureToolCallId(fixture.toolCallId, messages);\n\t\tconst messageId = this.resolveFixtureMessageId(fixture.messageId, messages);\n\t\tconst message = {\n\t\t\tid: messageId,\n\t\t\trole: \"assistant\",\n\t\t\tparts: [{\n\t\t\t\ttype: \"tool-call\",\n\t\t\t\tid: toolCallId,\n\t\t\t\tname: fixture.toolName,\n\t\t\t\targuments: stringifyFixtureValue(fixture.input),\n\t\t\t\tinput: fixture.input,\n\t\t\t\tstate: \"input-complete\"\n\t\t\t}],\n\t\t\tcreatedAt: /* @__PURE__ */ new Date()\n\t\t};\n\t\tthis.events.messageAppended(message, void 0, {\n\t\t\tthreadId,\n\t\t\ttoolCallId,\n\t\t\t...fixture.runId ? { runId: fixture.runId } : {}\n\t\t});\n\t\tthis.chatOptions.setMessages([...messages, message]);\n\t\tthis.emitSnapshot();\n\t\tconst executeFunc = this.findClientTool(fixture.toolName)?.execute;\n\t\tif (!executeFunc) {\n\t\t\tconsole.warn(`[ai-devtools] tool fixture \"${fixture.toolName}\" requested execute=true but no client tool implementation is registered; replaying saved output instead.`);\n\t\t\tthis.addToolResultForFixture({\n\t\t\t\tfixture,\n\t\t\t\tmessageId,\n\t\t\t\ttoolCallId,\n\t\t\t\tthreadId,\n\t\t\t\toutput: fixture.output,\n\t\t\t\terrorText: fixture.errorText\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tlet output;\n\t\ttry {\n\t\t\toutput = await executeFunc(fixture.input);\n\t\t} catch (error) {\n\t\t\tconsole.error(`[ai-devtools] tool fixture \"${fixture.toolName}\" execute threw`, error);\n\t\t\tthis.addToolResultForFixture({\n\t\t\t\tfixture,\n\t\t\t\tmessageId,\n\t\t\t\ttoolCallId,\n\t\t\t\tthreadId,\n\t\t\t\toutput: null,\n\t\t\t\terrorText: error instanceof Error ? `${error.name}: ${error.message}` : `Tool execution failed: ${String(error)}`\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis.addToolResultForFixture({\n\t\t\tfixture,\n\t\t\tmessageId,\n\t\t\ttoolCallId,\n\t\t\tthreadId,\n\t\t\toutput\n\t\t});\n\t}\n\taddToolResultForFixture(input) {\n\t\tconst state = input.errorText ? \"output-error\" : \"output-available\";\n\t\tthis.events.toolResultAdded(input.toolCallId, input.fixture.toolName, input.output, state, {\n\t\t\tthreadId: input.threadId,\n\t\t\t...input.fixture.runId ? { runId: input.fixture.runId } : {},\n\t\t\ttoolCallId: input.toolCallId\n\t\t});\n\t\tthis.chatOptions.addToolResult(input.toolCallId, input.output, input.errorText);\n\t\tthis.events.toolFixtureApplied({\n\t\t\thookId: this.chatOptions.hookId,\n\t\t\tthreadId: input.threadId,\n\t\t\t...input.fixture.runId ? { runId: input.fixture.runId } : {},\n\t\t\ttoolName: input.fixture.toolName,\n\t\t\tinput: input.fixture.input,\n\t\t\toutput: input.output,\n\t\t\texecute: true,\n\t\t\tmessageId: input.messageId,\n\t\t\ttoolCallId: input.toolCallId,\n\t\t\t...input.errorText ? { errorText: input.errorText } : {}\n\t\t});\n\t\tthis.emitSnapshot();\n\t}\n\tcreateReplayMessageFromFixture(fixture, messages) {\n\t\tconst cloned = this.cloneFixtureSourceMessage(fixture, messages);\n\t\tif (cloned) return cloned;\n\t\tconst toolCallId = this.resolveFixtureToolCallId(fixture.toolCallId, messages);\n\t\tconst messageId = this.resolveFixtureMessageId(fixture.messageId, messages);\n\t\tconst state = fixture.errorText ? \"error\" : \"complete\";\n\t\treturn {\n\t\t\ttoolCallId,\n\t\t\tmessage: {\n\t\t\t\tid: messageId,\n\t\t\t\trole: \"assistant\",\n\t\t\t\tparts: [{\n\t\t\t\t\ttype: \"tool-call\",\n\t\t\t\t\tid: toolCallId,\n\t\t\t\t\tname: fixture.toolName,\n\t\t\t\t\targuments: stringifyFixtureValue(fixture.input),\n\t\t\t\t\tinput: fixture.input,\n\t\t\t\t\tstate: \"input-complete\",\n\t\t\t\t\toutput: fixture.output\n\t\t\t\t}, {\n\t\t\t\t\ttype: \"tool-result\",\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\tcontent: stringifyFixtureValue(fixture.output),\n\t\t\t\t\tstate,\n\t\t\t\t\t...fixture.errorText ? { error: fixture.errorText } : {}\n\t\t\t\t}],\n\t\t\t\tcreatedAt: /* @__PURE__ */ new Date()\n\t\t\t}\n\t\t};\n\t}\n\tcloneFixtureSourceMessage(fixture, messages) {\n\t\tconst sourceMessage = fixture.message;\n\t\tif (!sourceMessage || !Array.isArray(sourceMessage.parts)) return;\n\t\tconst toolCallIds = this.createFixtureToolCallIdMap(sourceMessage.parts, messages);\n\t\tconst parts = sourceMessage.parts.map((part) => cloneFixtureMessagePart(part, toolCallIds)).filter((part) => Boolean(part));\n\t\tconst mappedFixtureToolCallId = fixture.toolCallId ? toolCallIds.get(fixture.toolCallId) : void 0;\n\t\thydrateToolCallOutputs(parts, {\n\t\t\t...mappedFixtureToolCallId ? { mappedToolCallId: mappedFixtureToolCallId } : {},\n\t\t\toutput: fixture.output\n\t\t});\n\t\tif (parts.length === 0) return void 0;\n\t\tconst toolCallId = (fixture.toolCallId ? toolCallIds.get(fixture.toolCallId) : void 0) ?? firstToolCallId(parts);\n\t\tif (!toolCallId) return void 0;\n\t\treturn {\n\t\t\ttoolCallId,\n\t\t\tmessage: {\n\t\t\t\tid: this.resolveFixtureMessageId(sourceMessage.id, messages),\n\t\t\t\trole: sourceMessage.role,\n\t\t\t\tparts,\n\t\t\t\tcreatedAt: /* @__PURE__ */ new Date()\n\t\t\t}\n\t\t};\n\t}\n\tcreateFixtureToolCallIdMap(parts, messages) {\n\t\tconst ids = /* @__PURE__ */ new Map();\n\t\tfor (const part of parts) {\n\t\t\tif (!isRecord(part) || part.type !== \"tool-call\") continue;\n\t\t\tif (typeof part.id !== \"string\") continue;\n\t\t\tids.set(part.id, this.resolveFixtureToolCallId(part.id, messages));\n\t\t}\n\t\treturn ids;\n\t}\n\tresolveFixtureMessageId(messageId, messages) {\n\t\tif (messageId && !messages.some((message) => message.id === messageId)) return messageId;\n\t\treturn this.chatOptions.generateId(\"fixture-msg\");\n\t}\n\tresolveFixtureToolCallId(toolCallId, messages) {\n\t\tif (toolCallId && !hasToolCallId(messages, toolCallId)) return toolCallId;\n\t\treturn this.chatOptions.generateId(\"fixture-tool-call\");\n\t}\n\tfindClientTool(name) {\n\t\tconst tools = this.chatOptions.getTools?.();\n\t\tif (!tools) return void 0;\n\t\tfor (const tool of tools) if (tool.name === name) return tool;\n\t}\n};\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null;\n}\nfunction stringifyFixtureValue(value) {\n\tif (typeof value === \"string\") return value;\n\tif (value === void 0 || typeof value === \"function\" || typeof value === \"symbol\") return String(value);\n\ttry {\n\t\treturn JSON.stringify(value);\n\t} catch (error) {\n\t\tconsole.error(\"[ai-devtools] failed to JSON.stringify fixture value; falling back to String(). Tool call arguments may be malformed.\", {\n\t\t\terror,\n\t\t\tvalue\n\t\t});\n\t\treturn String(value);\n\t}\n}\nfunction parseFixtureResultContent(content) {\n\ttry {\n\t\treturn JSON.parse(content);\n\t} catch (error) {\n\t\tconsole.error(\"[ai-devtools] failed to JSON.parse fixture result content; replaying as raw string. Fixture payload may be corrupted.\", {\n\t\t\terror,\n\t\t\tcontent\n\t\t});\n\t\treturn content;\n\t}\n}\nfunction cloneFixtureMessagePart(part, toolCallIds) {\n\tif (!isRecord(part) || typeof part.type !== \"string\") return void 0;\n\tconst cloned = { ...part };\n\tif (part.type === \"tool-call\" && typeof part.id === \"string\") cloned.id = toolCallIds.get(part.id) ?? part.id;\n\tif (part.type === \"tool-result\" && typeof part.toolCallId === \"string\") cloned.toolCallId = toolCallIds.get(part.toolCallId) ?? part.toolCallId;\n\treturn cloned;\n}\nfunction firstToolCallId(parts) {\n\tconst toolCall = parts.find((part) => part.type === \"tool-call\");\n\treturn toolCall?.type === \"tool-call\" ? toolCall.id : void 0;\n}\nfunction hydrateToolCallOutputs(parts, fixtureOutput) {\n\tfor (const part of parts) {\n\t\tif (part.type !== \"tool-result\") continue;\n\t\tconst toolCall = parts.find((candidate) => candidate.type === \"tool-call\" && candidate.id === part.toolCallId && candidate.output === void 0);\n\t\tif (toolCall) toolCall.output = Array.isArray(part.content) ? part.content : parseFixtureResultContent(part.content);\n\t}\n\tif (fixtureOutput.mappedToolCallId && fixtureOutput.output !== void 0) {\n\t\tconst toolCall = parts.find((candidate) => candidate.type === \"tool-call\" && candidate.id === fixtureOutput.mappedToolCallId && candidate.output === void 0);\n\t\tif (toolCall) toolCall.output = fixtureOutput.output;\n\t}\n}\nfunction hasToolCallId(messages, toolCallId) {\n\treturn messages.some((message) => message.parts.some((part) => {\n\t\tif (part.type === \"tool-call\") return part.id === toolCallId;\n\t\tif (part.type === \"tool-result\") return part.toolCallId === toolCallId;\n\t\treturn false;\n\t}));\n}\nvar GenerationDevtoolsBridge = class extends ClientDevtoolsBridge {\n\tactiveRunId = null;\n\tactiveRunStarted = false;\n\tdevtoolsRuns = [];\n\tmaxRuns;\n\tgetCoreState;\n\tconstructor(options) {\n\t\tsuper(withLiveClientIdentity(options, { getSnapshot: () => this.buildSnapshot() }));\n\t\tthis.maxRuns = options.maxRuns ?? 20;\n\t\tthis.getCoreState = options.getCoreState;\n\t}\n\tbeginRun(input) {\n\t\tconst runId = this.generateRunId();\n\t\tthis.activeRunId = runId;\n\t\tthis.activeRunStarted = false;\n\t\tthis.upsertRun(runId, {\n\t\t\tinput,\n\t\t\tresult: null,\n\t\t\tpreview: this.createPreview(null),\n\t\t\tprogress: null,\n\t\t\tstatus: \"generating\",\n\t\t\tisLoading: true,\n\t\t\tclearError: true\n\t\t});\n\t\treturn runId;\n\t}\n\tensureRunStarted(runId) {\n\t\tif (this.activeRunStarted && this.activeRunId === runId) return;\n\t\tif (!this.activeRunStarted && this.activeRunId && this.activeRunId !== runId) this.renameRun(this.activeRunId, runId);\n\t\tthis.activeRunId = runId;\n\t\tthis.activeRunStarted = true;\n\t\tthis.upsertRun(runId, {\n\t\t\tstatus: \"generating\",\n\t\t\tisLoading: true,\n\t\t\tclearError: true\n\t\t});\n\t\tthis.emitRunLifecycle(\"run:started\", runId, \"started\");\n\t\tthis.emitState();\n\t}\n\tfinishRun(runId, eventType, status, error) {\n\t\tthis.ensureRunStarted(runId);\n\t\tconst completedAt = Date.now();\n\t\tconst completedProgress = status === \"completed\" ? this.completeProgress() : this.getProgress();\n\t\tconst runStatus = status === \"completed\" ? \"success\" : status === \"errored\" ? \"error\" : \"cancelled\";\n\t\tthis.upsertRun(runId, {\n\t\t\tstatus: runStatus,\n\t\t\tisLoading: false,\n\t\t\tprogress: completedProgress,\n\t\t\tcompletedAt,\n\t\t\t...error ? { error } : { clearError: true }\n\t\t});\n\t\tif (this.activeRunId === runId) this.activeRunId = null;\n\t\tthis.activeRunStarted = false;\n\t\tthis.emitRunLifecycle(eventType, runId, status, { ...error ? { error } : {} });\n\t\tthis.emitState();\n\t}\n\tgetActiveRunId() {\n\t\treturn this.activeRunId;\n\t}\n\t/** Clear all per-run history. Called when the client `reset()`s. */\n\tresetRuns() {\n\t\tthis.activeRunId = null;\n\t\tthis.activeRunStarted = false;\n\t\tthis.devtoolsRuns = [];\n\t}\n\t/** Record state changes from the client and emit the matching snapshot. */\n\trecordResultChange() {\n\t\tthis.updateActiveRun({\n\t\t\tresult: this.getCoreState().result,\n\t\t\tpreview: this.createPreview(this.getCoreState().result),\n\t\t\tclearError: true\n\t\t});\n\t\tthis.emitState();\n\t}\n\trecordLoadingChange() {\n\t\tthis.updateActiveRun({ isLoading: this.getCoreState().isLoading });\n\t\tthis.emitState();\n\t}\n\trecordErrorChange(error) {\n\t\tthis.updateActiveRun(error ? { error: error.message } : { clearError: true });\n\t\tthis.emitState();\n\t}\n\trecordStatusChange(status) {\n\t\tthis.updateActiveRun({ status });\n\t\tthis.emitState();\n\t}\n\trecordProgressChange() {\n\t\tthis.updateActiveRun({ progress: this.getCoreState().progress });\n\t\tthis.emitState();\n\t}\n\t/** Emit the latest snapshot without touching run state. */\n\temitState() {\n\t\tthis.emitUpdated();\n\t\tthis.emitSnapshot();\n\t}\n\tbuildSnapshot() {\n\t\tconst core = this.getCoreState();\n\t\treturn {\n\t\t\tinput: core.input,\n\t\t\tresult: core.result,\n\t\t\tpreview: this.createPreview(core.result),\n\t\t\tprogress: core.progress,\n\t\t\tstatus: core.status,\n\t\t\tisLoading: core.isLoading,\n\t\t\tactiveRunId: this.activeRunId,\n\t\t\truns: this.devtoolsRuns,\n\t\t\t...core.error ? { error: core.error } : {}\n\t\t};\n\t}\n\tupdateActiveRun(patch) {\n\t\tif (!this.activeRunId) return;\n\t\tthis.upsertRun(this.activeRunId, patch);\n\t}\n\tupsertRun(runId, patch) {\n\t\tconst now = Date.now();\n\t\tconst index = this.devtoolsRuns.findIndex((run) => run.id === runId);\n\t\tconst existing = index >= 0 ? this.devtoolsRuns[index] : void 0;\n\t\tconst next = existing ? { ...existing } : {\n\t\t\tid: runId,\n\t\t\tinput: this.getCoreState().input,\n\t\t\tresult: null,\n\t\t\tpreview: this.createPreview(null),\n\t\t\tprogress: null,\n\t\t\tstatus: \"idle\",\n\t\t\tisLoading: false,\n\t\t\tstartedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tif (\"input\" in patch) next.input = patch.input ?? null;\n\t\tif (\"result\" in patch) next.result = patch.result ?? null;\n\t\tif (patch.preview) next.preview = patch.preview;\n\t\tif (\"progress\" in patch) next.progress = patch.progress ?? null;\n\t\tif (patch.status) next.status = patch.status;\n\t\tif (\"isLoading\" in patch) next.isLoading = patch.isLoading === true;\n\t\tif (patch.completedAt !== void 0) next.completedAt = patch.completedAt;\n\t\tif (patch.clearError) delete next.error;\n\t\tif (patch.error !== void 0) next.error = patch.error;\n\t\tnext.updatedAt = now;\n\t\tif (index >= 0) this.devtoolsRuns = this.devtoolsRuns.map((run) => run.id === runId ? next : run);\n\t\telse this.devtoolsRuns = [...this.devtoolsRuns, next];\n\t\tif (this.devtoolsRuns.length > this.maxRuns) this.devtoolsRuns = this.devtoolsRuns.slice(-this.maxRuns);\n\t}\n\trenameRun(previousRunId, nextRunId) {\n\t\tif (previousRunId === nextRunId) return;\n\t\tconst existing = this.devtoolsRuns.find((run) => run.id === previousRunId);\n\t\tif (!existing) return;\n\t\tconst renamed = {\n\t\t\t...existing,\n\t\t\tid: nextRunId,\n\t\t\tupdatedAt: Date.now()\n\t\t};\n\t\tthis.devtoolsRuns = this.devtoolsRuns.filter((run) => run.id !== nextRunId).map((run) => run.id === previousRunId ? renamed : run);\n\t}\n\tgetProgress() {\n\t\treturn this.getCoreState().progress;\n\t}\n\tcompleteProgress() {\n\t\tconst progress = this.getCoreState().progress;\n\t\tif (!progress) return null;\n\t\treturn {\n\t\t\tvalue: 100,\n\t\t\t...progress.message ? { message: progress.message } : {}\n\t\t};\n\t}\n\tcreatePreview(result) {\n\t\treturn createAIDevtoolsGenerationPreview({\n\t\t\toutputKind: this.options.metadata.outputKind,\n\t\t\tresult\n\t\t});\n\t}\n\tgenerateRunId() {\n\t\treturn `run-${Date.now()}-${Math.random().toString(36).substring(7)}`;\n\t}\n};\nvar VideoDevtoolsBridge = class extends GenerationDevtoolsBridge {\n\tconstructor(options) {\n\t\tsuper(options);\n\t}\n\trecordJobIdChange() {\n\t\tthis.updateActiveRun({ jobId: this.getCoreState().jobId });\n\t\tthis.emitState();\n\t}\n\trecordVideoStatusChange() {\n\t\tconst core = this.getCoreState();\n\t\tthis.updateActiveRun({\n\t\t\tvideoStatus: core.videoStatus,\n\t\t\tpreview: this.createVideoPreview(core.result, core.videoStatus)\n\t\t});\n\t\tthis.emitState();\n\t}\n\tbuildSnapshot() {\n\t\tconst core = this.getCoreState();\n\t\treturn {\n\t\t\tinput: core.input,\n\t\t\tresult: core.result,\n\t\t\tpreview: this.createVideoPreview(core.result, core.videoStatus),\n\t\t\tprogress: core.progress,\n\t\t\tstatus: core.status,\n\t\t\tisLoading: core.isLoading,\n\t\t\tactiveRunId: this.activeRunId,\n\t\t\truns: this.devtoolsRuns,\n\t\t\tjobId: core.jobId,\n\t\t\tvideoStatus: core.videoStatus,\n\t\t\t...core.error ? { error: core.error } : {}\n\t\t};\n\t}\n\tupsertRun(runId, patch) {\n\t\tsuper.upsertRun(runId, patch);\n\t\tif (!(\"jobId\" in patch || \"videoStatus\" in patch)) return;\n\t\tconst index = this.devtoolsRuns.findIndex((run) => run.id === runId);\n\t\tif (index < 0) return;\n\t\tconst target = this.devtoolsRuns[index];\n\t\tif (!target) return;\n\t\tconst merged = { ...target };\n\t\tif (\"jobId\" in patch) merged.jobId = patch.jobId ?? null;\n\t\tif (\"videoStatus\" in patch) merged.videoStatus = patch.videoStatus ?? null;\n\t\tthis.devtoolsRuns = this.devtoolsRuns.map((run) => run.id === runId ? merged : run);\n\t}\n\tcreatePreview(result) {\n\t\tconst core = this.getCoreState();\n\t\treturn this.createVideoPreview(result, core.videoStatus);\n\t}\n\tcreateVideoPreview(result, videoStatus) {\n\t\treturn createAIDevtoolsGenerationPreview({\n\t\t\toutputKind: this.options.metadata.outputKind,\n\t\t\tresult,\n\t\t\tvideoStatus\n\t\t});\n\t}\n};\nvar ChatDevtoolsAwareEventEmitter = class extends DefaultChatClientEventEmitter {\n\tgetClientId;\n\thelper;\n\tconstructor(getClientId, helper) {\n\t\tsuper(getClientId());\n\t\tthis.getClientId = getClientId;\n\t\tthis.helper = helper;\n\t}\n\temitEvent(eventName, data) {\n\t\tthis.clientId = this.getClientId();\n\t\tsuper.emitEvent(eventName, data);\n\t}\n\tafterEmit(streamId) {\n\t\tif (streamId) this.helper.recordStreamId(streamId);\n\t\tthis.helper.emitSnapshot();\n\t}\n\ttextUpdated(streamId, messageId, content, context) {\n\t\tsuper.textUpdated(streamId, messageId, content, context ?? this.helper.getCurrentRunEventContext());\n\t\tthis.afterEmit(streamId);\n\t}\n\tthinkingUpdated(streamId, messageId, content, delta, context) {\n\t\tsuper.thinkingUpdated(streamId, messageId, content, delta, context ?? this.helper.getCurrentRunEventContext());\n\t\tthis.afterEmit(streamId);\n\t}\n\tmessageAppended(uiMessage, streamId, context) {\n\t\tsuper.messageAppended(uiMessage, streamId, context ?? this.helper.getCurrentRunEventContext());\n\t\tthis.afterEmit(streamId);\n\t}\n\ttoolCallStateChanged(streamId, messageId, toolCallId, toolName, state, args, context) {\n\t\tsuper.toolCallStateChanged(streamId, messageId, toolCallId, toolName, state, args, context ?? this.helper.getCurrentRunEventContext());\n\t\tthis.afterEmit(streamId);\n\t}\n\tstructuredOutputChanged(eventName, streamId, messageId, output, context) {\n\t\tsuper.structuredOutputChanged(eventName, streamId, messageId, output, context ?? this.helper.getCurrentOrLastRunEventContext());\n\t\tthis.afterEmit(streamId);\n\t}\n\tapprovalRequested(streamId, messageId, toolCallId, toolName, input, approvalId, context) {\n\t\tsuper.approvalRequested(streamId, messageId, toolCallId, toolName, input, approvalId, context ?? this.helper.getCurrentOrLastRunEventContext());\n\t\tthis.afterEmit(streamId);\n\t}\n\ttoolResultAdded(toolCallId, toolName, output, state, context) {\n\t\tsuper.toolResultAdded(toolCallId, toolName, output, state, context ?? this.helper.getCurrentRunEventContext());\n\t\tthis.afterEmit();\n\t}\n\ttoolApprovalResponded(approvalId, toolCallId, approved, context) {\n\t\tsuper.toolApprovalResponded(approvalId, toolCallId, approved, context ?? this.helper.getCurrentRunEventContext());\n\t\tthis.afterEmit();\n\t}\n\tclientCreated(initialMessageCount) {\n\t\tsuper.clientCreated(initialMessageCount);\n\t\tthis.afterEmit();\n\t}\n\tloadingChanged(isLoading) {\n\t\tsuper.loadingChanged(isLoading);\n\t\tthis.afterEmit();\n\t}\n\terrorChanged(error) {\n\t\tsuper.errorChanged(error);\n\t\tthis.afterEmit();\n\t}\n\treloaded(fromMessageIndex) {\n\t\tsuper.reloaded(fromMessageIndex);\n\t\tthis.afterEmit();\n\t}\n\tstopped() {\n\t\tsuper.stopped();\n\t\tthis.afterEmit();\n\t}\n\tmessagesCleared() {\n\t\tsuper.messagesCleared();\n\t\tthis.afterEmit();\n\t}\n\tmessageSent(messageId, content) {\n\t\tsuper.messageSent(messageId, content);\n\t\tthis.afterEmit();\n\t}\n\ttoolFixtureApplied(fixture) {\n\t\tsuper.toolFixtureApplied(fixture);\n\t\tthis.afterEmit();\n\t}\n};\nfunction createChatDevtoolsBridge(options) {\n\treturn new ChatDevtoolsBridge(options);\n}\nfunction createGenerationDevtoolsBridge(options) {\n\treturn new GenerationDevtoolsBridge(options);\n}\nfunction createVideoDevtoolsBridge(options) {\n\treturn new VideoDevtoolsBridge(options);\n}\n//#endregion\nexport { ChatDevtoolsBridge, ClientDevtoolsBridge, GenerationDevtoolsBridge, VideoDevtoolsBridge, createAIDevtoolsGenerationPreview, createChatDevtoolsBridge, createGenerationDevtoolsBridge, createVideoDevtoolsBridge };\n\n//# sourceMappingURL=devtools.js.map","import { ChatClient } from \"@tanstack/ai-client\";\nimport { createChatDevtoolsBridge } from \"@tanstack/ai-client/devtools\";\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\n//#region src/use-chat.ts\nvar EMPTY_INTERRUPTS = Object.freeze([]);\nvar EMPTY_INTERRUPT_ERRORS = Object.freeze([]);\nfunction useChat(options) {\n\tconst hookId = useId();\n\tconst clientId = options.threadId ?? hookId;\n\tconst [messages, setMessages] = useState(options.initialMessages || []);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState(void 0);\n\tconst [status, setStatus] = useState(\"ready\");\n\tconst [isSubscribed, setIsSubscribed] = useState(false);\n\tconst [connectionStatus, setConnectionStatus] = useState(\"disconnected\");\n\tconst [sessionGenerating, setSessionGenerating] = useState(false);\n\tconst [queue, setQueue] = useState([]);\n\tconst [runId, setRunId] = useState(null);\n\tconst [interruptState, setInterruptState] = useState(() => ({\n\t\tinterrupts: EMPTY_INTERRUPTS,\n\t\tpendingInterrupts: EMPTY_INTERRUPTS,\n\t\tinterruptErrors: EMPTY_INTERRUPT_ERRORS,\n\t\tresuming: false\n\t}));\n\tconst messagesRef = useRef(options.initialMessages || []);\n\tconst isFirstMountRef = useRef(true);\n\tconst subscribedRef = useRef(false);\n\tconst activeClientRef = useRef(null);\n\tconst cleanupInvalidationRef = useRef(null);\n\tconst cleanupDisposalRef = useRef(null);\n\tmessagesRef.current = messages;\n\tconst optionsRef = useRef(options);\n\toptionsRef.current = options;\n\tconst syncResumeState = useCallback((target) => {\n\t\tif (!target) return;\n\t\tsetRunId(target.getCurrentRunId());\n\t\tsetInterruptState(target.getInterruptState());\n\t}, []);\n\tconst { client, initialization } = useMemo(() => {\n\t\tconst messagesToUse = options.initialMessages || [];\n\t\tisFirstMountRef.current = false;\n\t\tconst initialOptions = optionsRef.current;\n\t\tconst transport = initialOptions.connection ? { connection: initialOptions.connection } : { fetcher: initialOptions.fetcher };\n\t\tconst instanceHolder = { current: void 0 };\n\t\tconst getActiveInstance = () => {\n\t\t\tconst currentInstance = instanceHolder.current;\n\t\t\tif (!currentInstance || activeClientRef.current !== currentInstance) return;\n\t\t\treturn currentInstance;\n\t\t};\n\t\tconst initializationState = {\n\t\t\tready: false,\n\t\t\tcallbacks: []\n\t\t};\n\t\tconst runOrQueueForActiveInstance = (callback) => {\n\t\t\tif (!initializationState.ready) {\n\t\t\t\tinitializationState.callbacks.push(callback);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst currentInstance = instanceHolder.current;\n\t\t\tif (!currentInstance || activeClientRef.current !== currentInstance) return;\n\t\t\tcallback();\n\t\t};\n\t\tconst instance = new ChatClient({\n\t\t\tdevtoolsBridgeFactory: createChatDevtoolsBridge,\n\t\t\t...transport,\n\t\t\tinitialMessages: messagesToUse,\n\t\t\t...typeof initialOptions.threadId === \"string\" && initialOptions.persistence ? {\n\t\t\t\tpersistence: initialOptions.persistence,\n\t\t\t\tthreadId: initialOptions.threadId\n\t\t\t} : { ...initialOptions.threadId !== void 0 && { threadId: initialOptions.threadId } },\n\t\t\t...initialOptions.body !== void 0 && { body: initialOptions.body },\n\t\t\t...initialOptions.forwardedProps !== void 0 && { forwardedProps: initialOptions.forwardedProps },\n\t\t\t...initialOptions.byok !== void 0 && { byok: initialOptions.byok },\n\t\t\tbyokProvider: () => optionsRef.current.byokProvider?.(),\n\t\t\t...initialOptions.initialResumeSnapshot !== void 0 && { initialResumeSnapshot: initialOptions.initialResumeSnapshot },\n\t\t\t...initialOptions.context !== void 0 && { context: initialOptions.context },\n\t\t\tdevtools: {\n\t\t\t\t...initialOptions.devtools,\n\t\t\t\tframework: \"react\",\n\t\t\t\thookName: \"useChat\",\n\t\t\t\toutputKind: initialOptions.outputSchema ? \"structured\" : \"chat\"\n\t\t\t},\n\t\t\tonResponse: (response) => {\n\t\t\t\tif (!getActiveInstance()) return;\n\t\t\t\treturn optionsRef.current.onResponse?.(response);\n\t\t\t},\n\t\t\tonChunk: (chunk) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\toptionsRef.current.onChunk?.(chunk);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonFinish: (message) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\toptionsRef.current.onFinish?.(message);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\toptionsRef.current.onError?.(error);\n\t\t\t\t});\n\t\t\t},\n\t\t\t...initialOptions.tools !== void 0 && { tools: initialOptions.tools },\n\t\t\t...initialOptions.interrupts !== void 0 && { interrupts: initialOptions.interrupts },\n\t\t\tonCustomEvent: (eventType, data, context) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\toptionsRef.current.onCustomEvent?.(eventType, data, context);\n\t\t\t\t});\n\t\t\t},\n\t\t\t...options.streamProcessor !== void 0 && { streamProcessor: options.streamProcessor },\n\t\t\tonMessagesChange: (newMessages) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetMessages(newMessages);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonLoadingChange: (newIsLoading) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tconst currentInstance = getActiveInstance();\n\t\t\t\t\tif (!currentInstance) return;\n\t\t\t\t\tsetIsLoading(newIsLoading);\n\t\t\t\t\tsyncResumeState(currentInstance);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonErrorChange: (newError) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetError(newError);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonStatusChange: (status) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetStatus(status);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonSubscriptionChange: (nextIsSubscribed) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetIsSubscribed(nextIsSubscribed);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonConnectionStatusChange: (nextStatus) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetConnectionStatus(nextStatus);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonSessionGeneratingChange: (isGenerating) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetSessionGenerating(isGenerating);\n\t\t\t\t});\n\t\t\t},\n\t\t\t...optionsRef.current.queue !== void 0 && { queue: optionsRef.current.queue },\n\t\t\tonQueueChange: (nextQueue) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetQueue(nextQueue);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonRunIdChange: (nextRunId) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetRunId(nextRunId);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonResumeStateChange: (_nextResumeState, nextPendingInterrupts) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetInterruptState((current) => ({\n\t\t\t\t\t\t...current,\n\t\t\t\t\t\tinterrupts: nextPendingInterrupts,\n\t\t\t\t\t\tpendingInterrupts: nextPendingInterrupts\n\t\t\t\t\t}));\n\t\t\t\t});\n\t\t\t},\n\t\t\tonInterruptStateChange: (nextInterruptState, context) => {\n\t\t\t\trunOrQueueForActiveInstance(() => {\n\t\t\t\t\tsetInterruptState(nextInterruptState);\n\t\t\t\t\toptionsRef.current.onInterruptStateChange?.(nextInterruptState, context);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tinstanceHolder.current = instance;\n\t\treturn {\n\t\t\tclient: instance,\n\t\t\tinitialization: initializationState\n\t\t};\n\t}, [clientId, syncResumeState]);\n\tuseEffect(() => {\n\t\tactiveClientRef.current = client;\n\t\ttry {\n\t\t\twhile (initialization.callbacks.length > 0) {\n\t\t\t\tif (activeClientRef.current !== client) {\n\t\t\t\t\tinitialization.callbacks.length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tinitialization.callbacks.shift()?.();\n\t\t\t}\n\t\t} finally {\n\t\t\tinitialization.ready = true;\n\t\t}\n\t}, [client, initialization]);\n\tuseEffect(() => {\n\t\tconst clientMessages = client.getMessages();\n\t\tif (clientMessages !== messagesRef.current) setMessages(clientMessages);\n\t}, [client]);\n\tuseEffect(() => {\n\t\tclient.updateOptions({ body: options.body });\n\t}, [client, options.body]);\n\tuseEffect(() => {\n\t\tif (options.forwardedProps !== void 0) client.updateOptions({ forwardedProps: options.forwardedProps });\n\t}, [client, options.forwardedProps]);\n\tuseEffect(() => {\n\t\tif (options.tools !== void 0) client.updateOptions({ tools: options.tools });\n\t}, [client, options.tools]);\n\tuseEffect(() => {\n\t\tclient.updateOptions({ context: options.context });\n\t}, [client, options.context]);\n\tuseEffect(() => {\n\t\tif (options.queue !== void 0) client.updateOptions({ queue: options.queue });\n\t}, [client, options.queue]);\n\tuseEffect(() => {\n\t\tif (options.live) {\n\t\t\tclient.subscribe();\n\t\t\tsubscribedRef.current = true;\n\t\t} else if (subscribedRef.current) {\n\t\t\tclient.unsubscribe();\n\t\t\tsubscribedRef.current = false;\n\t\t}\n\t}, [client, options.live]);\n\tuseEffect(() => {\n\t\tclient.attach();\n\t\treturn () => {\n\t\t\tclient.detach();\n\t\t};\n\t}, [client]);\n\tuseEffect(() => {\n\t\tif (cleanupDisposalRef.current?.client === client) {\n\t\t\tclearTimeout(cleanupDisposalRef.current.timeout);\n\t\t\tcleanupDisposalRef.current = null;\n\t\t}\n\t\tif (cleanupInvalidationRef.current) {\n\t\t\tclearTimeout(cleanupInvalidationRef.current);\n\t\t\tcleanupInvalidationRef.current = null;\n\t\t}\n\t\tclient.mountDevtools();\n\t\tsyncResumeState(client);\n\t\treturn () => {\n\t\t\tcleanupInvalidationRef.current = setTimeout(() => {\n\t\t\t\tif (activeClientRef.current === client) activeClientRef.current = null;\n\t\t\t\tcleanupInvalidationRef.current = null;\n\t\t\t}, 0);\n\t\t\tconst disposal = {\n\t\t\t\tclient,\n\t\t\t\ttimeout: setTimeout(() => {\n\t\t\t\t\tif (optionsRef.current.live) client.unsubscribe();\n\t\t\t\t\telse client.stop();\n\t\t\t\t\tclient.dispose();\n\t\t\t\t\tif (cleanupDisposalRef.current === disposal) cleanupDisposalRef.current = null;\n\t\t\t\t}, 0)\n\t\t\t};\n\t\t\tcleanupDisposalRef.current = disposal;\n\t\t};\n\t}, [client, syncResumeState]);\n\tconst sendMessage = useCallback(async (content, sendOptions) => {\n\t\ttry {\n\t\t\tawait client.sendMessage(content, void 0, sendOptions);\n\t\t} finally {\n\t\t\tsyncResumeState(client);\n\t\t}\n\t}, [client, syncResumeState]);\n\tconst cancelQueued = useCallback((id) => {\n\t\tclient.cancelQueued(id);\n\t}, [client, syncResumeState]);\n\tconst append = useCallback(async (message) => {\n\t\ttry {\n\t\t\tawait client.append(message);\n\t\t} finally {\n\t\t\tsyncResumeState(client);\n\t\t}\n\t}, [client, syncResumeState]);\n\tconst reload = useCallback(async () => {\n\t\ttry {\n\t\t\tawait client.reload();\n\t\t} finally {\n\t\t\tsyncResumeState(client);\n\t\t}\n\t}, [client, syncResumeState]);\n\tconst stop = useCallback(() => {\n\t\tclient.stop();\n\t}, [client]);\n\tconst clear = useCallback(() => {\n\t\tclient.clear();\n\t\tsyncResumeState(client);\n\t}, [client, syncResumeState]);\n\tconst setMessagesManually = useCallback((newMessages) => {\n\t\tclient.setMessagesManually(newMessages);\n\t}, [client]);\n\tconst addToolResult = useCallback(async (result) => {\n\t\tawait client.addToolResult(result);\n\t}, [client]);\n\tconst addToolApprovalResponse = useCallback(async (response) => {\n\t\tawait client.addToolApprovalResponse(response);\n\t\tsyncResumeState(client);\n\t}, [client, syncResumeState]);\n\tconst resumeInterrupts = useCallback(async (resumeItems, state) => {\n\t\tconst result = await client.resumeInterrupts(resumeItems, state ?? void 0);\n\t\tsyncResumeState(client);\n\t\treturn result;\n\t}, [client, syncResumeState]);\n\tconst resolveInterrupts = useCallback((resolution) => {\n\t\tif (typeof resolution === \"boolean\") client.resolveInterrupts(resolution);\n\t\telse client.resolveInterrupts(resolution);\n\t}, [client]);\n\tconst cancelInterrupts = useCallback(() => {\n\t\tclient.cancelInterrupts();\n\t}, [client]);\n\tconst retryInterrupts = useCallback(() => {\n\t\tclient.retryInterrupts();\n\t}, [client]);\n\tconst resumeInterruptsUnsafe = useCallback((resumeItems, state) => client.resumeInterruptsUnsafe(resumeItems, state), [client]);\n\tconst renderedMessages = client.getMessages();\n\tconst activeStructuredPart = useMemo(() => {\n\t\tlet lastUserIndex = -1;\n\t\tfor (let i = renderedMessages.length - 1; i >= 0; i--) if (renderedMessages[i]?.role === \"user\") {\n\t\t\tlastUserIndex = i;\n\t\t\tbreak;\n\t\t}\n\t\tif (lastUserIndex === -1) return null;\n\t\tfor (let i = renderedMessages.length - 1; i > lastUserIndex; i--) {\n\t\t\tconst m = renderedMessages[i];\n\t\t\tif (m?.role !== \"assistant\") continue;\n\t\t\tconst part = m.parts.find((p) => p.type === \"structured-output\");\n\t\t\tif (part) return part;\n\t\t}\n\t\treturn null;\n\t}, [renderedMessages]);\n\tconst partial = useMemo(() => {\n\t\tif (!activeStructuredPart) return {};\n\t\treturn activeStructuredPart.partial ?? activeStructuredPart.data ?? {};\n\t}, [activeStructuredPart]);\n\tconst final = useMemo(() => {\n\t\tif (!activeStructuredPart || activeStructuredPart.status !== \"complete\") return null;\n\t\treturn activeStructuredPart.data;\n\t}, [activeStructuredPart]);\n\treturn {\n\t\tmessages: renderedMessages,\n\t\tsendMessage,\n\t\tappend,\n\t\treload,\n\t\tstop,\n\t\tisLoading,\n\t\terror,\n\t\tstatus,\n\t\tisSubscribed,\n\t\tconnectionStatus,\n\t\tsessionGenerating,\n\t\tsetMessages: setMessagesManually,\n\t\tclear,\n\t\taddToolResult,\n\t\taddToolApprovalResponse,\n\t\tqueue,\n\t\tcancelQueued,\n\t\trunId,\n\t\tinterrupts: interruptState.interrupts,\n\t\tpendingInterrupts: interruptState.pendingInterrupts,\n\t\tinterruptErrors: interruptState.interruptErrors,\n\t\tresuming: interruptState.resuming,\n\t\tresolveInterrupts,\n\t\tcancelInterrupts,\n\t\tretryInterrupts,\n\t\tresumeInterruptsUnsafe,\n\t\tresumeInterrupts,\n\t\tpartial,\n\t\tfinal\n\t};\n}\n//#endregion\nexport { useChat };\n\n//# sourceMappingURL=use-chat.js.map","import { useSyncExternalStore } from \"react\";\nimport { EMPTY_BYOK_SNAPSHOT } from \"@tanstack/ai-client/byok\";\n//#region src/use-byok.ts\nfunction useByok(client) {\n\treturn useSyncExternalStore(client.subscribe, client.getSnapshot, () => EMPTY_BYOK_SNAPSHOT);\n}\n//#endregion\nexport { useByok };\n\n//# sourceMappingURL=use-byok.js.map","import { RealtimeClient } from \"@tanstack/ai-client\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n//#region src/use-realtime-chat.ts\nvar emptyFrequencyData = /* @__PURE__ */ new Uint8Array(128);\nvar emptyTimeDomainData = (/* @__PURE__ */ new Uint8Array(128)).fill(128);\n/**\n* React hook for realtime voice conversations.\n*\n* Provides a simple interface for voice-to-voice AI interactions\n* with support for multiple providers (OpenAI, ElevenLabs, etc.).\n*\n* @param options - Configuration options including adapter and callbacks\n* @returns Hook return value with state and control methods\n*\n* @example\n* ```typescript\n* import { useRealtimeChat } from '@tanstack/ai-react'\n* import { openaiRealtime } from '@tanstack/ai-openai'\n*\n* function VoiceChat() {\n* const {\n* status,\n* mode,\n* messages,\n* connect,\n* disconnect,\n* inputLevel,\n* outputLevel,\n* } = useRealtimeChat({\n* getToken: () => fetch('/api/realtime-token').then(r => r.json()),\n* adapter: openaiRealtime(),\n* })\n*\n* return (\n* <div>\n* <p>Status: {status}</p>\n* <p>Mode: {mode}</p>\n* <button onClick={status === 'idle' ? connect : disconnect}>\n* {status === 'idle' ? 'Start' : 'Stop'}\n* </button>\n* </div>\n* )\n* }\n* ```\n*/\nfunction useRealtimeChat(options) {\n\tconst [status, setStatus] = useState(\"idle\");\n\tconst [mode, setMode] = useState(\"idle\");\n\tconst [messages, setMessages] = useState([]);\n\tconst [pendingUserTranscript, setPendingUserTranscript] = useState(null);\n\tconst [pendingAssistantTranscript, setPendingAssistantTranscript] = useState(null);\n\tconst [error, setError] = useState(null);\n\tconst [inputLevel, setInputLevel] = useState(0);\n\tconst [outputLevel, setOutputLevel] = useState(0);\n\tconst clientRef = useRef(null);\n\tconst optionsRef = useRef(options);\n\toptionsRef.current = options;\n\tconst animationFrameRef = useRef(null);\n\tif (!clientRef.current) {\n\t\tconst initial = optionsRef.current;\n\t\tclientRef.current = new RealtimeClient({\n\t\t\tgetToken: initial.getToken,\n\t\t\tadapter: initial.adapter,\n\t\t\t...initial.tools !== void 0 && { tools: initial.tools },\n\t\t\t...initial.instructions !== void 0 && { instructions: initial.instructions },\n\t\t\t...initial.voice !== void 0 && { voice: initial.voice },\n\t\t\t...initial.autoPlayback !== void 0 && { autoPlayback: initial.autoPlayback },\n\t\t\t...initial.autoCapture !== void 0 && { autoCapture: initial.autoCapture },\n\t\t\t...initial.vadMode !== void 0 && { vadMode: initial.vadMode },\n\t\t\t...initial.outputModalities !== void 0 && { outputModalities: initial.outputModalities },\n\t\t\t...initial.temperature !== void 0 && { temperature: initial.temperature },\n\t\t\t...initial.maxOutputTokens !== void 0 && { maxOutputTokens: initial.maxOutputTokens },\n\t\t\t...initial.semanticEagerness !== void 0 && { semanticEagerness: initial.semanticEagerness },\n\t\t\tonStatusChange: (newStatus) => {\n\t\t\t\tsetStatus(newStatus);\n\t\t\t},\n\t\t\tonModeChange: (newMode) => {\n\t\t\t\tsetMode(newMode);\n\t\t\t\toptionsRef.current.onModeChange?.(newMode);\n\t\t\t},\n\t\t\tonMessage: (message) => {\n\t\t\t\tsetMessages((prev) => [...prev, message]);\n\t\t\t\toptionsRef.current.onMessage?.(message);\n\t\t\t},\n\t\t\tonUsage(usage) {\n\t\t\t\toptionsRef.current.onUsage?.(usage);\n\t\t\t},\n\t\t\tonGoAway(timeLeft) {\n\t\t\t\toptionsRef.current.onGoAway?.(timeLeft);\n\t\t\t},\n\t\t\tonError: (err) => {\n\t\t\t\tsetError(err);\n\t\t\t\toptionsRef.current.onError?.(err);\n\t\t\t},\n\t\t\tonConnect: () => {\n\t\t\t\tsetError(null);\n\t\t\t\toptionsRef.current.onConnect?.();\n\t\t\t},\n\t\t\tonDisconnect: () => {\n\t\t\t\toptionsRef.current.onDisconnect?.();\n\t\t\t},\n\t\t\tonInterrupted: () => {\n\t\t\t\tsetPendingAssistantTranscript(null);\n\t\t\t\toptionsRef.current.onInterrupted?.();\n\t\t\t}\n\t\t});\n\t\tclientRef.current.onStateChange((state) => {\n\t\t\tsetPendingUserTranscript(state.pendingUserTranscript);\n\t\t\tsetPendingAssistantTranscript(state.pendingAssistantTranscript);\n\t\t});\n\t}\n\tconst client = clientRef.current;\n\tuseEffect(() => {\n\t\tfunction updateLevels() {\n\t\t\tif (clientRef.current?.audio) {\n\t\t\t\tsetInputLevel(clientRef.current.audio.inputLevel);\n\t\t\t\tsetOutputLevel(clientRef.current.audio.outputLevel);\n\t\t\t}\n\t\t\tanimationFrameRef.current = requestAnimationFrame(updateLevels);\n\t\t}\n\t\tif (status === \"connected\") updateLevels();\n\t\treturn () => {\n\t\t\tif (animationFrameRef.current) {\n\t\t\t\tcancelAnimationFrame(animationFrameRef.current);\n\t\t\t\tanimationFrameRef.current = null;\n\t\t\t}\n\t\t};\n\t}, [status]);\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tclientRef.current?.destroy();\n\t\t};\n\t}, []);\n\treturn {\n\t\tstatus,\n\t\terror,\n\t\tconnect: useCallback(async () => {\n\t\t\tsetError(null);\n\t\t\tsetMessages([]);\n\t\t\tsetPendingUserTranscript(null);\n\t\t\tsetPendingAssistantTranscript(null);\n\t\t\tawait client.connect();\n\t\t}, [client]),\n\t\tdisconnect: useCallback(async () => {\n\t\t\tawait client.disconnect();\n\t\t}, [client]),\n\t\tmode,\n\t\tmessages,\n\t\tpendingUserTranscript,\n\t\tpendingAssistantTranscript,\n\t\tstartListening: useCallback(() => {\n\t\t\tclient.startListening();\n\t\t}, [client]),\n\t\tstopListening: useCallback(() => {\n\t\t\tclient.stopListening();\n\t\t}, [client]),\n\t\tinterrupt: useCallback(() => {\n\t\t\tclient.interrupt();\n\t\t}, [client]),\n\t\tsendText: useCallback((text) => {\n\t\t\tclient.sendText(text);\n\t\t}, [client]),\n\t\tsendImage: useCallback((imageData, mimeType) => {\n\t\t\tclient.sendImage(imageData, mimeType);\n\t\t}, [client]),\n\t\tinputLevel,\n\t\toutputLevel,\n\t\tgetInputFrequencyData: useCallback(() => {\n\t\t\treturn clientRef.current?.audio?.getInputFrequencyData() ?? emptyFrequencyData;\n\t\t}, []),\n\t\tgetOutputFrequencyData: useCallback(() => {\n\t\t\treturn clientRef.current?.audio?.getOutputFrequencyData() ?? emptyFrequencyData;\n\t\t}, []),\n\t\tgetInputTimeDomainData: useCallback(() => {\n\t\t\treturn clientRef.current?.audio?.getInputTimeDomainData() ?? emptyTimeDomainData;\n\t\t}, []),\n\t\tgetOutputTimeDomainData: useCallback(() => {\n\t\t\treturn clientRef.current?.audio?.getOutputTimeDomainData() ?? emptyTimeDomainData;\n\t\t}, []),\n\t\tupdateSession: useCallback((config) => {\n\t\t\tclientRef.current?.updateSession(config);\n\t\t}, [])\n\t};\n}\n//#endregion\nexport { useRealtimeChat };\n\n//# sourceMappingURL=use-realtime-chat.js.map","/**\n * table-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nfunction createColumnHelper() {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function' ? {\n ...column,\n accessorFn: accessor\n } : {\n ...column,\n accessorKey: accessor\n };\n },\n display: column => column,\n group: column => column\n };\n}\n\n// Is this type a tuple?\n\n// If this type is a tuple, what indices are allowed?\n\n///\n\nfunction functionalUpdate(updater, input) {\n return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {\n //\n}\nfunction makeStateUpdater(key, instance) {\n return updater => {\n instance.setState(old => {\n return {\n ...old,\n [key]: functionalUpdate(updater, old[key])\n };\n });\n };\n}\nfunction isFunction(d) {\n return d instanceof Function;\n}\nfunction isNumberArray(d) {\n return Array.isArray(d) && d.every(val => typeof val === 'number');\n}\nfunction flattenBy(arr, getChildren) {\n const flat = [];\n const recurse = subArr => {\n subArr.forEach(item => {\n flat.push(item);\n const children = getChildren(item);\n if (children != null && children.length) {\n recurse(children);\n }\n });\n };\n recurse(arr);\n return flat;\n}\nfunction memo(getDeps, fn, opts) {\n let deps = [];\n let result;\n return depArgs => {\n let depTime;\n if (opts.key && opts.debug) depTime = Date.now();\n const newDeps = getDeps(depArgs);\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && opts.debug) resultTime = Date.now();\n result = fn(...newDeps);\n opts == null || opts.onChange == null || opts.onChange(result);\n if (opts.key && opts.debug) {\n if (opts != null && opts.debug()) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = ' ' + str;\n }\n return str;\n };\n console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);\n }\n }\n return result;\n };\n}\nfunction getMemoOptions(tableOptions, debugLevel, key, onChange) {\n return {\n debug: () => {\n var _tableOptions$debugAl;\n return (_tableOptions$debugAl = tableOptions == null ? void 0 : tableOptions.debugAll) != null ? _tableOptions$debugAl : tableOptions[debugLevel];\n },\n key: process.env.NODE_ENV === 'development' && key,\n onChange\n };\n}\n\nfunction createCell(table, row, column, columnId) {\n const getRenderValue = () => {\n var _cell$getValue;\n return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue;\n };\n const cell = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(() => [table, column, row, cell], (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell,\n getValue: cell.getValue,\n renderValue: cell.renderValue\n }), getMemoOptions(table.options, 'debugCells', 'cell.getContext'))\n };\n table._features.forEach(feature => {\n feature.createCell == null || feature.createCell(cell, column, row, table);\n }, {});\n return cell;\n}\n\nfunction createColumn(table, columnDef, depth, parent) {\n var _ref, _resolvedColumnDef$id;\n const defaultColumn = table._getDefaultColumnDef();\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef\n };\n const accessorKey = resolvedColumnDef.accessorKey;\n let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? typeof String.prototype.replaceAll === 'function' ? accessorKey.replaceAll('.', '_') : accessorKey.replace(/\\./g, '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined;\n let accessorFn;\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn;\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = originalRow => {\n let result = originalRow;\n for (const key of accessorKey.split('.')) {\n var _result;\n result = (_result = result) == null ? void 0 : _result[key];\n if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n }\n }\n return result;\n };\n } else {\n accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey];\n }\n }\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`);\n }\n throw new Error();\n }\n let column = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent,\n depth,\n columnDef: resolvedColumnDef,\n columns: [],\n getFlatColumns: memo(() => [true], () => {\n var _column$columns;\n return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')),\n getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => {\n var _column$columns2;\n if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }\n return [column];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns'))\n };\n for (const feature of table._features) {\n feature.createColumn == null || feature.createColumn(column, table);\n }\n\n // Yes, we have to convert table to unknown, because we know more than the compiler here.\n return column;\n}\n\nconst debug = 'debugHeaders';\n//\n\nfunction createHeader(table, column, options) {\n var _options$id;\n const id = (_options$id = options.id) != null ? _options$id : column.id;\n let header = {\n id,\n column,\n index: options.index,\n isPlaceholder: !!options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null,\n getLeafHeaders: () => {\n const leafHeaders = [];\n const recurseHeader = h => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader);\n }\n leafHeaders.push(h);\n };\n recurseHeader(header);\n return leafHeaders;\n },\n getContext: () => ({\n table,\n header: header,\n column\n })\n };\n table._features.forEach(feature => {\n feature.createHeader == null || feature.createHeader(header, table);\n });\n return header;\n}\nconst Headers = {\n createTable: table => {\n // Header Groups\n\n table.getHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n var _left$map$filter, _right$map$filter;\n const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : [];\n const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : [];\n const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table);\n return headerGroups;\n }, getMemoOptions(table.options, debug, 'getHeaderGroups'));\n table.getCenterHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n return buildHeaderGroups(allColumns, leafColumns, table, 'center');\n }, getMemoOptions(table.options, debug, 'getCenterHeaderGroups'));\n table.getLeftHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n var _left$map$filter2;\n const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left');\n }, getMemoOptions(table.options, debug, 'getLeftHeaderGroups'));\n table.getRightHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n var _right$map$filter2;\n const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right');\n }, getMemoOptions(table.options, debug, 'getRightHeaderGroups'));\n\n // Footer Groups\n\n table.getFooterGroups = memo(() => [table.getHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getFooterGroups'));\n table.getLeftFooterGroups = memo(() => [table.getLeftHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getLeftFooterGroups'));\n table.getCenterFooterGroups = memo(() => [table.getCenterHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getCenterFooterGroups'));\n table.getRightFooterGroups = memo(() => [table.getRightHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getRightFooterGroups'));\n\n // Flat Headers\n\n table.getFlatHeaders = memo(() => [table.getHeaderGroups()], headerGroups => {\n return headerGroups.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getFlatHeaders'));\n table.getLeftFlatHeaders = memo(() => [table.getLeftHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeftFlatHeaders'));\n table.getCenterFlatHeaders = memo(() => [table.getCenterHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getCenterFlatHeaders'));\n table.getRightFlatHeaders = memo(() => [table.getRightHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getRightFlatHeaders'));\n\n // Leaf Headers\n\n table.getCenterLeafHeaders = memo(() => [table.getCenterFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders;\n return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n });\n }, getMemoOptions(table.options, debug, 'getCenterLeafHeaders'));\n table.getLeftLeafHeaders = memo(() => [table.getLeftFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders2;\n return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n });\n }, getMemoOptions(table.options, debug, 'getLeftLeafHeaders'));\n table.getRightLeafHeaders = memo(() => [table.getRightFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders3;\n return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n });\n }, getMemoOptions(table.options, debug, 'getRightLeafHeaders'));\n table.getLeafHeaders = memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => {\n var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n return header.getLeafHeaders();\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeafHeaders'));\n }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n var _headerGroups$0$heade, _headerGroups$;\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0;\n const findMaxDepth = function (columns, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n maxDepth = Math.max(maxDepth, depth);\n columns.filter(column => column.getIsVisible()).forEach(column => {\n var _column$columns;\n if ((_column$columns = column.columns) != null && _column$columns.length) {\n findMaxDepth(column.columns, depth + 1);\n }\n }, 0);\n };\n findMaxDepth(allColumns);\n let headerGroups = [];\n const createHeaderGroup = (headersToGroup, depth) => {\n // The header group we are creating\n const headerGroup = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: []\n };\n\n // The parent columns we're going to scan next\n const pendingParentHeaders = [];\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n let column;\n let isPlaceholder = false;\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent;\n } else {\n // The parent header is repeated\n column = headerToGroup.column;\n isPlaceholder = true;\n }\n if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup);\n } else {\n // This is a new header. Let's create it\n const header = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined,\n depth,\n index: pendingParentHeaders.length\n });\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup);\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header);\n }\n headerGroup.headers.push(headerToGroup);\n headerToGroup.headerGroup = headerGroup;\n });\n headerGroups.push(headerGroup);\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1);\n }\n };\n const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, {\n depth: maxDepth,\n index\n }));\n createHeaderGroup(bottomHeaders, maxDepth - 1);\n headerGroups.reverse();\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = headers => {\n const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n return filteredHeaders.map(header => {\n let colSpan = 0;\n let rowSpan = 0;\n let childRowSpans = [0];\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = [];\n recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n let {\n colSpan: childColSpan,\n rowSpan: childRowSpan\n } = _ref;\n colSpan += childColSpan;\n childRowSpans.push(childRowSpan);\n });\n } else {\n colSpan = 1;\n }\n const minChildRowSpan = Math.min(...childRowSpans);\n rowSpan = rowSpan + minChildRowSpan;\n header.colSpan = colSpan;\n header.rowSpan = rowSpan;\n return {\n colSpan,\n rowSpan\n };\n });\n };\n recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n return headerGroups;\n}\n\nconst createRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n let row = {\n id,\n index: rowIndex,\n original,\n depth,\n parentId,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: columnId => {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n return row._valuesCache[columnId];\n },\n getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n return row._uniqueValuesCache[columnId];\n }\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex);\n return row._uniqueValuesCache[columnId];\n },\n renderValue: columnId => {\n var _row$getValue;\n return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue;\n },\n subRows: subRows != null ? subRows : [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getParentRow: () => row.parentId ? table.getRow(row.parentId, true) : undefined,\n getParentRows: () => {\n let parentRows = [];\n let currentRow = row;\n while (true) {\n const parentRow = currentRow.getParentRow();\n if (!parentRow) break;\n parentRows.push(parentRow);\n currentRow = parentRow;\n }\n return parentRows.reverse();\n },\n getAllCells: memo(() => [table.getAllLeafColumns()], leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row, column, column.id);\n });\n }, getMemoOptions(table.options, 'debugRows', 'getAllCells')),\n _getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell;\n return acc;\n }, {});\n }, getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId'))\n };\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i];\n feature == null || feature.createRow == null || feature.createRow(row, table);\n }\n return row;\n};\n\n//\n\nconst ColumnFaceting = {\n createColumn: (column, table) => {\n column._getFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id);\n column.getFacetedRowModel = () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return column._getFacetedRowModel();\n };\n column._getFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id);\n column.getFacetedUniqueValues = () => {\n if (!column._getFacetedUniqueValues) {\n return new Map();\n }\n return column._getFacetedUniqueValues();\n };\n column._getFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id);\n column.getFacetedMinMaxValues = () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined;\n }\n return column._getFacetedMinMaxValues();\n };\n }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n var _filterValue$toString, _row$getValue;\n const search = filterValue == null || (_filterValue$toString = filterValue.toString()) == null ? void 0 : _filterValue$toString.toLowerCase();\n return Boolean((_row$getValue = row.getValue(columnId)) == null || (_row$getValue = _row$getValue.toString()) == null || (_row$getValue = _row$getValue.toLowerCase()) == null ? void 0 : _row$getValue.includes(search));\n};\nincludesString.autoRemove = val => testFalsey(val);\nconst includesStringSensitive = (row, columnId, filterValue) => {\n var _row$getValue2;\n return Boolean((_row$getValue2 = row.getValue(columnId)) == null || (_row$getValue2 = _row$getValue2.toString()) == null ? void 0 : _row$getValue2.includes(filterValue));\n};\nincludesStringSensitive.autoRemove = val => testFalsey(val);\nconst equalsString = (row, columnId, filterValue) => {\n var _row$getValue3;\n return ((_row$getValue3 = row.getValue(columnId)) == null || (_row$getValue3 = _row$getValue3.toString()) == null ? void 0 : _row$getValue3.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase());\n};\nequalsString.autoRemove = val => testFalsey(val);\nconst arrIncludes = (row, columnId, filterValue) => {\n var _row$getValue4;\n return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue);\n};\narrIncludes.autoRemove = val => testFalsey(val);\nconst arrIncludesAll = (row, columnId, filterValue) => {\n return !filterValue.some(val => {\n var _row$getValue5;\n return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val));\n });\n};\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesSome = (row, columnId, filterValue) => {\n return filterValue.some(val => {\n var _row$getValue6;\n return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val);\n });\n};\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst equals = (row, columnId, filterValue) => {\n return row.getValue(columnId) === filterValue;\n};\nequals.autoRemove = val => testFalsey(val);\nconst weakEquals = (row, columnId, filterValue) => {\n return row.getValue(columnId) == filterValue;\n};\nweakEquals.autoRemove = val => testFalsey(val);\nconst inNumberRange = (row, columnId, filterValue) => {\n let [min, max] = filterValue;\n const rowValue = row.getValue(columnId);\n return rowValue >= min && rowValue <= max;\n};\ninNumberRange.resolveFilterValue = val => {\n let [unsafeMin, unsafeMax] = val;\n let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n if (min > max) {\n const temp = min;\n min = max;\n max = temp;\n }\n return [min, max];\n};\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]);\n\n// Export\n\nconst filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange\n};\n// Utils\n\nfunction testFalsey(val) {\n return val === undefined || val === null || val === '';\n}\n\n//\n\nconst ColumnFiltering = {\n getDefaultColumnDef: () => {\n return {\n filterFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n columnFilters: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n filterFromLeafRows: false,\n maxLeafRowFilterDepth: 100\n };\n },\n createColumn: (column, table) => {\n column.getAutoFilterFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return filterFns.includesString;\n }\n if (typeof value === 'number') {\n return filterFns.inNumberRange;\n }\n if (typeof value === 'boolean') {\n return filterFns.equals;\n }\n if (value !== null && typeof value === 'object') {\n return filterFns.equals;\n }\n if (Array.isArray(value)) {\n return filterFns.arrIncludes;\n }\n return filterFns.weakEquals;\n };\n column.getFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : // @ts-ignore\n (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn];\n };\n column.getCanFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2;\n return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn;\n };\n column.getIsFiltered = () => column.getFilterIndex() > -1;\n column.getFilterValue = () => {\n var _table$getState$colum;\n return (_table$getState$colum = table.getState().columnFilters) == null || (_table$getState$colum = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum.value;\n };\n column.getFilterIndex = () => {\n var _table$getState$colum2, _table$getState$colum3;\n return (_table$getState$colum2 = (_table$getState$colum3 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum3.findIndex(d => d.id === column.id)) != null ? _table$getState$colum2 : -1;\n };\n column.setFilterValue = value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn();\n const previousFilter = old == null ? void 0 : old.find(d => d.id === column.id);\n const newFilter = functionalUpdate(value, previousFilter ? previousFilter.value : undefined);\n\n //\n if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n var _old$filter;\n return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n }\n const newFilterObj = {\n id: column.id,\n value: newFilter\n };\n if (previousFilter) {\n var _old$map;\n return (_old$map = old == null ? void 0 : old.map(d => {\n if (d.id === column.id) {\n return newFilterObj;\n }\n return d;\n })) != null ? _old$map : [];\n }\n if (old != null && old.length) {\n return [...old, newFilterObj];\n }\n return [newFilterObj];\n });\n };\n },\n createRow: (row, _table) => {\n row.columnFilters = {};\n row.columnFiltersMeta = {};\n },\n createTable: table => {\n table.setColumnFilters = updater => {\n const leafColumns = table.getAllLeafColumns();\n const updateFn = old => {\n var _functionalUpdate;\n return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id);\n if (column) {\n const filterFn = column.getFilterFn();\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false;\n }\n }\n return true;\n });\n };\n table.options.onColumnFiltersChange == null || table.options.onColumnFiltersChange(updateFn);\n };\n table.resetColumnFilters = defaultState => {\n var _table$initialState$c, _table$initialState;\n table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnFilters) != null ? _table$initialState$c : []);\n };\n table.getPreFilteredRowModel = () => table.getCoreRowModel();\n table.getFilteredRowModel = () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table);\n }\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getFilteredRowModel();\n };\n }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst sum = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId);\n return sum + (typeof nextValue === 'number' ? nextValue : 0);\n }, 0);\n};\nconst min = (columnId, _leafRows, childRows) => {\n let min;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (min > value || min === undefined && value >= value)) {\n min = value;\n }\n });\n return min;\n};\nconst max = (columnId, _leafRows, childRows) => {\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (max < value || max === undefined && value >= value)) {\n max = value;\n }\n });\n return max;\n};\nconst extent = (columnId, _leafRows, childRows) => {\n let min;\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n });\n return [min, max];\n};\nconst mean = (columnId, leafRows) => {\n let count = 0;\n let sum = 0;\n leafRows.forEach(row => {\n let value = row.getValue(columnId);\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n });\n if (count) return sum / count;\n return;\n};\nconst median = (columnId, leafRows) => {\n if (!leafRows.length) {\n return;\n }\n const values = leafRows.map(row => row.getValue(columnId));\n if (!isNumberArray(values)) {\n return;\n }\n if (values.length === 1) {\n return values[0];\n }\n const mid = Math.floor(values.length / 2);\n const nums = values.sort((a, b) => a - b);\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n};\nconst unique = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values());\n};\nconst uniqueCount = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size;\n};\nconst count = (_columnId, leafRows) => {\n return leafRows.length;\n};\nconst aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count\n};\n\n//\n\nconst ColumnGrouping = {\n getDefaultColumnDef: () => {\n return {\n aggregatedCell: props => {\n var _toString, _props$getValue;\n return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null;\n },\n aggregationFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n grouping: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder'\n };\n },\n createColumn: (column, table) => {\n column.toggleGrouping = () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old != null && old.includes(column.id)) {\n return old.filter(d => d !== column.id);\n }\n return [...(old != null ? old : []), column.id];\n });\n };\n column.getCanGroup = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue);\n };\n column.getIsGrouped = () => {\n var _table$getState$group;\n return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id);\n };\n column.getGroupedIndex = () => {\n var _table$getState$group2;\n return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id);\n };\n column.getToggleGroupingHandler = () => {\n const canGroup = column.getCanGroup();\n return () => {\n if (!canGroup) return;\n column.toggleGrouping();\n };\n };\n column.getAutoAggregationFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'number') {\n return aggregationFns.sum;\n }\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent;\n }\n };\n column.getAggregationFn = () => {\n var _table$options$aggreg, _table$options$aggreg2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn];\n };\n },\n createTable: table => {\n table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater);\n table.resetGrouping = defaultState => {\n var _table$initialState$g, _table$initialState;\n table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []);\n };\n table.getPreGroupedRowModel = () => table.getFilteredRowModel();\n table.getGroupedRowModel = () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table);\n }\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel();\n }\n return table._getGroupedRowModel();\n };\n },\n createRow: (row, table) => {\n row.getIsGrouped = () => !!row.groupingColumnId;\n row.getGroupingValue = columnId => {\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.columnDef.getGroupingValue)) {\n return row.getValue(columnId);\n }\n row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original);\n return row._groupingValuesCache[columnId];\n };\n row._groupingValuesCache = {};\n },\n createCell: (cell, column, row, table) => {\n cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId;\n cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped();\n cell.getIsAggregated = () => {\n var _row$subRows;\n return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n return leafColumns;\n }\n const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns;\n }\n const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\n\nconst ColumnOrdering = {\n getInitialState: state => {\n return {\n columnOrder: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table)\n };\n },\n createColumn: (column, table) => {\n column.getIndex = memo(position => [_getVisibleLeafColumns(table, position)], columns => columns.findIndex(d => d.id === column.id), getMemoOptions(table.options, 'debugColumns', 'getIndex'));\n column.getIsFirstColumn = position => {\n var _columns$;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns$ = columns[0]) == null ? void 0 : _columns$.id) === column.id;\n };\n column.getIsLastColumn = position => {\n var _columns;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns = columns[columns.length - 1]) == null ? void 0 : _columns.id) === column.id;\n };\n },\n createTable: table => {\n table.setColumnOrder = updater => table.options.onColumnOrderChange == null ? void 0 : table.options.onColumnOrderChange(updater);\n table.resetColumnOrder = defaultState => {\n var _table$initialState$c;\n table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []);\n };\n table._getOrderColumnsFn = memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns = [];\n\n // If there is no order, return the normal columns\n if (!(columnOrder != null && columnOrder.length)) {\n orderedColumns = columns;\n } else {\n const columnOrderCopy = [...columnOrder];\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns];\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift();\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy];\n }\n return orderColumns(orderedColumns, grouping, groupedColumnMode);\n }, getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn'));\n }\n};\n\n//\n\nconst getDefaultColumnPinningState = () => ({\n left: [],\n right: []\n});\nconst ColumnPinning = {\n getInitialState: state => {\n return {\n columnPinning: getDefaultColumnPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table)\n };\n },\n createColumn: (column, table) => {\n column.pin = position => {\n const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n table.setColumnPinning(old => {\n var _old$left3, _old$right3;\n if (position === 'right') {\n var _old$left, _old$right;\n return {\n left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n };\n }\n if (position === 'left') {\n var _old$left2, _old$right2;\n return {\n left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n }\n return {\n left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n });\n };\n column.getCanPin = () => {\n const leafColumns = column.getLeafColumns();\n return leafColumns.some(d => {\n var _d$columnDef$enablePi, _ref, _table$options$enable;\n return ((_d$columnDef$enablePi = d.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_ref = (_table$options$enable = table.options.enableColumnPinning) != null ? _table$options$enable : table.options.enablePinning) != null ? _ref : true);\n });\n };\n column.getIsPinned = () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id);\n const {\n left,\n right\n } = table.getState().columnPinning;\n const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n return isLeft ? 'left' : isRight ? 'right' : false;\n };\n column.getPinnedIndex = () => {\n var _table$getState$colum, _table$getState$colum2;\n const position = column.getIsPinned();\n return position ? (_table$getState$colum = (_table$getState$colum2 = table.getState().columnPinning) == null || (_table$getState$colum2 = _table$getState$colum2[position]) == null ? void 0 : _table$getState$colum2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0;\n };\n },\n createRow: (row, table) => {\n row.getCenterVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allCells.filter(d => !leftAndRight.includes(d.column.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells'));\n row.getLeftVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left], (allCells, left) => {\n const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'left'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells'));\n row.getRightVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => {\n const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'right'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells'));\n },\n createTable: table => {\n table.setColumnPinning = updater => table.options.onColumnPinningChange == null ? void 0 : table.options.onColumnPinningChange(updater);\n table.resetColumnPinning = defaultState => {\n var _table$initialState$c, _table$initialState;\n return table.setColumnPinning(defaultState ? getDefaultColumnPinningState() : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnPinning) != null ? _table$initialState$c : getDefaultColumnPinningState());\n };\n table.getIsSomeColumnsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().columnPinning;\n if (!position) {\n var _pinningState$left, _pinningState$right;\n return Boolean(((_pinningState$left = pinningState.left) == null ? void 0 : _pinningState$left.length) || ((_pinningState$right = pinningState.right) == null ? void 0 : _pinningState$right.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table.getLeftLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => {\n return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns'));\n table.getRightLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => {\n return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns'));\n table.getCenterLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allColumns.filter(d => !leftAndRight.includes(d.id));\n }, getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns'));\n }\n};\n\nfunction safelyAccessDocument(_document) {\n return _document || (typeof document !== 'undefined' ? document : null);\n}\n\n//\n\n//\n\nconst defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER\n};\nconst getDefaultColumnSizingInfoState = () => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: []\n});\nconst ColumnSizing = {\n getDefaultColumnDef: () => {\n return defaultColumnSizing;\n },\n getInitialState: state => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n columnResizeMode: 'onEnd',\n columnResizeDirection: 'ltr',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table)\n };\n },\n createColumn: (column, table) => {\n column.getSize = () => {\n var _column$columnDef$min, _ref, _column$columnDef$max;\n const columnSize = table.getState().columnSizing[column.id];\n return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize);\n };\n column.getStart = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(0, column.getIndex(position)).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getStart'));\n column.getAfter = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(column.getIndex(position) + 1).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getAfter'));\n column.resetSize = () => {\n table.setColumnSizing(_ref2 => {\n let {\n [column.id]: _,\n ...rest\n } = _ref2;\n return rest;\n });\n };\n column.getCanResize = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true);\n };\n column.getIsResizing = () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id;\n };\n },\n createHeader: (header, table) => {\n header.getSize = () => {\n let sum = 0;\n const recurse = header => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse);\n } else {\n var _header$column$getSiz;\n sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n }\n };\n recurse(header);\n return sum;\n };\n header.getStart = () => {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n }\n return 0;\n };\n header.getResizeHandler = _contextDocument => {\n const column = table.getColumn(header.column.id);\n const canResize = column == null ? void 0 : column.getCanResize();\n return e => {\n if (!column || !canResize) {\n return;\n }\n e.persist == null || e.persist();\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return;\n }\n }\n const startSize = header.getSize();\n const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n const newColumnSizing = {};\n const updateOffset = (eventType, clientXPos) => {\n if (typeof clientXPos !== 'number') {\n return;\n }\n table.setColumnSizingInfo(old => {\n var _old$startOffset, _old$startSize;\n const deltaDirection = table.options.columnResizeDirection === 'rtl' ? -1 : 1;\n const deltaOffset = (clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0)) * deltaDirection;\n const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n old.columnSizingStart.forEach(_ref3 => {\n let [columnId, headerSize] = _ref3;\n newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n });\n return {\n ...old,\n deltaOffset,\n deltaPercentage\n };\n });\n if (table.options.columnResizeMode === 'onChange' || eventType === 'end') {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing\n }));\n }\n };\n const onMove = clientXPos => updateOffset('move', clientXPos);\n const onEnd = clientXPos => {\n updateOffset('end', clientXPos);\n table.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: []\n }));\n };\n const contextDocument = safelyAccessDocument(_contextDocument);\n const mouseEvents = {\n moveHandler: e => onMove(e.clientX),\n upHandler: e => {\n contextDocument == null || contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('mouseup', mouseEvents.upHandler);\n onEnd(e.clientX);\n }\n };\n const touchEvents = {\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onMove(e.touches[0].clientX);\n return false;\n },\n upHandler: e => {\n var _e$touches$;\n contextDocument == null || contextDocument.removeEventListener('touchmove', touchEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('touchend', touchEvents.upHandler);\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX);\n }\n };\n const passiveIfSupported = passiveEventSupported() ? {\n passive: false\n } : false;\n if (isTouchStartEvent(e)) {\n contextDocument == null || contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported);\n } else {\n contextDocument == null || contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n }\n table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id\n }));\n };\n };\n },\n createTable: table => {\n table.setColumnSizing = updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater);\n table.setColumnSizingInfo = updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater);\n table.resetColumnSizing = defaultState => {\n var _table$initialState$c;\n table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {});\n };\n table.resetHeaderSizeInfo = defaultState => {\n var _table$initialState$c2;\n table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState());\n };\n table.getTotalSize = () => {\n var _table$getHeaderGroup, _table$getHeaderGroup2;\n return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getHeaderGroup : 0;\n };\n table.getLeftTotalSize = () => {\n var _table$getLeftHeaderG, _table$getLeftHeaderG2;\n return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getLeftHeaderG : 0;\n };\n table.getCenterTotalSize = () => {\n var _table$getCenterHeade, _table$getCenterHeade2;\n return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getCenterHeade : 0;\n };\n table.getRightTotalSize = () => {\n var _table$getRightHeader, _table$getRightHeader2;\n return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getRightHeader : 0;\n };\n }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported;\n let supported = false;\n try {\n const options = {\n get passive() {\n supported = true;\n return false;\n }\n };\n const noop = () => {};\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop);\n } catch (err) {\n supported = false;\n }\n passiveSupported = supported;\n return passiveSupported;\n}\nfunction isTouchStartEvent(e) {\n return e.type === 'touchstart';\n}\n\n//\n\nconst ColumnVisibility = {\n getInitialState: state => {\n return {\n columnVisibility: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table)\n };\n },\n createColumn: (column, table) => {\n column.toggleVisibility = value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value != null ? value : !column.getIsVisible()\n }));\n }\n };\n column.getIsVisible = () => {\n var _ref, _table$getState$colum;\n const childColumns = column.columns;\n return (_ref = childColumns.length ? childColumns.some(c => c.getIsVisible()) : (_table$getState$colum = table.getState().columnVisibility) == null ? void 0 : _table$getState$colum[column.id]) != null ? _ref : true;\n };\n column.getCanHide = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true);\n };\n column.getToggleVisibilityHandler = () => {\n return e => {\n column.toggleVisibility == null || column.toggleVisibility(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row._getAllVisibleCells = memo(() => [row.getAllCells(), table.getState().columnVisibility], cells => {\n return cells.filter(cell => cell.column.getIsVisible());\n }, getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells'));\n row.getVisibleCells = memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], getMemoOptions(table.options, 'debugRows', 'getVisibleCells'));\n },\n createTable: table => {\n const makeVisibleColumnsMethod = (key, getColumns) => {\n return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n }, getMemoOptions(table.options, 'debugColumns', key));\n };\n table.getVisibleFlatColumns = makeVisibleColumnsMethod('getVisibleFlatColumns', () => table.getAllFlatColumns());\n table.getVisibleLeafColumns = makeVisibleColumnsMethod('getVisibleLeafColumns', () => table.getAllLeafColumns());\n table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => table.getLeftLeafColumns());\n table.getRightVisibleLeafColumns = makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => table.getRightLeafColumns());\n table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => table.getCenterLeafColumns());\n table.setColumnVisibility = updater => table.options.onColumnVisibilityChange == null ? void 0 : table.options.onColumnVisibilityChange(updater);\n table.resetColumnVisibility = defaultState => {\n var _table$initialState$c;\n table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {});\n };\n table.toggleAllColumnsVisible = value => {\n var _value;\n value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible();\n table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => ({\n ...obj,\n [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n }), {}));\n };\n table.getIsAllColumnsVisible = () => !table.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible()));\n table.getIsSomeColumnsVisible = () => table.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible());\n table.getToggleAllColumnsVisibilityHandler = () => {\n return e => {\n var _target;\n table.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nfunction _getVisibleLeafColumns(table, position) {\n return !position ? table.getVisibleLeafColumns() : position === 'center' ? table.getCenterVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();\n}\n\n//\n\nconst GlobalFaceting = {\n createTable: table => {\n table._getGlobalFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, '__global__');\n table.getGlobalFacetedRowModel = () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getGlobalFacetedRowModel();\n };\n table._getGlobalFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, '__global__');\n table.getGlobalFacetedUniqueValues = () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map();\n }\n return table._getGlobalFacetedUniqueValues();\n };\n table._getGlobalFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, '__global__');\n table.getGlobalFacetedMinMaxValues = () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return;\n }\n return table._getGlobalFacetedMinMaxValues();\n };\n }\n};\n\n//\n\nconst GlobalFiltering = {\n getInitialState: state => {\n return {\n globalFilter: undefined,\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n var _table$getCoreRowMode;\n const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null || (_table$getCoreRowMode = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode.getValue();\n return typeof value === 'string' || typeof value === 'number';\n }\n };\n },\n createColumn: (column, table) => {\n column.getCanGlobalFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2, _table$options$getCol;\n return ((_column$columnDef$ena = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGlobalFilter) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn;\n };\n },\n createTable: table => {\n table.getGlobalAutoFilterFn = () => {\n return filterFns.includesString;\n };\n table.getGlobalFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n const {\n globalFilterFn: globalFilterFn\n } = table.options;\n return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[globalFilterFn]) != null ? _table$options$filter : filterFns[globalFilterFn];\n };\n table.setGlobalFilter = updater => {\n table.options.onGlobalFilterChange == null || table.options.onGlobalFilterChange(updater);\n };\n table.resetGlobalFilter = defaultState => {\n table.setGlobalFilter(defaultState ? undefined : table.initialState.globalFilter);\n };\n }\n};\n\n//\n\nconst RowExpanding = {\n getInitialState: state => {\n return {\n expanded: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetExpanded = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetExpanded();\n queued = false;\n });\n }\n };\n table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);\n table.toggleAllRowsExpanded = expanded => {\n if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {\n table.setExpanded(true);\n } else {\n table.setExpanded({});\n }\n };\n table.resetExpanded = defaultState => {\n var _table$initialState$e, _table$initialState;\n table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});\n };\n table.getCanSomeRowsExpand = () => {\n return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());\n };\n table.getToggleAllRowsExpandedHandler = () => {\n return e => {\n e.persist == null || e.persist();\n table.toggleAllRowsExpanded();\n };\n };\n table.getIsSomeRowsExpanded = () => {\n const expanded = table.getState().expanded;\n return expanded === true || Object.values(expanded).some(Boolean);\n };\n table.getIsAllRowsExpanded = () => {\n const expanded = table.getState().expanded;\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true;\n }\n if (!Object.keys(expanded).length) {\n return false;\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n return false;\n }\n\n // They must all be expanded :shrug:\n return true;\n };\n table.getExpandedDepth = () => {\n let maxDepth = 0;\n const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);\n rowIds.forEach(id => {\n const splitId = id.split('.');\n maxDepth = Math.max(maxDepth, splitId.length);\n });\n return maxDepth;\n };\n table.getPreExpandedRowModel = () => table.getSortedRowModel();\n table.getExpandedRowModel = () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table);\n }\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel();\n }\n return table._getExpandedRowModel();\n };\n },\n createRow: (row, table) => {\n row.toggleExpanded = expanded => {\n table.setExpanded(old => {\n var _expanded;\n const exists = old === true ? true : !!(old != null && old[row.id]);\n let oldExpanded = {};\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true;\n });\n } else {\n oldExpanded = old;\n }\n expanded = (_expanded = expanded) != null ? _expanded : !exists;\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [row.id]: true\n };\n }\n if (exists && !expanded) {\n const {\n [row.id]: _,\n ...rest\n } = oldExpanded;\n return rest;\n }\n return old;\n });\n };\n row.getIsExpanded = () => {\n var _table$options$getIsR;\n const expanded = table.getState().expanded;\n return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n };\n row.getCanExpand = () => {\n var _table$options$getRow, _table$options$enable, _row$subRows;\n return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n row.getIsAllParentsExpanded = () => {\n let isFullyExpanded = true;\n let currentRow = row;\n while (isFullyExpanded && currentRow.parentId) {\n currentRow = table.getRow(currentRow.parentId, true);\n isFullyExpanded = currentRow.getIsExpanded();\n }\n return isFullyExpanded;\n };\n row.getToggleExpandedHandler = () => {\n const canExpand = row.getCanExpand();\n return () => {\n if (!canExpand) return;\n row.toggleExpanded();\n };\n };\n }\n};\n\n//\n\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\nconst getDefaultPaginationState = () => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize\n});\nconst RowPagination = {\n getInitialState: state => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...(state == null ? void 0 : state.pagination)\n }\n };\n },\n getDefaultOptions: table => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table)\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetPageIndex = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetPageIndex();\n queued = false;\n });\n }\n };\n table.setPagination = updater => {\n const safeUpdater = old => {\n let newState = functionalUpdate(updater, old);\n return newState;\n };\n return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);\n };\n table.resetPagination = defaultState => {\n var _table$initialState$p;\n table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());\n };\n table.setPageIndex = updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex);\n const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n return {\n ...old,\n pageIndex\n };\n });\n };\n table.resetPageIndex = defaultState => {\n var _table$initialState$p2, _table$initialState;\n table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);\n };\n table.resetPageSize = defaultState => {\n var _table$initialState$p3, _table$initialState2;\n table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);\n };\n table.setPageSize = updater => {\n table.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n const topRowIndex = old.pageSize * old.pageIndex;\n const pageIndex = Math.floor(topRowIndex / pageSize);\n return {\n ...old,\n pageIndex,\n pageSize\n };\n });\n };\n //deprecated\n table.setPageCount = updater => table.setPagination(old => {\n var _table$options$pageCo;\n let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount);\n }\n return {\n ...old,\n pageCount: newPageCount\n };\n });\n table.getPageOptions = memo(() => [table.getPageCount()], pageCount => {\n let pageOptions = [];\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n }\n return pageOptions;\n }, getMemoOptions(table.options, 'debugTable', 'getPageOptions'));\n table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;\n table.getCanNextPage = () => {\n const {\n pageIndex\n } = table.getState().pagination;\n const pageCount = table.getPageCount();\n if (pageCount === -1) {\n return true;\n }\n if (pageCount === 0) {\n return false;\n }\n return pageIndex < pageCount - 1;\n };\n table.previousPage = () => {\n return table.setPageIndex(old => old - 1);\n };\n table.nextPage = () => {\n return table.setPageIndex(old => {\n return old + 1;\n });\n };\n table.firstPage = () => {\n return table.setPageIndex(0);\n };\n table.lastPage = () => {\n return table.setPageIndex(table.getPageCount() - 1);\n };\n table.getPrePaginationRowModel = () => table.getExpandedRowModel();\n table.getPaginationRowModel = () => {\n if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {\n table._getPaginationRowModel = table.options.getPaginationRowModel(table);\n }\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel();\n }\n return table._getPaginationRowModel();\n };\n table.getPageCount = () => {\n var _table$options$pageCo2;\n return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);\n };\n table.getRowCount = () => {\n var _table$options$rowCou;\n return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;\n };\n }\n};\n\n//\n\nconst getDefaultRowPinningState = () => ({\n top: [],\n bottom: []\n});\nconst RowPinning = {\n getInitialState: state => {\n return {\n rowPinning: getDefaultRowPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowPinningChange: makeStateUpdater('rowPinning', table)\n };\n },\n createRow: (row, table) => {\n row.pin = (position, includeLeafRows, includeParentRows) => {\n const leafRowIds = includeLeafRows ? row.getLeafRows().map(_ref => {\n let {\n id\n } = _ref;\n return id;\n }) : [];\n const parentRowIds = includeParentRows ? row.getParentRows().map(_ref2 => {\n let {\n id\n } = _ref2;\n return id;\n }) : [];\n const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds]);\n table.setRowPinning(old => {\n var _old$top3, _old$bottom3;\n if (position === 'bottom') {\n var _old$top, _old$bottom;\n return {\n top: ((_old$top = old == null ? void 0 : old.top) != null ? _old$top : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: [...((_old$bottom = old == null ? void 0 : old.bottom) != null ? _old$bottom : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)]\n };\n }\n if (position === 'top') {\n var _old$top2, _old$bottom2;\n return {\n top: [...((_old$top2 = old == null ? void 0 : old.top) != null ? _old$top2 : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)],\n bottom: ((_old$bottom2 = old == null ? void 0 : old.bottom) != null ? _old$bottom2 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n }\n return {\n top: ((_old$top3 = old == null ? void 0 : old.top) != null ? _old$top3 : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: ((_old$bottom3 = old == null ? void 0 : old.bottom) != null ? _old$bottom3 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n });\n };\n row.getCanPin = () => {\n var _ref3;\n const {\n enableRowPinning,\n enablePinning\n } = table.options;\n if (typeof enableRowPinning === 'function') {\n return enableRowPinning(row);\n }\n return (_ref3 = enableRowPinning != null ? enableRowPinning : enablePinning) != null ? _ref3 : true;\n };\n row.getIsPinned = () => {\n const rowIds = [row.id];\n const {\n top,\n bottom\n } = table.getState().rowPinning;\n const isTop = rowIds.some(d => top == null ? void 0 : top.includes(d));\n const isBottom = rowIds.some(d => bottom == null ? void 0 : bottom.includes(d));\n return isTop ? 'top' : isBottom ? 'bottom' : false;\n };\n row.getPinnedIndex = () => {\n var _ref4, _visiblePinnedRowIds$;\n const position = row.getIsPinned();\n if (!position) return -1;\n const visiblePinnedRowIds = (_ref4 = position === 'top' ? table.getTopRows() : table.getBottomRows()) == null ? void 0 : _ref4.map(_ref5 => {\n let {\n id\n } = _ref5;\n return id;\n });\n return (_visiblePinnedRowIds$ = visiblePinnedRowIds == null ? void 0 : visiblePinnedRowIds.indexOf(row.id)) != null ? _visiblePinnedRowIds$ : -1;\n };\n },\n createTable: table => {\n table.setRowPinning = updater => table.options.onRowPinningChange == null ? void 0 : table.options.onRowPinningChange(updater);\n table.resetRowPinning = defaultState => {\n var _table$initialState$r, _table$initialState;\n return table.setRowPinning(defaultState ? getDefaultRowPinningState() : (_table$initialState$r = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.rowPinning) != null ? _table$initialState$r : getDefaultRowPinningState());\n };\n table.getIsSomeRowsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().rowPinning;\n if (!position) {\n var _pinningState$top, _pinningState$bottom;\n return Boolean(((_pinningState$top = pinningState.top) == null ? void 0 : _pinningState$top.length) || ((_pinningState$bottom = pinningState.bottom) == null ? void 0 : _pinningState$bottom.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n var _table$options$keepPi;\n const rows = ((_table$options$keepPi = table.options.keepPinnedRows) != null ? _table$options$keepPi : true) ?\n //get all rows that are pinned even if they would not be otherwise visible\n //account for expanded parent rows, but not pagination or filtering\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => {\n const row = table.getRow(rowId, true);\n return row.getIsAllParentsExpanded() ? row : null;\n }) :\n //else get only visible rows that are pinned\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => visibleRows.find(row => row.id === rowId));\n return rows.filter(Boolean).map(d => ({\n ...d,\n position\n }));\n };\n table.getTopRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top], (allRows, topPinnedRowIds) => table._getPinnedRows(allRows, topPinnedRowIds, 'top'), getMemoOptions(table.options, 'debugRows', 'getTopRows'));\n table.getBottomRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.bottom], (allRows, bottomPinnedRowIds) => table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'), getMemoOptions(table.options, 'debugRows', 'getBottomRows'));\n table.getCenterRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top, table.getState().rowPinning.bottom], (allRows, top, bottom) => {\n const topAndBottom = new Set([...(top != null ? top : []), ...(bottom != null ? bottom : [])]);\n return allRows.filter(d => !topAndBottom.has(d.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterRows'));\n }\n};\n\n//\n\nconst RowSelection = {\n getInitialState: state => {\n return {\n rowSelection: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n };\n },\n createTable: table => {\n table.setRowSelection = updater => table.options.onRowSelectionChange == null ? void 0 : table.options.onRowSelectionChange(updater);\n table.resetRowSelection = defaultState => {\n var _table$initialState$r;\n return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {});\n };\n table.toggleAllRowsSelected = value => {\n table.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected();\n const rowSelection = {\n ...old\n };\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n if (!row.getCanSelect()) {\n return;\n }\n rowSelection[row.id] = true;\n });\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id];\n });\n }\n return rowSelection;\n });\n };\n table.toggleAllPageRowsSelected = value => table.setRowSelection(old => {\n const resolvedValue = typeof value !== 'undefined' ? value : !table.getIsAllPageRowsSelected();\n const rowSelection = {\n ...old\n };\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table);\n });\n return rowSelection;\n });\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // table.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // table.setRowSelection(selectedRowIds)\n // },\n table.getPreSelectedRowModel = () => table.getCoreRowModel();\n table.getSelectedRowModel = memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel'));\n table.getFilteredSelectedRowModel = memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel'));\n table.getGroupedSelectedRowModel = memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel'));\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n table.getIsAllRowsSelected = () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n const {\n rowSelection\n } = table.getState();\n let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n if (isAllRowsSelected) {\n if (preGroupedFlatRows.some(row => row.getCanSelect() && !rowSelection[row.id])) {\n isAllRowsSelected = false;\n }\n }\n return isAllRowsSelected;\n };\n table.getIsAllPageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows.filter(row => row.getCanSelect());\n const {\n rowSelection\n } = table.getState();\n let isAllPageRowsSelected = !!paginationFlatRows.length;\n if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n isAllPageRowsSelected = false;\n }\n return isAllPageRowsSelected;\n };\n table.getIsSomeRowsSelected = () => {\n var _table$getState$rowSe;\n const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length;\n return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length;\n };\n table.getIsSomePageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows;\n return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.filter(row => row.getCanSelect()).some(d => d.getIsSelected() || d.getIsSomeSelected());\n };\n table.getToggleAllRowsSelectedHandler = () => {\n return e => {\n table.toggleAllRowsSelected(e.target.checked);\n };\n };\n table.getToggleAllPageRowsSelectedHandler = () => {\n return e => {\n table.toggleAllPageRowsSelected(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row.toggleSelected = (value, opts) => {\n const isSelected = row.getIsSelected();\n table.setRowSelection(old => {\n var _opts$selectChildren;\n value = typeof value !== 'undefined' ? value : !isSelected;\n if (row.getCanSelect() && isSelected === value) {\n return old;\n }\n const selectedRowIds = {\n ...old\n };\n mutateRowIsSelected(selectedRowIds, row.id, value, (_opts$selectChildren = opts == null ? void 0 : opts.selectChildren) != null ? _opts$selectChildren : true, table);\n return selectedRowIds;\n });\n };\n row.getIsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isRowSelected(row, rowSelection);\n };\n row.getIsSomeSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'some';\n };\n row.getIsAllSubRowsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'all';\n };\n row.getCanSelect = () => {\n var _table$options$enable;\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row);\n }\n return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true;\n };\n row.getCanSelectSubRows = () => {\n var _table$options$enable2;\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row);\n }\n return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true;\n };\n row.getCanMultiSelect = () => {\n var _table$options$enable3;\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row);\n }\n return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true;\n };\n row.getToggleSelectedHandler = () => {\n const canSelect = row.getCanSelect();\n return e => {\n var _target;\n if (!canSelect) return;\n row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nconst mutateRowIsSelected = (selectedRowIds, id, value, includeChildren, table) => {\n var _row$subRows;\n const row = table.getRow(id, true);\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key]);\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true;\n }\n } else {\n delete selectedRowIds[id];\n }\n // }\n\n if (includeChildren && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table));\n }\n};\nfunction selectRowsFn(table, rowModel) {\n const rowSelection = table.getState().rowSelection;\n const newSelectedFlatRows = [];\n const newSelectedRowsById = {};\n\n // Filters top level and nested rows\n const recurseRows = function (rows, depth) {\n return rows.map(row => {\n var _row$subRows2;\n const isSelected = isRowSelected(row, rowSelection);\n if (isSelected) {\n newSelectedFlatRows.push(row);\n newSelectedRowsById[row.id] = row;\n }\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows)\n };\n }\n if (isSelected) {\n return row;\n }\n }).filter(Boolean);\n };\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById\n };\n}\nfunction isRowSelected(row, selection) {\n var _selection$row$id;\n return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false;\n}\nfunction isSubRowSelected(row, selection, table) {\n var _row$subRows3;\n if (!((_row$subRows3 = row.subRows) != null && _row$subRows3.length)) return false;\n let allChildrenSelected = true;\n let someSelected = false;\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return;\n }\n if (subRow.getCanSelect()) {\n if (isRowSelected(subRow, selection)) {\n someSelected = true;\n } else {\n allChildrenSelected = false;\n }\n }\n\n // Check row selection of nested subrows\n if (subRow.subRows && subRow.subRows.length) {\n const subRowChildrenSelected = isSubRowSelected(subRow, selection);\n if (subRowChildrenSelected === 'all') {\n someSelected = true;\n } else if (subRowChildrenSelected === 'some') {\n someSelected = true;\n allChildrenSelected = false;\n } else {\n allChildrenSelected = false;\n }\n }\n });\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst alphanumeric = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\nconst alphanumericCaseSensitive = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\nconst datetime = (rowA, rowB, columnId) => {\n const a = rowA.getValue(columnId);\n const b = rowB.getValue(columnId);\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0;\n};\nconst basic = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n};\n\n// Utils\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return '';\n }\n return String(a);\n }\n if (typeof a === 'string') {\n return a;\n }\n return '';\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr, bStr) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n // While\n while (a.length && b.length) {\n const aa = a.shift();\n const bb = b.shift();\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n const combo = [an, bn].sort();\n\n // Both are string\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1;\n }\n if (bb > aa) {\n return -1;\n }\n continue;\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1;\n }\n\n // Both are numbers\n if (an > bn) {\n return 1;\n }\n if (bn > an) {\n return -1;\n }\n }\n return a.length - b.length;\n}\n\n// Exports\n\nconst sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic\n};\n\n//\n\nconst RowSorting = {\n getInitialState: state => {\n return {\n sorting: [],\n ...state\n };\n },\n getDefaultColumnDef: () => {\n return {\n sortingFn: 'auto',\n sortUndefined: 1\n };\n },\n getDefaultOptions: table => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: e => {\n return e.shiftKey;\n }\n };\n },\n createColumn: (column, table) => {\n column.getAutoSortingFn = () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10);\n let isString = false;\n for (const row of firstRows) {\n const value = row == null ? void 0 : row.getValue(column.id);\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime;\n }\n if (typeof value === 'string') {\n isString = true;\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric;\n }\n }\n }\n if (isString) {\n return sortingFns.text;\n }\n return sortingFns.basic;\n };\n column.getAutoSortDir = () => {\n const firstRow = table.getFilteredRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return 'asc';\n }\n return 'desc';\n };\n column.getSortingFn = () => {\n var _table$options$sortin, _table$options$sortin2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === 'auto' ? column.getAutoSortingFn() : (_table$options$sortin = (_table$options$sortin2 = table.options.sortingFns) == null ? void 0 : _table$options$sortin2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn];\n };\n column.toggleSorting = (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder();\n const hasManualValue = typeof desc !== 'undefined' && desc !== null;\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n let newSorting = [];\n\n // What should we do with this sort action?\n let sortAction;\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc';\n\n // Multi-mode\n if (old != null && old.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'add';\n }\n } else {\n // Normal mode\n if (old != null && old.length && existingIndex !== old.length - 1) {\n sortAction = 'replace';\n } else if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'replace';\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove';\n }\n }\n }\n if (sortAction === 'add') {\n var _table$options$maxMul;\n newSorting = [...old, {\n id: column.id,\n desc: nextDesc\n }];\n // Take latest n columns\n newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc\n };\n }\n return d;\n });\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id);\n } else {\n newSorting = [{\n id: column.id,\n desc: nextDesc\n }];\n }\n return newSorting;\n });\n };\n column.getFirstSortDir = () => {\n var _ref, _column$columnDef$sor;\n const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';\n return sortDescFirst ? 'desc' : 'asc';\n };\n column.getNextSortingOrder = multi => {\n var _table$options$enable, _table$options$enable2;\n const firstSortDirection = column.getFirstSortDir();\n const isSorted = column.getIsSorted();\n if (!isSorted) {\n return firstSortDirection;\n }\n if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (\n // If enableSortRemove, enable in general\n multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false;\n }\n return isSorted === 'desc' ? 'asc' : 'desc';\n };\n column.getCanSort = () => {\n var _column$columnDef$ena, _table$options$enable3;\n return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn;\n };\n column.getCanMultiSort = () => {\n var _ref2, _column$columnDef$ena2;\n return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn;\n };\n column.getIsSorted = () => {\n var _table$getState$sorti;\n const columnSort = (_table$getState$sorti = table.getState().sorting) == null ? void 0 : _table$getState$sorti.find(d => d.id === column.id);\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n };\n column.getSortIndex = () => {\n var _table$getState$sorti2, _table$getState$sorti3;\n return (_table$getState$sorti2 = (_table$getState$sorti3 = table.getState().sorting) == null ? void 0 : _table$getState$sorti3.findIndex(d => d.id === column.id)) != null ? _table$getState$sorti2 : -1;\n };\n column.clearSorting = () => {\n //clear sorting for just 1 column\n table.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n };\n column.getToggleSortingHandler = () => {\n const canSort = column.getCanSort();\n return e => {\n if (!canSort) return;\n e.persist == null || e.persist();\n column.toggleSorting == null || column.toggleSorting(undefined, column.getCanMultiSort() ? table.options.isMultiSortEvent == null ? void 0 : table.options.isMultiSortEvent(e) : false);\n };\n };\n },\n createTable: table => {\n table.setSorting = updater => table.options.onSortingChange == null ? void 0 : table.options.onSortingChange(updater);\n table.resetSorting = defaultState => {\n var _table$initialState$s, _table$initialState;\n table.setSorting(defaultState ? [] : (_table$initialState$s = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.sorting) != null ? _table$initialState$s : []);\n };\n table.getPreSortedRowModel = () => table.getGroupedRowModel();\n table.getSortedRowModel = () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table);\n }\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel();\n }\n return table._getSortedRowModel();\n };\n }\n};\n\nconst builtInFeatures = [Headers, ColumnVisibility, ColumnOrdering, ColumnPinning, ColumnFaceting, ColumnFiltering, GlobalFaceting,\n//depends on ColumnFaceting\nGlobalFiltering,\n//depends on ColumnFiltering\nRowSorting, ColumnGrouping,\n//depends on RowSorting\nRowExpanding, RowPagination, RowPinning, RowSelection, ColumnSizing];\n\n//\n\nfunction createTable(options) {\n var _options$_features, _options$initialState;\n if (process.env.NODE_ENV !== 'production' && (options.debugAll || options.debugTable)) {\n console.info('Creating Table Instance...');\n }\n const _features = [...builtInFeatures, ...((_options$_features = options._features) != null ? _options$_features : [])];\n let table = {\n _features\n };\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(table));\n }, {});\n const mergeOptions = options => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options);\n }\n return {\n ...defaultOptions,\n ...options\n };\n };\n const coreInitialState = {};\n let initialState = {\n ...coreInitialState,\n ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n };\n table._features.forEach(feature => {\n var _feature$getInitialSt;\n initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n });\n const queued = [];\n let queuedTimeout = false;\n const coreInstance = {\n _features,\n options: {\n ...defaultOptions,\n ...options\n },\n initialState,\n _queue: cb => {\n queued.push(cb);\n if (!queuedTimeout) {\n queuedTimeout = true;\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve().then(() => {\n while (queued.length) {\n queued.shift()();\n }\n queuedTimeout = false;\n }).catch(error => setTimeout(() => {\n throw error;\n }));\n }\n },\n reset: () => {\n table.setState(table.initialState);\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options);\n table.options = mergeOptions(newOptions);\n },\n getState: () => {\n return table.options.state;\n },\n setState: updater => {\n table.options.onStateChange == null || table.options.onStateChange(updater);\n },\n _getRowId: (row, index, parent) => {\n var _table$options$getRow;\n return (_table$options$getRow = table.options.getRowId == null ? void 0 : table.options.getRowId(row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join('.') : index}`;\n },\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table);\n }\n return table._getCoreRowModel();\n },\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return table.getPaginationRowModel();\n },\n //in next version, we should just pass in the row model as the optional 2nd arg\n getRow: (id, searchAll) => {\n let row = (searchAll ? table.getPrePaginationRowModel() : table.getRowModel()).rowsById[id];\n if (!row) {\n row = table.getCoreRowModel().rowsById[id];\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow could not find row with ID: ${id}`);\n }\n throw new Error();\n }\n }\n return row;\n },\n _getDefaultColumnDef: memo(() => [table.options.defaultColumn], defaultColumn => {\n var _defaultColumn;\n defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n return {\n header: props => {\n const resolvedColumnDef = props.header.column.columnDef;\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey;\n }\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id;\n }\n return null;\n },\n // footer: props => props.header.column.id,\n cell: props => {\n var _props$renderValue$to, _props$renderValue;\n return (_props$renderValue$to = (_props$renderValue = props.renderValue()) == null || _props$renderValue.toString == null ? void 0 : _props$renderValue.toString()) != null ? _props$renderValue$to : null;\n },\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());\n }, {}),\n ...defaultColumn\n };\n }, getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')),\n _getColumnDefs: () => table.options.columns,\n getAllColumns: memo(() => [table._getColumnDefs()], columnDefs => {\n const recurseColumns = function (columnDefs, parent, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent);\n const groupingColumnDef = columnDef;\n column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : [];\n return column;\n });\n };\n return recurseColumns(columnDefs);\n }, getMemoOptions(options, 'debugColumns', 'getAllColumns')),\n getAllFlatColumns: memo(() => [table.getAllColumns()], allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns();\n });\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')),\n _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column;\n return acc;\n }, {});\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')),\n getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }, getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')),\n getColumn: columnId => {\n const column = table._getAllFlatColumnsById()[columnId];\n if (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`);\n }\n return column;\n }\n };\n Object.assign(table, coreInstance);\n for (let index = 0; index < table._features.length; index++) {\n const feature = table._features[index];\n feature == null || feature.createTable == null || feature.createTable(table);\n }\n return table;\n}\n\nfunction getCoreRowModel() {\n return table => memo(() => [table.options.data], data => {\n const rowModel = {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n const accessRows = function (originalRows, depth, parentRow) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\n // if (!id) {\n // if (process.env.NODE_ENV !== 'production') {\n // throw new Error(`getRowId expected an ID, but got ${id}`)\n // }\n // }\n\n // Make the row\n const row = createRow(table, table._getRowId(originalRows[i], i, parentRow), originalRows[i], i, depth, undefined, parentRow == null ? void 0 : parentRow.id);\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row);\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row;\n // Push table row into parent\n rows.push(row);\n\n // Get the original subrows\n if (table.options.getSubRows) {\n var _row$originalSubRows;\n row.originalSubRows = table.options.getSubRows(originalRows[i], i);\n\n // Then recursively access them\n if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row);\n }\n }\n }\n return rows;\n };\n rowModel.rows = accessRows(data);\n return rowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getExpandedRowModel() {\n return table => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n return rowModel;\n }\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel;\n }\n return expandRows(rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel'));\n}\nfunction expandRows(rowModel) {\n const expandedRows = [];\n const handleRow = row => {\n var _row$subRows;\n expandedRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow);\n }\n };\n rowModel.rows.forEach(handleRow);\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById\n };\n}\n\nfunction getFacetedMinMaxValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return undefined;\n const uniqueValues = facetedRowModel.flatRows.flatMap(flatRow => {\n var _flatRow$getUniqueVal;\n return (_flatRow$getUniqueVal = flatRow.getUniqueValues(columnId)) != null ? _flatRow$getUniqueVal : [];\n }).map(Number).filter(value => !Number.isNaN(value));\n if (!uniqueValues.length) return;\n let facetedMinValue = uniqueValues[0];\n let facetedMaxValue = uniqueValues[uniqueValues.length - 1];\n for (const value of uniqueValues) {\n if (value < facetedMinValue) facetedMinValue = value;else if (value > facetedMaxValue) facetedMaxValue = value;\n }\n return [facetedMinValue, facetedMaxValue];\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues'));\n}\n\nfunction filterRows(rows, filterRowImpl, table) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table);\n }\n return filterRowModelFromRoot(rows, filterRowImpl, table);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, table) {\n var _table$options$maxLea;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea : 100;\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n var _row$subRows;\n let row = rowsToFilter[i];\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.columnFilters = row.columnFilters;\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n } else {\n row = newRow;\n if (filterRow(row)) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n }\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, table) {\n var _table$options$maxLea2;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea2 = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea2 : 100;\n\n // Filters top level and nested rows\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n // Filter from parents downward first\n\n const rows = [];\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i];\n const pass = filterRow(row);\n if (pass) {\n var _row$subRows2;\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length && depth < maxDepth) {\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n }\n rows.push(row);\n newFilteredFlatRows.push(row);\n newFilteredRowsById[row.id] = row;\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\n\nfunction getFacetedRowModel() {\n return (table, columnId) => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n return preRowModel;\n }\n const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n return filterRows(preRowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel'));\n}\n\nfunction getFacetedUniqueValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return new Map();\n let facetedUniqueValues = new Map();\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values = facetedRowModel.flatRows[i].getUniqueValues(columnId);\n for (let j = 0; j < values.length; j++) {\n const value = values[j];\n if (facetedUniqueValues.has(value)) {\n var _facetedUniqueValues$;\n facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n } else {\n facetedUniqueValues.set(value, 1);\n }\n }\n }\n return facetedUniqueValues;\n }, getMemoOptions(table.options, 'debugTable', `getFacetedUniqueValues_${columnId}`));\n}\n\nfunction getFilteredRowModel() {\n return table => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i].columnFilters = {};\n rowModel.flatRows[i].columnFiltersMeta = {};\n }\n return rowModel;\n }\n const resolvedColumnFilters = [];\n const resolvedGlobalFilters = [];\n (columnFilters != null ? columnFilters : []).forEach(d => {\n var _filterFn$resolveFilt;\n const column = table.getColumn(d.id);\n if (!column) {\n return;\n }\n const filterFn = column.getFilterFn();\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`);\n }\n return;\n }\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n });\n });\n const filterableIds = (columnFilters != null ? columnFilters : []).map(d => d.id);\n const globalFilterFn = table.getGlobalFilterFn();\n const globallyFilterableColumns = table.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n filterableIds.push('__global__');\n globallyFilterableColumns.forEach(column => {\n var _globalFilterFn$resol;\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n });\n });\n }\n let currentColumnFilter;\n let currentGlobalFilter;\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j];\n row.columnFilters = {};\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i];\n const id = currentColumnFilter.id;\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(row, id, currentColumnFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n });\n }\n }\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i];\n const id = currentGlobalFilter.id;\n // Tag the row with the first truthy global filter state\n if (currentGlobalFilter.filterFn(row, id, currentGlobalFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n })) {\n row.columnFilters.__global__ = true;\n break;\n }\n }\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false;\n }\n }\n }\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getGroupedRowModel() {\n return table => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n rowModel.rows.forEach(row => {\n row.depth = 0;\n row.parentId = undefined;\n });\n return rowModel;\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId => table.getColumn(columnId));\n const groupedFlatRows = [];\n const groupedRowsById = {};\n // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n // Recursively group the data\n const groupUpRecursively = function (rows, depth, parentId) {\n if (depth === void 0) {\n depth = 0;\n }\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth;\n groupedFlatRows.push(row);\n groupedRowsById[row.id] = row;\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id);\n }\n return row;\n });\n }\n const columnId = existingGrouping[depth];\n\n // Group the rows together for this level\n const rowGroupsMap = groupBy(rows, columnId);\n\n // Perform aggregations for each group\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n let [groupingValue, groupedRows] = _ref;\n let id = `${columnId}:${groupingValue}`;\n id = parentId ? `${parentId}>${id}` : id;\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id);\n subRows.forEach(subRow => {\n subRow.parentId = id;\n });\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n const row = createRow(table, id, leafRows[0].original, index, depth, undefined, parentId);\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: columnId => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(columnId)) {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n if (groupedRows[0]) {\n var _groupedRows$0$getVal;\n row._valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n }\n return row._valuesCache[columnId];\n }\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId);\n const aggregateFn = column == null ? void 0 : column.getAggregationFn();\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);\n return row._groupingValuesCache[columnId];\n }\n }\n });\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return row;\n });\n return aggregatedGroupedRows;\n };\n const groupedRows = groupUpRecursively(rowModel.rows, 0);\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n table._queue(() => {\n table._autoResetExpanded();\n table._autoResetPageIndex();\n });\n }));\n}\nfunction groupBy(rows, columnId) {\n const groupMap = new Map();\n return rows.reduce((map, row) => {\n const resKey = `${row.getGroupingValue(columnId)}`;\n const previous = map.get(resKey);\n if (!previous) {\n map.set(resKey, [row]);\n } else {\n previous.push(row);\n }\n return map;\n }, groupMap);\n}\n\nfunction getPaginationRowModel(opts) {\n return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel;\n }\n const {\n pageSize,\n pageIndex\n } = pagination;\n let {\n rows,\n flatRows,\n rowsById\n } = rowModel;\n const pageStart = pageSize * pageIndex;\n const pageEnd = pageStart + pageSize;\n rows = rows.slice(pageStart, pageEnd);\n let paginatedRowModel;\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById\n });\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById\n };\n }\n paginatedRowModel.flatRows = [];\n const handleRow = row => {\n paginatedRowModel.flatRows.push(row);\n if (row.subRows.length) {\n row.subRows.forEach(handleRow);\n }\n };\n paginatedRowModel.rows.forEach(handleRow);\n return paginatedRowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));\n}\n\nfunction getSortedRowModel() {\n return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {\n if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n return rowModel;\n }\n const sortingState = table.getState().sorting;\n const sortedFlatRows = [];\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort => {\n var _table$getColumn;\n return (_table$getColumn = table.getColumn(sort.id)) == null ? void 0 : _table$getColumn.getCanSort();\n });\n const columnInfoById = {};\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id);\n if (!column) return;\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn()\n };\n });\n const sortData = rows => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.map(row => ({\n ...row\n }));\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n var _sortEntry$desc;\n const sortEntry = availableSorting[i];\n const columnInfo = columnInfoById[sortEntry.id];\n const sortUndefined = columnInfo.sortUndefined;\n const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n let sortInt = 0;\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id);\n const bValue = rowB.getValue(sortEntry.id);\n const aUndefined = aValue === undefined;\n const bUndefined = bValue === undefined;\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1;\n if (sortUndefined === 'last') return aUndefined ? 1 : -1;\n sortInt = aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;\n }\n }\n if (sortInt === 0) {\n sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n }\n\n // If sorting is non-zero, take care of desc and inversion\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1;\n }\n if (columnInfo.invertSorting) {\n sortInt *= -1;\n }\n return sortInt;\n }\n }\n return rowA.index - rowB.index;\n });\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n var _row$subRows;\n sortedFlatRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n row.subRows = sortData(row.subRows);\n }\n });\n return sortedData;\n };\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () => table._autoResetPageIndex()));\n}\n\nexport { ColumnFaceting, ColumnFiltering, ColumnGrouping, ColumnOrdering, ColumnPinning, ColumnSizing, ColumnVisibility, GlobalFaceting, GlobalFiltering, Headers, RowExpanding, RowPagination, RowPinning, RowSelection, RowSorting, _getVisibleLeafColumns, aggregationFns, buildHeaderGroups, createCell, createColumn, createColumnHelper, createRow, createTable, defaultColumnSizing, expandRows, filterFns, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getMemoOptions, getPaginationRowModel, getSortedRowModel, isFunction, isNumberArray, isRowSelected, isSubRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, reSplitAlphaNumeric, selectRowsFn, shouldAutoRemoveFilter, sortingFns };\n//# sourceMappingURL=index.mjs.map\n","/**\n * react-table\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { createTable } from '@tanstack/table-core';\nexport * from '@tanstack/table-core';\n\n//\n\n/**\n * If rendering headers, cells, or footers with custom markup, use flexRender instead of `cell.getValue()` or `cell.renderValue()`.\n */\nfunction flexRender(Comp, props) {\n return !Comp ? null : isReactComponent(Comp) ? /*#__PURE__*/React.createElement(Comp, props) : Comp;\n}\nfunction isReactComponent(component) {\n return isClassComponent(component) || typeof component === 'function' || isExoticComponent(component);\n}\nfunction isClassComponent(component) {\n return typeof component === 'function' && (() => {\n const proto = Object.getPrototypeOf(component);\n return proto.prototype && proto.prototype.isReactComponent;\n })();\n}\nfunction isExoticComponent(component) {\n return typeof component === 'object' && typeof component.$$typeof === 'symbol' && ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description);\n}\nfunction useReactTable(options) {\n // Compose in the generic options to the user options\n const resolvedOptions = {\n state: {},\n // Dummy state\n onStateChange: () => {},\n // noop\n renderFallbackValue: null,\n ...options\n };\n\n // Create a new table and store it in state\n const [tableRef] = React.useState(() => ({\n current: createTable(resolvedOptions)\n }));\n\n // By default, manage table state here using the table's initial state\n const [state, setState] = React.useState(() => tableRef.current.initialState);\n\n // Compose the default state above with any user state. This will allow the user\n // to only control a subset of the state if desired.\n tableRef.current.setOptions(prev => ({\n ...prev,\n ...options,\n state: {\n ...state,\n ...options.state\n },\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n setState(updater);\n options.onStateChange == null || options.onStateChange(updater);\n }\n }));\n return tableRef.current;\n}\n\nexport { flexRender, useReactTable };\n//# sourceMappingURL=index.mjs.map\n","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a, _b, _c;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst getRect = (element) => {\n const { offsetWidth, offsetHeight } = element;\n return { width: offsetWidth, height: offsetHeight };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.scrollState = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.now = () => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = this.targetWindow) == null ? void 0 : _a.performance) == null ? void 0 : _b.now) == null ? void 0 : _c.call(_b)) ?? Date.now();\n };\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n const node = entry.target;\n const index = this.indexFromElement(node);\n if (!node.isConnected) {\n this.observer.unobserve(node);\n return;\n }\n if (this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(\n index,\n this.options.measureElement(node, entry, this)\n );\n }\n };\n this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n laneAssignmentMode: \"estimate\",\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n if (this.rafId != null && this.targetWindow) {\n this.targetWindow.cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n this.scrollState = null;\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n if (this.scrollState) {\n this.scheduleScrollReconcile();\n }\n this.maybeNotify();\n })\n );\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n }\n };\n this.rafId = null;\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes,\n this.options.laneAssignmentMode\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes,\n laneAssignmentMode\n }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMeasuredCacheIndexes = [];\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n laneLastIndex[item.lane] = m;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n const shouldCacheLane = laneAssignmentMode === \"estimate\" || itemSizeCache.has(key);\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;\n } else {\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n if (this.options.lanes > 1 && shouldCacheLane) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n laneLastIndex[lane] = i;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this.shouldMeasureDuringScroll = (index) => {\n var _a;\n if (!this.scrollState || this.scrollState.behavior !== \"smooth\") {\n return true;\n }\n const scrollIndex = this.scrollState.index ?? ((_a = this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)) == null ? void 0 : _a.index);\n if (scrollIndex !== void 0 && this.range) {\n const bufferSize = Math.max(\n this.options.overscan,\n Math.ceil((this.range.endIndex - this.range.startIndex) / 2)\n );\n const minIndex = Math.max(0, scrollIndex - bufferSize);\n const maxIndex = Math.min(\n this.options.count - 1,\n scrollIndex + bufferSize\n );\n return index >= minIndex && index <= maxIndex;\n }\n return true;\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key2) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key2);\n }\n });\n return;\n }\n const index = this.indexFromElement(node);\n const key = this.options.getItemKey(index);\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if ((!this.isScrolling || this.scrollState) && this.shouldMeasureDuringScroll(index)) {\n this.resizeItem(index, this.options.measureElement(node, void 0, this));\n }\n };\n this.resizeItem = (index, size) => {\n var _a;\n const item = this.measurementsCache[index];\n if (!item) return;\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (((_a = this.scrollState) == null ? void 0 : _a.behavior) !== \"smooth\" && (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments)) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0;\n if (\"scrollHeight\" in this.scrollElement) {\n return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;\n } else {\n const doc = this.scrollElement.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;\n }\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n const item = this.measurementsCache[index];\n if (!item) return;\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.scrollToOffset = (toOffset, { align = \"start\", behavior = \"auto\" } = {}) => {\n const offset = this.getOffsetForAlignment(toOffset, align);\n const now = this.now();\n this.scrollState = {\n index: null,\n align,\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0\n };\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.scheduleScrollReconcile();\n };\n this.scrollToIndex = (index, {\n align: initialAlign = \"auto\",\n behavior = \"auto\"\n } = {}) => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const offsetInfo = this.getOffsetForIndex(index, initialAlign);\n if (!offsetInfo) {\n return;\n }\n const [offset, align] = offsetInfo;\n const now = this.now();\n this.scrollState = {\n index,\n align,\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0\n };\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.scheduleScrollReconcile();\n };\n this.scrollBy = (delta, { behavior = \"auto\" } = {}) => {\n const offset = this.getScrollOffset() + delta;\n const now = this.now();\n this.scrollState = {\n index: null,\n align: \"start\",\n behavior,\n startedAt: now,\n lastTargetOffset: offset,\n stableFrames: 0\n };\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.scheduleScrollReconcile();\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n scheduleScrollReconcile() {\n if (!this.targetWindow) {\n this.scrollState = null;\n return;\n }\n if (this.rafId != null) return;\n this.rafId = this.targetWindow.requestAnimationFrame(() => {\n this.rafId = null;\n this.reconcileScroll();\n });\n }\n reconcileScroll() {\n if (!this.scrollState) return;\n const el = this.scrollElement;\n if (!el) return;\n const MAX_RECONCILE_MS = 5e3;\n if (this.now() - this.scrollState.startedAt > MAX_RECONCILE_MS) {\n this.scrollState = null;\n return;\n }\n const offsetInfo = this.scrollState.index != null ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align) : void 0;\n const targetOffset = offsetInfo ? offsetInfo[0] : this.scrollState.lastTargetOffset;\n const STABLE_FRAMES = 1;\n const targetChanged = targetOffset !== this.scrollState.lastTargetOffset;\n if (!targetChanged && approxEqual(targetOffset, this.getScrollOffset())) {\n this.scrollState.stableFrames++;\n if (this.scrollState.stableFrames >= STABLE_FRAMES) {\n this.scrollState = null;\n return;\n }\n } else {\n this.scrollState.stableFrames = 0;\n if (targetChanged) {\n this.scrollState.lastTargetOffset = targetOffset;\n this.scrollState.behavior = \"auto\";\n this._scrollToOffset(targetOffset, {\n adjustments: void 0,\n behavior: \"auto\"\n });\n }\n }\n this.scheduleScrollReconcile();\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n}) {\n const lastIndex = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex\n };\n }\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset\n );\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { Virtualizer, elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nconst useIsomorphicLayoutEffect = typeof document !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\nfunction useVirtualizerBase({\n useFlushSync = true,\n ...options\n}) {\n const rerender = React.useReducer(() => ({}), {})[1];\n const resolvedOptions = {\n ...options,\n onChange: (instance2, sync) => {\n var _a;\n if (useFlushSync && sync) {\n flushSync(rerender);\n } else {\n rerender();\n }\n (_a = options.onChange) == null ? void 0 : _a.call(options, instance2, sync);\n }\n };\n const [instance] = React.useState(\n () => new Virtualizer(resolvedOptions)\n );\n instance.setOptions(resolvedOptions);\n useIsomorphicLayoutEffect(() => {\n return instance._didMount();\n }, []);\n useIsomorphicLayoutEffect(() => {\n return instance._willUpdate();\n });\n return instance;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase({\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...options\n });\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase({\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...options\n });\n}\nexport {\n useVirtualizer,\n useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136],"mappings":"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"}