@kingsleyweb/bun-ui 0.0.0-stage → 3.0.0-rc.2

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 (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -2
  3. package/app/docs/App.tsx +72 -0
  4. package/app/docs/api/client.ts +303 -0
  5. package/app/docs/api/contract.ts +24 -0
  6. package/app/docs/api/docs.ts +38 -0
  7. package/app/docs/api/errors.ts +144 -0
  8. package/app/docs/boot.tsx +58 -0
  9. package/app/docs/components/Badge.tsx +65 -0
  10. package/app/docs/components/Button.tsx +37 -0
  11. package/app/docs/components/Card.tsx +41 -0
  12. package/app/docs/components/ConfirmDialog.tsx +173 -0
  13. package/app/docs/components/CopyButton.tsx +68 -0
  14. package/app/docs/components/Dialog.tsx +230 -0
  15. package/app/docs/components/EmptyState.tsx +34 -0
  16. package/app/docs/components/ErrorView.tsx +70 -0
  17. package/app/docs/components/Field.tsx +93 -0
  18. package/app/docs/components/JsonEditor.tsx +151 -0
  19. package/app/docs/components/JsonView.tsx +338 -0
  20. package/app/docs/components/KeyValue.tsx +63 -0
  21. package/app/docs/components/ProblemBanner.tsx +116 -0
  22. package/app/docs/components/ScreenErrorBoundary.tsx +141 -0
  23. package/app/docs/components/Spinner.tsx +33 -0
  24. package/app/docs/components/Table.tsx +33 -0
  25. package/app/docs/components/Tabs.tsx +226 -0
  26. package/app/docs/components/classNames.ts +4 -0
  27. package/app/docs/components/components.css +691 -0
  28. package/app/docs/components/copy.ts +89 -0
  29. package/app/docs/components/fieldContext.ts +29 -0
  30. package/app/docs/components/inputValues.ts +142 -0
  31. package/app/docs/components/inputs.tsx +387 -0
  32. package/app/docs/components/jsonParse.ts +338 -0
  33. package/app/docs/components/listKeys.ts +30 -0
  34. package/app/docs/config.ts +86 -0
  35. package/app/docs/context.ts +33 -0
  36. package/app/docs/embed.ts +74 -0
  37. package/app/docs/env.d.ts +2 -0
  38. package/app/docs/format.ts +9 -0
  39. package/app/docs/hooks/useUrlTab.ts +16 -0
  40. package/app/docs/main.tsx +11 -0
  41. package/app/docs/queryClient.ts +54 -0
  42. package/app/docs/router.tsx +194 -0
  43. package/app/docs/routing.ts +194 -0
  44. package/app/docs/screens/docs/document.ts +27 -0
  45. package/app/docs/screens/docs/http/OperationView.tsx +407 -0
  46. package/app/docs/screens/docs/http/Sidebar.tsx +190 -0
  47. package/app/docs/screens/docs/http/TryItPanel.tsx +603 -0
  48. package/app/docs/screens/docs/http/http.css +405 -0
  49. package/app/docs/screens/docs/http/index.tsx +395 -0
  50. package/app/docs/screens/docs/http/model.ts +604 -0
  51. package/app/docs/screens/docs/http/tryIt.ts +455 -0
  52. package/app/docs/screens/docs/permissions.ts +6 -0
  53. package/app/docs/screens/docs/schema/Prose.tsx +43 -0
  54. package/app/docs/screens/docs/schema/SchemaTree.tsx +319 -0
  55. package/app/docs/screens/docs/schema/index.ts +30 -0
  56. package/app/docs/screens/docs/schema/resolve.ts +466 -0
  57. package/app/docs/screens/docs/schema/schema.css +137 -0
  58. package/app/docs/screens/docs/schema/skeleton.ts +92 -0
  59. package/app/docs/screens/docs/viewer.tsx +154 -0
  60. package/app/docs/screens/docs/ws/InlineText.tsx +25 -0
  61. package/app/docs/screens/docs/ws/PayloadSchema.tsx +39 -0
  62. package/app/docs/screens/docs/ws/format.ts +82 -0
  63. package/app/docs/screens/docs/ws/index.tsx +286 -0
  64. package/app/docs/screens/docs/ws/items.tsx +786 -0
  65. package/app/docs/screens/docs/ws/model.ts +1178 -0
  66. package/app/docs/screens/docs/ws/panels.tsx +440 -0
  67. package/app/docs/screens/docs/ws/ws.css +231 -0
  68. package/app/docs/shortcuts.ts +94 -0
  69. package/app/docs/styles/base.css +847 -0
  70. package/app/docs/styles/tokens.css +143 -0
  71. package/app/docs/theme.ts +56 -0
  72. package/app/kit/unauthorized.ts +222 -0
  73. package/dist/docs/assets/main-0rchxtv5.js +18 -0
  74. package/dist/docs/assets/main-0rchxtv5.js.map +99 -0
  75. package/dist/docs/assets/main-cqgyvs86.css +1 -0
  76. package/dist/docs/manifest.json +26 -0
  77. package/dist/jobs/assets/AddFlowDialog-h6xkgx9b.js +6 -0
  78. package/dist/jobs/assets/AddFlowDialog-h6xkgx9b.js.map +11 -0
  79. package/dist/jobs/assets/AddFlowDialog-n7gtc84v.css +1 -0
  80. package/dist/jobs/assets/added-cbwsxv3e.js +4 -0
  81. package/dist/jobs/assets/added-cbwsxv3e.js.map +11 -0
  82. package/dist/jobs/assets/bodies-yyw5hmrp.js +6 -0
  83. package/dist/jobs/assets/bodies-yyw5hmrp.js.map +10 -0
  84. package/dist/jobs/assets/channel-tgkvqm8y.js +4 -0
  85. package/dist/jobs/assets/channel-tgkvqm8y.js.map +10 -0
  86. package/dist/jobs/assets/channelChecks-s4yz4yhw.js +4 -0
  87. package/dist/jobs/assets/channelChecks-s4yz4yhw.js.map +10 -0
  88. package/dist/jobs/assets/index-02427smp.css +1 -0
  89. package/dist/jobs/assets/index-09z2cjft.js +4 -0
  90. package/dist/jobs/assets/index-09z2cjft.js.map +16 -0
  91. package/dist/jobs/assets/index-18bn0gvy.css +1 -0
  92. package/dist/jobs/assets/index-47pxmyxn.js +4 -0
  93. package/dist/jobs/assets/index-47pxmyxn.js.map +10 -0
  94. package/dist/jobs/assets/index-4e55z986.js +4 -0
  95. package/dist/jobs/assets/index-4e55z986.js.map +11 -0
  96. package/dist/jobs/assets/index-5c933424.js +4 -0
  97. package/dist/jobs/assets/index-5c933424.js.map +18 -0
  98. package/dist/jobs/assets/index-5kbyqspm.css +1 -0
  99. package/dist/jobs/assets/index-5ng37hk6.css +1 -0
  100. package/dist/jobs/assets/index-5w8w7fvc.css +1 -0
  101. package/dist/jobs/assets/index-71qs5qyx.css +1 -0
  102. package/dist/jobs/assets/index-btpg4r8b.css +1 -0
  103. package/dist/jobs/assets/index-d5r5n0mm.js +4 -0
  104. package/dist/jobs/assets/index-d5r5n0mm.js.map +23 -0
  105. package/dist/jobs/assets/index-e0yy2skq.css +1 -0
  106. package/dist/jobs/assets/index-hs60b25v.js +10 -0
  107. package/dist/jobs/assets/index-hs60b25v.js.map +62 -0
  108. package/dist/jobs/assets/index-k2smrr70.js +4 -0
  109. package/dist/jobs/assets/index-k2smrr70.js.map +9 -0
  110. package/dist/jobs/assets/index-q24jw3w9.js +4 -0
  111. package/dist/jobs/assets/index-q24jw3w9.js.map +32 -0
  112. package/dist/jobs/assets/index-qfb80xen.css +1 -0
  113. package/dist/jobs/assets/index-rtynx6wj.js +4 -0
  114. package/dist/jobs/assets/index-rtynx6wj.js.map +10 -0
  115. package/dist/jobs/assets/live-6k7s6358.js +4 -0
  116. package/dist/jobs/assets/live-6k7s6358.js.map +10 -0
  117. package/dist/jobs/assets/main-0jmeh6mq.js +6 -0
  118. package/dist/jobs/assets/main-0jmeh6mq.js.map +12 -0
  119. package/dist/jobs/assets/main-3yj6bv90.js +5 -0
  120. package/dist/jobs/assets/main-3yj6bv90.js.map +10 -0
  121. package/dist/jobs/assets/main-4g69fn3x.js +5 -0
  122. package/dist/jobs/assets/main-4g69fn3x.js.map +10 -0
  123. package/dist/jobs/assets/main-4gte3eqq.js +5 -0
  124. package/dist/jobs/assets/main-4gte3eqq.js.map +10 -0
  125. package/dist/jobs/assets/main-4j1fcevh.js +5 -0
  126. package/dist/jobs/assets/main-4j1fcevh.js.map +10 -0
  127. package/dist/jobs/assets/main-54qwkz28.css +1 -0
  128. package/dist/jobs/assets/main-5grjvsy7.js +5 -0
  129. package/dist/jobs/assets/main-5grjvsy7.js.map +11 -0
  130. package/dist/jobs/assets/main-5zbx60gq.js +5 -0
  131. package/dist/jobs/assets/main-5zbx60gq.js.map +11 -0
  132. package/dist/jobs/assets/main-9prgjhg4.js +5 -0
  133. package/dist/jobs/assets/main-9prgjhg4.js.map +10 -0
  134. package/dist/jobs/assets/main-a250ffk7.js +17 -0
  135. package/dist/jobs/assets/main-a250ffk7.js.map +115 -0
  136. package/dist/jobs/assets/main-d6ge7w08.js +5 -0
  137. package/dist/jobs/assets/main-d6ge7w08.js.map +10 -0
  138. package/dist/jobs/assets/main-gngzht43.js +5 -0
  139. package/dist/jobs/assets/main-gngzht43.js.map +10 -0
  140. package/dist/jobs/assets/main-hg0hrg8j.js +5 -0
  141. package/dist/jobs/assets/main-hg0hrg8j.js.map +10 -0
  142. package/dist/jobs/assets/main-hm1ng3yg.js +5 -0
  143. package/dist/jobs/assets/main-hm1ng3yg.js.map +12 -0
  144. package/dist/jobs/assets/main-jkvd92z9.js +5 -0
  145. package/dist/jobs/assets/main-jkvd92z9.js.map +10 -0
  146. package/dist/jobs/assets/main-jv5xqd13.js +5 -0
  147. package/dist/jobs/assets/main-jv5xqd13.js.map +21 -0
  148. package/dist/jobs/assets/main-jxre7w93.js +5 -0
  149. package/dist/jobs/assets/main-jxre7w93.js.map +23 -0
  150. package/dist/jobs/assets/main-kwmqkjfx.js +5 -0
  151. package/dist/jobs/assets/main-kwmqkjfx.js.map +11 -0
  152. package/dist/jobs/assets/main-n9cf6bxm.js +5 -0
  153. package/dist/jobs/assets/main-n9cf6bxm.js.map +11 -0
  154. package/dist/jobs/assets/main-pegp0ygb.js +5 -0
  155. package/dist/jobs/assets/main-pegp0ygb.js.map +10 -0
  156. package/dist/jobs/assets/main-qr573853.js +5 -0
  157. package/dist/jobs/assets/main-qr573853.js.map +12 -0
  158. package/dist/jobs/assets/main-rq97rdr4.js +4 -0
  159. package/dist/jobs/assets/main-rq97rdr4.js.map +22 -0
  160. package/dist/jobs/assets/main-szjdmydc.js +5 -0
  161. package/dist/jobs/assets/main-szjdmydc.js.map +13 -0
  162. package/dist/jobs/assets/main-tnbhrm9n.js +7 -0
  163. package/dist/jobs/assets/main-tnbhrm9n.js.map +11 -0
  164. package/dist/jobs/assets/main-ts19j4n0.js +5 -0
  165. package/dist/jobs/assets/main-ts19j4n0.js.map +25 -0
  166. package/dist/jobs/assets/main-w93x1dzs.js +5 -0
  167. package/dist/jobs/assets/main-w93x1dzs.js.map +10 -0
  168. package/dist/jobs/assets/sections-0ksdxs8m.css +1 -0
  169. package/dist/jobs/assets/sections-0y7w4fb4.js +4 -0
  170. package/dist/jobs/assets/sections-0y7w4fb4.js.map +10 -0
  171. package/dist/jobs/assets/sse-mn0t0fh7.js +5 -0
  172. package/dist/jobs/assets/sse-mn0t0fh7.js.map +11 -0
  173. package/dist/jobs/assets/sseChecks-t7tcm7ra.js +4 -0
  174. package/dist/jobs/assets/sseChecks-t7tcm7ra.js.map +10 -0
  175. package/dist/jobs/assets/validation-ysjfy072.js +4 -0
  176. package/dist/jobs/assets/validation-ysjfy072.js.map +9 -0
  177. package/dist/jobs/manifest.json +511 -0
  178. package/dts/docs/assets.d.ts +144 -0
  179. package/dts/docs/assets.d.ts.map +1 -0
  180. package/dts/docs/browser/config.d.ts +61 -0
  181. package/dts/docs/browser/config.d.ts.map +1 -0
  182. package/dts/docs/browser/index.d.ts +12 -0
  183. package/dts/docs/browser/index.d.ts.map +1 -0
  184. package/dts/docs/docsUi.d.ts +42 -0
  185. package/dts/docs/docsUi.d.ts.map +1 -0
  186. package/dts/docs/hosted.d.ts +22 -0
  187. package/dts/docs/hosted.d.ts.map +1 -0
  188. package/dts/docs/index.d.ts +18 -0
  189. package/dts/docs/index.d.ts.map +1 -0
  190. package/dts/docs/shell.d.ts +57 -0
  191. package/dts/docs/shell.d.ts.map +1 -0
  192. package/dts/docs/types.d.ts +137 -0
  193. package/dts/docs/types.d.ts.map +1 -0
  194. package/dts/index.d.ts +21 -0
  195. package/dts/index.d.ts.map +1 -0
  196. package/dts/jobs/assets.d.ts +157 -0
  197. package/dts/jobs/assets.d.ts.map +1 -0
  198. package/dts/jobs/browser/config.d.ts +67 -0
  199. package/dts/jobs/browser/config.d.ts.map +1 -0
  200. package/dts/jobs/browser/index.d.ts +10 -0
  201. package/dts/jobs/browser/index.d.ts.map +1 -0
  202. package/dts/jobs/browser/unauthorized.d.ts +9 -0
  203. package/dts/jobs/browser/unauthorized.d.ts.map +1 -0
  204. package/dts/jobs/index.d.ts +24 -0
  205. package/dts/jobs/index.d.ts.map +1 -0
  206. package/dts/jobs/jobsUi.d.ts +63 -0
  207. package/dts/jobs/jobsUi.d.ts.map +1 -0
  208. package/dts/jobs/shell.d.ts +77 -0
  209. package/dts/jobs/shell.d.ts.map +1 -0
  210. package/dts/jobs/types.d.ts +146 -0
  211. package/dts/jobs/types.d.ts.map +1 -0
  212. package/dts/kit/browser/shared.d.ts +10 -0
  213. package/dts/kit/browser/shared.d.ts.map +1 -0
  214. package/dts/kit/browser/unauthorized.d.ts +74 -0
  215. package/dts/kit/browser/unauthorized.d.ts.map +1 -0
  216. package/dts/kit/unauthorized.d.ts +47 -0
  217. package/dts/kit/unauthorized.d.ts.map +1 -0
  218. package/guides/docs.md +170 -0
  219. package/guides/jobs.md +1120 -0
  220. package/lib/docs/assets.ts +427 -0
  221. package/lib/docs/browser/config.ts +66 -0
  222. package/lib/docs/browser/index.ts +24 -0
  223. package/lib/docs/docsUi.ts +623 -0
  224. package/lib/docs/hosted.ts +31 -0
  225. package/lib/docs/index.ts +37 -0
  226. package/lib/docs/shell.ts +156 -0
  227. package/lib/docs/types.ts +149 -0
  228. package/lib/index.ts +27 -0
  229. package/lib/jobs/assets.ts +448 -0
  230. package/lib/jobs/browser/config.ts +65 -0
  231. package/lib/jobs/browser/index.ts +9 -0
  232. package/lib/jobs/browser/unauthorized.ts +11 -0
  233. package/lib/jobs/index.ts +41 -0
  234. package/lib/jobs/jobsUi.ts +709 -0
  235. package/lib/jobs/shell.ts +205 -0
  236. package/lib/jobs/types.ts +162 -0
  237. package/lib/kit/browser/shared.ts +11 -0
  238. package/lib/kit/browser/unauthorized.ts +114 -0
  239. package/lib/kit/unauthorized.ts +222 -0
  240. package/package.json +198 -4
@@ -0,0 +1,115 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/react/cjs/react.production.js", "../../node_modules/react-dom/client.js", "../../node_modules/scheduler/cjs/scheduler.production.js", "../../node_modules/react-dom/index.js", "../../node_modules/react-dom/cjs/react-dom.production.js", "../../node_modules/react-dom/cjs/react-dom-client.production.js", "../bun-jobs/lib/api/contract/constants.ts", "app/jobs/api/contract.ts", "app/jobs/api/errors.ts", "app/jobs/api/client.ts", "app/jobs/components/classNames.ts", "../../node_modules/react/cjs/react-jsx-runtime.production.js", "app/jobs/components/Badge.tsx", "app/jobs/context.ts", "app/jobs/meta/hooks.ts", "lib/kit/browser/unauthorized.ts", "app/kit/unauthorized.ts", "../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js", "../../node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js", "../../node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js", "../../node_modules/@tanstack/query-core/build/modern/timeoutManager.js", "../../node_modules/@tanstack/query-core/build/modern/utils.js", "../../node_modules/@tanstack/query-core/build/modern/environmentManager.js", "../../node_modules/@tanstack/query-core/build/modern/subscribable.js", "../../node_modules/@tanstack/query-core/build/modern/focusManager.js", "../../node_modules/@tanstack/query-core/build/modern/notifyManager.js", "../../node_modules/@tanstack/query-core/build/modern/onlineManager.js", "../../node_modules/@tanstack/query-core/build/modern/retryer.js", "../../node_modules/@tanstack/query-core/build/modern/removable.js", "../../node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js", "../../node_modules/@tanstack/query-core/build/modern/query.js", "../../node_modules/@tanstack/query-core/build/modern/queryObserver.js", "../../node_modules/@tanstack/query-core/build/modern/mutation.js", "../../node_modules/@tanstack/query-core/build/modern/mutationCache.js", "../../node_modules/@tanstack/query-core/build/modern/queryCache.js", "../../node_modules/@tanstack/query-core/build/modern/queryClient.js", "../../node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js", "../../node_modules/@tanstack/react-query/build/modern/suspense.js", "../../node_modules/@tanstack/react-query/build/modern/useBaseQuery.js", "../../node_modules/@tanstack/react-query/build/modern/useQuery.js", "app/jobs/api/queryKeys.ts", "app/jobs/queryClient.ts", "app/jobs/components/Button.tsx", "app/jobs/components/ScreenErrorBoundary.tsx", "app/docs/routing.ts", "app/jobs/router.tsx", "app/jobs/components/Dialog.tsx", "app/jobs/layout/shortcuts.ts", "app/jobs/layout/KeyboardShortcuts.tsx", "app/jobs/live/client.ts", "app/jobs/live/context.ts", "app/jobs/live/live.ts", "app/jobs/live/LiveProvider.tsx", "app/jobs/layout/liveStatusInfo.ts", "app/jobs/layout/LiveStatus.tsx", "app/jobs/theme.ts", "app/jobs/layout/ThemeToggle.tsx", "app/jobs/layout/Layout.tsx", "app/jobs/layout/nav.ts", "app/jobs/layout/useNav.ts", "app/jobs/components/EmptyState.tsx", "app/jobs/meta/PermissionScope.tsx", "app/jobs/components/Spinner.tsx", "app/jobs/screens/lazy.tsx", "app/jobs/analytics/range.ts", "app/jobs/api/analytics.ts", "app/jobs/components/ErrorView.tsx", "app/jobs/analytics/AnalyticsError.tsx", "app/jobs/analytics/RangeCaption.tsx", "app/jobs/components/fieldContext.ts", "app/jobs/components/Field.tsx", "app/jobs/components/inputValues.ts", "app/jobs/components/inputs.tsx", "app/jobs/hooks/useFieldProblems.ts", "app/jobs/analytics/RangePicker.tsx", "app/jobs/analytics/useAnalyticsRange.ts", "app/jobs/analytics/useRange.ts", "app/jobs/api/shape.ts", "app/jobs/api/demand.ts", "app/jobs/components/Card.tsx", "app/jobs/components/pagerState.ts", "app/jobs/components/Pager.tsx", "app/jobs/components/sparkPoints.ts", "app/jobs/components/Sparkline.tsx", "app/jobs/format.ts", "app/jobs/components/StateBadge.tsx", "app/jobs/components/Table.tsx", "app/jobs/components/useClientPage.ts", "app/jobs/hooks/useInView.ts", "app/jobs/limiter.ts", "app/jobs/screens/overview/gate.ts", "app/jobs/api/queues.ts", "app/jobs/screens/queues/live.ts", "app/jobs/screens/queues/panels/demand.ts", "app/jobs/screens/Overview.tsx", "app/jobs/routes.tsx", "app/jobs/screens/NotFound.tsx", "app/jobs/App.tsx", "lib/jobs/browser/config.ts", "app/jobs/config.ts", "app/jobs/components/toast.ts", "app/jobs/components/ToastProvider.tsx", "app/jobs/meta/MetaProvider.tsx", "app/jobs/providers.tsx", "app/jobs/boot.tsx", "app/jobs/main.tsx"],
4
+ "sourcesContent": [
5
+ "/**\n * @license React\n * react.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_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result,\n thenable = ctor();\n thenable.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1),\n (payload._result = moduleObject),\n void 0 === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = moduleObject));\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2),\n (payload._result = error),\n void 0 === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = thenable));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n };\nfunction startTransition(scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction addTransitionType(type) {\n var transition = ReactSharedInternals.T;\n if (null !== transition) {\n var transitionTypes = transition.types;\n null === transitionTypes\n ? (transition.types = [type])\n : -1 === transitionTypes.indexOf(type) && transitionTypes.push(type);\n } else startTransition(addTransitionType.bind(null, type));\n}\nvar Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n};\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.ViewTransition = REACT_VIEW_TRANSITION_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.addTransitionType = addTransitionType;\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = startTransition;\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.3.0\";\n",
6
+ "'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n module.exports = require('./cjs/react-dom-client.development.js');\n}\n",
7
+ "/**\n * @license React\n * scheduler.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\";\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n else break a;\n }\n}\nfunction peek(heap) {\n return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n else break a;\n }\n }\n return first;\n}\nfunction compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n}\nvar taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n}\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n}\nvar isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\nfunction shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n}\nfunction performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime && shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\nelse if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_requestPaint = function () {\n needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n};\nexports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n};\n",
8
+ "'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n",
9
+ "/**\n * @license React\n * react-dom.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 formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction noop() {}\nvar Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(formatProdErrorMessage(522));\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_RECOVERABLE_TYPE = Symbol.for(\"react.recoverable\"),\n REACT_OPTIMISTIC_KEY = Symbol.for(\"react.optimistic_key\");\nfunction createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key:\n null == key\n ? null\n : key === REACT_OPTIMISTIC_KEY\n ? REACT_OPTIMISTIC_KEY\n : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\nvar ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\nexports.browser = function (reason) {\n return { $$typeof: REACT_RECOVERABLE_TYPE, _reason: reason };\n};\nexports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(formatProdErrorMessage(299));\n return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f();\n }\n};\nexports.preconnect = function (href, options) {\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence ? options.precedence : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n};\nexports.preinitModule = function (href, options) {\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as) {\n var crossOrigin = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n );\n Internals.d.M(href, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0\n });\n }\n } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n Internals.d.L(href, as, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n};\nexports.preloadModule = function (href, options) {\n if (\"string\" === typeof href)\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0\n });\n } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.3.0\";\n",
10
+ "/**\n * @license React\n * react-dom-client.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/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n React = require(\"react\"),\n ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n var url = \"https://react.dev/errors/\" + code;\n if (1 < arguments.length) {\n url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var i = 2; i < arguments.length; i++)\n url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n }\n return (\n \"Minified React error #\" +\n code +\n \"; visit \" +\n url +\n \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n );\n}\nfunction isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n}\nfunction getNearestMountedFiber(fiber) {\n for (var node = fiber, nextNode = node; nextNode && !nextNode.alternate; )\n (node = nextNode),\n 0 !== (node.flags & 4098) && (fiber = node.return),\n (nextNode = node.return);\n for (; node.return; ) node = node.return;\n return 3 === node.tag ? fiber : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n}\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate) throw Error(formatProdErrorMessage(188));\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(formatProdErrorMessage(188));\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) {\n for (child$0 = parentB.child; child$0; ) {\n if (child$0 === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (child$0 === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n child$0 = child$0.sibling;\n }\n if (!didFindChild) throw Error(formatProdErrorMessage(189));\n }\n }\n if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n }\n if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n}\nfunction traverseVisibleInstancesAndTextInstances(\n child,\n searchWithinHosts,\n fn,\n a,\n b,\n c\n) {\n for (; null !== child; ) {\n if (\n ((5 === child.tag || 27 === child.tag || 6 === child.tag) &&\n fn(child, a, b, c)) ||\n ((22 !== child.tag || null === child.memoizedState) &&\n (searchWithinHosts || (5 !== child.tag && 27 !== child.tag)) &&\n traverseVisibleInstancesAndTextInstances(\n child.child,\n searchWithinHosts,\n fn,\n a,\n b,\n c\n ))\n )\n return !0;\n child = child.sibling;\n }\n return !1;\n}\nfunction getFragmentParentInstanceOrContainerFiber(fiber) {\n for (fiber = fiber.return; null !== fiber; ) {\n if (3 === fiber.tag || 5 === fiber.tag || 27 === fiber.tag) return fiber;\n fiber = fiber.return;\n }\n return null;\n}\nfunction fiberIsPortaledIntoHost(fiber) {\n var foundPortalParent = !1;\n for (fiber = fiber.return; null !== fiber; ) {\n 4 === fiber.tag && (foundPortalParent = !0);\n if (3 === fiber.tag || 5 === fiber.tag || 27 === fiber.tag) break;\n fiber = fiber.return;\n }\n return foundPortalParent;\n}\nfunction getFragmentInstanceOrTextInstanceSiblings(fiber) {\n var result = [null, null],\n parentHostFiber = getFragmentParentInstanceOrContainerFiber(fiber);\n if (null === parentHostFiber) return result;\n findFragmentInstanceOrTextInstanceSiblings(\n result,\n fiber,\n parentHostFiber.child,\n { foundSelf: !1 }\n );\n return result;\n}\nfunction findFragmentInstanceOrTextInstanceSiblings(\n result,\n self,\n child,\n state\n) {\n for (; null !== child; ) {\n if (child === self) state.foundSelf = !0;\n else if (5 === child.tag || 27 === child.tag || 6 === child.tag) {\n if (state.foundSelf) return (result[1] = child), !0;\n result[0] = child;\n } else if (\n (22 !== child.tag || null === child.memoizedState) &&\n findFragmentInstanceOrTextInstanceSiblings(\n result,\n self,\n child.child,\n state\n )\n )\n return !0;\n child = child.sibling;\n }\n return !1;\n}\nfunction getInstanceFromHostFiber(fiber) {\n switch (fiber.tag) {\n case 5:\n case 27:\n case 6:\n return fiber.stateNode;\n case 3:\n return fiber.stateNode.containerInfo;\n default:\n throw Error(formatProdErrorMessage(559));\n }\n}\nvar searchTarget = null,\n searchBoundary = null;\nfunction isFiberPrecedingCheck(child, target, boundary) {\n return child === boundary\n ? !0\n : child === target\n ? ((searchTarget = child), !0)\n : !1;\n}\nfunction isFiberFollowingCheck(child, target, boundary) {\n return child === boundary\n ? ((searchBoundary = child), !1)\n : child === target\n ? (null !== searchBoundary && (searchTarget = child), !0)\n : !1;\n}\nfunction getParentForFragmentAncestors(inst) {\n if (null === inst) return null;\n do inst = null === inst ? null : inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag && 3 !== inst.tag);\n return inst ? inst : null;\n}\nfunction getLowestCommonAncestor(instA, instB, getParent) {\n for (var depthA = 0, tempA = instA; tempA; tempA = getParent(tempA)) depthA++;\n tempA = 0;\n for (var tempB = instB; tempB; tempB = getParent(tempB)) tempA++;\n for (; 0 < depthA - tempA; ) (instA = getParent(instA)), depthA--;\n for (; 0 < tempA - depthA; ) (instB = getParent(instB)), tempA--;\n for (; depthA--; ) {\n if (instA === instB || (null !== instB && instA === instB.alternate))\n return instA;\n instA = getParent(instA);\n instB = getParent(instB);\n }\n return null;\n}\nvar assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_LEGACY_HIDDEN_TYPE = Symbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\"),\n REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n REACT_RECOVERABLE_TYPE = Symbol.for(\"react.recoverable\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n case REACT_VIEW_TRANSITION_TYPE:\n return \"ViewTransition\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n}\nvar isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n sharedNotPendingObject = {\n pending: !1,\n data: null,\n method: null,\n action: null\n },\n valueStack = [],\n index = -1;\nfunction createCursor(defaultValue) {\n return { current: defaultValue };\n}\nfunction pop(cursor) {\n 0 > index ||\n ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n index++;\n valueStack[index] = cursor.current;\n cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance);\n push(contextFiberStackCursor, fiber);\n push(contextStackCursor, null);\n switch (nextRootInstance.nodeType) {\n case 9:\n case 11:\n fiber = (fiber = nextRootInstance.documentElement)\n ? (fiber = fiber.namespaceURI)\n ? getOwnHostContext(fiber)\n : 0\n : 0;\n break;\n default:\n if (\n ((fiber = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (fiber = getChildHostContextProd(nextRootInstance, fiber));\n else\n switch (fiber) {\n case \"svg\":\n fiber = 1;\n break;\n case \"math\":\n fiber = 2;\n break;\n default:\n fiber = 0;\n }\n }\n pop(contextStackCursor);\n push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n pop(contextStackCursor);\n pop(contextFiberStackCursor);\n pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n var stateHook = fiber.memoizedState;\n null !== stateHook &&\n ((HostTransitionContext._currentValue = stateHook.memoizedState),\n push(hostTransitionProviderCursor, fiber));\n stateHook = contextStackCursor.current;\n var JSCompiler_inline_result = getChildHostContextProd(stateHook, fiber.type);\n stateHook !== JSCompiler_inline_result &&\n (push(contextFiberStackCursor, fiber),\n push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor), pop(contextFiberStackCursor));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor),\n (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n reentry = !0;\n var previousPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$1) {\n control = x$1;\n }\n Fake = !1;\n try {\n var prevProps = Object.getOwnPropertyDescriptor(\n fn.prototype,\n \"props\"\n );\n Object.defineProperty(fn.prototype, \"props\", {\n configurable: !0,\n set: function () {\n throw Error();\n }\n });\n Fake = !0;\n new fn();\n } finally {\n Fake &&\n (void 0 !== prevProps\n ? Object.defineProperty(fn.prototype, \"props\", prevProps)\n : delete fn.prototype.props);\n }\n }\n } else {\n try {\n throw Error();\n } catch (x$2) {\n control = x$2;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n namePropDescriptor = RunInRootFrame = 0;\n RunInRootFrame < sampleLines.length &&\n !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n )\n RunInRootFrame++;\n for (\n ;\n namePropDescriptor < controlLines.length &&\n !controlLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n if (\n RunInRootFrame === sampleLines.length ||\n namePropDescriptor === controlLines.length\n )\n for (\n RunInRootFrame = sampleLines.length - 1,\n namePropDescriptor = controlLines.length - 1;\n 1 <= RunInRootFrame &&\n 0 <= namePropDescriptor &&\n sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n )\n namePropDescriptor--;\n for (\n ;\n 1 <= RunInRootFrame && 0 <= namePropDescriptor;\n RunInRootFrame--, namePropDescriptor--\n )\n if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n do\n if (\n (RunInRootFrame--,\n namePropDescriptor--,\n 0 > namePropDescriptor ||\n sampleLines[RunInRootFrame] !==\n controlLines[namePropDescriptor])\n ) {\n var frame =\n \"\\n\" +\n sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n fn.displayName &&\n frame.includes(\"<anonymous>\") &&\n (frame = frame.replace(\"<anonymous>\", fn.displayName));\n return frame;\n }\n while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n }\n break;\n }\n }\n } finally {\n (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n }\n return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n case 30:\n return describeBuiltInComponentFrame(\"ViewTransition\");\n default:\n return \"\";\n }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do\n (info += describeFiber(workInProgress, previous)),\n (previous = workInProgress),\n (workInProgress = workInProgress.return);\n while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n nextTransitionDeferredLane = 262144,\n nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return lanes & -lanes;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return lanes;\n }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n}\nfunction getEntangledLanes(root, renderLanes) {\n 0 !== (renderLanes & 8) && (renderLanes |= renderLanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= renderLanes;\n 0 < allEntangledLanes;\n\n ) {\n var index$4 = 31 - clz32(allEntangledLanes),\n lane = 1 << index$4;\n renderLanes |= root[index$4];\n allEntangledLanes &= ~lane;\n }\n return renderLanes;\n}\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n}\nfunction createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index$7 = 31 - clz32(remainingLanes),\n lane = 1 << index$7;\n entanglements[index$7] = 0;\n expirationTimes[index$7] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index$7];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index$7] = null, index$7 = 0;\n index$7 < hiddenUpdatesForLane.length;\n index$7++\n ) {\n var update = hiddenUpdatesForLane[index$7];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index$8 = 31 - clz32(rootEntangledLanes),\n lane = 1 << index$8;\n (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n (root[index$8] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n}\nfunction lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 2 < lanes\n ? 8 < lanes\n ? 0 !== (lanes & 134217727)\n ? 32\n : 268435456\n : 8\n : 2;\n}\nfunction resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey,\n internalLoadPendingKey = \"__reactLoad$\" + randomKey;\nfunction detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst;\n if ((targetInst = targetNode[internalInstanceKey])) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n}\nfunction getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n}\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n}\nfunction clearPendingLoadOnNode(node) {\n node[internalLoadPendingKey] = void 0;\n}\nvar allNativeEvents = new Set(),\n registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] = dependencies;\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n return !1;\n}\nvar viewTransitionMutationContext = !1;\nfunction pushMutationContext() {\n var prev = viewTransitionMutationContext;\n viewTransitionMutationContext = !1;\n return prev;\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix$10 = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n node.removeAttribute(name);\n return;\n }\n }\n node.setAttribute(name, value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttribute(name, value);\n }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n node.setAttributeNS(namespace, name, value);\n }\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return value;\n default:\n return \"\";\n }\n}\nfunction isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n}\nfunction track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n}\nfunction updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n}\nfunction updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (element.type = type)\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n null != value\n ? \"number\" === type && element.value == value\n ? setDefaultValue(element, getToStringValue(element.value))\n : setDefaultValue(element, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (element.name = \"\" + getToStringValue(name))\n : element.removeAttribute(\"name\");\n}\nfunction initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (element.type = type);\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (element.name = name);\n track(element);\n}\nfunction setDefaultValue(node, value) {\n node.defaultValue !== \"\" + value && (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n if (isArrayImpl(children)) {\n if (1 < children.length) throw Error(formatProdErrorMessage(93));\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n}\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n);\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (style[styleName] = (\"\" + value).trim())\n : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(formatProdErrorMessage(62));\n node = node.style;\n if (null != prevStyles) {\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"),\n (viewTransitionMutationContext = !0));\n for (var styleName$16 in styles)\n (styleName = styles[styleName$16]),\n styles.hasOwnProperty(styleName$16) &&\n prevStyles[styleName$16] !== styleName &&\n (setValueForStyle(node, styleName$16, styleName),\n (viewTransitionMutationContext = !0));\n } else\n for (var styleName$17 in styles)\n styles.hasOwnProperty(styleName$17) &&\n setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n}\nvar aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"maskType\", \"mask-type\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps) throw Error(formatProdErrorMessage(90));\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form && updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n}\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n formatProdErrorMessage(231, registrationName, typeof stateNode)\n );\n return stateNode;\n}\nvar canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n try {\n var options = {};\n Object.defineProperty(options, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options, options);\n window.removeEventListener(\"test\", options, options);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\nvar root = null,\n startText = null,\n fallbackText = null;\nfunction getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n return !0;\n}\nfunction functionThatReturnsFalse() {\n return !1;\n}\nfunction createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n };\nfunction modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n}\nfunction getEventModifierState() {\n return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n SubmitEventInterface = assign({}, EventInterface, { submitter: 0 }),\n SyntheticSubmitEvent = createSyntheticEvent(SubmitEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0,\n source: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\ncanUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CHAR = String.fromCharCode(32),\n hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return 229 !== nativeEvent.keyCode;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (32 !== nativeEvent.which) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n );\n default:\n return null;\n }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n}\nvar supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n};\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n}\nfunction createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n var JSCompiler_inline_result$jscomp$318;\n if (canUseDOM) {\n var isSupported$jscomp$inline_474 = \"oninput\" in document;\n if (!isSupported$jscomp$inline_474) {\n var element$jscomp$inline_475 = document.createElement(\"div\");\n element$jscomp$inline_475.setAttribute(\"oninput\", \"return;\");\n isSupported$jscomp$inline_474 =\n \"function\" === typeof element$jscomp$inline_475.oninput;\n }\n JSCompiler_inline_result$jscomp$318 = isSupported$jscomp$inline_474;\n } else JSCompiler_inline_result$jscomp$318 = !1;\n isInputEventSupported =\n JSCompiler_inline_result$jscomp$318 &&\n (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n}\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;\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n}\nfunction getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e$20) {\n return doc.body;\n }\n}\nfunction getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n}\nfunction containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n}\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n}\nvar skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n}\nvar vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\ncanUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error fullscreenChange fullscreenError gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar globalClientIdCounter$1 = 0;\nfunction getViewTransitionName(props, instance) {\n if (null != props.name && \"auto\" !== props.name) return props.name;\n if (null !== instance.autoName) return instance.autoName;\n props = pendingEffectsRoot.identifierPrefix;\n var globalClientId = globalClientIdCounter$1++;\n props = \"_\" + props + \"t_\" + globalClientId.toString(32) + \"_\";\n return (instance.autoName = props);\n}\nfunction getClassNameByType(classByType) {\n if (null == classByType || \"string\" === typeof classByType)\n return classByType;\n var className = null,\n activeTypes = pendingTransitionTypes;\n if (null !== activeTypes)\n for (var i = 0; i < activeTypes.length; i++) {\n var match = classByType[activeTypes[i]];\n if (null != match) {\n if (\"none\" === match) return \"none\";\n className = null == className ? match : className + (\" \" + match);\n }\n }\n return null == className ? classByType.default : className;\n}\nfunction getViewTransitionClassName(defaultClass, eventClass) {\n defaultClass = getClassNameByType(defaultClass);\n eventClass = getClassNameByType(eventClass);\n return null == eventClass\n ? \"auto\" === defaultClass\n ? null\n : defaultClass\n : \"auto\" === eventClass\n ? null\n : eventClass;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n if (50 < nestedUpdateCount)\n throw (\n ((nestedUpdateCount = 0),\n (rootWithNestedUpdates = null),\n Error(formatProdErrorMessage(185)))\n );\n for (var parent = sourceFiber.return; null !== parent; )\n (sourceFiber = parent), (parent = sourceFiber.return);\n return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiberImplClass(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null));\n workInProgress.flags = current.flags & 1206910976;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 1206910978;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext\n }));\n return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n) {\n var fiberTag = 0;\n owner = type;\n if (\"function\" === typeof owner) shouldConstruct(owner) && (fiberTag = 1);\n else if (\"string\" === typeof owner)\n fiberTag = isHostHoistableType(\n type,\n pendingProps,\n contextStackCursor.current\n )\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5;\n else\n a: switch (owner) {\n case REACT_ACTIVITY_TYPE:\n return (\n (type = createFiberImplClass(31, pendingProps, key, mode)),\n (type.elementType = REACT_ACTIVITY_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= 24;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n (type.elementType = REACT_PROFILER_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (type = createFiberImplClass(13, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (type = createFiberImplClass(19, pendingProps, key, mode)),\n (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n (type.lanes = lanes),\n type\n );\n case REACT_LEGACY_HIDDEN_TYPE:\n case REACT_VIEW_TRANSITION_TYPE:\n return (\n (type = mode | 32),\n (type = createFiberImplClass(30, pendingProps, key, type)),\n (type.elementType = REACT_VIEW_TRANSITION_TYPE),\n (type.lanes = lanes),\n (type.stateNode = {\n autoName: null,\n paired: null,\n clones: null,\n ref: null\n }),\n type\n );\n default:\n if (\"object\" === typeof owner && null !== owner)\n switch (owner.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n owner = null;\n break a;\n }\n fiberTag = 29;\n pendingProps = Error(\n formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n );\n owner = null;\n }\n key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = owner;\n key.lanes = lanes;\n return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiberImplClass(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n content = createFiberImplClass(6, content, null, mode);\n content.lanes = lanes;\n return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiberImplClass(18, null, null, 0);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n mode = createFiberImplClass(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\nvar forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n var error = Error(\n formatProdErrorMessage(\n 418,\n 1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n ? \"text\"\n : \"HTML\",\n \"\"\n )\n );\n queueHydrationError(createCapturedValueAtFiber(error, fiber));\n throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n var instance = fiber.stateNode,\n type = fiber.type,\n props = fiber.memoizedProps;\n instance[internalInstanceKey] = fiber;\n instance[internalPropsKey] = props;\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", instance);\n listenToNonDelegatedEvent(\"close\", instance);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", instance);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", instance);\n listenToNonDelegatedEvent(\"load\", instance);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", instance);\n break;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n initInput(\n instance,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", instance);\n break;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", instance),\n initTextarea(instance, props.value, props.defaultValue, props.children);\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n instance.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(instance.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n listenToNonDelegatedEvent(\"toggle\", instance)),\n null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", instance),\n null != props.onClick && (instance.onclick = noop$1),\n (instance = !0))\n : (instance = !1);\n instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n}\nfunction popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber) throw Error(formatProdErrorMessage(317));\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n}\nfunction resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n}\nfunction queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n currentlyRenderingFiber$1 = null,\n lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue);\n context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n context._currentValue = valueCursor.current;\n pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n}\nfunction propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n nextFiber = null;\n } else\n 13 === fiber.tag &&\n null !== fiber.memoizedState &&\n null === fiber.memoizedState.dehydrated\n ? ((fiber.lanes |= renderLanes),\n (nextFiber = fiber.alternate),\n null !== nextFiber && (nextFiber.lanes |= renderLanes),\n scheduleContextWorkOnParentPath(\n fiber.return,\n renderLanes,\n workInProgress\n ),\n (nextFiber = fiber.child),\n (nextFiber = null !== nextFiber ? nextFiber.sibling : null))\n : (nextFiber = fiber.child);\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n}\nfunction propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current ? current.push(context) : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent) throw Error(formatProdErrorMessage(387));\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n return null !== current;\n}\nfunction checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer) throw Error(formatProdErrorMessage(308));\n lastContextDependency = context;\n consumer.dependencies = { lanes: 0, firstContext: context };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n}\nvar AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n };\nfunction createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n}\nfunction releaseCache(cache) {\n cache.refCount--;\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n}\nfunction queueTransitionTypes(root, transitionTypes) {\n if (0 !== (root.pendingLanes & 4194048)) {\n var queued = root.transitionTypes;\n null === queued && (queued = root.transitionTypes = []);\n for (root = 0; root < transitionTypes.length; root++) {\n var transitionType = transitionTypes[root];\n -1 === queued.indexOf(transitionType) && queued.push(transitionType);\n }\n }\n}\nvar entangledTransitionTypes = null;\nfunction claimQueuedTransitionTypes(root) {\n var claimed = root.transitionTypes;\n root.transitionTypes = null;\n return claimed;\n}\nvar currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n}\nfunction pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n ((entangledTransitionTypes = null), null !== currentEntangledListeners)\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n}\nfunction chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n globalMostRecentTransitionTime = now();\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n if (null !== entangledTransitionTypes)\n for (var root$28 = firstScheduledRoot; null !== root$28; )\n queueTransitionTypes(root$28, entangledTransitionTypes),\n (root$28 = root$28.next);\n root$28 = transition.types;\n if (null !== root$28) {\n for (var root$29 = firstScheduledRoot; null !== root$29; )\n queueTransitionTypes(root$29, root$28), (root$29 = root$29.next);\n if (0 !== currentEntangledLane) {\n root$29 = entangledTransitionTypes;\n null === root$29 && (root$29 = entangledTransitionTypes = []);\n for (var i = 0; i < root$28.length; i++) {\n var transitionType = root$28[i];\n -1 === root$29.indexOf(transitionType) && root$29.push(transitionType);\n }\n }\n }\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current)\n : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n SuspenseActionException = Error(formatProdErrorMessage(542)),\n noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n index = thenableState[index];\n void 0 === index\n ? thenableState.push(thenable)\n : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n thenableState = thenable.reason;\n checkIfUseWrappedInAsyncCatch(thenableState);\n if (void 0 === thenableState && !(\"reason\" in thenable))\n throw Error(formatProdErrorMessage(600));\n throw thenableState;\n default:\n if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n throw Error(formatProdErrorMessage(482));\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n throw SuspenseException;\n }\n}\nfunction resolveLazy(lazyType) {\n try {\n var init = lazyType._init;\n return init(lazyType._payload);\n } catch (x) {\n if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n throw ((suspendedThenable = x), SuspenseException);\n throw x;\n }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n var thenable = suspendedThenable;\n suspendedThenable = null;\n return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = []);\n return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(formatProdErrorMessage(525));\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n formatProdErrorMessage(\n 31,\n \"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber\n )\n );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null === currentFirstChild.key\n ? existingChildren.set(currentFirstChild.index, currentFirstChild)\n : existingChildren.set(currentFirstChild.key, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 2), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 134217730;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 134217730);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return (\n (returnFiber = updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n )),\n coerceRef(returnFiber, element),\n returnFiber\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n current\n );\n current = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n null,\n returnFiber.mode,\n lanes\n );\n coerceRef(current, element);\n current.return = returnFiber;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n newChild\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n createChild(returnFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newChild = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (newChild.return = returnFiber),\n newChild\n );\n if (\"function\" === typeof newChild.then)\n return createChild(returnFiber, unwrapThenable(newChild), lanes);\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? updateElement(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateSlot(returnFiber, oldFiber, newChild, lanes)\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return null !== key\n ? null\n : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n if (\"function\" === typeof newChild.then)\n return updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updateElement(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n );\n if (\"function\" === typeof newChild.then)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return null;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n (shouldTrackSideEffects &&\n ((newFiber = nextOldFiber.alternate),\n null !== newFiber &&\n oldFiber.delete(null === newFiber.key ? newIdx : newFiber.key)),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren) throw Error(formatProdErrorMessage(151));\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (step = createChild(returnFiber, step.value, lanes)),\n null !== step &&\n ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n null !== step &&\n (shouldTrackSideEffects &&\n ((nextOldFiber = step.alternate),\n null !== nextOldFiber &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n )),\n (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n null === previousNewFiber\n ? (resultingFirstChild = step)\n : (previousNewFiber.sibling = step),\n (previousNewFiber = step));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n void 0 === newChild.props.ref &&\n (newChild = newChild.props.children);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n resolveLazy(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromTypeAndProps(\n newChild.type,\n newChild.key,\n newChild.props,\n null,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = lanes));\n }\n return placeSingleChild(returnFiber);\n case REACT_PORTAL_TYPE:\n a: {\n for (key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n newChild.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n newChild.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.children || []);\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (newChild = resolveLazy(newChild)),\n reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )\n );\n }\n if (isArrayImpl(newChild))\n return reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n if (getIteratorFn(newChild)) {\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n newChild = key.call(newChild);\n return reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n }\n if (\"function\" === typeof newChild.then)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n }\n return (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n ? ((newChild = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n (lanes = useFiber(currentFirstChild, newChild)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n (lanes.return = returnFiber),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber))\n : deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n return fiber;\n } finally {\n }\n };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n}\nfunction createUpdate(lane) {\n return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (0 !== (executionContext & 2)) {\n var pending = updateQueue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n updateQueue.pending = update;\n update = getRootForUpdatedFiber(fiber);\n markUpdateLaneFromFiberToRoot(fiber, null, lane);\n return update;\n }\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n}\nfunction processUpdateQueue(\n workInProgress$jscomp$0,\n props,\n instance$jscomp$0,\n renderLanes\n) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress$jscomp$0.updateQueue;\n hasForceUpdate = !1;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress$jscomp$0.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n var workInProgress = workInProgress$jscomp$0,\n update = pendingQueue;\n updateLane = props;\n var instance = instance$jscomp$0;\n switch (update.tag) {\n case 1:\n workInProgress = update.payload;\n if (\"function\" === typeof workInProgress) {\n newState = workInProgress.call(instance, newState, updateLane);\n break a;\n }\n newState = workInProgress;\n break a;\n case 3:\n workInProgress.flags = (workInProgress.flags & -65537) | 128;\n case 0:\n workInProgress = update.payload;\n updateLane =\n \"function\" === typeof workInProgress\n ? workInProgress.call(instance, newState, updateLane)\n : workInProgress;\n if (null === updateLane || void 0 === updateLane) break a;\n newState = assign({}, newState, updateLane);\n break a;\n case 2:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress$jscomp$0.flags |= 64),\n isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress$jscomp$0.lanes = lastBaseUpdate;\n workInProgress$jscomp$0.memoizedState = newState;\n }\n}\nfunction callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(formatProdErrorMessage(191, callback));\n callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n fiber = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, fiber);\n push(currentTreeHiddenStackCursor, context);\n entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor);\n pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(suspenseStackCursor, suspenseStackCursor.current & 1);\n push(suspenseHandlerStackCursor, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current),\n push(suspenseHandlerStackCursor, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack();\n}\nfunction reuseSuspenseHandlerOnStack() {\n push(suspenseStackCursor, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction pushSuspenseListContext(fiber, newContext) {\n push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n push(suspenseStackCursor, newContext);\n}\nfunction popSuspenseListContext(fiber) {\n pop(suspenseStackCursor);\n pop(suspenseHandlerStackCursor);\n shellBoundary === fiber && (shellBoundary = null);\n}\nfunction findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n \"independent\" !== node.memoizedProps.revealOrder\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n}\nvar renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n if (null === prevDeps) return !1;\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n}\nfunction renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null === current || null === current.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate;\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n nextRenderLanes = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (nextRenderLanes = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n finishRenderingHooks(current);\n return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n numberOfReRenders += 1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n ReactSharedInternals.H = HooksDispatcherOnRerender;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n}\nfunction TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags &= -2053;\n current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n workInProgressHook = currentHook = currentlyRenderingFiber = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(formatProdErrorMessage(467));\n throw Error(formatProdErrorMessage(310));\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = []);\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null === index || null === index.memoizedState\n ? HooksDispatcherOnMount\n : HooksDispatcherOnUpdate));\n return thenable;\n}\nfunction use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_RECOVERABLE_TYPE) return;\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n memoCache.index++;\n return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction$64 = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$64 = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction$64 = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction$64 &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue) throw Error(formatProdErrorMessage(311));\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else getServerSnapshot = getSnapshot();\n var snapshotChanged = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n );\n snapshotChanged &&\n ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n hook = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n subscribe\n ]);\n subscribe =\n hook.getSnapshot !== getSnapshot ||\n snapshotChanged ||\n (null !== workInProgressHook &&\n 0 !== (workInProgressHook.memoizedState.tag & 1));\n pushSimpleEffect(\n subscribe ? 9 : 8,\n { destroy: void 0 },\n updateStoreInstance.bind(null, fiber, hook, getServerSnapshot, getSnapshot),\n null\n );\n if (subscribe) {\n fiber.flags |= 2048;\n if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\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 forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n}\nfunction dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n) {\n if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n}\nfunction runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n } else\n try {\n (prevTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, prevTransition);\n } catch (error$70) {\n onActionError(actionQueue, node, error$70);\n }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n )\n : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var JSCompiler_inline_result = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n if (null === JSCompiler_inline_result$jscomp$0) {\n JSCompiler_inline_result$jscomp$0 = null;\n break b;\n }\n }\n inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n JSCompiler_inline_result$jscomp$0 =\n \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n ? JSCompiler_inline_result$jscomp$0\n : null;\n }\n if (JSCompiler_inline_result$jscomp$0) {\n nextHydratableInstance = getNextHydratable(\n JSCompiler_inline_result$jscomp$0.nextSibling\n );\n JSCompiler_inline_result =\n \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n break a;\n }\n }\n throwOnHydrationMismatch(JSCompiler_inline_result);\n }\n JSCompiler_inline_result = !1;\n }\n JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n JSCompiler_inline_result = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = JSCompiler_inline_result;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result\n );\n JSCompiler_inline_result.dispatch = ssrFormState;\n JSCompiler_inline_result = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n JSCompiler_inline_result.queue\n );\n JSCompiler_inline_result = mountWorkInProgressHook();\n JSCompiler_inline_result$jscomp$0 = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n JSCompiler_inline_result$jscomp$0,\n inRootOrSingleton,\n ssrFormState\n );\n JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n JSCompiler_inline_result.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n}\nfunction updateRef() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n 1 | hookFlags,\n inst,\n create,\n deps\n )));\n}\nfunction mountEffect(create, deps) {\n mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n currentlyRenderingFiber.flags |= 4;\n var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n if (null === componentUpdateQueue)\n (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n (componentUpdateQueue.events = [payload]);\n else {\n var events = componentUpdateQueue.events;\n null === events\n ? (componentUpdateQueue.events = [payload])\n : events.push(payload);\n }\n}\nfunction updateEvent(callback) {\n var ref = updateWorkInProgressHook().memoizedState;\n useEffectEventImpl({ ref: ref, nextImpl: callback });\n return function () {\n if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n}\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n if (\n void 0 === initialValue ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (\n 0 === (renderLanes & 106) ||\n (0 !== (renderLanes & 1073741824) &&\n 0 === (workInProgressRootRenderLanes & 261930))\n )\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition.types =\n null !== prevTransition ? prevTransition.types : null;\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane()\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n sharedNotPendingObject,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: sharedNotPendingObject,\n baseState: sharedNotPendingObject,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: sharedNotPendingObject\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane()\n );\n}\nfunction useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n}\nfunction updateId() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane();\n fiber = createUpdate(lane);\n var root$73 = enqueueUpdate(provider, fiber, lane);\n null !== root$73 &&\n (scheduleUpdateOnFiber(root$73, provider, lane),\n entangleTransitions(root$73, provider, lane));\n provider = { cache: createCache() };\n fiber.payload = provider;\n return;\n }\n provider = provider.return;\n }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n var lane = requestUpdateLane();\n action = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, action)\n : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n null !== action &&\n (scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n var lane = requestUpdateLane();\n dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n )\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n}\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError,\n useEffectEvent: throwInvalidHookError\n },\n HooksDispatcherOnMount = {\n readContext: readContext,\n use: use,\n useCallback: function (callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n },\n useContext: readContext,\n useEffect: mountEffect,\n useImperativeHandle: function (ref, create, deps) {\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n mountEffectImpl(\n 4194308,\n 4,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n },\n useLayoutEffect: function (create, deps) {\n return mountEffectImpl(4194308, 4, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n mountEffectImpl(4, 2, create, deps);\n },\n useMemo: function (nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n },\n useReducer: function (reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n },\n useRef: function (initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n },\n useState: function (initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n },\n useTransition: function () {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(formatProdErrorMessage(407));\n getServerSnapshot = getServerSnapshot();\n } else {\n getServerSnapshot = getSnapshot();\n if (null === workInProgressRoot)\n throw Error(formatProdErrorMessage(349));\n 0 !== (workInProgressRootRenderLanes & 127) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n hook.memoizedState = getServerSnapshot;\n var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n hook.queue = inst;\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n subscribe\n ]);\n fiber.flags |= 2048;\n pushSimpleEffect(\n 9,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n inst,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n return getServerSnapshot;\n },\n useId: function () {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var JSCompiler_inline_result = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n JSCompiler_inline_result =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + JSCompiler_inline_result;\n identifierPrefix =\n \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n JSCompiler_inline_result = localIdCounter++;\n 0 < JSCompiler_inline_result &&\n (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n identifierPrefix += \"_\";\n } else\n (JSCompiler_inline_result = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" +\n identifierPrefix +\n \"r_\" +\n JSCompiler_inline_result.toString(32) +\n \"_\");\n return (hook.memoizedState = identifierPrefix);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: mountActionState,\n useActionState: mountActionState,\n useOptimistic: function (passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n },\n useEffectEvent: function (callback) {\n var hook = mountWorkInProgressHook(),\n ref = { impl: callback };\n hook.memoizedState = ref;\n return function () {\n if (0 !== (executionContext & 2))\n throw Error(formatProdErrorMessage(440));\n return ref.impl.apply(void 0, arguments);\n };\n }\n },\n HooksDispatcherOnUpdate = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: updateReducer,\n useRef: updateRef,\n useState: function () {\n return updateReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: updateActionState,\n useActionState: updateActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh,\n useEffectEvent: updateEvent\n },\n HooksDispatcherOnRerender = {\n readContext: readContext,\n use: use,\n useCallback: updateCallback,\n useContext: readContext,\n useEffect: updateEffect,\n useImperativeHandle: updateImperativeHandle,\n useInsertionEffect: updateInsertionEffect,\n useLayoutEffect: updateLayoutEffect,\n useMemo: updateMemo,\n useReducer: rerenderReducer,\n useRef: updateRef,\n useState: function () {\n return rerenderReducer(basicStateReducer);\n },\n useDebugValue: mountDebugValue,\n useDeferredValue: function (value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n },\n useTransition: function () {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n },\n useSyncExternalStore: updateSyncExternalStore,\n useId: updateId,\n useHostTransitionStatus: useHostTransitionStatus,\n useFormState: rerenderActionState,\n useActionState: rerenderActionState,\n useOptimistic: function (passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n },\n useMemoCache: useMemoCache,\n useCacheRefresh: updateRefresh,\n useEffectEvent: updateEvent\n };\nfunction applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n) {\n ctor = workInProgress.memoizedState;\n getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n getDerivedStateFromProps =\n null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n ? ctor\n : assign({}, ctor, getDerivedStateFromProps);\n workInProgress.memoizedState = getDerivedStateFromProps;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 1;\n update.payload = payload;\n void 0 !== callback && null !== callback && (update.callback = callback);\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(),\n update = createUpdate(lane);\n update.tag = 2;\n void 0 !== callback && null !== callback && (update.callback = callback);\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n }\n};\nfunction checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n) {\n workInProgress = workInProgress.stateNode;\n return \"function\" === typeof workInProgress.shouldComponentUpdate\n ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n : ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n}\nfunction callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n) {\n workInProgress = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== workInProgress &&\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var propName$77 in Component)\n void 0 === newProps[propName$77] &&\n (newProps[propName$77] = Component[propName$77]);\n }\n return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n try {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n } catch (e$78) {\n setTimeout(function () {\n throw e$78;\n });\n }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n try {\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$79) {\n setTimeout(function () {\n throw e$79;\n });\n }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n lane.payload = { element: null };\n lane.callback = function () {\n logUncaughtError(root, errorInfo);\n };\n return lane;\n}\nfunction createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = 3;\n return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n logCaughtError(root, fiber, errorInfo);\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n var stack = errorInfo.stack;\n this.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n });\n}\nfunction throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n) {\n sourceFiber.flags |= 32768;\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n case 19:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n 0 === workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 3),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n ((root = Error(formatProdErrorMessage(422), { cause: value })),\n queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n : (value !== HydrationMismatchException &&\n ((returnFiber = Error(formatProdErrorMessage(423), {\n cause: value\n })),\n queueHydrationError(\n createCapturedValueAtFiber(returnFiber, sourceFiber)\n )),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n 4 !== workInProgressRootExitStatus &&\n (workInProgressRootExitStatus = 2)),\n !1\n );\n var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [wrapperError])\n : workInProgressRootConcurrentErrors.push(wrapperError);\n 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n returnFiber = sourceFiber.type;\n wrapperError = sourceFiber.stateNode;\n if (\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== wrapperError &&\n \"function\" === typeof wrapperError.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n break;\n case 22:\n if (null !== sourceFiber.memoizedState)\n return (sourceFiber.flags |= 65536), !1;\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n}\nfunction updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (workInProgress.tag = 15),\n (workInProgress.type = type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n type,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n}\nfunction updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n null === current &&\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n prevState =\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n if (null !== current) {\n nextProps = workInProgress.child = current.child;\n for (nextChildren = 0; null !== nextProps; )\n (nextChildren =\n nextChildren | nextProps.lanes | nextProps.childLanes),\n (nextProps = nextProps.sibling);\n nextProps = nextChildren & ~prevState;\n } else (nextProps = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n prevState,\n renderLanes,\n nextProps\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (nextProps = workInProgress.lanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n renderLanes,\n nextProps\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(),\n reuseSuspenseHandlerOnStack());\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n (null !== current && 22 === current.tag) ||\n null !== workInProgress.stateNode ||\n (workInProgress.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n });\n return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes,\n remainingChildLanes\n) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack();\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n workInProgress.childLanes = remainingChildLanes;\n return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n didSuspend = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current) {\n if (isHydrating) {\n if (\"hidden\" === nextProps.mode)\n return (\n (current = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.lanes = 536870912),\n (current.memoizedState = { baseLanes: 0, cachePool: null }),\n bailoutOffscreenComponent(null, current)\n );\n pushDehydratedActivitySuspenseHandler(workInProgress);\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" === current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n workInProgress.lanes = 536870912;\n return null;\n }\n return mountActivityChildren(workInProgress, nextProps);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated = prevState.dehydrated;\n pushDehydratedActivitySuspenseHandler(workInProgress);\n if (didSuspend)\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else throw Error(formatProdErrorMessage(558));\n else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n (didSuspend = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || didSuspend)\n ) {\n if (null === currentTreeHiddenStackCursor.current) {\n nextProps = workInProgressRoot;\n if (\n null !== nextProps &&\n ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n 0 !== dehydrated && dehydrated !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = dehydrated),\n enqueueConcurrentRenderForLane(current, dehydrated),\n scheduleUpdateOnFiber(nextProps, current, dehydrated),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n }\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n (workInProgress.flags |= 134221824);\n return workInProgress;\n }\n current = createWorkInProgress(current.child, {\n mode: nextProps.mode,\n children: nextProps.children\n });\n current.ref = workInProgress.ref;\n workInProgress.child = current;\n current.return = workInProgress;\n return current;\n}\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(formatProdErrorMessage(284));\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n}\nfunction updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n}\nfunction replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current);\n Component = checkDidRenderIdHook();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n}\nfunction updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n) {\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n var context = emptyContextObject,\n contextType = Component.contextType;\n \"object\" === typeof contextType &&\n null !== contextType &&\n (context = readContext(contextType));\n context = new Component(nextProps, context);\n workInProgress.memoizedState =\n null !== context.state && void 0 !== context.state ? context.state : null;\n context.updater = classComponentUpdater;\n workInProgress.stateNode = context;\n context._reactInternals = workInProgress;\n context = workInProgress.stateNode;\n context.props = nextProps;\n context.state = workInProgress.memoizedState;\n context.refs = {};\n initializeUpdateQueue(workInProgress);\n contextType = Component.contextType;\n context.context =\n \"object\" === typeof contextType && null !== contextType\n ? readContext(contextType)\n : emptyContextObject;\n context.state = workInProgress.memoizedState;\n contextType = Component.getDerivedStateFromProps;\n \"function\" === typeof contextType &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n contextType,\n nextProps\n ),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n ((contextType = context.state),\n \"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount(),\n contextType !== context.state &&\n classComponentUpdater.enqueueReplaceState(context, context.state, null),\n processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (context.state = workInProgress.memoizedState));\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308);\n nextProps = !0;\n } else if (null === current) {\n context = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps,\n oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n context.props = oldProps;\n var oldContext = context.context,\n contextType$jscomp$0 = Component.contextType;\n contextType = emptyContextObject;\n \"object\" === typeof contextType$jscomp$0 &&\n null !== contextType$jscomp$0 &&\n (contextType = readContext(contextType$jscomp$0));\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n contextType$jscomp$0 =\n \"function\" === typeof getDerivedStateFromProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== contextType) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n contextType\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof getDerivedStateFromProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n getDerivedStateFromProps,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (oldProps =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n oldProps,\n nextProps,\n oldState,\n oldContext,\n contextType\n ))\n ? (contextType$jscomp$0 ||\n (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n \"function\" !== typeof context.componentWillMount) ||\n (\"function\" === typeof context.componentWillMount &&\n context.componentWillMount(),\n \"function\" === typeof context.UNSAFE_componentWillMount &&\n context.UNSAFE_componentWillMount()),\n \"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (context.props = nextProps),\n (context.state = oldContext),\n (context.context = contextType),\n (nextProps = oldProps))\n : (\"function\" === typeof context.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (nextProps = !1));\n } else {\n context = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n contextType = workInProgress.memoizedProps;\n contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n context.props = contextType$jscomp$0;\n getDerivedStateFromProps = workInProgress.pendingProps;\n oldState = context.context;\n oldContext = Component.contextType;\n oldProps = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (oldProps = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof context.componentWillReceiveProps) ||\n ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n callComponentWillReceiveProps(\n workInProgress,\n context,\n nextProps,\n oldProps\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n context.state = oldState;\n processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n contextType !== getDerivedStateFromProps ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (contextType$jscomp$0 =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n contextType$jscomp$0,\n nextProps,\n oldState,\n newState,\n oldProps\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof context.componentWillUpdate) ||\n (\"function\" === typeof context.componentWillUpdate &&\n context.componentWillUpdate(nextProps, newState, oldProps),\n \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n context.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n oldProps\n )),\n \"function\" === typeof context.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof context.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (context.props = nextProps),\n (context.state = newState),\n (context.context = oldProps),\n (nextProps = contextType$jscomp$0))\n : (\"function\" !== typeof context.componentDidUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n (contextType === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (nextProps = !1));\n }\n context = nextProps;\n markRef(current, workInProgress);\n nextProps = 0 !== (workInProgress.flags & 128);\n context || nextProps\n ? ((context = workInProgress.stateNode),\n (Component =\n nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n ? null\n : context.render()),\n (workInProgress.flags |= 1),\n null !== current && nextProps\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes),\n (workInProgress.memoizedState = context.state),\n (current = workInProgress.child))\n : (current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ));\n return current;\n}\nfunction mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n showFallback = !1,\n didSuspend = 0 !== (workInProgress.flags & 128),\n JSCompiler_temp;\n (JSCompiler_temp = didSuspend) ||\n (JSCompiler_temp =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & 2));\n JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n showFallback\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack();\n (current = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (current = null !== current && \"&\" !== current.data ? current : null),\n null !== current &&\n ((workInProgress.memoizedState = {\n dehydrated: current,\n treeContext:\n null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null,\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (renderLanes = createFiberFromDehydratedFragment(current)),\n (renderLanes.return = workInProgress),\n (workInProgress.child = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null);\n if (null === current) throw throwOnHydrationMismatch(workInProgress);\n isSuspenseInstanceFallback(current)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n didSuspend = nextProps.children;\n nextProps = nextProps.fallback;\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(),\n (showFallback = workInProgress.mode),\n (didSuspend = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: didSuspend },\n showFallback\n )),\n (nextProps = createFiberFromFragment(\n nextProps,\n showFallback,\n renderLanes,\n null\n )),\n (didSuspend.return = workInProgress),\n (nextProps.return = workInProgress),\n (didSuspend.sibling = nextProps),\n (workInProgress.child = didSuspend),\n (nextProps = workInProgress.child),\n (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(null, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, didSuspend);\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var dehydrated$96 = prevState.dehydrated;\n if (null !== dehydrated$96)\n return updateDehydratedSuspenseComponent(\n current,\n workInProgress,\n didSuspend,\n JSCompiler_temp,\n nextProps,\n dehydrated$96,\n prevState,\n renderLanes\n );\n }\n if (showFallback)\n return (\n reuseSuspenseHandlerOnStack(),\n (showFallback = nextProps.fallback),\n (didSuspend = workInProgress.mode),\n (prevState = current.child),\n (dehydrated$96 = prevState.sibling),\n (nextProps = createWorkInProgress(prevState, {\n mode: \"hidden\",\n children: nextProps.children\n })),\n (nextProps.subtreeFlags = prevState.subtreeFlags & 1206910976),\n null !== dehydrated$96\n ? (showFallback = createWorkInProgress(dehydrated$96, showFallback))\n : ((showFallback = createFiberFromFragment(\n showFallback,\n didSuspend,\n renderLanes,\n null\n )),\n (showFallback.flags |= 2)),\n (showFallback.return = workInProgress),\n (nextProps.return = workInProgress),\n (nextProps.sibling = showFallback),\n (workInProgress.child = nextProps),\n bailoutOffscreenComponent(null, nextProps),\n (nextProps = workInProgress.child),\n (showFallback = current.child.memoizedState),\n null === showFallback\n ? (showFallback = mountSuspenseOffscreenState(renderLanes))\n : ((didSuspend = showFallback.cachePool),\n null !== didSuspend\n ? ((prevState = CacheContext._currentValue),\n (didSuspend =\n didSuspend.parent !== prevState\n ? { parent: prevState, pool: prevState }\n : didSuspend))\n : (didSuspend = getSuspendedCache()),\n (showFallback = {\n baseLanes: showFallback.baseLanes | renderLanes,\n cachePool: didSuspend\n })),\n (nextProps.memoizedState = showFallback),\n (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_temp,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n bailoutOffscreenComponent(current.child, nextProps)\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: nextProps.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_temp = workInProgress.deletions),\n null === JSCompiler_temp\n ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n : JSCompiler_temp.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n}\nfunction updateDehydratedSuspenseComponent(\n current,\n workInProgress,\n didSuspend,\n didPrimaryChildrenDefer,\n nextProps,\n suspenseInstance,\n suspenseState,\n renderLanes\n) {\n if (didSuspend) {\n if (workInProgress.flags & 256)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )\n );\n if (null !== workInProgress.memoizedState)\n return (\n reuseSuspenseHandlerOnStack(),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n null\n );\n reuseSuspenseHandlerOnStack();\n suspenseInstance = nextProps.fallback;\n suspenseState = workInProgress.mode;\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: nextProps.children },\n suspenseState\n );\n suspenseInstance = createFiberFromFragment(\n suspenseInstance,\n suspenseState,\n renderLanes,\n null\n );\n suspenseInstance.flags |= 2;\n nextProps.return = workInProgress;\n suspenseInstance.return = workInProgress;\n nextProps.sibling = suspenseInstance;\n workInProgress.child = nextProps;\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n nextProps = workInProgress.child;\n nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes);\n nextProps.childLanes = getRemainingWorkInPrimaryTree(\n current,\n didPrimaryChildrenDefer,\n renderLanes\n );\n workInProgress.memoizedState = SUSPENDED_MARKER;\n return bailoutOffscreenComponent(null, nextProps);\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n if (isSuspenseInstanceFallback(suspenseInstance)) {\n didPrimaryChildrenDefer =\n suspenseInstance.nextSibling && suspenseInstance.nextSibling.dataset;\n if (didPrimaryChildrenDefer) var digest = didPrimaryChildrenDefer.dgst;\n didPrimaryChildrenDefer = digest;\n \"\" !== didPrimaryChildrenDefer &&\n ((nextProps = Error(formatProdErrorMessage(419))),\n (nextProps.stack = \"\"),\n (nextProps.digest = didPrimaryChildrenDefer),\n queueHydrationError({ value: nextProps, source: null, stack: null }));\n return retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n }\n didReceiveUpdate ||\n propagateParentContextChanges(current, workInProgress, renderLanes, !1);\n didPrimaryChildrenDefer = 0 !== (renderLanes & current.childLanes);\n if (didReceiveUpdate || didPrimaryChildrenDefer) {\n if (null !== currentTreeHiddenStackCursor.current)\n return retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n didPrimaryChildrenDefer = workInProgressRoot;\n if (\n null !== didPrimaryChildrenDefer &&\n ((nextProps = getBumpedLaneForHydration(\n didPrimaryChildrenDefer,\n renderLanes\n )),\n 0 !== nextProps && nextProps !== suspenseState.retryLane)\n )\n throw (\n ((suspenseState.retryLane = nextProps),\n enqueueConcurrentRenderForLane(current, nextProps),\n scheduleUpdateOnFiber(didPrimaryChildrenDefer, current, nextProps),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(suspenseInstance) ||\n renderDidSuspendDelayIfPossible();\n return retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n }\n if (isSuspenseInstancePending(suspenseInstance))\n return (\n (workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n null\n );\n current = suspenseState.treeContext;\n nextHydratableInstance = getNextHydratable(suspenseInstance.nextSibling);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !1;\n null !== current && restoreSuspendedTreeContext(workInProgress, current);\n workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n nextProps.children\n );\n workInProgress.flags |= 134221824;\n return workInProgress;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction findLastContentRow(firstChild) {\n for (var lastContentRow = null; null !== firstChild; ) {\n var currentRow = firstChild.alternate;\n null !== currentRow &&\n null === findFirstSuspended(currentRow) &&\n (lastContentRow = firstChild);\n firstChild = firstChild.sibling;\n }\n return lastContentRow;\n}\nfunction initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n}\nfunction reverseChildren(fiber) {\n var row = fiber.child;\n for (fiber.child = null; null !== row; ) {\n var nextRow = row.sibling;\n row.sibling = fiber.child;\n fiber.child = row;\n row = nextRow;\n }\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail;\n nextProps = nextProps.children;\n var suspenseContext = suspenseStackCursor.current;\n if (workInProgress.flags & 128)\n return pushSuspenseListContext(workInProgress, suspenseContext), null;\n var shouldForceFallback = 0 !== (suspenseContext & 2);\n shouldForceFallback\n ? ((suspenseContext = (suspenseContext & 1) | 2),\n (workInProgress.flags |= 128))\n : (suspenseContext &= 1);\n pushSuspenseListContext(workInProgress, suspenseContext);\n \"backwards\" === revealOrder && null !== current\n ? (reverseChildren(current),\n reconcileChildren(current, workInProgress, nextProps, renderLanes),\n reverseChildren(current))\n : reconcileChildren(current, workInProgress, nextProps, renderLanes);\n nextProps = isHydrating ? treeForkCount : 0;\n if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"backwards\":\n renderLanes = findLastContentRow(workInProgress.child);\n null === renderLanes\n ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling),\n (renderLanes.sibling = null),\n reverseChildren(workInProgress));\n initSuspenseListRenderState(\n workInProgress,\n !0,\n revealOrder,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n nextProps\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n nextProps\n );\n break;\n case \"independent\":\n workInProgress.memoizedState = null;\n break;\n default:\n (renderLanes = findLastContentRow(workInProgress.child)),\n null === renderLanes\n ? ((revealOrder = workInProgress.child),\n (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null)),\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n nextProps\n );\n }\n return workInProgress.child;\n}\nfunction updateContextProvider(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n pushProvider(workInProgress, workInProgress.type, newProps.value);\n reconcileChildren(current, workInProgress, newProps.children, renderLanes);\n return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(formatProdErrorMessage(153));\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n var state$108 = workInProgress.memoizedState;\n if (null !== state$108) {\n if (null !== state$108.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n state$108 = propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n );\n var primaryChildLanes = workInProgress.child.childLanes;\n if (state$108 || 0 !== (renderLanes & primaryChildLanes))\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n if (workInProgress.flags & 128)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n primaryChildLanes = 0 !== (current.flags & 128);\n state$108 = 0 !== (renderLanes & workInProgress.childLanes);\n state$108 ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (state$108 = 0 !== (renderLanes & workInProgress.childLanes)));\n if (primaryChildLanes) {\n if (state$108)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n primaryChildLanes = workInProgress.memoizedState;\n null !== primaryChildLanes &&\n ((primaryChildLanes.rendering = null),\n (primaryChildLanes.tail = null),\n (primaryChildLanes.lastEffect = null));\n pushSuspenseListContext(workInProgress, suspenseStackCursor.current);\n if (state$108) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n if (null !== current)\n if (current.memoizedProps !== workInProgress.pendingProps)\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else\n (didReceiveUpdate = !1),\n isHydrating &&\n 0 !== (workInProgress.flags & 1048576) &&\n pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: {\n var props = workInProgress.pendingProps;\n current = resolveLazy(workInProgress.elementType);\n workInProgress.type = current;\n if (\"function\" === typeof current)\n shouldConstruct(current)\n ? ((props = resolveClassComponentProps(current, props)),\n (workInProgress.tag = 1),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current) {\n var $$typeof = current.$$typeof;\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n workInProgress.tag = 11;\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n props,\n renderLanes\n );\n break a;\n } else if ($$typeof === REACT_CONTEXT_TYPE) {\n workInProgress.tag = 10;\n workInProgress.type = current;\n workInProgress = updateContextProvider(\n null,\n workInProgress,\n renderLanes\n );\n break a;\n }\n }\n workInProgress = getComponentNameFromType(current) || current;\n throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n }\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (props = workInProgress.type),\n ($$typeof = resolveClassComponentProps(\n props,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n props,\n $$typeof,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current) throw Error(formatProdErrorMessage(387));\n props = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n $$typeof = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, props, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n props = nextState.cache;\n pushProvider(workInProgress, CacheContext, props);\n props !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n props = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: props,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else if (props !== $$typeof) {\n $$typeof = createCapturedValueAtFiber(\n Error(formatProdErrorMessage(424)),\n workInProgress\n );\n queueHydrationError($$typeof);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n props,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 134221824),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (props === $$typeof) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(current, workInProgress, props, renderLanes);\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n (workInProgress.stateNode = createHoistableInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current,\n workInProgress\n ))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((props = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n rootInstanceStackCursor.current\n )),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n ($$typeof = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n (nextHydratableInstance = getNextHydratable(props.firstChild)))\n : (nextHydratableInstance = $$typeof)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n if (null === current && isHydrating) {\n if (($$typeof = props = nextHydratableInstance))\n (props = canHydrateInstance(\n props,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== props\n ? ((workInProgress.stateNode = props),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(props.firstChild)),\n (rootOrSingletonContext = !1),\n ($$typeof = !0))\n : ($$typeof = !1);\n $$typeof || throwOnHydrationMismatch(workInProgress);\n }\n pushHostContext(workInProgress);\n $$typeof = workInProgress.type;\n prevState = workInProgress.pendingProps;\n nextState = null !== current ? current.memoizedProps : null;\n props = prevState.children;\n shouldSetTextContent($$typeof, prevState)\n ? (props = null)\n : null !== nextState &&\n shouldSetTextContent($$typeof, nextState) &&\n (workInProgress.flags |= 32);\n null !== workInProgress.memoizedState &&\n (($$typeof = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = $$typeof));\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, props, renderLanes);\n return workInProgress.child;\n case 6:\n if (null === current && isHydrating) {\n if ((current = renderLanes = nextHydratableInstance))\n (renderLanes = canHydrateTextInstance(\n renderLanes,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== renderLanes\n ? ((workInProgress.stateNode = renderLanes),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (current = !0))\n : (current = !1);\n current || throwOnHydrationMismatch(workInProgress);\n }\n return null;\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (props = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n props,\n renderLanes\n ))\n : reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n (props = workInProgress.pendingProps),\n markRef(current, workInProgress),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return updateContextProvider(current, workInProgress, renderLanes);\n case 9:\n return (\n ($$typeof = workInProgress.type._context),\n (props = workInProgress.pendingProps.children),\n prepareToReadContext(workInProgress),\n ($$typeof = readContext($$typeof)),\n (props = props($$typeof)),\n (workInProgress.flags |= 1),\n reconcileChildren(current, workInProgress, props, renderLanes),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n case 31:\n return updateActivityComponent(current, workInProgress, renderLanes);\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (props = readContext(CacheContext)),\n null === current\n ? (($$typeof = peekCacheFromPool()),\n null === $$typeof &&\n (($$typeof = workInProgressRoot),\n (prevState = createCache()),\n ($$typeof.pooledCache = prevState),\n prevState.refCount++,\n null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n ($$typeof = prevState)),\n (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, $$typeof))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n ($$typeof = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n $$typeof.parent !== props\n ? (($$typeof = { parent: props, cache: props }),\n (workInProgress.memoizedState = $$typeof),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n $$typeof),\n pushProvider(workInProgress, CacheContext, props))\n : ((props = prevState.cache),\n pushProvider(workInProgress, CacheContext, props),\n props !== $$typeof.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 30:\n return (\n null === workInProgress.stateNode &&\n (workInProgress.stateNode = {\n autoName: null,\n paired: null,\n clones: null,\n ref: null\n }),\n (props = workInProgress.pendingProps),\n null != props.name && \"auto\" !== props.name\n ? (workInProgress.flags |= null === current ? 18882560 : 18874368)\n : isHydrating && pushMaterializedTreeId(workInProgress),\n null !== current && current.memoizedProps.name !== props.name\n ? (workInProgress.flags |= 4194816)\n : markRef(current, workInProgress),\n reconcileChildren(current, workInProgress, props.children, renderLanes),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n) {\n var JSCompiler_temp;\n if ((JSCompiler_temp = 0 !== (workInProgress.mode & 32)))\n JSCompiler_temp =\n null === oldProps\n ? maySuspendCommit(type, newProps)\n : maySuspendCommit(type, newProps) &&\n (newProps.src !== oldProps.src ||\n newProps.srcSet !== oldProps.srcSet);\n if (JSCompiler_temp) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"visible\":\n break;\n case \"collapsed\":\n for (\n var tailNode = renderState.tail, lastTailNode = null;\n null !== tailNode;\n\n )\n null !== tailNode.alternate && (lastTailNode = tailNode),\n (tailNode = tailNode.sibling);\n null === lastTailNode\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (lastTailNode.sibling = null);\n break;\n default:\n hasRenderedATailFallback = renderState.tail;\n for (tailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (tailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === tailNode\n ? (renderState.tail = null)\n : (tailNode.sibling = null);\n }\n}\nfunction bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n for (var child$113 = completedWork.child; null !== child$113; )\n (newChildLanes |= child$113.lanes | child$113.childLanes),\n (subtreeFlags |= child$113.subtreeFlags & 1206910976),\n (subtreeFlags |= child$113.flags & 1206910976),\n (child$113.return = completedWork),\n (child$113 = child$113.sibling);\n else\n for (child$113 = completedWork.child; null !== child$113; )\n (newChildLanes |= child$113.lanes | child$113.childLanes),\n (subtreeFlags |= child$113.subtreeFlags),\n (subtreeFlags |= child$113.flags),\n (child$113.return = completedWork),\n (child$113 = child$113.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext);\n popHostContainer();\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? markUpdate(workInProgress)\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = rootInstanceStackCursor.current;\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n return null;\n }\n current = contextStackCursor.current;\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n return null;\n }\n nextResource = contextStackCursor.current;\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, nextResource);\n else {\n var ownerDocument = getOwnerDocumentFromRootContainer(\n rootInstanceStackCursor.current\n );\n switch (nextResource) {\n case 1:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case 2:\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/2000/svg\",\n type\n );\n break;\n case \"math\":\n nextResource = ownerDocument.createElementNS(\n \"http://www.w3.org/1998/Math/MathML\",\n type\n );\n break;\n case \"script\":\n nextResource = ownerDocument.createElement(\"div\");\n nextResource.innerHTML = \"<script>\\x3c/script>\";\n nextResource = nextResource.removeChild(\n nextResource.firstChild\n );\n break;\n case \"select\":\n nextResource =\n \"string\" === typeof newProps.is\n ? ownerDocument.createElement(\"select\", {\n is: newProps.is\n })\n : ownerDocument.createElement(\"select\");\n newProps.multiple\n ? (nextResource.multiple = !0)\n : newProps.size && (nextResource.size = newProps.size);\n break;\n default:\n nextResource =\n \"string\" === typeof newProps.is\n ? ownerDocument.createElement(type, { is: newProps.is })\n : ownerDocument.createElement(type);\n }\n }\n nextResource[internalInstanceKey] = workInProgress;\n nextResource[internalPropsKey] = newProps;\n a: for (\n ownerDocument = workInProgress.child;\n null !== ownerDocument;\n\n ) {\n if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n nextResource.appendChild(ownerDocument.stateNode);\n else if (\n 4 !== ownerDocument.tag &&\n 27 !== ownerDocument.tag &&\n null !== ownerDocument.child\n ) {\n ownerDocument.child.return = ownerDocument;\n ownerDocument = ownerDocument.child;\n continue;\n }\n if (ownerDocument === workInProgress) break a;\n for (; null === ownerDocument.sibling; ) {\n if (\n null === ownerDocument.return ||\n ownerDocument.return === workInProgress\n )\n break a;\n ownerDocument = ownerDocument.return;\n }\n ownerDocument.sibling.return = ownerDocument.return;\n ownerDocument = ownerDocument.sibling;\n }\n workInProgress.stateNode = nextResource;\n a: switch (\n (setInitialProperties(nextResource, type, newProps), type)\n ) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n newProps = !!newProps.autoFocus;\n break a;\n case \"img\":\n newProps = !0;\n break a;\n default:\n newProps = !1;\n }\n newProps && markUpdate(workInProgress);\n }\n }\n bubbleProperties(workInProgress);\n workInProgress.subtreeFlags &= -33554433;\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n workInProgress.type,\n null === current ? null : current.memoizedProps,\n workInProgress.pendingProps,\n renderLanes\n );\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n throw Error(formatProdErrorMessage(166));\n current = rootInstanceStackCursor.current;\n if (popHydrationState(workInProgress)) {\n current = workInProgress.stateNode;\n renderLanes = workInProgress.memoizedProps;\n newProps = null;\n type = hydrationParentFiber;\n if (null !== type)\n switch (type.tag) {\n case 27:\n case 5:\n newProps = type.memoizedProps;\n }\n current[internalInstanceKey] = workInProgress;\n current =\n current.nodeValue === renderLanes ||\n (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n checkForUnmatchedText(current.nodeValue, renderLanes)\n ? !0\n : !1;\n current || throwOnHydrationMismatch(workInProgress, !0);\n } else\n (current =\n getOwnerDocumentFromRootContainer(current).createTextNode(\n newProps\n )),\n (current[internalInstanceKey] = workInProgress),\n (workInProgress.stateNode = current);\n }\n bubbleProperties(workInProgress);\n return null;\n case 31:\n renderLanes = workInProgress.memoizedState;\n if (null === current || null !== current.memoizedState) {\n newProps = popHydrationState(workInProgress);\n if (null !== renderLanes) {\n if (null === current) {\n if (!newProps) throw Error(formatProdErrorMessage(318));\n current = workInProgress.memoizedState;\n current = null !== current ? current.dehydrated : null;\n if (!current) throw Error(formatProdErrorMessage(557));\n current[internalInstanceKey] = workInProgress;\n } else\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4);\n bubbleProperties(workInProgress);\n current = !1;\n } else\n (renderLanes = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = renderLanes),\n (current = !0);\n if (!current) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n if (0 !== (workInProgress.flags & 128))\n throw Error(formatProdErrorMessage(558));\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n newProps = workInProgress.memoizedState;\n if (\n null === current ||\n (null !== current.memoizedState &&\n null !== current.memoizedState.dehydrated)\n ) {\n type = popHydrationState(workInProgress);\n if (null !== newProps && null !== newProps.dehydrated) {\n if (null === current) {\n if (!type) throw Error(formatProdErrorMessage(318));\n type = workInProgress.memoizedState;\n type = null !== type ? type.dehydrated : null;\n if (!type) throw Error(formatProdErrorMessage(317));\n type[internalInstanceKey] = workInProgress;\n } else\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (workInProgress.memoizedState = null),\n (workInProgress.flags |= 4);\n bubbleProperties(workInProgress);\n type = !1;\n } else\n (type = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = type),\n (type = !0);\n if (!type) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n }\n popSuspenseHandler(workInProgress);\n if (0 !== (workInProgress.flags & 128))\n return (workInProgress.lanes = renderLanes), workInProgress;\n renderLanes = null !== newProps;\n current = null !== current && null !== current.memoizedState;\n renderLanes &&\n ((newProps = workInProgress.child),\n (type = null),\n null !== newProps.alternate &&\n null !== newProps.alternate.memoizedState &&\n null !== newProps.alternate.memoizedState.cachePool &&\n (type = newProps.alternate.memoizedState.cachePool.pool),\n (nextResource = null),\n null !== newProps.memoizedState &&\n null !== newProps.memoizedState.cachePool &&\n (nextResource = newProps.memoizedState.cachePool.pool),\n nextResource !== type && (newProps.flags |= 2048));\n renderLanes !== current &&\n renderLanes &&\n (workInProgress.child.flags |= 8192);\n scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n bubbleProperties(workInProgress);\n return null;\n case 4:\n return (\n popHostContainer(),\n null === current &&\n listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n (workInProgress.flags |= 67108864),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n );\n case 19:\n popSuspenseListContext(workInProgress);\n newProps = workInProgress.memoizedState;\n if (null === newProps) return bubbleProperties(workInProgress), null;\n type = 0 !== (workInProgress.flags & 128);\n nextResource = newProps.rendering;\n if (null === nextResource)\n if (type) cutOffTailIfNeeded(newProps, !1);\n else {\n if (\n 0 !== workInProgressRootExitStatus ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n nextResource = findFirstSuspended(current);\n if (null !== nextResource) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(newProps, !1);\n current = nextResource.updateQueue;\n workInProgress.updateQueue = current;\n scheduleRetryEffect(workInProgress, current);\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (renderLanes = workInProgress.child; null !== renderLanes; )\n resetWorkInProgress(renderLanes, current),\n (renderLanes = renderLanes.sibling);\n pushSuspenseListContext(\n workInProgress,\n (suspenseStackCursor.current & 1) | 2\n );\n isHydrating &&\n pushTreeFork(workInProgress, newProps.treeForkCount);\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== newProps.tail &&\n now() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!type)\n if (\n ((current = findFirstSuspended(nextResource)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (type = !0),\n (current = current.updateQueue),\n (workInProgress.updateQueue = current),\n scheduleRetryEffect(workInProgress, current),\n cutOffTailIfNeeded(newProps, !0),\n null === newProps.tail &&\n \"collapsed\" !== newProps.tailMode &&\n \"visible\" !== newProps.tailMode &&\n !nextResource.alternate &&\n !isHydrating)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now() - newProps.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 536870912 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n newProps.isBackwards\n ? ((nextResource.sibling = workInProgress.child),\n (workInProgress.child = nextResource))\n : ((current = newProps.last),\n null !== current\n ? (current.sibling = nextResource)\n : (workInProgress.child = nextResource),\n (newProps.last = nextResource));\n }\n if (null !== newProps.tail) {\n current = newProps.tail;\n a: {\n for (renderLanes = current; null !== renderLanes; ) {\n if (null !== renderLanes.alternate) {\n renderLanes = !1;\n break a;\n }\n renderLanes = renderLanes.sibling;\n }\n renderLanes = !0;\n }\n newProps.rendering = current;\n newProps.tail = current.sibling;\n newProps.renderingStartTime = now();\n current.sibling = null;\n nextResource = suspenseStackCursor.current;\n nextResource = type ? (nextResource & 1) | 2 : nextResource & 1;\n \"visible\" === newProps.tailMode ||\n \"collapsed\" === newProps.tailMode ||\n !renderLanes ||\n isHydrating\n ? pushSuspenseListContext(workInProgress, nextResource)\n : ((renderLanes = nextResource),\n push(suspenseHandlerStackCursor, workInProgress),\n push(suspenseStackCursor, renderLanes),\n null === shellBoundary && (shellBoundary = workInProgress));\n isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount);\n return current;\n }\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(),\n (newProps = null !== workInProgress.memoizedState),\n null !== current\n ? (null !== current.memoizedState) !== newProps &&\n (workInProgress.flags |= 8192)\n : newProps && (workInProgress.flags |= 8192),\n newProps\n ? 0 !== (renderLanes & 536870912) &&\n 0 === (workInProgress.flags & 128) &&\n (bubbleProperties(workInProgress),\n workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n : bubbleProperties(workInProgress),\n (renderLanes = workInProgress.updateQueue),\n null !== renderLanes &&\n scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n (renderLanes = null),\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (renderLanes = current.memoizedState.cachePool.pool),\n (newProps = null),\n null !== workInProgress.memoizedState &&\n null !== workInProgress.memoizedState.cachePool &&\n (newProps = workInProgress.memoizedState.cachePool.pool),\n newProps !== renderLanes && (workInProgress.flags |= 2048),\n null !== current && pop(resumedCache),\n null\n );\n case 24:\n return (\n (renderLanes = null),\n null !== current && (renderLanes = current.memoizedState.cache),\n workInProgress.memoizedState.cache !== renderLanes &&\n (workInProgress.flags |= 2048),\n popProvider(CacheContext),\n bubbleProperties(workInProgress),\n null\n );\n case 25:\n return null;\n case 30:\n return (\n (workInProgress.flags |= 33554432),\n bubbleProperties(workInProgress),\n null\n );\n }\n throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 1:\n return (\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 3:\n return (\n popProvider(CacheContext),\n popHostContainer(),\n (current = workInProgress.flags),\n 0 !== (current & 65536) && 0 === (current & 128)\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 26:\n case 27:\n case 5:\n return popHostContext(workInProgress), null;\n case 31:\n if (null !== workInProgress.memoizedState) {\n popSuspenseHandler(workInProgress);\n if (null === workInProgress.alternate)\n throw Error(formatProdErrorMessage(340));\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null;\n case 13:\n popSuspenseHandler(workInProgress);\n current = workInProgress.memoizedState;\n if (null !== current && null !== current.dehydrated) {\n if (null === workInProgress.alternate)\n throw Error(formatProdErrorMessage(340));\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null;\n case 19:\n return (\n popSuspenseListContext(workInProgress),\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (current = workInProgress.memoizedState),\n null !== current &&\n ((current.rendering = null), (current.tail = null)),\n (workInProgress.flags |= 4),\n workInProgress)\n : null\n );\n case 4:\n return popHostContainer(), null;\n case 10:\n return popProvider(workInProgress.type), null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(),\n null !== current && pop(resumedCache),\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n : null\n );\n case 24:\n return popProvider(CacheContext), null;\n case 25:\n return null;\n default:\n return null;\n }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n popTreeContext(interruptedWork);\n switch (interruptedWork.tag) {\n case 3:\n popProvider(CacheContext);\n popHostContainer();\n break;\n case 26:\n case 27:\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer();\n break;\n case 31:\n null !== interruptedWork.memoizedState &&\n popSuspenseHandler(interruptedWork);\n break;\n case 13:\n popSuspenseHandler(interruptedWork);\n break;\n case 19:\n popSuspenseListContext(interruptedWork);\n break;\n case 10:\n popProvider(interruptedWork.type);\n break;\n case 22:\n case 23:\n popSuspenseHandler(interruptedWork);\n popHiddenContext();\n null !== current && pop(resumedCache);\n break;\n case 24:\n popProvider(CacheContext);\n }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n lastEffect = void 0;\n var create = updateQueue.create,\n inst = updateQueue.inst;\n lastEffect = create();\n inst.destroy = lastEffect;\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor$jscomp$0\n) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n var inst = updateQueue.inst,\n destroy = inst.destroy;\n if (void 0 !== destroy) {\n inst.destroy = void 0;\n lastEffect = finishedWork;\n var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n destroy_ = destroy;\n try {\n destroy_();\n } catch (error) {\n captureCommitPhaseError(\n lastEffect,\n nearestMountedAncestor,\n error\n );\n }\n }\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitClassCallbacks(finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n if (null !== updateQueue) {\n var instance = finishedWork.stateNode;\n try {\n commitCallbacks(updateQueue, instance);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\nfunction safelyCallComponentWillUnmount(\n current,\n nearestMountedAncestor,\n instance\n) {\n instance.props = resolveClassComponentProps(\n current.type,\n current.memoizedProps\n );\n instance.state = current.memoizedState;\n try {\n instance.componentWillUnmount();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n try {\n var ref = current.ref;\n if (null !== ref) {\n switch (current.tag) {\n case 26:\n case 27:\n case 5:\n var instanceToUse = current.stateNode;\n break;\n case 30:\n var instance = current.stateNode,\n name = getViewTransitionName(current.memoizedProps, instance);\n if (null === instance.ref || instance.ref.name !== name)\n instance.ref = createViewTransitionInstance(name);\n instanceToUse = instance.ref;\n break;\n case 7:\n if (null === current.stateNode) {\n var fragmentInstance = new FragmentInstance(current);\n traverseVisibleInstancesAndTextInstances(\n current.child,\n !1,\n addFragmentHandleToFiber,\n fragmentInstance,\n void 0,\n void 0\n );\n current.stateNode = fragmentInstance;\n }\n instanceToUse = current.stateNode;\n break;\n default:\n instanceToUse = current.stateNode;\n }\n \"function\" === typeof ref\n ? (current.refCleanup = ref(instanceToUse))\n : (ref.current = instanceToUse);\n }\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref,\n refCleanup = current.refCleanup;\n if (null !== ref)\n if (\"function\" === typeof refCleanup)\n try {\n refCleanup();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n } finally {\n (current.refCleanup = null),\n (current = current.alternate),\n null != current && (current.refCleanup = null);\n }\n else if (\"function\" === typeof ref)\n try {\n ref(null);\n } catch (error$148) {\n captureCommitPhaseError(current, nearestMountedAncestor, error$148);\n }\n else ref.current = null;\n}\nfunction commitNewChildToFragmentInstances(fiber, parentFragmentInstances) {\n if (\n (5 === fiber.tag || 27 === fiber.tag || 6 === fiber.tag) &&\n null === fiber.alternate &&\n null !== parentFragmentInstances\n )\n for (var i = 0; i < parentFragmentInstances.length; i++)\n commitNewChildToFragmentInstance(\n fiber.stateNode,\n parentFragmentInstances[i]\n );\n}\nfunction commitFragmentInstanceInsertionEffects(fiber) {\n for (var parent = fiber.return; null !== parent; ) {\n isFragmentInstanceParent(parent) &&\n commitNewChildToFragmentInstance(fiber.stateNode, parent.stateNode);\n if (isFragmentInstanceHostBoundary(parent)) break;\n parent = parent.return;\n }\n}\nfunction commitFragmentInstanceDeletionEffects(fiber) {\n for (var parent = fiber.return; null !== parent; ) {\n isFragmentInstanceParent(parent) &&\n deleteChildFromFragmentInstance(fiber.stateNode, parent.stateNode);\n if (isFragmentInstanceHostBoundary(parent)) break;\n parent = parent.return;\n }\n}\nfunction isFragmentInstanceHostBoundary(fiber) {\n return 5 === fiber.tag || 3 === fiber.tag || 27 === fiber.tag;\n}\nfunction isFragmentInstanceParent(fiber) {\n return fiber && 7 === fiber.tag && null !== fiber.stateNode;\n}\nfunction commitHostMount(finishedWork) {\n var type = finishedWork.type,\n props = finishedWork.memoizedProps,\n instance = finishedWork.stateNode;\n try {\n a: switch (type) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n props.autoFocus && instance.focus();\n break a;\n case \"img\":\n props.src\n ? (instance.src = props.src)\n : props.srcSet && (instance.srcset = props.srcSet);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n try {\n var domElement = finishedWork.stateNode;\n updateProperties(domElement, finishedWork.type, oldProps, newProps);\n domElement[internalPropsKey] = newProps;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction isHostParent(fiber) {\n return (\n 5 === fiber.tag ||\n 3 === fiber.tag ||\n 26 === fiber.tag ||\n (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n 4 === fiber.tag\n );\n}\nfunction getHostSibling(fiber) {\n a: for (;;) {\n for (; null === fiber.sibling; ) {\n if (null === fiber.return || isHostParent(fiber.return)) return null;\n fiber = fiber.return;\n }\n fiber.sibling.return = fiber.return;\n for (\n fiber = fiber.sibling;\n 5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n ) {\n if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n if (fiber.flags & 2) continue a;\n if (null === fiber.child || 4 === fiber.tag) continue a;\n else (fiber.child.return = fiber), (fiber = fiber.child);\n }\n if (!(fiber.flags & 2)) return fiber.stateNode;\n }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(\n node,\n before,\n parent,\n parentFragmentInstances\n) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (tag = node.stateNode),\n before\n ? (9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent\n ).insertBefore(tag, before)\n : ((before =\n 9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent),\n before.appendChild(tag),\n (parent = parent._reactRootContainer),\n (null !== parent && void 0 !== parent) ||\n null !== before.onclick ||\n (before.onclick = noop$1)),\n commitNewChildToFragmentInstances(node, parentFragmentInstances),\n (viewTransitionMutationContext = !0);\n else if (\n 4 !== tag &&\n (27 === tag &&\n (commitNewChildToFragmentInstances(node, parentFragmentInstances),\n (parentFragmentInstances = null),\n isSingletonScope(node.type) &&\n ((parent = node.stateNode), (before = null))),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNodeIntoContainer(\n node,\n before,\n parent,\n parentFragmentInstances\n ),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNodeIntoContainer(\n node,\n before,\n parent,\n parentFragmentInstances\n ),\n (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(\n node,\n before,\n parent,\n parentFragmentInstances\n) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (tag = node.stateNode),\n before ? parent.insertBefore(tag, before) : parent.appendChild(tag),\n commitNewChildToFragmentInstances(node, parentFragmentInstances),\n (viewTransitionMutationContext = !0);\n else if (\n 4 !== tag &&\n (27 === tag &&\n (commitNewChildToFragmentInstances(node, parentFragmentInstances),\n (parentFragmentInstances = null),\n isSingletonScope(node.type) && (parent = node.stateNode)),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNode(\n node,\n before,\n parent,\n parentFragmentInstances\n ),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNode(\n node,\n before,\n parent,\n parentFragmentInstances\n ),\n (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n var singleton = finishedWork.stateNode,\n props = finishedWork.memoizedProps;\n try {\n for (\n var type = finishedWork.type, attributes = singleton.attributes;\n attributes.length;\n\n )\n singleton.removeAttributeNode(attributes[0]);\n setInitialProperties(singleton, type, props);\n singleton[internalInstanceKey] = finishedWork;\n singleton[internalPropsKey] = props;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nvar shouldStartViewTransition = !1,\n appearingViewTransitions = null;\nfunction trackEnterViewTransitions(placement) {\n if (30 === placement.tag || 0 !== (placement.subtreeFlags & 33554432))\n shouldStartViewTransition = !0;\n}\nvar viewTransitionCancelableChildren = null;\nfunction pushViewTransitionCancelableScope() {\n var prevChildren = viewTransitionCancelableChildren;\n viewTransitionCancelableChildren = null;\n return prevChildren;\n}\nvar viewTransitionHostInstanceIdx = 0;\nfunction applyViewTransitionToHostInstances(\n fiber,\n name,\n className,\n collectMeasurements,\n stopAtNestedViewTransitions\n) {\n viewTransitionHostInstanceIdx = 0;\n return applyViewTransitionToHostInstancesRecursive(\n fiber.child,\n name,\n className,\n collectMeasurements,\n stopAtNestedViewTransitions\n );\n}\nfunction applyViewTransitionToHostInstancesRecursive(\n child,\n name,\n className,\n collectMeasurements,\n stopAtNestedViewTransitions\n) {\n for (var inViewport = !1; null !== child; ) {\n if (5 === child.tag) {\n var instance = child.stateNode;\n if (null !== collectMeasurements) {\n var measurement = measureInstance(instance);\n collectMeasurements.push(measurement);\n measurement.view && (inViewport = !0);\n } else\n inViewport || (measureInstance(instance).view && (inViewport = !0));\n shouldStartViewTransition = !0;\n applyViewTransitionName(\n instance,\n 0 === viewTransitionHostInstanceIdx\n ? name\n : name + \"_\" + viewTransitionHostInstanceIdx,\n className\n );\n viewTransitionHostInstanceIdx++;\n } else if (22 !== child.tag || null === child.memoizedState)\n (30 === child.tag && stopAtNestedViewTransitions) ||\n (applyViewTransitionToHostInstancesRecursive(\n child.child,\n name,\n className,\n collectMeasurements,\n stopAtNestedViewTransitions\n ) &&\n (inViewport = !0));\n child = child.sibling;\n }\n return inViewport;\n}\nfunction restoreViewTransitionOnHostInstances(\n child,\n stopAtNestedViewTransitions\n) {\n for (; null !== child; ) {\n if (5 === child.tag)\n restoreViewTransitionName(child.stateNode, child.memoizedProps);\n else if (22 !== child.tag || null === child.memoizedState)\n (30 === child.tag && stopAtNestedViewTransitions) ||\n restoreViewTransitionOnHostInstances(\n child.child,\n stopAtNestedViewTransitions\n );\n child = child.sibling;\n }\n}\nfunction commitAppearingPairViewTransitions(placement) {\n if (0 !== (placement.subtreeFlags & 18874368))\n for (placement = placement.child; null !== placement; ) {\n if (22 !== placement.tag || null === placement.memoizedState)\n if (\n (commitAppearingPairViewTransitions(placement),\n 30 === placement.tag &&\n 0 !== (placement.flags & 18874368) &&\n placement.stateNode.paired)\n ) {\n var props = placement.memoizedProps;\n if (null == props.name || \"auto\" === props.name)\n throw Error(formatProdErrorMessage(544));\n var name = props.name;\n props = getViewTransitionClassName(props.default, props.share);\n \"none\" !== props &&\n (applyViewTransitionToHostInstances(\n placement,\n name,\n props,\n null,\n !1\n ) ||\n restoreViewTransitionOnHostInstances(placement.child, !1));\n }\n placement = placement.sibling;\n }\n}\nfunction commitEnterViewTransitions(placement, gesture) {\n if (30 === placement.tag) {\n var state = placement.stateNode,\n props = placement.memoizedProps,\n name = getViewTransitionName(props, state),\n className = getViewTransitionClassName(\n props.default,\n state.paired ? props.share : props.enter\n );\n \"none\" !== className\n ? applyViewTransitionToHostInstances(placement, name, className, null, !1)\n ? (commitAppearingPairViewTransitions(placement),\n state.paired ||\n gesture ||\n scheduleViewTransitionEvent(placement, props.onEnter))\n : restoreViewTransitionOnHostInstances(placement.child, !1)\n : commitAppearingPairViewTransitions(placement);\n } else if (0 !== (placement.subtreeFlags & 33554432))\n for (placement = placement.child; null !== placement; )\n commitEnterViewTransitions(placement, gesture),\n (placement = placement.sibling);\n else commitAppearingPairViewTransitions(placement);\n}\nfunction commitDeletedPairViewTransitions(deletion) {\n if (\n null !== appearingViewTransitions &&\n 0 !== appearingViewTransitions.size\n ) {\n var pairs = appearingViewTransitions;\n if (0 !== (deletion.subtreeFlags & 18874368))\n for (deletion = deletion.child; null !== deletion; ) {\n if (22 !== deletion.tag || null === deletion.memoizedState) {\n if (30 === deletion.tag && 0 !== (deletion.flags & 18874368)) {\n var props = deletion.memoizedProps,\n name = props.name;\n if (null != name && \"auto\" !== name) {\n var pair = pairs.get(name);\n if (void 0 !== pair) {\n var className = getViewTransitionClassName(\n props.default,\n props.share\n );\n \"none\" !== className &&\n (applyViewTransitionToHostInstances(\n deletion,\n name,\n className,\n null,\n !1\n )\n ? ((className = deletion.stateNode),\n (pair.paired = className),\n (className.paired = pair),\n scheduleViewTransitionEvent(deletion, props.onShare))\n : restoreViewTransitionOnHostInstances(deletion.child, !1));\n pairs.delete(name);\n if (0 === pairs.size) break;\n }\n }\n }\n commitDeletedPairViewTransitions(deletion);\n }\n deletion = deletion.sibling;\n }\n }\n}\nfunction commitExitViewTransitions(deletion) {\n if (30 === deletion.tag) {\n var props = deletion.memoizedProps,\n name = getViewTransitionName(props, deletion.stateNode),\n pair =\n null !== appearingViewTransitions\n ? appearingViewTransitions.get(name)\n : void 0,\n className = getViewTransitionClassName(\n props.default,\n void 0 !== pair ? props.share : props.exit\n );\n \"none\" !== className &&\n (applyViewTransitionToHostInstances(deletion, name, className, null, !1)\n ? void 0 !== pair\n ? ((className = deletion.stateNode),\n (pair.paired = className),\n (className.paired = pair),\n appearingViewTransitions.delete(name),\n scheduleViewTransitionEvent(deletion, props.onShare))\n : scheduleViewTransitionEvent(deletion, props.onExit)\n : restoreViewTransitionOnHostInstances(deletion.child, !1));\n null !== appearingViewTransitions &&\n commitDeletedPairViewTransitions(deletion);\n } else if (0 !== (deletion.subtreeFlags & 33554432))\n for (deletion = deletion.child; null !== deletion; )\n commitExitViewTransitions(deletion), (deletion = deletion.sibling);\n else\n null !== appearingViewTransitions &&\n commitDeletedPairViewTransitions(deletion);\n}\nfunction commitNestedViewTransitions(changedParent) {\n for (changedParent = changedParent.child; null !== changedParent; ) {\n if (30 === changedParent.tag) {\n var props = changedParent.memoizedProps,\n name = getViewTransitionName(props, changedParent.stateNode);\n props = getViewTransitionClassName(props.default, props.update);\n changedParent.flags &= -5;\n \"none\" !== props &&\n applyViewTransitionToHostInstances(\n changedParent,\n name,\n props,\n (changedParent.memoizedState = []),\n !1\n );\n } else\n 0 !== (changedParent.subtreeFlags & 33554432) &&\n commitNestedViewTransitions(changedParent);\n changedParent = changedParent.sibling;\n }\n}\nfunction restorePairedViewTransitions(parent) {\n if (0 !== (parent.subtreeFlags & 18874368))\n for (parent = parent.child; null !== parent; ) {\n if (22 !== parent.tag || null === parent.memoizedState) {\n if (30 === parent.tag && 0 !== (parent.flags & 18874368)) {\n var instance = parent.stateNode;\n null !== instance.paired &&\n ((instance.paired = null),\n restoreViewTransitionOnHostInstances(parent.child, !1));\n }\n restorePairedViewTransitions(parent);\n }\n parent = parent.sibling;\n }\n}\nfunction restoreEnterOrExitViewTransitions(fiber) {\n if (30 === fiber.tag)\n (fiber.stateNode.paired = null),\n restoreViewTransitionOnHostInstances(fiber.child, !1),\n restorePairedViewTransitions(fiber);\n else if (0 !== (fiber.subtreeFlags & 33554432))\n for (fiber = fiber.child; null !== fiber; )\n restoreEnterOrExitViewTransitions(fiber), (fiber = fiber.sibling);\n else restorePairedViewTransitions(fiber);\n}\nfunction restoreNestedViewTransitions(changedParent) {\n for (changedParent = changedParent.child; null !== changedParent; )\n 30 === changedParent.tag\n ? restoreViewTransitionOnHostInstances(changedParent.child, !1)\n : 0 !== (changedParent.subtreeFlags & 33554432) &&\n restoreNestedViewTransitions(changedParent),\n (changedParent = changedParent.sibling);\n}\nfunction measureViewTransitionHostInstancesRecursive(\n parentViewTransition,\n child,\n newName,\n oldName,\n className,\n previousMeasurements,\n stopAtNestedViewTransitions\n) {\n for (var inViewport = !1; null !== child; ) {\n if (5 === child.tag) {\n var instance = child.stateNode;\n if (\n null !== previousMeasurements &&\n viewTransitionHostInstanceIdx < previousMeasurements.length\n ) {\n var previousMeasurement =\n previousMeasurements[viewTransitionHostInstanceIdx],\n nextMeasurement = measureInstance(instance);\n if (previousMeasurement.view || nextMeasurement.view) inViewport = !0;\n var JSCompiler_temp;\n if ((JSCompiler_temp = 0 === (parentViewTransition.flags & 4)))\n if (nextMeasurement.clip) JSCompiler_temp = !0;\n else {\n JSCompiler_temp = previousMeasurement.rect;\n var newRect = nextMeasurement.rect;\n JSCompiler_temp =\n JSCompiler_temp.y !== newRect.y ||\n JSCompiler_temp.x !== newRect.x ||\n JSCompiler_temp.height !== newRect.height ||\n JSCompiler_temp.width !== newRect.width;\n }\n JSCompiler_temp && (parentViewTransition.flags |= 4);\n nextMeasurement.abs\n ? (nextMeasurement = !previousMeasurement.abs)\n : ((previousMeasurement = previousMeasurement.rect),\n (nextMeasurement = nextMeasurement.rect),\n (nextMeasurement =\n previousMeasurement.height !== nextMeasurement.height ||\n previousMeasurement.width !== nextMeasurement.width));\n nextMeasurement && (parentViewTransition.flags |= 32);\n } else parentViewTransition.flags |= 32;\n 0 !== (parentViewTransition.flags & 4) &&\n applyViewTransitionName(\n instance,\n 0 === viewTransitionHostInstanceIdx\n ? newName\n : newName + \"_\" + viewTransitionHostInstanceIdx,\n className\n );\n (inViewport && 0 !== (parentViewTransition.flags & 4)) ||\n (null === viewTransitionCancelableChildren &&\n (viewTransitionCancelableChildren = []),\n viewTransitionCancelableChildren.push(\n instance,\n 0 === viewTransitionHostInstanceIdx\n ? oldName\n : oldName + \"_\" + viewTransitionHostInstanceIdx,\n child.memoizedProps\n ));\n viewTransitionHostInstanceIdx++;\n } else if (22 !== child.tag || null === child.memoizedState)\n 30 === child.tag && stopAtNestedViewTransitions\n ? (parentViewTransition.flags |= child.flags & 32)\n : measureViewTransitionHostInstancesRecursive(\n parentViewTransition,\n child.child,\n newName,\n oldName,\n className,\n previousMeasurements,\n stopAtNestedViewTransitions\n ) && (inViewport = !0);\n child = child.sibling;\n }\n return inViewport;\n}\nfunction measureNestedViewTransitions(changedParent, gesture) {\n for (changedParent = changedParent.child; null !== changedParent; ) {\n if (30 === changedParent.tag) {\n var props = changedParent.memoizedProps,\n state = changedParent.stateNode,\n name = getViewTransitionName(props, state),\n className = getViewTransitionClassName(props.default, props.update);\n if (gesture) {\n state = state.clones;\n var previousMeasurements =\n null === state ? null : state.map(measureClonedInstance);\n } else\n (previousMeasurements = changedParent.memoizedState),\n (changedParent.memoizedState = null);\n state = changedParent;\n var child = changedParent.child;\n viewTransitionHostInstanceIdx = 0;\n name = measureViewTransitionHostInstancesRecursive(\n state,\n child,\n name,\n name,\n className,\n previousMeasurements,\n !1\n );\n 0 !== (changedParent.flags & 4) &&\n name &&\n (gesture || scheduleViewTransitionEvent(changedParent, props.onUpdate));\n } else\n 0 !== (changedParent.subtreeFlags & 33554432) &&\n measureNestedViewTransitions(changedParent, gesture);\n changedParent = changedParent.sibling;\n }\n}\nvar offscreenSubtreeIsHidden = !1,\n offscreenSubtreeWasHidden = !1,\n offscreenDirectParentIsHidden = !1,\n needsFormReset = !1,\n PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null,\n viewTransitionContextChanged = !1,\n inUpdateViewTransition = !1,\n rootViewTransitionAffected = !1,\n rootViewTransitionNameCanceled = !1;\nfunction commitBeforeMutationEffects(root, firstChild, committedLanes) {\n root = root.containerInfo;\n eventsEnabled = _enabled;\n root = getActiveElementDeep(root);\n if (hasSelectionCapabilities(root)) {\n if (\"selectionStart\" in root)\n var JSCompiler_temp = {\n start: root.selectionStart,\n end: root.selectionEnd\n };\n else\n a: {\n JSCompiler_temp =\n ((JSCompiler_temp = root.ownerDocument) &&\n JSCompiler_temp.defaultView) ||\n window;\n var selection =\n JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n if (selection && 0 !== selection.rangeCount) {\n JSCompiler_temp = selection.anchorNode;\n var anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode;\n selection = selection.focusOffset;\n try {\n JSCompiler_temp.nodeType, focusNode.nodeType;\n } catch (e$21) {\n JSCompiler_temp = null;\n break a;\n }\n var length = 0,\n start = -1,\n end = -1,\n indexWithinAnchor = 0,\n indexWithinFocus = 0,\n node = root,\n parentNode = null;\n b: for (;;) {\n for (var next; ; ) {\n node !== JSCompiler_temp ||\n (0 !== anchorOffset && 3 !== node.nodeType) ||\n (start = length + anchorOffset);\n node !== focusNode ||\n (0 !== selection && 3 !== node.nodeType) ||\n (end = length + selection);\n 3 === node.nodeType && (length += node.nodeValue.length);\n if (null === (next = node.firstChild)) break;\n parentNode = node;\n node = next;\n }\n for (;;) {\n if (node === root) break b;\n parentNode === JSCompiler_temp &&\n ++indexWithinAnchor === anchorOffset &&\n (start = length);\n parentNode === focusNode &&\n ++indexWithinFocus === selection &&\n (end = length);\n if (null !== (next = node.nextSibling)) break;\n node = parentNode;\n parentNode = node.parentNode;\n }\n node = next;\n }\n JSCompiler_temp =\n -1 === start || -1 === end ? null : { start: start, end: end };\n } else JSCompiler_temp = null;\n }\n JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n } else JSCompiler_temp = null;\n selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n _enabled = !1;\n committedLanes = (committedLanes & 335544064) === committedLanes;\n nextEffect = firstChild;\n for (firstChild = committedLanes ? 9270 : 1024; null !== nextEffect; ) {\n root = nextEffect;\n if (\n committedLanes &&\n ((JSCompiler_temp = root.deletions), null !== JSCompiler_temp)\n )\n for (\n anchorOffset = 0;\n anchorOffset < JSCompiler_temp.length;\n anchorOffset++\n )\n committedLanes &&\n commitExitViewTransitions(JSCompiler_temp[anchorOffset]);\n if (null === root.alternate && 0 !== (root.flags & 2))\n committedLanes && trackEnterViewTransitions(root),\n commitBeforeMutationEffects_complete(committedLanes);\n else {\n if (22 === root.tag)\n if (((JSCompiler_temp = root.alternate), null !== root.memoizedState)) {\n null !== JSCompiler_temp &&\n null === JSCompiler_temp.memoizedState &&\n committedLanes &&\n commitExitViewTransitions(JSCompiler_temp);\n commitBeforeMutationEffects_complete(committedLanes);\n continue;\n } else if (\n null !== JSCompiler_temp &&\n null !== JSCompiler_temp.memoizedState\n ) {\n committedLanes && trackEnterViewTransitions(root);\n commitBeforeMutationEffects_complete(committedLanes);\n continue;\n }\n JSCompiler_temp = root.child;\n 0 !== (root.subtreeFlags & firstChild) && null !== JSCompiler_temp\n ? ((JSCompiler_temp.return = root), (nextEffect = JSCompiler_temp))\n : (committedLanes && commitNestedViewTransitions(root),\n commitBeforeMutationEffects_complete(committedLanes));\n }\n }\n appearingViewTransitions = null;\n}\nfunction commitBeforeMutationEffects_complete(\n isViewTransitionEligible$jscomp$0\n) {\n for (; null !== nextEffect; ) {\n var fiber = nextEffect,\n isViewTransitionEligible = isViewTransitionEligible$jscomp$0,\n current = fiber.alternate,\n flags = fiber.flags;\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n break;\n case 1:\n if (0 !== (flags & 1024) && null !== current) {\n isViewTransitionEligible = void 0;\n flags = current.memoizedProps;\n current = current.memoizedState;\n var instance = fiber.stateNode;\n try {\n var resolvedPrevProps = resolveClassComponentProps(\n fiber.type,\n flags\n );\n isViewTransitionEligible = instance.getSnapshotBeforeUpdate(\n resolvedPrevProps,\n current\n );\n instance.__reactInternalSnapshotBeforeUpdate =\n isViewTransitionEligible;\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n }\n break;\n case 3:\n if (0 !== (flags & 1024))\n if (\n ((current = fiber.stateNode.containerInfo),\n (isViewTransitionEligible = current.nodeType),\n 9 === isViewTransitionEligible)\n )\n clearContainerSparingly(current);\n else if (1 === isViewTransitionEligible)\n switch (current.nodeName) {\n case \"HEAD\":\n case \"HTML\":\n case \"BODY\":\n clearContainerSparingly(current);\n break;\n default:\n current.textContent = \"\";\n }\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n case 30:\n isViewTransitionEligible &&\n null !== current &&\n ((isViewTransitionEligible = getViewTransitionName(\n current.memoizedProps,\n current.stateNode\n )),\n (flags = fiber.memoizedProps),\n (flags = getViewTransitionClassName(flags.default, flags.update)),\n \"none\" !== flags &&\n applyViewTransitionToHostInstances(\n current,\n isViewTransitionEligible,\n flags,\n (current.memoizedState = []),\n !0\n ));\n break;\n default:\n if (0 !== (flags & 1024)) throw Error(formatProdErrorMessage(163));\n }\n current = fiber.sibling;\n if (null !== current) {\n current.return = fiber.return;\n nextEffect = current;\n break;\n }\n nextEffect = fiber.return;\n }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitHookEffectListMount(5, finishedWork);\n break;\n case 1:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (flags & 4)\n if (((finishedRoot = finishedWork.stateNode), null === current))\n try {\n finishedRoot.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n else {\n var prevProps = resolveClassComponentProps(\n finishedWork.type,\n current.memoizedProps\n );\n current = current.memoizedState;\n try {\n finishedRoot.componentDidUpdate(\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n );\n } catch (error$146) {\n captureCommitPhaseError(\n finishedWork,\n finishedWork.return,\n error$146\n );\n }\n }\n flags & 64 && commitClassCallbacks(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 3:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (\n flags & 64 &&\n ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n ) {\n current = null;\n if (null !== finishedWork.child)\n switch (finishedWork.child.tag) {\n case 27:\n case 5:\n current = finishedWork.child.stateNode;\n break;\n case 1:\n current = finishedWork.child.stateNode;\n }\n try {\n commitCallbacks(finishedRoot, current);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 27:\n null === current &&\n flags & 4 &&\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n null === current && flags & 4 && commitHostMount(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n break;\n case 31:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n flags & 64 &&\n ((finishedRoot = finishedWork.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated),\n null !== finishedRoot &&\n ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n null,\n finishedWork\n )),\n registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n break;\n case 22:\n flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n if (!flags) {\n var newOffscreenSubtreeWasHidden =\n (null !== current && null !== current.memoizedState) ||\n offscreenSubtreeWasHidden;\n current = offscreenSubtreeIsHidden;\n prevProps = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = flags;\n (offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden) && !prevProps\n ? ((flags = 2),\n 0 !== (finishedWork.subtreeFlags & 8772) && (flags |= 1),\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n flags\n ))\n : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n offscreenSubtreeIsHidden = current;\n offscreenSubtreeWasHidden = prevProps;\n }\n break;\n case 30:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 7:\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n default:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n}\nfunction hideOrUnhideAllChildren(parentFiber, isHidden) {\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n hideOrUnhideAllChildrenOnFiber(parentFiber, isHidden),\n (parentFiber = parentFiber.sibling);\n}\nfunction hideOrUnhideAllChildrenOnFiber(fiber, isHidden) {\n switch (fiber.tag) {\n case 5:\n case 26:\n try {\n var instance = fiber.stateNode;\n if (isHidden) {\n var style = instance.style;\n \"function\" === typeof style.setProperty\n ? style.setProperty(\"display\", \"none\", \"important\")\n : (style.display = \"none\");\n } else {\n var instance$jscomp$0 = fiber.stateNode,\n styleProp = fiber.memoizedProps.style,\n display =\n void 0 !== styleProp &&\n null !== styleProp &&\n styleProp.hasOwnProperty(\"display\")\n ? styleProp.display\n : null;\n instance$jscomp$0.style.display =\n null == display || \"boolean\" === typeof display\n ? \"\"\n : (\"\" + display).trim();\n }\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n hideOrUnhideNearestPortals(fiber, isHidden);\n break;\n case 6:\n try {\n (fiber.stateNode.nodeValue = isHidden ? \"\" : fiber.memoizedProps),\n (viewTransitionMutationContext = !0);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n break;\n case 18:\n try {\n var instance$jscomp$1 = fiber.stateNode;\n isHidden\n ? hideOrUnhideDehydratedBoundary(instance$jscomp$1, !0)\n : hideOrUnhideDehydratedBoundary(fiber.stateNode, !1);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n break;\n case 22:\n case 23:\n null === fiber.memoizedState && hideOrUnhideAllChildren(fiber, isHidden);\n break;\n default:\n hideOrUnhideAllChildren(fiber, isHidden);\n }\n}\nfunction hideOrUnhideNearestPortals(parentFiber, isHidden$jscomp$0) {\n if (parentFiber.subtreeFlags & 67108864)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n a: {\n var fiber = parentFiber,\n isHidden = isHidden$jscomp$0;\n switch (fiber.tag) {\n case 4:\n hideOrUnhideAllChildrenOnFiber(fiber, isHidden);\n break a;\n case 22:\n null === fiber.memoizedState &&\n hideOrUnhideNearestPortals(fiber, isHidden);\n break a;\n default:\n hideOrUnhideNearestPortals(fiber, isHidden);\n }\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n 5 === fiber.tag &&\n ((alternate = fiber.stateNode),\n null !== alternate && detachDeletedInstance(alternate));\n fiber.stateNode = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n}\nvar hostParent = null,\n hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n parent\n) {\n for (parent = parent.child; null !== parent; )\n commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n) {\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n try {\n injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n } catch (err) {}\n switch (deletedFiber.tag) {\n case 26:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n deletedFiber.memoizedState\n ? deletedFiber.memoizedState.count--\n : deletedFiber.stateNode &&\n !offscreenSubtreeWasHidden &&\n ((deletedFiber = deletedFiber.stateNode),\n deletedFiber.parentNode.removeChild(deletedFiber));\n break;\n case 27:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n commitFragmentInstanceDeletionEffects(deletedFiber);\n var prevHostParent = hostParent,\n prevHostParentIsContainer = hostParentIsContainer;\n isSingletonScope(deletedFiber.type) &&\n ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n releaseSingletonInstance(\n deletedFiber.stateNode,\n deletedFiber.type,\n deletedFiber.memoizedProps\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 5:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor),\n commitFragmentInstanceDeletionEffects(deletedFiber);\n case 6:\n 6 === deletedFiber.tag &&\n commitFragmentInstanceDeletionEffects(deletedFiber);\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n if (null !== hostParent)\n if (hostParentIsContainer)\n try {\n (9 === hostParent.nodeType\n ? hostParent.body\n : \"HTML\" === hostParent.nodeName\n ? hostParent.ownerDocument.body\n : hostParent\n ).removeChild(deletedFiber.stateNode),\n (viewTransitionMutationContext = !0);\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n else\n try {\n hostParent.removeChild(deletedFiber.stateNode),\n (viewTransitionMutationContext = !0);\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n break;\n case 18:\n null !== hostParent &&\n (hostParentIsContainer\n ? ((finishedRoot = hostParent),\n clearHydrationBoundary(\n 9 === finishedRoot.nodeType\n ? finishedRoot.body\n : \"HTML\" === finishedRoot.nodeName\n ? finishedRoot.ownerDocument.body\n : finishedRoot,\n deletedFiber.stateNode\n ),\n retryIfBlockedOn(finishedRoot))\n : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n break;\n case 4:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = !0;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n offscreenSubtreeWasHidden ||\n commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 1:\n offscreenSubtreeWasHidden ||\n (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n (prevHostParent = deletedFiber.stateNode),\n \"function\" === typeof prevHostParent.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n deletedFiber,\n nearestMountedAncestor,\n prevHostParent\n ));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 21:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 22:\n offscreenSubtreeWasHidden =\n (prevHostParent = offscreenSubtreeWasHidden) ||\n null !== deletedFiber.memoizedState;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n offscreenSubtreeWasHidden = prevHostParent;\n break;\n case 30:\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 7:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n default:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n ) {\n finishedRoot = finishedRoot.dehydrated;\n try {\n retryIfBlockedOn(finishedRoot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n )\n try {\n retryIfBlockedOn(finishedRoot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\nfunction getRetryCache(finishedWork) {\n switch (finishedWork.tag) {\n case 31:\n case 13:\n case 19:\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n return retryCache;\n case 22:\n return (\n (finishedWork = finishedWork.stateNode),\n (retryCache = finishedWork._retryCache),\n null === retryCache &&\n (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n retryCache\n );\n default:\n throw Error(formatProdErrorMessage(435, finishedWork.tag));\n }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n var retryCache = getRetryCache(finishedWork);\n wakeables.forEach(function (wakeable) {\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n wakeable.then(retry, retry);\n }\n });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber, lanes) {\n var deletions = parentFiber.deletions;\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i],\n root = root$jscomp$0,\n returnFiber = parentFiber,\n parent = returnFiber;\n a: for (; null !== parent; ) {\n switch (parent.tag) {\n case 27:\n if (isSingletonScope(parent.type)) {\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n }\n break;\n case 5:\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n case 3:\n case 4:\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = !0;\n break a;\n }\n parent = parent.return;\n }\n if (null === hostParent) throw Error(formatProdErrorMessage(160));\n commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n hostParent = null;\n hostParentIsContainer = !1;\n root = childToDelete.alternate;\n null !== root && (root.return = null);\n childToDelete.return = null;\n }\n if (parentFiber.subtreeFlags & 13886)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitMutationEffectsOnFiber(parentFiber, root$jscomp$0, lanes),\n (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root, lanes) {\n var current = finishedWork.alternate,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n if (\n flags & 4 &&\n ((current = finishedWork.updateQueue),\n (current = null !== current ? current.events : null),\n null !== current)\n )\n for (var ii = 0; ii < current.length; ii++) {\n var _eventPayloads$ii2 = current[ii];\n _eventPayloads$ii2.ref.impl = _eventPayloads$ii2.nextImpl;\n }\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n commitHookEffectListMount(3, finishedWork),\n commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n break;\n case 1:\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n flags & 64 &&\n offscreenSubtreeIsHidden &&\n ((finishedWork = finishedWork.updateQueue),\n null !== finishedWork &&\n ((root = finishedWork.callbacks),\n null !== root &&\n ((lanes = finishedWork.shared.hiddenCallbacks),\n (finishedWork.shared.hiddenCallbacks =\n null === lanes ? root : lanes.concat(root)))));\n break;\n case 26:\n ii = currentHoistableRoot;\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (flags & 4)\n if (\n ((flags = null !== current ? current.memoizedState : null),\n (lanes = finishedWork.memoizedState),\n null === current)\n )\n if (null === lanes)\n if (null === finishedWork.stateNode)\n if (offscreenSubtreeIsHidden)\n finishedWork.stateNode = createHoistableInstance(\n finishedWork.type,\n finishedWork.memoizedProps,\n root.containerInfo,\n finishedWork\n );\n else {\n a: {\n root = finishedWork.type;\n lanes = finishedWork.memoizedProps;\n flags = ii.ownerDocument || ii;\n b: switch (root) {\n case \"title\":\n current = flags.getElementsByTagName(\"title\")[0];\n if (\n !current ||\n current[internalHoistableMarker] ||\n current[internalInstanceKey] ||\n \"http://www.w3.org/2000/svg\" === current.namespaceURI ||\n current.hasAttribute(\"itemprop\")\n )\n (current = flags.createElement(root)),\n flags.head.insertBefore(\n current,\n flags.querySelector(\"head > title\")\n );\n setInitialProperties(current, root, lanes);\n current[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(current);\n root = current;\n break a;\n case \"link\":\n if (\n (ii = getHydratableHoistableCache(\n \"link\",\n \"href\",\n flags\n ).get(root + (lanes.href || \"\")))\n )\n for (\n _eventPayloads$ii2 = 0;\n _eventPayloads$ii2 < ii.length;\n _eventPayloads$ii2++\n )\n if (\n ((current = ii[_eventPayloads$ii2]),\n current.getAttribute(\"href\") ===\n (null == lanes.href || \"\" === lanes.href\n ? null\n : lanes.href) &&\n current.getAttribute(\"rel\") ===\n (null == lanes.rel ? null : lanes.rel) &&\n current.getAttribute(\"title\") ===\n (null == lanes.title ? null : lanes.title) &&\n current.getAttribute(\"crossorigin\") ===\n (null == lanes.crossOrigin\n ? null\n : lanes.crossOrigin))\n ) {\n ii.splice(_eventPayloads$ii2, 1);\n break b;\n }\n current = flags.createElement(root);\n setInitialProperties(current, root, lanes);\n flags.head.appendChild(current);\n break;\n case \"meta\":\n if (\n (ii = getHydratableHoistableCache(\n \"meta\",\n \"content\",\n flags\n ).get(root + (lanes.content || \"\")))\n )\n for (\n _eventPayloads$ii2 = 0;\n _eventPayloads$ii2 < ii.length;\n _eventPayloads$ii2++\n )\n if (\n ((current = ii[_eventPayloads$ii2]),\n current.getAttribute(\"content\") ===\n (null == lanes.content\n ? null\n : \"\" + lanes.content) &&\n current.getAttribute(\"name\") ===\n (null == lanes.name ? null : lanes.name) &&\n current.getAttribute(\"property\") ===\n (null == lanes.property\n ? null\n : lanes.property) &&\n current.getAttribute(\"http-equiv\") ===\n (null == lanes.httpEquiv\n ? null\n : lanes.httpEquiv) &&\n current.getAttribute(\"charset\") ===\n (null == lanes.charSet ? null : lanes.charSet))\n ) {\n ii.splice(_eventPayloads$ii2, 1);\n break b;\n }\n current = flags.createElement(root);\n setInitialProperties(current, root, lanes);\n flags.head.appendChild(current);\n break;\n default:\n throw Error(formatProdErrorMessage(468, root));\n }\n current[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(current);\n root = current;\n }\n finishedWork.stateNode = root;\n }\n else\n offscreenSubtreeIsHidden ||\n mountHoistable(ii, finishedWork.type, finishedWork.stateNode);\n else\n finishedWork.stateNode = acquireResource(\n ii,\n lanes,\n finishedWork.memoizedProps\n );\n else\n flags !== lanes\n ? (null === flags\n ? ((root = current.stateNode),\n null === root ||\n offscreenSubtreeWasHidden ||\n root.parentNode.removeChild(root))\n : flags.count--,\n null === lanes\n ? offscreenSubtreeIsHidden ||\n mountHoistable(ii, finishedWork.type, finishedWork.stateNode)\n : acquireResource(ii, lanes, finishedWork.memoizedProps))\n : null === lanes &&\n null !== finishedWork.stateNode &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 27:\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n null !== current &&\n flags & 4 &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 5:\n ii = offscreenDirectParentIsHidden;\n offscreenDirectParentIsHidden = !1;\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n offscreenDirectParentIsHidden = ii;\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (finishedWork.flags & 32) {\n root = finishedWork.stateNode;\n try {\n setTextContent(root, \"\"), (viewTransitionMutationContext = !0);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n flags & 4 &&\n null != finishedWork.stateNode &&\n ((root = finishedWork.memoizedProps),\n commitHostUpdate(\n finishedWork,\n root,\n null !== current ? current.memoizedProps : root\n ));\n flags & 1024 && (needsFormReset = !0);\n break;\n case 6:\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n if (flags & 4) {\n if (null === finishedWork.stateNode)\n throw Error(formatProdErrorMessage(162));\n root = finishedWork.memoizedProps;\n lanes = finishedWork.stateNode;\n try {\n (lanes.nodeValue = root), (viewTransitionMutationContext = !0);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 3:\n viewTransitionMutationContext = !1;\n tagCaches = null;\n ii = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(root.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n currentHoistableRoot = ii;\n commitReconciliationEffects(finishedWork);\n if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n try {\n retryIfBlockedOn(root.containerInfo);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n needsFormReset &&\n ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n viewTransitionMutationContext = !1;\n break;\n case 4:\n flags = offscreenDirectParentIsHidden;\n offscreenDirectParentIsHidden = offscreenSubtreeIsHidden;\n current = pushMutationContext();\n ii = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n finishedWork.stateNode.containerInfo\n );\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n currentHoistableRoot = ii;\n viewTransitionMutationContext &&\n inUpdateViewTransition &&\n (rootViewTransitionAffected = !0);\n viewTransitionMutationContext = current;\n offscreenDirectParentIsHidden = flags;\n break;\n case 12:\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n break;\n case 31:\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((root = finishedWork.updateQueue),\n null !== root &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, root)));\n break;\n case 13:\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n finishedWork.child.flags & 8192 &&\n (null !== finishedWork.memoizedState) !==\n (null !== current && null !== current.memoizedState) &&\n (globalMostRecentFallbackTime = now());\n flags & 4 &&\n ((root = finishedWork.updateQueue),\n null !== root &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, root)));\n break;\n case 22:\n ii = null !== finishedWork.memoizedState;\n _eventPayloads$ii2 = null !== current && null !== current.memoizedState;\n var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden,\n prevOffscreenDirectParentIsHidden$166 = offscreenDirectParentIsHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || ii;\n offscreenDirectParentIsHidden =\n prevOffscreenDirectParentIsHidden$166 || ii;\n offscreenSubtreeWasHidden =\n prevOffscreenSubtreeWasHidden || _eventPayloads$ii2;\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n offscreenDirectParentIsHidden = prevOffscreenDirectParentIsHidden$166;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n commitReconciliationEffects(finishedWork);\n flags & 8192 &&\n ((root = finishedWork.stateNode),\n (root._visibility = ii ? root._visibility & -2 : root._visibility | 1),\n !ii ||\n null === current ||\n _eventPayloads$ii2 ||\n offscreenSubtreeIsHidden ||\n offscreenSubtreeWasHidden ||\n ((root = _eventPayloads$ii2 || offscreenSubtreeWasHidden),\n (lanes = offscreenSubtreeIsHidden),\n (current = offscreenSubtreeWasHidden),\n (offscreenSubtreeIsHidden = ii || offscreenSubtreeIsHidden),\n (offscreenSubtreeWasHidden = root),\n recursivelyTraverseDisappearLayoutEffects(finishedWork, 2),\n (offscreenSubtreeIsHidden = lanes),\n (offscreenSubtreeWasHidden = current)),\n (!ii && offscreenDirectParentIsHidden) ||\n hideOrUnhideAllChildren(finishedWork, ii));\n flags & 4 &&\n ((root = finishedWork.updateQueue),\n null !== root &&\n ((lanes = root.retryQueue),\n null !== lanes &&\n ((root.retryQueue = null),\n attachSuspenseRetryListeners(finishedWork, lanes))));\n break;\n case 19:\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((root = finishedWork.updateQueue),\n null !== root &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, root)));\n break;\n case 30:\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n flags = pushMutationContext();\n ii = inUpdateViewTransition;\n _eventPayloads$ii2 = (lanes & 335544064) === lanes;\n prevOffscreenSubtreeIsHidden = finishedWork.memoizedProps;\n inUpdateViewTransition =\n _eventPayloads$ii2 &&\n \"none\" !==\n getViewTransitionClassName(\n prevOffscreenSubtreeIsHidden.default,\n prevOffscreenSubtreeIsHidden.update\n );\n recursivelyTraverseMutationEffects(root, finishedWork, lanes);\n commitReconciliationEffects(finishedWork);\n _eventPayloads$ii2 &&\n null !== current &&\n viewTransitionMutationContext &&\n (finishedWork.flags |= 4);\n inUpdateViewTransition = ii;\n viewTransitionMutationContext = flags;\n break;\n case 21:\n break;\n case 7:\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return)),\n current &&\n null !== current.stateNode &&\n (current.stateNode._fragmentFiber = finishedWork);\n default:\n recursivelyTraverseMutationEffects(root, finishedWork, lanes),\n commitReconciliationEffects(finishedWork);\n }\n}\nfunction commitReconciliationEffects(finishedWork) {\n var flags = finishedWork.flags;\n if (flags & 2) {\n try {\n for (\n var hostParentFiber, parentFiber = finishedWork.return;\n null !== parentFiber;\n\n ) {\n if (isHostParent(parentFiber)) {\n hostParentFiber = parentFiber;\n break;\n }\n parentFiber = parentFiber.return;\n }\n parentFiber = null;\n for (var parent = finishedWork.return; null !== parent; ) {\n if (isFragmentInstanceParent(parent)) {\n var fragmentInstance = parent.stateNode;\n null === parentFiber\n ? (parentFiber = [fragmentInstance])\n : parentFiber.push(fragmentInstance);\n }\n if (isFragmentInstanceHostBoundary(parent)) break;\n parent = parent.return;\n }\n var JSCompiler_inline_result = parentFiber;\n if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n switch (hostParentFiber.tag) {\n case 27:\n var parent$jscomp$0 = hostParentFiber.stateNode,\n before = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(\n finishedWork,\n before,\n parent$jscomp$0,\n JSCompiler_inline_result\n );\n break;\n case 5:\n var parent$149 = hostParentFiber.stateNode;\n hostParentFiber.flags & 32 &&\n (setTextContent(parent$149, \"\"), (hostParentFiber.flags &= -33));\n var before$150 = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(\n finishedWork,\n before$150,\n parent$149,\n JSCompiler_inline_result\n );\n break;\n case 3:\n case 4:\n var parent$151 = hostParentFiber.stateNode.containerInfo,\n before$152 = getHostSibling(finishedWork);\n insertOrAppendPlacementNodeIntoContainer(\n finishedWork,\n before$152,\n parent$151,\n JSCompiler_inline_result\n );\n break;\n default:\n throw Error(formatProdErrorMessage(161));\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n finishedWork.flags &= -3;\n }\n flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n if (parentFiber.subtreeFlags & 1024)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var fiber = parentFiber;\n recursivelyResetForms(fiber);\n 5 === fiber.tag &&\n fiber.flags & 1024 &&\n ((fiber = fiber.stateNode),\n (_enabled = !0),\n fiber.reset(),\n (_enabled = !1));\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseAfterMutationEffects(root, parentFiber) {\n if (parentFiber.subtreeFlags & 9270)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitAfterMutationEffectsOnFiber(parentFiber, root),\n (parentFiber = parentFiber.sibling);\n else measureNestedViewTransitions(parentFiber, !1);\n}\nfunction commitAfterMutationEffectsOnFiber(finishedWork, root) {\n var current = finishedWork.alternate;\n if (null === current) commitEnterViewTransitions(finishedWork, !1);\n else\n switch (finishedWork.tag) {\n case 3:\n rootViewTransitionNameCanceled = viewTransitionContextChanged = !1;\n pushViewTransitionCancelableScope();\n recursivelyTraverseAfterMutationEffects(root, finishedWork);\n if (!viewTransitionContextChanged && !rootViewTransitionAffected) {\n finishedWork = viewTransitionCancelableChildren;\n if (null !== finishedWork)\n for (var i = 0; i < finishedWork.length; i += 3) {\n current = finishedWork[i];\n var oldName = finishedWork[i + 1];\n restoreViewTransitionName(current, finishedWork[i + 2]);\n current = current.ownerDocument.documentElement;\n null !== current &&\n current.animate(\n { opacity: [0, 0], pointerEvents: [\"none\", \"none\"] },\n {\n duration: 0,\n fill: \"forwards\",\n pseudoElement: \"::view-transition-group(\" + oldName + \")\"\n }\n );\n }\n finishedWork = root.containerInfo;\n finishedWork =\n 9 === finishedWork.nodeType\n ? finishedWork.documentElement\n : finishedWork.ownerDocument.documentElement;\n null !== finishedWork &&\n \"\" === finishedWork.style.viewTransitionName &&\n ((finishedWork.style.viewTransitionName = \"none\"),\n finishedWork.animate(\n { opacity: [0, 0], pointerEvents: [\"none\", \"none\"] },\n {\n duration: 0,\n fill: \"forwards\",\n pseudoElement: \"::view-transition-group(root)\"\n }\n ),\n finishedWork.animate(\n { width: [0, 0], height: [0, 0] },\n {\n duration: 0,\n fill: \"forwards\",\n pseudoElement: \"::view-transition\"\n }\n ));\n rootViewTransitionNameCanceled = !0;\n }\n viewTransitionCancelableChildren = null;\n break;\n case 5:\n recursivelyTraverseAfterMutationEffects(root, finishedWork);\n break;\n case 4:\n i = viewTransitionContextChanged;\n viewTransitionContextChanged = !1;\n recursivelyTraverseAfterMutationEffects(root, finishedWork);\n viewTransitionContextChanged && (rootViewTransitionAffected = !0);\n viewTransitionContextChanged = i;\n break;\n case 22:\n null === finishedWork.memoizedState &&\n (null !== current.memoizedState\n ? commitEnterViewTransitions(finishedWork, !1)\n : recursivelyTraverseAfterMutationEffects(root, finishedWork));\n break;\n case 30:\n i = viewTransitionContextChanged;\n oldName = pushViewTransitionCancelableScope();\n viewTransitionContextChanged = !1;\n recursivelyTraverseAfterMutationEffects(root, finishedWork);\n viewTransitionContextChanged && (finishedWork.flags |= 4);\n var props = finishedWork.memoizedProps,\n state = finishedWork.stateNode;\n root = getViewTransitionName(props, state);\n state = getViewTransitionName(current.memoizedProps, state);\n var className = getViewTransitionClassName(props.default, props.update);\n \"none\" === className\n ? (root = !1)\n : ((props = current.memoizedState),\n (current.memoizedState = null),\n (current = finishedWork.child),\n (viewTransitionHostInstanceIdx = 0),\n (root = measureViewTransitionHostInstancesRecursive(\n finishedWork,\n current,\n root,\n state,\n className,\n props,\n !0\n )),\n viewTransitionHostInstanceIdx !==\n (null === props ? 0 : props.length) &&\n (finishedWork.flags |= 32));\n 0 !== (finishedWork.flags & 4) && root\n ? (scheduleViewTransitionEvent(\n finishedWork,\n finishedWork.memoizedProps.onUpdate\n ),\n (viewTransitionCancelableChildren = oldName))\n : null !== oldName &&\n (oldName.push.apply(oldName, viewTransitionCancelableChildren),\n (viewTransitionCancelableChildren = oldName));\n viewTransitionContextChanged = 0 !== (finishedWork.flags & 32) ? !0 : i;\n break;\n default:\n recursivelyTraverseAfterMutationEffects(root, finishedWork);\n }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n if (parentFiber.subtreeFlags & 8772)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(\n parentFiber,\n layoutEffectTraversalFlags$jscomp$0\n) {\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedWork = parentFiber,\n layoutEffectTraversalFlags = layoutEffectTraversalFlags$jscomp$0;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(\n finishedWork,\n layoutEffectTraversalFlags\n );\n break;\n case 1:\n safelyDetachRef(finishedWork, finishedWork.return);\n var instance = finishedWork.stateNode;\n \"function\" === typeof instance.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n finishedWork,\n finishedWork.return,\n instance\n );\n recursivelyTraverseDisappearLayoutEffects(\n finishedWork,\n layoutEffectTraversalFlags\n );\n break;\n case 27:\n 0 !== (layoutEffectTraversalFlags & 2) &&\n releaseSingletonInstance(\n finishedWork.stateNode,\n finishedWork.type,\n finishedWork.memoizedProps\n );\n case 5:\n safelyDetachRef(finishedWork, finishedWork.return);\n (5 !== finishedWork.tag && 27 !== finishedWork.tag) ||\n commitFragmentInstanceDeletionEffects(finishedWork);\n recursivelyTraverseDisappearLayoutEffects(\n finishedWork,\n layoutEffectTraversalFlags\n );\n break;\n case 6:\n commitFragmentInstanceDeletionEffects(finishedWork);\n break;\n case 26:\n safelyDetachRef(finishedWork, finishedWork.return);\n instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState ||\n null === instance ||\n offscreenSubtreeWasHidden ||\n instance.parentNode.removeChild(instance);\n recursivelyTraverseDisappearLayoutEffects(\n finishedWork,\n layoutEffectTraversalFlags\n );\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseDisappearLayoutEffects(\n finishedWork,\n layoutEffectTraversalFlags\n );\n break;\n case 30:\n safelyDetachRef(finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(\n finishedWork,\n layoutEffectTraversalFlags\n );\n break;\n case 7:\n safelyDetachRef(finishedWork, finishedWork.return);\n default:\n recursivelyTraverseDisappearLayoutEffects(\n finishedWork,\n layoutEffectTraversalFlags\n );\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n finishedRoot$jscomp$0,\n parentFiber,\n layoutEffectTraversalFlags\n) {\n layoutEffectTraversalFlags =\n 0 !== (parentFiber.subtreeFlags & 8772)\n ? layoutEffectTraversalFlags\n : layoutEffectTraversalFlags & -2;\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var current = parentFiber.alternate,\n finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags,\n includeWorkInProgressEffects = 0 !== (layoutEffectTraversalFlags & 1);\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n commitHookEffectListMount(4, finishedWork);\n break;\n case 1:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n current = finishedWork;\n finishedRoot = current.stateNode;\n if (\"function\" === typeof finishedRoot.componentDidMount)\n try {\n finishedRoot.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(current, current.return, error);\n }\n current = finishedWork;\n finishedRoot = current.updateQueue;\n if (null !== finishedRoot) {\n var instance = current.stateNode;\n try {\n var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n if (null !== hiddenCallbacks)\n for (\n finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n finishedRoot < hiddenCallbacks.length;\n finishedRoot++\n )\n callCallback(hiddenCallbacks[finishedRoot], instance);\n } catch (error) {\n captureCommitPhaseError(current, current.return, error);\n }\n }\n includeWorkInProgressEffects &&\n flags & 64 &&\n commitClassCallbacks(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 27:\n 0 !== (layoutEffectTraversalFlags & 2) &&\n commitHostSingletonAcquisition(finishedWork);\n case 5:\n (5 !== finishedWork.tag && 27 !== finishedWork.tag) ||\n commitFragmentInstanceInsertionEffects(finishedWork);\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n includeWorkInProgressEffects &&\n null === current &&\n flags & 4 &&\n commitHostMount(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 6:\n commitFragmentInstanceInsertionEffects(finishedWork);\n break;\n case 26:\n instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState ||\n null === instance ||\n offscreenSubtreeIsHidden ||\n mountHoistable(\n getHoistableRoot(instance.ownerDocument),\n finishedWork.type,\n instance\n );\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n includeWorkInProgressEffects &&\n null === current &&\n flags & 4 &&\n commitHostMount(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n break;\n case 31:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 30:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 7:\n safelyAttachRef(finishedWork, finishedWork.return);\n default:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n layoutEffectTraversalFlags\n );\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n var previousCache = null;\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (previousCache = current.memoizedState.cachePool.pool);\n current = null;\n null !== finishedWork.memoizedState &&\n null !== finishedWork.memoizedState.cachePool &&\n (current = finishedWork.memoizedState.cachePool.pool);\n current !== previousCache &&\n (null != current && current.refCount++,\n null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n current = null;\n null !== finishedWork.alternate &&\n (current = finishedWork.alternate.memoizedState.cache);\n finishedWork = finishedWork.memoizedState.cache;\n finishedWork !== current &&\n (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n) {\n var isViewTransitionEligible =\n (committedLanes & 335544064) === committedLanes;\n if (parentFiber.subtreeFlags & (isViewTransitionEligible ? 10262 : 10256))\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveMountOnFiber(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ),\n (parentFiber = parentFiber.sibling);\n else isViewTransitionEligible && restoreNestedViewTransitions(parentFiber);\n}\nfunction commitPassiveMountOnFiber(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n) {\n var isViewTransitionEligible =\n (committedLanes & 335544064) === committedLanes;\n isViewTransitionEligible &&\n null === finishedWork.alternate &&\n null !== finishedWork.return &&\n null !== finishedWork.return.alternate &&\n restoreEnterOrExitViewTransitions(finishedWork);\n var flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 && commitHookEffectListMount(9, finishedWork);\n break;\n case 1:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 3:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n isViewTransitionEligible &&\n rootViewTransitionNameCanceled &&\n ((finishedRoot = finishedRoot.containerInfo),\n (finishedRoot =\n 9 === finishedRoot.nodeType\n ? finishedRoot.body\n : \"HTML\" === finishedRoot.nodeName\n ? finishedRoot.ownerDocument.body\n : finishedRoot),\n \"root\" === finishedRoot.style.viewTransitionName &&\n (finishedRoot.style.viewTransitionName = \"\"),\n (finishedRoot = finishedRoot.ownerDocument.documentElement),\n null !== finishedRoot &&\n \"none\" === finishedRoot.style.viewTransitionName &&\n (finishedRoot.style.viewTransitionName = \"\"));\n flags & 2048 &&\n ((flags = null),\n null !== finishedWork.alternate &&\n (flags = finishedWork.alternate.memoizedState.cache),\n (finishedWork = finishedWork.memoizedState.cache),\n finishedWork !== flags &&\n (finishedWork.refCount++, null != flags && releaseCache(flags)));\n break;\n case 12:\n if (flags & 2048) {\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags = finishedWork.stateNode;\n try {\n var _finishedWork$memoize2 = finishedWork.memoizedProps,\n id = _finishedWork$memoize2.id,\n onPostCommit = _finishedWork$memoize2.onPostCommit;\n \"function\" === typeof onPostCommit &&\n onPostCommit(\n id,\n null === finishedWork.alternate ? \"mount\" : \"update\",\n flags.passiveEffectDuration,\n -0\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 31:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 13:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 23:\n break;\n case 22:\n _finishedWork$memoize2 = finishedWork.stateNode;\n id = finishedWork.alternate;\n null !== finishedWork.memoizedState\n ? (isViewTransitionEligible &&\n null !== id &&\n null === id.memoizedState &&\n restoreEnterOrExitViewTransitions(id),\n _finishedWork$memoize2._visibility & 2\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n ))\n : (isViewTransitionEligible &&\n null !== id &&\n null !== id.memoizedState &&\n restoreEnterOrExitViewTransitions(finishedWork),\n _finishedWork$memoize2._visibility & 2\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : ((_finishedWork$memoize2._visibility |= 2),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n 0 !== (finishedWork.subtreeFlags & 10256) || !1\n )));\n flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n break;\n case 24:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n case 30:\n isViewTransitionEligible &&\n ((flags = finishedWork.alternate),\n null !== flags &&\n (restoreViewTransitionOnHostInstances(flags.child, !0),\n restoreViewTransitionOnHostInstances(finishedWork.child, !0)));\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n default:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber,\n committedLanes$jscomp$0,\n committedTransitions$jscomp$0,\n includeWorkInProgressEffects\n) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects &&\n (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n committedLanes = committedLanes$jscomp$0,\n committedTransitions = committedTransitions$jscomp$0,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n commitHookEffectListMount(8, finishedWork);\n break;\n case 23:\n break;\n case 22:\n var instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState\n ? instance._visibility & 2\n ? recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : ((instance._visibility |= 2),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ));\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber\n) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 22:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n parentFiber,\n committedLanes,\n suspendedState\n) {\n if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n accumulateSuspenseyCommitOnFiber(\n parentFiber,\n committedLanes,\n suspendedState\n ),\n (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n fiber,\n committedLanes,\n suspendedState\n) {\n switch (fiber.tag) {\n case 26:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n fiber.flags & suspenseyCommitFlag &&\n (null !== fiber.memoizedState\n ? suspendResource(\n suspendedState,\n currentHoistableRoot,\n fiber.memoizedState,\n fiber.memoizedProps\n )\n : ((fiber = fiber.stateNode),\n (committedLanes & 335544128) === committedLanes &&\n suspendInstance(suspendedState, fiber)));\n break;\n case 5:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n fiber.flags & suspenseyCommitFlag &&\n ((fiber = fiber.stateNode),\n (committedLanes & 335544128) === committedLanes &&\n suspendInstance(suspendedState, fiber));\n break;\n case 3:\n case 4:\n var previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n currentHoistableRoot = previousHoistableRoot;\n break;\n case 22:\n null === fiber.memoizedState &&\n ((previousHoistableRoot = fiber.alternate),\n null !== previousHoistableRoot &&\n null !== previousHoistableRoot.memoizedState\n ? ((previousHoistableRoot = suspenseyCommitFlag),\n (suspenseyCommitFlag = 16777216),\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n ),\n (suspenseyCommitFlag = previousHoistableRoot))\n : recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n ));\n break;\n case 30:\n if (\n 0 !== (fiber.flags & suspenseyCommitFlag) &&\n ((previousHoistableRoot = fiber.memoizedProps.name),\n null != previousHoistableRoot && \"auto\" !== previousHoistableRoot)\n ) {\n var state = fiber.stateNode;\n state.paired = null;\n null === appearingViewTransitions &&\n (appearingViewTransitions = new Map());\n appearingViewTransitions.set(previousHoistableRoot, state);\n }\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n break;\n default:\n recursivelyAccumulateSuspenseyCommit(\n fiber,\n committedLanes,\n suspendedState\n );\n }\n}\nfunction detachAlternateSiblings(parentFiber) {\n var previousFiber = parentFiber.alternate;\n if (\n null !== previousFiber &&\n ((parentFiber = previousFiber.child), null !== parentFiber)\n ) {\n previousFiber.child = null;\n do\n (previousFiber = parentFiber.sibling),\n (parentFiber.sibling = null),\n (parentFiber = previousFiber);\n while (null !== parentFiber);\n }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveUnmountOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.flags & 2048 &&\n commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n break;\n case 3:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n case 12:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n case 22:\n var instance = finishedWork.stateNode;\n null !== finishedWork.memoizedState &&\n instance._visibility & 2 &&\n (null === finishedWork.return || 13 !== finishedWork.return.tag)\n ? ((instance._visibility &= -3),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n : recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n default:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n }\n detachAlternateSiblings(parentFiber);\n }\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n deletions = parentFiber;\n switch (deletions.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(8, deletions, deletions.return);\n recursivelyTraverseDisconnectPassiveEffects(deletions);\n break;\n case 22:\n i = deletions.stateNode;\n i._visibility & 2 &&\n ((i._visibility &= -3),\n recursivelyTraverseDisconnectPassiveEffects(deletions));\n break;\n default:\n recursivelyTraverseDisconnectPassiveEffects(deletions);\n }\n parentFiber = parentFiber.sibling;\n }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n deletedSubtreeRoot,\n nearestMountedAncestor\n) {\n for (; null !== nextEffect; ) {\n var fiber = nextEffect;\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n break;\n case 23:\n case 22:\n if (\n null !== fiber.memoizedState &&\n null !== fiber.memoizedState.cachePool\n ) {\n var cache = fiber.memoizedState.cachePool.pool;\n null != cache && cache.refCount++;\n }\n break;\n case 24:\n releaseCache(fiber.memoizedState.cache);\n }\n cache = fiber.child;\n if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n else\n a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n cache = nextEffect;\n var sibling = cache.sibling,\n returnFiber = cache.return;\n detachFiberAfterEffects(cache);\n if (cache === fiber) {\n nextEffect = null;\n break a;\n }\n if (null !== sibling) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n break a;\n }\n nextEffect = returnFiber;\n }\n }\n}\nvar DefaultAsyncDispatcher = {\n getCacheForType: function (resourceType) {\n var cache = readContext(CacheContext),\n cacheForType = cache.data.get(resourceType);\n void 0 === cacheForType &&\n ((cacheForType = resourceType()),\n cache.data.set(resourceType, cacheForType));\n return cacheForType;\n },\n cacheSignal: function () {\n return readContext(CacheContext).controller.signal;\n }\n },\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n executionContext = 0,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n workInProgressSuspendedReason = 0,\n workInProgressThrownValue = null,\n workInProgressRootDidSkipSuspendedSiblings = !1,\n workInProgressRootIsPrerendering = !1,\n workInProgressRootDidAttachPingListener = !1,\n entangledRenderLanes = 0,\n workInProgressRootExitStatus = 0,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootInterleavedUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n workInProgressDeferredLane = 0,\n workInProgressSuspendedRetryLanes = 0,\n workInProgressRootConcurrentErrors = null,\n workInProgressRootRecoverableErrors = null,\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n globalMostRecentFallbackTime = 0,\n globalMostRecentTransitionTime = 0,\n workInProgressRootRenderTargetTime = Infinity,\n workInProgressTransitions = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n pendingEffectsStatus = 0,\n pendingEffectsRoot = null,\n pendingFinishedWork = null,\n pendingEffectsLanes = 0,\n pendingEffectsRemainingLanes = 0,\n pendingPassiveTransitions = null,\n pendingRecoverableErrors = null,\n pendingViewTransition = null,\n pendingViewTransitionEvents = null,\n pendingTransitionTypes = null,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n : null !== ReactSharedInternals.T\n ? requestTransitionLane()\n : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n if (0 === workInProgressDeferredLane)\n if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n var lane = nextTransitionDeferredLane;\n nextTransitionDeferredLane <<= 1;\n 0 === (nextTransitionDeferredLane & 3932160) &&\n (nextTransitionDeferredLane = 262144);\n workInProgressDeferredLane = lane;\n } else workInProgressDeferredLane = 536870912;\n lane = suspenseHandlerStackCursor.current;\n null !== lane && (lane.flags |= 32);\n return workInProgressDeferredLane;\n}\nfunction scheduleViewTransitionEvent(fiber, callback) {\n if (null != callback) {\n var state = fiber.stateNode,\n instance = state.ref;\n null === instance &&\n (instance = state.ref =\n createViewTransitionInstance(\n getViewTransitionName(fiber.memoizedProps, state)\n ));\n null === pendingViewTransitionEvents && (pendingViewTransitionEvents = []);\n pendingViewTransitionEvents.push(callback.bind(null, instance));\n }\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n if (\n (root === workInProgressRoot &&\n (2 === workInProgressSuspendedReason ||\n 9 === workInProgressSuspendedReason)) ||\n null !== root.cancelPendingCommit\n )\n prepareFreshStack(root, 0),\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n markRootUpdated$1(root, lane);\n if (0 === (executionContext & 2) || root !== workInProgressRoot)\n root === workInProgressRoot &&\n (0 === (executionContext & 2) &&\n (workInProgressRootInterleavedUpdatedLanes |= lane),\n 4 === workInProgressRootExitStatus &&\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n )),\n ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n var shouldTimeSlice =\n (!forceSync &&\n 0 === (lanes & 127) &&\n 0 === (lanes & root$jscomp$0.expiredLanes)) ||\n checkIfRootIsPrerendering(root$jscomp$0, lanes),\n exitStatus = shouldTimeSlice\n ? renderRootConcurrent(root$jscomp$0, lanes)\n : renderRootSync(root$jscomp$0, lanes, !0),\n renderWasConcurrent = shouldTimeSlice;\n do {\n if (0 === exitStatus) {\n workInProgressRootIsPrerendering &&\n !shouldTimeSlice &&\n markRootSuspended(root$jscomp$0, lanes, 0, !1);\n break;\n } else {\n forceSync = root$jscomp$0.current.alternate;\n if (\n renderWasConcurrent &&\n !isRenderConsistentWithExternalStores(forceSync)\n ) {\n exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n renderWasConcurrent = !1;\n continue;\n }\n if (2 === exitStatus) {\n renderWasConcurrent = lanes;\n if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n var JSCompiler_inline_result = 0;\n else\n (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n (JSCompiler_inline_result =\n 0 !== JSCompiler_inline_result\n ? JSCompiler_inline_result\n : JSCompiler_inline_result & 536870912\n ? 536870912\n : 0);\n if (0 !== JSCompiler_inline_result) {\n lanes = JSCompiler_inline_result;\n a: {\n var root = root$jscomp$0;\n exitStatus = workInProgressRootConcurrentErrors;\n var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n wasRootDehydrated &&\n (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n JSCompiler_inline_result = renderRootSync(\n root,\n JSCompiler_inline_result,\n !1\n );\n if (\n 2 !== JSCompiler_inline_result &&\n 6 !== JSCompiler_inline_result\n ) {\n if (\n workInProgressRootDidAttachPingListener &&\n !wasRootDehydrated\n ) {\n root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n workInProgressRootInterleavedUpdatedLanes |=\n renderWasConcurrent;\n exitStatus = 4;\n break a;\n }\n renderWasConcurrent = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = exitStatus;\n null !== renderWasConcurrent &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n renderWasConcurrent\n ));\n }\n exitStatus = JSCompiler_inline_result;\n }\n renderWasConcurrent = !1;\n if (2 !== exitStatus) continue;\n }\n }\n if (1 === exitStatus) {\n prepareFreshStack(root$jscomp$0, 0);\n markRootSuspended(root$jscomp$0, lanes, 0, !0);\n break;\n }\n a: {\n shouldTimeSlice = root$jscomp$0;\n renderWasConcurrent = exitStatus;\n switch (renderWasConcurrent) {\n case 0:\n case 1:\n throw Error(formatProdErrorMessage(345));\n case 4:\n if ((lanes & 4194048) !== lanes && (lanes & 62914560) !== lanes)\n break;\n case 6:\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n break a;\n case 2:\n workInProgressRootRecoverableErrors = null;\n break;\n case 3:\n case 5:\n break;\n default:\n throw Error(formatProdErrorMessage(329));\n }\n if (\n (lanes & 62914560) === lanes &&\n ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n 10 < exitStatus)\n ) {\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n pendingEffectsLanes = lanes;\n shouldTimeSlice.timeoutHandle = scheduleTimeout(\n completeRootWhenReady.bind(\n null,\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n renderWasConcurrent,\n \"Throttled\",\n -0,\n 0\n ),\n exitStatus\n );\n break a;\n }\n completeRootWhenReady(\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n renderWasConcurrent,\n null,\n -0,\n 0\n );\n }\n }\n break;\n } while (1);\n ensureRootIsScheduled(root$jscomp$0);\n}\nfunction completeRootWhenReady(\n root,\n finishedWork,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n) {\n root.timeoutHandle = -1;\n var subtreeFlags = finishedWork.subtreeFlags,\n isViewTransitionEligible = (lanes & 335544064) === lanes;\n suspendedCommitReason = null;\n if (\n isViewTransitionEligible ||\n subtreeFlags & 8192 ||\n 16785408 === (subtreeFlags & 16785408)\n )\n if (\n ((suspendedCommitReason = {\n stylesheets: null,\n count: 0,\n imgCount: 0,\n imgBytes: 0,\n suspenseyImages: [],\n waitingForImages: !0,\n waitingForViewTransition: !1,\n unsuspend: noop$1\n }),\n (appearingViewTransitions = null),\n accumulateSuspenseyCommitOnFiber(\n finishedWork,\n lanes,\n suspendedCommitReason\n ),\n isViewTransitionEligible &&\n ((subtreeFlags = suspendedCommitReason),\n (isViewTransitionEligible = root.containerInfo),\n (isViewTransitionEligible = (\n 9 === isViewTransitionEligible.nodeType\n ? isViewTransitionEligible\n : isViewTransitionEligible.ownerDocument\n ).__reactViewTransition),\n null != isViewTransitionEligible &&\n (subtreeFlags.count++,\n (subtreeFlags.waitingForViewTransition = !0),\n (subtreeFlags = onUnsuspend.bind(subtreeFlags)),\n isViewTransitionEligible.finished.then(subtreeFlags, subtreeFlags))),\n (subtreeFlags =\n (lanes & 62914560) === lanes\n ? globalMostRecentFallbackTime - now()\n : (lanes & 4194048) === lanes\n ? globalMostRecentTransitionTime - now()\n : 0),\n (subtreeFlags = waitForCommitToBeReady(\n suspendedCommitReason,\n subtreeFlags\n )),\n null !== subtreeFlags)\n ) {\n pendingEffectsLanes = lanes;\n root.cancelPendingCommit = subtreeFlags(\n completeRoot.bind(\n null,\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedCommitReason,\n null,\n completedRenderStartTime,\n completedRenderEndTime\n )\n );\n markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n return;\n }\n completeRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedCommitReason\n );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n for (var node = finishedWork; ; ) {\n var tag = node.tag;\n if (\n (0 === tag || 11 === tag || 15 === tag) &&\n node.flags & 16384 &&\n ((tag = node.updateQueue),\n null !== tag && ((tag = tag.stores), null !== tag))\n )\n for (var i = 0; i < tag.length; i++) {\n var check = tag[i],\n getSnapshot = check.getSnapshot;\n check = check.value;\n try {\n if (!objectIs(getSnapshot(), check)) return !1;\n } catch (error) {\n return !1;\n }\n }\n tag = node.child;\n if (node.subtreeFlags & 16384 && null !== tag)\n (tag.return = node), (node = tag);\n else {\n if (node === finishedWork) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === finishedWork) return !0;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n return !0;\n}\nfunction markRootSuspended(\n root,\n suspendedLanes,\n spawnedLane,\n didAttemptEntireTree\n) {\n suspendedLanes = getEntangledLanes(root, suspendedLanes);\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n didAttemptEntireTree = root.expirationTimes;\n for (var lanes = suspendedLanes; 0 < lanes; ) {\n var index$6 = 31 - clz32(lanes),\n lane = 1 << index$6;\n didAttemptEntireTree[index$6] = -1;\n lanes &= ~lane;\n }\n 0 !== spawnedLane &&\n markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n return 0 === (executionContext & 6)\n ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n : !0;\n}\nfunction resetWorkInProgressStack() {\n if (null !== workInProgress) {\n if (0 === workInProgressSuspendedReason)\n var interruptedWork = workInProgress.return;\n else\n (interruptedWork = workInProgress),\n (lastContextDependency = currentlyRenderingFiber$1 = null),\n resetHooksOnUnwind(interruptedWork),\n (thenableState$1 = null),\n (thenableIndexCounter$1 = 0),\n (interruptedWork = workInProgress);\n for (; null !== interruptedWork; )\n unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n (interruptedWork = interruptedWork.return);\n workInProgress = null;\n }\n}\nfunction prepareFreshStack(root, lanes) {\n var timeoutHandle = root.timeoutHandle;\n -1 !== timeoutHandle &&\n ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n timeoutHandle = root.cancelPendingCommit;\n null !== timeoutHandle &&\n ((root.cancelPendingCommit = null), timeoutHandle());\n pendingEffectsLanes = 0;\n resetWorkInProgressStack();\n workInProgressRoot = root;\n workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = lanes;\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n workInProgressRootDidSkipSuspendedSiblings = !1;\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n workInProgressRootDidAttachPingListener = !1;\n workInProgressSuspendedRetryLanes =\n workInProgressDeferredLane =\n workInProgressRootPingedLanes =\n workInProgressRootInterleavedUpdatedLanes =\n workInProgressRootSkippedLanes =\n workInProgressRootExitStatus =\n 0;\n workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n null;\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n entangledRenderLanes = getEntangledLanes(root, lanes);\n finishQueueingConcurrentUpdates();\n return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n currentlyRenderingFiber = null;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n thrownValue === SuspenseException || thrownValue === SuspenseActionException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = 3))\n : thrownValue === SuspenseyCommitException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = 4))\n : (workInProgressSuspendedReason =\n thrownValue === SelectiveHydrationException\n ? 8\n : null !== thrownValue &&\n \"object\" === typeof thrownValue &&\n \"function\" === typeof thrownValue.then\n ? 6\n : 1);\n workInProgressThrownValue = thrownValue;\n null === workInProgress &&\n ((workInProgressRootExitStatus = 1),\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n ));\n}\nfunction shouldRemainOnPreviousScreen() {\n var handler = suspenseHandlerStackCursor.current;\n return null === handler\n ? !0\n : (workInProgressRootRenderLanes & 4194048) ===\n workInProgressRootRenderLanes\n ? null === shellBoundary\n ? !0\n : !1\n : (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n ? handler === shellBoundary\n : !1;\n}\nfunction pushDispatcher() {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n var prevAsyncDispatcher = ReactSharedInternals.A;\n ReactSharedInternals.A = DefaultAsyncDispatcher;\n return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n workInProgressRootExitStatus = 4;\n workInProgressRootDidSkipSuspendedSiblings ||\n ((workInProgressRootRenderLanes & 4194048) !==\n workInProgressRootRenderLanes &&\n null !== suspenseHandlerStackCursor.current) ||\n (workInProgressRootIsPrerendering = !0);\n (0 === (workInProgressRootSkippedLanes & 134217727) &&\n 0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n null === workInProgressRoot ||\n markRootSuspended(\n workInProgressRoot,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n var prevExecutionContext = executionContext;\n executionContext |= 2;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n lanes = !1;\n var exitStatus = workInProgressRootExitStatus;\n a: do\n try {\n if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n var unitOfWork = workInProgress,\n thrownValue = workInProgressThrownValue;\n switch (workInProgressSuspendedReason) {\n case 8:\n resetWorkInProgressStack();\n exitStatus = 6;\n break a;\n case 3:\n case 2:\n case 9:\n case 6:\n null === suspenseHandlerStackCursor.current && (lanes = !0);\n var reason = workInProgressSuspendedReason;\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n if (\n shouldYieldForPrerendering &&\n workInProgressRootIsPrerendering\n ) {\n exitStatus = 0;\n break a;\n }\n break;\n default:\n (reason = workInProgressSuspendedReason),\n (workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n }\n }\n workLoopSync();\n exitStatus = workInProgressRootExitStatus;\n break;\n } catch (thrownValue$184) {\n handleThrow(root, thrownValue$184);\n }\n while (1);\n lanes && root.shellSuspendCounter++;\n lastContextDependency = currentlyRenderingFiber$1 = null;\n executionContext = prevExecutionContext;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n null === workInProgress &&\n ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n finishQueueingConcurrentUpdates());\n return exitStatus;\n}\nfunction workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= 2;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n ? ((workInProgressTransitions = null),\n (workInProgressRootRenderTargetTime = now() + 500),\n prepareFreshStack(root, lanes))\n : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n root,\n lanes\n ));\n a: do\n try {\n if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n lanes = workInProgress;\n var thrownValue = workInProgressThrownValue;\n b: switch (workInProgressSuspendedReason) {\n case 1:\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n break;\n case 2:\n case 9:\n if (isThenableResolved(thrownValue)) {\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(lanes);\n break;\n }\n lanes = function () {\n (2 !== workInProgressSuspendedReason &&\n 9 !== workInProgressSuspendedReason) ||\n workInProgressRoot !== root ||\n (workInProgressSuspendedReason = 7);\n ensureRootIsScheduled(root);\n };\n thrownValue.then(lanes, lanes);\n break a;\n case 3:\n workInProgressSuspendedReason = 7;\n break a;\n case 4:\n workInProgressSuspendedReason = 5;\n break a;\n case 7:\n isThenableResolved(thrownValue)\n ? ((workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n replaySuspendedUnitOfWork(lanes))\n : ((workInProgressSuspendedReason = 0),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n break;\n case 5:\n var resource = null;\n switch (workInProgress.tag) {\n case 26:\n resource = workInProgress.memoizedState;\n case 5:\n case 27:\n var hostFiber = workInProgress;\n if (\n resource\n ? preloadResource(resource)\n : hostFiber.stateNode.complete\n ) {\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n var sibling = hostFiber.sibling;\n if (null !== sibling) workInProgress = sibling;\n else {\n var returnFiber = hostFiber.return;\n null !== returnFiber\n ? ((workInProgress = returnFiber),\n completeUnitOfWork(returnFiber))\n : (workInProgress = null);\n }\n break b;\n }\n }\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n break;\n case 6:\n workInProgressSuspendedReason = 0;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n break;\n case 8:\n resetWorkInProgressStack();\n workInProgressRootExitStatus = 6;\n break a;\n default:\n throw Error(formatProdErrorMessage(462));\n }\n }\n workLoopConcurrentByScheduler();\n break;\n } catch (thrownValue$186) {\n handleThrow(root, thrownValue$186);\n }\n while (1);\n lastContextDependency = currentlyRenderingFiber$1 = null;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n executionContext = prevExecutionContext;\n if (null !== workInProgress) return 0;\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n finishQueueingConcurrentUpdates();\n return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n var next = unitOfWork;\n var current = next.alternate;\n switch (next.tag) {\n case 15:\n case 0:\n next = replayFunctionComponent(\n current,\n next,\n next.pendingProps,\n next.type,\n void 0,\n workInProgressRootRenderLanes\n );\n break;\n case 11:\n next = replayFunctionComponent(\n current,\n next,\n next.pendingProps,\n next.type.render,\n next.ref,\n workInProgressRootRenderLanes\n );\n break;\n case 5:\n resetHooksOnUnwind(next);\n var fiber = next;\n fiber === hydrationParentFiber &&\n (isHydrating\n ? (popToNextHostParent(fiber),\n 5 === fiber.tag &&\n null != fiber.stateNode &&\n (nextHydratableInstance = fiber.stateNode))\n : (popToNextHostParent(fiber), (isHydrating = !0)));\n default:\n unwindInterruptedWork(current, next),\n (next = workInProgress =\n resetWorkInProgress(next, entangledRenderLanes)),\n (next = beginWork(current, next, entangledRenderLanes));\n }\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n root,\n unitOfWork,\n thrownValue,\n suspendedReason\n) {\n lastContextDependency = currentlyRenderingFiber$1 = null;\n resetHooksOnUnwind(unitOfWork);\n thenableState$1 = null;\n thenableIndexCounter$1 = 0;\n var returnFiber = unitOfWork.return;\n try {\n if (\n throwException(\n root,\n returnFiber,\n unitOfWork,\n thrownValue,\n workInProgressRootRenderLanes\n )\n ) {\n workInProgressRootExitStatus = 1;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n } catch (error) {\n if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n workInProgressRootExitStatus = 1;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n if (unitOfWork.flags & 32768) {\n if (isHydrating || 1 === suspendedReason) root = !0;\n else if (\n workInProgressRootIsPrerendering ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n )\n root = !1;\n else if (\n ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n 2 === suspendedReason ||\n 9 === suspendedReason ||\n 3 === suspendedReason ||\n 6 === suspendedReason)\n )\n (suspendedReason = suspenseHandlerStackCursor.current),\n null !== suspendedReason &&\n 13 === suspendedReason.tag &&\n (suspendedReason.flags |= 16384);\n unwindUnitOfWork(unitOfWork, root);\n } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n if (0 !== (completedWork.flags & 32768)) {\n unwindUnitOfWork(\n completedWork,\n workInProgressRootDidSkipSuspendedSiblings\n );\n return;\n }\n unitOfWork = completedWork.return;\n var next = completeWork(\n completedWork.alternate,\n completedWork,\n entangledRenderLanes\n );\n if (null !== next) {\n workInProgress = next;\n return;\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n 0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n do {\n var next = unwindWork(unitOfWork.alternate, unitOfWork);\n if (null !== next) {\n next.flags &= 32767;\n workInProgress = next;\n return;\n }\n next = unitOfWork.return;\n null !== next &&\n ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n if (\n !skipSiblings &&\n ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n ) {\n workInProgress = unitOfWork;\n return;\n }\n workInProgress = unitOfWork = next;\n } while (null !== unitOfWork);\n workInProgressRootExitStatus = 6;\n workInProgress = null;\n}\nfunction completeRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedState\n) {\n root.cancelPendingCommit = null;\n do flushPendingEffects();\n while (0 !== pendingEffectsStatus);\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n if (null !== finishedWork) {\n if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n pendingFinishedWork = finishedWork;\n pendingEffectsRoot = root;\n pendingEffectsLanes = lanes;\n pendingPassiveTransitions = transitions;\n pendingRecoverableErrors = recoverableErrors;\n commitRoot(\n root,\n finishedWork,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n suspendedState\n );\n }\n}\nfunction commitRoot(\n root,\n finishedWork,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n suspendedState\n) {\n var remainingLanes = finishedWork.lanes | finishedWork.childLanes;\n pendingEffectsRemainingLanes = remainingLanes;\n remainingLanes |= concurrentlyUpdatedLanes;\n markRootFinished(\n root,\n lanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n pendingViewTransitionEvents = null;\n (lanes & 335544064) === lanes\n ? ((pendingTransitionTypes = claimQueuedTransitionTypes(root)),\n (spawnedLane = 10262))\n : ((pendingTransitionTypes = null), (spawnedLane = 10256));\n 0 !== (finishedWork.subtreeFlags & spawnedLane) ||\n 0 !== (finishedWork.flags & spawnedLane)\n ? ((root.callbackNode = null),\n (root.callbackPriority = 0),\n scheduleCallback$1(NormalPriority$1, function () {\n flushPassiveEffects();\n return null;\n }))\n : ((root.callbackNode = null), (root.callbackPriority = 0));\n shouldStartViewTransition = !1;\n spawnedLane = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || spawnedLane) {\n spawnedLane = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n updatedLanes = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n suspendedRetryLanes = executionContext;\n executionContext |= 4;\n try {\n commitBeforeMutationEffects(root, finishedWork, lanes);\n } finally {\n (executionContext = suspendedRetryLanes),\n (ReactDOMSharedInternals.p = updatedLanes),\n (ReactSharedInternals.T = spawnedLane);\n }\n }\n pendingEffectsStatus = 1;\n shouldStartViewTransition\n ? (pendingViewTransition = startViewTransition(\n suspendedState,\n root.containerInfo,\n pendingTransitionTypes,\n flushMutationEffects,\n flushLayoutEffects,\n flushAfterMutationEffects,\n flushSpawnedWork,\n flushPassiveEffects,\n reportViewTransitionError,\n null,\n null\n ))\n : (flushMutationEffects(), flushLayoutEffects(), flushSpawnedWork());\n}\nfunction reportViewTransitionError(error) {\n if (0 !== pendingEffectsStatus) {\n var onRecoverableError = pendingEffectsRoot.onRecoverableError;\n onRecoverableError(error, { componentStack: null });\n }\n}\nfunction flushAfterMutationEffects() {\n 3 === pendingEffectsStatus &&\n ((pendingEffectsStatus = 0),\n commitAfterMutationEffectsOnFiber(pendingFinishedWork, pendingEffectsRoot),\n (pendingEffectsStatus = 4));\n}\nfunction flushMutationEffects() {\n if (1 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n rootMutationHasEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n try {\n inUpdateViewTransition = rootViewTransitionAffected = !1;\n commitMutationEffectsOnFiber(finishedWork, root, lanes);\n lanes = selectionInformation;\n var curFocusedElem = getActiveElementDeep(root.containerInfo),\n priorFocusedElem = lanes.focusedElem,\n priorSelectionRange = lanes.selectionRange;\n if (\n curFocusedElem !== priorFocusedElem &&\n priorFocusedElem &&\n priorFocusedElem.ownerDocument &&\n containsNode(\n priorFocusedElem.ownerDocument.documentElement,\n priorFocusedElem\n )\n ) {\n if (\n null !== priorSelectionRange &&\n hasSelectionCapabilities(priorFocusedElem)\n ) {\n var start = priorSelectionRange.start,\n end = priorSelectionRange.end;\n void 0 === end && (end = start);\n if (\"selectionStart\" in priorFocusedElem)\n (priorFocusedElem.selectionStart = start),\n (priorFocusedElem.selectionEnd = Math.min(\n end,\n priorFocusedElem.value.length\n ));\n else {\n var doc = priorFocusedElem.ownerDocument || document,\n win = (doc && doc.defaultView) || window;\n if (win.getSelection) {\n var selection = win.getSelection(),\n length = priorFocusedElem.textContent.length,\n start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n end$jscomp$0 =\n void 0 === priorSelectionRange.end\n ? start$jscomp$0\n : Math.min(priorSelectionRange.end, length);\n !selection.extend &&\n start$jscomp$0 > end$jscomp$0 &&\n ((curFocusedElem = end$jscomp$0),\n (end$jscomp$0 = start$jscomp$0),\n (start$jscomp$0 = curFocusedElem));\n var startMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n start$jscomp$0\n ),\n endMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n end$jscomp$0\n );\n if (\n startMarker &&\n endMarker &&\n (1 !== selection.rangeCount ||\n selection.anchorNode !== startMarker.node ||\n selection.anchorOffset !== startMarker.offset ||\n selection.focusNode !== endMarker.node ||\n selection.focusOffset !== endMarker.offset)\n ) {\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n start$jscomp$0 > end$jscomp$0\n ? (selection.addRange(range),\n selection.extend(endMarker.node, endMarker.offset))\n : (range.setEnd(endMarker.node, endMarker.offset),\n selection.addRange(range));\n }\n }\n }\n }\n doc = [];\n for (\n selection = priorFocusedElem;\n (selection = selection.parentNode);\n\n )\n 1 === selection.nodeType &&\n doc.push({\n element: selection,\n left: selection.scrollLeft,\n top: selection.scrollTop\n });\n \"function\" === typeof priorFocusedElem.focus &&\n priorFocusedElem.focus();\n for (\n priorFocusedElem = 0;\n priorFocusedElem < doc.length;\n priorFocusedElem++\n ) {\n var info = doc[priorFocusedElem];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n _enabled = !!eventsEnabled;\n selectionInformation = eventsEnabled = null;\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootMutationHasEffect);\n }\n }\n root.current = finishedWork;\n pendingEffectsStatus = 2;\n }\n}\nfunction flushLayoutEffects() {\n if (2 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n rootHasLayoutEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n try {\n commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootHasLayoutEffect);\n }\n }\n pendingEffectsStatus = 3;\n }\n}\nfunction flushSpawnedWork() {\n if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n pendingEffectsStatus = 0;\n var committedViewTransition = pendingViewTransition;\n pendingViewTransition = null;\n requestPaint();\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n recoverableErrors = pendingRecoverableErrors,\n passiveSubtreeMask = (lanes & 335544064) === lanes ? 10262 : 10256;\n 0 !== (finishedWork.subtreeFlags & passiveSubtreeMask) ||\n 0 !== (finishedWork.flags & passiveSubtreeMask)\n ? (pendingEffectsStatus = 5)\n : ((pendingEffectsStatus = 0),\n (pendingFinishedWork = pendingEffectsRoot = null),\n releaseRootPooledCache(root, root.pendingLanes));\n passiveSubtreeMask = root.pendingLanes;\n 0 === passiveSubtreeMask && (legacyErrorBoundariesThatAlreadyFailed = null);\n lanesToEventPriority(lanes);\n finishedWork = finishedWork.stateNode;\n if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n try {\n injectedHook.onCommitFiberRoot(\n rendererID,\n finishedWork,\n void 0,\n 128 === (finishedWork.current.flags & 128)\n );\n } catch (err) {}\n if (null !== recoverableErrors) {\n finishedWork = ReactSharedInternals.T;\n passiveSubtreeMask = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = 2;\n ReactSharedInternals.T = null;\n try {\n for (\n var onRecoverableError = root.onRecoverableError, i = 0;\n i < recoverableErrors.length;\n i++\n ) {\n var recoverableError = recoverableErrors[i];\n onRecoverableError(recoverableError.value, {\n componentStack: recoverableError.stack\n });\n }\n } finally {\n (ReactSharedInternals.T = finishedWork),\n (ReactDOMSharedInternals.p = passiveSubtreeMask);\n }\n }\n recoverableErrors = pendingViewTransitionEvents;\n onRecoverableError = pendingTransitionTypes;\n pendingTransitionTypes = null;\n if (\n null !== recoverableErrors &&\n ((pendingViewTransitionEvents = null),\n null === onRecoverableError && (onRecoverableError = []),\n null !== committedViewTransition)\n )\n for (\n recoverableError = 0;\n recoverableError < recoverableErrors.length;\n recoverableError++\n )\n (finishedWork = (0, recoverableErrors[recoverableError])(\n onRecoverableError\n )),\n void 0 !== finishedWork &&\n committedViewTransition.finished.finally(finishedWork);\n 0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n ensureRootIsScheduled(root);\n passiveSubtreeMask = root.pendingLanes;\n 0 !== (lanes & 261930) && 0 !== (passiveSubtreeMask & 42)\n ? root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = null));\n flushSyncWorkAcrossRoots_impl(0, !1);\n }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n 0 === (root.pooledCacheLanes &= remainingLanes) &&\n ((remainingLanes = root.pooledCache),\n null != remainingLanes &&\n ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n null !== pendingViewTransition &&\n (pendingViewTransition.skipTransition(), (pendingViewTransition = null));\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n if (5 !== pendingEffectsStatus) return !1;\n var root = pendingEffectsRoot,\n remainingLanes = pendingEffectsRemainingLanes;\n pendingEffectsRemainingLanes = 0;\n var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n prevTransition = ReactSharedInternals.T,\n previousPriority = ReactDOMSharedInternals.p;\n try {\n ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n ReactSharedInternals.T = null;\n renderPriority = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root$jscomp$0 = pendingEffectsRoot,\n lanes = pendingEffectsLanes;\n pendingEffectsStatus = 0;\n pendingFinishedWork = pendingEffectsRoot = null;\n pendingEffectsLanes = 0;\n if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n var prevExecutionContext = executionContext;\n executionContext |= 4;\n commitPassiveUnmountOnFiber(root$jscomp$0.current);\n commitPassiveMountOnFiber(\n root$jscomp$0,\n root$jscomp$0.current,\n lanes,\n renderPriority\n );\n executionContext = prevExecutionContext;\n flushSyncWorkAcrossRoots_impl(0, !1);\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n } catch (err) {}\n return !0;\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition),\n releaseRootPooledCache(root, remainingLanes);\n }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n null !== rootFiber &&\n (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else\n for (; null !== nearestMountedAncestor; ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n break;\n } else if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n error = createClassErrorUpdate(2);\n instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n null !== instance &&\n (initializeClassErrorUpdate(\n error,\n instance,\n nearestMountedAncestor,\n sourceFiber\n ),\n markRootUpdated$1(instance, 2),\n ensureRootIsScheduled(instance));\n break;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n var pingCache = root.pingCache;\n if (null === pingCache) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n var threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else\n (threadIDs = pingCache.get(wakeable)),\n void 0 === threadIDs &&\n ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n threadIDs.has(lanes) ||\n ((workInProgressRootDidAttachPingListener = !0),\n threadIDs.add(lanes),\n (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n root.warmLanes &= ~pingedLanes;\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (4 === workInProgressRootExitStatus ||\n (3 === workInProgressRootExitStatus &&\n (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes &&\n 300 > now() - globalMostRecentFallbackTime)\n ? 0 === (executionContext & 2)\n ? prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes)\n : (workInProgressRootPingedLanes |= pingedLanes),\n workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n (workInProgressSuspendedRetryLanes = 0));\n ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n 0 === retryLane && (retryLane = claimNextRetryLane());\n boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n null !== boundaryFiber &&\n (markRootUpdated$1(boundaryFiber, retryLane),\n ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState,\n retryLane = 0;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = 0;\n switch (boundaryFiber.tag) {\n case 31:\n case 13:\n var retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n break;\n case 19:\n retryCache = boundaryFiber.stateNode;\n break;\n case 22:\n retryCache = boundaryFiber.stateNode._retryCache;\n break;\n default:\n throw Error(formatProdErrorMessage(314));\n }\n null !== retryCache && retryCache.delete(wakeable);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n lastScheduledRoot = null,\n didScheduleMicrotask = !1,\n mightHavePendingSyncWork = !1,\n isFlushingWork = !1,\n currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n root !== lastScheduledRoot &&\n null === root.next &&\n (null === lastScheduledRoot\n ? (firstScheduledRoot = lastScheduledRoot = root)\n : (lastScheduledRoot = lastScheduledRoot.next = root));\n mightHavePendingSyncWork = !0;\n didScheduleMicrotask ||\n ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n if (!isFlushingWork && mightHavePendingSyncWork) {\n isFlushingWork = !0;\n do {\n var didPerformSomeWork = !1;\n for (var root$190 = firstScheduledRoot; null !== root$190; ) {\n if (!onlyLegacy)\n if (0 !== syncTransitionLanes) {\n var pendingLanes = root$190.pendingLanes;\n if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n else {\n var suspendedLanes = root$190.suspendedLanes,\n pingedLanes = root$190.pingedLanes;\n JSCompiler_inline_result =\n (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n JSCompiler_inline_result &=\n pendingLanes & ~(suspendedLanes & ~pingedLanes);\n JSCompiler_inline_result =\n JSCompiler_inline_result & 201326741\n ? (JSCompiler_inline_result & 201326741) | 1\n : JSCompiler_inline_result\n ? JSCompiler_inline_result | 2\n : 0;\n }\n 0 !== JSCompiler_inline_result &&\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root$190, JSCompiler_inline_result));\n } else\n (JSCompiler_inline_result = workInProgressRootRenderLanes),\n (JSCompiler_inline_result = getNextLanes(\n root$190,\n root$190 === workInProgressRoot ? JSCompiler_inline_result : 0,\n null !== root$190.cancelPendingCommit ||\n -1 !== root$190.timeoutHandle\n )),\n 0 === (JSCompiler_inline_result & 3) ||\n checkIfRootIsPrerendering(root$190, JSCompiler_inline_result) ||\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root$190, JSCompiler_inline_result));\n root$190 = root$190.next;\n }\n } while (didPerformSomeWork);\n isFlushingWork = !1;\n }\n}\nfunction processRootScheduleInImmediateTask() {\n processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n mightHavePendingSyncWork = didScheduleMicrotask = !1;\n var syncTransitionLanes = 0;\n 0 !== currentEventTransitionLane &&\n shouldAttemptEagerTransition() &&\n (syncTransitionLanes = currentEventTransitionLane);\n for (\n var currentTime = now(), prev = null, root = firstScheduledRoot;\n null !== root;\n\n ) {\n var next = root.next,\n nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n if (0 === nextLanes)\n (root.next = null),\n null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n null === next && (lastScheduledRoot = prev);\n else if (\n ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n )\n mightHavePendingSyncWork = !0;\n root = next;\n }\n (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n 0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n for (\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes & -62914561;\n 0 < lanes;\n\n ) {\n var index$5 = 31 - clz32(lanes),\n lane = 1 << index$5,\n expirationTime = expirationTimes[index$5];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n currentTime = workInProgressRoot;\n suspendedLanes = workInProgressRootRenderLanes;\n suspendedLanes = getNextLanes(\n root,\n root === currentTime ? suspendedLanes : 0,\n null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n );\n pingedLanes = root.callbackNode;\n if (\n 0 === suspendedLanes ||\n (root === currentTime &&\n (2 === workInProgressSuspendedReason ||\n 9 === workInProgressSuspendedReason)) ||\n null !== root.cancelPendingCommit\n )\n return (\n null !== pingedLanes &&\n null !== pingedLanes &&\n cancelCallback$1(pingedLanes),\n (root.callbackNode = null),\n (root.callbackPriority = 0)\n );\n if (\n 0 === (suspendedLanes & 3) ||\n checkIfRootIsPrerendering(root, suspendedLanes)\n ) {\n currentTime = suspendedLanes & -suspendedLanes;\n if (currentTime === root.callbackPriority) return currentTime;\n null !== pingedLanes && cancelCallback$1(pingedLanes);\n switch (lanesToEventPriority(suspendedLanes)) {\n case 2:\n case 8:\n suspendedLanes = UserBlockingPriority;\n break;\n case 32:\n suspendedLanes = NormalPriority$1;\n break;\n case 268435456:\n suspendedLanes = IdlePriority;\n break;\n default:\n suspendedLanes = NormalPriority$1;\n }\n pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n root.callbackPriority = currentTime;\n root.callbackNode = suspendedLanes;\n return currentTime;\n }\n null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n root.callbackPriority = 2;\n root.callbackNode = null;\n return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n return (root.callbackNode = null), (root.callbackPriority = 0), null;\n var originalCallbackNode = root.callbackNode;\n if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n return null;\n var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n root,\n root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n );\n if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n scheduleTaskForRootDuringMicrotask(root, now());\n return null != root.callbackNode && root.callbackNode === originalCallbackNode\n ? performWorkOnRootViaSchedulerTask.bind(null, root)\n : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n if (flushPendingEffects()) return null;\n performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n scheduleMicrotask(function () {\n 0 !== (executionContext & 6)\n ? scheduleCallback$3(\n ImmediatePriority,\n processRootScheduleInImmediateTask\n )\n : processRootScheduleInMicrotask();\n });\n}\nfunction requestTransitionLane() {\n if (0 === currentEventTransitionLane) {\n var actionScopeLane = currentEntangledLane;\n 0 === actionScopeLane &&\n ((actionScopeLane = nextTransitionUpdateLane),\n (nextTransitionUpdateLane <<= 1),\n 0 === (nextTransitionUpdateLane & 261888) &&\n (nextTransitionUpdateLane = 256));\n currentEventTransitionLane = actionScopeLane;\n }\n return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n return null == actionProp ||\n \"symbol\" === typeof actionProp ||\n \"boolean\" === typeof actionProp\n ? null\n : \"function\" === typeof actionProp\n ? actionProp\n : sanitizeURL(actionProp);\n}\nfunction extractEvents$1(\n dispatchQueue,\n domEventName,\n maybeTargetInst,\n nativeEvent,\n nativeEventTarget\n) {\n if (\n \"submit\" === domEventName &&\n maybeTargetInst &&\n maybeTargetInst.stateNode === nativeEventTarget\n ) {\n var action = coerceFormActionProp(\n (nativeEventTarget[internalPropsKey] || null).action\n ),\n submitter = nativeEvent.submitter;\n submitter &&\n ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n ? coerceFormActionProp(domEventName.formAction)\n : submitter.getAttribute(\"formAction\")),\n null !== domEventName && ((action = domEventName), (submitter = null)));\n var event = new SyntheticEvent(\n \"action\",\n \"action\",\n null,\n nativeEvent,\n nativeEventTarget\n );\n dispatchQueue.push({\n event: event,\n listeners: [\n {\n instance: null,\n listener: function () {\n if (nativeEvent.defaultPrevented) {\n if (0 !== currentEventTransitionLane) {\n var formData = new FormData(nativeEventTarget, submitter);\n startHostTransition(\n maybeTargetInst,\n {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n },\n null,\n formData\n );\n }\n } else\n \"function\" === typeof action &&\n (event.preventDefault(),\n (formData = new FormData(nativeEventTarget, submitter)),\n startHostTransition(\n maybeTargetInst,\n {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n },\n action,\n formData\n ));\n },\n currentTarget: nativeEventTarget\n }\n ]\n });\n }\n}\nfor (\n var i$jscomp$inline_1667 = 0;\n i$jscomp$inline_1667 < simpleEventPluginEvents.length;\n i$jscomp$inline_1667++\n) {\n var eventName$jscomp$inline_1668 =\n simpleEventPluginEvents[i$jscomp$inline_1667],\n domEventName$jscomp$inline_1669 =\n eventName$jscomp$inline_1668.toLowerCase(),\n capitalizedEvent$jscomp$inline_1670 =\n eventName$jscomp$inline_1668[0].toUpperCase() +\n eventName$jscomp$inline_1668.slice(1);\n registerSimpleEvent(\n domEventName$jscomp$inline_1669,\n \"on\" + capitalizedEvent$jscomp$inline_1670\n );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n \"onChange\",\n \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onSelect\",\n \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n \" \"\n )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n \"compositionend\",\n \"keypress\",\n \"textInput\",\n \"paste\"\n]);\nregisterTwoPhaseEvent(\n \"onCompositionEnd\",\n \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onCompositionStart\",\n \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n \"onCompositionUpdate\",\n \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n \" \"\n ),\n nonDelegatedEvents = new Set(\n \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n .split(\" \")\n .concat(mediaEventTypes)\n );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n eventSystemFlags = 0 !== (eventSystemFlags & 4);\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i],\n event = _dispatchQueue$i.event;\n _dispatchQueue$i = _dispatchQueue$i.listeners;\n a: {\n var previousInstance = void 0;\n if (eventSystemFlags)\n for (\n var i$jscomp$0 = _dispatchQueue$i.length - 1;\n 0 <= i$jscomp$0;\n i$jscomp$0--\n ) {\n var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = _dispatchListeners$i;\n event.currentTarget = currentTarget;\n try {\n previousInstance(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n previousInstance = instance;\n }\n else\n for (\n i$jscomp$0 = 0;\n i$jscomp$0 < _dispatchQueue$i.length;\n i$jscomp$0++\n ) {\n _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n instance = _dispatchListeners$i.instance;\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n previousInstance = _dispatchListeners$i;\n event.currentTarget = currentTarget;\n try {\n previousInstance(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n previousInstance = instance;\n }\n }\n }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n void 0 === JSCompiler_inline_result &&\n (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n new Set());\n var listenerSetKey = domEventName + \"__bubble\";\n JSCompiler_inline_result.has(listenerSetKey) ||\n (addTrappedEventListener(targetElement, domEventName, 2, !1),\n JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n var eventSystemFlags = 0;\n isCapturePhaseListener && (eventSystemFlags |= 4);\n addTrappedEventListener(\n target,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = !0;\n allNativeEvents.forEach(function (domEventName) {\n \"selectionchange\" !== domEventName &&\n (nonDelegatedEvents.has(domEventName) ||\n listenToNativeEvent(domEventName, !1, rootContainerElement),\n listenToNativeEvent(domEventName, !0, rootContainerElement));\n });\n var ownerDocument =\n 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n null === ownerDocument ||\n ownerDocument[listeningMarker] ||\n ((ownerDocument[listeningMarker] = !0),\n listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n }\n}\nfunction addTrappedEventListener(\n targetContainer,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n) {\n switch (getEventPriority(domEventName)) {\n case 2:\n var listenerWrapper = dispatchDiscreteEvent;\n break;\n case 8:\n listenerWrapper = dispatchContinuousEvent;\n break;\n default:\n listenerWrapper = dispatchEvent;\n }\n eventSystemFlags = listenerWrapper.bind(\n null,\n domEventName,\n eventSystemFlags,\n targetContainer\n );\n listenerWrapper = void 0;\n !passiveBrowserEventsSupported ||\n (\"touchstart\" !== domEventName &&\n \"touchmove\" !== domEventName &&\n \"wheel\" !== domEventName) ||\n (listenerWrapper = !0);\n isCapturePhaseListener\n ? void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n capture: !0,\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n : void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n targetInst$jscomp$0,\n targetContainer\n) {\n var ancestorInst = targetInst$jscomp$0;\n if (\n 0 === (eventSystemFlags & 1) &&\n 0 === (eventSystemFlags & 2) &&\n null !== targetInst$jscomp$0\n )\n a: for (;;) {\n if (null === targetInst$jscomp$0) return;\n var nodeTag = targetInst$jscomp$0.tag;\n if (3 === nodeTag || 4 === nodeTag) {\n var container = targetInst$jscomp$0.stateNode.containerInfo;\n if (container === targetContainer) break;\n if (4 === nodeTag)\n for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n var grandTag = nodeTag.tag;\n if (\n (3 === grandTag || 4 === grandTag) &&\n nodeTag.stateNode.containerInfo === targetContainer\n )\n return;\n nodeTag = nodeTag.return;\n }\n for (; null !== container; ) {\n nodeTag = getClosestInstanceFromNode(container);\n if (null === nodeTag) return;\n grandTag = nodeTag.tag;\n if (\n 5 === grandTag ||\n 6 === grandTag ||\n 26 === grandTag ||\n 27 === grandTag\n ) {\n targetInst$jscomp$0 = ancestorInst = nodeTag;\n continue a;\n }\n container = container.parentNode;\n }\n }\n targetInst$jscomp$0 = targetInst$jscomp$0.return;\n }\n batchedUpdates$1(function () {\n var targetInst = ancestorInst,\n nativeEventTarget = getEventTarget(nativeEvent),\n dispatchQueue = [];\n a: {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n if (void 0 !== reactName) {\n var SyntheticEventCtor = SyntheticEvent,\n reactEventType = domEventName;\n switch (domEventName) {\n case \"keypress\":\n if (0 === getEventCharCode(nativeEvent)) break a;\n case \"keydown\":\n case \"keyup\":\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n case \"focusin\":\n reactEventType = \"focus\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"focusout\":\n reactEventType = \"blur\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"beforeblur\":\n case \"afterblur\":\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"click\":\n if (2 === nativeEvent.button) break a;\n case \"auxclick\":\n case \"dblclick\":\n case \"mousedown\":\n case \"mousemove\":\n case \"mouseup\":\n case \"mouseout\":\n case \"mouseover\":\n case \"contextmenu\":\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n case \"drag\":\n case \"dragend\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"dragstart\":\n case \"drop\":\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n case \"touchcancel\":\n case \"touchend\":\n case \"touchmove\":\n case \"touchstart\":\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n case \"scroll\":\n case \"scrollend\":\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n case \"wheel\":\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n case \"copy\":\n case \"cut\":\n case \"paste\":\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"pointerup\":\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n case \"submit\":\n SyntheticEventCtor = SyntheticSubmitEvent;\n break;\n case \"toggle\":\n case \"beforetoggle\":\n SyntheticEventCtor = SyntheticToggleEvent;\n }\n var inCapturePhase = 0 !== (eventSystemFlags & 4),\n accumulateTargetOnly =\n !inCapturePhase &&\n (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n reactEventName = inCapturePhase\n ? null !== reactName\n ? reactName + \"Capture\"\n : null\n : reactName;\n inCapturePhase = [];\n for (\n var instance = targetInst, lastHostComponent;\n null !== instance;\n\n ) {\n var _instance = instance;\n lastHostComponent = _instance.stateNode;\n _instance = _instance.tag;\n (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n null === lastHostComponent ||\n null === reactEventName ||\n ((_instance = getListener(instance, reactEventName)),\n null != _instance &&\n inCapturePhase.push(\n createDispatchListener(instance, _instance, lastHostComponent)\n ));\n if (accumulateTargetOnly) break;\n instance = instance.return;\n }\n 0 < inCapturePhase.length &&\n ((reactName = new SyntheticEventCtor(\n reactName,\n reactEventType,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n }\n }\n if (0 === (eventSystemFlags & 7)) {\n a: {\n SyntheticEventCtor =\n \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n reactName =\n \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n if (\n SyntheticEventCtor &&\n nativeEvent !== currentReplayingEvent &&\n (reactEventType =\n nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n (getClosestInstanceFromNode(reactEventType) ||\n reactEventType[internalContainerInstanceKey])\n )\n break a;\n if (reactName || SyntheticEventCtor) {\n reactEventType =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget\n : (SyntheticEventCtor = nativeEventTarget.ownerDocument)\n ? SyntheticEventCtor.defaultView ||\n SyntheticEventCtor.parentWindow\n : window;\n if (reactName) {\n if (\n ((SyntheticEventCtor =\n nativeEvent.relatedTarget || nativeEvent.toElement),\n (reactName = targetInst),\n (SyntheticEventCtor = SyntheticEventCtor\n ? getClosestInstanceFromNode(SyntheticEventCtor)\n : null),\n null !== SyntheticEventCtor &&\n ((accumulateTargetOnly =\n getNearestMountedFiber(SyntheticEventCtor)),\n (inCapturePhase = SyntheticEventCtor.tag),\n SyntheticEventCtor !== accumulateTargetOnly ||\n (5 !== inCapturePhase &&\n 27 !== inCapturePhase &&\n 6 !== inCapturePhase)))\n )\n SyntheticEventCtor = null;\n } else (reactName = null), (SyntheticEventCtor = targetInst);\n if (reactName !== SyntheticEventCtor) {\n inCapturePhase = SyntheticMouseEvent;\n _instance = \"onMouseLeave\";\n reactEventName = \"onMouseEnter\";\n instance = \"mouse\";\n if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n (inCapturePhase = SyntheticPointerEvent),\n (_instance = \"onPointerLeave\"),\n (reactEventName = \"onPointerEnter\"),\n (instance = \"pointer\");\n accumulateTargetOnly =\n null == reactName\n ? reactEventType\n : getNodeFromInstance(reactName);\n lastHostComponent =\n null == SyntheticEventCtor\n ? reactEventType\n : getNodeFromInstance(SyntheticEventCtor);\n reactEventType = new inCapturePhase(\n _instance,\n instance + \"leave\",\n reactName,\n nativeEvent,\n nativeEventTarget\n );\n reactEventType.target = accumulateTargetOnly;\n reactEventType.relatedTarget = lastHostComponent;\n _instance = null;\n getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n ((inCapturePhase = new inCapturePhase(\n reactEventName,\n instance + \"enter\",\n SyntheticEventCtor,\n nativeEvent,\n nativeEventTarget\n )),\n (inCapturePhase.target = lastHostComponent),\n (inCapturePhase.relatedTarget = accumulateTargetOnly),\n (_instance = inCapturePhase));\n accumulateTargetOnly = _instance;\n inCapturePhase =\n reactName && SyntheticEventCtor\n ? getLowestCommonAncestor(\n reactName,\n SyntheticEventCtor,\n getParent\n )\n : null;\n null !== reactName &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n reactEventType,\n reactName,\n inCapturePhase,\n !1\n );\n null !== SyntheticEventCtor &&\n null !== accumulateTargetOnly &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n accumulateTargetOnly,\n SyntheticEventCtor,\n inCapturePhase,\n !0\n );\n }\n }\n }\n a: {\n reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n SyntheticEventCtor =\n reactName.nodeName && reactName.nodeName.toLowerCase();\n if (\n \"select\" === SyntheticEventCtor ||\n (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n )\n var getTargetInstFunc = getTargetInstForChangeEvent;\n else if (isTextInputElement(reactName))\n if (isInputEventSupported)\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n var handleEventFunc = handleEventsForInputEventPolyfill;\n }\n else\n (SyntheticEventCtor = reactName.nodeName),\n !SyntheticEventCtor ||\n \"input\" !== SyntheticEventCtor.toLowerCase() ||\n (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n ? targetInst &&\n isCustomElement(targetInst.elementType) &&\n (getTargetInstFunc = getTargetInstForChangeEvent)\n : (getTargetInstFunc = getTargetInstForClickEvent);\n if (\n getTargetInstFunc &&\n (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n ) {\n createAndAccumulateChangeEvent(\n dispatchQueue,\n getTargetInstFunc,\n nativeEvent,\n nativeEventTarget\n );\n break a;\n }\n handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n }\n handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n switch (domEventName) {\n case \"focusin\":\n if (\n isTextInputElement(handleEventFunc) ||\n \"true\" === handleEventFunc.contentEditable\n )\n (activeElement = handleEventFunc),\n (activeElementInst = targetInst),\n (lastSelection = null);\n break;\n case \"focusout\":\n lastSelection = activeElementInst = activeElement = null;\n break;\n case \"mousedown\":\n mouseDown = !0;\n break;\n case \"contextmenu\":\n case \"mouseup\":\n case \"dragend\":\n mouseDown = !1;\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n break;\n case \"selectionchange\":\n if (skipSelectionChangeEvent) break;\n case \"keydown\":\n case \"keyup\":\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n }\n var fallbackData;\n if (canUseCompositionEvent)\n b: {\n switch (domEventName) {\n case \"compositionstart\":\n var eventType = \"onCompositionStart\";\n break b;\n case \"compositionend\":\n eventType = \"onCompositionEnd\";\n break b;\n case \"compositionupdate\":\n eventType = \"onCompositionUpdate\";\n break b;\n }\n eventType = void 0;\n }\n else\n isComposing\n ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n (eventType = \"onCompositionEnd\")\n : \"keydown\" === domEventName &&\n 229 === nativeEvent.keyCode &&\n (eventType = \"onCompositionStart\");\n eventType &&\n (useFallbackCompositionData &&\n \"ko\" !== nativeEvent.locale &&\n (isComposing || \"onCompositionStart\" !== eventType\n ? \"onCompositionEnd\" === eventType &&\n isComposing &&\n (fallbackData = getData())\n : ((root = nativeEventTarget),\n (startText = \"value\" in root ? root.value : root.textContent),\n (isComposing = !0))),\n (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n 0 < handleEventFunc.length &&\n ((eventType = new SyntheticCompositionEvent(\n eventType,\n domEventName,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n fallbackData\n ? (eventType.data = fallbackData)\n : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n null !== fallbackData && (eventType.data = fallbackData))));\n if (\n (fallbackData = canUseTextInputEvent\n ? getNativeBeforeInputChars(domEventName, nativeEvent)\n : getFallbackBeforeInputChars(domEventName, nativeEvent))\n )\n (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n 0 < eventType.length &&\n ((handleEventFunc = new SyntheticCompositionEvent(\n \"onBeforeInput\",\n \"beforeinput\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: handleEventFunc,\n listeners: eventType\n }),\n (handleEventFunc.data = fallbackData));\n extractEvents$1(\n dispatchQueue,\n domEventName,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n }\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n for (\n var captureName = reactName + \"Capture\", listeners = [];\n null !== targetFiber;\n\n ) {\n var _instance2 = targetFiber,\n stateNode = _instance2.stateNode;\n _instance2 = _instance2.tag;\n (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n null === stateNode ||\n ((_instance2 = getListener(targetFiber, captureName)),\n null != _instance2 &&\n listeners.unshift(\n createDispatchListener(targetFiber, _instance2, stateNode)\n ),\n (_instance2 = getListener(targetFiber, reactName)),\n null != _instance2 &&\n listeners.push(\n createDispatchListener(targetFiber, _instance2, stateNode)\n ));\n if (3 === targetFiber.tag) return listeners;\n targetFiber = targetFiber.return;\n }\n return [];\n}\nfunction getParent(inst) {\n if (null === inst) return null;\n do inst = inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag);\n return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n event,\n target,\n common,\n inCapturePhase\n) {\n for (\n var registrationName = event._reactName, listeners = [];\n null !== target && target !== common;\n\n ) {\n var _instance3 = target,\n alternate = _instance3.alternate,\n stateNode = _instance3.stateNode;\n _instance3 = _instance3.tag;\n if (null !== alternate && alternate === common) break;\n (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n null === stateNode ||\n ((alternate = stateNode),\n inCapturePhase\n ? ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.unshift(\n createDispatchListener(target, stateNode, alternate)\n ))\n : inCapturePhase ||\n ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.push(\n createDispatchListener(target, stateNode, alternate)\n )));\n target = target.return;\n }\n 0 !== listeners.length &&\n dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n return (\"string\" === typeof markup ? markup : \"\" + markup)\n .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n clientText = normalizeMarkupForTextOrAttribute(clientText);\n return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"children\":\n if (\"string\" === typeof value)\n \"body\" === tag ||\n (\"textarea\" === tag && \"\" === value) ||\n setTextContent(domElement, value);\n else if (\"number\" === typeof value || \"bigint\" === typeof value)\n \"body\" !== tag && setTextContent(domElement, \"\" + value);\n else return;\n break;\n case \"className\":\n setValueForKnownAttribute(domElement, \"class\", value);\n break;\n case \"tabIndex\":\n setValueForKnownAttribute(domElement, \"tabindex\", value);\n break;\n case \"dir\":\n case \"role\":\n case \"viewBox\":\n case \"width\":\n case \"height\":\n setValueForKnownAttribute(domElement, key, value);\n break;\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n return;\n case \"data\":\n if (\"object\" !== tag) {\n setValueForKnownAttribute(domElement, \"data\", value);\n break;\n }\n case \"src\":\n case \"href\":\n if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n domElement.removeAttribute(key);\n break;\n }\n if (\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n value = sanitizeURL(value);\n domElement.setAttribute(key, value);\n break;\n case \"action\":\n case \"formAction\":\n if (\"function\" === typeof value) {\n domElement.setAttribute(\n key,\n \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n );\n break;\n } else\n \"function\" === typeof prevValue &&\n (\"formAction\" === key\n ? (\"input\" !== tag &&\n setProp(domElement, tag, \"name\", props.name, props, null),\n setProp(\n domElement,\n tag,\n \"formEncType\",\n props.formEncType,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formMethod\",\n props.formMethod,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formTarget\",\n props.formTarget,\n props,\n null\n ))\n : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n setProp(domElement, tag, \"method\", props.method, props, null),\n setProp(domElement, tag, \"target\", props.target, props, null)));\n if (\n null == value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n value = sanitizeURL(value);\n domElement.setAttribute(key, value);\n break;\n case \"onClick\":\n null != value && (domElement.onclick = noop$1);\n return;\n case \"onScroll\":\n null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n return;\n case \"onScrollEnd\":\n null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n return;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(formatProdErrorMessage(61));\n key = value.__html;\n if (null != key) {\n if (null != props.children) throw Error(formatProdErrorMessage(60));\n (null != prevValue ? prevValue.__html : void 0) !== key &&\n (domElement.innerHTML = key);\n }\n }\n break;\n case \"multiple\":\n domElement.multiple =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"muted\":\n domElement.muted =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"autoFocus\":\n break;\n case \"xlinkHref\":\n if (\n null == value ||\n \"function\" === typeof value ||\n \"boolean\" === typeof value ||\n \"symbol\" === typeof value\n ) {\n domElement.removeAttribute(\"xlink:href\");\n break;\n }\n key = sanitizeURL(value);\n domElement.setAttributeNS(\n \"http://www.w3.org/1999/xlink\",\n \"xlink:href\",\n key\n );\n break;\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, value)\n : domElement.removeAttribute(key);\n break;\n case \"inert\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"credentialless\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\")\n : domElement.removeAttribute(key);\n break;\n case \"capture\":\n case \"download\":\n !0 === value\n ? domElement.setAttribute(key, \"\")\n : !1 !== value &&\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? domElement.setAttribute(key, value)\n : domElement.removeAttribute(key);\n break;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value &&\n !isNaN(value) &&\n 1 <= value\n ? domElement.setAttribute(key, value)\n : domElement.removeAttribute(key);\n break;\n case \"rowSpan\":\n case \"start\":\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n isNaN(value)\n ? domElement.removeAttribute(key)\n : domElement.setAttribute(key, value);\n break;\n case \"popover\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n setValueForAttribute(domElement, \"popover\", value);\n break;\n case \"xlinkActuate\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:actuate\",\n value\n );\n break;\n case \"xlinkArcrole\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:arcrole\",\n value\n );\n break;\n case \"xlinkRole\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:role\",\n value\n );\n break;\n case \"xlinkShow\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:show\",\n value\n );\n break;\n case \"xlinkTitle\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:title\",\n value\n );\n break;\n case \"xlinkType\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/1999/xlink\",\n \"xlink:type\",\n value\n );\n break;\n case \"xmlBase\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:base\",\n value\n );\n break;\n case \"xmlLang\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:lang\",\n value\n );\n break;\n case \"xmlSpace\":\n setValueForNamespacedAttribute(\n domElement,\n \"http://www.w3.org/XML/1998/namespace\",\n \"xml:space\",\n value\n );\n break;\n case \"is\":\n setValueForAttribute(domElement, \"is\", value);\n break;\n case \"innerText\":\n case \"textContent\":\n return;\n default:\n if (\n !(2 < key.length) ||\n (\"o\" !== key[0] && \"O\" !== key[0]) ||\n (\"n\" !== key[1] && \"N\" !== key[1])\n )\n (key = aliases.get(key) || key),\n setValueForAttribute(domElement, key, value);\n else return;\n }\n viewTransitionMutationContext = !0;\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n return;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(formatProdErrorMessage(61));\n key = value.__html;\n if (null != key) {\n if (null != props.children) throw Error(formatProdErrorMessage(60));\n (null != prevValue ? prevValue.__html : void 0) !== key &&\n (domElement.innerHTML = key);\n }\n }\n break;\n case \"children\":\n if (\"string\" === typeof value) setTextContent(domElement, value);\n else if (\"number\" === typeof value || \"bigint\" === typeof value)\n setTextContent(domElement, \"\" + value);\n else return;\n break;\n case \"onScroll\":\n null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n return;\n case \"onScrollEnd\":\n null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n return;\n case \"onClick\":\n null != value && (domElement.onclick = noop$1);\n return;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"innerHTML\":\n case \"ref\":\n return;\n case \"innerText\":\n case \"textContent\":\n return;\n default:\n if (!registrationNameDependencies.hasOwnProperty(key))\n a: {\n if (\n \"o\" === key[0] &&\n \"n\" === key[1] &&\n ((props = key.endsWith(\"Capture\")),\n (prevValue = key.slice(2, props ? key.length - 7 : void 0)),\n (tag = domElement[internalPropsKey] || null),\n (tag = null != tag ? tag[key] : null),\n \"function\" === typeof tag &&\n domElement.removeEventListener(prevValue, tag, props),\n \"function\" === typeof value)\n ) {\n \"function\" !== typeof tag &&\n null !== tag &&\n (key in domElement\n ? (domElement[key] = null)\n : domElement.hasAttribute(key) &&\n domElement.removeAttribute(key));\n domElement.addEventListener(prevValue, value, props);\n break a;\n }\n viewTransitionMutationContext = !0;\n key in domElement\n ? (domElement[key] = value)\n : !0 === value\n ? domElement.setAttribute(key, \"\")\n : setValueForAttribute(domElement, key, value);\n }\n return;\n }\n viewTransitionMutationContext = !0;\n}\nfunction setInitialProperties(domElement, tag, props) {\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"img\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n var hasSrc = !1,\n hasSrcSet = !1,\n propKey;\n for (propKey in props)\n if (props.hasOwnProperty(propKey)) {\n var propValue = props[propKey];\n if (null != propValue)\n switch (propKey) {\n case \"src\":\n hasSrc = !0;\n break;\n case \"srcSet\":\n hasSrcSet = !0;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(formatProdErrorMessage(137, tag));\n default:\n setProp(domElement, tag, propKey, propValue, props, null);\n }\n }\n hasSrcSet &&\n setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n return;\n case \"input\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n var defaultValue = (propKey = propValue = hasSrcSet = null),\n checked = null,\n defaultChecked = null;\n for (hasSrc in props)\n if (props.hasOwnProperty(hasSrc)) {\n var propValue$204 = props[hasSrc];\n if (null != propValue$204)\n switch (hasSrc) {\n case \"name\":\n hasSrcSet = propValue$204;\n break;\n case \"type\":\n propValue = propValue$204;\n break;\n case \"checked\":\n checked = propValue$204;\n break;\n case \"defaultChecked\":\n defaultChecked = propValue$204;\n break;\n case \"value\":\n propKey = propValue$204;\n break;\n case \"defaultValue\":\n defaultValue = propValue$204;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propValue$204)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n setProp(domElement, tag, hasSrc, propValue$204, props, null);\n }\n }\n initInput(\n domElement,\n propKey,\n defaultValue,\n checked,\n defaultChecked,\n propValue,\n hasSrcSet,\n !1\n );\n return;\n case \"select\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n hasSrc = propValue = propKey = null;\n for (hasSrcSet in props)\n if (\n props.hasOwnProperty(hasSrcSet) &&\n ((defaultValue = props[hasSrcSet]), null != defaultValue)\n )\n switch (hasSrcSet) {\n case \"value\":\n propKey = defaultValue;\n break;\n case \"defaultValue\":\n propValue = defaultValue;\n break;\n case \"multiple\":\n hasSrc = defaultValue;\n default:\n setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n }\n tag = propKey;\n props = propValue;\n domElement.multiple = !!hasSrc;\n null != tag\n ? updateOptions(domElement, !!hasSrc, tag, !1)\n : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n return;\n case \"textarea\":\n listenToNonDelegatedEvent(\"invalid\", domElement);\n propKey = hasSrcSet = hasSrc = null;\n for (propValue in props)\n if (\n props.hasOwnProperty(propValue) &&\n ((defaultValue = props[propValue]), null != defaultValue)\n )\n switch (propValue) {\n case \"value\":\n hasSrc = defaultValue;\n break;\n case \"defaultValue\":\n hasSrcSet = defaultValue;\n break;\n case \"children\":\n propKey = defaultValue;\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n break;\n default:\n setProp(domElement, tag, propValue, defaultValue, props, null);\n }\n initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n return;\n case \"option\":\n for (checked in props)\n if (\n props.hasOwnProperty(checked) &&\n ((hasSrc = props[checked]), null != hasSrc)\n )\n switch (checked) {\n case \"selected\":\n domElement.selected =\n hasSrc &&\n \"function\" !== typeof hasSrc &&\n \"symbol\" !== typeof hasSrc;\n break;\n default:\n setProp(domElement, tag, checked, hasSrc, props, null);\n }\n return;\n case \"dialog\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n listenToNonDelegatedEvent(\"cancel\", domElement);\n listenToNonDelegatedEvent(\"close\", domElement);\n break;\n case \"iframe\":\n case \"object\":\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"video\":\n case \"audio\":\n for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n break;\n case \"image\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", domElement);\n break;\n case \"embed\":\n case \"source\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", domElement),\n listenToNonDelegatedEvent(\"load\", domElement);\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (defaultChecked in props)\n if (\n props.hasOwnProperty(defaultChecked) &&\n ((hasSrc = props[defaultChecked]), null != hasSrc)\n )\n switch (defaultChecked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(formatProdErrorMessage(137, tag));\n default:\n setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (propValue$204 in props)\n props.hasOwnProperty(propValue$204) &&\n ((hasSrc = props[propValue$204]),\n void 0 !== hasSrc &&\n setPropOnCustomElement(\n domElement,\n tag,\n propValue$204,\n hasSrc,\n props,\n void 0\n ));\n return;\n }\n }\n for (defaultValue in props)\n props.hasOwnProperty(defaultValue) &&\n ((hasSrc = props[defaultValue]),\n null != hasSrc &&\n setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nvar emptyProps = {};\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"input\":\n var name = null,\n type = null,\n value = null,\n defaultValue = null,\n lastDefaultValue = null,\n checked = null,\n defaultChecked = null;\n for (propKey in lastProps) {\n var lastProp = lastProps[propKey];\n if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n switch (propKey) {\n case \"checked\":\n break;\n case \"value\":\n break;\n case \"defaultValue\":\n lastDefaultValue = lastProp;\n default:\n nextProps.hasOwnProperty(propKey) ||\n setProp(domElement, tag, propKey, null, nextProps, lastProp);\n }\n }\n for (var propKey$221 in nextProps) {\n var propKey = nextProps[propKey$221];\n lastProp = lastProps[propKey$221];\n if (\n nextProps.hasOwnProperty(propKey$221) &&\n (null != propKey || null != lastProp)\n )\n switch (propKey$221) {\n case \"type\":\n propKey !== lastProp && (viewTransitionMutationContext = !0);\n type = propKey;\n break;\n case \"name\":\n propKey !== lastProp && (viewTransitionMutationContext = !0);\n name = propKey;\n break;\n case \"checked\":\n propKey !== lastProp && (viewTransitionMutationContext = !0);\n checked = propKey;\n break;\n case \"defaultChecked\":\n propKey !== lastProp && (viewTransitionMutationContext = !0);\n defaultChecked = propKey;\n break;\n case \"value\":\n propKey !== lastProp && (viewTransitionMutationContext = !0);\n value = propKey;\n break;\n case \"defaultValue\":\n propKey !== lastProp && (viewTransitionMutationContext = !0);\n defaultValue = propKey;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n propKey !== lastProp &&\n setProp(\n domElement,\n tag,\n propKey$221,\n propKey,\n nextProps,\n lastProp\n );\n }\n }\n updateInput(\n domElement,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n );\n return;\n case \"select\":\n propKey = value = defaultValue = propKey$221 = null;\n for (type in lastProps)\n if (\n ((lastDefaultValue = lastProps[type]),\n lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n )\n switch (type) {\n case \"value\":\n break;\n case \"multiple\":\n propKey = lastDefaultValue;\n default:\n nextProps.hasOwnProperty(type) ||\n setProp(\n domElement,\n tag,\n type,\n null,\n nextProps,\n lastDefaultValue\n );\n }\n for (name in nextProps)\n if (\n ((type = nextProps[name]),\n (lastDefaultValue = lastProps[name]),\n nextProps.hasOwnProperty(name) &&\n (null != type || null != lastDefaultValue))\n )\n switch (name) {\n case \"value\":\n type !== lastDefaultValue && (viewTransitionMutationContext = !0);\n propKey$221 = type;\n break;\n case \"defaultValue\":\n type !== lastDefaultValue && (viewTransitionMutationContext = !0);\n defaultValue = type;\n break;\n case \"multiple\":\n type !== lastDefaultValue && (viewTransitionMutationContext = !0),\n (value = type);\n default:\n type !== lastDefaultValue &&\n setProp(\n domElement,\n tag,\n name,\n type,\n nextProps,\n lastDefaultValue\n );\n }\n tag = defaultValue;\n lastProps = value;\n nextProps = propKey;\n null != propKey$221\n ? updateOptions(domElement, !!lastProps, propKey$221, !1)\n : !!nextProps !== !!lastProps &&\n (null != tag\n ? updateOptions(domElement, !!lastProps, tag, !0)\n : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n return;\n case \"textarea\":\n propKey = propKey$221 = null;\n for (defaultValue in lastProps)\n if (\n ((name = lastProps[defaultValue]),\n lastProps.hasOwnProperty(defaultValue) &&\n null != name &&\n !nextProps.hasOwnProperty(defaultValue))\n )\n switch (defaultValue) {\n case \"value\":\n break;\n case \"children\":\n break;\n default:\n setProp(domElement, tag, defaultValue, null, nextProps, name);\n }\n for (value in nextProps)\n if (\n ((name = nextProps[value]),\n (type = lastProps[value]),\n nextProps.hasOwnProperty(value) && (null != name || null != type))\n )\n switch (value) {\n case \"value\":\n name !== type && (viewTransitionMutationContext = !0);\n propKey$221 = name;\n break;\n case \"defaultValue\":\n name !== type && (viewTransitionMutationContext = !0);\n propKey = name;\n break;\n case \"children\":\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != name) throw Error(formatProdErrorMessage(91));\n break;\n default:\n name !== type &&\n setProp(domElement, tag, value, name, nextProps, type);\n }\n updateTextarea(domElement, propKey$221, propKey);\n return;\n case \"option\":\n for (var propKey$237 in lastProps)\n if (\n ((propKey$221 = lastProps[propKey$237]),\n lastProps.hasOwnProperty(propKey$237) &&\n null != propKey$221 &&\n !nextProps.hasOwnProperty(propKey$237))\n )\n switch (propKey$237) {\n case \"selected\":\n domElement.selected = !1;\n break;\n default:\n setProp(\n domElement,\n tag,\n propKey$237,\n null,\n nextProps,\n propKey$221\n );\n }\n for (lastDefaultValue in nextProps)\n if (\n ((propKey$221 = nextProps[lastDefaultValue]),\n (propKey = lastProps[lastDefaultValue]),\n nextProps.hasOwnProperty(lastDefaultValue) &&\n propKey$221 !== propKey &&\n (null != propKey$221 || null != propKey))\n )\n switch (lastDefaultValue) {\n case \"selected\":\n propKey$221 !== propKey && (viewTransitionMutationContext = !0);\n domElement.selected =\n propKey$221 &&\n \"function\" !== typeof propKey$221 &&\n \"symbol\" !== typeof propKey$221;\n break;\n default:\n setProp(\n domElement,\n tag,\n lastDefaultValue,\n propKey$221,\n nextProps,\n propKey\n );\n }\n return;\n case \"img\":\n case \"link\":\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"embed\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"source\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (var propKey$242 in lastProps)\n (propKey$221 = lastProps[propKey$242]),\n lastProps.hasOwnProperty(propKey$242) &&\n null != propKey$221 &&\n !nextProps.hasOwnProperty(propKey$242) &&\n setProp(domElement, tag, propKey$242, null, nextProps, propKey$221);\n for (checked in nextProps)\n if (\n ((propKey$221 = nextProps[checked]),\n (propKey = lastProps[checked]),\n nextProps.hasOwnProperty(checked) &&\n propKey$221 !== propKey &&\n (null != propKey$221 || null != propKey))\n )\n switch (checked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey$221)\n throw Error(formatProdErrorMessage(137, tag));\n break;\n default:\n setProp(\n domElement,\n tag,\n checked,\n propKey$221,\n nextProps,\n propKey\n );\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (var propKey$247 in lastProps)\n (propKey$221 = lastProps[propKey$247]),\n lastProps.hasOwnProperty(propKey$247) &&\n void 0 !== propKey$221 &&\n !nextProps.hasOwnProperty(propKey$247) &&\n setPropOnCustomElement(\n domElement,\n tag,\n propKey$247,\n void 0,\n nextProps,\n propKey$221\n );\n for (defaultChecked in nextProps)\n (propKey$221 = nextProps[defaultChecked]),\n (propKey = lastProps[defaultChecked]),\n !nextProps.hasOwnProperty(defaultChecked) ||\n propKey$221 === propKey ||\n (void 0 === propKey$221 && void 0 === propKey) ||\n setPropOnCustomElement(\n domElement,\n tag,\n defaultChecked,\n propKey$221,\n nextProps,\n propKey\n );\n return;\n }\n }\n for (var propKey$252 in lastProps)\n (propKey$221 = lastProps[propKey$252]),\n lastProps.hasOwnProperty(propKey$252) &&\n null != propKey$221 &&\n !nextProps.hasOwnProperty(propKey$252) &&\n setProp(domElement, tag, propKey$252, null, nextProps, propKey$221);\n for (lastProp in nextProps)\n (propKey$221 = nextProps[lastProp]),\n (propKey = lastProps[lastProp]),\n !nextProps.hasOwnProperty(lastProp) ||\n propKey$221 === propKey ||\n (null == propKey$221 && null == propKey) ||\n setProp(domElement, tag, lastProp, propKey$221, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n switch (initiatorType) {\n case \"css\":\n case \"script\":\n case \"font\":\n case \"img\":\n case \"image\":\n case \"input\":\n case \"link\":\n return !0;\n default:\n return !1;\n }\n}\nfunction estimateBandwidth() {\n if (\"function\" === typeof performance.getEntriesByType) {\n for (\n var count = 0,\n bits = 0,\n resourceEntries = performance.getEntriesByType(\"resource\"),\n i = 0;\n i < resourceEntries.length;\n i++\n ) {\n var entry = resourceEntries[i],\n transferSize = entry.transferSize,\n initiatorType = entry.initiatorType,\n duration = entry.duration;\n if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n initiatorType = 0;\n duration = entry.responseEnd;\n for (i += 1; i < resourceEntries.length; i++) {\n var overlapEntry = resourceEntries[i],\n overlapStartTime = overlapEntry.startTime;\n if (overlapStartTime > duration) break;\n var overlapTransferSize = overlapEntry.transferSize,\n overlapInitiatorType = overlapEntry.initiatorType;\n overlapTransferSize &&\n isLikelyStaticResource(overlapInitiatorType) &&\n ((overlapEntry = overlapEntry.responseEnd),\n (initiatorType +=\n overlapTransferSize *\n (overlapEntry < duration\n ? 1\n : (duration - overlapStartTime) /\n (overlapEntry - overlapStartTime))));\n }\n --i;\n bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n count++;\n if (10 < count) break;\n }\n }\n if (0 < count) return bits / count / 1e6;\n }\n return navigator.connection &&\n ((count = navigator.connection.downlink), \"number\" === typeof count)\n ? count\n : 5;\n}\nvar eventsEnabled = null,\n selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n return 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n switch (namespaceURI) {\n case \"http://www.w3.org/2000/svg\":\n return 1;\n case \"http://www.w3.org/1998/Math/MathML\":\n return 2;\n default:\n return 0;\n }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n if (0 === parentNamespace)\n switch (type) {\n case \"svg\":\n return 1;\n case \"math\":\n return 2;\n default:\n return 0;\n }\n return 1 === parentNamespace && \"foreignObject\" === type\n ? 0\n : parentNamespace;\n}\nfunction createHoistableInstance(\n type,\n props,\n rootContainerInstance,\n internalInstanceHandle\n) {\n rootContainerInstance = getOwnerDocumentFromRootContainer(\n rootContainerInstance\n ).createElement(type);\n rootContainerInstance[internalInstanceKey] = internalInstanceHandle;\n rootContainerInstance[internalPropsKey] = props;\n setInitialProperties(rootContainerInstance, type, props);\n markNodeAsHoistable(rootContainerInstance);\n return rootContainerInstance;\n}\nfunction shouldSetTextContent(type, props) {\n return (\n \"textarea\" === type ||\n \"noscript\" === type ||\n \"string\" === typeof props.children ||\n \"number\" === typeof props.children ||\n \"bigint\" === typeof props.children ||\n (\"object\" === typeof props.dangerouslySetInnerHTML &&\n null !== props.dangerouslySetInnerHTML &&\n null != props.dangerouslySetInnerHTML.__html)\n );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n var event = window.event;\n if (event && \"popstate\" === event.type) {\n if (event === currentPopstateTransitionEvent) return !1;\n currentPopstateTransitionEvent = event;\n return !0;\n }\n currentPopstateTransitionEvent = null;\n return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n localPromise = \"function\" === typeof Promise ? Promise : void 0,\n localRequestAnimationFrame =\n \"function\" === typeof requestAnimationFrame\n ? requestAnimationFrame\n : scheduleTimeout,\n scheduleMicrotask =\n \"function\" === typeof queueMicrotask\n ? queueMicrotask\n : \"undefined\" !== typeof localPromise\n ? function (callback) {\n return localPromise\n .resolve(null)\n .then(callback)\n .catch(handleErrorInNextTick);\n }\n : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n}\nfunction isSingletonScope(type) {\n return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n var node = hydrationInstance,\n depth = 0;\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n if (0 === depth) {\n parentInstance.removeChild(nextNode);\n retryIfBlockedOn(hydrationInstance);\n return;\n }\n depth--;\n } else if (\n \"$\" === node ||\n \"$?\" === node ||\n \"$~\" === node ||\n \"$!\" === node ||\n \"&\" === node\n )\n depth++;\n else if (\"html\" === node)\n clearSingletonPreambleContribution(\n parentInstance.ownerDocument.documentElement\n );\n else if (\"head\" === node) {\n node = parentInstance.ownerDocument.head;\n clearSingletonPreambleContribution(node);\n for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n nodeName = node$jscomp$0.nodeName;\n node$jscomp$0[internalHoistableMarker] ||\n \"SCRIPT\" === nodeName ||\n \"STYLE\" === nodeName ||\n (\"LINK\" === nodeName &&\n \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n node.removeChild(node$jscomp$0);\n node$jscomp$0 = nextNode$jscomp$0;\n }\n } else\n \"body\" === node &&\n clearSingletonPreambleContribution(parentInstance.ownerDocument.body);\n node = nextNode;\n } while (node);\n retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n var node = suspenseInstance;\n suspenseInstance = 0;\n do {\n var nextNode = node.nextSibling;\n 1 === node.nodeType\n ? isHidden\n ? ((node._stashedDisplay = node.style.display),\n (node.style.display = \"none\"))\n : ((node.style.display = node._stashedDisplay || \"\"),\n \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n : 3 === node.nodeType &&\n (isHidden\n ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n : (node.nodeValue = node._stashedText || \"\"));\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), \"/$\" === node))\n if (0 === suspenseInstance) break;\n else suspenseInstance--;\n else\n (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n suspenseInstance++;\n node = nextNode;\n } while (node);\n}\nfunction applyViewTransitionName(instance, name, className) {\n name = CSS.escape(name) !== name ? \"r-\" + btoa(name).replace(/=/g, \"\") : name;\n instance.style.viewTransitionName = name;\n null != className && (instance.style.viewTransitionClass = className);\n className = getComputedStyle(instance);\n if (\"inline\" === className.display) {\n name = instance.getClientRects();\n if (1 === name.length) var JSCompiler_inline_result = 1;\n else\n for (var i = (JSCompiler_inline_result = 0); i < name.length; i++) {\n var rect = name[i];\n 0 < rect.width && 0 < rect.height && JSCompiler_inline_result++;\n }\n 1 === JSCompiler_inline_result &&\n ((instance = instance.style),\n (instance.display = 1 === name.length ? \"inline-block\" : \"block\"),\n (instance.marginTop = \"-\" + className.paddingTop),\n (instance.marginBottom = \"-\" + className.paddingBottom));\n }\n}\nfunction restoreViewTransitionName(instance, props) {\n instance = instance.style;\n props = props.style;\n var viewTransitionName =\n null != props\n ? props.hasOwnProperty(\"viewTransitionName\")\n ? props.viewTransitionName\n : props.hasOwnProperty(\"view-transition-name\")\n ? props[\"view-transition-name\"]\n : null\n : null;\n instance.viewTransitionName =\n null == viewTransitionName || \"boolean\" === typeof viewTransitionName\n ? \"\"\n : (\"\" + viewTransitionName).trim();\n viewTransitionName =\n null != props\n ? props.hasOwnProperty(\"viewTransitionClass\")\n ? props.viewTransitionClass\n : props.hasOwnProperty(\"view-transition-class\")\n ? props[\"view-transition-class\"]\n : null\n : null;\n instance.viewTransitionClass =\n null == viewTransitionName || \"boolean\" === typeof viewTransitionName\n ? \"\"\n : (\"\" + viewTransitionName).trim();\n \"inline-block\" === instance.display &&\n (null == props\n ? (instance.display = instance.margin = \"\")\n : ((viewTransitionName = props.display),\n (instance.display =\n null == viewTransitionName || \"boolean\" === typeof viewTransitionName\n ? \"\"\n : viewTransitionName),\n (viewTransitionName = props.margin),\n null != viewTransitionName\n ? (instance.margin = viewTransitionName)\n : ((viewTransitionName = props.hasOwnProperty(\"marginTop\")\n ? props.marginTop\n : props[\"margin-top\"]),\n (instance.marginTop =\n null == viewTransitionName ||\n \"boolean\" === typeof viewTransitionName\n ? \"\"\n : viewTransitionName),\n (props = props.hasOwnProperty(\"marginBottom\")\n ? props.marginBottom\n : props[\"margin-bottom\"]),\n (instance.marginBottom =\n null == props || \"boolean\" === typeof props ? \"\" : props))));\n}\nfunction createMeasurement(rect, computedStyle, element) {\n element = element.ownerDocument.defaultView;\n return {\n rect: rect,\n abs:\n \"absolute\" === computedStyle.position ||\n \"fixed\" === computedStyle.position,\n clip:\n \"none\" !== computedStyle.clipPath ||\n \"visible\" !== computedStyle.overflow ||\n \"none\" !== computedStyle.filter ||\n \"none\" !== computedStyle.mask ||\n \"none\" !== computedStyle.mask ||\n \"0px\" !== computedStyle.borderRadius,\n view:\n 0 <= rect.bottom &&\n 0 <= rect.right &&\n rect.top <= element.innerHeight &&\n rect.left <= element.innerWidth\n };\n}\nfunction measureInstance(instance) {\n var rect = instance.getBoundingClientRect(),\n computedStyle = getComputedStyle(instance);\n return createMeasurement(rect, computedStyle, instance);\n}\nfunction measureClonedInstance(instance) {\n var measuredRect = instance.getBoundingClientRect();\n measuredRect = new DOMRect(\n measuredRect.x + 2e4,\n measuredRect.y + 2e4,\n measuredRect.width,\n measuredRect.height\n );\n var computedStyle = getComputedStyle(instance);\n return createMeasurement(measuredRect, computedStyle, instance);\n}\nfunction forceLayout(ownerDocument) {\n return ownerDocument.documentElement.clientHeight;\n}\nfunction waitForImageToLoad(resolve) {\n this.addEventListener(\"load\", resolve);\n this.addEventListener(\"error\", resolve);\n}\nfunction startViewTransition(\n suspendedState,\n rootContainer,\n transitionTypes,\n mutationCallback,\n layoutCallback,\n afterMutationCallback,\n spawnedWorkCallback,\n passiveCallback,\n errorCallback\n) {\n var ownerDocument =\n 9 === rootContainer.nodeType ? rootContainer : rootContainer.ownerDocument;\n try {\n var transition = ownerDocument.startViewTransition({\n update: function () {\n var ownerWindow = ownerDocument.defaultView,\n pendingNavigation =\n ownerWindow.navigation && ownerWindow.navigation.transition,\n previousFontLoadingStatus = ownerDocument.fonts.status;\n mutationCallback();\n var blockingPromises = [];\n \"loaded\" === previousFontLoadingStatus &&\n (forceLayout(ownerDocument),\n \"loading\" === ownerDocument.fonts.status &&\n blockingPromises.push(ownerDocument.fonts.ready));\n previousFontLoadingStatus = blockingPromises.length;\n if (null !== suspendedState)\n for (\n var suspenseyImages = suspendedState.suspenseyImages,\n imgBytes = 0,\n i = 0;\n i < suspenseyImages.length;\n i++\n ) {\n var suspenseyImage = suspenseyImages[i];\n if (!suspenseyImage.complete) {\n var rect = suspenseyImage.getBoundingClientRect();\n if (\n 0 < rect.bottom &&\n 0 < rect.right &&\n rect.top < ownerWindow.innerHeight &&\n rect.left < ownerWindow.innerWidth\n ) {\n imgBytes += estimateImageBytes(suspenseyImage);\n if (imgBytes > estimatedBytesWithinLimit) {\n blockingPromises.length = previousFontLoadingStatus;\n break;\n }\n suspenseyImage = new Promise(\n waitForImageToLoad.bind(suspenseyImage)\n );\n blockingPromises.push(suspenseyImage);\n }\n }\n }\n if (0 < blockingPromises.length)\n return (\n (ownerWindow = Promise.race([\n Promise.all(blockingPromises),\n new Promise(function (resolve) {\n return setTimeout(resolve, 500);\n })\n ]).then(layoutCallback, layoutCallback)),\n (pendingNavigation\n ? Promise.allSettled([pendingNavigation.finished, ownerWindow])\n : ownerWindow\n ).then(afterMutationCallback, afterMutationCallback)\n );\n layoutCallback();\n if (pendingNavigation)\n return pendingNavigation.finished.then(\n afterMutationCallback,\n afterMutationCallback\n );\n afterMutationCallback();\n },\n types: transitionTypes\n });\n ownerDocument.__reactViewTransition = transition;\n var viewTransitionAnimations = [];\n transition.ready.then(\n function () {\n for (\n var animations = ownerDocument.documentElement.getAnimations({\n subtree: !0\n }),\n i = 0;\n i < animations.length;\n i++\n ) {\n var animation = animations[i],\n effect = animation.effect,\n pseudoElement = effect.pseudoElement;\n if (\n null != pseudoElement &&\n pseudoElement.startsWith(\"::view-transition\")\n ) {\n viewTransitionAnimations.push(animation);\n animation = effect.getKeyframes();\n for (\n var height = (pseudoElement = void 0),\n unchangedDimensions = !0,\n j = 0;\n j < animation.length;\n j++\n ) {\n var keyframe = animation[j],\n w = keyframe.width;\n if (void 0 === pseudoElement) pseudoElement = w;\n else if (pseudoElement !== w) {\n unchangedDimensions = !1;\n break;\n }\n w = keyframe.height;\n if (void 0 === height) height = w;\n else if (height !== w) {\n unchangedDimensions = !1;\n break;\n }\n delete keyframe.width;\n delete keyframe.height;\n \"none\" === keyframe.transform && delete keyframe.transform;\n }\n unchangedDimensions &&\n void 0 !== pseudoElement &&\n void 0 !== height &&\n (effect.setKeyframes(animation),\n (unchangedDimensions = getComputedStyle(\n effect.target,\n effect.pseudoElement\n )),\n unchangedDimensions.width !== pseudoElement ||\n unchangedDimensions.height !== height) &&\n ((unchangedDimensions = animation[0]),\n (unchangedDimensions.width = pseudoElement),\n (unchangedDimensions.height = height),\n (unchangedDimensions = animation[animation.length - 1]),\n (unchangedDimensions.width = pseudoElement),\n (unchangedDimensions.height = height),\n effect.setKeyframes(animation));\n }\n }\n spawnedWorkCallback();\n },\n function (error) {\n ownerDocument.__reactViewTransition === transition &&\n (ownerDocument.__reactViewTransition = null);\n try {\n if (\"object\" === typeof error && null !== error)\n switch (error.name) {\n case \"InvalidStateError\":\n if (\n \"View transition was skipped because document visibility state is hidden.\" ===\n error.message ||\n \"Skipping view transition because document visibility state has become hidden.\" ===\n error.message ||\n \"Skipping view transition because viewport size changed.\" ===\n error.message ||\n \"Transition was aborted because of invalid state\" ===\n error.message\n )\n error = null;\n }\n null !== error && errorCallback(error);\n } finally {\n mutationCallback(), layoutCallback(), spawnedWorkCallback();\n }\n }\n );\n transition.finished.finally(function () {\n for (var i = 0; i < viewTransitionAnimations.length; i++)\n viewTransitionAnimations[i].cancel();\n ownerDocument.__reactViewTransition === transition &&\n (ownerDocument.__reactViewTransition = null);\n passiveCallback();\n });\n return transition;\n } catch (x) {\n return mutationCallback(), layoutCallback(), spawnedWorkCallback(), null;\n }\n}\nfunction ViewTransitionPseudoElement(pseudo, name) {\n this._scope = document.documentElement;\n this._selector = \"::view-transition-\" + pseudo + \"(\" + name + \")\";\n}\nViewTransitionPseudoElement.prototype.animate = function (keyframes, options) {\n options =\n \"number\" === typeof options ? { duration: options } : assign({}, options);\n options.pseudoElement = this._selector;\n return this._scope.animate(keyframes, options);\n};\nViewTransitionPseudoElement.prototype.getAnimations = function () {\n for (\n var scope = this._scope,\n selector = this._selector,\n animations = scope.getAnimations({ subtree: !0 }),\n result = [],\n i = 0;\n i < animations.length;\n i++\n ) {\n var effect = animations[i].effect;\n null !== effect &&\n effect.target === scope &&\n effect.pseudoElement === selector &&\n result.push(animations[i]);\n }\n return result;\n};\nViewTransitionPseudoElement.prototype.getComputedStyle = function () {\n return getComputedStyle(this._scope, this._selector);\n};\nfunction createViewTransitionInstance(name) {\n return {\n name: name,\n group: new ViewTransitionPseudoElement(\"group\", name),\n imagePair: new ViewTransitionPseudoElement(\"image-pair\", name),\n old: new ViewTransitionPseudoElement(\"old\", name),\n new: new ViewTransitionPseudoElement(\"new\", name)\n };\n}\nfunction FragmentInstance(fragmentFiber) {\n this._fragmentFiber = fragmentFiber;\n this._observers = this._eventListeners = null;\n}\nFragmentInstance.prototype.addEventListener = function (\n type,\n listener,\n optionsOrUseCapture\n) {\n var signal = null,\n cleanup = null;\n if (\n null != optionsOrUseCapture &&\n \"boolean\" !== typeof optionsOrUseCapture &&\n ((signal = optionsOrUseCapture.signal || null),\n null !== signal && signal.aborted)\n )\n return;\n null === this._eventListeners && (this._eventListeners = []);\n var listeners = this._eventListeners;\n if (\n -1 === indexOfEventListener(listeners, type, listener, optionsOrUseCapture)\n ) {\n var fragmentInstance = this,\n attachedListener = listener;\n null != optionsOrUseCapture &&\n \"boolean\" !== typeof optionsOrUseCapture &&\n !0 === optionsOrUseCapture.once &&\n (attachedListener = function (event) {\n fragmentInstance.removeEventListener(\n type,\n listener,\n optionsOrUseCapture\n );\n \"function\" === typeof listener\n ? listener.call(this, event)\n : listener.handleEvent(event);\n });\n null !== signal &&\n ((cleanup = fragmentInstance.removeEventListener.bind(\n fragmentInstance,\n type,\n listener,\n optionsOrUseCapture\n )),\n signal.addEventListener(\"abort\", cleanup, { once: !0 }),\n (cleanup = signal.removeEventListener.bind(signal, \"abort\", cleanup)));\n signal = getAttachOptions(optionsOrUseCapture);\n listeners.push({\n type: type,\n listener: listener,\n optionsOrUseCapture: optionsOrUseCapture,\n attachedListener: attachedListener,\n cleanup: cleanup\n });\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !1,\n addEventListenerToChild,\n type,\n attachedListener,\n signal\n );\n }\n this._eventListeners = listeners;\n};\nfunction addEventListenerToChild(child, type, listener, optionsOrUseCapture) {\n getInstanceFromHostFiber(child).addEventListener(\n type,\n listener,\n optionsOrUseCapture\n );\n return !1;\n}\nFragmentInstance.prototype.removeEventListener = function (\n type,\n listener,\n optionsOrUseCapture\n) {\n var listeners = this._eventListeners;\n if (\n null !== listeners &&\n ((listener = indexOfEventListener(\n listeners,\n type,\n listener,\n optionsOrUseCapture\n )),\n -1 !== listener)\n ) {\n var _listeners$index = listeners[listener];\n optionsOrUseCapture = _listeners$index.attachedListener;\n var cleanup = _listeners$index.cleanup;\n _listeners$index = getAttachOptions(_listeners$index.optionsOrUseCapture);\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !1,\n removeEventListenerFromChild,\n type,\n optionsOrUseCapture,\n _listeners$index\n );\n listeners.splice(listener, 1);\n null !== cleanup && cleanup();\n }\n};\nfunction removeEventListenerFromChild(\n child,\n type,\n listener,\n optionsOrUseCapture\n) {\n getInstanceFromHostFiber(child).removeEventListener(\n type,\n listener,\n optionsOrUseCapture\n );\n return !1;\n}\nfunction getAttachOptions(opts) {\n return null != opts &&\n \"boolean\" !== typeof opts &&\n (!0 === opts.once || opts.signal instanceof AbortSignal)\n ? { capture: opts.capture, passive: opts.passive }\n : opts;\n}\nfunction normalizeListenerOptions(opts) {\n return null == opts\n ? \"c=0\"\n : \"boolean\" === typeof opts\n ? \"c=\" + (opts ? \"1\" : \"0\")\n : \"c=\" + (opts.capture ? \"1\" : \"0\");\n}\nfunction indexOfEventListener(\n eventListeners,\n type,\n listener,\n optionsOrUseCapture\n) {\n if (0 === eventListeners.length) return -1;\n optionsOrUseCapture = normalizeListenerOptions(optionsOrUseCapture);\n for (var i = 0; i < eventListeners.length; i++) {\n var item = eventListeners[i];\n if (\n item.type === type &&\n item.listener === listener &&\n normalizeListenerOptions(item.optionsOrUseCapture) === optionsOrUseCapture\n )\n return i;\n }\n return -1;\n}\nFragmentInstance.prototype.dispatchEvent = function (event) {\n var parentHostFiber = getFragmentParentInstanceOrContainerFiber(\n this._fragmentFiber\n );\n if (null === parentHostFiber) return !0;\n parentHostFiber = getInstanceFromHostFiber(parentHostFiber);\n var eventListeners = this._eventListeners;\n if (\n (null !== eventListeners && 0 < eventListeners.length) ||\n !event.bubbles\n ) {\n var temp =\n 9 === parentHostFiber.nodeType\n ? parentHostFiber.createComment(\"\")\n : document.createTextNode(\"\");\n if (eventListeners)\n for (var i = 0; i < eventListeners.length; i++) {\n var _eventListeners$i = eventListeners[i];\n temp.addEventListener(\n _eventListeners$i.type,\n _eventListeners$i.attachedListener,\n getAttachOptions(_eventListeners$i.optionsOrUseCapture)\n );\n }\n parentHostFiber.appendChild(temp);\n event = temp.dispatchEvent(event);\n if (eventListeners)\n for (i = 0; i < eventListeners.length; i++)\n (_eventListeners$i = eventListeners[i]),\n temp.removeEventListener(\n _eventListeners$i.type,\n _eventListeners$i.attachedListener,\n getAttachOptions(_eventListeners$i.optionsOrUseCapture)\n );\n parentHostFiber.removeChild(temp);\n return event;\n }\n return parentHostFiber.dispatchEvent(event);\n};\nFragmentInstance.prototype.focus = function (focusOptions) {\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !0,\n setFocusOnFiberIfFocusable,\n focusOptions,\n void 0,\n void 0\n );\n};\nfunction setFocusOnFiberIfFocusable(fiber, focusOptions) {\n if (6 === fiber.tag) return !1;\n fiber = getInstanceFromHostFiber(fiber);\n return setFocusIfFocusable(fiber, focusOptions);\n}\nFragmentInstance.prototype.focusLast = function (focusOptions) {\n var children = [];\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !0,\n collectChildren,\n children,\n void 0,\n void 0\n );\n for (\n var i = children.length - 1;\n 0 <= i && !setFocusOnFiberIfFocusable(children[i], focusOptions);\n i--\n );\n};\nfunction collectChildren(child, collection) {\n collection.push(child);\n return !1;\n}\nFragmentInstance.prototype.blur = function () {\n var parentHostFiber = getFragmentParentInstanceOrContainerFiber(\n this._fragmentFiber\n );\n null !== parentHostFiber &&\n ((parentHostFiber = getInstanceFromHostFiber(parentHostFiber)),\n (parentHostFiber =\n getOwnerDocumentFromRootContainer(parentHostFiber).activeElement),\n null !== parentHostFiber &&\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !1,\n blurActiveElementWithinFragment,\n parentHostFiber,\n void 0,\n void 0\n ));\n};\nfunction blurActiveElementWithinFragment(child, activeElement) {\n if (6 === child.tag) return !1;\n child = getInstanceFromHostFiber(child);\n return child === activeElement || child.contains(activeElement)\n ? (activeElement.blur(), !0)\n : !1;\n}\nFragmentInstance.prototype.observeUsing = function (observer) {\n null === this._observers && (this._observers = new Set());\n this._observers.add(observer);\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !1,\n observeChild,\n observer,\n void 0,\n void 0\n );\n};\nfunction observeChild(child, observer) {\n if (6 === child.tag) return !1;\n child = getInstanceFromHostFiber(child);\n observer.observe(child);\n return !1;\n}\nFragmentInstance.prototype.unobserveUsing = function (observer) {\n var observers = this._observers;\n if (null !== observers && observers.has(observer)) {\n observers.delete(observer);\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !1,\n unobserveChild,\n observer,\n void 0,\n void 0\n );\n for (\n var i = (observers = 0);\n i < pendingIntersectionUnobserves.length;\n i++\n ) {\n var pending = pendingIntersectionUnobserves[i];\n pending.fragmentInstance === this && pending.observer === observer\n ? observer.unobserve(pending.instance)\n : (pendingIntersectionUnobserves[observers++] = pending);\n }\n pendingIntersectionUnobserves.length = observers;\n }\n};\nfunction unobserveChild(child, observer) {\n if (6 === child.tag) return !1;\n child = getInstanceFromHostFiber(child);\n observer.unobserve(child);\n return !1;\n}\nvar pendingIntersectionUnobserves = [],\n intersectionUnobserveScheduled = !1;\nfunction schedulePendingIntersectionUnobserve(\n fragmentInstance,\n observer,\n instance\n) {\n pendingIntersectionUnobserves.push({\n fragmentInstance: fragmentInstance,\n observer: observer,\n instance: instance\n });\n intersectionUnobserveScheduled ||\n ((intersectionUnobserveScheduled = !0),\n requestPostPaintCallback(function () {\n intersectionUnobserveScheduled = !1;\n var pending = pendingIntersectionUnobserves;\n pendingIntersectionUnobserves = [];\n for (var i = 0; i < pending.length; i++) {\n var item = pending[i];\n item.observer.unobserve(item.instance);\n }\n }));\n}\nFragmentInstance.prototype.getClientRects = function () {\n var rects = [];\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !1,\n collectClientRects,\n rects,\n void 0,\n void 0\n );\n return rects;\n};\nfunction collectClientRects(child, rects) {\n if (6 === child.tag) {\n child = child.stateNode;\n var range = child.ownerDocument.createRange();\n range.selectNodeContents(child);\n rects.push.apply(rects, range.getClientRects());\n } else\n (child = getInstanceFromHostFiber(child)),\n rects.push.apply(rects, child.getClientRects());\n return !1;\n}\nFragmentInstance.prototype.getRootNode = function (getRootNodeOptions) {\n var parentHostFiber = getFragmentParentInstanceOrContainerFiber(\n this._fragmentFiber\n );\n return null === parentHostFiber\n ? this\n : getInstanceFromHostFiber(parentHostFiber).getRootNode(getRootNodeOptions);\n};\nFragmentInstance.prototype.compareDocumentPosition = function (otherNode) {\n var parentHostFiber = getFragmentParentInstanceOrContainerFiber(\n this._fragmentFiber\n );\n if (null === parentHostFiber) return Node.DOCUMENT_POSITION_DISCONNECTED;\n var children = [];\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !1,\n collectChildren,\n children,\n void 0,\n void 0\n );\n var parentHostInstance = getInstanceFromHostFiber(parentHostFiber);\n if (0 === children.length) {\n children = parentHostInstance;\n if (fiberIsPortaledIntoHost(this._fragmentFiber)) {\n a: {\n for (\n parentHostFiber = this._fragmentFiber.return;\n null !== parentHostFiber;\n\n ) {\n if (4 === parentHostFiber.tag) {\n parentHostFiber = parentHostFiber.stateNode.containerInfo;\n break a;\n }\n if (\n 3 === parentHostFiber.tag ||\n 5 === parentHostFiber.tag ||\n 27 === parentHostFiber.tag\n )\n break;\n parentHostFiber = parentHostFiber.return;\n }\n parentHostFiber = null;\n }\n null != parentHostFiber && (children = parentHostFiber);\n }\n parentHostFiber = this._fragmentFiber;\n var result = (parentHostInstance =\n children.compareDocumentPosition(otherNode));\n children === otherNode\n ? (result = Node.DOCUMENT_POSITION_CONTAINS)\n : parentHostInstance & Node.DOCUMENT_POSITION_CONTAINED_BY &&\n ((children =\n getFragmentInstanceOrTextInstanceSiblings(parentHostFiber)[1]),\n null === children\n ? (result = Node.DOCUMENT_POSITION_PRECEDING)\n : ((otherNode =\n getInstanceFromHostFiber(children).compareDocumentPosition(\n otherNode\n )),\n (result =\n 0 === otherNode || otherNode & Node.DOCUMENT_POSITION_FOLLOWING\n ? Node.DOCUMENT_POSITION_FOLLOWING\n : Node.DOCUMENT_POSITION_PRECEDING)));\n return (result |= Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC);\n }\n parentHostFiber = getInstanceFromHostFiber(children[0]);\n result = getInstanceFromHostFiber(children[children.length - 1]);\n var parentHostInstanceFromDOM = fiberIsPortaledIntoHost(this._fragmentFiber)\n ? parentHostFiber.parentElement\n : parentHostInstance;\n if (null == parentHostInstanceFromDOM)\n return Node.DOCUMENT_POSITION_DISCONNECTED;\n parentHostInstance =\n parentHostInstanceFromDOM.compareDocumentPosition(parentHostFiber) &\n Node.DOCUMENT_POSITION_CONTAINED_BY;\n parentHostInstanceFromDOM =\n parentHostInstanceFromDOM.compareDocumentPosition(result) &\n Node.DOCUMENT_POSITION_CONTAINED_BY;\n var firstResult = parentHostFiber.compareDocumentPosition(otherNode),\n lastResult = result.compareDocumentPosition(otherNode),\n otherNodeIsWithinFirstOrLastChild =\n firstResult & Node.DOCUMENT_POSITION_CONTAINED_BY ||\n lastResult & Node.DOCUMENT_POSITION_CONTAINED_BY;\n lastResult =\n parentHostInstance &&\n parentHostInstanceFromDOM &&\n firstResult & Node.DOCUMENT_POSITION_FOLLOWING &&\n lastResult & Node.DOCUMENT_POSITION_PRECEDING;\n parentHostFiber =\n (parentHostInstance && parentHostFiber === otherNode) ||\n (parentHostInstanceFromDOM && result === otherNode) ||\n otherNodeIsWithinFirstOrLastChild ||\n lastResult\n ? Node.DOCUMENT_POSITION_CONTAINED_BY\n : (!parentHostInstance && parentHostFiber === otherNode) ||\n (!parentHostInstanceFromDOM && result === otherNode)\n ? Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n : firstResult;\n return parentHostFiber & Node.DOCUMENT_POSITION_DISCONNECTED ||\n parentHostFiber & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC ||\n validateDocumentPositionWithFiberTree(\n parentHostFiber,\n this._fragmentFiber,\n children[0],\n children[children.length - 1],\n otherNode\n )\n ? parentHostFiber\n : Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n};\nfunction validateDocumentPositionWithFiberTree(\n documentPosition,\n fragmentFiber,\n precedingBoundaryFiber,\n followingBoundaryFiber,\n otherNode\n) {\n var otherFiber = getClosestInstanceFromNode(otherNode);\n if (documentPosition & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n if ((precedingBoundaryFiber = !!otherFiber))\n a: {\n for (; null !== otherFiber; ) {\n if (\n 7 === otherFiber.tag &&\n (otherFiber === fragmentFiber ||\n otherFiber.alternate === fragmentFiber)\n ) {\n precedingBoundaryFiber = !0;\n break a;\n }\n otherFiber = otherFiber.return;\n }\n precedingBoundaryFiber = !1;\n }\n return precedingBoundaryFiber;\n }\n if (documentPosition & Node.DOCUMENT_POSITION_CONTAINS) {\n if (null === otherFiber)\n return (\n (otherFiber = otherNode.ownerDocument),\n otherNode === otherFiber ||\n otherNode === otherFiber.documentElement ||\n otherNode === otherFiber.body\n );\n a: {\n otherFiber = fragmentFiber;\n for (\n fragmentFiber =\n getFragmentParentInstanceOrContainerFiber(fragmentFiber);\n null !== otherFiber;\n\n ) {\n if (\n !(\n (5 !== otherFiber.tag &&\n 3 !== otherFiber.tag &&\n 27 !== otherFiber.tag) ||\n (otherFiber !== fragmentFiber &&\n otherFiber.alternate !== fragmentFiber)\n )\n ) {\n otherFiber = !0;\n break a;\n }\n otherFiber = otherFiber.return;\n }\n otherFiber = !1;\n }\n return otherFiber;\n }\n return documentPosition & Node.DOCUMENT_POSITION_PRECEDING\n ? ((fragmentFiber = !!otherFiber) &&\n !(fragmentFiber = otherFiber === precedingBoundaryFiber) &&\n ((fragmentFiber = getLowestCommonAncestor(\n precedingBoundaryFiber,\n otherFiber,\n getParentForFragmentAncestors\n )),\n null === fragmentFiber\n ? (fragmentFiber = !1)\n : (traverseVisibleInstancesAndTextInstances(\n fragmentFiber,\n !0,\n isFiberPrecedingCheck,\n otherFiber,\n precedingBoundaryFiber\n ),\n (otherFiber = searchTarget),\n (searchTarget = null),\n (fragmentFiber = null !== otherFiber))),\n fragmentFiber)\n : documentPosition & Node.DOCUMENT_POSITION_FOLLOWING\n ? ((fragmentFiber = !!otherFiber) &&\n !(fragmentFiber = otherFiber === followingBoundaryFiber) &&\n ((fragmentFiber = getLowestCommonAncestor(\n followingBoundaryFiber,\n otherFiber,\n getParentForFragmentAncestors\n )),\n null === fragmentFiber\n ? (fragmentFiber = !1)\n : (traverseVisibleInstancesAndTextInstances(\n fragmentFiber,\n !0,\n isFiberFollowingCheck,\n otherFiber,\n followingBoundaryFiber\n ),\n (otherFiber = searchTarget),\n (searchBoundary = searchTarget = null),\n (fragmentFiber = null !== otherFiber))),\n fragmentFiber)\n : !1;\n}\nfunction scrollTextNodeIntoView(textNode, resolvedAlignToTop) {\n var range = textNode.ownerDocument.createRange();\n range.selectNodeContents(textNode);\n textNode = range.getBoundingClientRect();\n window.scrollTo(\n window.scrollX + textNode.left,\n resolvedAlignToTop\n ? window.scrollY + textNode.top\n : window.scrollY + textNode.bottom - window.innerHeight\n );\n}\nFragmentInstance.prototype.scrollIntoView = function (alignToTop) {\n if (\"object\" === typeof alignToTop) throw Error(formatProdErrorMessage(566));\n var children = [];\n traverseVisibleInstancesAndTextInstances(\n this._fragmentFiber.child,\n !1,\n collectChildren,\n children,\n void 0,\n void 0\n );\n var resolvedAlignToTop = !1 !== alignToTop;\n if (0 === children.length) {\n var hostSiblings = getFragmentInstanceOrTextInstanceSiblings(\n this._fragmentFiber\n );\n hostSiblings = resolvedAlignToTop\n ? hostSiblings[1] ||\n hostSiblings[0] ||\n getFragmentParentInstanceOrContainerFiber(this._fragmentFiber)\n : hostSiblings[0] || hostSiblings[1];\n if (null === hostSiblings) return;\n if (6 === hostSiblings.tag) {\n alignToTop = getInstanceFromHostFiber(hostSiblings);\n scrollTextNodeIntoView(alignToTop, resolvedAlignToTop);\n return;\n }\n hostSiblings = getInstanceFromHostFiber(hostSiblings);\n if (9 !== hostSiblings.nodeType) {\n if (11 === hostSiblings.nodeType) {\n resolvedAlignToTop = \"host\" in hostSiblings ? hostSiblings.host : null;\n null !== resolvedAlignToTop &&\n resolvedAlignToTop.scrollIntoView(alignToTop);\n return;\n }\n hostSiblings.scrollIntoView(alignToTop);\n }\n }\n for (\n hostSiblings = resolvedAlignToTop ? children.length - 1 : 0;\n hostSiblings !== (resolvedAlignToTop ? -1 : children.length);\n\n ) {\n var child = children[hostSiblings];\n 6 === child.tag\n ? ((child = getInstanceFromHostFiber(child)),\n scrollTextNodeIntoView(child, resolvedAlignToTop))\n : getInstanceFromHostFiber(child).scrollIntoView(alignToTop);\n hostSiblings += resolvedAlignToTop ? -1 : 1;\n }\n};\nfunction addFragmentHandleToFiber(child, fragmentInstance) {\n child = getInstanceFromHostFiber(child);\n addFragmentHandleToInstance(child, fragmentInstance);\n return !1;\n}\nfunction addFragmentHandleToInstance(instance, fragmentInstance) {\n null == instance.reactFragments && (instance.reactFragments = new Set());\n instance.reactFragments.add(fragmentInstance);\n}\nfunction commitNewChildToFragmentInstance(childInstance, fragmentInstance) {\n var eventListeners = fragmentInstance._eventListeners;\n if (null !== eventListeners)\n for (var i$jscomp$0 = 0; i$jscomp$0 < eventListeners.length; i$jscomp$0++) {\n var _eventListeners$i3 = eventListeners[i$jscomp$0];\n childInstance.addEventListener(\n _eventListeners$i3.type,\n _eventListeners$i3.attachedListener,\n getAttachOptions(_eventListeners$i3.optionsOrUseCapture)\n );\n }\n 3 !== childInstance.nodeType &&\n ((eventListeners = fragmentInstance._observers),\n null !== eventListeners &&\n eventListeners.forEach(function (observer) {\n for (\n var writeIdx = 0, i = 0;\n i < pendingIntersectionUnobserves.length;\n i++\n ) {\n var pending = pendingIntersectionUnobserves[i];\n if (\n pending.fragmentInstance !== fragmentInstance ||\n pending.observer !== observer ||\n pending.instance !== childInstance\n )\n pendingIntersectionUnobserves[writeIdx++] = pending;\n }\n pendingIntersectionUnobserves.length = writeIdx;\n observer.observe(childInstance);\n }),\n addFragmentHandleToInstance(childInstance, fragmentInstance));\n}\nfunction deleteChildFromFragmentInstance(childInstance, fragmentInstance) {\n var eventListeners = fragmentInstance._eventListeners;\n if (null !== eventListeners)\n for (var i = 0; i < eventListeners.length; i++) {\n var _eventListeners$i4 = eventListeners[i];\n childInstance.removeEventListener(\n _eventListeners$i4.type,\n _eventListeners$i4.attachedListener,\n getAttachOptions(_eventListeners$i4.optionsOrUseCapture)\n );\n }\n 3 !== childInstance.nodeType &&\n ((eventListeners = fragmentInstance._observers),\n null !== eventListeners &&\n eventListeners.forEach(function (observer) {\n \"string\" === typeof observer.rootMargin\n ? schedulePendingIntersectionUnobserve(\n fragmentInstance,\n observer,\n childInstance\n )\n : observer.unobserve(childInstance);\n }),\n null != childInstance.reactFragments &&\n childInstance.reactFragments.delete(fragmentInstance));\n}\nfunction clearContainerSparingly(container) {\n var nextNode = container.firstChild;\n nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n for (; nextNode; ) {\n var node = nextNode;\n nextNode = nextNode.nextSibling;\n switch (node.nodeName) {\n case \"HTML\":\n case \"HEAD\":\n case \"BODY\":\n clearContainerSparingly(node);\n detachDeletedInstance(node);\n continue;\n case \"SCRIPT\":\n case \"STYLE\":\n continue;\n case \"LINK\":\n if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n }\n container.removeChild(node);\n }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n for (; 1 === instance.nodeType; ) {\n var anyProps = props;\n if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n if (\n !inRootOrSingleton &&\n (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n )\n break;\n } else if (!inRootOrSingleton)\n if (\"input\" === type && \"hidden\" === instance.type) {\n var name = null == anyProps.name ? null : \"\" + anyProps.name;\n if (\n \"hidden\" === anyProps.type &&\n instance.getAttribute(\"name\") === name\n )\n return instance;\n } else return instance;\n else if (!instance[internalHoistableMarker])\n switch (type) {\n case \"meta\":\n if (!instance.hasAttribute(\"itemprop\")) break;\n return instance;\n case \"link\":\n name = instance.getAttribute(\"rel\");\n if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n break;\n else if (\n name !== anyProps.rel ||\n instance.getAttribute(\"href\") !==\n (null == anyProps.href || \"\" === anyProps.href\n ? null\n : anyProps.href) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n instance.getAttribute(\"title\") !==\n (null == anyProps.title ? null : anyProps.title)\n )\n break;\n return instance;\n case \"style\":\n if (instance.hasAttribute(\"data-precedence\")) break;\n return instance;\n case \"script\":\n name = instance.getAttribute(\"src\");\n if (\n (name !== (null == anyProps.src ? null : anyProps.src) ||\n instance.getAttribute(\"type\") !==\n (null == anyProps.type ? null : anyProps.type) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n name &&\n instance.hasAttribute(\"async\") &&\n !instance.hasAttribute(\"itemprop\")\n )\n break;\n return instance;\n default:\n return instance;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) break;\n }\n return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n if (\"\" === text) return null;\n for (; 3 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n for (; 8 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n return (\n \"$!\" === instance.data ||\n (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n var ownerDocument = instance.ownerDocument;\n if (\"$~\" === instance.data) instance._reactRetry = callback;\n else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n callback();\n else {\n var listener = function () {\n callback();\n ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n };\n ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n instance._reactRetry = listener;\n }\n}\nfunction getNextHydratable(node) {\n for (; null != node; node = node.nextSibling) {\n var nodeType = node.nodeType;\n if (1 === nodeType || 3 === nodeType) break;\n if (8 === nodeType) {\n nodeType = node.data;\n if (\n \"$\" === nodeType ||\n \"$!\" === nodeType ||\n \"$?\" === nodeType ||\n \"$~\" === nodeType ||\n \"&\" === nodeType ||\n \"F!\" === nodeType ||\n \"F\" === nodeType\n )\n break;\n if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n }\n }\n return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n hydrationInstance = hydrationInstance.nextSibling;\n for (var depth = 0; hydrationInstance; ) {\n if (8 === hydrationInstance.nodeType) {\n var data = hydrationInstance.data;\n if (\"/$\" === data || \"/&\" === data) {\n if (0 === depth)\n return getNextHydratable(hydrationInstance.nextSibling);\n depth--;\n } else\n (\"$\" !== data &&\n \"$!\" !== data &&\n \"$?\" !== data &&\n \"$~\" !== data &&\n \"&\" !== data) ||\n depth++;\n }\n hydrationInstance = hydrationInstance.nextSibling;\n }\n return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n targetInstance = targetInstance.previousSibling;\n for (var depth = 0; targetInstance; ) {\n if (8 === targetInstance.nodeType) {\n var data = targetInstance.data;\n if (\n \"$\" === data ||\n \"$!\" === data ||\n \"$?\" === data ||\n \"$~\" === data ||\n \"&\" === data\n ) {\n if (0 === depth) return targetInstance;\n depth--;\n } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n }\n targetInstance = targetInstance.previousSibling;\n }\n return null;\n}\nfunction setFocusIfFocusable(node, focusOptions) {\n function handleFocus() {\n didFocus = !0;\n }\n if (node.ownerDocument.activeElement === node) return !0;\n var didFocus = !1;\n try {\n node.ownerDocument.addEventListener(\"focus\", handleFocus, !0),\n (node.focus || HTMLElement.prototype.focus).call(node, focusOptions);\n } finally {\n node.ownerDocument.removeEventListener(\"focus\", handleFocus, !0);\n }\n return didFocus;\n}\nfunction requestPostPaintCallback(callback) {\n localRequestAnimationFrame(function () {\n localRequestAnimationFrame(function (time) {\n return callback(time);\n });\n });\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n switch (type) {\n case \"html\":\n type = props.documentElement;\n if (!type) throw Error(formatProdErrorMessage(452));\n return type;\n case \"head\":\n type = props.head;\n if (!type) throw Error(formatProdErrorMessage(453));\n return type;\n case \"body\":\n type = props.body;\n if (!type) throw Error(formatProdErrorMessage(454));\n return type;\n default:\n throw Error(formatProdErrorMessage(451));\n }\n}\nfunction releaseSingletonInstance(instance, type, props) {\n for (var propKey in props) {\n var propValue = props[propKey];\n props.hasOwnProperty(propKey) &&\n null != propValue &&\n setProp(instance, type, propKey, null, emptyProps, propValue);\n }\n null != props.dangerouslySetInnerHTML && (instance.textContent = \"\");\n instance.onclick === noop$1 && (instance.onclick = null);\n detachDeletedInstance(instance);\n}\nfunction clearSingletonPreambleContribution(instance) {\n for (var attributes = instance.attributes; attributes.length; )\n instance.removeAttributeNode(attributes[0]);\n detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n if (\"function\" === typeof container.getRootNode) {\n var rootNode = container.getRootNode();\n if (9 === rootNode.nodeType || 11 === rootNode.nodeType) return rootNode;\n }\n return 9 === container.nodeType ? container : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n f: flushSyncWork,\n r: requestFormReset,\n D: prefetchDNS,\n C: preconnect,\n L: preload,\n m: preloadModule,\n X: preinitScript,\n S: preinitStyle,\n M: preinitModuleScript\n};\nfunction flushSyncWork() {\n var previousWasRendering = previousDispatcher.f(),\n wasRendering = flushSyncWork$1();\n return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n var formInst = getInstanceFromNode(form);\n null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n ? requestFormReset$1(formInst)\n : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n var ownerDocument = globalDocument;\n if (ownerDocument && \"string\" === typeof href && href) {\n var limitedEscapedHref =\n escapeSelectorAttributeValueInsideDoubleQuotes(href);\n limitedEscapedHref =\n 'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n \"string\" === typeof crossOrigin &&\n (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n preconnectsSet.has(limitedEscapedHref) ||\n (preconnectsSet.add(limitedEscapedHref),\n (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n null === ownerDocument.querySelector(limitedEscapedHref) &&\n ((href = ownerDocument.createElement(\"link\")),\n setInitialProperties(href, \"link\", rel),\n markNodeAsHoistable(href),\n ownerDocument.head.appendChild(href)));\n }\n}\nfunction prefetchDNS(href) {\n previousDispatcher.D(href);\n preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n previousDispatcher.C(href, crossOrigin);\n preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n previousDispatcher.L(href, as, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href && as) {\n var preloadSelector =\n 'link[rel=\"preload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"]';\n \"image\" === as\n ? options && options.imageSrcSet\n ? ((preloadSelector +=\n '[imagesrcset=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSrcSet\n ) +\n '\"]'),\n \"string\" === typeof options.imageSizes &&\n (preloadSelector +=\n '[imagesizes=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSizes\n ) +\n '\"]'))\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]')\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]');\n var key = preloadSelector;\n switch (as) {\n case \"style\":\n key = getStyleKey(href);\n break;\n case \"script\":\n key = getScriptKey(href);\n }\n if (\n !(\n preloadPropsMap.has(key) ||\n ((href = assign(\n {\n rel: \"preload\",\n href:\n \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n as: as\n },\n options\n )),\n preloadPropsMap.set(key, href),\n null !== ownerDocument.querySelector(preloadSelector) ||\n (\"style\" === as &&\n ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n (\"script\" === as &&\n ownerDocument.querySelector(getScriptSelectorFromKey(key))))\n )\n ) {\n var instance = ownerDocument.createElement(\"link\");\n setInitialProperties(instance, \"link\", href);\n \"style\" === as &&\n ((instance[internalLoadPendingKey] = !0),\n (instance.onload = instance.onerror =\n function () {\n clearPendingLoadOnNode(instance);\n }));\n markNodeAsHoistable(instance);\n ownerDocument.head.appendChild(instance);\n }\n }\n}\nfunction preloadModule(href, options) {\n previousDispatcher.m(href, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n preloadSelector =\n 'link[rel=\"modulepreload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"][href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]',\n key = preloadSelector;\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n key = getScriptKey(href);\n }\n if (\n !preloadPropsMap.has(key) &&\n ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n preloadPropsMap.set(key, href),\n null === ownerDocument.querySelector(preloadSelector))\n ) {\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n return;\n }\n as = ownerDocument.createElement(\"link\");\n setInitialProperties(as, \"link\", href);\n markNodeAsHoistable(as);\n ownerDocument.head.appendChild(as);\n }\n }\n}\nfunction preinitStyle(href, precedence, options) {\n previousDispatcher.S(href, precedence, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n key = getStyleKey(href);\n precedence = precedence || \"default\";\n var resource = styles.get(key);\n if (!resource) {\n var state = { loading: 0, preload: null };\n if (\n (resource = ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n ))\n )\n state.loading = 5;\n else {\n href = assign(\n { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n options\n );\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(href, options);\n var link = (resource = ownerDocument.createElement(\"link\"));\n markNodeAsHoistable(link);\n setInitialProperties(link, \"link\", href);\n link._p = new Promise(function (resolve, reject) {\n link.onload = resolve;\n link.onerror = reject;\n });\n link.addEventListener(\"load\", function () {\n state.loading |= 1;\n });\n link.addEventListener(\"error\", function () {\n state.loading |= 2;\n });\n state.loading |= 4;\n insertStylesheet(resource, precedence, ownerDocument);\n }\n resource = {\n type: \"stylesheet\",\n instance: resource,\n count: 1,\n state: state\n };\n styles.set(key, resource);\n }\n }\n}\nfunction preinitScript(src, options) {\n previousDispatcher.X(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n resource ||\n ((src = assign({ src: src, async: !0 }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n}\nfunction preinitModuleScript(src, options) {\n previousDispatcher.M(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n resource ||\n ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n var JSCompiler_inline_result = (JSCompiler_inline_result =\n rootInstanceStackCursor.current)\n ? getHoistableRoot(JSCompiler_inline_result)\n : null;\n if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n switch (type) {\n case \"meta\":\n case \"title\":\n return null;\n case \"style\":\n return \"string\" === typeof pendingProps.precedence &&\n \"string\" === typeof pendingProps.href\n ? ((pendingProps = getStyleKey(pendingProps.href)),\n (currentProps = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableStyles),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"style\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null };\n case \"link\":\n if (\n \"stylesheet\" === pendingProps.rel &&\n \"string\" === typeof pendingProps.href &&\n \"string\" === typeof pendingProps.precedence\n ) {\n type = getStyleKey(pendingProps.href);\n var styles$268 = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableStyles,\n resource$269 = styles$268.get(type);\n resource$269 ||\n ((JSCompiler_inline_result =\n JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n (resource$269 = {\n type: \"stylesheet\",\n instance: null,\n count: 0,\n state: { loading: 0, preload: null }\n }),\n styles$268.set(type, resource$269),\n (styles$268 = JSCompiler_inline_result.querySelector(\n getStylesheetSelectorFromKey(type)\n ))\n ? styles$268._p ||\n ((resource$269.instance = styles$268),\n (resource$269.state.loading = 5))\n : ((styles$268 = preloadPropsMap.get(type)),\n styles$268 ||\n ((styles$268 = {\n rel: \"preload\",\n as: \"style\",\n href: pendingProps.href,\n crossOrigin: pendingProps.crossOrigin,\n integrity: pendingProps.integrity,\n media: pendingProps.media,\n hrefLang: pendingProps.hrefLang,\n referrerPolicy: pendingProps.referrerPolicy\n }),\n preloadPropsMap.set(type, styles$268)),\n preloadStylesheet(\n JSCompiler_inline_result,\n type,\n styles$268,\n resource$269.state\n )));\n if (currentProps && null === currentResource)\n throw Error(formatProdErrorMessage(528, \"\"));\n return resource$269;\n }\n if (currentProps && null !== currentResource)\n throw Error(formatProdErrorMessage(529, \"\"));\n return null;\n case \"script\":\n return (\n (currentProps = pendingProps.async),\n (pendingProps = pendingProps.src),\n \"string\" === typeof pendingProps &&\n currentProps &&\n \"function\" !== typeof currentProps &&\n \"symbol\" !== typeof currentProps\n ? ((pendingProps = getScriptKey(pendingProps)),\n (currentProps = getResourcesFromRoot(\n JSCompiler_inline_result\n ).hoistableScripts),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"script\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null }\n );\n default:\n throw Error(formatProdErrorMessage(444, type));\n }\n}\nfunction getStyleKey(href) {\n return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n \"data-precedence\": rawProps.precedence,\n precedence: null\n });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n if (\n (key = ownerDocument.querySelector(\n 'link[rel=\"preload\"][as=\"style\"][' + key + \"]\"\n ))\n ) {\n if (!0 !== key[internalLoadPendingKey]) {\n state.loading = 1;\n return;\n }\n } else\n (key = ownerDocument.createElement(\"link\")),\n (key[internalLoadPendingKey] = !0),\n (key.onload = key.onerror = clearPendingLoadOnNode.bind(null, key)),\n setInitialProperties(key, \"link\", preloadProps),\n markNodeAsHoistable(key),\n ownerDocument.head.appendChild(key);\n state.preload = key;\n key.addEventListener(\"load\", function () {\n return (state.loading |= 1);\n });\n key.addEventListener(\"error\", function () {\n return (state.loading |= 2);\n });\n}\nfunction getScriptKey(src) {\n return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n resource.count++;\n if (null === resource.instance)\n switch (resource.type) {\n case \"style\":\n var instance = hoistableRoot.querySelector(\n 'style[data-href~=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n '\"]'\n );\n if (instance)\n return (\n (resource.instance = instance),\n markNodeAsHoistable(instance),\n instance\n );\n var styleProps = assign({}, props, {\n \"data-href\": props.href,\n \"data-precedence\": props.precedence,\n href: null,\n precedence: null\n });\n instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n \"style\"\n );\n markNodeAsHoistable(instance);\n setInitialProperties(instance, \"style\", styleProps);\n insertStylesheet(instance, props.precedence, hoistableRoot);\n return (resource.instance = instance);\n case \"stylesheet\":\n styleProps = getStyleKey(props.href);\n var instance$274 = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(styleProps)\n );\n if (instance$274)\n return (\n (resource.state.loading |= 4),\n (resource.instance = instance$274),\n markNodeAsHoistable(instance$274),\n instance$274\n );\n instance = stylesheetPropsFromRawProps(props);\n (styleProps = preloadPropsMap.get(styleProps)) &&\n adoptPreloadPropsForStylesheet(instance, styleProps);\n instance$274 = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"link\");\n markNodeAsHoistable(instance$274);\n var linkInstance = instance$274;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance$274, \"link\", instance);\n resource.state.loading |= 4;\n insertStylesheet(instance$274, props.precedence, hoistableRoot);\n return (resource.instance = instance$274);\n case \"script\":\n instance$274 = getScriptKey(props.src);\n if (\n (styleProps = hoistableRoot.querySelector(\n getScriptSelectorFromKey(instance$274)\n ))\n )\n return (\n (resource.instance = styleProps),\n markNodeAsHoistable(styleProps),\n styleProps\n );\n instance = props;\n if ((styleProps = preloadPropsMap.get(instance$274)))\n (instance = assign({}, props)),\n adoptPreloadPropsForScript(instance, styleProps);\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n styleProps = hoistableRoot.createElement(\"script\");\n markNodeAsHoistable(styleProps);\n setInitialProperties(styleProps, \"link\", instance);\n hoistableRoot.head.appendChild(styleProps);\n return (resource.instance = styleProps);\n case \"void\":\n return null;\n default:\n throw Error(formatProdErrorMessage(443, resource.type));\n }\n else\n \"stylesheet\" === resource.type &&\n 0 === (resource.state.loading & 4) &&\n ((instance = resource.instance),\n (resource.state.loading |= 4),\n insertStylesheet(instance, props.precedence, hoistableRoot));\n return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n for (\n var nodes = root.querySelectorAll(\n 'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n ),\n last = nodes.length ? nodes[nodes.length - 1] : null,\n prior = last,\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (node.dataset.precedence === precedence) prior = node;\n else if (prior !== last) break;\n }\n prior\n ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n : ((precedence = 9 === root.nodeType ? root.head : root),\n precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n null == stylesheetProps.crossOrigin &&\n (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n null == stylesheetProps.referrerPolicy &&\n (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n null == scriptProps.crossOrigin &&\n (scriptProps.crossOrigin = preloadProps.crossOrigin);\n null == scriptProps.referrerPolicy &&\n (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n null == scriptProps.integrity &&\n (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n if (null === tagCaches) {\n var cache = new Map();\n var caches = (tagCaches = new Map());\n caches.set(ownerDocument, cache);\n } else\n (caches = tagCaches),\n (cache = caches.get(ownerDocument)),\n cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n if (cache.has(type)) return cache;\n cache.set(type, null);\n ownerDocument = ownerDocument.getElementsByTagName(type);\n for (caches = 0; caches < ownerDocument.length; caches++) {\n var node = ownerDocument[caches];\n if (\n !(\n node[internalHoistableMarker] ||\n node[internalInstanceKey] ||\n (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n ) &&\n \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n ) {\n var nodeKey = node.getAttribute(keyAttribute) || \"\";\n nodeKey = type + nodeKey;\n var existing = cache.get(nodeKey);\n existing ? existing.push(node) : cache.set(nodeKey, [node]);\n }\n }\n return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n hoistableRoot.head.insertBefore(\n instance,\n \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n if (1 === hostContext || null != props.itemProp) return !1;\n switch (type) {\n case \"meta\":\n case \"title\":\n return !0;\n case \"style\":\n if (\n \"string\" !== typeof props.precedence ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n )\n break;\n return !0;\n case \"link\":\n if (\n \"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href ||\n props.onLoad ||\n props.onError\n )\n break;\n switch (props.rel) {\n case \"stylesheet\":\n return (\n (type = props.disabled),\n \"string\" === typeof props.precedence && null == type\n );\n default:\n return !0;\n }\n case \"script\":\n if (\n props.async &&\n \"function\" !== typeof props.async &&\n \"symbol\" !== typeof props.async &&\n !props.onLoad &&\n !props.onError &&\n props.src &&\n \"string\" === typeof props.src\n )\n return !0;\n }\n return !1;\n}\nfunction maySuspendCommit(type, props) {\n return (\n \"img\" === type &&\n null != props.src &&\n \"\" !== props.src &&\n null == props.onLoad &&\n \"lazy\" !== props.loading\n );\n}\nfunction preloadResource(resource) {\n return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n ? !1\n : !0;\n}\nfunction estimateImageBytes(instance) {\n return (\n (instance.width || 100) *\n (instance.height || 100) *\n (\"number\" === typeof devicePixelRatio ? devicePixelRatio : 1) *\n 0.25\n );\n}\nfunction suspendInstance(state, instance) {\n \"function\" === typeof instance.decode &&\n (state.imgCount++,\n instance.complete ||\n ((state.imgBytes += estimateImageBytes(instance)),\n state.suspenseyImages.push(instance)),\n (state = onUnsuspendImg.bind(state)),\n instance.decode().then(state, state));\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n if (\n \"stylesheet\" === resource.type &&\n (\"string\" !== typeof props.media ||\n !1 !== matchMedia(props.media).matches) &&\n 0 === (resource.state.loading & 4)\n ) {\n if (null === resource.instance) {\n var key = getStyleKey(props.href),\n instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(key)\n );\n if (instance) {\n hoistableRoot = instance._p;\n null !== hoistableRoot &&\n \"object\" === typeof hoistableRoot &&\n \"function\" === typeof hoistableRoot.then &&\n (state.count++,\n (state = onUnsuspend.bind(state)),\n hoistableRoot.then(state, state));\n resource.state.loading |= 4;\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return;\n }\n instance = hoistableRoot.ownerDocument || hoistableRoot;\n props = stylesheetPropsFromRawProps(props);\n (key = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(props, key);\n instance = instance.createElement(\"link\");\n markNodeAsHoistable(instance);\n var linkInstance = instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance, \"link\", props);\n resource.instance = instance;\n }\n null === state.stylesheets && (state.stylesheets = new Map());\n state.stylesheets.set(resource, hoistableRoot);\n (hoistableRoot = resource.state.preload) &&\n 0 === (resource.state.loading & 3) &&\n (state.count++,\n (resource = onUnsuspend.bind(state)),\n hoistableRoot.addEventListener(\"load\", resource),\n hoistableRoot.addEventListener(\"error\", resource));\n }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n state.stylesheets &&\n 0 === state.count &&\n insertSuspendedStylesheets(state, state.stylesheets);\n return 0 < state.count || 0 < state.imgCount\n ? function (commit) {\n var stylesheetTimer = setTimeout(function () {\n state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets);\n if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n }, 6e4 + timeoutOffset);\n 0 < state.imgBytes &&\n 0 === estimatedBytesWithinLimit &&\n (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n var imgTimer = setTimeout(\n function () {\n state.waitingForImages = !1;\n if (\n 0 === state.count &&\n (state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets),\n state.unsuspend)\n ) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n },\n (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n timeoutOffset\n );\n state.unsuspend = commit;\n return function () {\n state.unsuspend = null;\n clearTimeout(stylesheetTimer);\n clearTimeout(imgTimer);\n };\n }\n : null;\n}\nfunction checkIfFullyUnsuspended(state) {\n if (0 === state.count && (0 === state.imgCount || !state.waitingForImages))\n if (state.stylesheets) insertSuspendedStylesheets(state, state.stylesheets);\n else if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n}\nfunction onUnsuspend() {\n this.count--;\n checkIfFullyUnsuspended(this);\n}\nfunction onUnsuspendImg() {\n this.imgCount--;\n checkIfFullyUnsuspended(this);\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n state.stylesheets = null;\n null !== state.unsuspend &&\n (state.count++,\n (precedencesByRoot = new Map()),\n resources.forEach(insertStylesheetIntoRoot, state),\n (precedencesByRoot = null),\n onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n if (!(resource.state.loading & 4)) {\n var precedences = precedencesByRoot.get(root);\n if (precedences) var last = precedences.get(null);\n else {\n precedences = new Map();\n precedencesByRoot.set(root, precedences);\n for (\n var nodes = root.querySelectorAll(\n \"link[data-precedence],style[data-precedence]\"\n ),\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (\n \"LINK\" === node.nodeName ||\n \"not all\" !== node.getAttribute(\"media\")\n )\n precedences.set(node.dataset.precedence, node), (last = node);\n }\n last && precedences.set(null, last);\n }\n nodes = resource.instance;\n node = nodes.getAttribute(\"data-precedence\");\n i = precedences.get(node) || last;\n i === last && precedences.set(null, nodes);\n precedences.set(node, nodes);\n this.count++;\n last = onUnsuspend.bind(this);\n nodes.addEventListener(\"load\", last);\n nodes.addEventListener(\"error\", last);\n i\n ? i.parentNode.insertBefore(nodes, i.nextSibling)\n : ((root = 9 === root.nodeType ? root.head : root),\n root.insertBefore(nodes, root.firstChild));\n resource.state.loading |= 4;\n }\n}\nvar HostTransitionContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Provider: null,\n Consumer: null,\n _currentValue: sharedNotPendingObject,\n _currentValue2: sharedNotPendingObject,\n _threadCount: 0\n};\nfunction FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n) {\n this.tag = 1;\n this.containerInfo = containerInfo;\n this.pingCache = this.current = this.pendingChildren = null;\n this.timeoutHandle = -1;\n this.callbackNode =\n this.next =\n this.pendingContext =\n this.context =\n this.cancelPendingCommit =\n null;\n this.callbackPriority = 0;\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes =\n this.shellSuspendCounter =\n this.errorRecoveryDisabledLanes =\n this.expiredLanes =\n this.warmLanes =\n this.pingedLanes =\n this.suspendedLanes =\n this.pendingLanes =\n 0;\n this.entanglements = createLaneMap(0);\n this.hiddenUpdates = createLaneMap(null);\n this.identifierPrefix = identifierPrefix;\n this.onUncaughtError = onUncaughtError;\n this.onCaughtError = onCaughtError;\n this.onRecoverableError = onRecoverableError;\n this.pooledCache = null;\n this.pooledCacheLanes = 0;\n this.formState = formState;\n this.transitionTypes = null;\n this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n containerInfo,\n tag,\n hydrate,\n initialChildren,\n hydrationCallbacks,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator\n) {\n containerInfo = new FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n );\n tag = 1;\n !0 === isStrictMode && (tag |= 24);\n isStrictMode = createFiberImplClass(3, null, null, tag);\n containerInfo.current = isStrictMode;\n isStrictMode.stateNode = containerInfo;\n tag = createCache();\n tag.refCount++;\n containerInfo.pooledCache = tag;\n tag.refCount++;\n isStrictMode.memoizedState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: tag\n };\n initializeUpdateQueue(isStrictMode);\n return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) return emptyContextObject;\n parentComponent = emptyContextObject;\n return parentComponent;\n}\nfunction updateContainerImpl(\n rootFiber,\n lane,\n element,\n container,\n parentComponent,\n callback\n) {\n parentComponent = getContextForSubtree(parentComponent);\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n container = createUpdate(lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback && (container.callback = callback);\n element = enqueueUpdate(rootFiber, container, lane);\n null !== element &&\n (scheduleUpdateOnFiber(element, rootFiber, lane),\n entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n fiber = fiber.memoizedState;\n if (null !== fiber && null !== fiber.dehydrated) {\n var a = fiber.retryLane;\n fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n markRetryLaneIfNotHydrated(fiber, 67108864);\n }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var lane = requestUpdateLane();\n lane = getBumpedLaneForHydrationByLane(lane);\n var root = enqueueConcurrentRenderForLane(fiber, lane);\n null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n markRetryLaneIfNotHydrated(fiber, lane);\n }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = 2),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction dispatchContinuousEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = 8),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n}\nfunction dispatchEvent(\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n if (_enabled) {\n var blockedOn = findInstanceBlockingEvent(nativeEvent);\n if (null === blockedOn)\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n ),\n clearIfContinuousEvent(domEventName, nativeEvent);\n else if (\n queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n )\n nativeEvent.stopPropagation();\n else if (\n (clearIfContinuousEvent(domEventName, nativeEvent),\n eventSystemFlags & 4 &&\n -1 < discreteReplayableEvents.indexOf(domEventName))\n ) {\n for (; null !== blockedOn; ) {\n var fiber = getInstanceFromNode(blockedOn);\n if (null !== fiber)\n switch (fiber.tag) {\n case 3:\n fiber = fiber.stateNode;\n if (fiber.current.memoizedState.isDehydrated) {\n var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n if (0 !== lanes) {\n var root = fiber;\n root.pendingLanes |= 2;\n for (root.entangledLanes |= 2; lanes; ) {\n var lane = 1 << (31 - clz32(lanes));\n root.entanglements[1] |= lane;\n lanes &= ~lane;\n }\n ensureRootIsScheduled(fiber);\n 0 === (executionContext & 6) &&\n ((workInProgressRootRenderTargetTime = now() + 500),\n flushSyncWorkAcrossRoots_impl(0, !1));\n }\n }\n break;\n case 31:\n case 13:\n (root = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n flushSyncWork$1(),\n markRetryLaneIfNotHydrated(fiber, 2);\n }\n fiber = findInstanceBlockingEvent(nativeEvent);\n null === fiber &&\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n );\n if (fiber === blockedOn) break;\n blockedOn = fiber;\n }\n null !== blockedOn && nativeEvent.stopPropagation();\n } else\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n null,\n targetContainer\n );\n }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n nativeEvent = getEventTarget(nativeEvent);\n return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n return_targetInst = null;\n targetNode = getClosestInstanceFromNode(targetNode);\n if (null !== targetNode) {\n var nearestMounted = getNearestMountedFiber(targetNode);\n if (null === nearestMounted) targetNode = null;\n else {\n var tag = nearestMounted.tag;\n if (13 === tag) {\n targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (31 === tag) {\n targetNode = getActivityInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (3 === tag) {\n if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n return 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n targetNode = null;\n } else nearestMounted !== targetNode && (targetNode = null);\n }\n }\n return_targetInst = targetNode;\n return null;\n}\nfunction getEventPriority(domEventName) {\n switch (domEventName) {\n case \"beforetoggle\":\n case \"cancel\":\n case \"click\":\n case \"close\":\n case \"contextmenu\":\n case \"copy\":\n case \"cut\":\n case \"auxclick\":\n case \"dblclick\":\n case \"dragend\":\n case \"dragstart\":\n case \"drop\":\n case \"focusin\":\n case \"focusout\":\n case \"input\":\n case \"invalid\":\n case \"keydown\":\n case \"keypress\":\n case \"keyup\":\n case \"mousedown\":\n case \"mouseup\":\n case \"paste\":\n case \"pause\":\n case \"play\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointerup\":\n case \"ratechange\":\n case \"reset\":\n case \"seeked\":\n case \"submit\":\n case \"toggle\":\n case \"touchcancel\":\n case \"touchend\":\n case \"touchstart\":\n case \"volumechange\":\n case \"change\":\n case \"selectionchange\":\n case \"textInput\":\n case \"compositionstart\":\n case \"compositionend\":\n case \"compositionupdate\":\n case \"beforeblur\":\n case \"afterblur\":\n case \"beforeinput\":\n case \"blur\":\n case \"fullscreenchange\":\n case \"fullscreenerror\":\n case \"focus\":\n case \"hashchange\":\n case \"popstate\":\n case \"select\":\n case \"selectstart\":\n return 2;\n case \"drag\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"mousemove\":\n case \"mouseout\":\n case \"mouseover\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"resize\":\n case \"scroll\":\n case \"touchmove\":\n case \"wheel\":\n case \"mouseenter\":\n case \"mouseleave\":\n case \"pointerenter\":\n case \"pointerleave\":\n return 8;\n case \"message\":\n switch (getCurrentPriorityLevel()) {\n case ImmediatePriority:\n return 2;\n case UserBlockingPriority:\n return 8;\n case NormalPriority$1:\n case LowPriority:\n return 32;\n case IdlePriority:\n return 268435456;\n default:\n return 32;\n }\n default:\n return 32;\n }\n}\nvar hasScheduledReplayAttempt = !1,\n queuedFocus = null,\n queuedDrag = null,\n queuedMouse = null,\n queuedPointers = new Map(),\n queuedPointerCaptures = new Map(),\n queuedExplicitHydrationTargets = [],\n discreteReplayableEvents =\n \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n \" \"\n );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"focusin\":\n case \"focusout\":\n queuedFocus = null;\n break;\n case \"dragenter\":\n case \"dragleave\":\n queuedDrag = null;\n break;\n case \"mouseover\":\n case \"mouseout\":\n queuedMouse = null;\n break;\n case \"pointerover\":\n case \"pointerout\":\n queuedPointers.delete(nativeEvent.pointerId);\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n queuedPointerCaptures.delete(nativeEvent.pointerId);\n }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n existingQueuedEvent,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n if (\n null === existingQueuedEvent ||\n existingQueuedEvent.nativeEvent !== nativeEvent\n )\n return (\n (existingQueuedEvent = {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n }),\n null !== blockedOn &&\n ((blockedOn = getInstanceFromNode(blockedOn)),\n null !== blockedOn && attemptContinuousHydration(blockedOn)),\n existingQueuedEvent\n );\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n blockedOn = existingQueuedEvent.targetContainers;\n null !== targetContainer &&\n -1 === blockedOn.indexOf(targetContainer) &&\n blockedOn.push(targetContainer);\n return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n) {\n switch (domEventName) {\n case \"focusin\":\n return (\n (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedFocus,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"dragenter\":\n return (\n (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedDrag,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"mouseover\":\n return (\n (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedMouse,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"pointerover\":\n var pointerId = nativeEvent.pointerId;\n queuedPointers.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointers.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n );\n return !0;\n case \"gotpointercapture\":\n return (\n (pointerId = nativeEvent.pointerId),\n queuedPointerCaptures.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointerCaptures.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n ),\n !0\n );\n }\n return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n if (null !== targetInst) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n if (null !== nearestMounted)\n if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n if (\n ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (31 === targetInst) {\n if (\n ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (\n 3 === targetInst &&\n nearestMounted.stateNode.current.memoizedState.isDehydrated\n ) {\n queuedTarget.blockedOn =\n 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n return;\n }\n }\n queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (null !== queuedEvent.blockedOn) return !1;\n for (\n var targetContainers = queuedEvent.targetContainers;\n 0 < targetContainers.length;\n\n ) {\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n if (null === nextBlockedOn) {\n nextBlockedOn = queuedEvent.nativeEvent;\n var nativeEventClone = new nextBlockedOn.constructor(\n nextBlockedOn.type,\n nextBlockedOn\n );\n currentReplayingEvent = nativeEventClone;\n nextBlockedOn.target.dispatchEvent(nativeEventClone);\n currentReplayingEvent = null;\n } else\n return (\n (targetContainers = getInstanceFromNode(nextBlockedOn)),\n null !== targetContainers &&\n attemptContinuousHydration(targetContainers),\n (queuedEvent.blockedOn = nextBlockedOn),\n !1\n );\n targetContainers.shift();\n }\n return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n hasScheduledReplayAttempt = !1;\n null !== queuedFocus &&\n attemptReplayContinuousQueuedEvent(queuedFocus) &&\n (queuedFocus = null);\n null !== queuedDrag &&\n attemptReplayContinuousQueuedEvent(queuedDrag) &&\n (queuedDrag = null);\n null !== queuedMouse &&\n attemptReplayContinuousQueuedEvent(queuedMouse) &&\n (queuedMouse = null);\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n queuedEvent.blockedOn === unblocked &&\n ((queuedEvent.blockedOn = null),\n hasScheduledReplayAttempt ||\n ((hasScheduledReplayAttempt = !0),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n replayUnblockedEvents\n )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n lastScheduledReplayQueue !== formReplayingQueue &&\n ((lastScheduledReplayQueue = formReplayingQueue),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n function () {\n lastScheduledReplayQueue === formReplayingQueue &&\n (lastScheduledReplayQueue = null);\n for (var i = 0; i < formReplayingQueue.length; i += 3) {\n var form = formReplayingQueue[i],\n submitterOrAction = formReplayingQueue[i + 1],\n formData = formReplayingQueue[i + 2];\n if (\"function\" !== typeof submitterOrAction)\n if (null === findInstanceBlockingTarget(submitterOrAction || form))\n continue;\n else break;\n var formInst = getInstanceFromNode(form);\n null !== formInst &&\n (formReplayingQueue.splice(i, 3),\n (i -= 3),\n startHostTransition(\n formInst,\n {\n pending: !0,\n data: formData,\n method: form.method,\n action: submitterOrAction\n },\n submitterOrAction,\n formData\n ));\n }\n }\n ));\n}\nfunction retryIfBlockedOn(unblocked) {\n function unblock(queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n }\n null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n var queuedTarget = queuedExplicitHydrationTargets[i];\n queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n }\n for (\n ;\n 0 < queuedExplicitHydrationTargets.length &&\n ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n )\n attemptExplicitHydrationTarget(i),\n null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n if (null != i)\n for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n var form = i[queuedTarget],\n submitterOrAction = i[queuedTarget + 1],\n formProps = form[internalPropsKey] || null;\n if (\"function\" === typeof submitterOrAction)\n formProps || scheduleReplayQueueIfNeeded(i);\n else if (formProps) {\n var action = null;\n if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n if (\n ((form = submitterOrAction),\n (formProps = submitterOrAction[internalPropsKey] || null))\n )\n action = formProps.formAction;\n else {\n if (null !== findInstanceBlockingTarget(form)) continue;\n }\n else action = formProps.action;\n \"function\" === typeof action\n ? (i[queuedTarget + 1] = action)\n : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n scheduleReplayQueueIfNeeded(i);\n }\n }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n function handleNavigate(event) {\n event.canIntercept &&\n \"react-transition\" === event.info &&\n event.intercept({\n handler: function () {\n return new Promise(function (resolve) {\n return (pendingResolve = resolve);\n });\n },\n focusReset: \"manual\",\n scroll: \"manual\"\n });\n }\n function handleNavigateComplete() {\n null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n isCancelled || setTimeout(startFakeNavigation, 20);\n }\n function startFakeNavigation() {\n if (!isCancelled && !navigation.transition) {\n var currentEntry = navigation.currentEntry;\n currentEntry &&\n null != currentEntry.url &&\n navigation.navigate(currentEntry.url, {\n state: currentEntry.getState(),\n info: \"react-transition\",\n history: \"replace\"\n });\n }\n }\n if (\"object\" === typeof navigation) {\n var isCancelled = !1,\n pendingResolve = null;\n navigation.addEventListener(\"navigate\", handleNavigate);\n navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n setTimeout(startFakeNavigation, 100);\n return function () {\n isCancelled = !0;\n navigation.removeEventListener(\"navigate\", handleNavigate);\n navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n };\n }\n}\nfunction ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n function (children) {\n var root = this._internalRoot;\n if (null === root) throw Error(formatProdErrorMessage(409));\n var current = root.current,\n lane = requestUpdateLane();\n updateContainerImpl(current, lane, children, root, null, null);\n };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n function () {\n var root = this._internalRoot;\n if (null !== root) {\n this._internalRoot = null;\n var container = root.containerInfo;\n updateContainerImpl(root.current, 2, null, root, null, null);\n flushSyncWork$1();\n container[internalContainerInstanceKey] = null;\n }\n };\nfunction ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n if (target) {\n var updatePriority = resolveUpdatePriority();\n target = { blockedOn: null, target: target, priority: updatePriority };\n for (\n var i = 0;\n i < queuedExplicitHydrationTargets.length &&\n 0 !== updatePriority &&\n updatePriority < queuedExplicitHydrationTargets[i].priority;\n i++\n );\n queuedExplicitHydrationTargets.splice(i, 0, target);\n 0 === i && attemptExplicitHydrationTarget(target);\n }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_2043 = React.version;\nif (\n \"19.3.0\" !==\n isomorphicReactPackageVersion$jscomp$inline_2043\n)\n throw Error(\n formatProdErrorMessage(\n 527,\n isomorphicReactPackageVersion$jscomp$inline_2043,\n \"19.3.0\"\n )\n );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n var fiber = componentOrElement._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof componentOrElement.render)\n throw Error(formatProdErrorMessage(188));\n componentOrElement = Object.keys(componentOrElement).join(\",\");\n throw Error(formatProdErrorMessage(268, componentOrElement));\n }\n componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n componentOrElement =\n null !== componentOrElement\n ? findCurrentHostFiberImpl(componentOrElement)\n : null;\n componentOrElement =\n null === componentOrElement ? null : componentOrElement.stateNode;\n return componentOrElement;\n};\nvar internals$jscomp$inline_2586 = {\n bundleType: 0,\n version: \"19.3.0\",\n rendererPackageName: \"react-dom\",\n currentDispatcherRef: ReactSharedInternals,\n reconcilerVersion: \"19.3.0\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n var hook$jscomp$inline_2587 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (\n !hook$jscomp$inline_2587.isDisabled &&\n hook$jscomp$inline_2587.supportsFiber\n )\n try {\n (rendererID = hook$jscomp$inline_2587.inject(\n internals$jscomp$inline_2586\n )),\n (injectedHook = hook$jscomp$inline_2587);\n } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError));\n options = createFiberRoot(\n container,\n 1,\n !1,\n null,\n null,\n isStrictMode,\n identifierPrefix,\n null,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n container[internalContainerInstanceKey] = options.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n formState = null;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.formState && (formState = options.formState));\n initialChildren = createFiberRoot(\n container,\n 1,\n !0,\n initialChildren,\n null != options ? options : null,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n initialChildren.context = getContextForSubtree(null);\n options = initialChildren.current;\n isStrictMode = requestUpdateLane();\n isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n identifierPrefix = createUpdate(isStrictMode);\n identifierPrefix.callback = null;\n enqueueUpdate(options, identifierPrefix, isStrictMode);\n options = isStrictMode;\n initialChildren.current.lanes = options;\n markRootUpdated$1(initialChildren, options);\n ensureRootIsScheduled(initialChildren);\n container[internalContainerInstanceKey] = initialChildren.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.3.0\";\n",
11
+ "/**\n * The management API's constants: action names, protocol versions, the\n * socket's subprotocol and close codes, job states and event names — and the\n * two pure functions a client needs to name a job channel, `encodeJobId` and\n * `decodeJobId`.\n *\n * **Browser-safe by construction.** This file imports nothing at all, so a\n * client (a React management UI, a CLI) can bundle it without pulling in a\n * driver, bun-common or any `node:*` / `bun:*` module. The server modules\n * import these values from here rather than declaring their own, so there is\n * exactly one definition of each. `__tests__/api/api-contract.test.ts` holds\n * the import graph to that promise.\n */\n\n/** The API protocol version, reported by `/meta` and the socket's `hello`. */\nexport const JOBS_API_PROTOCOL_VERSION = 1 as const;\n\n/** Every action `authorize` can be asked about. The list is the source of truth for specs and pruning. */\nexport const JOBS_API_ACTIONS = [\n \"meta.read\",\n \"docs.read\",\n \"queues.list\",\n \"queues.read\",\n \"queues.pause\",\n \"queues.resume\",\n \"queues.drain\",\n \"queues.clean\",\n \"queues.limits\",\n \"queues.defaults\",\n \"queues.applyDefaults\",\n \"queues.summon\",\n \"providers.read\",\n \"providers.validate\",\n \"metrics.read\",\n \"workers.list\",\n \"workers.read\",\n \"workers.pause\",\n \"workers.resume\",\n \"workers.stop\",\n \"workers.start\",\n \"workers.configure\",\n \"jobs.list\",\n \"jobs.read\",\n \"jobs.logs\",\n \"jobs.add\",\n \"jobs.update\",\n \"jobs.retry\",\n \"jobs.retryAll\",\n \"jobs.remove\",\n \"jobs.clearLogs\",\n \"jobs.promote\",\n \"jobs.fail\",\n \"repeatables.list\",\n \"repeatables.remove\",\n \"repeatables.disable\",\n \"repeatables.enable\",\n \"definitions.list\",\n \"runners.list\",\n \"runners.read\",\n \"runners.logs\",\n \"runners.trigger\",\n \"runners.pause\",\n \"runners.resume\",\n \"runners.kill\",\n \"runners.reschedule\",\n \"runners.resetStats\",\n \"runners.clearHistory\",\n \"runners.configure\",\n \"events.connect\",\n \"events.subscribe\",\n] as const;\n\n/** One authorizable action. */\nexport type JobsApiAction = (typeof JOBS_API_ACTIONS)[number];\n\n/**\n * Actions that change state; all are removed by `readOnly: true`.\n *\n * `queues.limits` is the `PUT` and `DELETE` of a queue's limits: reading them\n * is `queues.read`.\n * Likewise `queues.defaults` is the `PUT` and `DELETE` of a queue's job\n * defaults — reading them is `queues.read` — and `queues.applyDefaults` is\n * the rewrite of jobs already pending, `dryRun` included.\n * `jobs.clearLogs` and `runners.clearHistory` delete what they clear for good,\n * and are default-on all the same, as `jobs.remove` and `runners.resetStats`\n * are: they write no caller payload and reconfigure nothing.\n * `providers.validate` writes nothing either, but it reaches the platform with\n * the provider's credentials, so a read-only API never has it (plugins §13.2).\n */\nexport const JOBS_API_MUTATIONS: ReadonlySet<JobsApiAction> =\n new Set<JobsApiAction>([\n \"queues.pause\",\n \"queues.resume\",\n \"queues.drain\",\n \"queues.clean\",\n \"queues.limits\",\n \"queues.defaults\",\n \"queues.applyDefaults\",\n \"queues.summon\",\n \"providers.validate\",\n \"workers.pause\",\n \"workers.resume\",\n \"workers.stop\",\n \"workers.start\",\n \"workers.configure\",\n \"jobs.add\",\n \"jobs.update\",\n \"jobs.retry\",\n \"jobs.retryAll\",\n \"jobs.remove\",\n \"jobs.clearLogs\",\n \"jobs.promote\",\n \"jobs.fail\",\n \"repeatables.remove\",\n \"repeatables.disable\",\n \"repeatables.enable\",\n \"runners.trigger\",\n \"runners.pause\",\n \"runners.resume\",\n \"runners.kill\",\n \"runners.reschedule\",\n \"runners.resetStats\",\n \"runners.clearHistory\",\n \"runners.configure\",\n ]);\n\n/**\n * Actions excluded when `actions` is not given, because they write\n * caller-supplied payloads or reconfigure a process from outside it. Passing\n * `actions` replaces the default entirely: it is an allow-list, so naming only\n * these disables every other action.\n *\n * `workers.configure` and `runners.configure` are here for blast radius rather\n * than payload: one write reaches every replica carrying the key, and the\n * lock-related knobs decide whether a job can be run twice. The lifecycle\n * actions (`workers.pause/resume/stop/start`) are *not* opt-in, because\n * `queues.pause` — which stops every worker on a queue — is already default-on.\n *\n * `queues.defaults` and `queues.applyDefaults` are opt-in for the same reason:\n * one write changes the retries, timeout and retention of every job every\n * producer adds to the queue (and, for the second, of every job already\n * pending), and `removeOnComplete: true` or `attempts: 1` by mistake discards\n * work fleet-wide.\n *\n * `queues.summon` — \"summon now\" and resetting a queue's summon failures —\n * starts compute on a platform, which costs money, and a reset re-opens a\n * circuit that tripped on purpose; so it is granted only on purpose, and a\n * read-only API never has it. Reading a queue's summon status is\n * `queues.read`.\n *\n * `providers.read` and `providers.validate` — the compute providers\n * configured in the API's process, and a preflight against one's platform —\n * disclose infrastructure (clusters, regions, which accounts are reachable),\n * so both are granted only by name. `providers.read` is a read: `readOnly`\n * keeps it when `actions` names it. `providers.validate` is a mutation, like\n * `queues.summon`: it uses the provider's credentials, and `readOnly`\n * removes it.\n */\nexport const JOBS_API_OPT_IN_ACTIONS: ReadonlySet<JobsApiAction> =\n new Set<JobsApiAction>([\n \"jobs.add\",\n \"jobs.update\",\n \"queues.defaults\",\n \"queues.applyDefaults\",\n \"queues.summon\",\n \"providers.read\",\n \"providers.validate\",\n \"workers.configure\",\n \"runners.configure\",\n ]);\n\n/** Which half of the package the API exposes: routes, channels and spec entries alike. */\nexport type JobsApiMode = \"jobs\" | \"runner\" | \"both\";\n\n/** The WebSocket subprotocol. A client offering subprotocols must offer this one. */\nexport const JOBS_API_WS_SUBPROTOCOL = \"bun-jobs.v1\";\n\n/** Close codes the server uses. */\nexport const JOBS_API_WS_CLOSE = {\n /** A normal close. */\n NORMAL: 1000,\n /** The API is closing (`api.close()`). */\n GOING_AWAY: 1001,\n /** The client sent a binary frame. */\n UNSUPPORTED_DATA: 1003,\n /** The client broke a policy: rate limit breached twice within 10 s. */\n POLICY: 1008,\n /** The client sent a frame over `maxMessageBytes`. */\n TOO_BIG: 1009,\n /** The client could not keep up for `slowConsumerTimeoutMs`. */\n SLOW_CONSUMER: 4008,\n /** Reserved: the session is no longer authorized. Not sent in protocol 1. */\n UNAUTHORIZED: 4401,\n} as const;\n\n/**\n * Most channels one `subscribe` or `unsubscribe` frame may name: well above\n * the default of 50 subscriptions a connection may hold, and small enough that\n * one frame's parsing stays cheap.\n */\nexport const JOBS_API_WS_MAX_CHANNELS_PER_FRAME = 256;\n\n/** Every job state, in lifecycle order. */\nexport const JOB_STATES = [\n \"waiting\",\n \"delayed\",\n \"active\",\n \"completed\",\n \"failed\",\n \"dead\",\n \"waiting-children\",\n] as const;\n\n/**\n * Where a job is in its lifecycle. Two are easy to misread: `failed` is a job\n * whose attempt failed and that is **waiting to retry** (a UI may label it\n * \"Retrying\"), and `dead` is one that **gave up** — out of attempts, or failed\n * for good. Neither is the analytics series' `failed`, which counts failed\n * attempts.\n */\nexport type JobState = (typeof JOB_STATES)[number];\n\n/** Optional job fields a client asks for with `include=`. */\nexport const JOB_INCLUDES = [\n \"data\",\n \"returnValue\",\n \"stacktrace\",\n \"opts\",\n] as const;\n\n/** One optional job field. */\nexport type JobInclude = (typeof JOB_INCLUDES)[number];\n\n/**\n * What `GET /queues/:queue/jobs` can sort by (its `sort`), the default first.\n *\n * - `\"natural\"` (the default): each state's own order, the one every driver\n * shares and the list has always used. One state: `waiting` by priority\n * then `createdAt` (claim order), `delayed` and `failed` by `runAt` (when\n * they are due), `active` by lock expiry (`lockExpiresAt`), `completed` and\n * `dead` by `finishedOn`, `waiting-children` by `createdAt`. Several states,\n * or none named (every state): by `createdAt`.\n * - `\"createdAt\"`: by `createdAt` whatever the states, so \"newest first\" means\n * the same on every tab. Served only where `MetaDto.features.addedByState`\n * is `true`.\n *\n * `order` reverses either one.\n */\nexport const JOB_LIST_SORTS = [\"natural\", \"createdAt\"] as const;\n\n/** One way to sort the job list. See {@link JOB_LIST_SORTS}. */\nexport type JobListSort = (typeof JOB_LIST_SORTS)[number];\n\n/**\n * Every queue event name, in the order the server declares them.\n *\n * Every one but `summon` is about the queue's jobs or the queue itself.\n * **`summon` is about compute**: a summon attempt for the queue changed\n * state (its payload's `id` is the attempt's, never a job's, so it carries\n * no envelope `id` and never reaches a job channel). It moves no job and\n * changes no count; a client caching counts or job lists should not\n * invalidate them on it.\n */\nexport const QUEUE_EVENT_TYPES = [\n \"added\",\n \"duplicate\",\n \"waiting\",\n \"delayed\",\n \"active\",\n \"progress\",\n \"completed\",\n \"failed\",\n \"retrying\",\n \"dead\",\n \"stalled\",\n \"removed\",\n \"promoted\",\n \"paused\",\n \"resumed\",\n \"drained\",\n \"cleaned\",\n \"retried\",\n \"debounced\",\n \"throttled\",\n \"repeatScheduled\",\n \"summon\",\n] as const;\n\n/**\n * What one summon attempt ended as, in a `summon` event's `outcome` and a\n * summon status's `last.outcome`. A later server may add one: show an\n * outcome you do not know as the raw string.\n */\nexport const SUMMON_OUTCOMES = [\n \"started\",\n \"deduped\",\n \"already-running\",\n \"registered\",\n \"unavailable\",\n \"failed\",\n \"lost\",\n \"budget-exhausted\",\n \"released\",\n] as const;\n\n/** One summon outcome. See {@link SUMMON_OUTCOMES}. */\nexport type SummonOutcomeKind = (typeof SUMMON_OUTCOMES)[number];\n\n/**\n * Why a summon check ran: a local add, another process's event, the poll, a\n * schedule, a manual call (the API's \"summon now\" among them), or a timer\n * for a delayed job coming due.\n */\nexport const SUMMON_REASONS = [\n \"add\",\n \"event\",\n \"poll\",\n \"schedule\",\n \"manual\",\n \"timer\",\n] as const;\n\n/** One summon check reason. See {@link SUMMON_REASONS}. */\nexport type SummonReason = (typeof SUMMON_REASONS)[number];\n\n/** Why a summon check did not summon, in `SummonCheckDto.reason`. */\nexport const SUMMON_SKIP_REASONS = [\n \"served\",\n \"pending\",\n \"cooldown\",\n \"backoff\",\n \"circuit-open\",\n \"budget\",\n \"contended\",\n \"closed\",\n \"inert\",\n] as const;\n\n/** One reason a summon check skipped. See {@link SUMMON_SKIP_REASONS}. */\nexport type SummonSkipReason = (typeof SUMMON_SKIP_REASONS)[number];\n\n/**\n * Every runner event name, in the order the server declares them.\n *\n * Every one but `logs` reports a change to the runner or one of its runs.\n * **`logs` is not a state change**: it announces that a run's stored log grew\n * and changes no runner state, so a client caching runner detail, stats or\n * history should not invalidate them on it — it re-reads that run's log with\n * `?since=` instead.\n */\nexport const RUNNER_EVENT_TYPES = [\n \"control\",\n \"started\",\n \"succeeded\",\n \"failed\",\n \"queued\",\n \"skipped\",\n \"timeout\",\n \"killed\",\n \"logs\",\n] as const;\n\n/** The name of any queue event. */\nexport type QueueEventName = (typeof QUEUE_EVENT_TYPES)[number];\n\n/** The name of any runner event. */\nexport type RunnerEventName = (typeof RUNNER_EVENT_TYPES)[number];\n\n/**\n * Every distinct event name, queue events first, then the runner's and the\n * worker's: a name shared by two kinds appears once (`failed` is both a queue\n * and a runner event, `control` both a runner and a worker one), because the\n * filter matches on `type` and the envelope's `kind` tells them apart. What a\n * `subscribe` frame's `events` filter accepts.\n */\nexport const EVENT_TYPES = [\n ...QUEUE_EVENT_TYPES,\n \"control\",\n \"started\",\n \"succeeded\",\n \"queued\",\n \"skipped\",\n \"timeout\",\n \"killed\",\n \"logs\",\n \"state\",\n \"config\",\n] as const satisfies readonly (\n QueueEventName | RunnerEventName | WorkerEventName\n)[];\n\n/** Any event name a subscription can filter on. */\nexport type EventName = (typeof EVENT_TYPES)[number];\n\n/* ------------------------------------------------------------------ *\n * Queue job defaults\n * ------------------------------------------------------------------ */\n\n/**\n * Every job option a queue's stored defaults may replace, in the order a form\n * should show them. Build the form from this list, never a hand-written one.\n *\n * Deliberately absent: `deadLetter`, and the options that describe one job\n * rather than a queue's policy — `jobId`, `runAt`, `delay`, `repeat`,\n * `debounce`, `throttle` (and `ignoreFailure`, which only means anything on a\n * flow child).\n */\nexport const JOB_DEFAULT_KEYS = [\n \"attempts\",\n \"backoff\",\n \"timeout\",\n \"priority\",\n \"removeOnComplete\",\n \"removeOnFail\",\n \"keepLogs\",\n \"keepStacktraces\",\n] as const;\n\n/** One job option a queue's stored defaults may replace. */\nexport type JobDefaultKey = (typeof JOB_DEFAULT_KEYS)[number];\n\n/* ------------------------------------------------------------------ *\n * Summon policy\n * ------------------------------------------------------------------ */\n\n/**\n * Every `SummonPolicy` option a summon status's `policy.explicit` may name,\n * as its path in the policy, in the order a panel should show them. A key in\n * `explicit` is one the policy set (any value but `undefined`); every other\n * value `policy` shows is a default.\n *\n * Paths match `policy`'s fields (`cooldown`, `backoff.initial`, …), with\n * three exceptions: `group.circuit.*` is shown as `policy.circuit.group.*`;\n * `budget`, `budget.perHour` and `budget.perDay` are shown by the status's\n * own `budget` and `group.budget` (`budget` is listed when the policy gave\n * one at all, `false` included); and `env` is shown by name only.\n */\nexport const SUMMON_POLICY_KEYS = [\n \"triggers.onAdd\",\n \"triggers.events\",\n \"triggers.poll\",\n \"triggers.debounce\",\n \"bootBudget\",\n \"maxWorkers\",\n \"jobsPerWorker\",\n \"maxPending\",\n \"cooldown\",\n \"backoff.initial\",\n \"backoff.max\",\n \"circuit.failures\",\n \"circuit.resetAfter\",\n \"group.circuit.failures\",\n \"group.circuit.resetAfter\",\n \"budget\",\n \"budget.perHour\",\n \"budget.perDay\",\n \"maxLifetime\",\n \"servedBy\",\n \"scaleDown.after\",\n \"summonTimeout\",\n \"env\",\n \"fromSummoned\",\n \"onSummonFailed\",\n] as const;\n\n/** One `SummonPolicy` option, as its path in the policy: an item of {@link SUMMON_POLICY_KEYS}. */\nexport type SummonPolicyKey = (typeof SUMMON_POLICY_KEYS)[number];\n\n/**\n * The backoff strategies a stored default may name. The code may use any\n * strategy (built-in or registered on the worker); a remote edit is limited to\n * these two, which need no worker-side registration and so cannot name a\n * strategy some worker does not have.\n */\nexport const JOB_DEFAULT_BACKOFF_TYPES = [\"fixed\", \"exponential\"] as const;\n\n/** A backoff strategy a stored default may name. */\nexport type JobDefaultBackoffType = (typeof JOB_DEFAULT_BACKOFF_TYPES)[number];\n\n/**\n * The inclusive bounds stored job defaults are validated against. Exported so\n * a UI builds its inputs from the very numbers the server enforces.\n *\n * **The bounds are the API's, not the queue's.** `resolveJobOptions` accepts\n * any whole `attempts` of at least 1 and imposes no ceiling on the others; a\n * remote caller should not be able to set `attempts: 1e9` with one typo.\n *\n * - `timeout`: ms, `0` meaning none. The ceiling is a day — well inside\n * `setTimeout`'s 2³¹−1 ms limit, past which a timer fires at once.\n * - `priority`: the range the drivers order on (clamped in code, refused here).\n * - `keepLogs`: at least `1`. In code `0` means *keep every line*, which a\n * remote edit must not be able to turn on for a whole queue.\n * - `backoffDelay` / `backoffMax`: ms, for `backoff.delay` and `backoff.max`\n * (and a plain-number backoff, which is a fixed delay).\n * - `backoffJitter`: the fraction of each delay randomised.\n * - `retentionCount` / `retentionTtl`: a `removeOnComplete`/`removeOnFail`\n * `count` (or bare number) and `ttl` in ms (a year at most).\n */\nexport const JOB_DEFAULTS_BOUNDS = {\n attempts: { min: 1, max: 1_000 },\n timeout: { min: 0, max: 86_400_000 },\n priority: { min: -1_048_576, max: 1_048_576 },\n keepLogs: { min: 1, max: 100_000 },\n keepStacktraces: { min: 0, max: 100 },\n backoffDelay: { min: 0, max: 86_400_000 },\n backoffMax: { min: 0, max: 86_400_000 },\n backoffJitter: { min: 0, max: 1 },\n retentionCount: { min: 0, max: 1_000_000 },\n retentionTtl: { min: 0, max: 31_536_000_000 },\n} as const satisfies Readonly<Record<string, { min: number; max: number }>>;\n\n/**\n * The job states `POST /queues/:queue/job-defaults/apply` may rewrite, in the\n * order it walks them, and what it walks when a call names none — every state\n * a job waits in before it runs. `active` never: its worker already holds its\n * own copy of the job. `completed` and `dead` never: they are finished.\n */\nexport const JOB_DEFAULTS_APPLY_STATES = [\n \"waiting\",\n \"delayed\",\n \"failed\",\n \"waiting-children\",\n] as const satisfies readonly JobState[];\n\n/** A state the apply action may rewrite. */\nexport type JobDefaultsApplyState = (typeof JOB_DEFAULTS_APPLY_STATES)[number];\n\n/* ------------------------------------------------------------------ *\n * Workers\n * ------------------------------------------------------------------ */\n\n/**\n * Every state a worker reports, in lifecycle order.\n *\n * - `running`: consuming;\n * - `paused`: the loop runs but takes no new job;\n * - `stopping`: parked, waiting for the jobs in flight to finish;\n * - `stopped`: parked and idle, still registered and still heartbeating, so\n * `start` can bring it back — unlike `close()` in code, which unregisters it;\n * - `restarting`: a millisecond transient while a config change is applied.\n */\nexport const WORKER_STATES = [\n \"running\",\n \"paused\",\n \"stopping\",\n \"stopped\",\n \"restarting\",\n] as const;\n\n/** What a worker is doing. */\nexport type WorkerState = (typeof WORKER_STATES)[number];\n\n/**\n * The lifecycle instruction a controller may record against a worker: what it\n * should be, rather than what it is. `stopping` and `restarting` are states a\n * worker passes through, never things to ask for.\n */\nexport type WorkerDesiredState = Exclude<\n WorkerState,\n \"stopping\" | \"restarting\"\n>;\n\n/**\n * How a worker hears about a control change: a driver subscription (prompt),\n * or only its own polling (up to one `reportInterval` late).\n */\nexport type WorkerControlMode = \"subscribe\" | \"poll\";\n\n/**\n * What a worker `control` event says a controller asked for: the four\n * lifecycle instructions, a configuration override (`config`) and its removal\n * (`reset`).\n */\nexport const WORKER_CONTROL_ACTIONS = [\n \"pause\",\n \"resume\",\n \"stop\",\n \"start\",\n \"config\",\n \"reset\",\n] as const;\n\n/** One thing a controller can ask a worker for. */\nexport type WorkerControlAction = (typeof WORKER_CONTROL_ACTIONS)[number];\n\n/**\n * How far a `stop` survives.\n *\n * - `\"process\"`: only this incarnation is stopped, so a redeploy brings the\n * worker back running;\n * - `\"key\"`: the stop is stored against the worker's stable `key`, so every\n * replica carrying it — including one started later — comes up stopped.\n */\nexport const WORKER_STOP_PERSISTENCE = [\"process\", \"key\"] as const;\n\n/** How far a `stop` survives; the default is `\"process\"`. */\nexport type WorkerStopPersistence = (typeof WORKER_STOP_PERSISTENCE)[number];\n\n/**\n * Every value a worker record's `target.kind` can take, for a reader to\n * enumerate: the three local targets, `\"container\"` (a fresh container per\n * attempt), and `\"custom\"` for a `WorkerTargetFactory`. A closed list a UI\n * can switch on — though a reader meeting a kind it does not know should show\n * the raw string, since a later version may add one.\n */\nexport const WORKER_TARGET_KINDS = [\n \"in-process\",\n \"worker-thread\",\n \"child-process\",\n \"container\",\n \"custom\",\n] as const;\n\n/** One of {@link WORKER_TARGET_KINDS}. */\nexport type WorkerTargetKind = (typeof WORKER_TARGET_KINDS)[number];\n\n/**\n * Every worker setting a config override may replace, in the order a form\n * should show them. Build the UI's form from this list, never a hand-written\n * one, so a setting added here appears without a UI change.\n */\nexport const WORKER_CONFIG_KEYS = [\n \"concurrency\",\n \"pollInterval\",\n \"maxBlock\",\n \"lockDuration\",\n \"heartbeatInterval\",\n \"stalledInterval\",\n \"maxStalledCount\",\n \"reportInterval\",\n \"drainDelay\",\n] as const;\n\n/** One overridable worker setting. */\nexport type WorkerConfigKey = (typeof WORKER_CONFIG_KEYS)[number];\n\n/**\n * The inclusive bounds a worker config override is validated against —\n * milliseconds except `concurrency` and `maxStalledCount`, which are counts.\n * Exported so a UI builds its inputs from the very numbers the server\n * enforces, and cannot drift from them.\n *\n * **One rule is not expressible here**: `heartbeatInterval` must also be at\n * most half the *effective* `lockDuration`, since a lock renewed less often\n * than twice per lease can lapse under a slow tick. That cross-field check\n * lives in the server's validation; a UI that wants to pre-empt it should\n * apply the same ceiling.\n *\n * `reportInterval` has a floor of one second rather than `0`: a worker that\n * never reports is invisible in the registry and therefore unreachable by\n * every control route, so turning reporting off remotely is refused.\n */\nexport const WORKER_CONFIG_BOUNDS: Readonly<\n Record<WorkerConfigKey, { min: number; max: number }>\n> = {\n concurrency: { min: 1, max: 1_000 },\n pollInterval: { min: 10, max: 3_600_000 },\n maxBlock: { min: 10, max: 3_600_000 },\n lockDuration: { min: 1_000, max: 86_400_000 },\n heartbeatInterval: { min: 100, max: 43_200_000 },\n stalledInterval: { min: 1_000, max: 86_400_000 },\n maxStalledCount: { min: 0, max: 100 },\n reportInterval: { min: 1_000, max: 600_000 },\n drainDelay: { min: 0, max: 86_400_000 },\n};\n\n/**\n * Every worker event name, in the order the server declares them: `control`\n * (an instruction was recorded), `state` (a worker changed state) and\n * `config` (a worker adopted, or refused part of, an override).\n *\n * `control` is also a runner event name; {@link EVENT_TYPES} lists it once,\n * and the envelope's `kind` tells the two apart.\n */\nexport const WORKER_EVENT_TYPES = [\"control\", \"state\", \"config\"] as const;\n\n/** The name of any worker event. */\nexport type WorkerEventName = (typeof WORKER_EVENT_TYPES)[number];\n\n/* ------------------------------------------------------------------ *\n * Runners\n * ------------------------------------------------------------------ */\n\n/**\n * Where a run executes, as a list rather than only a union, because a form\n * needs the values at runtime:\n *\n * - `child-process`: a child process per run — the only mode a run can be\n * force-killed in, and the default;\n * - `worker-thread`: a `Worker` per run, sharing the process's memory limits\n * and file descriptors;\n * - `in-process`: the owner's own event loop, where a CPU-bound handler stalls\n * everything else in that process, including its workers' lock renewals.\n *\n * `child-process` and `worker-thread` receive `ctx.driverConfig` rather than\n * `ctx.driver`, so a handler reaching for `ctx.driver` works only\n * `in-process`.\n *\n * The same three values a worker's `target` takes. Stores written before\n * these spellings may hold `\"spawn\"` and `\"worker\"`; every value the API\n * returns is translated to these, and the API accepts only these on input.\n */\nexport const EXECUTION_MODES = [\n \"child-process\",\n \"worker-thread\",\n \"in-process\",\n] as const;\n\n/**\n * The runner settings a remote override may replace, in the order a form\n * should show them. `maxConcurrency` only means anything under\n * `runMode: \"parallel\"`, so the two are written together.\n */\nexport const RUNNER_CONFIG_KEYS = [\n \"executionMode\",\n \"runMode\",\n \"maxConcurrency\",\n] as const;\n\n/** One overridable runner setting. */\nexport type RunnerConfigKey = (typeof RUNNER_CONFIG_KEYS)[number];\n\n/**\n * The inclusive bounds a runner config override's numeric settings are\n * validated against. Exported so a UI builds its inputs from the very numbers\n * the API enforces, as it does from `WORKER_CONFIG_BOUNDS`. Only\n * `maxConcurrency` takes a number; the other two settings are enumerations\n * (`EXECUTION_MODES`, and `\"single\" | \"parallel\"`).\n *\n * **The maximum is the API's, not the runner's.** `resolveRunnerOptions`\n * (`lib/runner/options.ts:70`) refuses `maxConcurrency` below `1` and imposes\n * no ceiling at all — its default is `Number.POSITIVE_INFINITY`, which is how\n * \"unlimited\" is spelled in code. A remote caller cannot send infinity over\n * JSON and should not be able to start ten thousand runs with one typo, so the\n * route caps what it accepts and a client asks for unlimited by sending\n * `maxConcurrency: null` instead. The floor is the runner's own.\n */\nexport const RUNNER_CONFIG_BOUNDS: Readonly<\n Record<\"maxConcurrency\", { min: number; max: number }>\n> = {\n maxConcurrency: { min: 1, max: 1_000 },\n};\n\n/* ------------------------------------------------------------------ *\n * Run logs\n * ------------------------------------------------------------------ */\n\n/**\n * The streams a captured run-log line can come from, in the order a filter\n * should offer them.\n *\n * - `stdout` and `stderr`: what a spawned run wrote to its pipes, verbatim;\n * - `log`: a line the run forwarded through the runner's own log call, which\n * arrives already rendered to text — a separate stream so a reader can tell\n * deliberate logging from raw output, and so a filter can ask for one.\n *\n * The only definition: the runtime re-exports it from `lib/shared/constants.ts`\n * (the contract imports nothing, but nothing stops the runtime importing it).\n */\nexport const RUN_LOG_STREAMS = [\"stdout\", \"stderr\", \"log\"] as const;\n\n/** Which stream a run-log line came from. */\nexport type RunLogStream = (typeof RUN_LOG_STREAMS)[number];\n\n/**\n * The levels a `log`-stream line may carry, in increasing severity: bun-common's\n * six, restated here because the contract cannot import bun-common (a browser\n * bundling this must not pull the HTTP layer in). `stdout` and `stderr` lines\n * have no level at all, and a forwarded line that came without one has none\n * either — `RunLogLineDto.level` is optional for both reasons.\n *\n * A client that colours or filters by severity builds its control from this\n * list, so a level added to the logger appears without a UI change.\n */\nexport const RUN_LOG_LEVELS = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\",\n \"fatal\",\n] as const;\n\n/** The level a `log`-stream run-log line carried. */\nexport type RunLogLevel = (typeof RUN_LOG_LEVELS)[number];\n\n/**\n * The least time between two `logs` runner events for one run, in\n * milliseconds: the rate a log tail can expect hints at. The first append in\n * a window is announced at once, the rest collapse into one trailing hint\n * carrying the newest `lastSeq`, and a run that settles announces its last\n * `lastSeq` without waiting out the window.\n *\n * The single definition: the runtime's `lib/shared/constants.ts` re-exports\n * this one, and `__tests__/api/api-contract.test.ts` pins the pair.\n */\nexport const RUN_LOG_HINT_MS = 500;\n\n/**\n * What a scrubbed secret becomes in a stored run-log line, unless the\n * runner's `captureLogs.redact.replacement` says otherwise. A log view can name it\n * to mark redacted spans.\n *\n * The single definition: the runtime's redaction (`lib/runner/redact.ts`)\n * imports this one, and `__tests__/api/api-contract.test.ts` pins the pair.\n */\nexport const DEFAULT_REDACT_REPLACEMENT = \"[REDACTED]\";\n\n/* ------------------------------------------------------------------ *\n * Analytics and time ranges\n * ------------------------------------------------------------------ */\n\n/**\n * The bucket widths the analytics routes can serve, in **seconds**, finest\n * first. A client sends one of these as `resolution`; anything else is 400\n * `VALIDATION`.\n *\n * A deployment may serve fewer — the file driver records minutes only — so a\n * picker offers what `MetaDto.analytics.resolutions` reports and falls back to\n * this list when the API reports none.\n */\nexport const ANALYTICS_RESOLUTIONS = [1, 60] as const;\n\n/** One bucket width an analytics response may be served at, in seconds. */\nexport type AnalyticsResolution = (typeof ANALYTICS_RESOLUTIONS)[number];\n\n/**\n * A client's default pick of bucket width: a minute, which every driver that\n * records anything keeps for a day.\n *\n * The server never reads it. A request that names no `resolution` is served\n * at the finest width the backend keeps for the whole span within the bucket\n * cap (`resolveAnalyticsRange`), so a 5-minute range comes back at 1 s, not at\n * this. It exists so a picker has something to start from.\n */\nexport const DEFAULT_ANALYTICS_RESOLUTION: AnalyticsResolution = 60;\n\n/** One second-resolution bucket, in milliseconds. */\nexport const SECOND_BUCKET_MS = 1_000;\n\n/**\n * One minute-resolution bucket, in milliseconds. The same number as the\n * runtime's `THROUGHPUT_BUCKET_MS` (`lib/drivers/readApis.ts`), restated\n * because the contract may import nothing; `__tests__/api/api-contract.test.ts`\n * holds the two equal.\n */\nexport const MINUTE_BUCKET_MS = 60_000;\n\n/**\n * How long per-second buckets are kept by default: five minutes.\n *\n * Deliberately short. Per-second bucketing costs O(entities), not O(jobs) —\n * a mid namespace (20 queues, 40 workers) holds about 19,500 buckets at five\n * minutes and about 58,500 at fifteen — so the retention, not the job rate, is\n * what the storage bill is made of. Five minutes covers the two presets the\n * feature exists for (60 s and 5 m); the 10 m preset falls back to 60 s\n * buckets and the response says so (`clamped`, `reason: \"retention\"`).\n */\nexport const DEFAULT_SECOND_RETENTION_MS = 5 * 60_000;\n\n/** The longest per-second retention a deployment may configure: fifteen minutes. */\nexport const MAX_SECOND_RETENTION_MS = 15 * 60_000;\n\n/**\n * How long minute buckets are kept: a day, so 1,440 buckets per series. The\n * same number as the runtime's `THROUGHPUT_RETENTION_MS`\n * (`lib/drivers/readApis.ts`), restated because the contract may import\n * nothing; a test holds the two equal. Not configurable in this round.\n */\nexport const MINUTE_RETENTION_MS = 24 * 60 * 60 * 1_000;\n\n/**\n * The longest span one analytics request may cover: a day, which is all the\n * minute buckets there are. A wider range is 400 `INVALID_ARGUMENT`, so a\n * picker clamps itself to `MetaDto.analytics.maxSpanMs` (this, unless the\n * deployment says otherwise) rather than sending a request that cannot work.\n */\nexport const MAX_ANALYTICS_SPAN_MS = 24 * 60 * 60 * 1_000;\n\n/** The shortest span that still holds one bucket: a second. Below it, 400 `INVALID_ARGUMENT`. */\nexport const MIN_ANALYTICS_SPAN_MS = 1_000;\n\n/**\n * The longest span `GET /overview/added` and `GET /queues/{queue}/counts/added`\n * may cover: a day, the analytics picker's own limit, so one range picker\n * serves both halves of a card that shows these counts beside the analytics\n * series. A wider range is 400 `INVALID_ARGUMENT`.\n *\n * Deliberately its own name: the analytics limit is about the buckets kept,\n * this one about how many job rows one read may count. They agree today.\n */\nexport const MAX_ADDED_BY_STATE_SPAN_MS = 24 * 60 * 60 * 1_000;\n\n/**\n * Most buckets one series may hold. The cap is what picks the resolution: the\n * finest `r` the driver keeps for the whole span with `span / r` within this.\n * A day at one second would be 86,400 points — more than a chart can draw and\n * more than a response should carry — so such a span is served at 60 s with\n * `clamped: true` and `reason: \"maxBuckets\"`.\n */\nexport const MAX_ANALYTICS_BUCKETS = 1_500;\n\n/**\n * Most series one request may ask for by name (`ids=`, `keys=`). An explicit\n * over-ask is 400 `BULK_LIMIT` rather than a silent truncation: a caller that\n * named its series wants those series.\n *\n * It is also the page size the Runners and Workers tables should use, so the\n * sparklines for one visible page are exactly one batch request.\n */\nexport const MAX_ANALYTICS_SERIES = 20;\n\n/**\n * Most scalar rows an overview section reports, sorted by `completed`\n * descending then by key, with `truncated: true` beyond it. A namespace with\n * 200 workers therefore costs three series and 100 rows, not 200 series.\n */\nexport const MAX_ANALYTICS_ROWS = 100;\n\n/**\n * The rolling spans a range picker offers, shortest first, in **seconds**.\n * They are the API's rather than a client's so that a preset a deployment\n * cannot serve at the resolution it implies is still described by one honest\n * set of numbers — the response's `clamped`/`reason` explains the difference.\n */\nexport const ANALYTICS_PRESETS = [\n 60, // a minute\n 300, // 5 minutes\n 600, // 10 minutes\n 1800, // 30 minutes\n 3600, // an hour\n 21600, // 6 hours\n 86400, // a day\n] as const;\n\n/**\n * One rolling preset, in seconds.\n *\n * The list is written as plain literals rather than as `5 * 60` and friends\n * deliberately: `as const` keeps a literal type only for a literal, so an\n * arithmetic entry would widen this union to `number` and a picker offering\n * any span at all would compile.\n */\nexport type AnalyticsPreset = (typeof ANALYTICS_PRESETS)[number];\n\n/** The preset a view opens on: the last hour, which is what the Overview always showed. */\nexport const DEFAULT_ANALYTICS_PRESET: AnalyticsPreset = 3600;\n\n/**\n * The upper edges of the fixed log histogram run durations are counted in, in\n * milliseconds: 24 powers of two, `1` to `2**23` (about 2.3 hours).\n *\n * A bucket's `histogram` is one count **more** than there are edges. Count `0`\n * is everything under the first edge (`[0, 1)` ms), count `i` is\n * `[bounds[i - 1], bounds[i])`, and the last is the overflow, everything at or\n * above the final edge. Fixed bins are what make a histogram mergeable: two\n * histograms over the same edges add element by element, whoever wrote them.\n *\n * How a backend stores it follows from that. A bucket takes many flushes from\n * the same writer, so each flush *adds* its counts: SQL keeps the histogram as\n * 25 integer columns on the bucket's shared row (no portable SQL adds two JSON\n * arrays), MongoDB merges the array atomically, and a read sums what it finds.\n */\nexport const DURATION_HISTOGRAM_BOUNDS = [\n 1, // 2**0 ms\n 2,\n 4,\n 8,\n 16,\n 32,\n 64,\n 128,\n 256,\n 512,\n 1_024,\n 2_048,\n 4_096,\n 8_192,\n 16_384,\n 32_768,\n 65_536,\n 131_072,\n 262_144,\n 524_288,\n 1_048_576,\n 2_097_152,\n 4_194_304,\n 8_388_608, // 2**23 ms, about 2.3 hours\n] as const;\n\n/** The pattern a queue name or runner id must match, besides not being `\".\"` or `\"..\"`. */\nexport const NAME_SEGMENT_PATTERN = \"^[\\\\w.-]+$\";\n\n/**\n * The same rule as one JSON Schema pattern, `\".\"` and `\"..\"` excluded: what the\n * routes enforce on a `:queue` or `:runner` path segment (400 `INVALID_NAME`).\n */\nexport const NAME_PARAM_PATTERN = \"^(?!\\\\.\\\\.?$)[\\\\w.-]+$\";\n\n/** Longest a queue name or runner id may be, in characters. */\nexport const MAX_NAME_LENGTH = 200;\n\n/**\n * Longest id a caller may choose for a new job (`opts.jobId`), in\n * characters: the cap bun-jobs' own `assertJobId` applies\n * (`MAX_JOB_ID_LENGTH` in `lib/queue/options.ts`, restated here because the\n * contract must not import the queue; a test pins the two together). MySQL and\n * MariaDB store ids as `VARCHAR(191)`, and one cap everywhere keeps an id that\n * works on one driver from failing on another. `assertJobId` stays the\n * authority: it counts UTF-16 units and refuses control characters, a leading\n * `.` and a lone surrogate, answered 400 `INVALID_ARGUMENT`.\n */\nexport const MAX_JOB_ID_LENGTH = 191;\n\n/**\n * Longest id that may *address* an existing job — in a path, a bulk body or a\n * lookup. Wider than {@link MAX_JOB_ID_LENGTH} on purpose: a backend may hold\n * jobs whose ids predate that cap, and they must stay reachable.\n */\nexport const MAX_JOB_REF_LENGTH = 1024;\n\n/**\n * Most values one repeatable worker filter on the job list (`workerKey`,\n * `workerId`) may carry; more is 400 `VALIDATION`. The same bound the worker\n * listing's own filters (`key`, `host`, …) have, so a selection copied from\n * one to the other fits.\n */\nexport const MAX_JOB_FILTER_VALUES = 100;\n\n/**\n * The latest instant a `Date` can hold, in epoch milliseconds (ECMAScript's\n * range is ±8.64e15). Every time the API accepts as epoch milliseconds — a\n * job's `runAt`, a schedule's `anchor` or `at` — is capped at this, so a later\n * one is 400 `VALIDATION` instead of an invalid `Date` further in.\n */\nexport const MAX_DATE_MS = 8_640_000_000_000_000;\n\n/* ------------------------------------------------------------------ *\n * Channel names\n * ------------------------------------------------------------------ */\n\n/**\n * Escapes a job id for a channel name: `encodeURIComponent`, except that a\n * lone UTF-16 surrogate — which `encodeURIComponent` refuses with a `URIError`\n * — becomes `%uXXXX` (upper-case hex). A well-formed id is therefore escaped\n * exactly as before, and {@link decodeJobId} reverses either form. The two\n * cannot be confused: `encodeURIComponent` escapes every `%` as `%25`.\n *\n * A client names a job's channel as `queue/<queue>/job/${encodeJobId(id)}`.\n * Pure, with no imports, so it is safe in a browser.\n */\nexport function encodeJobId(jobId: string): string {\n if (jobId.isWellFormed()) {\n return encodeURIComponent(jobId);\n }\n let out = \"\";\n let run = 0;\n for (let index = 0; index < jobId.length; index++) {\n const unit = jobId.charCodeAt(index);\n if (unit < 0xd800 || unit > 0xdfff) {\n continue;\n }\n const next = jobId.charCodeAt(index + 1);\n if (unit <= 0xdbff && next >= 0xdc00 && next <= 0xdfff) {\n index++;\n continue;\n }\n out += `${encodeURIComponent(jobId.slice(run, index))}%u${unit.toString(16).toUpperCase()}`;\n run = index + 1;\n }\n return out + encodeURIComponent(jobId.slice(run));\n}\n\n/**\n * Reverses {@link encodeJobId}: the job id a job channel's last segment\n * names. Throws `URIError` on a malformed escape, and on a `%uXXXX` escape of\n * anything but a surrogate.\n */\nexport function decodeJobId(encoded: string): string {\n return encoded\n .split(/(%u[\\dA-Fa-f]{4})/)\n .map((part, index) => {\n if (index % 2 === 0) {\n return decodeURIComponent(part);\n }\n const unit = Number.parseInt(part.slice(2), 16);\n // Only a surrogate needs this form; anything else has a standard one.\n if (unit < 0xd800 || unit > 0xdfff) {\n throw new URIError(`\"${part}\" is not a surrogate escape`);\n }\n return String.fromCharCode(unit);\n })\n .join(\"\");\n}\n\n/* ------------------------------------------------------------------ *\n * Problem codes\n * ------------------------------------------------------------------ */\n\n/**\n * The status each of the API's own problem codes is answered with: the\n * source of {@link ApiOwnErrorCode}. The OpenAPI generator reads it to\n * document a route's `errors` under the right status; the server's error\n * handler imports it from here, so the two cannot disagree.\n */\nexport const API_ERROR_STATUS = {\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n QUEUE_NOT_FOUND: 404,\n JOB_NOT_FOUND: 404,\n RUNNER_NOT_FOUND: 404,\n RUN_NOT_FOUND: 404,\n REPEATABLE_NOT_FOUND: 404,\n WORKER_NOT_FOUND: 404,\n PROVIDER_NOT_FOUND: 404,\n PROVIDER_SCHEMA_NOT_FOUND: 404,\n WORKER_GONE: 410,\n ROUTE_NOT_FOUND: 404,\n INVALID_NAME: 400,\n INVALID_JSON: 400,\n INVALID_SCHEDULE: 400,\n JOB_STATE_CONFLICT: 409,\n JOB_ACTIVE: 409,\n RUNNER_NOT_LOCAL: 409,\n WORKER_STATE_CONFLICT: 409,\n WORKER_NOT_CONTROLLABLE: 409,\n WORKER_PERSISTENCE_NOT_ALLOWED: 409,\n CONTROL_CONTENDED: 409,\n CONFIG_NOT_ALLOWED: 409,\n RUNNER_NOT_CONFIGURABLE: 409,\n LOGS_NOT_RETAINED: 409,\n OPERATION_IN_PROGRESS: 409,\n DEFAULTS_CHANGED: 409,\n SUMMON_NOT_CONFIGURED: 409,\n SUMMON_MARKER_CONTENDED: 409,\n BULK_LIMIT: 400,\n RANGE_NOT_RETAINED: 400,\n ARGS_NOT_ALLOWED: 400,\n NAME_NOT_ADDABLE: 403,\n CSRF_REJECTED: 403,\n ORIGIN_REJECTED: 403,\n CONNECTION_LIMIT: 429,\n UNSUPPORTED_SUBPROTOCOL: 400,\n UNSUPPORTED_MEDIA_TYPE: 415,\n PAYLOAD_TOO_LARGE: 413,\n LIMITS_CONTENDED: 409,\n INVALID_ARGUMENT: 400,\n NOT_SUPPORTED: 501,\n VALIDATION: 400,\n SERIALIZATION: 400,\n QUEUE_CLOSED: 503,\n WORKER_CLOSED: 503,\n JOBS_CLOSED: 503,\n QUEUE_FULL: 503,\n DRIVER_ERROR: 503,\n RUNNER_STOPPED: 409,\n LOCK_UNAVAILABLE: 409,\n LOCK_LOST: 409,\n INTERNAL: 500,\n} as const;\n\n/**\n * Codes of bun-jobs' own errors the API answers with as they are, as a 500\n * (its `detail` the generic title): a job's or a runner's failure reaching a\n * management call. Any other library error with no mapping of its own is\n * answered as `INTERNAL`, so a problem's `code` is always an\n * {@link ApiErrorCode}.\n */\nexport const API_INTERNAL_ERROR_CODES = [\n \"PROTOCOL\",\n \"JOB_TIMEOUT\",\n \"UNRECOVERABLE_JOB\",\n \"CHILD_EXIT\",\n \"CHILD_FAILED\",\n \"OUTPUT_LIMIT\",\n \"RUN_KILLED\",\n \"INVALID_HANDLER\",\n \"JOB_DATA_VALIDATION\",\n] as const;\n",
12
+ "/**\n * Constants of the bun-jobs management API.\n *\n * They come from `@kingsleyweb/bun-jobs/api/contract`, the package's\n * browser-safe entry: it imports nothing but its own sibling files (no driver,\n * bun-common, `node:*` or `bun:*`), and the server imports the same values, so\n * the two cannot disagree. `__tests__/app/pkg/bundle-safety.test.ts` builds\n * the app and asserts nothing of the server reached the bundle.\n *\n * The method sets below are the app's own reading of the CSRF rules.\n */\nexport {\n ANALYTICS_PRESETS,\n ANALYTICS_RESOLUTIONS,\n DEFAULT_ANALYTICS_PRESET,\n DEFAULT_ANALYTICS_RESOLUTION,\n DEFAULT_REDACT_REPLACEMENT,\n DEFAULT_SECOND_RETENTION_MS,\n EXECUTION_MODES,\n JOB_DEFAULT_BACKOFF_TYPES,\n JOB_DEFAULT_KEYS,\n JOB_DEFAULTS_APPLY_STATES,\n JOB_DEFAULTS_BOUNDS,\n JOB_STATES,\n JOBS_API_ACTIONS,\n JOBS_API_MUTATIONS,\n JOBS_API_OPT_IN_ACTIONS,\n JOBS_API_PROTOCOL_VERSION,\n JOBS_API_WS_SUBPROTOCOL,\n MAX_ADDED_BY_STATE_SPAN_MS,\n MAX_ANALYTICS_BUCKETS,\n MAX_ANALYTICS_ROWS,\n MAX_ANALYTICS_SERIES,\n MAX_ANALYTICS_SPAN_MS,\n MAX_DATE_MS,\n MAX_JOB_ID_LENGTH,\n MAX_NAME_LENGTH,\n MIN_ANALYTICS_SPAN_MS,\n MINUTE_RETENTION_MS,\n NAME_PARAM_PATTERN,\n RUN_LOG_HINT_MS,\n RUN_LOG_LEVELS,\n RUN_LOG_STREAMS,\n RUNNER_CONFIG_BOUNDS,\n RUNNER_CONFIG_KEYS,\n RUNNER_EVENT_TYPES,\n SUMMON_POLICY_KEYS,\n WORKER_CONFIG_BOUNDS,\n WORKER_CONFIG_KEYS,\n WORKER_STATES,\n WORKER_STOP_PERSISTENCE,\n WORKER_TARGET_KINDS,\n} from \"@kingsleyweb/bun-jobs/api/contract\";\nexport type {\n AnalyticsPreset,\n AnalyticsResolution,\n JobDefaultBackoffType,\n JobDefaultKey,\n JobDefaultsApplyState,\n JobListSort,\n JobsApiAction,\n JobsApiMode,\n JobState,\n RunLogLevel,\n RunLogStream,\n RunnerConfigKey,\n SummonPolicyKey,\n WorkerConfigBody,\n WorkerConfigKey,\n WorkerDesiredState,\n WorkerState,\n WorkerStopPersistence,\n WorkerTargetKind,\n} from \"@kingsleyweb/bun-jobs/api/contract\";\n\n/** HTTP methods the API treats as mutations for CSRF: every one but `GET`/`HEAD`/`OPTIONS` (contract §3.2). */\nexport const MUTATING_METHODS: ReadonlySet<string> = new Set([\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n]);\n\n/** Methods that must carry `Content-Type: application/json` even when bodiless (contract §3.2, `requireJson`). */\nexport const JSON_METHODS: ReadonlySet<string> = new Set([\n \"POST\",\n \"PUT\",\n \"PATCH\",\n]);\n",
13
+ "import type { ApiErrorCode, ProblemDto, ProblemIssueDto } from \"./types\";\n\n/**\n * Every code an {@link ApiError} carries: a problem's (the API's closed\n * `ApiErrorCode`, `HTTP_<status>` among them, for an error that was not\n * problem+json), or one the UI raises itself for a call that produced no\n * usable answer. A comparison against a code outside it does not compile.\n */\nexport type UiErrorCode =\n | ApiErrorCode\n /** No response arrived. */\n | \"NETWORK_ERROR\"\n /** A 2xx whose body was not JSON. */\n | \"INVALID_RESPONSE\"\n /** A 2xx whose JSON lacked the fields a screen needs (`assertShape`). */\n | \"UNEXPECTED_RESPONSE\";\n\n/** Where an {@link ApiError} came from. */\nexport type ApiErrorKind =\n /** The API answered with an `application/problem+json` body. */\n | \"problem\"\n /** The API (or something in front of it) answered an error that was not problem+json. */\n | \"http\"\n /** No response arrived: offline, DNS, CORS, connection reset. */\n | \"network\"\n /** A 2xx whose body was not the JSON it should have been. */\n | \"parse\";\n\n/** Fields an {@link ApiError} is built from. */\nexport interface ApiErrorInit {\n /** Where the error came from. */\n kind: ApiErrorKind;\n /** HTTP status, or `0` for a network error. */\n status: number;\n /** Machine code: the problem's `code`, or `NETWORK_ERROR` / `HTTP_<status>` / `INVALID_RESPONSE` / `UNEXPECTED_RESPONSE`. */\n code: UiErrorCode;\n /** Short title. */\n title: string;\n /** Human detail, when there is one. */\n detail?: string;\n /** The problem's `type` URI, when it was a problem. */\n type?: string;\n /** Validation issues, for `VALIDATION`. */\n issues?: ProblemIssueDto[];\n /** The problem's whitelisted context. */\n context?: Record<string, unknown>;\n /** The request path that failed. */\n instance?: string;\n /** The underlying error (network/parse failures). */\n cause?: unknown;\n}\n\n/**\n * Every failed API call, whatever went wrong. A problem+json response keeps\n * its fields verbatim; anything else is mapped onto the same shape so a\n * screen has one thing to render.\n */\nexport class ApiError extends Error {\n /** Where the error came from. */\n readonly kind: ApiErrorKind;\n /** HTTP status, or `0` for a network error. */\n readonly status: number;\n /** Machine code, e.g. `QUEUE_NOT_FOUND`: a closed union, {@link UiErrorCode}. */\n readonly code: UiErrorCode;\n /** Short, stable title. */\n readonly title: string;\n /** Human detail for this occurrence. */\n readonly detail: string | undefined;\n /** The problem's `type` URI (`urn:bun-jobs:error:<CODE>`), when it was a problem. */\n readonly type: string | undefined;\n /** Validation issues, for `VALIDATION`. */\n readonly issues: ProblemIssueDto[];\n /** Whitelisted context, e.g. `{ queue: \"emails\" }`. */\n readonly context: Record<string, unknown>;\n /** The request path that failed. */\n readonly instance: string | undefined;\n\n constructor(init: ApiErrorInit) {\n super(init.detail ?? init.title, { cause: init.cause });\n this.name = \"ApiError\";\n this.kind = init.kind;\n this.status = init.status;\n this.code = init.code;\n this.title = init.title;\n this.detail = init.detail;\n this.type = init.type;\n this.issues = init.issues ?? [];\n this.context = init.context ?? {};\n this.instance = init.instance;\n }\n\n /** Builds one from a problem body. */\n static fromProblem(problem: ProblemDto): ApiError {\n return new ApiError({\n kind: \"problem\",\n status: problem.status,\n code: problem.code,\n title: problem.title,\n detail: problem.detail,\n type: problem.type,\n issues: problem.issues,\n context: problem.context,\n instance: problem.instance,\n });\n }\n\n /** Whether the caller is not signed in or not allowed (401/403). */\n get isAuth(): boolean {\n return this.status === 401 || this.status === 403;\n }\n}\n\n/** Whether a value is an {@link ApiError}. */\nexport function isApiError(value: unknown): value is ApiError {\n return value instanceof ApiError;\n}\n\n/** Whether a parsed body has the fields a problem must carry. */\nexport function isProblem(value: unknown): value is ProblemDto {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const record = value as Record<string, unknown>;\n return (\n typeof record.status === \"number\" &&\n typeof record.code === \"string\" &&\n typeof record.title === \"string\"\n );\n}\n",
14
+ "import type { JobsUiConfig } from \"../../../lib/jobs/browser/config.ts\";\nimport type {\n MetaDto,\n Overview,\n PausedResult,\n Permissions,\n QueueList,\n QueueThroughput,\n WorkerList,\n} from \"./types\";\nimport { JSON_METHODS, MUTATING_METHODS } from \"./contract\";\nimport { ApiError, isProblem } from \"./errors\";\n\n/** An HTTP method the client sends. */\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\n/** A scalar query value. */\nexport type QueryScalar = string | number | boolean;\n\n/**\n * A query-string value: arrays become repeated keys (`state=a&state=b`), an\n * empty array becomes `key=` (the API reads that as `[]`), and `undefined` /\n * `null` are left out.\n */\nexport type QueryValue =\n QueryScalar | readonly QueryScalar[] | null | undefined;\n\n/** The query of one request. */\nexport type QueryParams = Readonly<Record<string, QueryValue>>;\n\n/** Options of one {@link ApiClient.request}. */\nexport interface RequestOptions {\n /** Query parameters; see {@link QueryValue}. */\n query?: QueryParams;\n /** A JSON body. `undefined` sends none (the `Content-Type` still goes on POST/PUT/PATCH). */\n body?: unknown;\n /** Aborts the request (TanStack Query passes one). An abort rejects with the fetch's own `AbortError`, never an {@link ApiError}. */\n signal?: AbortSignal;\n}\n\n/** One response as {@link ApiClient.requestRaw} resolves it. */\nexport interface RawResponse {\n /** Whether the status is 2xx. */\n ok: boolean;\n /** The HTTP status received. */\n status: number;\n /** The status text received (often `\"\"` over HTTP/2). */\n statusText: string;\n /** The response headers the caller can see, lower-cased names in alphabetical order. A browser hides `Set-Cookie`, and cross-origin ones not in `Access-Control-Expose-Headers`. */\n headers: Record<string, string>;\n /** The body: parsed JSON when the `Content-Type` is JSON and it parses, the text otherwise, `undefined` when empty. */\n body: unknown;\n /** For a non-2xx status, the {@link ApiError} `request` would have thrown (a problem's fields verbatim); `undefined` on success. */\n error: ApiError | undefined;\n /** Milliseconds from sending to the body having been read. */\n durationMs: number;\n}\n\n/** The `fetch` the client calls; injectable for tests and non-browser hosts. */\nexport type FetchLike = (input: string, init: RequestInit) => Promise<Response>;\n\n/** Options of {@link createApiClient}. */\nexport interface ApiClientOptions {\n /** The `fetch` to use. Defaults to `globalThis.fetch`, looked up per call so a test can replace it. */\n fetch?: FetchLike;\n}\n\n/** Query for `GET /meta/permissions`: ask about one queue or runner. */\nexport interface PermissionsTarget {\n /** A queue name, passed to queue-side actions. */\n queue?: string;\n /** A runner id, passed to runner actions. */\n runner?: string;\n}\n\n/** A typed client for the bun-jobs management API. */\nexport interface ApiClient {\n /** The API base URL requests are prefixed with. */\n readonly base: string;\n /**\n * The `fetch` every request goes through: the injected one, else\n * `globalThis.fetch`, looked up per call. The typed client\n * (`api/typed.ts`) sends through it too, so a test's mock sees both.\n */\n readonly fetch: FetchLike;\n /**\n * The headers a request with `method` carries: `Accept: application/json`,\n * `Content-Type: application/json` on POST/PUT/PATCH (even without a body,\n * which the API's `requireJson` needs), and the CSRF header on every\n * mutation when `csrfHeader` is configured. The one place those rules live.\n */\n headers: (method: string) => Record<string, string>;\n /** Sends one request; resolves the parsed JSON (or `undefined` for a 204), rejects with an {@link ApiError}. */\n request: <T>(\n method: HttpMethod,\n path: string,\n options?: RequestOptions,\n ) => Promise<T>;\n /**\n * Sends one request like {@link ApiClient.request}, with the same headers,\n * credentials and problem+json parsing, and resolves the whole response\n * instead of only its body. An error status **resolves** (with `ok: false`\n * and the {@link ApiError} `request` would have thrown in `error`); only a\n * network failure rejects (an {@link ApiError} of kind `network`), and an\n * abort rejects with the fetch's own `AbortError`.\n */\n requestRaw: (\n method: HttpMethod,\n path: string,\n options?: RequestOptions,\n ) => Promise<RawResponse>;\n /** `GET /meta`. */\n getMeta: (signal?: AbortSignal) => Promise<MetaDto>;\n /** `GET /meta/permissions`. */\n getPermissions: (\n target?: PermissionsTarget,\n signal?: AbortSignal,\n ) => Promise<Permissions>;\n /** `GET /overview`; `minutes` is the throughput window (1..1440, API default 60). */\n getOverview: (minutes?: number, signal?: AbortSignal) => Promise<Overview>;\n /** `GET /queues` (first page); `search` is a case-insensitive name substring. Paged lists use `listQueuesPage` in `api/queues.ts`. */\n listQueues: (search?: string, signal?: AbortSignal) => Promise<QueueList>;\n /** `GET /queues/:queue/throughput`. */\n getQueueThroughput: (\n queue: string,\n minutes?: number,\n signal?: AbortSignal,\n ) => Promise<QueueThroughput>;\n /** `GET /workers`. */\n listWorkers: (signal?: AbortSignal) => Promise<WorkerList>;\n /** `POST /queues/:queue/pause` (bodiless). */\n pauseQueue: (queue: string) => Promise<PausedResult>;\n /** `POST /queues/:queue/resume` (bodiless). */\n resumeQueue: (queue: string) => Promise<PausedResult>;\n}\n\n/** The value sent in the CSRF header. The API accepts any non-empty value (contract §3.2). */\nexport const CSRF_HEADER_VALUE = \"1\";\n\n/** Serialises a query: repeated keys for arrays, `undefined`/`null` skipped. Returns `\"\"` or `\"?…\"`. */\nexport function serializeQuery(query: QueryParams | undefined): string {\n if (!query) {\n return \"\";\n }\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n const items = value as readonly QueryScalar[];\n if (items.length === 0) {\n params.append(key, \"\");\n }\n for (const item of items) {\n params.append(key, String(item));\n }\n continue;\n }\n params.append(key, String(value));\n }\n const text = params.toString();\n return text ? `?${text}` : \"\";\n}\n\n/** Percent-encodes one path segment (queue names, job ids — `/` becomes `%2F`). */\nexport function segment(value: string): string {\n return encodeURIComponent(value);\n}\n\n/** Whether a `Content-Type` names JSON (`application/json` or any `+json`). */\nfunction isJsonType(contentType: string): boolean {\n const media = contentType.split(\";\")[0]?.trim().toLowerCase() ?? \"\";\n return media === \"application/json\" || media.endsWith(\"+json\");\n}\n\n/** Whether an error is the fetch's abort, which must propagate untouched. */\nfunction isAbort(error: unknown, signal: AbortSignal | undefined): boolean {\n return (\n signal?.aborted === true ||\n (error instanceof Error && error.name === \"AbortError\") ||\n (typeof DOMException !== \"undefined\" &&\n error instanceof DOMException &&\n error.name === \"AbortError\")\n );\n}\n\n/** Parses JSON text, or returns `undefined` when it is not JSON. */\nfunction tryParse(text: string): { value: unknown } | undefined {\n try {\n return { value: JSON.parse(text) };\n } catch {\n return undefined;\n }\n}\n\n/** Turns an error response into an {@link ApiError}: its problem's fields when it is problem+json, else an `http` error with a snippet of the body. */\nexport function errorFromResponse(\n response: Response,\n text: string,\n path: string,\n): ApiError {\n const parsed = isJsonType(response.headers.get(\"content-type\") ?? \"\")\n ? tryParse(text)\n : undefined;\n if (parsed && isProblem(parsed.value)) {\n return ApiError.fromProblem({ ...parsed.value, status: response.status });\n }\n const snippet = text.trim().slice(0, 300);\n return new ApiError({\n kind: \"http\",\n status: response.status,\n code: `HTTP_${response.status}`,\n title: response.statusText || `Request failed (${response.status})`,\n detail: snippet || undefined,\n instance: path,\n });\n}\n\n/**\n * Creates the API client for a resolved {@link JobsUiConfig}.\n *\n * Every request carries `Accept: application/json` and\n * `credentials: \"same-origin\"`; POST/PUT/PATCH always carry\n * `Content-Type: application/json`, **even without a body** (the API's\n * `requireJson` answers 415 otherwise); every mutation (POST/PUT/PATCH/DELETE)\n * carries `config.csrfHeader: 1` when one is configured.\n */\nexport function createApiClient(\n config: Pick<JobsUiConfig, \"apiBase\" | \"csrfHeader\">,\n options: ApiClientOptions = {},\n): ApiClient {\n const base = config.apiBase.replace(/\\/+$/, \"\");\n\n /** The headers of one request: every header rule lives here. */\n function headersFor(method: string): Record<string, string> {\n const headers: Record<string, string> = { Accept: \"application/json\" };\n if (JSON_METHODS.has(method)) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n if (config.csrfHeader && MUTATING_METHODS.has(method)) {\n headers[config.csrfHeader] = CSRF_HEADER_VALUE;\n }\n return headers;\n }\n\n /** The transport, looked up per call so a test can replace it. */\n const fetchVia: FetchLike = (input, init) =>\n (options.fetch ?? globalThis.fetch)(input, init);\n\n /** Builds the URL and `RequestInit` of one request. */\n function prepare(\n method: HttpMethod,\n path: string,\n { query, body, signal }: RequestOptions,\n ): { url: string; init: RequestInit } {\n const url = `${base}${path}${serializeQuery(query)}`;\n const init: RequestInit = {\n method,\n headers: headersFor(method),\n credentials: \"same-origin\",\n };\n if (body !== undefined) {\n init.body = JSON.stringify(body);\n }\n if (signal) {\n init.signal = signal;\n }\n return { url, init };\n }\n\n /** Calls `fetch`; a failure other than an abort becomes a `network` {@link ApiError}. */\n async function send(\n url: string,\n init: RequestInit,\n path: string,\n ): Promise<Response> {\n try {\n return await fetchVia(url, init);\n } catch (error) {\n if (isAbort(error, init.signal ?? undefined)) {\n throw error;\n }\n throw new ApiError({\n kind: \"network\",\n status: 0,\n code: \"NETWORK_ERROR\",\n title: \"The API could not be reached\",\n detail: error instanceof Error ? error.message : String(error),\n instance: path,\n cause: error,\n });\n }\n }\n\n async function request<T>(\n method: HttpMethod,\n path: string,\n requestOptions: RequestOptions = {},\n ): Promise<T> {\n const { url, init } = prepare(method, path, requestOptions);\n const response = await send(url, init, path);\n\n if (response.status === 204 || response.status === 205) {\n return undefined as T;\n }\n const text = await response.text();\n if (!response.ok) {\n throw errorFromResponse(response, text, path);\n }\n if (text === \"\") {\n return undefined as T;\n }\n const parsed = isJsonType(response.headers.get(\"content-type\") ?? \"\")\n ? tryParse(text)\n : undefined;\n if (!parsed) {\n throw new ApiError({\n kind: \"parse\",\n status: response.status,\n code: \"INVALID_RESPONSE\",\n title: \"The API answered something other than JSON\",\n detail: text.trim().slice(0, 300) || undefined,\n instance: path,\n });\n }\n return parsed.value as T;\n }\n\n async function requestRaw(\n method: HttpMethod,\n path: string,\n requestOptions: RequestOptions = {},\n ): Promise<RawResponse> {\n const { url, init } = prepare(method, path, requestOptions);\n const started = performance.now();\n const response = await send(url, init, path);\n const text =\n response.status === 204 || response.status === 205\n ? \"\"\n : await response.text();\n const durationMs = performance.now() - started;\n const parsed =\n text !== \"\" && isJsonType(response.headers.get(\"content-type\") ?? \"\")\n ? tryParse(text)\n : undefined;\n const headers: Record<string, string> = {};\n for (const [name, value] of [...response.headers.entries()].sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n )) {\n headers[name.toLowerCase()] = value;\n }\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers,\n body: parsed ? parsed.value : text === \"\" ? undefined : text,\n error: response.ok ? undefined : errorFromResponse(response, text, path),\n durationMs,\n };\n }\n\n return {\n base,\n fetch: fetchVia,\n headers: headersFor,\n request,\n requestRaw,\n getMeta: (signal) => request<MetaDto>(\"GET\", \"/meta\", { signal }),\n getPermissions: (target, signal) =>\n request<Permissions>(\"GET\", \"/meta/permissions\", {\n query: { queue: target?.queue, runner: target?.runner },\n signal,\n }),\n getOverview: (minutes, signal) =>\n request<Overview>(\"GET\", \"/overview\", { query: { minutes }, signal }),\n listQueues: (search, signal) =>\n request<QueueList>(\"GET\", \"/queues\", {\n // An empty search is the same as none; the key is left out.\n query: { search: search || undefined },\n signal,\n }),\n getQueueThroughput: (queue, minutes, signal) =>\n request<QueueThroughput>(\"GET\", `/queues/${segment(queue)}/throughput`, {\n query: { minutes },\n signal,\n }),\n listWorkers: (signal) => request<WorkerList>(\"GET\", \"/workers\", { signal }),\n pauseQueue: (queue) =>\n request<PausedResult>(\"POST\", `/queues/${segment(queue)}/pause`),\n resumeQueue: (queue) =>\n request<PausedResult>(\"POST\", `/queues/${segment(queue)}/resume`),\n };\n}\n",
15
+ "/** Joins class names, skipping falsy ones. */\nexport function cx(...names: (string | false | null | undefined)[]): string {\n return names.filter(Boolean).join(\" \");\n}\n",
16
+ "/**\n * @license React\n * react-jsx-runtime.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_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n",
17
+ "import type { ReactNode } from \"react\";\nimport { cx } from \"./classNames\";\n\n/** Colour of a {@link Badge}. */\nexport type BadgeTone =\n \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\" | \"accent\";\n\n/** Props of {@link Badge}. */\nexport interface BadgeProps {\n /** Colour. Defaults to `\"neutral\"`. */\n tone?: BadgeTone;\n /** A tooltip / longer explanation. */\n title?: string;\n /** Extra class names. */\n className?: string;\n /**\n * `data-testid` for the badge, when a test or an example must find this one\n * among several — by what it is, rather than by its position.\n */\n testId?: string;\n /** The text. */\n children: ReactNode;\n}\n\n/** A small status label. */\nexport function Badge({\n tone = \"neutral\",\n title,\n className,\n testId,\n children,\n}: BadgeProps) {\n return (\n <span\n className={cx(\"badge\", `badge-${tone}`, className)}\n title={title}\n data-testid={testId}\n >\n {children}\n </span>\n );\n}\n\n/** Props of {@link Chip}. */\nexport interface ChipProps {\n /** What the value is, e.g. `\"namespace\"`. */\n label: string;\n /** The value. */\n value: ReactNode;\n /** A tooltip. */\n title?: string;\n}\n\n/** A label/value pair, e.g. `namespace orders`. */\nexport function Chip({ label, value, title }: ChipProps) {\n return (\n <span\n className=\"chip\"\n title={title}\n >\n <span className=\"chip-label\">{label}</span>\n <span className=\"chip-value\">{value}</span>\n </span>\n );\n}\n",
18
+ "import type { JobsUiConfig } from \"../../lib/jobs/browser/config.ts\";\nimport type { ApiClient } from \"./api/client\";\nimport { createContext, use } from \"react\";\n\n/** Carries the injected {@link JobsUiConfig}. */\nexport const UiConfigContext = createContext<JobsUiConfig | null>(null);\n/** Carries the {@link ApiClient}. */\nexport const ApiClientContext = createContext<ApiClient | null>(null);\n\n/** The resolved {@link JobsUiConfig} the server injected. */\nexport function useUiConfig(): JobsUiConfig {\n const config = use(UiConfigContext);\n if (!config) {\n throw new Error(\"useUiConfig must be used inside <AppProviders>\");\n }\n return config;\n}\n\n/** The API client. */\nexport function useApiClient(): ApiClient {\n const client = use(ApiClientContext);\n if (!client) {\n throw new Error(\"useApiClient must be used inside <AppProviders>\");\n }\n return client;\n}\n",
19
+ "import type { JobsApiAction } from \"../api/contract\";\nimport type { MetaDto, Permissions } from \"../api/types\";\nimport { createContext, use, useMemo } from \"react\";\n\n/** A feature flag of `MetaDto.features`. */\nexport type FeatureName = keyof MetaDto[\"features\"];\n\n/** What the bootstrap provides once `/meta` and `/meta/permissions` loaded. */\nexport interface MetaContextValue {\n /** `GET /meta`. */\n meta: MetaDto;\n /** `GET /meta/permissions` (untargeted). */\n permissions: Permissions;\n}\n\n/** Carries the loaded meta and permissions. */\nexport const MetaContext = createContext<MetaContextValue | null>(null);\n\n/**\n * Permissions targeted at what the current screen shows (`/meta/permissions?queue=`\n * or `?runner=`), set by `<PermissionScope>`. `null` outside one, or while it\n * loads: the untargeted map applies then.\n */\nexport const ScopedPermissionsContext = createContext<Permissions | null>(null);\n\n/**\n * Where the nearest `<PermissionScope>` is: `\"unscoped\"` outside one,\n * `\"pending\"` while its targeted request is in flight, `\"settled\"` once it\n * answered or failed (a failure keeps the untargeted map).\n */\nexport type PermissionScopeStatus = \"unscoped\" | \"pending\" | \"settled\";\n\n/** Carries the nearest `<PermissionScope>`'s {@link PermissionScopeStatus}. */\nexport const PermissionScopeStatusContext =\n createContext<PermissionScopeStatus>(\"unscoped\");\n\n/**\n * Whether the permissions that apply here are final: `false` only while a\n * `<PermissionScope>`'s targeted answer is still loading. A screen that must\n * not send a request the target's own map might refuse (a job's data, say)\n * waits for this before fetching.\n */\nexport function usePermissionsSettled(): boolean {\n return use(PermissionScopeStatusContext) !== \"pending\";\n}\n\n/**\n * Whether the caller may perform `action`: `true` only when the action is\n * present **and** `true`. An action whose routes are pruned (mode, `readOnly`,\n * `actions`, driver capability) is absent from the map, which is `false` too.\n */\nexport function canPerform(\n permissions: Permissions,\n action: JobsApiAction,\n): boolean {\n return permissions.actions[action] === true;\n}\n\n/** The bootstrap's context, or a clear error outside a loaded `<MetaProvider>`. */\nfunction useMetaContext(): MetaContextValue {\n const value = use(MetaContext);\n if (!value) {\n throw new Error(\"useMeta must be used inside a loaded <MetaProvider>\");\n }\n return value;\n}\n\n/** `GET /meta`. */\nexport function useMeta(): MetaDto {\n return useMetaContext().meta;\n}\n\n/**\n * The permissions that apply here: the innermost `<PermissionScope>`'s\n * targeted map once it has loaded, else the untargeted one. Advisory either\n * way: `authorize` may decide per job and change its mind, so the API's 403\n * on the request itself stays authoritative.\n */\nexport function usePermissions(): Permissions {\n const scoped = use(ScopedPermissionsContext);\n const { permissions } = useMetaContext();\n return scoped ?? permissions;\n}\n\n/** Whether the caller may perform `action` here (see {@link canPerform}, {@link usePermissions}). */\nexport function useCan(action: JobsApiAction): boolean {\n return canPerform(usePermissions(), action);\n}\n\n/** A predicate over actions, for checking several at once. */\nexport function useCanFn(): (action: JobsApiAction) => boolean {\n const permissions = usePermissions();\n return useMemo(\n () => (action: JobsApiAction) => canPerform(permissions, action),\n [permissions],\n );\n}\n\n/**\n * A predicate over the **untargeted** map from the bootstrap, whatever\n * `<PermissionScope>` this is in: what the nav, and so the routes, were built\n * from. A link to another section asks this, since a queue's own answer says\n * nothing about whether that section's route exists.\n */\nexport function useUntargetedCanFn(): (action: JobsApiAction) => boolean {\n const { permissions } = useMetaContext();\n return useMemo(\n () => (action: JobsApiAction) => canPerform(permissions, action),\n [permissions],\n );\n}\n\n/** Whether the backend supports a feature (`MetaDto.features`). */\nexport function useFeature(name: FeatureName): boolean {\n return useMetaContext().meta.features[name];\n}\n",
20
+ "/**\n * The `unauthorized` option: where to send the browser when the caller turns\n * out not to be signed in. Shared by `docsUi()` and `jobsUi()`,\n * on both sides of each: the server (the shell's 303) and the app (an API\n * 401). Types, defaults and pure functions only, with no runtime imports: the\n * apps bundle this file for the browser.\n */\n\n/** A status that can trigger the redirect: 401 (not signed in) or 403 (not allowed). */\nexport type UiUnauthorizedStatus = 401 | 403;\n\n/**\n * The `unauthorized` option as a host writes it: where to send the browser\n * when an authorization check fails, instead of leaving it on a page that\n * reports the failure.\n */\nexport interface UnauthorizedOptions {\n /**\n * Where to go: a path on this host starting with one `/` (`\"/login\"`,\n * `\"/auth/sign-in?app=jobs\"`), or an absolute `http:`/`https:` URL (an\n * identity provider's sign-in page). Required. A path inside the UI's own\n * `basePath` is a `ConfigError`: the UI would redirect to itself.\n * `javascript:`, `data:`, `//host` and anything else are refused.\n */\n redirectTo: string;\n /**\n * Query parameter that carries the page the user was on, so the sign-in\n * page can send them back: path, query and (in the browser) fragment,\n * always a relative URL starting with one `/` (e.g.\n * `/login?returnTo=%2Fdocs%2Fhttp`). `false` adds nothing. Defaults to\n * `\"returnTo\"`. Letters, digits, `_`, `.`, `~` and `-` only. The sign-in\n * page must still check the value before redirecting to it.\n */\n returnParam?: string | false;\n /**\n * Which failures redirect. Defaults to `[401]`: only \"not signed in\". A 403\n * means signed in but not allowed, which the page explains itself; add\n * `403` to redirect on that too. Must be a non-empty array of `401` and\n * `403`.\n */\n statuses?: readonly UiUnauthorizedStatus[];\n}\n\n/** The resolved `unauthorized` option, as the browser receives it in the page's config. */\nexport interface UiUnauthorized {\n /** The target: a path (`\"/login\"`) or an absolute `http(s)` URL, validated on the server. */\n redirectTo: string;\n /** The query parameter that carries the in-app location back, or `null` for none. */\n returnParam: string | null;\n /** The statuses that redirect, ascending and without repeats (`[401]` by default). */\n statuses: readonly UiUnauthorizedStatus[];\n}\n\n/** `unauthorized.returnParam` when unset. */\nexport const DEFAULT_RETURN_PARAM = \"returnTo\";\n\n/** `unauthorized.statuses` when unset: only \"not signed in\". */\nexport const DEFAULT_UNAUTHORIZED_STATUSES: readonly UiUnauthorizedStatus[] =\n Object.freeze([401]);\n\n/**\n * Whether a value read back from a page's config has the shape of a\n * {@link UiUnauthorized}: enough that a stale or hand-edited shell fails with\n * a message instead of a broken redirect. The server validated the values.\n */\nexport function isUiUnauthorized(value: unknown): value is UiUnauthorized {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const record = value as Record<string, unknown>;\n return (\n typeof record.redirectTo === \"string\" &&\n (record.returnParam === null || typeof record.returnParam === \"string\") &&\n Array.isArray(record.statuses) &&\n record.statuses.every((status) => status === 401 || status === 403)\n );\n}\n\n/** Any origin, used to parse a path target as a URL and print it back as a path. */\nconst PATH_ORIGIN = \"http://unauthorized.invalid\";\n\n/**\n * Makes an in-app location safe to hand back as a relative URL: it starts\n * with exactly one `/` (never `//` or `/\\`, which a browser reads as another\n * host). Anything not starting with `/` becomes `/`.\n */\nexport function relativeReturnPath(location: string): string {\n if (!location.startsWith(\"/\")) {\n return \"/\";\n }\n return location.replace(/^[/\\\\]+/, \"/\");\n}\n\n/**\n * The URL to send the browser to: `redirectTo`, with `returnParam` set to\n * `returnPath` (made relative by {@link relativeReturnPath}) when both are\n * given. A path target stays a path; an absolute target stays absolute. A\n * `returnParam` already in `redirectTo`'s query is replaced, and its\n * fragment is kept.\n */\nexport function unauthorizedRedirectUrl(\n redirect: Pick<UiUnauthorized, \"redirectTo\" | \"returnParam\">,\n returnPath: string | undefined,\n): string {\n if (redirect.returnParam === null || returnPath === undefined) {\n return redirect.redirectTo;\n }\n const isPath = redirect.redirectTo.startsWith(\"/\");\n const url = isPath\n ? new URL(redirect.redirectTo, PATH_ORIGIN)\n : new URL(redirect.redirectTo);\n url.searchParams.set(redirect.returnParam, relativeReturnPath(returnPath));\n return isPath ? `${url.pathname}${url.search}${url.hash}` : url.href;\n}\n",
21
+ "import type { QueryClient } from \"@tanstack/react-query\";\nimport type { UiUnauthorized } from \"../../lib/kit/browser/unauthorized.ts\";\nimport { createContext, use } from \"react\";\nimport { unauthorizedRedirectUrl } from \"../../lib/kit/browser/unauthorized.ts\";\n\n/**\n * `unauthorized` in the browser: the one place an authorization failure\n * becomes a navigation, once per page load. Shared by the docs viewer and\n * the jobs UI (as `@kingsleyweb/bun-ui/docs/embed/unauthorized`).\n *\n * Sources report here: the query and mutation caches through\n * {@link watchAuthFailures} (any failed call, whichever client made it: the\n * viewer's document read; every jobs UI API call), the jobs UI's live\n * socket (`LiveClient`'s `onAuthFailure`), and the jobs UI's crashed screens\n * (through {@link UnauthorizedRedirect.probe}: a lazy screen's chunk the\n * shell's `authorize` refused fails with no status to read). No screen knows\n * about it; a failure that is not redirected shows its message as before.\n *\n * One per page: the app that owns the page creates it. The embedded docs\n * screens never do, so the jobs UI's docs section redirects through\n * the jobs UI's alone.\n */\n\n/** The parts of `window.location` the redirect reads and calls. */\nexport interface RedirectLocation {\n /** The page's URL, to resolve the target and compare origins. */\n readonly href: string;\n /** Sends the browser to a URL. */\n assign: (url: string) => void;\n}\n\n/** A mount's redirect, made by {@link createUnauthorizedRedirect}. */\nexport interface UnauthorizedRedirect {\n /** Whether `unauthorized` is configured at all. */\n readonly enabled: boolean;\n /** Whether a report has sent the browser away (later reports do nothing). */\n readonly redirected: boolean;\n /**\n * Reports a failure's status. One the mount lists sends the browser to the\n * target, once: the first such report navigates, every later one returns\n * `true` without navigating again. Returns whether the browser was (or\n * already had been) sent away.\n */\n report: (status: number) => boolean;\n /** {@link UnauthorizedRedirect.report} for an error from any client: reads its numeric `status`, if it has one. */\n reportError: (error: unknown) => boolean;\n /**\n * Asks the server whether this page may still be loaded, for a failure\n * that carries no status: a `HEAD` of the shell (`basePath`), whose status\n * is reported. A screen whose chunk failed to load is the case: the\n * shell's `authorize` guards the bundle files, and a failed dynamic import\n * never says why. Resolves what {@link UnauthorizedRedirect.report} returned, or\n * `false` when the probe itself failed.\n */\n probe: () => Promise<boolean>;\n}\n\n/** Options of {@link createUnauthorizedRedirect}; tests replace both. */\nexport interface UnauthorizedRedirectOptions {\n /** Where to read the page's URL and navigate. Defaults to `globalThis.location`, looked up per report. */\n location?: () => RedirectLocation | undefined;\n /** The `fetch` {@link UnauthorizedRedirect.probe} calls. Defaults to `globalThis.fetch`, looked up per probe. */\n fetch?: () => typeof fetch;\n}\n\n/** The status an error carries, if any: `ApiError`'s, bun-client's `HttpError`'s, anything with a numeric `status`. */\nexport function statusOf(error: unknown): number | undefined {\n if (typeof error !== \"object\" || error === null || !(\"status\" in error)) {\n return undefined;\n }\n const { status } = error;\n return typeof status === \"number\" ? status : undefined;\n}\n\n/** Whether `path` is `base` or lies under it, segment-wise. */\nfunction isWithin(path: string, base: string): boolean {\n return path === base || path.startsWith(`${base}/`);\n}\n\n/** The pathname as the router compares it: decoded where it can be, lower-cased, no trailing `/`. */\nfunction comparablePath(pathname: string): string {\n let decoded = pathname;\n try {\n decoded = decodeURIComponent(pathname);\n } catch {\n // A malformed escape: compare it as written.\n }\n return decoded.replace(/\\/+$/, \"\").toLowerCase();\n}\n\n/** A redirect that never navigates: `unauthorized` is off. */\nexport const NO_UNAUTHORIZED_REDIRECT: UnauthorizedRedirect = Object.freeze({\n enabled: false,\n redirected: false,\n report: () => false,\n reportError: () => false,\n probe: () => Promise.resolve(false),\n});\n\n/**\n * Creates the redirect for one page load. `null` gives {@link NO_UNAUTHORIZED_REDIRECT}.\n *\n * The target carries `returnParam` set to the page the user is on (path,\n * query and fragment). A target that resolves into this UI on this origin is\n * never followed (an absolute URL `jobsUi()` could not check, since it does\n * not know its own origin): it would load the UI, fail again and loop, so\n * the screens show their messages instead.\n *\n * @param redirect The UI config's `unauthorized` (`JobsUiConfig`, `DocsUiConfig`).\n * @param basePath The UI config's `basePath`.\n * @param options Where to navigate and what to fetch with; see {@link UnauthorizedRedirectOptions}.\n */\nexport function createUnauthorizedRedirect(\n redirect: UiUnauthorized | null,\n basePath: string,\n options: UnauthorizedRedirectOptions = {},\n): UnauthorizedRedirect {\n const getLocation = options.location ?? (() => globalThis.location);\n const getFetch = options.fetch ?? (() => globalThis.fetch);\n if (redirect === null) {\n return NO_UNAUTHORIZED_REDIRECT;\n }\n const statuses = new Set<number>(redirect.statuses);\n const base = basePath.toLowerCase();\n let redirected = false;\n\n const report = (status: number): boolean => {\n if (redirected) {\n return true;\n }\n if (!statuses.has(status)) {\n return false;\n }\n const location = getLocation();\n if (location === undefined) {\n return false;\n }\n const here = new URL(location.href);\n const target = unauthorizedRedirectUrl(\n redirect,\n `${here.pathname}${here.search}${here.hash}`,\n );\n const resolved = new URL(target, here);\n if (\n resolved.origin === here.origin &&\n isWithin(comparablePath(resolved.pathname), base)\n ) {\n return false;\n }\n redirected = true;\n location.assign(target);\n return true;\n };\n\n return {\n enabled: true,\n get redirected() {\n return redirected;\n },\n report,\n reportError: (error) => {\n const status = statusOf(error);\n return status === undefined ? false : report(status);\n },\n probe: async () => {\n if (redirected) {\n return true;\n }\n let status: number;\n try {\n const response = await getFetch()(basePath, {\n method: \"HEAD\",\n credentials: \"same-origin\",\n cache: \"no-store\",\n });\n status = response.status;\n } catch {\n return false;\n }\n return report(status);\n },\n };\n}\n\n/**\n * Reports every failed query and mutation of `queryClient` to `redirect`:\n * the cache-level hook, so every API call is covered whichever client made it\n * and no screen needs code of its own. Returns the unsubscribe. Subscribes to\n * nothing when the redirect is off.\n */\nexport function watchAuthFailures(\n queryClient: QueryClient,\n redirect: UnauthorizedRedirect,\n): () => void {\n if (!redirect.enabled) {\n return () => {};\n }\n const offQueries = queryClient.getQueryCache().subscribe((event) => {\n if (event.type === \"updated\" && event.action.type === \"error\") {\n redirect.reportError(event.action.error);\n }\n });\n const offMutations = queryClient.getMutationCache().subscribe((event) => {\n if (event.type === \"updated\" && event.action.type === \"error\") {\n redirect.reportError(event.action.error);\n }\n });\n return () => {\n offQueries();\n offMutations();\n };\n}\n\n/** Carries the page's {@link UnauthorizedRedirect}; {@link NO_UNAUTHORIZED_REDIRECT} outside `AppProviders`. */\nexport const UnauthorizedRedirectContext = createContext<UnauthorizedRedirect>(\n NO_UNAUTHORIZED_REDIRECT,\n);\n\n/** The page's {@link UnauthorizedRedirect}. */\nexport function useUnauthorizedRedirect(): UnauthorizedRedirect {\n return use(UnauthorizedRedirectContext);\n}\n",
22
+ "\"use client\";\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/QueryClientProvider.tsx\n/**\n* The context that `useQueryClient` reads from. `QueryClientProvider` is the normal way to set it.\n*/\nconst QueryClientContext = React.createContext(void 0);\n/**\n* The `useQueryClient` hook returns the current `QueryClient` instance.\n*\n* @param queryClient - Use this to use a custom `QueryClient`. Otherwise, the one from the nearest context will\n* be used.\n* @returns The current `QueryClient` instance.\n* @throws If no `queryClient` argument is passed and no `QueryClientProvider` is found in the component tree.\n*/\nconst useQueryClient = (queryClient) => {\n\tconst client = React.useContext(QueryClientContext);\n\tif (queryClient) return queryClient;\n\tif (!client) throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n\treturn client;\n};\n/**\n* Use the `QueryClientProvider` component to connect and provide a `QueryClient` to your application. Also\n* calls `client.mount()`/`client.unmount()` as this component mounts/unmounts, which subscribes the client to\n* focus/online events (resuming any paused mutations and refetching as needed when the app regains focus or\n* comes back online).\n*\n* @returns The provided `children`, wrapped so they can read the `QueryClient` via `useQueryClient`.\n*\n* @example\n* ```tsx\n* import { QueryClient, QueryClientProvider } from '@tanstack/react-query'\n*\n* const queryClient = new QueryClient()\n*\n* function App() {\n* return <QueryClientProvider client={queryClient}>...</QueryClientProvider>\n* }\n* ```\n*/\nconst QueryClientProvider = ({ client, children }) => {\n\tReact.useEffect(() => {\n\t\tclient.mount();\n\t\treturn () => {\n\t\t\tclient.unmount();\n\t\t};\n\t}, [client]);\n\treturn /* @__PURE__ */ jsx(QueryClientContext.Provider, {\n\t\tvalue: client,\n\t\tchildren\n\t});\n};\n//#endregion\nexport { QueryClientContext, QueryClientProvider, useQueryClient };\n\n//# sourceMappingURL=QueryClientProvider.js.map",
23
+ "\"use client\";\nimport * as React from \"react\";\n//#region src/IsRestoringProvider.ts\nconst IsRestoringContext = React.createContext(false);\n/**\n* If you are using `PersistQueryClientProvider`, you can also use the `useIsRestoring` hook alongside it to\n* check if a restore is currently in progress. `useQuery` and friends also check this internally to avoid\n* race conditions between the restore and mounting queries.\n*\n* @returns `true` while a persisted client is being restored, `false` otherwise.\n*/\nconst useIsRestoring = () => React.useContext(IsRestoringContext);\n/**\n* The Provider that `PersistQueryClientProvider` uses to signal whether a persisted client is currently\n* being restored, read by `useIsRestoring`.\n*/\nconst IsRestoringProvider = IsRestoringContext.Provider;\n//#endregion\nexport { IsRestoringProvider, useIsRestoring };\n\n//# sourceMappingURL=IsRestoringProvider.js.map",
24
+ "\"use client\";\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\n//#region src/QueryErrorResetBoundary.tsx\n/**\n* Resets any query errors within the boundary, so queries know they can try again.\n*/\nfunction createValue() {\n\tlet isReset = false;\n\treturn {\n\t\t/**\n\t\t* Clears the reset state, so queries know not to try again until the boundary is reset again.\n\t\t*/\n\t\tclearReset: () => {\n\t\t\tisReset = false;\n\t\t},\n\t\t/**\n\t\t* Resets any query errors within the boundary, so queries know they can try again.\n\t\t*/\n\t\treset: () => {\n\t\t\tisReset = true;\n\t\t},\n\t\t/**\n\t\t* Returns whether the boundary has been reset and not yet cleared.\n\t\t*/\n\t\tisReset: () => {\n\t\t\treturn isReset;\n\t\t}\n\t};\n}\nconst QueryErrorResetBoundaryContext = React.createContext(createValue());\n/**\n* This hook will reset any query errors within the closest `QueryErrorResetBoundary`. If there is no boundary\n* defined it will reset them globally.\n*\n* @returns The boundary's {@link QueryErrorResetBoundaryValue}.\n*\n* @example\n* ```tsx\n* import { ErrorBoundary } from 'react-error-boundary'\n* import { useQueryErrorResetBoundary } from '@tanstack/react-query'\n*\n* function App({ children }: { children: React.ReactNode }) {\n* const { reset } = useQueryErrorResetBoundary()\n*\n* return (\n* <ErrorBoundary\n* onReset={reset}\n* fallbackRender={({ resetErrorBoundary }) => (\n* <div>\n* There was an error!\n* <button onClick={() => resetErrorBoundary()}>Try again</button>\n* </div>\n* )}\n* >\n* {children}\n* </ErrorBoundary>\n* )\n* }\n* ```\n*/\nconst useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\n/**\n* When using `suspense` or `throwOnError` in your queries, you need a way to let queries know that you want to\n* try again when re-rendering after some error occurred. With the `QueryErrorResetBoundary` component you can\n* reset any query errors within the boundaries of the component.\n*\n* @returns The `children`, rendered as-is, or called with the boundary's {@link QueryErrorResetBoundaryValue}\n* if `children` is a function.\n*\n* @example\n* ```tsx\n* import { ErrorBoundary } from 'react-error-boundary'\n* import { QueryErrorResetBoundary } from '@tanstack/react-query'\n*\n* function App() {\n* return (\n* <QueryErrorResetBoundary>\n* {({ reset }) => (\n* <ErrorBoundary\n* onReset={reset}\n* fallbackRender={({ resetErrorBoundary }) => (\n* <div>\n* There was an error!\n* <button onClick={() => resetErrorBoundary()}>Try again</button>\n* </div>\n* )}\n* >\n* <Page />\n* </ErrorBoundary>\n* )}\n* </QueryErrorResetBoundary>\n* )\n* }\n* ```\n*/\nconst QueryErrorResetBoundary = ({ children }) => {\n\tconst [value] = React.useState(() => createValue());\n\treturn /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, {\n\t\tvalue,\n\t\tchildren: typeof children === \"function\" ? children(value) : children\n\t});\n};\n//#endregion\nexport { QueryErrorResetBoundary, useQueryErrorResetBoundary };\n\n//# sourceMappingURL=QueryErrorResetBoundary.js.map",
25
+ "//#region src/timeoutManager.ts\nconst defaultTimeoutProvider = {\n\tsetTimeout: (callback, delay) => setTimeout(callback, delay),\n\tclearTimeout: (timeoutId) => clearTimeout(timeoutId),\n\tsetInterval: (callback, delay) => setInterval(callback, delay),\n\tclearInterval: (intervalId) => clearInterval(intervalId)\n};\n/**\n* Allows customization of how timeouts are created.\n*\n* @tanstack/query-core makes liberal use of timeouts to implement `staleTime`\n* and `gcTime`. The default TimeoutManager provider uses the platform's global\n* `setTimeout` implementation, which is known to have scalability issues with\n* thousands of timeouts on the event loop.\n*\n* If you hit this limitation, consider providing a custom TimeoutProvider that\n* coalesces timeouts.\n*/\nvar TimeoutManager = class {\n\t#provider = defaultTimeoutProvider;\n\t#providerCalled = false;\n\t/**\n\t* `setTimeoutProvider` can be used to set a custom implementation of the\n\t* `setTimeout`, `clearTimeout`, `setInterval`, `clearInterval` functions,\n\t* called a `TimeoutProvider`.\n\t*\n\t* This may be useful if you notice event loop performance issues with\n\t* thousands of queries. A custom TimeoutProvider could also support timer\n\t* delays longer than the global `setTimeout` maximum delay value of about\n\t* 24 days.\n\t*\n\t* It is important to call `setTimeoutProvider` before creating a\n\t* QueryClient or queries, so that the same provider is used consistently\n\t* for all timers in the application, since different TimeoutProviders\n\t* cannot cancel each others' timers.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager, QueryClient } from '@tanstack/query-core'\n\t* import { CustomTimeoutProvider } from './CustomTimeoutProvider'\n\t*\n\t* timeoutManager.setTimeoutProvider(new CustomTimeoutProvider())\n\t*\n\t* export const queryClient = new QueryClient()\n\t* ```\n\t*/\n\tsetTimeoutProvider(provider) {\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tif (this.#providerCalled && provider !== this.#provider) console.error(`[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`, {\n\t\t\t\tprevious: this.#provider,\n\t\t\t\tprovider\n\t\t\t});\n\t\t}\n\t\tthis.#provider = provider;\n\t\tif (process.env.NODE_ENV !== \"production\") this.#providerCalled = false;\n\t}\n\t/**\n\t* `setTimeout` schedules a callback to run after approximately `delay`\n\t* milliseconds, like the global `setTimeout` function. The callback can be\n\t* canceled with `clearTimeout`.\n\t*\n\t* It returns a timer ID, which may be a number or an object that can be\n\t* coerced to a number via `Symbol.toPrimitive`.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager } from '@tanstack/query-core'\n\t*\n\t* const timeoutId = timeoutManager.setTimeout(\n\t* () => console.log('ran at:', new Date()),\n\t* 1000,\n\t* )\n\t*\n\t* const timeoutIdNumber: number = Number(timeoutId)\n\t* ```\n\t*/\n\tsetTimeout(callback, delay) {\n\t\tif (process.env.NODE_ENV !== \"production\") this.#providerCalled = true;\n\t\treturn this.#provider.setTimeout(callback, delay);\n\t}\n\t/**\n\t* `clearTimeout` cancels a timeout callback scheduled with `setTimeout`,\n\t* like the global `clearTimeout` function. It should be called with a\n\t* timer ID returned by `setTimeout`.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager } from '@tanstack/query-core'\n\t*\n\t* const timeoutId = timeoutManager.setTimeout(\n\t* () => console.log('ran at:', new Date()),\n\t* 1000,\n\t* )\n\t*\n\t* timeoutManager.clearTimeout(timeoutId)\n\t* ```\n\t*/\n\tclearTimeout(timeoutId) {\n\t\tthis.#provider.clearTimeout(timeoutId);\n\t}\n\t/**\n\t* `setInterval` schedules a callback to be called approximately every\n\t* `delay` milliseconds, like the global `setInterval` function.\n\t*\n\t* Like `setTimeout`, it returns a timer ID, which may be a number or an\n\t* object that can be coerced to a number via `Symbol.toPrimitive`.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager } from '@tanstack/query-core'\n\t*\n\t* const intervalId = timeoutManager.setInterval(\n\t* () => console.log('ran at:', new Date()),\n\t* 1000,\n\t* )\n\t* ```\n\t*/\n\tsetInterval(callback, delay) {\n\t\tif (process.env.NODE_ENV !== \"production\") this.#providerCalled = true;\n\t\treturn this.#provider.setInterval(callback, delay);\n\t}\n\t/**\n\t* `clearInterval` can be used to cancel an interval, like the global\n\t* `clearInterval` function. It should be called with an interval ID\n\t* returned by `setInterval`.\n\t*\n\t* @example\n\t* ```ts\n\t* import { timeoutManager } from '@tanstack/query-core'\n\t*\n\t* const intervalId = timeoutManager.setInterval(\n\t* () => console.log('ran at:', new Date()),\n\t* 1000,\n\t* )\n\t*\n\t* timeoutManager.clearInterval(intervalId)\n\t* ```\n\t*/\n\tclearInterval(intervalId) {\n\t\tthis.#provider.clearInterval(intervalId);\n\t}\n};\n/**\n* Singleton instance of {@link TimeoutManager}, used throughout TanStack Query to schedule and cancel timers.\n*/\nconst timeoutManager = new TimeoutManager();\n/**\n* In many cases code wants to delay to the next event loop tick; this is not\n* mediated by {@link timeoutManager}.\n*\n* This function is provided to make auditing the `tanstack/query-core` for\n* incorrect use of system `setTimeout` easier.\n*/\nfunction systemSetTimeoutZero(callback) {\n\tsetTimeout(callback, 0);\n}\n//#endregion\nexport { TimeoutManager, defaultTimeoutProvider, systemSetTimeoutZero, timeoutManager };\n\n//# sourceMappingURL=timeoutManager.js.map",
26
+ "import { timeoutManager } from \"./timeoutManager.js\";\n//#region src/utils.ts\n/** @deprecated\n* use `environmentManager.isServer()` instead.\n*/\nconst isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {}\nfunction functionalUpdate(updater, input) {\n\treturn typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n\treturn typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n\treturn Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveQueryValue(value, query) {\n\treturn typeof value === \"function\" ? value(query) : value;\n}\n/**\n* Checks whether a query matches the given {@link QueryFilters}.\n* Every filter that is specified must match; filters that are left unspecified are ignored.\n*\n* @example\n* ```ts\n* const queryCache = queryClient.getQueryCache()\n*\n* const matchingQueries = queryCache\n* .getAll()\n* .filter((query) => matchQuery({ queryKey: ['posts'] }, query))\n* ```\n*/\nfunction matchQuery(filters, query) {\n\tconst { type = \"all\", exact, fetchStatus, predicate, queryKey, stale } = filters;\n\tif (queryKey) {\n\t\tif (exact) {\n\t\t\tif (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) return false;\n\t\t} else if (!partialMatchKey(query.queryKey, queryKey)) return false;\n\t}\n\tif (type !== \"all\") {\n\t\tconst isActive = query.isActive();\n\t\tif (type === \"active\" && !isActive) return false;\n\t\tif (type === \"inactive\" && isActive) return false;\n\t}\n\tif (typeof stale === \"boolean\" && query.isStale() !== stale) return false;\n\tif (fetchStatus && fetchStatus !== query.state.fetchStatus) return false;\n\tif (predicate && !predicate(query)) return false;\n\treturn true;\n}\n/**\n* Checks whether a mutation matches the given {@link MutationFilters}.\n* Every filter that is specified must match; filters that are left unspecified are ignored.\n* If a `mutationKey` filter is provided but the mutation has no `mutationKey` of its own, it does not match.\n*\n* @example\n* ```ts\n* const mutationCache = queryClient.getMutationCache()\n*\n* const matchingMutations = mutationCache\n* .getAll()\n* .filter((mutation) => matchMutation({ mutationKey: ['addPost'] }, mutation))\n* ```\n*/\nfunction matchMutation(filters, mutation) {\n\tconst { exact, status, predicate, mutationKey } = filters;\n\tif (mutationKey) {\n\t\tif (!mutation.options.mutationKey) return false;\n\t\tif (exact) {\n\t\t\tif (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) return false;\n\t\t} else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) return false;\n\t}\n\tif (status && mutation.state.status !== status) return false;\n\tif (predicate && !predicate(mutation)) return false;\n\treturn true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n\treturn (options?.queryKeyHashFn || hashKey)(queryKey);\n}\n/**\n* Default query & mutation keys hash function.\n* Hashes the value into a stable hash.\n*\n* @example\n* ```ts\n* // Object keys are sorted, so key order doesn't affect the hash:\n* hashKey(['todos', { page: 1, filter: 'done' }]) // === '[\"todos\",{\"filter\":\"done\",\"page\":1}]'\n* ```\n*/\nfunction hashKey(queryKey) {\n\treturn JSON.stringify(queryKey, (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n\t\tresult[key] = val[key];\n\t\treturn result;\n\t}, {}) : val);\n}\nfunction partialMatchKey(a, b) {\n\tif (a === b) return true;\n\tif (typeof a !== typeof b) return false;\n\tif (a && b && typeof a === \"object\" && typeof b === \"object\") {\n\t\tif (Array.isArray(a) && Array.isArray(b)) {\n\t\t\tif (b.length > a.length) return false;\n\t\t\tfor (let i = 0; i < b.length; i++) if (!partialMatchKey(a[i], b[i])) return false;\n\t\t\treturn true;\n\t\t}\n\t\tconst bKeys = Object.keys(b);\n\t\tfor (const key of bKeys) if (!partialMatchKey(a[key], b[key])) return false;\n\t\treturn true;\n\t}\n\treturn false;\n}\nconst hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b, depth = 0) {\n\tif (a === b) return a;\n\tif (depth > 500) return b;\n\tconst array = isPlainArray(a) && isPlainArray(b);\n\tif (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n\tconst aSize = (array ? a : Object.keys(a)).length;\n\tconst bItems = array ? b : Object.keys(b);\n\tconst bSize = bItems.length;\n\tconst copy = array ? new Array(bSize) : {};\n\tlet equalItems = 0;\n\tfor (let i = 0; i < bSize; i++) {\n\t\tconst key = array ? i : bItems[i];\n\t\tconst aItem = a[key];\n\t\tconst bItem = b[key];\n\t\tif (aItem === bItem) {\n\t\t\tcopy[key] = aItem;\n\t\t\tif (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n\t\t\tcopy[key] = bItem;\n\t\t\tcontinue;\n\t\t}\n\t\tconst v = replaceEqualDeep(aItem, bItem, depth + 1);\n\t\tcopy[key] = v;\n\t\tif (v === aItem) equalItems++;\n\t}\n\treturn aSize === bSize && equalItems === aSize ? a : copy;\n}\n/**\n* Shallow compare objects.\n*/\nfunction shallowEqualObjects(a, b) {\n\tif (!b || Object.keys(a).length !== Object.keys(b).length) return false;\n\tfor (const key in a) if (a[key] !== b[key]) return false;\n\treturn true;\n}\nfunction isPlainArray(value) {\n\treturn Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n\tif (!hasObjectPrototype(o)) return false;\n\tconst objectPrototype = Object.getPrototypeOf(o);\n\tconst ctor = objectPrototype?.constructor;\n\tif (ctor === void 0) return true;\n\tif (typeof ctor !== \"function\") return false;\n\tconst prot = ctor.prototype;\n\tif (!hasObjectPrototype(prot)) return false;\n\tif (!prot.hasOwnProperty(\"isPrototypeOf\")) return false;\n\tif (objectPrototype !== Object.prototype) return false;\n\treturn true;\n}\nfunction hasObjectPrototype(o) {\n\treturn Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n\treturn new Promise((resolve) => {\n\t\ttimeoutManager.setTimeout(resolve, timeout);\n\t});\n}\nfunction replaceData(prevData, data, options) {\n\tif (typeof options.structuralSharing === \"function\") return options.structuralSharing(prevData, data);\n\telse if (options.structuralSharing !== false) {\n\t\tif (process.env.NODE_ENV !== \"production\") try {\n\t\t\treturn replaceEqualDeep(prevData, data);\n\t\t} catch (error) {\n\t\t\tconsole.error(`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\t\t\tthrow error;\n\t\t}\n\t\treturn replaceEqualDeep(prevData, data);\n\t}\n\treturn data;\n}\n/**\n* Intended to be passed as a query's `placeholderData` option, for example\n* `placeholderData: keepPreviousData`. Instead of resetting the query's data to `undefined` while a new\n* query key is fetching, it keeps displaying the previously fetched data until the new data arrives.\n*\n* @example\n* ```ts\n* new QueryObserver(queryClient, {\n* queryKey: ['posts', page],\n* queryFn: () => fetchPosts(page),\n* placeholderData: keepPreviousData,\n* })\n* ```\n*/\nfunction keepPreviousData(previousData) {\n\treturn previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n\tconst newItems = [...items, item];\n\treturn max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n\tconst newItems = [item, ...items];\n\treturn max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\n/**\n* Sentinel value that can be passed as a query's `queryFn` to conditionally disable the query (equivalent\n* to `enabled: false`) while preserving full type inference for the query's data. Unlike `enabled: false`,\n* a query disabled via `skipToken` cannot be triggered with `refetch`.\n*\n* @example\n* ```ts\n* new QueryObserver(queryClient, {\n* queryKey: ['post', postId],\n* queryFn: postId != null ? () => fetchPost(postId) : skipToken,\n* })\n* ```\n*/\nconst skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (options.queryFn === skipToken) console.error(`Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`);\n\t}\n\tif (!options.queryFn && fetchOptions?.initialPromise) return () => fetchOptions.initialPromise;\n\tif (!options.queryFn || options.queryFn === skipToken) return () => Promise.reject(/* @__PURE__ */ new Error(`Missing queryFn: '${options.queryHash}'`));\n\treturn options.queryFn;\n}\n/**\n* Resolves a `throwOnError` option to a boolean.\n* If `throwOnError` is a function, it is called with `params` (e.g. the error and, depending on the caller,\n* additional context such as the query or mutation) and its result is returned, allowing the throwing\n* behavior to be decided per error. Otherwise, `throwOnError` itself is coerced to a boolean (`undefined`\n* resolves to `false`).\n*\n* @example\n* ```ts\n* const throwOnError =\n* query.state.error && typeof options.throwOnError === 'function'\n* ? shouldThrowError(options.throwOnError, [query.state.error, query])\n* : options.throwOnError\n* ```\n*/\nfunction shouldThrowError(throwOnError, params) {\n\tif (typeof throwOnError === \"function\") return throwOnError(...params);\n\treturn !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n\tlet consumed = false;\n\tlet signal;\n\tObject.defineProperty(object, \"signal\", {\n\t\tenumerable: true,\n\t\tget: () => {\n\t\t\tsignal ??= getSignal();\n\t\t\tif (consumed) return signal;\n\t\t\tconsumed = true;\n\t\t\tif (signal.aborted) onCancelled();\n\t\t\telse signal.addEventListener(\"abort\", onCancelled, { once: true });\n\t\t\treturn signal;\n\t\t}\n\t});\n\treturn object;\n}\n//#endregion\nexport { addConsumeAwareSignal, addToEnd, addToStart, ensureQueryFn, functionalUpdate, hashKey, hashQueryKeyByOptions, isPlainArray, isPlainObject, isServer, isValidTimeout, keepPreviousData, matchMutation, matchQuery, noop, partialMatchKey, replaceData, replaceEqualDeep, resolveQueryValue, shallowEqualObjects, shouldThrowError, skipToken, sleep, timeUntilStale };\n\n//# sourceMappingURL=utils.js.map",
27
+ "import { isServer as isServer$1 } from \"./utils.js\";\n//#region src/environmentManager.ts\nlet isServerFn = () => isServer$1;\n/**\n* Returns whether the current runtime should be treated as a server environment.\n*/\nconst isServer = () => isServerFn();\n/**\n* Manages how TanStack Query detects whether the current runtime should be treated as\n* server-side, which disables scheduling refetch timers and changes the default `retry` count\n* and `gcTime`. By default, the detection treats a missing `window` (or the presence of a\n* `Deno` global) as server.\n*\n* Override this for runtimes where that default detection would give the wrong answer — for\n* example, a Service Worker, where `window` is undefined even though the environment should\n* behave like a client.\n*\n* @example\n* ```ts\n* import { environmentManager } from '@tanstack/query-core'\n*\n* environmentManager.setIsServer(() => false)\n* ```\n*/\nconst environmentManager = {\n\tisServer,\n\t/**\n\t* Overrides the server check globally.\n\t*/\n\tsetIsServer(isServerValue) {\n\t\tisServerFn = isServerValue;\n\t}\n};\n//#endregion\nexport { environmentManager, isServer };\n\n//# sourceMappingURL=environmentManager.js.map",
28
+ "//#region src/subscribable.ts\nvar Subscribable = class {\n\tconstructor() {\n\t\tthis.listeners = /* @__PURE__ */ new Set();\n\t\tthis.subscribe = this.subscribe.bind(this);\n\t}\n\tsubscribe(listener) {\n\t\tthis.listeners.add(listener);\n\t\tthis.onSubscribe();\n\t\treturn () => {\n\t\t\tthis.listeners.delete(listener);\n\t\t\tthis.onUnsubscribe();\n\t\t};\n\t}\n\thasListeners() {\n\t\treturn this.listeners.size > 0;\n\t}\n\tonSubscribe() {}\n\tonUnsubscribe() {}\n};\n//#endregion\nexport { Subscribable };\n\n//# sourceMappingURL=subscribable.js.map",
29
+ "import { Subscribable } from \"./subscribable.js\";\n//#region src/focusManager.ts\n/**\n* The `FocusManager` manages the focus state within TanStack Query.\n*\n* It can be used to change the default event listeners or to manually change the focus state.\n*/\nvar FocusManager = class extends Subscribable {\n\t#focused;\n\t#cleanup;\n\t#setup;\n\tconstructor() {\n\t\tsuper();\n\t\tthis.#setup = (onFocus) => {\n\t\t\tif (typeof window !== \"undefined\" && window.addEventListener) {\n\t\t\t\tconst listener = () => onFocus();\n\t\t\t\twindow.addEventListener(\"visibilitychange\", listener, false);\n\t\t\t\treturn () => {\n\t\t\t\t\twindow.removeEventListener(\"visibilitychange\", listener);\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tonSubscribe() {\n\t\tif (!this.#cleanup) this.setEventListener(this.#setup);\n\t}\n\tonUnsubscribe() {\n\t\tif (!this.hasListeners()) {\n\t\t\tthis.#cleanup?.();\n\t\t\tthis.#cleanup = void 0;\n\t\t}\n\t}\n\t/**\n\t* `setEventListener` can be used to set a custom event listener that will\n\t* be used to determine the focus state. The provided `setup` function\n\t* receives a `setFocused` callback: call it with a `boolean` to manually\n\t* set the focus state, or with no arguments to re-evaluate the current\n\t* focus state and notify subscribers.\n\t*\n\t* @example\n\t* ```ts\n\t* import { focusManager } from '@tanstack/query-core'\n\t*\n\t* focusManager.setEventListener((handleFocus) => {\n\t* const listener = () => handleFocus()\n\t* // Listen to visibilitychange\n\t* if (typeof window !== 'undefined' && window.addEventListener) {\n\t* window.addEventListener('visibilitychange', listener, false)\n\t* }\n\t*\n\t* return () => {\n\t* // Be sure to unsubscribe if a new handler is set\n\t* window.removeEventListener('visibilitychange', listener)\n\t* }\n\t* })\n\t* ```\n\t*/\n\tsetEventListener(setup) {\n\t\tthis.#setup = setup;\n\t\tthis.#cleanup?.();\n\t\tthis.#cleanup = setup((focused) => {\n\t\t\tif (typeof focused === \"boolean\") this.setFocused(focused);\n\t\t\telse this.onFocus();\n\t\t});\n\t}\n\t/**\n\t* `setFocused` can be used to manually set the focus state. Set `undefined`\n\t* to fall back to the default focus check.\n\t*\n\t* @example\n\t* ```ts\n\t* import { focusManager } from '@tanstack/query-core'\n\t*\n\t* // Set focused\n\t* focusManager.setFocused(true)\n\t*\n\t* // Set unfocused\n\t* focusManager.setFocused(false)\n\t*\n\t* // Fallback to the default focus check\n\t* focusManager.setFocused(undefined)\n\t* ```\n\t*/\n\tsetFocused(focused) {\n\t\tif (this.#focused !== focused) {\n\t\t\tthis.#focused = focused;\n\t\t\tthis.onFocus();\n\t\t}\n\t}\n\t/**\n\t* `onFocus` notifies all subscribed listeners with the current focus state.\n\t*/\n\tonFocus() {\n\t\tconst isFocused = this.isFocused();\n\t\tthis.listeners.forEach((listener) => {\n\t\t\tlistener(isFocused);\n\t\t});\n\t}\n\t/**\n\t* `isFocused` can be used to get the current focus state.\n\t*/\n\tisFocused() {\n\t\tif (typeof this.#focused === \"boolean\") return this.#focused;\n\t\treturn globalThis.document?.visibilityState !== \"hidden\";\n\t}\n};\n/**\n* Singleton instance of {@link FocusManager}, used to manage and observe the focus state within TanStack Query.\n*/\nconst focusManager = new FocusManager();\n//#endregion\nexport { FocusManager, focusManager };\n\n//# sourceMappingURL=focusManager.js.map",
30
+ "import { systemSetTimeoutZero } from \"./timeoutManager.js\";\n//#region src/notifyManager.ts\n/**\n* Default scheduling function used by the notify manager.\n* Schedules the callback with the system's `setTimeout(callback, 0)`.\n*/\nconst defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n\tlet queue = [];\n\tlet transactions = 0;\n\tlet notifyFn = (callback) => {\n\t\tcallback();\n\t};\n\tlet batchNotifyFn = (callback) => {\n\t\tcallback();\n\t};\n\tlet scheduleFn = defaultScheduler;\n\tconst schedule = (callback) => {\n\t\tif (transactions) queue.push(callback);\n\t\telse scheduleFn(() => {\n\t\t\tnotifyFn(callback);\n\t\t});\n\t};\n\tconst flush = () => {\n\t\tconst originalQueue = queue;\n\t\tqueue = [];\n\t\tif (originalQueue.length) scheduleFn(() => {\n\t\t\tbatchNotifyFn(() => {\n\t\t\t\toriginalQueue.forEach((callback) => {\n\t\t\t\t\tnotifyFn(callback);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t};\n\treturn {\n\t\t/**\n\t\t* Batches all updates scheduled inside the passed callback.\n\t\t* This is mainly used internally to optimize query client updating.\n\t\t* Batches can be nested; the queue is only flushed once the outermost `batch` call finishes.\n\t\t* The return value of `callback` is passed through.\n\t\t*/\n\t\tbatch: (callback) => {\n\t\t\tlet result;\n\t\t\ttransactions++;\n\t\t\ttry {\n\t\t\t\tresult = callback();\n\t\t\t} finally {\n\t\t\t\ttransactions--;\n\t\t\t\tif (!transactions) flush();\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\t/**\n\t\t* All calls to the wrapped function will be batched.\n\t\t*/\n\t\tbatchCalls: (callback) => {\n\t\t\treturn (...args) => {\n\t\t\t\tschedule(() => {\n\t\t\t\t\tcallback(...args);\n\t\t\t\t});\n\t\t\t};\n\t\t},\n\t\t/**\n\t\t* Schedules a function to be run on the next batch.\n\t\t* By default, the batch is run with a `setTimeout`, but this can be configured via `setScheduler`.\n\t\t*/\n\t\tschedule,\n\t\t/**\n\t\t* Use this method to set a custom notify function.\n\t\t* This can be used to for example wrap notifications with `React.act` while running tests.\n\t\t*/\n\t\tsetNotifyFunction: (fn) => {\n\t\t\tnotifyFn = fn;\n\t\t},\n\t\t/**\n\t\t* Use this method to set a custom function to batch notifications together into a single tick.\n\t\t* Framework adapters use this to plug in their own batching primitive, so that a single query\n\t\t* update only triggers one re-render instead of one per subscriber.\n\t\t*\n\t\t* @example\n\t\t* ```ts\n\t\t* import { notifyManager } from '@tanstack/query-core'\n\t\t* import { batch } from 'solid-js'\n\t\t*\n\t\t* notifyManager.setBatchNotifyFunction(batch)\n\t\t* ```\n\t\t*/\n\t\tsetBatchNotifyFunction: (fn) => {\n\t\t\tbatchNotifyFn = fn;\n\t\t},\n\t\t/**\n\t\t* Configures a custom callback that schedules when the next batch runs.\n\t\t* The default behavior is `setTimeout(callback, 0)`.\n\t\t*\n\t\t* @example\n\t\t* ```ts\n\t\t* import { notifyManager } from '@tanstack/query-core'\n\t\t*\n\t\t* // Schedule batches in the next microtask\n\t\t* notifyManager.setScheduler(queueMicrotask)\n\t\t*\n\t\t* // Schedule batches before the next frame is rendered\n\t\t* notifyManager.setScheduler(requestAnimationFrame)\n\t\t*\n\t\t* // Schedule batches some time in the future\n\t\t* notifyManager.setScheduler((cb) => setTimeout(cb, 10))\n\t\t* ```\n\t\t*/\n\t\tsetScheduler: (fn) => {\n\t\t\tscheduleFn = fn;\n\t\t}\n\t};\n}\n/**\n* Handles scheduling and batching callbacks in TanStack Query.\n*/\nconst notifyManager = createNotifyManager();\n//#endregion\nexport { createNotifyManager, defaultScheduler, notifyManager };\n\n//# sourceMappingURL=notifyManager.js.map",
31
+ "import { Subscribable } from \"./subscribable.js\";\n//#region src/onlineManager.ts\n/**\n* The `OnlineManager` manages the online state within TanStack Query. It can\n* be used to change the default event listeners or to manually change the\n* online state.\n*\n* By default, the `onlineManager` assumes an active network connection, and\n* listens to the `online` and `offline` events on the `window` object to\n* detect changes.\n*/\nvar OnlineManager = class extends Subscribable {\n\t#online = true;\n\t#cleanup;\n\t#setup;\n\tconstructor() {\n\t\tsuper();\n\t\tthis.#setup = (onOnline) => {\n\t\t\tif (typeof window !== \"undefined\" && window.addEventListener) {\n\t\t\t\tconst onlineListener = () => onOnline(true);\n\t\t\t\tconst offlineListener = () => onOnline(false);\n\t\t\t\twindow.addEventListener(\"online\", onlineListener, false);\n\t\t\t\twindow.addEventListener(\"offline\", offlineListener, false);\n\t\t\t\treturn () => {\n\t\t\t\t\twindow.removeEventListener(\"online\", onlineListener);\n\t\t\t\t\twindow.removeEventListener(\"offline\", offlineListener);\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tonSubscribe() {\n\t\tif (!this.#cleanup) this.setEventListener(this.#setup);\n\t}\n\tonUnsubscribe() {\n\t\tif (!this.hasListeners()) {\n\t\t\tthis.#cleanup?.();\n\t\t\tthis.#cleanup = void 0;\n\t\t}\n\t}\n\t/**\n\t* `setEventListener` can be used to set a custom event listener that will\n\t* be used to determine the online state. The provided `setup` function\n\t* receives a `setOnline` callback that should be called with a `boolean`\n\t* whenever the online state changes.\n\t*\n\t* @example\n\t* ```ts\n\t* import NetInfo from '@react-native-community/netinfo'\n\t* import { onlineManager } from '@tanstack/query-core'\n\t*\n\t* onlineManager.setEventListener((setOnline) => {\n\t* return NetInfo.addEventListener((state) => {\n\t* setOnline(!!state.isConnected)\n\t* })\n\t* })\n\t* ```\n\t*/\n\tsetEventListener(setup) {\n\t\tthis.#setup = setup;\n\t\tthis.#cleanup?.();\n\t\tthis.#cleanup = setup(this.setOnline.bind(this));\n\t}\n\t/**\n\t* `setOnline` can be used to manually set the online state.\n\t*\n\t* @example\n\t* ```ts\n\t* import { onlineManager } from '@tanstack/query-core'\n\t*\n\t* // Set to online\n\t* onlineManager.setOnline(true)\n\t*\n\t* // Set to offline\n\t* onlineManager.setOnline(false)\n\t* ```\n\t*/\n\tsetOnline(online) {\n\t\tif (this.#online !== online) {\n\t\t\tthis.#online = online;\n\t\t\tthis.listeners.forEach((listener) => {\n\t\t\t\tlistener(online);\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* `isOnline` can be used to get the current online state.\n\t*/\n\tisOnline() {\n\t\treturn this.#online;\n\t}\n};\n/**\n* Singleton instance of {@link OnlineManager}, used to manage and observe the online state within TanStack Query.\n*/\nconst onlineManager = new OnlineManager();\n//#endregion\nexport { OnlineManager, onlineManager };\n\n//# sourceMappingURL=onlineManager.js.map",
32
+ "import { noop, sleep } from \"./utils.js\";\nimport { isServer } from \"./environmentManager.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\n//#region src/retryer.ts\nfunction defaultRetryDelay(failureCount) {\n\treturn Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n\treturn (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\n/**\n* The error thrown by a `Retryer` (and surfaced to `query.promise`/`mutation`) when a fetch is cancelled, e.g. via\n* `query.cancel()`. `revert`, if `true`, tells the caller to restore the state the query was in before the fetch\n* started instead of surfacing the error. `silent`, if `true`, tells the caller to suppress this error and instead\n* resolve with the promise of the fetch that triggered the cancellation.\n* @example\n* ```ts\n* query.cancel()\n*\n* try {\n* await query.promise\n* } catch (error) {\n* if (error instanceof CancelledError) {\n* // the fetch was cancelled, e.g. via `query.cancel()`\n* }\n* }\n* ```\n*/\nvar CancelledError = class extends Error {\n\tconstructor(options) {\n\t\tsuper(\"CancelledError\");\n\t\tthis.revert = options?.revert;\n\t\tthis.silent = options?.silent;\n\t}\n};\n/**\n* @deprecated Use instanceof `CancelledError` instead.\n*/\nfunction isCancelledError(value) {\n\treturn value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n\tlet isRetryCancelled = false;\n\tlet failureCount = 0;\n\tlet continueFn;\n\tlet status = \"pending\";\n\tlet promiseResolve;\n\tlet promiseReject;\n\tconst promise = new Promise((resolve, reject) => {\n\t\tpromiseResolve = resolve;\n\t\tpromiseReject = reject;\n\t});\n\tpromise.catch(noop);\n\tconst isResolved = () => status !== \"pending\";\n\tconst cancel = (cancelOptions) => {\n\t\tif (!isResolved()) {\n\t\t\tconst error = new CancelledError(cancelOptions);\n\t\t\treject(error);\n\t\t\tconfig.onCancel?.(error);\n\t\t}\n\t};\n\tconst cancelRetry = () => {\n\t\tisRetryCancelled = true;\n\t};\n\tconst continueRetry = () => {\n\t\tisRetryCancelled = false;\n\t};\n\tconst canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n\tconst canStart = () => canFetch(config.networkMode) && config.canRun();\n\tconst resolve = (value) => {\n\t\tif (!isResolved()) {\n\t\t\tcontinueFn?.();\n\t\t\tstatus = \"resolved\";\n\t\t\tpromiseResolve(value);\n\t\t}\n\t};\n\tconst reject = (value) => {\n\t\tif (!isResolved()) {\n\t\t\tcontinueFn?.();\n\t\t\tstatus = \"rejected\";\n\t\t\tpromiseReject(value);\n\t\t}\n\t};\n\tconst pause = () => {\n\t\treturn new Promise((continueResolve) => {\n\t\t\tcontinueFn = (value) => {\n\t\t\t\tif (isResolved() || canContinue()) continueResolve(value);\n\t\t\t};\n\t\t\tconfig.onPause?.();\n\t\t}).then(() => {\n\t\t\tcontinueFn = void 0;\n\t\t\tif (!isResolved()) config.onContinue?.();\n\t\t});\n\t};\n\tconst run = () => {\n\t\tif (isResolved()) return;\n\t\tlet promiseOrValue;\n\t\tconst initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n\t\ttry {\n\t\t\tpromiseOrValue = initialPromise ?? config.fn();\n\t\t} catch (error) {\n\t\t\tpromiseOrValue = Promise.reject(error);\n\t\t}\n\t\tPromise.resolve(promiseOrValue).then(resolve).catch((error) => {\n\t\t\tif (isResolved()) return;\n\t\t\tconst retry = config.retry ?? (isServer() ? 0 : 3);\n\t\t\tconst retryDelay = config.retryDelay ?? defaultRetryDelay;\n\t\t\tconst delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n\t\t\tconst shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n\t\t\tif (isRetryCancelled || !shouldRetry) {\n\t\t\t\treject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailureCount++;\n\t\t\tconfig.onFail?.(failureCount, error);\n\t\t\tsleep(delay).then(() => {\n\t\t\t\treturn canContinue() ? void 0 : pause();\n\t\t\t}).then(() => {\n\t\t\t\tif (isRetryCancelled) reject(error);\n\t\t\t\telse run();\n\t\t\t});\n\t\t});\n\t};\n\treturn {\n\t\tpromise,\n\t\tstatus: () => status,\n\t\tcancel,\n\t\tcontinue: () => {\n\t\t\tcontinueFn?.();\n\t\t\treturn promise;\n\t\t},\n\t\tcancelRetry,\n\t\tcontinueRetry,\n\t\tcanStart,\n\t\tstart: () => {\n\t\t\tif (canStart()) run();\n\t\t\telse pause().then(run);\n\t\t\treturn promise;\n\t\t}\n\t};\n}\n//#endregion\nexport { CancelledError, canFetch, createRetryer, isCancelledError };\n\n//# sourceMappingURL=retryer.js.map",
33
+ "import { timeoutManager } from \"./timeoutManager.js\";\nimport { isValidTimeout } from \"./utils.js\";\nimport { isServer } from \"./environmentManager.js\";\n//#region src/removable.ts\nvar Removable = class {\n\t#gcTimeout;\n\tdestroy() {\n\t\tthis.clearGcTimeout();\n\t}\n\tscheduleGc() {\n\t\tthis.clearGcTimeout();\n\t\tif (isValidTimeout(this.gcTime)) this.#gcTimeout = timeoutManager.setTimeout(() => {\n\t\t\tthis.optionalRemove();\n\t\t}, this.gcTime);\n\t}\n\tupdateGcTime(newGcTime) {\n\t\tthis.gcTime = Math.max(this.gcTime || 0, newGcTime ?? (isServer() ? Infinity : 3e5));\n\t}\n\tclearGcTimeout() {\n\t\tif (this.#gcTimeout !== void 0) {\n\t\t\ttimeoutManager.clearTimeout(this.#gcTimeout);\n\t\t\tthis.#gcTimeout = void 0;\n\t\t}\n\t}\n};\n//#endregion\nexport { Removable };\n\n//# sourceMappingURL=removable.js.map",
34
+ "import { addConsumeAwareSignal, addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\n//#region src/infiniteQueryBehavior.ts\nfunction infiniteQueryBehavior(pages) {\n\treturn { onFetch: (context, query) => {\n\t\tconst options = context.options;\n\t\tconst direction = context.fetchOptions?.meta?.fetchMore?.direction;\n\t\tconst oldPages = context.state.data?.pages || [];\n\t\tconst oldPageParams = context.state.data?.pageParams || [];\n\t\tlet result = {\n\t\t\tpages: [],\n\t\t\tpageParams: []\n\t\t};\n\t\tlet currentPage = 0;\n\t\tconst fetchFn = async () => {\n\t\t\tlet cancelled = false;\n\t\t\tconst addSignalProperty = (object) => {\n\t\t\t\taddConsumeAwareSignal(object, () => context.signal, () => cancelled = true);\n\t\t\t};\n\t\t\tconst queryFn = ensureQueryFn(context.options, context.fetchOptions);\n\t\t\tconst fetchPage = async (data, param, previous) => {\n\t\t\t\tif (cancelled) return Promise.reject(context.signal.reason);\n\t\t\t\tif (param == null && data.pages.length) return Promise.resolve(data);\n\t\t\t\tconst createQueryFnContext = () => {\n\t\t\t\t\tconst queryFnContext = {\n\t\t\t\t\t\tclient: context.client,\n\t\t\t\t\t\tqueryKey: context.queryKey,\n\t\t\t\t\t\tpageParam: param,\n\t\t\t\t\t\tdirection: previous ? \"backward\" : \"forward\",\n\t\t\t\t\t\tmeta: context.options.meta\n\t\t\t\t\t};\n\t\t\t\t\taddSignalProperty(queryFnContext);\n\t\t\t\t\treturn queryFnContext;\n\t\t\t\t};\n\t\t\t\tconst queryFnContext = createQueryFnContext();\n\t\t\t\tconst page = await queryFn(queryFnContext);\n\t\t\t\tconst { maxPages } = context.options;\n\t\t\t\tconst addTo = previous ? addToStart : addToEnd;\n\t\t\t\treturn {\n\t\t\t\t\tpages: addTo(data.pages, page, maxPages),\n\t\t\t\t\tpageParams: addTo(data.pageParams, param, maxPages)\n\t\t\t\t};\n\t\t\t};\n\t\t\tif (direction && oldPages.length) {\n\t\t\t\tconst previous = direction === \"backward\";\n\t\t\t\tconst pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n\t\t\t\tconst oldData = {\n\t\t\t\t\tpages: oldPages,\n\t\t\t\t\tpageParams: oldPageParams\n\t\t\t\t};\n\t\t\t\tresult = await fetchPage(oldData, pageParamFn(options, oldData), previous);\n\t\t\t} else {\n\t\t\t\tconst remainingPages = pages ?? oldPages.length;\n\t\t\t\tdo {\n\t\t\t\t\tconst param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n\t\t\t\t\tif (currentPage > 0 && param == null) break;\n\t\t\t\t\tresult = await fetchPage(result, param);\n\t\t\t\t\tcurrentPage++;\n\t\t\t\t} while (currentPage < remainingPages);\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t\tif (context.options.persister) context.fetchFn = () => {\n\t\t\treturn context.options.persister?.(fetchFn, {\n\t\t\t\tclient: context.client,\n\t\t\t\tqueryKey: context.queryKey,\n\t\t\t\tmeta: context.options.meta,\n\t\t\t\tsignal: context.signal\n\t\t\t}, query);\n\t\t};\n\t\telse context.fetchFn = fetchFn;\n\t} };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n\tconst lastIndex = pages.length - 1;\n\treturn pages.length > 0 ? options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n\treturn pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\n/**\n* Checks if there is a next page.\n*/\nfunction hasNextPage(options, data) {\n\tif (!data) return false;\n\treturn getNextPageParam(options, data) != null;\n}\n/**\n* Checks if there is a previous page.\n*/\nfunction hasPreviousPage(options, data) {\n\tif (!data || !options.getPreviousPageParam) return false;\n\treturn getPreviousPageParam(options, data) != null;\n}\n//#endregion\nexport { hasNextPage, hasPreviousPage, infiniteQueryBehavior };\n\n//# sourceMappingURL=infiniteQueryBehavior.js.map",
35
+ "import { ensureQueryFn, noop, replaceData, resolveQueryValue, skipToken, timeUntilStale } 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\";\n//#region src/query.ts\n/**\n* Represents a single cached query. A `Query` holds the query's key, options,\n* state (data/error/status), and the observers currently subscribed to it.\n*\n* Instances are created and managed internally by `QueryCache`; application\n* code typically interacts with queries indirectly through `QueryClient` or\n* a framework hook like `useQuery`. Direct access to a `Query` instance is\n* possible via `queryCache.find()`/`findAll()` for inspecting cache state.\n*\n* @example\n* ```ts\n* const queryCache = queryClient.getQueryCache()\n* const query = queryCache.find({ queryKey: ['posts'] })\n*\n* if (query) {\n* console.log(query.state.dataUpdatedAt)\n* }\n* ```\n*/\nvar Query = class extends Removable {\n\t#queryType;\n\t#initialState;\n\t#revertState;\n\t#cache;\n\t#client;\n\t#retryer;\n\t#defaultOptions;\n\t#abortSignalConsumed;\n\tconstructor(config) {\n\t\tsuper();\n\t\tthis.#abortSignalConsumed = false;\n\t\tthis.#defaultOptions = config.defaultOptions;\n\t\tthis.setOptions(config.options);\n\t\tthis.observers = [];\n\t\tthis.#client = config.client;\n\t\tthis.#cache = this.#client.getQueryCache();\n\t\tthis.queryKey = config.queryKey;\n\t\tthis.queryHash = config.queryHash;\n\t\tthis.#initialState = getDefaultState(this.options);\n\t\tthis.state = config.state ?? this.#initialState;\n\t\tthis.scheduleGc();\n\t}\n\t/**\n\t* The `meta` object passed in the query's options, if any.\n\t*/\n\tget meta() {\n\t\treturn this.options.meta;\n\t}\n\t/** @internal */\n\tget queryType() {\n\t\treturn this.#queryType;\n\t}\n\t/**\n\t* The promise for the currently in-flight fetch, if the query is fetching.\n\t* `undefined` when the query is not fetching.\n\t*/\n\tget promise() {\n\t\treturn this.#retryer?.promise;\n\t}\n\t/** @internal */\n\tsetOptions(options) {\n\t\tthis.options = {\n\t\t\t...this.#defaultOptions,\n\t\t\t...options\n\t\t};\n\t\tif (options?._type) this.#queryType = options._type;\n\t\tthis.updateGcTime(this.options.gcTime);\n\t\tif (this.state && this.state.data === void 0) {\n\t\t\tconst defaultState = getDefaultState(this.options);\n\t\t\tif (defaultState.data !== void 0) {\n\t\t\t\tthis.setState(successState(defaultState.data, defaultState.dataUpdatedAt));\n\t\t\t\tthis.#initialState = defaultState;\n\t\t\t}\n\t\t}\n\t}\n\toptionalRemove() {\n\t\tif (!this.observers.length && this.state.fetchStatus === \"idle\") this.#cache.remove(this);\n\t}\n\t/** @internal */\n\tsetData(newData, options) {\n\t\tconst data = replaceData(this.state.data, newData, this.options);\n\t\tthis.#dispatch({\n\t\t\tdata,\n\t\t\ttype: \"success\",\n\t\t\tdataUpdatedAt: options?.updatedAt,\n\t\t\tmanual: options?.manual\n\t\t});\n\t\treturn data;\n\t}\n\t/**\n\t* Merges the given partial state directly into this query's state, notifying observers. Used\n\t* by persistence and broadcast plugins to restore a state snapshot, and by devtools to let a\n\t* user manually trigger a loading/error state or edit the cached data.\n\t*/\n\tsetState(state) {\n\t\tthis.#dispatch({\n\t\t\ttype: \"setState\",\n\t\t\tstate\n\t\t});\n\t}\n\t/**\n\t* Cancels the query's currently in-flight fetch, if any.\n\t* - Returns a promise that resolves once the cancellation has settled.\n\t* - If no fetch is in progress, resolves immediately.\n\t*\n\t* @example\n\t* ```ts\n\t* await query.cancel()\n\t* ```\n\t*/\n\tcancel(options) {\n\t\tconst promise = this.#retryer?.promise;\n\t\tthis.#retryer?.cancel(options);\n\t\treturn promise ? promise.then(noop).catch(noop) : Promise.resolve();\n\t}\n\t/**\n\t* Clears the query's garbage collection timeout and silently cancels any\n\t* in-flight fetch. Called by `QueryCache` when the query is removed from\n\t* the cache.\n\t*\n\t* @see {@link Query#cancel}\n\t*/\n\tdestroy() {\n\t\tsuper.destroy();\n\t\tthis.cancel({ silent: true });\n\t}\n\t/** @internal */\n\tget resetState() {\n\t\treturn this.#initialState;\n\t}\n\t/**\n\t* Resets the query back to its initial state (the state it had when it was\n\t* first created, e.g. any `initialData`), destroying it first to cancel any\n\t* in-flight fetch.\n\t*/\n\treset() {\n\t\tthis.destroy();\n\t\tthis.setState(this.resetState);\n\t}\n\t/**\n\t* Returns `true` if the query has at least one observer for which `enabled`\n\t* does not resolve to `false`.\n\t*/\n\tisActive() {\n\t\treturn this.observers.some((observer) => resolveQueryValue(observer.options.enabled, this) !== false);\n\t}\n\t/**\n\t* Returns `true` if the query is disabled, meaning it will not fetch\n\t* automatically.\n\t* - If the query has observers, it is disabled when none of them are active\n\t* (see `isActive`).\n\t* - If the query has no observers, it is disabled when its `queryFn` is\n\t* `skipToken` or it has never been fetched.\n\t*/\n\tisDisabled() {\n\t\tif (this.getObserversCount() > 0) return !this.isActive();\n\t\treturn this.options.queryFn === skipToken || !this.isFetched();\n\t}\n\t/**\n\t* Returns `true` if the query has been fetched, i.e. it has resolved with\n\t* either data or an error at least once.\n\t*/\n\tisFetched() {\n\t\treturn this.state.dataUpdateCount + this.state.errorUpdateCount > 0;\n\t}\n\t/**\n\t* Returns `true` if the query has at least one observer configured with\n\t* `staleTime: 'static'`, meaning it is treated as never stale.\n\t*/\n\tisStatic() {\n\t\tif (this.getObserversCount() > 0) return this.observers.some((observer) => resolveQueryValue(observer.options.staleTime, this) === \"static\");\n\t\treturn false;\n\t}\n\t/**\n\t* Returns `true` if the query is stale.\n\t* - If the query has observers, defers to whether any observer's current\n\t* result reports `isStale` (which accounts for each observer's own\n\t* `staleTime` and `enabled` state).\n\t* - If the query has no observers, it is considered stale when it has no\n\t* data or has been invalidated.\n\t*\n\t* @see {@link Query#isStaleByTime}\n\t* @example\n\t* ```ts\n\t* if (query.isStale()) {\n\t* // refetch or otherwise treat the cached data as outdated\n\t* }\n\t* ```\n\t*/\n\tisStale() {\n\t\tif (this.getObserversCount() > 0) return this.observers.some((observer) => observer.getCurrentResult().isStale);\n\t\treturn this.state.data === void 0 || this.state.isInvalidated;\n\t}\n\t/**\n\t* Returns `true` if the query's data is stale relative to the given\n\t* `staleTime` (defaults to `0`).\n\t* - A query with no data is always stale.\n\t* - `staleTime: 'static'` is never stale.\n\t* - An invalidated query is always stale.\n\t* - Otherwise, staleness is based on elapsed time since `dataUpdatedAt`.\n\t*\n\t* @see {@link Query#isStale}\n\t* @example\n\t* ```ts\n\t* const isStale = query.isStaleByTime(1000 * 60)\n\t* ```\n\t*/\n\tisStaleByTime(staleTime = 0) {\n\t\tif (this.state.data === void 0) return true;\n\t\tif (staleTime === \"static\") return false;\n\t\tif (this.state.isInvalidated) return true;\n\t\treturn !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n\t}\n\t/** @internal */\n\tonFocus() {\n\t\tthis.observers.find((x) => x.shouldFetchOnWindowFocus())?.refetch({ cancelRefetch: false });\n\t\tthis.#retryer?.continue();\n\t}\n\t/** @internal */\n\tonOnline() {\n\t\tthis.observers.find((x) => x.shouldFetchOnReconnect())?.refetch({ cancelRefetch: false });\n\t\tthis.#retryer?.continue();\n\t}\n\t/** @internal */\n\taddObserver(observer) {\n\t\tif (!this.observers.includes(observer)) {\n\t\t\tthis.observers.push(observer);\n\t\t\tthis.clearGcTimeout();\n\t\t\tthis.#cache.notify({\n\t\t\t\ttype: \"observerAdded\",\n\t\t\t\tquery: this,\n\t\t\t\tobserver\n\t\t\t});\n\t\t}\n\t}\n\t/** @internal */\n\tremoveObserver(observer) {\n\t\tconst index = this.observers.indexOf(observer);\n\t\tif (index !== -1) {\n\t\t\tthis.observers.splice(index, 1);\n\t\t\tif (!this.observers.length) {\n\t\t\t\tif (this.#retryer) {\n\t\t\t\t\tif (this.#abortSignalConsumed || this.state.fetchStatus === \"paused\" && this.state.status === \"pending\") this.#retryer.cancel({ revert: true });\n\t\t\t\t\telse this.#retryer.cancelRetry();\n\t\t\t\t}\n\t\t\t\tthis.scheduleGc();\n\t\t\t}\n\t\t\tthis.#cache.notify({\n\t\t\t\ttype: \"observerRemoved\",\n\t\t\t\tquery: this,\n\t\t\t\tobserver\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* Returns the number of observers currently subscribed to this query.\n\t*\n\t* @example\n\t* ```ts\n\t* if (query.getObserversCount() === 0) {\n\t* // no component is currently watching this query\n\t* }\n\t* ```\n\t*/\n\tgetObserversCount() {\n\t\treturn this.observers.length;\n\t}\n\t/**\n\t* Marks the query as invalidated, unless it is already invalidated. This\n\t* updates `state.isInvalidated` and notifies observers, but does not by\n\t* itself trigger a refetch.\n\t*\n\t* @example\n\t* ```ts\n\t* query.invalidate()\n\t* ```\n\t*/\n\tinvalidate() {\n\t\tif (!this.state.isInvalidated) this.#dispatch({ type: \"invalidate\" });\n\t}\n\t/**\n\t* Fetches the query, i.e. runs its `queryFn` (through any configured\n\t* retryer/behavior) and updates the query's state with the result.\n\t* - If a fetch is already in flight, returns its promise instead of\n\t* starting a new one, unless `fetchOptions.cancelRefetch` is set and the\n\t* query already has data, in which case the current fetch is silently\n\t* cancelled first.\n\t* - If `options` is passed, it replaces the query's current options\n\t* before fetching.\n\t*/\n\tasync fetch(options, fetchOptions) {\n\t\tif (this.state.fetchStatus !== \"idle\" && this.#retryer?.status() !== \"rejected\") {\n\t\t\tif (this.state.data !== void 0 && fetchOptions?.cancelRefetch) this.cancel({ silent: true });\n\t\t\telse if (this.#retryer) {\n\t\t\t\tthis.#retryer.continueRetry();\n\t\t\t\treturn this.#retryer.promise;\n\t\t\t}\n\t\t}\n\t\tif (options) this.setOptions(options);\n\t\tif (!this.options.queryFn) {\n\t\t\tconst observer = this.observers.find((x) => x.options.queryFn);\n\t\t\tif (observer) this.setOptions(observer.options);\n\t\t}\n\t\tif (process.env.NODE_ENV !== \"production\") {\n\t\t\tif (!Array.isArray(this.options.queryKey)) console.error(`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\t\t}\n\t\tconst abortController = new AbortController();\n\t\tconst addSignalProperty = (object) => {\n\t\t\tObject.defineProperty(object, \"signal\", {\n\t\t\t\tenumerable: true,\n\t\t\t\tget: () => {\n\t\t\t\t\tthis.#abortSignalConsumed = true;\n\t\t\t\t\treturn abortController.signal;\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\tconst fetchFn = () => {\n\t\t\tconst queryFn = ensureQueryFn(this.options, fetchOptions);\n\t\t\tconst createQueryFnContext = () => {\n\t\t\t\tconst queryFnContext = {\n\t\t\t\t\tclient: this.#client,\n\t\t\t\t\tqueryKey: this.queryKey,\n\t\t\t\t\tmeta: this.meta\n\t\t\t\t};\n\t\t\t\taddSignalProperty(queryFnContext);\n\t\t\t\treturn queryFnContext;\n\t\t\t};\n\t\t\tconst queryFnContext = createQueryFnContext();\n\t\t\tthis.#abortSignalConsumed = false;\n\t\t\tif (this.options.persister) return this.options.persister(queryFn, queryFnContext, this);\n\t\t\treturn queryFn(queryFnContext);\n\t\t};\n\t\tconst createFetchContext = () => {\n\t\t\tconst context = {\n\t\t\t\tfetchOptions,\n\t\t\t\toptions: this.options,\n\t\t\t\tqueryKey: this.queryKey,\n\t\t\t\tclient: this.#client,\n\t\t\t\tstate: this.state,\n\t\t\t\tfetchFn\n\t\t\t};\n\t\t\taddSignalProperty(context);\n\t\t\treturn context;\n\t\t};\n\t\tconst context = createFetchContext();\n\t\t(this.#queryType === \"infinite\" ? infiniteQueryBehavior(this.options.pages) : this.options.behavior)?.onFetch(context, this);\n\t\tthis.#revertState = this.state;\n\t\tif (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) this.#dispatch({\n\t\t\ttype: \"fetch\",\n\t\t\tmeta: context.fetchOptions?.meta\n\t\t});\n\t\tconst retryer = this.#retryer = createRetryer({\n\t\t\tinitialPromise: fetchOptions?.initialPromise,\n\t\t\tfn: context.fetchFn,\n\t\t\tonCancel: (error) => {\n\t\t\t\tif (error instanceof CancelledError && error.revert) this.setState({\n\t\t\t\t\t...this.#revertState,\n\t\t\t\t\tfetchStatus: \"idle\"\n\t\t\t\t});\n\t\t\t\tabortController.abort();\n\t\t\t},\n\t\t\tonFail: (failureCount, error) => {\n\t\t\t\tthis.#dispatch({\n\t\t\t\t\ttype: \"failed\",\n\t\t\t\t\tfailureCount,\n\t\t\t\t\terror\n\t\t\t\t});\n\t\t\t},\n\t\t\tonPause: () => {\n\t\t\t\tthis.#dispatch({ type: \"pause\" });\n\t\t\t},\n\t\t\tonContinue: () => {\n\t\t\t\tthis.#dispatch({ type: \"continue\" });\n\t\t\t},\n\t\t\tretry: context.options.retry,\n\t\t\tretryDelay: context.options.retryDelay,\n\t\t\tnetworkMode: context.options.networkMode,\n\t\t\tcanRun: () => true\n\t\t});\n\t\ttry {\n\t\t\tconst data = await retryer.start();\n\t\t\tif (data === void 0) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") console.error(`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\t\t\t\tthrow new Error(`${this.queryHash} data is undefined`);\n\t\t\t}\n\t\t\tthis.setData(data);\n\t\t\tthis.#cache.config.onSuccess?.(data, this);\n\t\t\tthis.#cache.config.onSettled?.(data, this.state.error, this);\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\tif (error instanceof CancelledError) {\n\t\t\t\tif (error.silent) return this.#retryer.promise;\n\t\t\t\telse if (error.revert) {\n\t\t\t\t\tif (this.state.data === void 0) throw error;\n\t\t\t\t\treturn this.state.data;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.#dispatch({\n\t\t\t\ttype: \"error\",\n\t\t\t\terror\n\t\t\t});\n\t\t\tthis.#cache.config.onError?.(error, this);\n\t\t\tthis.#cache.config.onSettled?.(this.state.data, error, this);\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (this.#retryer === retryer) this.#retryer = void 0;\n\t\t\tthis.scheduleGc();\n\t\t}\n\t}\n\t#dispatch(action) {\n\t\tconst reducer = (state) => {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase \"failed\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tfetchFailureCount: action.failureCount,\n\t\t\t\t\tfetchFailureReason: action.error\n\t\t\t\t};\n\t\t\t\tcase \"pause\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tfetchStatus: \"paused\"\n\t\t\t\t};\n\t\t\t\tcase \"continue\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tfetchStatus: \"fetching\"\n\t\t\t\t};\n\t\t\t\tcase \"fetch\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\t...fetchState(state.data, this.options),\n\t\t\t\t\tfetchMeta: action.meta ?? null\n\t\t\t\t};\n\t\t\t\tcase \"success\":\n\t\t\t\t\tconst newState = {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\t...successState(action.data, action.dataUpdatedAt),\n\t\t\t\t\t\tdataUpdateCount: state.dataUpdateCount + 1,\n\t\t\t\t\t\t...!action.manual && {\n\t\t\t\t\t\t\tfetchStatus: \"idle\",\n\t\t\t\t\t\t\tfetchFailureCount: 0,\n\t\t\t\t\t\t\tfetchFailureReason: null\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tthis.#revertState = action.manual ? newState : void 0;\n\t\t\t\t\treturn newState;\n\t\t\t\tcase \"error\":\n\t\t\t\t\tconst error = action.error;\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\terrorUpdateCount: state.errorUpdateCount + 1,\n\t\t\t\t\t\terrorUpdatedAt: Date.now(),\n\t\t\t\t\t\tfetchFailureCount: state.fetchFailureCount + 1,\n\t\t\t\t\t\tfetchFailureReason: error,\n\t\t\t\t\t\tfetchStatus: \"idle\",\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\tisInvalidated: true\n\t\t\t\t\t};\n\t\t\t\tcase \"invalidate\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tisInvalidated: true\n\t\t\t\t};\n\t\t\t\tcase \"setState\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\t...action.state\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tthis.state = reducer(this.state);\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.observers.slice().forEach((observer) => {\n\t\t\t\tobserver.onQueryUpdate();\n\t\t\t});\n\t\t\tthis.#cache.notify({\n\t\t\t\tquery: this,\n\t\t\t\ttype: \"updated\",\n\t\t\t\taction\n\t\t\t});\n\t\t});\n\t}\n};\nfunction fetchState(data, options) {\n\treturn {\n\t\tfetchFailureCount: 0,\n\t\tfetchFailureReason: null,\n\t\tfetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n\t\t...data === void 0 && {\n\t\t\terror: null,\n\t\t\tstatus: \"pending\"\n\t\t}\n\t};\n}\nfunction successState(data, dataUpdatedAt) {\n\treturn {\n\t\tdata,\n\t\tdataUpdatedAt: dataUpdatedAt ?? Date.now(),\n\t\terror: null,\n\t\tisInvalidated: false,\n\t\tstatus: \"success\"\n\t};\n}\nfunction getDefaultState(options) {\n\tconst data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n\tconst hasData = data !== void 0;\n\tconst initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n\treturn {\n\t\tdata,\n\t\tdataUpdateCount: 0,\n\t\tdataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n\t\terror: null,\n\t\terrorUpdateCount: 0,\n\t\terrorUpdatedAt: 0,\n\t\tfetchFailureCount: 0,\n\t\tfetchFailureReason: null,\n\t\tfetchMeta: null,\n\t\tisInvalidated: false,\n\t\tstatus: hasData ? \"success\" : \"pending\",\n\t\tfetchStatus: \"idle\"\n\t};\n}\n//#endregion\nexport { Query, fetchState };\n\n//# sourceMappingURL=query.js.map",
36
+ "import { timeoutManager } from \"./timeoutManager.js\";\nimport { isValidTimeout, noop, replaceData, resolveQueryValue, shallowEqualObjects, timeUntilStale } from \"./utils.js\";\nimport { isServer } from \"./environmentManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\n//#region src/queryObserver.ts\n/**\n* A `QueryObserver` watches a single query in the `QueryCache` and computes a\n* `QueryObserverResult` from its state, recomputing and notifying subscribers\n* whenever the underlying query (or the observer's options) changes. It is\n* the primitive that framework adapters (e.g. `useQuery`) build their hooks\n* on top of, but it can also be used directly to observe and switch between\n* queries outside of any framework.\n*\n* @example\n* ```ts\n* const observer = new QueryObserver(queryClient, {\n* queryKey: ['posts'],\n* queryFn: fetchPosts,\n* })\n*\n* const unsubscribe = observer.subscribe((result) => {\n* console.log(result.data)\n* })\n* ```\n*/\nvar QueryObserver = class extends Subscribable {\n\t#client;\n\t#currentQuery = void 0;\n\t#currentQueryInitialState = void 0;\n\t#currentResult = void 0;\n\t#currentResultState;\n\t#currentResultOptions;\n\t#selectError;\n\t#selectFn;\n\t#selectResult;\n\t#lastQueryWithDefinedData;\n\t#staleTimeoutId;\n\t#refetchIntervalId;\n\t#currentRefetchInterval;\n\t#trackedProps = /* @__PURE__ */ new Set();\n\tconstructor(client, options) {\n\t\tsuper();\n\t\tthis.options = options;\n\t\tthis.#client = client;\n\t\tthis.#selectError = null;\n\t\tthis.bindMethods();\n\t\tthis.setOptions(options);\n\t}\n\tbindMethods() {\n\t\tthis.refetch = this.refetch.bind(this);\n\t}\n\tonSubscribe() {\n\t\tif (this.listeners.size === 1) {\n\t\t\tthis.#currentQuery.addObserver(this);\n\t\t\tif (shouldFetchOnMount(this.#currentQuery, this.options)) this.#executeFetch();\n\t\t\telse this.updateResult();\n\t\t\tthis.#updateTimers();\n\t\t}\n\t}\n\tonUnsubscribe() {\n\t\tif (!this.hasListeners()) this.destroy();\n\t}\n\t/**\n\t* Returns whether the observed query is currently stale and configured\n\t* (via the `refetchOnReconnect` option) to refetch when the network\n\t* reconnects.\n\t*/\n\tshouldFetchOnReconnect() {\n\t\treturn shouldFetchOn(this.#currentQuery, this.options, this.options.refetchOnReconnect);\n\t}\n\t/**\n\t* Returns whether the observed query is currently stale and configured\n\t* (via the `refetchOnWindowFocus` option) to refetch when the window\n\t* regains focus.\n\t*/\n\tshouldFetchOnWindowFocus() {\n\t\treturn shouldFetchOn(this.#currentQuery, this.options, this.options.refetchOnWindowFocus);\n\t}\n\t/**\n\t* Stops observing the current query: clears all listeners, cancels the\n\t* stale and refetch-interval timers, and removes this observer from the\n\t* query it was observing.\n\t*/\n\tdestroy() {\n\t\tthis.listeners = /* @__PURE__ */ new Set();\n\t\tthis.#clearStaleTimeout();\n\t\tthis.#clearRefetchInterval();\n\t\tthis.#currentQuery.removeObserver(this);\n\t}\n\t/**\n\t* Updates the observer's options. This will re-resolve the query being\n\t* observed (switching to a different query if the `queryKey` changed),\n\t* trigger a fetch if the new options require one and the observer has\n\t* subscribers, recompute the current result, and reschedule the stale and\n\t* refetch-interval timers as needed.\n\t*\n\t* @example\n\t* ```ts\n\t* observer.setOptions({ queryKey: ['posts', 1], queryFn: () => fetchPost(1) })\n\t* // later: switch to a different query, reusing the same observer\n\t* observer.setOptions({ queryKey: ['posts', 2], queryFn: () => fetchPost(2) })\n\t* ```\n\t*/\n\tsetOptions(options) {\n\t\tconst prevOptions = this.options;\n\t\tconst prevQuery = this.#currentQuery;\n\t\tthis.options = this.#client.defaultQueryOptions(options);\n\t\tif (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveQueryValue(this.options.enabled, this.#currentQuery) !== \"boolean\") throw new Error(\"Expected enabled to be a boolean or a callback that returns a boolean\");\n\t\tthis.#updateQuery();\n\t\tthis.#currentQuery.setOptions(this.options);\n\t\tif (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) this.#client.getQueryCache().notify({\n\t\t\ttype: \"observerOptionsUpdated\",\n\t\t\tquery: this.#currentQuery,\n\t\t\tobserver: this\n\t\t});\n\t\tconst mounted = this.hasListeners();\n\t\tif (mounted && shouldFetchOptionally(this.#currentQuery, prevQuery, this.options, prevOptions)) this.#executeFetch();\n\t\tthis.updateResult();\n\t\tif (mounted && (this.#currentQuery !== prevQuery || resolveQueryValue(this.options.enabled, this.#currentQuery) !== resolveQueryValue(prevOptions.enabled, this.#currentQuery) || resolveQueryValue(this.options.staleTime, this.#currentQuery) !== resolveQueryValue(prevOptions.staleTime, this.#currentQuery))) this.#updateStaleTimeout();\n\t\tconst nextRefetchInterval = this.#computeRefetchInterval();\n\t\tif (mounted && (this.#currentQuery !== prevQuery || resolveQueryValue(this.options.enabled, this.#currentQuery) !== resolveQueryValue(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) this.#updateRefetchInterval(nextRefetchInterval);\n\t}\n\t/**\n\t* Computes the result the observer would produce for the given (already-defaulted) options\n\t* right now, building the underlying `Query` if it doesn't exist yet, without waiting for a\n\t* subscription callback. Called by framework adapters on every render (e.g. `useQuery`) so the\n\t* returned value is available synchronously, ahead of `setOptions` triggering an actual fetch.\n\t*/\n\tgetOptimisticResult(options) {\n\t\tconst query = this.#client.getQueryCache().build(this.#client, options);\n\t\tconst result = this.createResult(query, options);\n\t\tif (!shallowEqualObjects(this.getCurrentResult(), result)) {\n\t\t\tthis.#currentResult = result;\n\t\t\tthis.#currentResultOptions = this.options;\n\t\t\tthis.#currentResultState = this.#currentQuery.state;\n\t\t}\n\t\treturn result;\n\t}\n\t/**\n\t* Returns the most recently computed `QueryObserverResult` for the\n\t* observed query. This is a point-in-time read; to be notified of updates\n\t* as they happen, subscribe to the observer instead (its inherited\n\t* `subscribe` method).\n\t*\n\t* @example\n\t* ```ts\n\t* const result = observer.getCurrentResult()\n\t* console.log(result.status, result.data)\n\t* ```\n\t*/\n\tgetCurrentResult() {\n\t\treturn this.#currentResult;\n\t}\n\t/**\n\t* Wraps a `QueryObserverResult` in a `Proxy` that records which properties are read, via\n\t* {@link QueryObserver#trackProp} (and an optional `onPropTracked` callback). Used by framework\n\t* adapters when `notifyOnChangeProps` is not set, to implement its default \"only re-render on\n\t* properties you actually read\" behavior.\n\t*/\n\ttrackResult(result, onPropTracked) {\n\t\treturn new Proxy(result, { get: (target, key) => {\n\t\t\tthis.trackProp(key);\n\t\t\tonPropTracked?.(key);\n\t\t\treturn Reflect.get(target, key);\n\t\t} });\n\t}\n\t/**\n\t* Records that the given `QueryObserverResult` property was read, so a subsequent update only\n\t* notifies this observer if a tracked property actually changed. Normally called indirectly via\n\t* {@link QueryObserver#trackResult}'s proxy; exposed directly for adapters that track property\n\t* access themselves (e.g. through their own reactivity system) instead of via the proxy.\n\t*/\n\ttrackProp(key) {\n\t\tthis.#trackedProps.add(key);\n\t}\n\t/**\n\t* Returns the `Query` instance this observer is currently observing.\n\t*/\n\tgetCurrentQuery() {\n\t\treturn this.#currentQuery;\n\t}\n\t/**\n\t* Refetches the observed query and returns a promise that resolves with\n\t* the resulting `QueryObserverResult`.\n\t*\n\t* @example\n\t* ```ts\n\t* const result = await observer.refetch({ cancelRefetch: false })\n\t* console.log(result.data)\n\t* ```\n\t*/\n\trefetch({ ...options } = {}) {\n\t\treturn this.fetch({ ...options });\n\t}\n\t/**\n\t* Fetches a query defined by the given options without affecting this\n\t* observer's own tracked query or result, and returns a promise that\n\t* resolves with the `QueryObserverResult` for that fetch. This is useful\n\t* for prefetching data that another observer (e.g. a query about to be\n\t* navigated to) will need, ahead of time.\n\t*\n\t* @example\n\t* ```ts\n\t* const result = await observer.fetchOptimistic({\n\t* queryKey: ['posts', 2],\n\t* queryFn: () => fetchPost(2),\n\t* })\n\t* console.log(result.data)\n\t* ```\n\t*/\n\tfetchOptimistic(options) {\n\t\tconst defaultedOptions = this.#client.defaultQueryOptions(options);\n\t\tconst query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n\t\tlet unsubscribe = () => {};\n\t\tlet resolveEarly;\n\t\tconst cachePromise = new Promise((resolve) => {\n\t\t\tresolveEarly = resolve;\n\t\t\tunsubscribe = this.#client.getQueryCache().subscribe((event) => {\n\t\t\t\tif (event.type === \"updated\" && event.query.queryHash === query.queryHash && query.state.data !== void 0) {\n\t\t\t\t\tunsubscribe();\n\t\t\t\t\tresolve(this.createResult(query, defaultedOptions));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treturn Promise.race([query.fetch().then(() => {\n\t\t\tconst result = this.createResult(query, defaultedOptions);\n\t\t\tresolveEarly?.(result);\n\t\t\treturn result;\n\t\t}).finally(() => {\n\t\t\tunsubscribe();\n\t\t}), cachePromise]);\n\t}\n\tfetch(fetchOptions) {\n\t\treturn this.#executeFetch({\n\t\t\t...fetchOptions,\n\t\t\tcancelRefetch: fetchOptions.cancelRefetch ?? true\n\t\t}).then(() => {\n\t\t\tthis.updateResult();\n\t\t\treturn this.#currentResult;\n\t\t});\n\t}\n\t#executeFetch(fetchOptions) {\n\t\tthis.#updateQuery();\n\t\tlet promise = this.#currentQuery.fetch(this.options, fetchOptions);\n\t\tif (!fetchOptions?.throwOnError) promise = promise.catch(noop);\n\t\treturn promise;\n\t}\n\t#shouldScheduleTimer(timeout) {\n\t\treturn !isServer() && resolveQueryValue(this.options.enabled, this.#currentQuery) !== false && isValidTimeout(timeout);\n\t}\n\t#updateStaleTimeout() {\n\t\tthis.#clearStaleTimeout();\n\t\tconst staleTime = resolveQueryValue(this.options.staleTime, this.#currentQuery);\n\t\tif (this.#currentResult.isStale || !this.#shouldScheduleTimer(staleTime)) return;\n\t\tconst timeout = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime) + 1;\n\t\tthis.#staleTimeoutId = timeoutManager.setTimeout(() => {\n\t\t\tif (!this.#currentResult.isStale) this.updateResult();\n\t\t}, timeout);\n\t}\n\t#computeRefetchInterval() {\n\t\treturn resolveQueryValue(this.options.refetchInterval, this.#currentQuery) ?? false;\n\t}\n\t#updateRefetchInterval(nextInterval) {\n\t\tthis.#clearRefetchInterval();\n\t\tthis.#currentRefetchInterval = nextInterval;\n\t\tif (this.#currentRefetchInterval === 0 || !this.#shouldScheduleTimer(this.#currentRefetchInterval)) return;\n\t\tthis.#refetchIntervalId = timeoutManager.setInterval(() => {\n\t\t\tif (this.options.refetchIntervalInBackground || focusManager.isFocused()) this.#executeFetch();\n\t\t}, this.#currentRefetchInterval);\n\t}\n\t#updateTimers() {\n\t\tthis.#updateStaleTimeout();\n\t\tthis.#updateRefetchInterval(this.#computeRefetchInterval());\n\t}\n\t#clearStaleTimeout() {\n\t\tif (this.#staleTimeoutId !== void 0) {\n\t\t\ttimeoutManager.clearTimeout(this.#staleTimeoutId);\n\t\t\tthis.#staleTimeoutId = void 0;\n\t\t}\n\t}\n\t#clearRefetchInterval() {\n\t\tif (this.#refetchIntervalId !== void 0) {\n\t\t\ttimeoutManager.clearInterval(this.#refetchIntervalId);\n\t\t\tthis.#refetchIntervalId = void 0;\n\t\t}\n\t}\n\tcreateResult(query, options) {\n\t\tconst prevQuery = this.#currentQuery;\n\t\tconst prevOptions = this.options;\n\t\tconst prevResult = this.#currentResult;\n\t\tconst prevResultState = this.#currentResultState;\n\t\tconst prevResultOptions = this.#currentResultOptions;\n\t\tconst queryInitialState = query !== prevQuery ? query.state : this.#currentQueryInitialState;\n\t\tconst { state } = query;\n\t\tlet newState = { ...state };\n\t\tlet isPlaceholderData = false;\n\t\tlet data;\n\t\tif (options._optimisticResults) {\n\t\t\tconst mounted = this.hasListeners();\n\t\t\tconst fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n\t\t\tconst fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n\t\t\tif (fetchOnMount || fetchOptionally) newState = {\n\t\t\t\t...newState,\n\t\t\t\t...fetchState(state.data, query.options)\n\t\t\t};\n\t\t\tif (options._optimisticResults === \"isRestoring\") newState.fetchStatus = \"idle\";\n\t\t}\n\t\tlet { error, errorUpdatedAt, status } = newState;\n\t\tdata = newState.data;\n\t\tlet skipSelect = false;\n\t\tif (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n\t\t\tlet placeholderData;\n\t\t\tif (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n\t\t\t\tplaceholderData = prevResult.data;\n\t\t\t\tskipSelect = true;\n\t\t\t} else placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(this.#lastQueryWithDefinedData?.state.data, this.#lastQueryWithDefinedData) : options.placeholderData;\n\t\t\tif (placeholderData !== void 0) {\n\t\t\t\tstatus = \"success\";\n\t\t\t\tdata = replaceData(prevResult?.data, placeholderData, options);\n\t\t\t\tisPlaceholderData = true;\n\t\t\t}\n\t\t}\n\t\tif (options.select && data !== void 0 && !skipSelect) {\n\t\t\tif (prevResult && data === prevResultState?.data && options.select === this.#selectFn) data = this.#selectResult;\n\t\t\telse try {\n\t\t\t\tthis.#selectFn = options.select;\n\t\t\t\tdata = options.select(data);\n\t\t\t\tdata = replaceData(prevResult?.data, data, options);\n\t\t\t\tthis.#selectResult = data;\n\t\t\t\tthis.#selectError = null;\n\t\t\t} catch (selectError) {\n\t\t\t\tthis.#selectError = selectError;\n\t\t\t}\n\t\t} else if (data === void 0) this.#selectError = null;\n\t\tif (this.#selectError) {\n\t\t\terror = this.#selectError;\n\t\t\tdata = this.#selectResult;\n\t\t\terrorUpdatedAt = Date.now();\n\t\t\tstatus = \"error\";\n\t\t\tisPlaceholderData = false;\n\t\t}\n\t\tconst isFetching = newState.fetchStatus === \"fetching\";\n\t\tconst isPending = status === \"pending\";\n\t\tconst isError = status === \"error\";\n\t\tconst isLoading = isPending && isFetching;\n\t\tconst hasData = data !== void 0;\n\t\treturn {\n\t\t\tstatus,\n\t\t\tfetchStatus: newState.fetchStatus,\n\t\t\tisPending,\n\t\t\tisSuccess: status === \"success\",\n\t\t\tisError,\n\t\t\tisInitialLoading: isLoading,\n\t\t\tisLoading,\n\t\t\tdata,\n\t\t\tdataUpdatedAt: newState.dataUpdatedAt,\n\t\t\terror,\n\t\t\terrorUpdatedAt,\n\t\t\tfailureCount: newState.fetchFailureCount,\n\t\t\tfailureReason: newState.fetchFailureReason,\n\t\t\terrorUpdateCount: newState.errorUpdateCount,\n\t\t\tisFetched: query.isFetched(),\n\t\t\tisFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n\t\t\tisFetching,\n\t\t\tisRefetching: isFetching && !isPending,\n\t\t\tisLoadingError: isError && !hasData,\n\t\t\tisPaused: newState.fetchStatus === \"paused\",\n\t\t\tisPlaceholderData,\n\t\t\tisRefetchError: isError && hasData,\n\t\t\tisStale: isStale(query, options),\n\t\t\trefetch: this.refetch,\n\t\t\tisEnabled: resolveQueryValue(options.enabled, query) !== false\n\t\t};\n\t}\n\t/**\n\t* Recomputes and stores the current result from the current query/options, notifying listeners\n\t* if it changed. Framework adapters call this right after subscribing to make sure no query\n\t* update was missed in the gap between creating the observer and subscribing to it.\n\t*/\n\tupdateResult() {\n\t\tconst prevResult = this.#currentResult;\n\t\tconst nextResult = this.createResult(this.#currentQuery, this.options);\n\t\tthis.#currentResultState = this.#currentQuery.state;\n\t\tthis.#currentResultOptions = this.options;\n\t\tif (this.#currentResultState.data !== void 0) this.#lastQueryWithDefinedData = this.#currentQuery;\n\t\tif (shallowEqualObjects(nextResult, prevResult)) return;\n\t\tthis.#currentResult = nextResult;\n\t\tconst shouldNotifyListeners = () => {\n\t\t\tif (!prevResult) return true;\n\t\t\tconst { notifyOnChangeProps } = this.options;\n\t\t\tconst notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n\t\t\tif (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) return true;\n\t\t\tconst includedProps = new Set(notifyOnChangePropsValue ?? this.#trackedProps);\n\t\t\tif (this.options.throwOnError) includedProps.add(\"error\");\n\t\t\treturn Object.keys(this.#currentResult).some((key) => {\n\t\t\t\tconst typedKey = key;\n\t\t\t\treturn this.#currentResult[typedKey] !== prevResult[typedKey] && includedProps.has(typedKey);\n\t\t\t});\n\t\t};\n\t\tconst notifyListeners = shouldNotifyListeners();\n\t\tnotifyManager.batch(() => {\n\t\t\tif (notifyListeners) this.listeners.forEach((listener) => {\n\t\t\t\tlistener(this.#currentResult);\n\t\t\t});\n\t\t\tthis.#client.getQueryCache().notify({\n\t\t\t\tquery: this.#currentQuery,\n\t\t\t\ttype: \"observerResultsUpdated\"\n\t\t\t});\n\t\t});\n\t}\n\t#updateQuery() {\n\t\tconst query = this.#client.getQueryCache().build(this.#client, this.options);\n\t\tif (query === this.#currentQuery) return;\n\t\tconst prevQuery = this.#currentQuery;\n\t\tthis.#currentQuery = query;\n\t\tthis.#currentQueryInitialState = query.state;\n\t\tif (this.hasListeners()) {\n\t\t\tprevQuery?.removeObserver(this);\n\t\t\tquery.addObserver(this);\n\t\t}\n\t}\n\t/** @internal */\n\tonQueryUpdate() {\n\t\tthis.updateResult();\n\t\tif (this.hasListeners()) this.#updateTimers();\n\t}\n};\nfunction shouldLoadOnMount(query, options) {\n\treturn resolveQueryValue(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && resolveQueryValue(options.retryOnMount, query) === false);\n}\nfunction shouldFetchOnMount(query, options) {\n\treturn shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n\tif (resolveQueryValue(options.enabled, query) !== false && resolveQueryValue(options.staleTime, query) !== \"static\") {\n\t\tconst value = resolveQueryValue(field, query);\n\t\treturn value === \"always\" || value !== false && isStale(query, options);\n\t}\n\treturn false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n\treturn (query !== prevQuery || resolveQueryValue(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n\treturn resolveQueryValue(options.enabled, query) !== false && query.isStaleByTime(resolveQueryValue(options.staleTime, query));\n}\n//#endregion\nexport { QueryObserver };\n\n//# sourceMappingURL=queryObserver.js.map",
37
+ "import { notifyManager } from \"./notifyManager.js\";\nimport { createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\n//#region src/mutation.ts\n/**\n* Represents a single mutation attempt. A `Mutation` holds the mutation's\n* options, state (data/error/status), and the `MutationObserver`s currently\n* subscribed to it.\n*\n* Instances are created and managed internally by `MutationCache`; application\n* code typically interacts with mutations indirectly through `QueryClient` or\n* a framework hook like `useMutation`. Direct access to a `Mutation` instance\n* is possible via `mutationCache.find()`/`getAll()` for inspecting cache state.\n*\n* @example\n* ```ts\n* const mutationCache = queryClient.getMutationCache()\n*\n* const mutation = mutationCache.find({ mutationKey: ['addPost'] })\n* ```\n*/\nvar Mutation = class extends Removable {\n\t#client;\n\t#observers;\n\t#mutationCache;\n\t#retryer;\n\tconstructor(config) {\n\t\tsuper();\n\t\tthis.#client = config.client;\n\t\tthis.mutationId = config.mutationId;\n\t\tthis.#mutationCache = config.mutationCache;\n\t\tthis.#observers = [];\n\t\tthis.state = config.state || getDefaultState();\n\t\tthis.setOptions(config.options);\n\t\tthis.scheduleGc();\n\t}\n\t/** @internal */\n\tsetOptions(options) {\n\t\tthis.options = options;\n\t\tthis.updateGcTime(this.options.gcTime);\n\t}\n\t/**\n\t* The `meta` object passed in the mutation's options, if any.\n\t*/\n\tget meta() {\n\t\treturn this.options.meta;\n\t}\n\t/** @internal */\n\taddObserver(observer) {\n\t\tif (!this.#observers.includes(observer)) {\n\t\t\tthis.#observers.push(observer);\n\t\t\tthis.clearGcTimeout();\n\t\t\tthis.#mutationCache.notify({\n\t\t\t\ttype: \"observerAdded\",\n\t\t\t\tmutation: this,\n\t\t\t\tobserver\n\t\t\t});\n\t\t}\n\t}\n\t/** @internal */\n\tremoveObserver(observer) {\n\t\tthis.#observers = this.#observers.filter((x) => x !== observer);\n\t\tthis.scheduleGc();\n\t\tthis.#mutationCache.notify({\n\t\t\ttype: \"observerRemoved\",\n\t\t\tmutation: this,\n\t\t\tobserver\n\t\t});\n\t}\n\toptionalRemove() {\n\t\tif (!this.#observers.length) {\n\t\t\tif (this.state.status === \"pending\") this.scheduleGc();\n\t\t\telse this.#mutationCache.remove(this);\n\t\t}\n\t}\n\t/**\n\t* Resumes a mutation that is currently paused or was restored from a\n\t* dehydrated, still-`pending` state.\n\t*\n\t* - If this mutation has an active retryer (it paused mid-attempt, e.g. due\n\t* to the network mode or scope-based queuing), its retryer is resumed.\n\t* - Otherwise, if the mutation's status is still `pending` (e.g. it was\n\t* dehydrated while an attempt was in flight and never got a retryer in\n\t* this instance), `execute` is called again with the last known variables.\n\t* - Otherwise the mutation has already settled and this resolves immediately\n\t* without running anything again.\n\t*\n\t* @example\n\t* ```ts\n\t* // typically driven by reconnect handling, e.g. queryClient.resumePausedMutations()\n\t* const mutation = mutationCache.find({ mutationKey: ['addPost'] })\n\t* await mutation?.continue()\n\t* ```\n\t*\n\t* @see {@link Mutation#execute}\n\t*/\n\tcontinue() {\n\t\treturn this.#retryer?.continue() ?? (this.state.status === \"pending\" ? this.execute(this.state.variables) : Promise.resolve());\n\t}\n\t/**\n\t* Runs the mutation function for the given variables through a retryer, and\n\t* drives the mutation's state and lifecycle callbacks through to settlement.\n\t*\n\t* If this mutation's state is already `pending` when `execute` is called\n\t* (i.e. it was restored, still in-flight, from a dehydrated state), the\n\t* `onMutate` step is skipped and a `continue` action is dispatched to\n\t* unpause it; otherwise a `pending` action is dispatched first, then the\n\t* mutation cache's `onMutate` and the mutation's own `onMutate` option are\n\t* awaited in that order, and the resulting context is stored.\n\t*\n\t* The mutation function is then run (subject to `retry`/`retryDelay`/\n\t* `networkMode`, and to the mutation cache's scope-based serialization).\n\t* On success, the cache's `onSuccess`/`onSettled` callbacks run before the\n\t* mutation's own `onSuccess`/`onSettled` options, a `success` action is\n\t* dispatched, and the resolved data is returned. On failure, the same\n\t* cache-then-option ordering is used for `onError`/`onSettled`, but each of\n\t* those four callbacks is individually caught so that a throwing callback\n\t* cannot mask the original error; an `error` action is then dispatched and\n\t* the original error is re-thrown.\n\t*\n\t* @example\n\t* ```ts\n\t* // Called internally by `MutationObserver.mutate` and `Mutation.continue` —\n\t* // applications normally trigger mutations through those, not this method.\n\t* const data = await mutation.execute(variables)\n\t* ```\n\t*\n\t* @see {@link Mutation#continue}\n\t*/\n\tasync execute(variables) {\n\t\tconst onContinue = () => {\n\t\t\tthis.#dispatch({ type: \"continue\" });\n\t\t};\n\t\tconst mutationFnContext = {\n\t\t\tclient: this.#client,\n\t\t\tmeta: this.options.meta,\n\t\t\tmutationKey: this.options.mutationKey\n\t\t};\n\t\tconst retryer = this.#retryer = createRetryer({\n\t\t\tfn: () => {\n\t\t\t\tif (!this.options.mutationFn) return Promise.reject(/* @__PURE__ */ new Error(\"No mutationFn found\"));\n\t\t\t\treturn this.options.mutationFn(variables, mutationFnContext);\n\t\t\t},\n\t\t\tonFail: (failureCount, error) => {\n\t\t\t\tthis.#dispatch({\n\t\t\t\t\ttype: \"failed\",\n\t\t\t\t\tfailureCount,\n\t\t\t\t\terror\n\t\t\t\t});\n\t\t\t},\n\t\t\tonPause: () => {\n\t\t\t\tthis.#dispatch({ type: \"pause\" });\n\t\t\t},\n\t\t\tonContinue,\n\t\t\tretry: this.options.retry ?? 0,\n\t\t\tretryDelay: this.options.retryDelay,\n\t\t\tnetworkMode: this.options.networkMode,\n\t\t\tcanRun: () => this.#mutationCache.canRun(this)\n\t\t});\n\t\tconst restored = this.state.status === \"pending\";\n\t\tconst isPaused = !retryer.canStart();\n\t\ttry {\n\t\t\tif (restored) onContinue();\n\t\t\telse {\n\t\t\t\tthis.#dispatch({\n\t\t\t\t\ttype: \"pending\",\n\t\t\t\t\tvariables,\n\t\t\t\t\tisPaused\n\t\t\t\t});\n\t\t\t\tif (this.#mutationCache.config.onMutate) await this.#mutationCache.config.onMutate(variables, this, mutationFnContext);\n\t\t\t\tconst context = await this.options.onMutate?.(variables, mutationFnContext);\n\t\t\t\tif (context !== this.state.context) this.#dispatch({\n\t\t\t\t\ttype: \"pending\",\n\t\t\t\t\tcontext,\n\t\t\t\t\tvariables,\n\t\t\t\t\tisPaused\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst data = await retryer.start();\n\t\t\tawait this.#mutationCache.config.onSuccess?.(data, variables, this.state.context, this, mutationFnContext);\n\t\t\tawait this.options.onSuccess?.(data, variables, this.state.context, mutationFnContext);\n\t\t\tawait this.#mutationCache.config.onSettled?.(data, null, this.state.variables, this.state.context, this, mutationFnContext);\n\t\t\tawait this.options.onSettled?.(data, null, variables, this.state.context, mutationFnContext);\n\t\t\tthis.#dispatch({\n\t\t\t\ttype: \"success\",\n\t\t\t\tdata\n\t\t\t});\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\tawait this.#mutationCache.config.onError?.(error, variables, this.state.context, this, mutationFnContext);\n\t\t\t} catch (e) {\n\t\t\t\tPromise.reject(e);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.options.onError?.(error, variables, this.state.context, mutationFnContext);\n\t\t\t} catch (e) {\n\t\t\t\tPromise.reject(e);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.#mutationCache.config.onSettled?.(void 0, error, this.state.variables, this.state.context, this, mutationFnContext);\n\t\t\t} catch (e) {\n\t\t\t\tPromise.reject(e);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.options.onSettled?.(void 0, error, variables, this.state.context, mutationFnContext);\n\t\t\t} catch (e) {\n\t\t\t\tPromise.reject(e);\n\t\t\t}\n\t\t\tthis.#dispatch({\n\t\t\t\ttype: \"error\",\n\t\t\t\terror\n\t\t\t});\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tif (this.#retryer === retryer) this.#retryer = void 0;\n\t\t\tthis.#mutationCache.runNext(this);\n\t\t}\n\t}\n\t#dispatch(action) {\n\t\tconst reducer = (state) => {\n\t\t\tswitch (action.type) {\n\t\t\t\tcase \"failed\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tfailureCount: action.failureCount,\n\t\t\t\t\tfailureReason: action.error\n\t\t\t\t};\n\t\t\t\tcase \"pause\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tisPaused: true\n\t\t\t\t};\n\t\t\t\tcase \"continue\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tisPaused: false\n\t\t\t\t};\n\t\t\t\tcase \"pending\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tcontext: action.context,\n\t\t\t\t\tdata: void 0,\n\t\t\t\t\tfailureCount: 0,\n\t\t\t\t\tfailureReason: null,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPaused: action.isPaused,\n\t\t\t\t\tstatus: \"pending\",\n\t\t\t\t\tvariables: action.variables,\n\t\t\t\t\tsubmittedAt: Date.now()\n\t\t\t\t};\n\t\t\t\tcase \"success\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tdata: action.data,\n\t\t\t\t\tfailureCount: 0,\n\t\t\t\t\tfailureReason: null,\n\t\t\t\t\terror: null,\n\t\t\t\t\tstatus: \"success\",\n\t\t\t\t\tisPaused: false\n\t\t\t\t};\n\t\t\t\tcase \"error\": return {\n\t\t\t\t\t...state,\n\t\t\t\t\tdata: void 0,\n\t\t\t\t\terror: action.error,\n\t\t\t\t\tfailureCount: state.failureCount + 1,\n\t\t\t\t\tfailureReason: action.error,\n\t\t\t\t\tisPaused: false,\n\t\t\t\t\tstatus: \"error\"\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t\tthis.state = reducer(this.state);\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.#observers.forEach((observer) => {\n\t\t\t\tobserver.onMutationUpdate(action);\n\t\t\t});\n\t\t\tthis.#mutationCache.notify({\n\t\t\t\tmutation: this,\n\t\t\t\ttype: \"updated\",\n\t\t\t\taction\n\t\t\t});\n\t\t});\n\t}\n};\nfunction getDefaultState() {\n\treturn {\n\t\tcontext: void 0,\n\t\tdata: void 0,\n\t\terror: null,\n\t\tfailureCount: 0,\n\t\tfailureReason: null,\n\t\tisPaused: false,\n\t\tstatus: \"idle\",\n\t\tvariables: void 0,\n\t\tsubmittedAt: 0\n\t};\n}\n//#endregion\nexport { Mutation, getDefaultState };\n\n//# sourceMappingURL=mutation.js.map",
38
+ "import { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\n//#region src/mutationCache.ts\n/**\n* The `MutationCache` is the storage for mutations.\n*\n* Normally, you will not interact with the `MutationCache` directly and instead use a\n* `QueryClient`. You can subscribe to it (inherited from `Subscribable`) to be informed of\n* safe/known updates to the cache, such as mutations being added, removed, or updated.\n*\n* @example\n* ```ts\n* const unsubscribe = mutationCache.subscribe((event) => {\n* console.log(event.type, event.mutation)\n* })\n* ```\n*/\nvar MutationCache = class extends Subscribable {\n\t#mutations;\n\t#scopes;\n\t#mutationId;\n\tconstructor(config = {}) {\n\t\tsuper();\n\t\tthis.config = config;\n\t\tthis.#mutations = /* @__PURE__ */ new Set();\n\t\tthis.#scopes = /* @__PURE__ */ new Map();\n\t\tthis.#mutationId = 0;\n\t}\n\t/** @internal */\n\tbuild(client, options, state) {\n\t\tconst mutation = new Mutation({\n\t\t\tclient,\n\t\t\tmutationCache: this,\n\t\t\tmutationId: ++this.#mutationId,\n\t\t\toptions: client.defaultMutationOptions(options),\n\t\t\tstate\n\t\t});\n\t\tthis.add(mutation);\n\t\treturn mutation;\n\t}\n\t/** @internal */\n\tadd(mutation) {\n\t\tthis.#mutations.add(mutation);\n\t\tconst scope = scopeFor(mutation);\n\t\tif (typeof scope === \"string\") {\n\t\t\tconst scopedMutations = this.#scopes.get(scope);\n\t\t\tif (scopedMutations) scopedMutations.push(mutation);\n\t\t\telse this.#scopes.set(scope, [mutation]);\n\t\t}\n\t\tthis.notify({\n\t\t\ttype: \"added\",\n\t\t\tmutation\n\t\t});\n\t}\n\t/** @internal */\n\tremove(mutation) {\n\t\tif (this.#mutations.delete(mutation)) {\n\t\t\tconst scope = scopeFor(mutation);\n\t\t\tif (typeof scope === \"string\") {\n\t\t\t\tconst scopedMutations = this.#scopes.get(scope);\n\t\t\t\tif (scopedMutations) {\n\t\t\t\t\tif (scopedMutations.length > 1) {\n\t\t\t\t\t\tconst index = scopedMutations.indexOf(mutation);\n\t\t\t\t\t\tif (index !== -1) scopedMutations.splice(index, 1);\n\t\t\t\t\t} else if (scopedMutations[0] === mutation) this.#scopes.delete(scope);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.notify({\n\t\t\ttype: \"removed\",\n\t\t\tmutation\n\t\t});\n\t}\n\t/** @internal */\n\tcanRun(mutation) {\n\t\tconst scope = scopeFor(mutation);\n\t\tif (typeof scope === \"string\") {\n\t\t\tconst firstPendingMutation = this.#scopes.get(scope)?.find((m) => m.state.status === \"pending\");\n\t\t\treturn !firstPendingMutation || firstPendingMutation === mutation;\n\t\t} else return true;\n\t}\n\t/** @internal */\n\trunNext(mutation) {\n\t\tconst scope = scopeFor(mutation);\n\t\tif (typeof scope === \"string\") return (this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused))?.continue() ?? Promise.resolve();\n\t\telse return Promise.resolve();\n\t}\n\t/**\n\t* Removes all mutations from the cache.\n\t*\n\t* @example\n\t* ```ts\n\t* const mutationCache = queryClient.getMutationCache()\n\t*\n\t* mutationCache.clear()\n\t* ```\n\t*/\n\tclear() {\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.#mutations.forEach((mutation) => {\n\t\t\t\tthis.notify({\n\t\t\t\t\ttype: \"removed\",\n\t\t\t\t\tmutation\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis.#mutations.clear();\n\t\t\tthis.#scopes.clear();\n\t\t});\n\t}\n\t/**\n\t* Returns all mutations within the cache.\n\t*\n\t* This is not typically needed for most applications, but can come in handy when needing more\n\t* information about a mutation in rare scenarios.\n\t*\n\t* @example\n\t* ```ts\n\t* const mutationCache = queryClient.getMutationCache()\n\t*\n\t* const mutations = mutationCache.getAll()\n\t* ```\n\t*/\n\tgetAll() {\n\t\treturn Array.from(this.#mutations);\n\t}\n\t/**\n\t* A slightly more advanced method that can be used to get an existing mutation instance from\n\t* the cache. If the mutation does not exist, `undefined` is returned.\n\t*\n\t* This is not typically needed for most applications, but can come in handy when needing more\n\t* information about a mutation in rare scenarios.\n\t*\n\t* @see {@link MutationCache#findAll}\n\t* @example\n\t* ```ts\n\t* const mutationCache = queryClient.getMutationCache()\n\t*\n\t* const mutation = mutationCache.find({ mutationKey: ['addPost'] })\n\t* ```\n\t*/\n\tfind(filters) {\n\t\tconst defaultedFilters = {\n\t\t\texact: true,\n\t\t\t...filters\n\t\t};\n\t\treturn this.getAll().find((mutation) => matchMutation(defaultedFilters, mutation));\n\t}\n\t/**\n\t* An even more advanced method that can be used to get existing mutation instances from the\n\t* cache that match the given filters. If no mutations match, an empty array is returned.\n\t*\n\t* This is not typically needed for most applications, but can come in handy when needing more\n\t* information about mutations in rare scenarios.\n\t*\n\t* @see {@link MutationCache#find}\n\t* @example\n\t* ```ts\n\t* const mutationCache = queryClient.getMutationCache()\n\t*\n\t* const mutations = mutationCache.findAll({ mutationKey: ['addPost'] })\n\t* ```\n\t*/\n\tfindAll(filters = {}) {\n\t\treturn this.getAll().filter((mutation) => matchMutation(filters, mutation));\n\t}\n\t/** @internal */\n\tnotify(event) {\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.listeners.forEach((listener) => {\n\t\t\t\tlistener(event);\n\t\t\t});\n\t\t});\n\t}\n\t/** @internal */\n\tresumePausedMutations() {\n\t\tconst pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n\t\treturn notifyManager.batch(() => Promise.all(pausedMutations.map((mutation) => mutation.continue().catch(noop))));\n\t}\n};\nfunction scopeFor(mutation) {\n\treturn mutation.options.scope?.id;\n}\n//#endregion\nexport { MutationCache };\n\n//# sourceMappingURL=mutationCache.js.map",
39
+ "import { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Query } from \"./query.js\";\n//#region src/queryCache.ts\n/**\n* The `QueryCache` is the storage mechanism for TanStack Query. It stores all the data, meta\n* information, and state of the queries it contains.\n*\n* Normally, you will not interact with the `QueryCache` directly and instead use a `QueryClient`\n* for a specific cache. You can subscribe to it (inherited from `Subscribable`) to be informed of\n* safe/known updates to the cache, such as queries being added, removed, or updated — updates made\n* outside of the cache's own tracked mechanisms (e.g. mutating a query's state object directly) do\n* not notify subscribers.\n*\n* @example\n* ```ts\n* const unsubscribe = queryCache.subscribe((event) => {\n* console.log(event.type, event.query)\n* })\n* ```\n*/\nvar QueryCache = class extends Subscribable {\n\t#queries;\n\tconstructor(config = {}) {\n\t\tsuper();\n\t\tthis.config = config;\n\t\tthis.#queries = /* @__PURE__ */ new Map();\n\t}\n\t/**\n\t* Returns the existing `Query` instance for the given options' `queryKey`/`queryHash`, or\n\t* builds and adds a new one to the cache if none exists yet. Used by framework adapters and\n\t* plugins (e.g. broadcast/persistence) that need to get-or-create a `Query` directly, bypassing\n\t* the reactive `QueryObserver` machinery.\n\t*\n\t* @example\n\t* ```ts\n\t* const queryCache = queryClient.getQueryCache()\n\t*\n\t* const query = queryCache.build(queryClient, {\n\t* queryKey: ['posts'],\n\t* queryFn: fetchPosts,\n\t* })\n\t* ```\n\t*/\n\tbuild(client, options, state) {\n\t\tconst queryKey = options.queryKey;\n\t\tconst queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n\t\tlet query = this.get(queryHash);\n\t\tif (!query) {\n\t\t\tquery = new Query({\n\t\t\t\tclient,\n\t\t\t\tqueryKey,\n\t\t\t\tqueryHash,\n\t\t\t\toptions: client.defaultQueryOptions(options),\n\t\t\t\tstate,\n\t\t\t\tdefaultOptions: client.getQueryDefaults(queryKey)\n\t\t\t});\n\t\t\tthis.add(query);\n\t\t}\n\t\treturn query;\n\t}\n\t/** @internal */\n\tadd(query) {\n\t\tif (!this.#queries.has(query.queryHash)) {\n\t\t\tthis.#queries.set(query.queryHash, query);\n\t\t\tthis.notify({\n\t\t\t\ttype: \"added\",\n\t\t\t\tquery\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* Destroys the given `Query` and removes it from the cache, notifying subscribers with a\n\t* `'removed'` event. A no-op if the query is no longer the one currently stored under its hash\n\t* (e.g. it was already replaced). Used by plugins (e.g. the broadcast client) that mirror\n\t* removals across `QueryCache` instances.\n\t*\n\t* @example\n\t* ```ts\n\t* const queryCache = queryClient.getQueryCache()\n\t* const query = queryCache.find({ queryKey: ['posts'] })\n\t*\n\t* if (query) {\n\t* queryCache.remove(query)\n\t* }\n\t* ```\n\t*/\n\tremove(query) {\n\t\tconst queryInMap = this.#queries.get(query.queryHash);\n\t\tif (queryInMap) {\n\t\t\tquery.destroy();\n\t\t\tif (queryInMap === query) this.#queries.delete(query.queryHash);\n\t\t\tthis.notify({\n\t\t\t\ttype: \"removed\",\n\t\t\t\tquery\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* Removes all queries from the cache.\n\t*\n\t* @example\n\t* ```ts\n\t* const queryCache = queryClient.getQueryCache()\n\t*\n\t* queryCache.clear()\n\t* ```\n\t*/\n\tclear() {\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.getAll().forEach((query) => {\n\t\t\t\tthis.remove(query);\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t* Returns the `Query` instance stored under the given `queryHash`, or `undefined` if none\n\t* exists. Unlike {@link QueryCache#find}, this looks up by the already-computed hash rather\n\t* than by `QueryFilters`. Used by plugins (e.g. broadcast/hydration) that already have a hash\n\t* to look up directly.\n\t*\n\t* @example\n\t* ```ts\n\t* const queryCache = queryClient.getQueryCache()\n\t* const queryHash = hashKey(['posts'])\n\t*\n\t* const query = queryCache.get(queryHash)\n\t* ```\n\t*/\n\tget(queryHash) {\n\t\treturn this.#queries.get(queryHash);\n\t}\n\t/**\n\t* Returns all queries within the cache.\n\t*\n\t* @example\n\t* ```ts\n\t* const queryCache = queryClient.getQueryCache()\n\t*\n\t* const queries = queryCache.getAll()\n\t* ```\n\t*/\n\tgetAll() {\n\t\treturn [...this.#queries.values()];\n\t}\n\t/**\n\t* A slightly more advanced method that can be used to get an existing query instance from the\n\t* cache. This instance not only contains all the state for the query, but all of the instances,\n\t* and underlying guts of the query as well. If the query does not exist, `undefined` is\n\t* returned.\n\t*\n\t* This is not typically needed for most applications, but can come in handy when needing more\n\t* information about a query in rare scenarios (e.g. looking at `query.state.dataUpdatedAt` to\n\t* decide whether a query is fresh enough to be used as an initial value).\n\t*\n\t* @see {@link QueryCache#findAll}\n\t* @example\n\t* ```ts\n\t* const queryCache = queryClient.getQueryCache()\n\t*\n\t* const query = queryCache.find({ queryKey: ['posts'] })\n\t* ```\n\t*/\n\tfind(filters) {\n\t\tconst defaultedFilters = {\n\t\t\texact: true,\n\t\t\t...filters\n\t\t};\n\t\treturn this.getAll().find((query) => matchQuery(defaultedFilters, query));\n\t}\n\t/**\n\t* An even more advanced method that can be used to get existing query instances from the cache\n\t* that partially match a query key. If no queries match, an empty array is returned.\n\t*\n\t* This is not typically needed for most applications, but can come in handy when needing more\n\t* information about queries in rare scenarios.\n\t*\n\t* @see {@link QueryCache#find}\n\t* @example\n\t* ```ts\n\t* const queryCache = queryClient.getQueryCache()\n\t*\n\t* const queries = queryCache.findAll({ queryKey: ['posts'] })\n\t* ```\n\t*/\n\tfindAll(filters = {}) {\n\t\tconst queries = this.getAll();\n\t\treturn Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n\t}\n\t/** @internal */\n\tnotify(event) {\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.listeners.forEach((listener) => {\n\t\t\t\tlistener(event);\n\t\t\t});\n\t\t});\n\t}\n\t/** @internal */\n\tonFocus() {\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.getAll().forEach((query) => {\n\t\t\t\tquery.onFocus();\n\t\t\t});\n\t\t});\n\t}\n\t/** @internal */\n\tonOnline() {\n\t\tnotifyManager.batch(() => {\n\t\t\tthis.getAll().forEach((query) => {\n\t\t\t\tquery.onOnline();\n\t\t\t});\n\t\t});\n\t}\n};\n//#endregion\nexport { QueryCache };\n\n//# sourceMappingURL=queryCache.js.map",
40
+ "import { functionalUpdate, hashKey, hashQueryKeyByOptions, noop, partialMatchKey, resolveQueryValue, skipToken } from \"./utils.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { QueryCache } from \"./queryCache.js\";\n//#region src/queryClient.ts\n/**\n* `QueryClient` is used to interact with a cache of queries and mutations. It owns a\n* `QueryCache` and a `MutationCache` (creating default ones if none are passed in) and holds\n* the default options that are applied to queries and mutations created through it.\n*\n* @example\n* ```ts\n* const queryClient = new QueryClient({\n* defaultOptions: {\n* queries: {\n* staleTime: Infinity,\n* },\n* },\n* })\n*\n* await queryClient.query({ queryKey: ['posts'], queryFn: fetchPosts })\n* ```\n*/\nvar QueryClient = class {\n\t#queryCache;\n\t#mutationCache;\n\t#defaultOptions;\n\t#queryDefaults;\n\t#mutationDefaults;\n\t#mountCount;\n\t#unsubscribeFocus;\n\t#unsubscribeOnline;\n\tconstructor(config = {}) {\n\t\tthis.#queryCache = config.queryCache || new QueryCache();\n\t\tthis.#mutationCache = config.mutationCache || new MutationCache();\n\t\tthis.#defaultOptions = config.defaultOptions || {};\n\t\tthis.#queryDefaults = /* @__PURE__ */ new Map();\n\t\tthis.#mutationDefaults = /* @__PURE__ */ new Map();\n\t\tthis.#mountCount = 0;\n\t}\n\t/**\n\t* Called by a framework adapter's `QueryClientProvider`-equivalent when it mounts, to start\n\t* listening for focus/online events and resume paused mutations. Ref-counted via an internal\n\t* mount count, so nested or multiple providers sharing the same `QueryClient` don't tear down\n\t* the shared listeners until the last one unmounts.\n\t*/\n\tmount() {\n\t\tthis.#mountCount++;\n\t\tif (this.#mountCount !== 1) return;\n\t\tthis.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n\t\t\tif (focused) {\n\t\t\t\tawait this.resumePausedMutations();\n\t\t\t\tthis.#queryCache.onFocus();\n\t\t\t}\n\t\t});\n\t\tthis.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n\t\t\tif (online) {\n\t\t\t\tawait this.resumePausedMutations();\n\t\t\t\tthis.#queryCache.onOnline();\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* The inverse of {@link QueryClient#mount} — called by a framework adapter's\n\t* `QueryClientProvider`-equivalent when it unmounts. Only tears down the focus/online\n\t* listeners once the mount count returns to `0`.\n\t*/\n\tunmount() {\n\t\tthis.#mountCount--;\n\t\tif (this.#mountCount !== 0) return;\n\t\tthis.#unsubscribeFocus?.();\n\t\tthis.#unsubscribeFocus = void 0;\n\t\tthis.#unsubscribeOnline?.();\n\t\tthis.#unsubscribeOnline = void 0;\n\t}\n\t/**\n\t* Returns the number of queries in the cache that are currently fetching, optionally\n\t* matching a set of filters. This includes background-fetching, loading new pages, and\n\t* loading more infinite query results.\n\t*\n\t* @example\n\t* ```ts\n\t* if (queryClient.isFetching()) {\n\t* console.log('At least one query is fetching!')\n\t* }\n\t* ```\n\t*/\n\tisFetching(filters) {\n\t\treturn this.#queryCache.findAll({\n\t\t\t...filters,\n\t\t\tfetchStatus: \"fetching\"\n\t\t}).length;\n\t}\n\t/**\n\t* Returns the number of mutations in the cache that are currently pending, optionally\n\t* matching a set of filters.\n\t*\n\t* @example\n\t* ```ts\n\t* if (queryClient.isMutating()) {\n\t* console.log('At least one mutation is pending!')\n\t* }\n\t* ```\n\t*/\n\tisMutating(filters) {\n\t\treturn this.#mutationCache.findAll({\n\t\t\t...filters,\n\t\t\tstatus: \"pending\"\n\t\t}).length;\n\t}\n\t/**\n\t* Imperative (non-reactive) way to retrieve data for a QueryKey.\n\t* Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n\t*\n\t* Hint: Do not use this function inside a component, because it won't receive updates.\n\t* Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n\t*\n\t* @see {@link QueryClient#getQueriesData}\n\t*/\n\tgetQueryData(queryKey) {\n\t\tconst options = this.defaultQueryOptions({ queryKey });\n\t\treturn this.#queryCache.get(options.queryHash)?.state.data;\n\t}\n\t/**\n\t* @deprecated Use queryClient.query({ ...options, staleTime: 'static' }) instead. This method will be removed in the next major version.\n\t*/\n\tensureQueryData(options) {\n\t\tconst defaultedOptions = this.defaultQueryOptions(options);\n\t\tconst query = this.#queryCache.build(this, defaultedOptions);\n\t\tconst cachedData = query.state.data;\n\t\tif (cachedData === void 0) return this.fetchQuery(options);\n\t\tif (options.revalidateIfStale && query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime, query))) this.prefetchQuery(defaultedOptions);\n\t\treturn Promise.resolve(cachedData);\n\t}\n\t/**\n\t* Imperative (non-reactive) way to retrieve the cached data of multiple queries at once.\n\t* Only queries matching the given filters are returned; if none match, an empty array is\n\t* returned.\n\t*\n\t* Because the matched queries can hold data of different shapes (e.g. a broad filter can match\n\t* queries with unrelated data types), the `TQueryFnData` generic defaults to `unknown` rather\n\t* than being inferred. Passing a more specific type is a convenience for call sites that know\n\t* every matched query holds the same shape — it is not checked against the actual cache\n\t* contents.\n\t*\n\t* @see {@link QueryClient#getQueryData}\n\t* @example\n\t* ```ts\n\t* const data = queryClient.getQueriesData({ queryKey: ['posts'] })\n\t* ```\n\t*/\n\tgetQueriesData(filters) {\n\t\treturn this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n\t\t\treturn [queryKey, state.data];\n\t\t});\n\t}\n\t/**\n\t* Synchronous way to immediately update a query's cached data. If the updater (or the value\n\t* passed) resolves to `undefined`, the cache is left untouched and no query is created;\n\t* otherwise, if the query does not exist yet, it will be created. To update multiple queries\n\t* at once by partially matching query keys, use {@link QueryClient#setQueriesData} instead.\n\t*\n\t* Updates must be performed immutably: do not mutate `oldData`, or data previously retrieved\n\t* via {@link QueryClient#getQueryData}, in place.\n\t*\n\t* @param queryKey - The query key to set data for.\n\t* @param updater - Either the new data, or a function that receives the current data (which\n\t* may be `undefined`) and returns the new data.\n\t*\n\t* @example\n\t* ```ts\n\t* queryClient.setQueryData(['posts'], newPosts)\n\t*\n\t* // Or, using an updater function that receives the current data:\n\t* queryClient.setQueryData(['posts'], (oldPosts) => [...oldPosts, newPost])\n\t* ```\n\t*/\n\tsetQueryData(queryKey, updater, options) {\n\t\tconst defaultedOptions = this.defaultQueryOptions({ queryKey });\n\t\tconst prevData = this.#queryCache.get(defaultedOptions.queryHash)?.state.data;\n\t\tconst data = functionalUpdate(updater, prevData);\n\t\tif (data === void 0) return;\n\t\treturn this.#queryCache.build(this, defaultedOptions).setData(data, {\n\t\t\t...options,\n\t\t\tmanual: true\n\t\t});\n\t}\n\t/**\n\t* Synchronous way to immediately update the cached data of multiple queries at once, using\n\t* filters or partial query key matching. Only queries that already exist and match the given\n\t* filters are updated; no new cache entries are created. Internally this calls\n\t* {@link QueryClient#setQueryData} for each matching query.\n\t*\n\t* @example\n\t* ```ts\n\t* queryClient.setQueriesData({ queryKey: ['posts'] }, (oldPosts) =>\n\t* oldPosts ? oldPosts.filter((post) => post.id !== deletedId) : oldPosts,\n\t* )\n\t* ```\n\t*/\n\tsetQueriesData(filters, updater, options) {\n\t\treturn notifyManager.batch(() => this.#queryCache.findAll(filters).map(({ queryKey }) => [queryKey, this.setQueryData(queryKey, updater, options)]));\n\t}\n\t/**\n\t* Imperative (non-reactive) way to retrieve an existing query's state. If the query does not\n\t* exist, `undefined` is returned.\n\t*\n\t* @example\n\t* ```ts\n\t* const state = queryClient.getQueryState(['posts'])\n\t* console.log(state?.dataUpdatedAt)\n\t* ```\n\t*/\n\tgetQueryState(queryKey) {\n\t\tconst options = this.defaultQueryOptions({ queryKey });\n\t\treturn this.#queryCache.get(options.queryHash)?.state;\n\t}\n\t/**\n\t* Removes queries from the cache that match the given filters. Unlike\n\t* {@link QueryClient#invalidateQueries} or {@link QueryClient#refetchQueries}, this removes\n\t* matching queries from the cache instead of refetching them. Without filters, every query in\n\t* the cache is removed.\n\t*\n\t* @example\n\t* ```ts\n\t* queryClient.removeQueries({ queryKey: ['posts'], exact: true })\n\t* ```\n\t*/\n\tremoveQueries(filters) {\n\t\tconst queryCache = this.#queryCache;\n\t\tnotifyManager.batch(() => {\n\t\t\tqueryCache.findAll(filters).forEach((query) => {\n\t\t\t\tqueryCache.remove(query);\n\t\t\t});\n\t\t});\n\t}\n\t/**\n\t* Resets queries matching the given filters back to their initial state (e.g. any\n\t* `initialData`), notifying subscribers rather than removing them. Active queries among the\n\t* matched set are then refetched, and the returned promise resolves once that refetch settles.\n\t*\n\t* @example\n\t* ```ts\n\t* await queryClient.resetQueries({ queryKey: ['posts'], exact: true })\n\t* ```\n\t*/\n\tresetQueries(filters, options) {\n\t\tconst queryCache = this.#queryCache;\n\t\treturn notifyManager.batch(() => {\n\t\t\tconst matched = queryCache.findAll(filters);\n\t\t\tconst queriesToRefetch = new Set(matched);\n\t\t\tmatched.forEach((query) => {\n\t\t\t\tquery.reset();\n\t\t\t});\n\t\t\treturn this.refetchQueries({\n\t\t\t\ttype: \"active\",\n\t\t\t\tpredicate: (query) => queriesToRefetch.has(query)\n\t\t\t}, options);\n\t\t});\n\t}\n\t/**\n\t* Cancels outgoing fetches for queries matching the given filters. Most useful when performing\n\t* optimistic updates, since any outgoing refetch that resolves afterwards would otherwise\n\t* overwrite the optimistic update. By default (`revert: true`), a cancelled query's data is\n\t* reverted to its state before the outgoing fetch started.\n\t*\n\t* The returned promise never rejects, even if individual cancellations fail.\n\t*\n\t* @example\n\t* ```ts\n\t* await queryClient.cancelQueries({ queryKey: ['posts'], exact: true })\n\t* ```\n\t*/\n\tcancelQueries(filters, cancelOptions = {}) {\n\t\tconst defaultedCancelOptions = {\n\t\t\trevert: true,\n\t\t\t...cancelOptions\n\t\t};\n\t\tconst promises = notifyManager.batch(() => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions)));\n\t\treturn Promise.all(promises).then(noop).catch(noop);\n\t}\n\t/**\n\t* Marks queries matching the given filters as invalidated. Unlike\n\t* {@link QueryClient#removeQueries}, invalidated queries stay in the cache.\n\t*\n\t* Unless `filters.refetchType` is `'none'`, matching queries are then refetched via\n\t* {@link QueryClient#refetchQueries}, using `filters.refetchType` if set, otherwise\n\t* `filters.type`, otherwise `'active'`.\n\t*\n\t* @example\n\t* ```ts\n\t* await queryClient.invalidateQueries({ queryKey: ['posts'], refetchType: 'active' })\n\t* ```\n\t*/\n\tinvalidateQueries(filters, options = {}) {\n\t\treturn notifyManager.batch(() => {\n\t\t\tthis.#queryCache.findAll(filters).forEach((query) => {\n\t\t\t\tquery.invalidate();\n\t\t\t});\n\t\t\tif (filters?.refetchType === \"none\") return Promise.resolve();\n\t\t\treturn this.refetchQueries({\n\t\t\t\t...filters,\n\t\t\t\ttype: filters?.refetchType ?? filters?.type ?? \"active\"\n\t\t\t}, options);\n\t\t});\n\t}\n\t/**\n\t* Refetches queries matching the given filters, regardless of whether they are stale. Without\n\t* filters, every query in the cache is refetched. Queries that are disabled, or static (only\n\t* have observers with a static `staleTime`), are never refetched.\n\t*\n\t* By default (`cancelRefetch: true`), a currently running fetch is cancelled before the new\n\t* one starts. The returned promise resolves once all matching queries have settled; it does\n\t* not reject on individual query failures unless `throwOnError` is set.\n\t*\n\t* @example\n\t* ```ts\n\t* // refetch all active queries partially matching a query key:\n\t* await queryClient.refetchQueries({ queryKey: ['posts'], type: 'active' })\n\t* ```\n\t*/\n\trefetchQueries(filters, options = {}) {\n\t\tconst fetchOptions = {\n\t\t\t...options,\n\t\t\tcancelRefetch: options.cancelRefetch ?? true\n\t\t};\n\t\tconst promises = notifyManager.batch(() => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n\t\t\tlet promise = query.fetch(void 0, fetchOptions);\n\t\t\tif (!fetchOptions.throwOnError) promise = promise.catch(noop);\n\t\t\treturn query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n\t\t}));\n\t\treturn Promise.all(promises).then(noop);\n\t}\n\t/**\n\t* Asynchronous method to fetch and cache a query, resolving with the data or throwing with\n\t* the error.\n\t*\n\t* If the query already exists in the cache and its data is not stale (per the given\n\t* `staleTime`), the cached data is returned without fetching. Otherwise, the query is fetched\n\t* and the promise resolves once the fetch settles. If a `select` function is provided, it is\n\t* applied to the data in both cases (cached or freshly fetched) before it is returned.\n\t*\n\t* Unlike a reactive observer, retries are disabled by default here (`retry: false`) unless\n\t* explicitly configured, since there is no component to catch a thrown error and retry through\n\t* re-render.\n\t*\n\t* The accepted options are `QueryObserverOptions` minus the fields that only make sense for a\n\t* reactive observer — `enabled`, `refetchInterval`, `refetchIntervalInBackground`,\n\t* `refetchOnWindowFocus`, `refetchOnReconnect`, `refetchOnMount`, `retryOnMount`,\n\t* `notifyOnChangeProps`, `throwOnError`, `suspense`, and `placeholderData` are not part of this\n\t* method's options.\n\t*\n\t* This method replaces the deprecated `fetchQuery`, and — combined with\n\t* `{ staleTime: 'static' }` — the deprecated `ensureQueryData`.\n\t*\n\t* @example\n\t* ```ts\n\t* try {\n\t* const data = await queryClient.query({ queryKey, queryFn, staleTime: 10000 })\n\t* } catch (error) {\n\t* console.log(error)\n\t* }\n\t* ```\n\t*/\n\tasync query(options) {\n\t\tconst defaultedOptions = this.defaultQueryOptions(options);\n\t\tif (defaultedOptions.retry === void 0) defaultedOptions.retry = false;\n\t\tconst query = this.#queryCache.build(this, defaultedOptions);\n\t\tconst queryData = query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime, query)) ? await query.fetch(defaultedOptions) : query.state.data;\n\t\tconst select = defaultedOptions.select;\n\t\tif (select) return select(queryData);\n\t\treturn queryData;\n\t}\n\t/**\n\t* @deprecated Use queryClient.query(options) instead. This method will be removed in the next major version.\n\t*/\n\tfetchQuery(options) {\n\t\tconst defaultedOptions = this.defaultQueryOptions(options);\n\t\tif (defaultedOptions.retry === void 0) defaultedOptions.retry = false;\n\t\tconst query = this.#queryCache.build(this, defaultedOptions);\n\t\treturn query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime, query)) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n\t}\n\t/**\n\t* @deprecated Use queryClient.query(options) instead. You can swallow errors with `.catch(noop)`. This method will be removed in the next major version.\n\t*/\n\tprefetchQuery(options) {\n\t\treturn this.fetchQuery(options).then(noop).catch(noop);\n\t}\n\t/**\n\t* Asynchronous method to fetch and cache an infinite query, resolving with an\n\t* {@link InfiniteData} object or throwing with the error.\n\t*\n\t* Behaves like {@link QueryClient#query}, accepting the same options (minus\n\t* `initialPageParam`), plus the required `initialPageParam`, and an optional `pages` /\n\t* `getNextPageParam` pair used to refetch a fixed number of pages from the start.\n\t*\n\t* This method replaces the deprecated `fetchInfiniteQuery`, and — combined with\n\t* `{ staleTime: 'static' }` — the deprecated `ensureInfiniteQueryData`.\n\t*\n\t* @example\n\t* ```ts\n\t* try {\n\t* const data = await queryClient.infiniteQuery({ queryKey, queryFn, initialPageParam: 0 })\n\t* console.log(data.pages)\n\t* } catch (error) {\n\t* console.log(error)\n\t* }\n\t* ```\n\t*/\n\tinfiniteQuery(options) {\n\t\toptions._type = \"infinite\";\n\t\treturn this.query(options);\n\t}\n\t/**\n\t* @deprecated Use queryClient.infiniteQuery(options) instead. This method will be removed in the next major version.\n\t*/\n\tfetchInfiniteQuery(options) {\n\t\toptions._type = \"infinite\";\n\t\treturn this.fetchQuery(options);\n\t}\n\t/**\n\t* @deprecated Use queryClient.infiniteQuery(options) instead. You can swallow errors with `.catch(noop)`. This method will be removed in the next major version.\n\t*/\n\tprefetchInfiniteQuery(options) {\n\t\treturn this.fetchInfiniteQuery(options).then(noop).catch(noop);\n\t}\n\t/**\n\t* @deprecated Use queryClient.infiniteQuery({ ...options, staleTime: 'static' }) instead. This method will be removed in the next major version.\n\t*/\n\tensureInfiniteQueryData(options) {\n\t\toptions._type = \"infinite\";\n\t\treturn this.ensureQueryData(options);\n\t}\n\t/**\n\t* Resumes mutations that were paused because there was no network connection. Does nothing\n\t* (resolving immediately) if the client is currently offline.\n\t*\n\t* @example\n\t* ```ts\n\t* import { QueryClient } from '@tanstack/query-core'\n\t*\n\t* const queryClient = new QueryClient()\n\t* await queryClient.resumePausedMutations()\n\t* ```\n\t*/\n\tresumePausedMutations() {\n\t\tif (onlineManager.isOnline()) return this.#mutationCache.resumePausedMutations();\n\t\treturn Promise.resolve();\n\t}\n\t/**\n\t* Returns the query cache this client is connected to.\n\t*\n\t* @example\n\t* ```ts\n\t* import { QueryClient } from '@tanstack/query-core'\n\t*\n\t* const queryClient = new QueryClient()\n\t* const queryCache = queryClient.getQueryCache()\n\t* const queries = queryCache.findAll({ queryKey: ['posts'] })\n\t* ```\n\t*/\n\tgetQueryCache() {\n\t\treturn this.#queryCache;\n\t}\n\t/**\n\t* Returns the mutation cache this client is connected to.\n\t*\n\t* @example\n\t* ```ts\n\t* import { QueryClient } from '@tanstack/query-core'\n\t*\n\t* const queryClient = new QueryClient()\n\t* const mutationCache = queryClient.getMutationCache()\n\t* const mutations = mutationCache.findAll({ status: 'pending' })\n\t* ```\n\t*/\n\tgetMutationCache() {\n\t\treturn this.#mutationCache;\n\t}\n\t/**\n\t* Returns the default options that were set when creating the client, or via\n\t* {@link QueryClient#setDefaultOptions}.\n\t*\n\t* @example\n\t* ```ts\n\t* import { QueryClient } from '@tanstack/query-core'\n\t*\n\t* const queryClient = new QueryClient()\n\t* const defaultOptions = queryClient.getDefaultOptions()\n\t* ```\n\t*/\n\tgetDefaultOptions() {\n\t\treturn this.#defaultOptions;\n\t}\n\t/**\n\t* Dynamically sets the default options for this client, overwriting any previously defined\n\t* default options.\n\t*\n\t* @see {@link QueryClient#getDefaultOptions}\n\t* @example\n\t* ```ts\n\t* import { QueryClient } from '@tanstack/query-core'\n\t*\n\t* const queryClient = new QueryClient()\n\t* queryClient.setDefaultOptions({\n\t* queries: {\n\t* staleTime: Infinity,\n\t* },\n\t* })\n\t* ```\n\t*/\n\tsetDefaultOptions(options) {\n\t\tthis.#defaultOptions = options;\n\t}\n\t/**\n\t* Sets default options for queries whose query key partially matches the given `queryKey`.\n\t*\n\t* If several registered query defaults match a given query key, they are merged together in\n\t* registration order by {@link QueryClient#getQueryDefaults}, so register defaults from the\n\t* most generic key to the least generic one — more specific defaults should be registered\n\t* after more generic ones so they take precedence.\n\t*\n\t* @example\n\t* ```ts\n\t* queryClient.setQueryDefaults(['posts'], { queryFn: fetchPosts })\n\t*\n\t* await queryClient.query({ queryKey: ['posts'] })\n\t* ```\n\t*/\n\tsetQueryDefaults(queryKey, options) {\n\t\tthis.#queryDefaults.set(hashKey(queryKey), {\n\t\t\tqueryKey,\n\t\t\tdefaultOptions: options\n\t\t});\n\t}\n\t/**\n\t* Returns the default options registered for queries whose query key partially matches the\n\t* given `queryKey`, via {@link QueryClient#setQueryDefaults}. If multiple registered defaults\n\t* match, they are merged together in registration order.\n\t*\n\t* @example\n\t* ```ts\n\t* const defaultOptions = queryClient.getQueryDefaults(['posts'])\n\t* ```\n\t*/\n\tgetQueryDefaults(queryKey) {\n\t\tconst defaults = [...this.#queryDefaults.values()];\n\t\tconst result = {};\n\t\tdefaults.forEach((queryDefault) => {\n\t\t\tif (partialMatchKey(queryKey, queryDefault.queryKey)) Object.assign(result, queryDefault.defaultOptions);\n\t\t});\n\t\treturn result;\n\t}\n\t/**\n\t* Sets default options for mutations whose mutation key partially matches the given\n\t* `mutationKey`. As with {@link QueryClient#setQueryDefaults}, the order of registration\n\t* matters when several registered defaults match the same mutation key.\n\t*\n\t* @see {@link QueryClient#getMutationDefaults}\n\t* @example\n\t* ```ts\n\t* queryClient.setMutationDefaults(['addPost'], { mutationFn: addPost })\n\t* ```\n\t*/\n\tsetMutationDefaults(mutationKey, options) {\n\t\tthis.#mutationDefaults.set(hashKey(mutationKey), {\n\t\t\tmutationKey,\n\t\t\tdefaultOptions: options\n\t\t});\n\t}\n\t/**\n\t* Returns the default options registered for mutations whose mutation key partially matches\n\t* the given `mutationKey`, via {@link QueryClient#setMutationDefaults}. If multiple registered\n\t* defaults match, they are merged together in registration order.\n\t*\n\t* @example\n\t* ```ts\n\t* const defaultOptions = queryClient.getMutationDefaults(['addPost'])\n\t* ```\n\t*/\n\tgetMutationDefaults(mutationKey) {\n\t\tconst defaults = [...this.#mutationDefaults.values()];\n\t\tconst result = {};\n\t\tdefaults.forEach((queryDefault) => {\n\t\t\tif (partialMatchKey(mutationKey, queryDefault.mutationKey)) Object.assign(result, queryDefault.defaultOptions);\n\t\t});\n\t\treturn result;\n\t}\n\t/**\n\t* Called by framework adapters (e.g. inside `useQuery`) to resolve the options passed by the\n\t* caller into their final, defaulted form: merging `queryClient.setQueryDefaults` for the\n\t* given `queryKey`, then the client's own `defaultOptions.queries`, then the caller's options\n\t* on top. A no-op if the options are already defaulted (`_defaulted: true`).\n\t*/\n\tdefaultQueryOptions(options) {\n\t\tif (options._defaulted) return options;\n\t\tconst defaultedOptions = {\n\t\t\t...this.#defaultOptions.queries,\n\t\t\t...this.getQueryDefaults(options.queryKey),\n\t\t\t...options,\n\t\t\t_defaulted: true\n\t\t};\n\t\tif (!defaultedOptions.queryHash) defaultedOptions.queryHash = hashQueryKeyByOptions(defaultedOptions.queryKey, defaultedOptions);\n\t\tif (defaultedOptions.refetchOnReconnect === void 0) defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n\t\tif (defaultedOptions.throwOnError === void 0) defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n\t\tif (!defaultedOptions.networkMode && defaultedOptions.persister) defaultedOptions.networkMode = \"offlineFirst\";\n\t\tif (defaultedOptions.queryFn === skipToken) defaultedOptions.enabled = false;\n\t\treturn defaultedOptions;\n\t}\n\t/**\n\t* The mutation counterpart of {@link QueryClient#defaultQueryOptions}. Called by framework\n\t* adapters (e.g. inside `useMutation`) to merge `queryClient.setMutationDefaults` for the\n\t* given `mutationKey`, then the client's `defaultOptions.mutations`, then the caller's options\n\t* on top. A no-op if the options are already defaulted (`_defaulted: true`).\n\t*/\n\tdefaultMutationOptions(options) {\n\t\tif (options?._defaulted) return options;\n\t\treturn {\n\t\t\t...this.#defaultOptions.mutations,\n\t\t\t...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n\t\t\t...options,\n\t\t\t_defaulted: true\n\t\t};\n\t}\n\t/**\n\t* Clears both the query cache and the mutation cache this client is connected to.\n\t*\n\t* @example\n\t* ```ts\n\t* import { QueryClient } from '@tanstack/query-core'\n\t*\n\t* const queryClient = new QueryClient()\n\t* queryClient.clear()\n\t* ```\n\t*/\n\tclear() {\n\t\tthis.#queryCache.clear();\n\t\tthis.#mutationCache.clear();\n\t}\n};\n//#endregion\nexport { QueryClient };\n\n//# sourceMappingURL=queryClient.js.map",
41
+ "\"use client\";\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\n//#region src/errorBoundaryUtils.ts\nconst ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n\tconst throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n\tif (options.suspense || throwOnError) {\n\t\tif (!errorResetBoundary.isReset()) options.retryOnMount = false;\n\t}\n};\nconst useClearResetErrorBoundary = (errorResetBoundary) => {\n\tReact.useEffect(() => {\n\t\terrorResetBoundary.clearReset();\n\t}, [errorResetBoundary]);\n};\nconst getHasError = ({ result, errorResetBoundary, throwOnError, query, suspense }) => {\n\treturn result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\n//#endregion\nexport { ensurePreventErrorBoundaryRetry, getHasError, useClearResetErrorBoundary };\n\n//# sourceMappingURL=errorBoundaryUtils.js.map",
42
+ "//#region src/suspense.ts\nconst defaultThrowOnError = (_error, query) => query.state.data === void 0;\nconst ensureSuspenseTimers = (defaultedOptions) => {\n\tif (defaultedOptions.suspense) {\n\t\tconst MIN_SUSPENSE_TIME_MS = 1e3;\n\t\tconst clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n\t\tconst originalStaleTime = defaultedOptions.staleTime;\n\t\tdefaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n\t\tif (typeof defaultedOptions.gcTime === \"number\") defaultedOptions.gcTime = Math.max(defaultedOptions.gcTime, MIN_SUSPENSE_TIME_MS);\n\t}\n};\nconst shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nconst fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n\terrorResetBoundary.clearReset();\n});\n//#endregion\nexport { defaultThrowOnError, ensureSuspenseTimers, fetchOptimistic, shouldSuspend };\n\n//# sourceMappingURL=suspense.js.map",
43
+ "\"use client\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport { ensurePreventErrorBoundaryRetry, getHasError, useClearResetErrorBoundary } from \"./errorBoundaryUtils.js\";\nimport { ensureSuspenseTimers, fetchOptimistic, shouldSuspend } from \"./suspense.js\";\nimport * as React from \"react\";\nimport { noop, notifyManager } from \"@tanstack/query-core\";\n//#region src/useBaseQuery.ts\nfunction useBaseQuery(options, Observer, queryClient) {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (typeof options !== \"object\" || Array.isArray(options)) throw new Error(\"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\t}\n\tconst isRestoring = useIsRestoring();\n\tconst errorResetBoundary = useQueryErrorResetBoundary();\n\tconst client = useQueryClient(queryClient);\n\tconst defaultedOptions = client.defaultQueryOptions(options);\n\tconst query = client.getQueryCache().get(defaultedOptions.queryHash);\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tif (!defaultedOptions.queryFn) console.error(`[${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\t}\n\tconst subscribed = options.subscribed !== false;\n\tdefaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : subscribed ? \"optimistic\" : void 0;\n\tensureSuspenseTimers(defaultedOptions);\n\tensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n\tuseClearResetErrorBoundary(errorResetBoundary);\n\tconst [observer] = React.useState(() => new Observer(client, defaultedOptions));\n\tconst result = observer.getOptimisticResult(defaultedOptions);\n\tconst shouldSubscribe = !isRestoring && subscribed;\n\tReact.useSyncExternalStore(React.useCallback((onStoreChange) => {\n\t\tconst unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n\t\tobserver.updateResult();\n\t\treturn unsubscribe;\n\t}, [observer, shouldSubscribe]), () => observer.getCurrentResult(), () => observer.getCurrentResult());\n\tReact.useEffect(() => {\n\t\tobserver.setOptions(defaultedOptions);\n\t}, [defaultedOptions, observer]);\n\tif (shouldSuspend(defaultedOptions, result)) throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n\tif (getHasError({\n\t\tresult,\n\t\terrorResetBoundary,\n\t\tthrowOnError: defaultedOptions.throwOnError,\n\t\tquery,\n\t\tsuspense: defaultedOptions.suspense\n\t})) throw result.error;\n\treturn !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\n//#endregion\nexport { useBaseQuery };\n\n//# sourceMappingURL=useBaseQuery.js.map",
44
+ "\"use client\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nimport { QueryObserver } from \"@tanstack/query-core\";\n//#region src/useQuery.ts\nfunction useQuery(options, queryClient) {\n\treturn useBaseQuery(options, QueryObserver, queryClient);\n}\n//#endregion\nexport { useQuery };\n\n//# sourceMappingURL=useQuery.js.map",
45
+ "import type { PermissionsTarget } from \"./client\";\n\n/**\n * TanStack Query keys. They mirror the routes, so a mutation can invalidate\n * the narrowest prefix: everything about one queue is under\n * `[\"queue\", name]`, every list of queues under `[\"queues\"]`.\n */\nexport const queryKeys = {\n /** Everything read from `/meta*`. */\n metaAll: [\"meta\"] as const,\n /** `GET /meta`. */\n meta: () => [\"meta\", \"info\"] as const,\n /** `GET /meta/permissions`, per target. */\n permissions: (target: PermissionsTarget = {}) =>\n [\n \"meta\",\n \"permissions\",\n { queue: target.queue ?? null, runner: target.runner ?? null },\n ] as const,\n /** Every `GET /overview` read, whatever window it covers: what an invalidation targets. */\n overviewAll: [\"overview\"] as const,\n /** `GET /overview`. */\n overview: (minutes?: number) =>\n [\"overview\", { minutes: minutes ?? null }] as const,\n /** Every `GET /queues` list. */\n queuesAll: [\"queues\"] as const,\n /** `GET /queues?search=`. */\n queues: (search?: string) => [\"queues\", { search: search || null }] as const,\n /** Everything about one queue. */\n queue: (queue: string) => [\"queue\", queue] as const,\n /** `GET /queues/:queue/throughput`. */\n queueThroughput: (queue: string, minutes?: number) =>\n [\"queue\", queue, \"throughput\", { minutes: minutes ?? null }] as const,\n /** `GET /workers`. */\n workers: () => [\"workers\"] as const,\n};\n",
46
+ "import { QueryClient } from \"@tanstack/react-query\";\nimport { isApiError } from \"./api/errors\";\nimport { queryKeys } from \"./api/queryKeys\";\n\n/** How often screens poll until the live socket lands (milestone 4). */\nexport const POLL_INTERVAL_MS = 5_000;\n\n/** Most retries of a failed read. */\nconst MAX_RETRIES = 2;\n\n/**\n * Retries network failures and 5xx, never a 4xx: a 401/403/404/400 will not\n * change by asking again, and retrying a 401 delays the sign-in message.\n * Nor a malformed response (kind `parse`: a 2xx that was not JSON, or not\n * the shape a detail read needs, `UNEXPECTED_RESPONSE`): the host answered,\n * and answering the same again would only hold the error back for the\n * retries' ~3 s of backoff.\n */\nexport function shouldRetry(failureCount: number, error: unknown): boolean {\n if (\n isApiError(error) &&\n (error.kind === \"parse\" || (error.status >= 400 && error.status < 500))\n ) {\n return false;\n }\n return failureCount < MAX_RETRIES;\n}\n\n/** Options of {@link createQueryClient}. */\nexport interface CreateQueryClientOptions {\n /** Retry failed reads (see {@link shouldRetry}). Defaults to `true`; tests pass `false`. */\n retry?: boolean;\n}\n\n/** The app's TanStack Query client. */\nexport function createQueryClient(\n options: CreateQueryClientOptions = {},\n): QueryClient {\n return new QueryClient({\n defaultOptions: {\n queries: {\n retry: options.retry === false ? false : shouldRetry,\n staleTime: 2_000,\n refetchOnWindowFocus: true,\n },\n mutations: { retry: false },\n },\n });\n}\n\n/**\n * Before \"Reload this screen\" (`ScreenErrorBoundary`) remounts a crashed\n * screen, drops the cached answers the screen read, so it reads them again:\n * a crash caused by the DATA would otherwise render the same cached answer\n * and crash again at once.\n *\n * Only inactive queries are reset, and never `/meta*`. The crashed screen's\n * queries are inactive by then (the screen is unmounted), so they come back\n * empty and refetch as the screen remounts; the frame's live queries (header,\n * nav, status) keep their data and are not re-requested; and the bootstrap\n * (`/meta`, `/meta/permissions`) is kept, since re-reading it would flash\n * the whole app.\n */\nexport function resetScreenQueries(queryClient: QueryClient): Promise<void> {\n return queryClient.resetQueries({\n type: \"inactive\",\n predicate: (query) => query.queryKey[0] !== queryKeys.metaAll[0],\n });\n}\n",
47
+ "import type { ButtonHTMLAttributes, Ref } from \"react\";\nimport { cx } from \"./classNames\";\n\n/** Visual weight of a {@link Button}. */\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\n\n/** Props of {@link Button}. */\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual weight. Defaults to `\"secondary\"`. */\n variant?: ButtonVariant;\n /** Size. Defaults to `\"md\"`. */\n size?: \"sm\" | \"md\";\n /** The underlying `<button>`, e.g. for a dialog's initial focus. */\n ref?: Ref<HTMLButtonElement>;\n}\n\n/** A button; `type=\"button\"` unless told otherwise, so it never submits a form by accident. */\nexport function Button({\n variant = \"secondary\",\n size = \"md\",\n type = \"button\",\n className,\n ...rest\n}: ButtonProps) {\n return (\n <button\n {...rest}\n type={type}\n className={cx(\n \"btn\",\n `btn-${variant}`,\n size === \"sm\" && \"btn-sm\",\n className,\n )}\n />\n );\n}\n",
48
+ "import type { QueryClient } from \"@tanstack/react-query\";\nimport type { ErrorInfo, ReactNode } from \"react\";\nimport { QueryClientContext } from \"@tanstack/react-query\";\nimport { Component } from \"react\";\nimport { resetScreenQueries } from \"../queryClient\";\nimport { Button } from \"./Button\";\n\n/** Props of {@link ScreenErrorBoundary}. */\nexport interface ScreenErrorBoundaryProps {\n /** The screen. */\n children: ReactNode;\n /** When this changes (the location), a failed screen is tried again: navigating away from a crash recovers without a click. */\n resetKey?: string;\n /** Called with each crash, e.g. to log it. Defaults to nothing (React already reports it in development). */\n onError?: (error: unknown, info: ErrorInfo) => void;\n}\n\n/** State of {@link ScreenErrorBoundary}. */\ninterface ScreenErrorBoundaryState {\n /** What the screen threw while rendering, or `null` while it renders fine. */\n error: unknown;\n /** Whether {@link ScreenErrorBoundaryState.error} is set (an error may be any value, `null` included). */\n failed: boolean;\n /** Bumped by \"Reload this screen\", remounting the screen with fresh state. */\n attempt: number;\n /** The `resetKey` the failure happened under. */\n failedKey: string | undefined;\n}\n\n/**\n * Catches a routed screen's render crash so the app around it survives: the\n * header, nav and live status stay, and the screen's place shows what\n * failed with a \"Reload this screen\" button that mounts it afresh and\n * re-reads its data: the cached answers it read are reset first (see\n * {@link resetScreenQueries}; `/meta` and the permissions are kept), so a\n * crash caused by a bad answer recovers once the host answers well. A lazy\n * screen whose chunk failed to load is retried the same way (see\n * `screens/lazy.tsx`).\n *\n * The app's queries do not throw into it (no `throwOnError`, no suspense\n * queries: a failed read renders the screen's own error view), so there is\n * no `QueryErrorResetBoundary` to reset.\n */\nexport class ScreenErrorBoundary extends Component<\n ScreenErrorBoundaryProps,\n ScreenErrorBoundaryState\n> {\n static override contextType = QueryClientContext;\n\n /** The app's query client, when a `QueryClientProvider` is above (none in some tests). */\n declare context: QueryClient | undefined;\n\n override state: ScreenErrorBoundaryState = {\n error: null,\n failed: false,\n attempt: 0,\n failedKey: undefined,\n };\n\n static getDerivedStateFromError(\n error: unknown,\n ): Partial<ScreenErrorBoundaryState> {\n return { error, failed: true };\n }\n\n static getDerivedStateFromProps(\n props: ScreenErrorBoundaryProps,\n state: ScreenErrorBoundaryState,\n ): Partial<ScreenErrorBoundaryState> | null {\n // Remember where it failed; a new location clears the failure.\n if (state.failed && state.failedKey === undefined) {\n return { failedKey: props.resetKey ?? \"\" };\n }\n if (state.failed && state.failedKey !== (props.resetKey ?? \"\")) {\n return {\n error: null,\n failed: false,\n failedKey: undefined,\n attempt: state.attempt + 1,\n };\n }\n return null;\n }\n\n override componentDidCatch(error: unknown, info: ErrorInfo): void {\n this.props.onError?.(error, info);\n }\n\n /** Resets the screen's cached answers, then mounts it again. */\n private readonly reload = () => {\n if (this.context) {\n void resetScreenQueries(this.context);\n }\n this.setState((state) => ({\n error: null,\n failed: false,\n failedKey: undefined,\n attempt: state.attempt + 1,\n }));\n };\n\n override render(): ReactNode {\n const { error, failed, attempt } = this.state;\n if (!failed) {\n return <ScreenAttempt key={attempt}>{this.props.children}</ScreenAttempt>;\n }\n const message =\n error instanceof Error ? error.message : String(error ?? \"Unknown error\");\n return (\n <div\n className=\"screen screen-error\"\n data-testid=\"screen-error\"\n >\n <div\n className=\"error-view\"\n role=\"alert\"\n >\n <h1 className=\"error-view-title\">This screen failed to show</h1>\n <p className=\"error-view-detail\">\n Something went wrong while drawing it. The rest of the app still\n works: reload the screen, or pick another one.\n </p>\n <p className=\"error-view-meta\">\n <code>{message}</code>\n </p>\n <Button\n variant=\"primary\"\n onClick={this.reload}\n >\n Reload this screen\n </Button>\n </div>\n </div>\n );\n }\n}\n\n/** A keyed wrapper: a new key remounts the screen with fresh state. */\nfunction ScreenAttempt({ children }: { children: ReactNode }) {\n return <>{children}</>;\n}\n",
49
+ "import type { ReactNode } from \"react\";\nimport { createContext, use, useCallback, useMemo } from \"react\";\n\n/**\n * A small history router scoped under the mount's `basePath`.\n *\n * The app's routes are flat and few, so this replaces a router library: it\n * tracks `location.pathname`/`search` relative to `basePath`, intercepts\n * plain left-clicks on its {@link Link}s, matches `:param` and trailing `*`\n * patterns, and keeps URL-addressable state in the query string. A path\n * outside `basePath` matches nothing and renders the 404.\n */\n\n/** Where the app is, relative to `basePath`. */\nexport interface AppLocation {\n /** Path under `basePath`, always starting with `/`; `null` when the URL is outside `basePath`. */\n path: string | null;\n /** The query string, with its leading `?` (or `\"\"`). */\n search: string;\n}\n\n/** Options of a navigation. */\nexport interface NavigateOptions {\n /** Replace the current history entry instead of pushing one. Defaults to `false`. */\n replace?: boolean;\n}\n\n/** What the router provides. */\nexport interface RouterContextValue {\n /** The mount path, no trailing slash (`\"\"` when mounted at the root). */\n basePath: string;\n /** The current location. */\n location: AppLocation;\n /** Navigates to an app path (relative to `basePath`, may carry `?query`). */\n navigate: (to: string, options?: NavigateOptions) => void;\n /** The full URL path for an app path. */\n href: (to: string) => string;\n}\n\n/** Carries the router. */\nexport const RouterContext = createContext<RouterContextValue | null>(null);\n/** Carries the params the matched route bound. */\nexport const ParamsContext = createContext<Readonly<Record<string, string>>>(\n {},\n);\n\n/** Normalises a base path: leading `/`, no trailing `/`, `/` itself becomes `\"\"`. */\nexport function normalizeBasePath(basePath: string): string {\n const trimmed = basePath.replace(/\\/+$/, \"\");\n if (trimmed === \"\") {\n return \"\";\n }\n return trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n}\n\n/**\n * The path under `basePath`, or `null` when `pathname` is outside it.\n * `/jobs` and `/jobs/` are both `/`; `/jobsx` is outside `/jobs`.\n */\nexport function stripBasePath(\n pathname: string,\n basePath: string,\n): string | null {\n const base = normalizeBasePath(basePath);\n if (base !== \"\" && pathname !== base && !pathname.startsWith(`${base}/`)) {\n return null;\n }\n const rest = pathname.slice(base.length);\n if (rest === \"\" || rest === \"/\") {\n return \"/\";\n }\n return rest.length > 1 && rest.endsWith(\"/\") ? rest.slice(0, -1) : rest;\n}\n\n/**\n * Matches an app path against a pattern: `/queues/:queue` binds `queue`\n * (percent-decoded), a trailing `/*` binds the rest as `*`. Returns the\n * params, or `null` when it does not match.\n */\nexport function matchPath(\n pattern: string,\n path: string,\n): Record<string, string> | null {\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const pathParts = path.split(\"/\").filter(Boolean);\n const params: Record<string, string> = {};\n for (let index = 0; index < patternParts.length; index++) {\n const part = patternParts[index];\n if (part === \"*\" && index === patternParts.length - 1) {\n params[\"*\"] = pathParts.slice(index).map(safeDecode).join(\"/\");\n return params;\n }\n const actual = pathParts[index];\n if (actual === undefined) {\n return null;\n }\n if (part.startsWith(\":\")) {\n params[part.slice(1)] = safeDecode(actual);\n } else if (part !== actual) {\n return null;\n }\n }\n return pathParts.length === patternParts.length ? params : null;\n}\n\n/** `decodeURIComponent`, keeping a malformed segment as it is. */\nfunction safeDecode(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\n/** Reads the current location from `window.location`. */\nexport function readLocation(basePath: string): AppLocation {\n return {\n path: stripBasePath(window.location.pathname, basePath),\n search: window.location.search,\n };\n}\n\n/** The router, or a clear error outside a {@link RouterProvider}. */\nexport function useRouter(): RouterContextValue {\n const router = use(RouterContext);\n if (!router) {\n throw new Error(\"useRouter must be used inside a <RouterProvider>\");\n }\n return router;\n}\n\n/** The current location. */\nexport function useLocation(): AppLocation {\n return useRouter().location;\n}\n\n/** A function that navigates to an app path. */\nexport function useNavigate(): RouterContextValue[\"navigate\"] {\n return useRouter().navigate;\n}\n\n/** A function that turns an app path into a full URL path. */\nexport function useHref(): RouterContextValue[\"href\"] {\n return useRouter().href;\n}\n\n/** The params the matched route bound. */\nexport function useParams<\n T extends Record<string, string> = Record<string, string>,\n>(): Readonly<T> {\n return use(ParamsContext) as Readonly<T>;\n}\n\n/** The current query string, parsed. */\nexport function useSearchParams(): URLSearchParams {\n const { search } = useLocation();\n return useMemo(() => new URLSearchParams(search), [search]);\n}\n\n/**\n * One query-string value as state: `[value, setValue]`. Setting `\"\"` or\n * `null` removes the key. Updates replace the history entry, so typing in a\n * filter does not flood the back button.\n */\nexport function useQueryParam(\n key: string,\n): [string, (value: string | null) => void] {\n const { location, navigate } = useRouter();\n const value = new URLSearchParams(location.search).get(key) ?? \"\";\n const setValue = useCallback(\n (next: string | null) => {\n const params = new URLSearchParams(window.location.search);\n if (next === null || next === \"\") {\n params.delete(key);\n } else {\n params.set(key, next);\n }\n const query = params.toString();\n navigate(`${location.path ?? \"/\"}${query ? `?${query}` : \"\"}`, {\n replace: true,\n });\n },\n [key, location.path, navigate],\n );\n return [value, setValue];\n}\n\n/** One route: a pattern and what it renders. */\nexport interface RouteDef {\n /** Pattern relative to `basePath`: `/`, `/queues/:queue`, `/docs/*`. */\n path: string;\n /** What the route renders; params are available through {@link useParams}. */\n element: ReactNode;\n}\n",
50
+ "import type { AnchorHTMLAttributes, MouseEvent, ReactNode } from \"react\";\nimport type { NavigateOptions, RouteDef } from \"./routing\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useUnauthorizedRedirect } from \"@kingsleyweb/bun-ui/docs/embed/unauthorized\";\nimport { ScreenErrorBoundary } from \"./components/ScreenErrorBoundary\";\nimport {\n matchPath,\n normalizeBasePath,\n ParamsContext,\n readLocation,\n RouterContext,\n useLocation,\n useNavigate,\n useRouter,\n} from \"./routing\";\n\n/**\n * The router's components: the provider, route matching, redirects and\n * links. The pure path functions and the hooks live in `routing.ts`.\n */\n\n/** Props of {@link RouterProvider}. */\nexport interface RouterProviderProps {\n /** The mount path (`JobsUiConfig.basePath`). */\n basePath: string;\n /** The app. */\n children: ReactNode;\n}\n\n/** Provides routing under `basePath`, following `window.history`. */\nexport function RouterProvider({ basePath, children }: RouterProviderProps) {\n const base = normalizeBasePath(basePath);\n const [location, setLocation] = useState(() => readLocation(base));\n\n useEffect(() => {\n const onPopState = () => setLocation(readLocation(base));\n window.addEventListener(\"popstate\", onPopState);\n return () => window.removeEventListener(\"popstate\", onPopState);\n }, [base]);\n\n const href = useCallback(\n (to: string) => {\n const target = to.startsWith(\"/\") ? to : `/${to}`;\n if (base === \"\") {\n return target;\n }\n // `/` is the mount itself; keep the query attached without a slash.\n return target === \"/\" || target.startsWith(\"/?\")\n ? `${base}${target.slice(1)}`\n : `${base}${target}`;\n },\n [base],\n );\n\n const navigate = useCallback(\n (to: string, options: NavigateOptions = {}) => {\n const url = href(to);\n if (options.replace) {\n window.history.replaceState(null, \"\", url);\n } else {\n window.history.pushState(null, \"\", url);\n }\n setLocation(readLocation(base));\n },\n [base, href],\n );\n\n const value = useMemo(\n () => ({ basePath: base, location, navigate, href }),\n [base, location, navigate, href],\n );\n return <RouterContext value={value}>{children}</RouterContext>;\n}\n\n/** Props of {@link Routes}. */\nexport interface RoutesProps {\n /** Routes, tried in order; the first match wins. */\n routes: readonly RouteDef[];\n /** Rendered when nothing matches (including a URL outside `basePath`). */\n notFound: ReactNode;\n}\n\n/**\n * Renders the first route matching the current location, inside a\n * {@link ScreenErrorBoundary}: a screen that crashes while rendering shows a\n * recoverable panel in its place instead of blanking the app, and moving to\n * another location tries again. With `unauthorized`, a crash also asks the\n * server whether the page may still be loaded (`UnauthorizedRedirect.probe`): a\n * screen's chunk refused by the shell's `authorize` crashes it with no\n * status to read.\n */\nexport function Routes({ routes, notFound }: RoutesProps) {\n const { path } = useLocation();\n const unauthorized = useUnauthorizedRedirect();\n return (\n <ScreenErrorBoundary\n resetKey={path ?? \"\"}\n onError={\n unauthorized.enabled ? () => void unauthorized.probe() : undefined\n }\n >\n <MatchedRoute\n routes={routes}\n notFound={notFound}\n path={path}\n />\n </ScreenErrorBoundary>\n );\n}\n\n/** The first route matching `path`, or `notFound`. */\nfunction MatchedRoute({\n routes,\n notFound,\n path,\n}: RoutesProps & { path: string | null }) {\n if (path !== null) {\n for (const route of routes) {\n const params = matchPath(route.path, path);\n if (params) {\n return (\n <ParamsContext\n key={route.path}\n value={params}\n >\n {route.element}\n </ParamsContext>\n );\n }\n }\n }\n return <>{notFound}</>;\n}\n\n/** Props of {@link Navigate}. */\nexport interface NavigateProps {\n /** App path to go to. */\n to: string;\n /** Replace the history entry. Defaults to `true`: a redirect should not be a back-button stop. */\n replace?: boolean;\n}\n\n/** Redirects on render. */\nexport function Navigate({ to, replace = true }: NavigateProps) {\n const navigate = useNavigate();\n useEffect(() => {\n navigate(to, { replace });\n }, [navigate, to, replace]);\n return null;\n}\n\n/** Props of {@link Link}. */\nexport interface LinkProps extends Omit<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n \"href\"\n> {\n /** App path (relative to `basePath`), may carry `?query`. */\n to: string;\n /** Mark the link `aria-current=\"page\"` when the location matches: `\"exact\"`, or `\"prefix\"` for a section. Defaults to none. */\n activeMatch?: \"exact\" | \"prefix\";\n}\n\n/** Whether a click should be left to the browser (new tab, download, modified). */\nfunction isModifiedClick(event: MouseEvent<HTMLAnchorElement>): boolean {\n return (\n event.button !== 0 ||\n event.metaKey ||\n event.altKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.defaultPrevented\n );\n}\n\n/** An `<a>` that navigates in-app on a plain left-click. */\nexport function Link({ to, activeMatch, onClick, target, ...rest }: LinkProps) {\n const { navigate, href, location } = useRouter();\n const toPath = to.split(\"?\")[0] || \"/\";\n const active =\n location.path !== null &&\n (activeMatch === \"exact\"\n ? location.path === toPath\n : activeMatch === \"prefix\"\n ? toPath === \"/\"\n ? location.path === \"/\"\n : location.path === toPath || location.path.startsWith(`${toPath}/`)\n : false);\n return (\n <a\n {...rest}\n target={target}\n href={href(to)}\n aria-current={active ? \"page\" : undefined}\n onClick={(event) => {\n onClick?.(event);\n if (isModifiedClick(event) || (target && target !== \"_self\")) {\n return;\n }\n event.preventDefault();\n navigate(to);\n }}\n />\n );\n}\n",
51
+ "import type {\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n RefObject,\n SyntheticEvent,\n} from \"react\";\nimport { useEffect, useId, useRef } from \"react\";\nimport { Button } from \"./Button\";\nimport { cx } from \"./classNames\";\n\n/** What counts as focusable inside a dialog, for the trap and the initial focus. */\nconst FOCUSABLE = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled]):not([type='hidden'])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"summary\",\n \"[contenteditable]:not([contenteditable='false'])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\n/** The focusable elements inside `root`, in DOM order. */\nfunction focusableIn(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (element) => !element.hasAttribute(\"inert\") && !element.closest(\"[inert]\"),\n );\n}\n\n/** Props of {@link Dialog}. */\nexport interface DialogProps {\n /** Whether the dialog is showing. The content only mounts while open, so its state resets on each opening. */\n open: boolean;\n /** Asks to close: Escape, a backdrop click or the close button. The caller sets `open` to `false`. */\n onClose: () => void;\n /** The heading; it labels the dialog (`aria-labelledby`). */\n title: ReactNode;\n /** A sentence under the title; it describes the dialog (`aria-describedby`). */\n description?: ReactNode;\n /** The body. */\n children?: ReactNode;\n /** Actions along the bottom, usually {@link Button}s; the primary one last. */\n footer?: ReactNode;\n /** Close on Escape. Defaults to `true`; turn off while something is pending. */\n closeOnEscape?: boolean;\n /** Close on a click outside the panel. Defaults to `true`. */\n closeOnBackdrop?: boolean;\n /** Show the × button in the header. Defaults to `true`. */\n showCloseButton?: boolean;\n /** Width. Defaults to `\"md\"` (`sm` 400px, `md` 560px, `lg` 800px, each capped at the viewport). */\n size?: \"sm\" | \"md\" | \"lg\";\n /** What to focus on open. Defaults to the first focusable element in the body, then the footer, then the panel. */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** `\"alertdialog\"` for a confirmation that interrupts. Defaults to `\"dialog\"`. */\n role?: \"dialog\" | \"alertdialog\";\n /** Extra class names on the panel. */\n className?: string;\n}\n\n/**\n * A modal on the native `<dialog>` element (`showModal()`, so the page\n * behind is inert and it sits in the top layer; no portal needed).\n *\n * Tab and Shift+Tab cycle inside it; Escape and a backdrop click call\n * `onClose` when allowed; on close, focus returns to whatever had it when\n * the dialog opened.\n */\nexport function Dialog(props: DialogProps) {\n return props.open ? <OpenDialog {...props} /> : null;\n}\n\n/** The mounted dialog: mount is \"open\", unmount is \"close\". */\nfunction OpenDialog({\n onClose,\n title,\n description,\n children,\n footer,\n closeOnEscape = true,\n closeOnBackdrop = true,\n showCloseButton = true,\n size = \"md\",\n initialFocusRef,\n role = \"dialog\",\n className,\n}: DialogProps) {\n const ref = useRef<HTMLDialogElement>(null);\n const bodyRef = useRef<HTMLDivElement>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) {\n return;\n }\n const opener =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n if (!dialog.open) {\n if (typeof dialog.showModal === \"function\") {\n dialog.showModal();\n } else {\n dialog.setAttribute(\"open\", \"\");\n }\n }\n const target =\n initialFocusRef?.current ??\n (bodyRef.current && focusableIn(bodyRef.current)[0]) ??\n focusableIn(dialog).find((element) => !element.dataset.dialogClose) ??\n dialog;\n target.focus();\n return () => {\n if (dialog.open && typeof dialog.close === \"function\") {\n dialog.close();\n }\n if (opener?.isConnected) {\n opener.focus();\n }\n };\n // Runs once per opening (the ref objects are stable).\n }, [initialFocusRef]);\n\n const onKeyDown = (event: KeyboardEvent<HTMLDialogElement>) => {\n if (event.key === \"Escape\") {\n // Stop the native `cancel` so the element's open state stays ours.\n event.preventDefault();\n event.stopPropagation();\n if (closeOnEscape) {\n onClose();\n }\n return;\n }\n if (event.key !== \"Tab\" || !ref.current) {\n return;\n }\n const focusable = focusableIn(ref.current);\n if (focusable.length === 0) {\n event.preventDefault();\n ref.current.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n const inside = active instanceof Node && ref.current.contains(active);\n if (event.shiftKey && (active === first || !inside)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && (active === last || !inside)) {\n event.preventDefault();\n first.focus();\n }\n };\n\n // Escape in a real browser can arrive as `cancel` without a keydown we saw.\n const onCancel = (event: SyntheticEvent<HTMLDialogElement>) => {\n event.preventDefault();\n if (closeOnEscape) {\n onClose();\n }\n };\n\n // The panel fills the element, so a click whose target is the element\n // itself landed on the backdrop.\n const onClick = (event: MouseEvent<HTMLDialogElement>) => {\n if (closeOnBackdrop && event.target === event.currentTarget) {\n onClose();\n }\n };\n\n return (\n // The keyboard handling lives on the dialog element (Escape and the\n // focus trap); a backdrop click is a pointer-only convenience.\n <dialog\n ref={ref}\n role={role === \"alertdialog\" ? \"alertdialog\" : undefined}\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n className={cx(\"dialog\", `dialog-${size}`, className)}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n onCancel={onCancel}\n onClick={onClick}\n >\n <div className=\"dialog-panel\">\n <div className=\"dialog-header\">\n <h2\n id={titleId}\n className=\"dialog-title\"\n >\n {title}\n </h2>\n {showCloseButton && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"dialog-close\"\n aria-label=\"Close\"\n data-dialog-close=\"true\"\n onClick={onClose}\n >\n <span aria-hidden=\"true\">×</span>\n </Button>\n )}\n </div>\n {description && (\n <p\n id={descriptionId}\n className=\"dialog-description\"\n >\n {description}\n </p>\n )}\n {children !== undefined && (\n <div\n ref={bodyRef}\n className=\"dialog-body\"\n >\n {children}\n </div>\n )}\n {footer && <div className=\"dialog-footer\">{footer}</div>}\n </div>\n </dialog>\n );\n}\n",
52
+ "/**\n * The app's keyboard shortcuts, as pure functions over a key event, so the\n * rules (and the \"not while typing\" guard) are testable without rendering.\n */\n\n/**\n * Marks a screen's search box for the `/` shortcut:\n * `<input {...SEARCH_SHORTCUT} />`. It also sets `aria-keyshortcuts`, so a\n * screen reader announces the shortcut on the box.\n */\nexport const SEARCH_SHORTCUT = {\n \"data-shortcut\": \"search\",\n \"aria-keyshortcuts\": \"/\",\n} as const;\n\n/** A shortcut the app answers. */\nexport type ShortcutAction = \"focus-search\" | \"show-help\";\n\n/** One row of the help dialog. */\nexport interface ShortcutHelp {\n /** The keys, each rendered as a `<kbd>`. */\n keys: readonly string[];\n /** What they do. */\n description: string;\n}\n\n/** What the `?` dialog lists: the two shortcuts, then the keys the widgets answer. */\nexport const SHORTCUT_HELP: readonly ShortcutHelp[] = [\n { keys: [\"/\"], description: \"Focus the screen's search box\" },\n { keys: [\"?\"], description: \"Show these shortcuts\" },\n { keys: [\"Esc\"], description: \"Close a dialog\" },\n {\n keys: [\"←\", \"→\", \"Home\", \"End\"],\n description: \"Move between tabs (queue states, panels)\",\n },\n {\n keys: [\"↑\", \"↓\", \"Home\", \"End\"],\n description: \"Move through the API docs sidebars (↓ from their search box)\",\n },\n];\n\n/** Whether the event comes from somewhere the user types: a shortcut must not steal the key. */\nexport function isTypingTarget(target: EventTarget | null): boolean {\n if (!target || typeof (target as Element).tagName !== \"string\") {\n return false;\n }\n const element = target as HTMLElement;\n const tag = element.tagName;\n if (tag === \"TEXTAREA\" || tag === \"SELECT\") {\n return true;\n }\n if (tag === \"INPUT\") {\n const type = (element as HTMLInputElement).type;\n return ![\n \"checkbox\",\n \"radio\",\n \"button\",\n \"submit\",\n \"reset\",\n \"range\",\n \"color\",\n \"file\",\n ].includes(type);\n }\n return (\n element.isContentEditable ||\n element.closest?.(\"[contenteditable]:not([contenteditable='false'])\") !==\n null\n );\n}\n\n/** The parts of a key event {@link shortcutFor} reads. */\nexport interface ShortcutKeyEvent {\n /** `KeyboardEvent.key`. */\n key: string;\n /** Where it happened. */\n target: EventTarget | null;\n /** Modifier state. */\n ctrlKey: boolean;\n /** Modifier state. */\n metaKey: boolean;\n /** Modifier state. */\n altKey: boolean;\n /** Something else handled it already. */\n defaultPrevented: boolean;\n /** IME composition in progress. */\n isComposing?: boolean;\n}\n\n/**\n * The shortcut a key press means, or `null`. Nothing fires while typing in\n * a field, with Ctrl/Meta/Alt held (the browser's own shortcuts), during\n * composition, or after another handler took the key.\n */\nexport function shortcutFor(event: ShortcutKeyEvent): ShortcutAction | null {\n if (\n event.defaultPrevented ||\n event.isComposing ||\n event.ctrlKey ||\n event.metaKey ||\n event.altKey ||\n isTypingTarget(event.target)\n ) {\n return null;\n }\n if (event.key === \"/\") {\n return \"focus-search\";\n }\n if (event.key === \"?\") {\n return \"show-help\";\n }\n return null;\n}\n\n/** The current screen's search box (the first enabled one marked with {@link SEARCH_SHORTCUT}), if it has one. */\nexport function findSearchBox(root: ParentNode): HTMLInputElement | null {\n const candidates = root.querySelectorAll<HTMLInputElement>(\n '[data-shortcut=\"search\"]',\n );\n for (const candidate of Array.from(candidates)) {\n if (!candidate.disabled && candidate.closest(\"[inert],[hidden]\") === null) {\n return candidate;\n }\n }\n return null;\n}\n",
53
+ "import { Fragment, useEffect, useState } from \"react\";\nimport { Dialog } from \"../components/Dialog\";\nimport { findSearchBox, SHORTCUT_HELP, shortcutFor } from \"./shortcuts\";\n\n/**\n * Listens for the app's shortcuts on the document: `/` focuses the current\n * screen's search box, `?` opens a dialog listing the shortcuts. Neither\n * fires while typing in a field, with a modifier held, or while a dialog is\n * open (the page behind it is inert).\n */\nexport function KeyboardShortcuts() {\n const [helpOpen, setHelpOpen] = useState(false);\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n const action = shortcutFor(event);\n if (action === null || document.querySelector(\"dialog[open]\")) {\n return;\n }\n if (action === \"show-help\") {\n event.preventDefault();\n setHelpOpen(true);\n return;\n }\n const main = document.getElementById(\"main\");\n const search = main && findSearchBox(main);\n if (search) {\n event.preventDefault();\n search.focus();\n search.select();\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, []);\n\n return (\n <Dialog\n open={helpOpen}\n onClose={() => setHelpOpen(false)}\n title=\"Keyboard shortcuts\"\n description=\"Shortcuts do nothing while you type in a field.\"\n size=\"sm\"\n >\n <dl\n className=\"shortcut-list\"\n data-testid=\"shortcut-list\"\n >\n {SHORTCUT_HELP.map((entry) => (\n <div\n key={entry.description}\n className=\"shortcut-row\"\n >\n <dt>\n {entry.keys.map((key, index) => (\n <Fragment key={key}>\n {index > 0 && \" \"}\n <kbd>{key}</kbd>\n </Fragment>\n ))}\n </dt>\n <dd>{entry.description}</dd>\n </div>\n ))}\n </dl>\n </Dialog>\n );\n}\n",
54
+ "import type {\n EventName,\n EventWire,\n JobsApiAckMessage,\n JobsApiAckRejection,\n JobsApiClientMessage,\n JobsApiErrorMessage,\n JobsApiEventMessage,\n JobsApiGapMessage,\n JobsApiHelloMessage,\n JobsApiServerMessage,\n} from \"../api/types\";\nimport {\n JOBS_API_WS_CLOSE,\n JOBS_API_WS_MAX_CHANNELS_PER_FRAME,\n JOBS_API_WS_SUBPROTOCOL,\n} from \"@kingsleyweb/bun-jobs/api/contract\";\n\n/**\n * The live-events socket client: one connection, shared by every screen\n * through refcounted holds. Framework-free; the React side (`LiveProvider`,\n * the hooks in `live.ts`) only holds and releases.\n *\n * Wire rules it keeps (design §8, §8.1):\n * - offers only the `bun-jobs.v1` subprotocol;\n * - refcounts channels and merges holders' event filters, because the server\n * does neither (a re-subscribe replaces a channel's filter, one unsubscribe\n * drops it); frames are chunked at 256 channels;\n * - de-duplicates by a bounded set of seen `seq`s, never a maximum, because a\n * replay may deliver out of order; loss is learned from `gap` frames only;\n * - resumes with `{ epoch, afterSeq }` on reconnect, and turns\n * `resumed: false` or a new epoch into a gap for the holders; after a drop\n * mid-way through a resume split over several frames, resumes again from\n * that resume's position until every resuming frame is acked (bun-jobs #55);\n * - waits on acks without a timeout: broad channels may ack late.\n */\n\n/** Where the connection stands (see `LiveState` in `live.ts`). */\nexport type LiveClientState =\n \"off\" | \"connecting\" | \"live\" | \"reconnecting\" | \"refused\";\n\n/** What {@link LiveClient.getSnapshot} returns; a new object only when something changed. */\nexport interface LiveClientSnapshot {\n /** Where the connection stands. */\n state: LiveClientState;\n /** Why, in words, when not simply live; `null` otherwise. */\n detail: string | null;\n /** When the last event frame arrived, epoch ms; `null` before any. */\n lastEventAt: number | null;\n}\n\n/** The part of a browser `WebSocket` the client uses. */\nexport interface LiveSocket {\n /** `0` connecting, `1` open, `2` closing, `3` closed. */\n readonly readyState: number;\n /** Sends a text frame. */\n send: (data: string) => void;\n /** Closes the connection. */\n close: (code?: number, reason?: string) => void;\n /** Called once open. */\n onopen: ((event: unknown) => void) | null;\n /** Called per frame; `data` is the text. */\n onmessage: ((event: { data: unknown }) => void) | null;\n /** Called once closed, with the code (`1006` when no close frame arrived). */\n onclose: ((event: { code: number; reason?: string }) => void) | null;\n /** Called on an error; a close follows. */\n onerror: ((event: unknown) => void) | null;\n}\n\n/** Builds a socket, as `new WebSocket(url, protocols)` does. */\nexport type LiveSocketConstructor = new (\n url: string,\n protocols: string[],\n) => LiveSocket;\n\n/** Timers and clock, injectable for tests. */\nexport interface LiveTimers {\n /** Schedules a callback. */\n setTimeout: (callback: () => void, ms: number) => unknown;\n /** Cancels one. */\n clearTimeout: (handle: unknown) => void;\n /** Epoch ms. */\n now: () => number;\n}\n\n/** One holder's interest: what a screen passes to {@link LiveClient.hold}. */\nexport interface LiveHolderSpec {\n /** Channel names exactly as sent (see `liveChannels`). */\n channels: readonly string[];\n /** Only these event types. Omitted: every type. */\n events?: readonly EventName[];\n /** Called for each event on these channels, once per event. */\n onEvent?: (event: EventWire) => void;\n /** Called when events on these channels may have been missed: refetch. */\n onGap?: (gap: JobsApiGapMessage) => void;\n /** Called with this holder's current rejections whenever they change. */\n onRejected?: (rejected: readonly JobsApiAckRejection[]) => void;\n}\n\n/** A hold on some channels, until released. */\nexport interface LiveHold {\n /** Replaces the holder's channels, filter and callbacks. */\n update: (spec: LiveHolderSpec) => void;\n /** Releases the hold; the last holder of a channel unsubscribes it. */\n release: () => void;\n /** The holder's current rejections. */\n rejected: () => readonly JobsApiAckRejection[];\n}\n\n/** Options of {@link LiveClient}. */\nexport interface LiveClientOptions {\n /** The socket URL, or a function giving it at each connection attempt. */\n url: string | (() => string);\n /** The socket constructor. Defaults to `globalThis.WebSocket`. */\n WebSocket?: LiveSocketConstructor;\n /** Timers and clock. Defaults to the global ones and `Date.now`. */\n timers?: LiveTimers;\n /** A number in `[0, 1)`, for backoff jitter. Defaults to `Math.random`. */\n random?: () => number;\n /** The heartbeat interval before `hello` says (`meta.websocket.heartbeatMs`). Defaults to 25 000 ms. */\n heartbeatMs?: number;\n /** Extra wait on top of two heartbeats before the connection counts as lost. Defaults to 5 000 ms. */\n heartbeatSlackMs?: number;\n /** When heartbeats are off (`0`), how long idle before a `ping`. Defaults to 25 000 ms. */\n pingIntervalMs?: number;\n /** First reconnect delay, before jitter. Defaults to 500 ms. */\n backoffInitialMs?: number;\n /** Longest reconnect delay. Defaults to 30 000 ms. */\n backoffMaxMs?: number;\n /** Reconnects after a protocol, size or rate-limit close (1003/1009/1008) before giving up. Defaults to 3. */\n maxPolicyRetries?: number;\n /** Retries of a connection that never opened, before the first ever open, before giving up (a refused upgrade). Defaults to 2. */\n maxRefusedRetries?: number;\n /** How long a connection must stay up for the policy-close count to reset. Defaults to 60 000 ms. */\n stableAfterMs?: number;\n /** Client-side send budget per second, under the server's 20. Defaults to 10. */\n messagesPerSecond?: number;\n /** How long to hold frames back after a `RATE_LIMITED` error. Defaults to 2 000 ms. */\n rateLimitPauseMs?: number;\n /** Most seen `seq`s remembered for de-duplication. Defaults to 2 048. */\n seenLimit?: number;\n /** Largest subscribe frame, in characters, below the server's 16 KiB default. Defaults to 12 000. */\n maxFrameChars?: number;\n /**\n * Told of every authorization failure the socket reports: `401` for the\n * `UNAUTHORIZED` close (4401, reserved by protocol 1) and the status of each\n * refused channel in an ack and of each `error` frame that carries 401 or\n * 403. The client handles the failure as before either way; this is how the\n * app's `unauthorized` hears of it. A refused upgrade is not reported: a\n * browser cannot see its status (the app's HTTP reads see the same\n * failure). Defaults to doing nothing.\n */\n onAuthFailure?: (status: 401 | 403) => void;\n}\n\n/** A registered holder. */\ninterface Holder {\n /** Its current spec. */\n spec: LiveHolderSpec;\n /** Its event filter as a set, or `undefined` for every type. */\n filter: ReadonlySet<string> | undefined;\n /** The rejections last reported to it, by channel. */\n rejected: JobsApiAckRejection[];\n}\n\n/** What this connection has asked the server for, per channel as sent. */\ninterface SentChannel {\n /** The filter key it was subscribed with (`*` = every type). */\n filter: string;\n /** Whether the server refused it (it holds nothing). */\n rejected: boolean;\n}\n\n/** A frame awaiting its ack or error. */\ninterface Pending {\n /** Its operation. */\n op: \"subscribe\" | \"unsubscribe\";\n /** The channels it named, as sent. */\n channels: string[];\n /** The filter key of a subscribe. */\n filter: string;\n /**\n * A resuming subscribe that was not the resume's first frame. Servers\n * before bun-jobs #55 skipped, in a replay, events an earlier frame's\n * replay had sent, so an event matching channels of both reached only the\n * first frame's channels while the ack still said `resumed: true`. The\n * server now replays each frame's channels in full (#55); its holders are\n * still told of a gap, as a belt-and-braces: a refetch costs little, and\n * an older server may be on the other end.\n */\n splitResume?: true;\n /** Whether it carried `resume` (see `LiveClient.#resuming`). */\n resuming?: true;\n}\n\n/** Filter key meaning \"every type\". */\nconst ALL = \"*\";\n\n/** `WebSocket.OPEN`. */\nconst OPEN = 1;\n\n/** The client's own close code for a lost heartbeat (3000–4999 are free for applications). */\nconst HEARTBEAT_LOST = 4000;\n\n/** The status detail while the server's event source is down. */\nconst EVENTS_UNAVAILABLE = \"The server's event source is unavailable; retrying\";\n\n/** Default timers. */\nconst DEFAULT_TIMERS: LiveTimers = {\n setTimeout: (callback, ms) => globalThis.setTimeout(callback, ms),\n clearTimeout: (handle) =>\n globalThis.clearTimeout(handle as ReturnType<typeof setTimeout>),\n now: () => Date.now(),\n};\n\n/**\n * The socket URL for the API's `meta.websocket`: `ws(s)://` on the page's\n * origin, or the API's when `apiBase` is an absolute URL on another origin;\n * with a dedicated `port`, that origin's hostname on the port.\n */\nexport function liveSocketUrl(\n websocket: {\n /** The full socket path. */\n path: string;\n /** A dedicated port, when the socket has one. */\n port?: number | null;\n },\n apiBase: string,\n pageUrl: string,\n): string {\n const page = new URL(pageUrl);\n let origin = page;\n try {\n const api = new URL(apiBase);\n origin = api;\n } catch {\n // A same-origin path: the page's origin.\n }\n const url = new URL(origin.origin);\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n if (websocket.port != null) {\n url.port = String(websocket.port);\n }\n url.pathname = websocket.path;\n return url.toString();\n}\n\n/** The filter key of a holder filter. */\nfunction filterKey(filter: ReadonlySet<string> | undefined): string {\n return filter === undefined ? ALL : [...filter].sort().join(\",\");\n}\n\n/** Close codes that mean \"you sent something wrong\": reconnect a few times only. */\nconst POLICY_CLOSES: ReadonlySet<number> = new Set([\n JOBS_API_WS_CLOSE.UNSUPPORTED_DATA,\n JOBS_API_WS_CLOSE.POLICY,\n JOBS_API_WS_CLOSE.TOO_BIG,\n]);\n\n/** Words for a policy close, as a refusal detail. */\nfunction policyDetail(code: number): string {\n switch (code) {\n case JOBS_API_WS_CLOSE.POLICY:\n return \"The server closed the live-events socket for exceeding its message rate\";\n case JOBS_API_WS_CLOSE.TOO_BIG:\n return \"The server closed the live-events socket: a message was too large\";\n default:\n return \"The server closed the live-events socket: it refused a message\";\n }\n}\n\n/** The live-events client. See the module comment. */\nexport class LiveClient {\n /** Options, defaults applied. */\n readonly #options: Required<Omit<LiveClientOptions, \"url\" | \"WebSocket\">> & {\n url: LiveClientOptions[\"url\"];\n WebSocket: LiveSocketConstructor | undefined;\n };\n\n /** Snapshot listeners. */\n readonly #listeners = new Set<() => void>();\n /** The current snapshot. */\n #snapshot: LiveClientSnapshot = {\n state: \"off\",\n detail: null,\n lastEventAt: null,\n };\n\n /** Registered holders. */\n readonly #holders = new Set<Holder>();\n /** The last rejection per channel as sent (this connection). */\n readonly #rejections = new Map<string, JobsApiAckRejection>();\n /** Canonical name → the names sent for it, learned from acks. */\n readonly #rawByKey = new Map<string, Set<string>>();\n\n /** Whether started (and not stopped). */\n #running = false;\n /** The socket, while one exists. */\n #socket: LiveSocket | undefined;\n /** Bumped per connection, so a stale socket's callbacks are ignored. */\n #generation = 0;\n /** Whether the current socket opened. */\n #opened = false;\n /** When the current socket received `hello`. */\n #liveSince: number | undefined;\n /** Whether any socket ever opened. */\n #everOpened = false;\n /** Consecutive reconnects since the last `hello`. */\n #attempt = 0;\n /** Connections that never opened, before the first ever open. */\n #refusedAttempts = 0;\n /** Policy closes (1003/1008/1009) since the last stable connection. */\n #policyCloses = 0;\n /** The reconnect timer. */\n #reconnectTimer: unknown;\n /** The heartbeat watchdog. */\n #watchdog: unknown;\n /** Whether the watchdog's last step sent a ping. */\n #pinged = false;\n /** Heartbeat interval in effect. */\n #heartbeatMs: number;\n\n /** The epoch last seen. */\n #epoch: string | undefined;\n /** The highest `seq` seen in the epoch (for `afterSeq` only, never for loss or dedupe). */\n #lastSeq = 0;\n /** Seen `seq`s → the holders each was delivered to. Bounded; insertion order is age. */\n readonly #seen = new Map<number, Set<Holder>>();\n /** Resume to send with the first subscribes after `hello`. */\n #resume: { epoch: string; afterSeq: number } | undefined;\n /**\n * The resume last sent, while any of its subscribe frames is unacked. A\n * later frame's replay can carry `seq`s below ones an earlier frame's\n * replay already delivered, so the highest `seq` seen is not a safe\n * position until every resuming frame is acked: a reconnect before then\n * resumes from this same position (bun-jobs #55). Survives teardown.\n */\n #resuming:\n | {\n /** The position that resume used. */\n resume: { epoch: string; afterSeq: number };\n /** Ids of its subscribe frames not yet acked (this connection's). */\n unacked: Set<string>;\n }\n | undefined;\n\n /** A gap to announce to every holder once live again (after a 4008 close). */\n #pendingGap: JobsApiGapMessage[\"reason\"] | undefined;\n /** Set by `resumed: false`: the server's gap right after it was already announced. */\n #swallowGap = false;\n\n /** What this connection has asked for. */\n readonly #sent = new Map<string, SentChannel>();\n /** Frames awaiting an answer, by id. */\n readonly #pending = new Map<string, Pending>();\n /** Frames waiting for send budget. */\n #outbox: JobsApiClientMessage[] = [];\n /** Send tokens left. */\n #tokens: number;\n /** When tokens were last refilled. */\n #refilledAt: number;\n /** No frame is sent before this. */\n #pausedUntil = 0;\n /** The pump timer. */\n #pumpTimer: unknown;\n /** Whether a reconcile is scheduled. */\n #flushScheduled = false;\n /** Retry timer after an `EVENTS_UNAVAILABLE`. */\n #retryFlushTimer: unknown;\n /** Frame id counter. */\n #nextId = 0;\n\n constructor(\n /** See {@link LiveClientOptions}. */\n options: LiveClientOptions,\n ) {\n this.#options = {\n url: options.url,\n WebSocket: options.WebSocket,\n timers: options.timers ?? DEFAULT_TIMERS,\n random: options.random ?? Math.random,\n heartbeatMs: options.heartbeatMs ?? 25_000,\n heartbeatSlackMs: options.heartbeatSlackMs ?? 5_000,\n pingIntervalMs: options.pingIntervalMs ?? 25_000,\n backoffInitialMs: options.backoffInitialMs ?? 500,\n backoffMaxMs: options.backoffMaxMs ?? 30_000,\n maxPolicyRetries: options.maxPolicyRetries ?? 3,\n maxRefusedRetries: options.maxRefusedRetries ?? 2,\n stableAfterMs: options.stableAfterMs ?? 60_000,\n messagesPerSecond: options.messagesPerSecond ?? 10,\n rateLimitPauseMs: options.rateLimitPauseMs ?? 2_000,\n seenLimit: options.seenLimit ?? 2_048,\n maxFrameChars: options.maxFrameChars ?? 12_000,\n onAuthFailure: options.onAuthFailure ?? (() => {}),\n };\n this.#heartbeatMs = this.#options.heartbeatMs;\n this.#tokens = this.#options.messagesPerSecond * 2;\n this.#refilledAt = this.#options.timers.now();\n }\n\n /* ---------------------------------------------------------------- *\n * Status\n * ---------------------------------------------------------------- */\n\n /** Listens for snapshot changes (for `useSyncExternalStore`). */\n subscribe = (listener: () => void): (() => void) => {\n this.#listeners.add(listener);\n return () => {\n this.#listeners.delete(listener);\n };\n };\n\n /** The current status; the same object until something changes. */\n getSnapshot = (): LiveClientSnapshot => this.#snapshot;\n\n /** The `hello`'s session id, while connected. */\n sessionId: string | undefined;\n\n /** Updates the snapshot and notifies, when anything changed. */\n #setSnapshot(patch: Partial<LiveClientSnapshot>): void {\n const next = { ...this.#snapshot, ...patch };\n if (\n next.state === this.#snapshot.state &&\n next.detail === this.#snapshot.detail &&\n next.lastEventAt === this.#snapshot.lastEventAt\n ) {\n return;\n }\n this.#snapshot = next;\n for (const listener of [...this.#listeners]) {\n listener();\n }\n }\n\n /* ---------------------------------------------------------------- *\n * Lifecycle\n * ---------------------------------------------------------------- */\n\n /** Connects, and keeps reconnecting until {@link stop}. Idempotent; restartable. */\n start(): void {\n if (this.#running) {\n return;\n }\n this.#running = true;\n this.#attempt = 0;\n this.#refusedAttempts = 0;\n this.#policyCloses = 0;\n this.#setSnapshot({\n state: this.#everOpened ? \"reconnecting\" : \"connecting\",\n detail: null,\n });\n this.#connect();\n }\n\n /** Closes the socket and stops reconnecting. Holders stay registered. */\n stop(): void {\n if (!this.#running) {\n return;\n }\n this.#running = false;\n this.#timers.clearTimeout(this.#reconnectTimer);\n this.#reconnectTimer = undefined;\n this.#teardown(JOBS_API_WS_CLOSE.NORMAL, \"client stopped\");\n this.#setSnapshot({ state: \"off\", detail: null });\n }\n\n /** The timers. */\n get #timers(): LiveTimers {\n return this.#options.timers;\n }\n\n /** Opens a socket. */\n #connect(): void {\n this.#reconnectTimer = undefined;\n if (!this.#running) {\n return;\n }\n const Ctor =\n this.#options.WebSocket ??\n (globalThis as { WebSocket?: LiveSocketConstructor }).WebSocket;\n if (!Ctor) {\n this.#refuse(\"This browser has no WebSocket support\");\n return;\n }\n const generation = ++this.#generation;\n this.#opened = false;\n let socket: LiveSocket;\n try {\n const url =\n typeof this.#options.url === \"function\"\n ? this.#options.url()\n : this.#options.url;\n socket = new Ctor(url, [JOBS_API_WS_SUBPROTOCOL]);\n } catch (error) {\n this.#refuse(\n `The live-events socket could not be created: ${error instanceof Error ? error.message : String(error)}`,\n );\n return;\n }\n this.#socket = socket;\n const current = () => generation === this.#generation;\n socket.onopen = () => {\n if (current()) {\n this.#onOpen();\n }\n };\n socket.onmessage = (event) => {\n if (current()) {\n this.#onMessage(event.data);\n }\n };\n socket.onclose = (event) => {\n if (current()) {\n this.#onClose(event.code);\n }\n };\n socket.onerror = () => {\n // A close follows; it decides what to do.\n };\n }\n\n /** Detaches and closes the socket, and forgets this connection's state. */\n #teardown(code: number, reason: string): void {\n this.#generation++;\n const socket = this.#socket;\n this.#socket = undefined;\n this.sessionId = undefined;\n this.#liveSince = undefined;\n this.#timers.clearTimeout(this.#watchdog);\n this.#watchdog = undefined;\n this.#timers.clearTimeout(this.#pumpTimer);\n this.#pumpTimer = undefined;\n this.#timers.clearTimeout(this.#retryFlushTimer);\n this.#retryFlushTimer = undefined;\n this.#sent.clear();\n this.#pending.clear();\n this.#outbox = [];\n this.#resume = undefined;\n this.#swallowGap = false;\n if (socket) {\n socket.onopen = null;\n socket.onmessage = null;\n socket.onclose = null;\n socket.onerror = null;\n try {\n socket.close(code, reason);\n } catch {\n // Already closed.\n }\n }\n }\n\n /** Gives up: no more retries until restarted. */\n #refuse(detail: string): void {\n this.#running = false;\n this.#teardown(JOBS_API_WS_CLOSE.NORMAL, \"refused\");\n this.#setSnapshot({ state: \"refused\", detail });\n }\n\n /** The socket opened. */\n #onOpen(): void {\n this.#opened = true;\n this.#everOpened = true;\n this.#armWatchdog();\n }\n\n /** The socket closed (or was lost). */\n #onClose(code: number): void {\n const opened = this.#opened;\n const stable =\n this.#liveSince !== undefined &&\n this.#timers.now() - this.#liveSince >= this.#options.stableAfterMs;\n this.#teardown(code, \"closed\");\n if (!this.#running) {\n return;\n }\n if (stable) {\n this.#policyCloses = 0;\n }\n\n if (!opened && !this.#everOpened) {\n // Nothing ever opened: a browser sees a refused upgrade (401, 403,\n // 429, 404) only as this. Retry a little, then stop.\n this.#refusedAttempts++;\n if (this.#refusedAttempts > this.#options.maxRefusedRetries) {\n this.#refuse(\n \"The server refused the live-events socket. Check that you are signed in and hold the events.connect permission\",\n );\n return;\n }\n this.#scheduleReconnect(\n \"The live-events socket could not connect; retrying\",\n );\n return;\n }\n\n if (POLICY_CLOSES.has(code)) {\n this.#policyCloses++;\n if (this.#policyCloses > this.#options.maxPolicyRetries) {\n this.#refuse(policyDetail(code));\n return;\n }\n this.#scheduleReconnect(`${policyDetail(code)}; reconnecting`);\n return;\n }\n if (code === JOBS_API_WS_CLOSE.UNAUTHORIZED) {\n this.#refuse(\"The live-events session is no longer authorized\");\n this.#options.onAuthFailure(401);\n return;\n }\n if (code === JOBS_API_WS_CLOSE.SLOW_CONSUMER) {\n this.#pendingGap = \"slow-consumer\";\n this.#scheduleReconnect(\n \"The connection fell behind the server's events; reconnecting\",\n );\n return;\n }\n if (code === JOBS_API_WS_CLOSE.GOING_AWAY) {\n this.#scheduleReconnect(\"The server is restarting; reconnecting\");\n return;\n }\n if (code === HEARTBEAT_LOST) {\n this.#scheduleReconnect(\"The connection went quiet; reconnecting\");\n return;\n }\n this.#scheduleReconnect(\"The connection dropped; reconnecting\");\n }\n\n /** The delay before reconnect attempt `attempt` (0-based): exponential, half-jittered. */\n backoffDelay(attempt: number): number {\n const { backoffInitialMs, backoffMaxMs, random } = this.#options;\n const ceiling = Math.min(backoffMaxMs, backoffInitialMs * 2 ** attempt);\n return Math.round(ceiling / 2 + (ceiling / 2) * random());\n }\n\n /** Schedules the next connection attempt. */\n #scheduleReconnect(detail: string): void {\n const delay = this.backoffDelay(this.#attempt);\n this.#attempt++;\n this.#setSnapshot({\n state: this.#everOpened ? \"reconnecting\" : \"connecting\",\n detail,\n });\n this.#timers.clearTimeout(this.#reconnectTimer);\n this.#reconnectTimer = this.#timers.setTimeout(\n () => this.#connect(),\n delay,\n );\n }\n\n /** (Re)arms the silence watchdog: any frame proves the connection. */\n #armWatchdog(): void {\n this.#timers.clearTimeout(this.#watchdog);\n this.#pinged = false;\n const { heartbeatSlackMs, pingIntervalMs } = this.#options;\n if (this.#heartbeatMs > 0) {\n this.#watchdog = this.#timers.setTimeout(\n () => this.#lost(),\n this.#heartbeatMs * 2 + heartbeatSlackMs,\n );\n return;\n }\n // No heartbeats: ping when idle, and give up if even that goes unanswered.\n this.#watchdog = this.#timers.setTimeout(() => {\n this.#pinged = true;\n this.#send({ op: \"ping\", id: this.#id() });\n this.#watchdog = this.#timers.setTimeout(\n () => this.#lost(),\n pingIntervalMs + heartbeatSlackMs,\n );\n }, pingIntervalMs);\n }\n\n /** Nothing arrived in time: drop the connection and reconnect. */\n #lost(): void {\n this.#onClose(HEARTBEAT_LOST);\n }\n\n /* ---------------------------------------------------------------- *\n * Holders\n * ---------------------------------------------------------------- */\n\n /** Holds channels until the returned hold is released. */\n hold(spec: LiveHolderSpec): LiveHold {\n const holder: Holder = {\n spec,\n filter: spec.events ? new Set(spec.events) : undefined,\n rejected: [],\n };\n this.#holders.add(holder);\n this.#refreshRejected(holder);\n this.#scheduleFlush();\n let released = false;\n return {\n update: (next) => {\n if (released) {\n return;\n }\n const before = holder.spec;\n holder.spec = next;\n holder.filter = next.events ? new Set(next.events) : undefined;\n if (\n before.channels.join(\"\\n\") !== next.channels.join(\"\\n\") ||\n filterKey(before.events ? new Set(before.events) : undefined) !==\n filterKey(holder.filter)\n ) {\n this.#refreshRejected(holder);\n this.#scheduleFlush();\n }\n },\n release: () => {\n if (released) {\n return;\n }\n released = true;\n this.#holders.delete(holder);\n for (const delivered of this.#seen.values()) {\n delivered.delete(holder);\n }\n this.#scheduleFlush();\n },\n rejected: () => holder.rejected,\n };\n }\n\n /** How many holders hold each channel (for tests and diagnostics). */\n holdCounts(): Map<string, number> {\n const counts = new Map<string, number>();\n for (const holder of this.#holders) {\n for (const channel of new Set(holder.spec.channels)) {\n counts.set(channel, (counts.get(channel) ?? 0) + 1);\n }\n }\n return counts;\n }\n\n /** The merged filter each held channel needs (`*` = every type). */\n #desired(): Map<string, string> {\n const merged = new Map<string, Set<string> | undefined>();\n for (const holder of this.#holders) {\n for (const channel of holder.spec.channels) {\n if (!merged.has(channel)) {\n merged.set(\n channel,\n holder.filter ? new Set(holder.filter) : undefined,\n );\n continue;\n }\n const current = merged.get(channel);\n if (current === undefined) {\n continue;\n }\n if (holder.filter === undefined) {\n merged.set(channel, undefined);\n } else {\n for (const type of holder.filter) {\n current.add(type);\n }\n }\n }\n }\n const desired = new Map<string, string>();\n for (const [channel, filter] of merged) {\n desired.set(channel, filterKey(filter));\n }\n return desired;\n }\n\n /** Reconciles on the next microtask, so one render's holds share frames. */\n #scheduleFlush(): void {\n if (this.#flushScheduled) {\n return;\n }\n this.#flushScheduled = true;\n queueMicrotask(() => {\n this.#flushScheduled = false;\n this.#flush();\n });\n }\n\n /** Sends what it takes for the server to hold exactly the desired channels and filters. */\n #flush(): void {\n if (!this.#socket || this.sessionId === undefined) {\n return;\n }\n const desired = this.#desired();\n const groups = new Map<string, string[]>();\n for (const [channel, filter] of desired) {\n if (this.#sent.get(channel)?.filter === filter) {\n continue;\n }\n let group = groups.get(filter);\n if (!group) {\n group = [];\n groups.set(filter, group);\n }\n group.push(channel);\n }\n const leaving: string[] = [];\n for (const [channel, sent] of this.#sent) {\n if (!desired.has(channel)) {\n this.#sent.delete(channel);\n this.#rejections.delete(channel);\n if (!sent.rejected) {\n leaving.push(channel);\n }\n }\n }\n\n const resume = this.#resume;\n this.#resume = undefined;\n let resumeFrames = 0;\n const resumeIds = new Set<string>();\n for (const [filter, channels] of groups) {\n for (const chunk of this.#chunks(channels)) {\n const id = this.#id();\n for (const channel of chunk) {\n this.#sent.set(channel, { filter, rejected: false });\n }\n this.#pending.set(id, {\n op: \"subscribe\",\n channels: chunk,\n filter,\n ...(resume && resumeFrames++ > 0 ? { splitResume: true } : {}),\n ...(resume ? { resuming: true } : {}),\n });\n if (resume) {\n resumeIds.add(id);\n }\n this.#send({\n op: \"subscribe\",\n id,\n channels: chunk,\n ...(filter === ALL\n ? {}\n : { events: filter.split(\",\") as EventName[] }),\n ...(resume ? { resume } : {}),\n });\n }\n }\n if (resume) {\n this.#resuming =\n resumeIds.size > 0 ? { resume, unacked: resumeIds } : undefined;\n }\n for (const chunk of this.#chunks(leaving)) {\n const id = this.#id();\n this.#pending.set(id, { op: \"unsubscribe\", channels: chunk, filter: \"\" });\n this.#send({ op: \"unsubscribe\", id, channels: chunk });\n }\n }\n\n /** Splits channels into frames of at most 256 names and a bounded size. */\n *#chunks(channels: readonly string[]): Generator<string[]> {\n let chunk: string[] = [];\n let chars = 0;\n for (const channel of channels) {\n const size = channel.length * 3 + 4;\n if (\n chunk.length > 0 &&\n (chunk.length >= JOBS_API_WS_MAX_CHANNELS_PER_FRAME ||\n chars + size > this.#options.maxFrameChars)\n ) {\n yield chunk;\n chunk = [];\n chars = 0;\n }\n chunk.push(channel);\n chars += size;\n }\n if (chunk.length > 0) {\n yield chunk;\n }\n }\n\n /** A fresh frame id. */\n #id(): string {\n this.#nextId++;\n return `c${this.#nextId}`;\n }\n\n /** The holders holding any of these channels (canonical or as sent). */\n #holdersOf(channels: readonly string[]): Set<Holder> {\n const names = new Set<string>();\n for (const channel of channels) {\n names.add(channel);\n for (const raw of this.#rawByKey.get(channel) ?? []) {\n names.add(raw);\n }\n }\n const holders = new Set<Holder>();\n for (const holder of this.#holders) {\n if (holder.spec.channels.some((channel) => names.has(channel))) {\n holders.add(holder);\n }\n }\n return holders;\n }\n\n /** Recomputes a holder's rejections, notifying it when they changed. */\n #refreshRejected(holder: Holder): void {\n const next: JobsApiAckRejection[] = [];\n for (const channel of holder.spec.channels) {\n const rejection = this.#rejections.get(channel);\n if (rejection) {\n next.push(rejection);\n }\n }\n const same =\n next.length === holder.rejected.length &&\n next.every((rejection, index) => rejection === holder.rejected[index]);\n if (same) {\n return;\n }\n holder.rejected = next;\n this.#call(() => holder.spec.onRejected?.(next));\n }\n\n /** Runs a holder callback, so one failing screen cannot break the socket. */\n #call(fn: () => void): void {\n try {\n fn();\n } catch (error) {\n queueMicrotask(() => {\n throw error;\n });\n }\n }\n\n /** Tells holders that events may have been missed. */\n #gap(holders: Iterable<Holder>, gap: JobsApiGapMessage): void {\n for (const holder of holders) {\n this.#call(() => holder.spec.onGap?.(gap));\n }\n }\n\n /* ---------------------------------------------------------------- *\n * Sending\n * ---------------------------------------------------------------- */\n\n /** Queues a frame and sends what the budget allows. */\n #send(frame: JobsApiClientMessage): void {\n this.#outbox.push(frame);\n this.#pump();\n }\n\n /** Sends queued frames within the budget, scheduling the rest. */\n #pump(): void {\n const socket = this.#socket;\n if (!socket || socket.readyState !== OPEN) {\n return;\n }\n const { messagesPerSecond } = this.#options;\n const now = this.#timers.now();\n this.#tokens = Math.min(\n messagesPerSecond * 2,\n this.#tokens + ((now - this.#refilledAt) * messagesPerSecond) / 1000,\n );\n this.#refilledAt = now;\n while (\n this.#outbox.length > 0 &&\n now >= this.#pausedUntil &&\n this.#tokens >= 1\n ) {\n const frame = this.#outbox.shift()!;\n this.#tokens -= 1;\n try {\n socket.send(JSON.stringify(frame));\n } catch {\n // The close that follows reconnects and resubscribes.\n return;\n }\n }\n if (this.#outbox.length > 0 && this.#pumpTimer === undefined) {\n const wait = Math.max(\n this.#pausedUntil - now,\n Math.ceil(((1 - this.#tokens) * 1000) / messagesPerSecond),\n 1,\n );\n this.#pumpTimer = this.#timers.setTimeout(() => {\n this.#pumpTimer = undefined;\n this.#pump();\n }, wait);\n }\n }\n\n /* ---------------------------------------------------------------- *\n * Receiving\n * ---------------------------------------------------------------- */\n\n /** One frame from the server. */\n #onMessage(data: unknown): void {\n this.#armWatchdog();\n let frame: JobsApiServerMessage;\n try {\n frame = JSON.parse(String(data)) as JobsApiServerMessage;\n } catch {\n return;\n }\n const swallow = this.#swallowGap;\n this.#swallowGap = false;\n switch (frame.type) {\n case \"hello\":\n this.#onHello(frame);\n return;\n case \"ack\":\n this.#onAck(frame);\n return;\n case \"event\":\n this.#onEvent(frame);\n return;\n case \"gap\":\n if (swallow && frame.reason !== \"slow-consumer\") {\n return;\n }\n this.#gap(\n frame.channels ? this.#holdersOf(frame.channels) : this.#holders,\n frame,\n );\n return;\n case \"error\":\n this.#onError(frame);\n break;\n default:\n // heartbeat, pong: liveness only, which the watchdog already noted.\n break;\n }\n }\n\n /** The greeting: the connection is usable. */\n #onHello(hello: JobsApiHelloMessage): void {\n this.sessionId = hello.sessionId;\n this.#heartbeatMs = hello.heartbeatMs;\n this.#armWatchdog();\n this.#liveSince = this.#timers.now();\n this.#attempt = 0;\n this.#refusedAttempts = 0;\n\n if (this.#epoch === undefined) {\n this.#epoch = hello.epoch;\n this.#lastSeq = hello.seq;\n } else if (this.#epoch !== hello.epoch) {\n // A restart or another replica: every seq is meaningless now.\n this.#epoch = hello.epoch;\n this.#lastSeq = hello.seq;\n this.#seen.clear();\n this.#resuming = undefined;\n this.#pendingGap = undefined;\n this.#gap(this.#holders, {\n type: \"gap\",\n epoch: hello.epoch,\n fromSeq: 0,\n toSeq: hello.seq,\n reason: \"epoch-changed\",\n });\n } else if (this.#holders.size > 0) {\n // An interrupted split resume is resumed from where it started.\n const interrupted =\n this.#resuming?.resume.epoch === this.#epoch\n ? this.#resuming.resume.afterSeq\n : undefined;\n this.#resume = {\n epoch: this.#epoch,\n afterSeq: interrupted ?? this.#lastSeq,\n };\n }\n\n this.#setSnapshot({ state: \"live\", detail: null });\n if (this.#pendingGap) {\n const reason = this.#pendingGap;\n this.#pendingGap = undefined;\n this.#gap(this.#holders, {\n type: \"gap\",\n epoch: hello.epoch,\n fromSeq: 0,\n toSeq: hello.seq,\n reason,\n });\n }\n this.#timers.clearTimeout(this.#reconnectTimer);\n this.#flush();\n }\n\n /** An answer to a subscribe or unsubscribe. */\n #onAck(ack: JobsApiAckMessage): void {\n const pending = this.#pending.get(ack.id);\n this.#pending.delete(ack.id);\n if (!pending) {\n return;\n }\n if (pending.resuming) {\n this.#settleResumeFrame(ack.id);\n }\n const rejected = ack.rejected ?? [];\n if (pending.op === \"unsubscribe\") {\n for (const key of ack.channels) {\n const raws = this.#rawByKey.get(key);\n if (raws) {\n for (const raw of pending.channels) {\n raws.delete(raw);\n }\n if (raws.size === 0) {\n this.#rawByKey.delete(key);\n }\n }\n }\n return;\n }\n\n // Canonical names: the accepted names, in order, are the sent ones\n // less the rejected ones (the raw string is echoed, §8.1 f).\n const refused = new Set(rejected.map((rejection) => rejection.channel));\n const accepted = pending.channels.filter((raw) => !refused.has(raw));\n if (accepted.length === ack.channels.length) {\n accepted.forEach((raw, index) => {\n const key = ack.channels[index];\n if (key !== raw) {\n let raws = this.#rawByKey.get(key);\n if (!raws) {\n raws = new Set();\n this.#rawByKey.set(key, raws);\n }\n raws.add(raw);\n }\n });\n }\n if (accepted.length > 0 && this.#snapshot.detail === EVENTS_UNAVAILABLE) {\n this.#setSnapshot({ detail: null });\n }\n let changed = false;\n for (const raw of accepted) {\n if (this.#rejections.delete(raw)) {\n changed = true;\n }\n }\n for (const rejection of rejected) {\n const sent = this.#sent.get(rejection.channel);\n if (sent) {\n sent.rejected = true;\n }\n this.#rejections.set(rejection.channel, rejection);\n changed = true;\n }\n if (changed) {\n for (const holder of this.#holders) {\n this.#refreshRejected(holder);\n }\n }\n for (const rejection of rejected) {\n this.#reportAuthFailure(rejection.status);\n }\n\n if (\n ack.channels.length > 0 &&\n (ack.resumed === false || (ack.resumed === true && pending.splitResume))\n ) {\n // After `resumed: false` the server's own gap follows: it is covered here.\n this.#swallowGap = ack.resumed === false;\n this.#gap(this.#holdersOf(ack.channels), {\n type: \"gap\",\n epoch: this.#epoch ?? \"\",\n fromSeq: 0,\n toSeq: ack.seq,\n reason: \"resume-expired\",\n channels: ack.channels,\n });\n }\n }\n\n /** A resuming subscribe was answered; once all were, the position may advance. */\n #settleResumeFrame(id: string): void {\n const resuming = this.#resuming;\n if (!resuming?.unacked.delete(id)) {\n return;\n }\n if (resuming.unacked.size === 0) {\n this.#resuming = undefined;\n }\n }\n\n /** An event: de-duplicated by `seq`, delivered once to each holder it concerns. */\n #onEvent(message: JobsApiEventMessage): void {\n if (this.#epoch !== undefined && message.epoch !== this.#epoch) {\n return;\n }\n if (message.seq > this.#lastSeq) {\n this.#lastSeq = message.seq;\n }\n this.#setSnapshot({ lastEventAt: this.#timers.now() });\n\n let delivered = this.#seen.get(message.seq);\n if (!delivered) {\n delivered = new Set();\n this.#seen.set(message.seq, delivered);\n if (this.#seen.size > this.#options.seenLimit) {\n const oldest = this.#seen.keys().next().value;\n if (oldest !== undefined) {\n this.#seen.delete(oldest);\n }\n }\n }\n const { event } = message;\n for (const holder of this.#holdersOf(message.subscriptions)) {\n if (delivered.has(holder)) {\n continue;\n }\n if (holder.filter && !holder.filter.has(event.type)) {\n continue;\n }\n delivered.add(holder);\n this.#call(() => holder.spec.onEvent?.(event));\n }\n }\n\n /** An `error` frame. */\n #onError(error: JobsApiErrorMessage): void {\n const pending =\n error.id === undefined ? undefined : this.#pending.get(error.id);\n if (error.id !== undefined) {\n this.#pending.delete(error.id);\n }\n if (error.code === \"RATE_LIMITED\") {\n this.#tokens = 0;\n this.#pausedUntil = this.#timers.now() + this.#options.rateLimitPauseMs;\n }\n if (pending) {\n if (pending.resuming) {\n // Asked again, it goes without `resume`: nothing will replay what\n // its channels missed, so their holders refetch instead.\n this.#settleResumeFrame(error.id!);\n this.#gap(this.#holdersOf(pending.channels), {\n type: \"gap\",\n epoch: this.#epoch ?? \"\",\n fromSeq: 0,\n toSeq: this.#lastSeq,\n reason: \"resume-expired\",\n channels: pending.channels,\n });\n }\n // The frame had no effect: forget what it asked, so the next reconcile asks again.\n if (pending.op === \"subscribe\") {\n for (const channel of pending.channels) {\n if (this.#sent.get(channel)?.filter === pending.filter) {\n this.#sent.delete(channel);\n }\n }\n } else {\n for (const channel of pending.channels) {\n if (!this.#sent.has(channel)) {\n this.#sent.set(channel, { filter: \"\", rejected: false });\n }\n }\n }\n if (\n error.code === \"RATE_LIMITED\" ||\n error.code === \"EVENTS_UNAVAILABLE\" ||\n error.code === \"INTERNAL\"\n ) {\n const delay =\n error.code === \"RATE_LIMITED\"\n ? this.#options.rateLimitPauseMs\n : this.backoffDelay(Math.min(this.#attempt + 3, 10));\n this.#timers.clearTimeout(this.#retryFlushTimer);\n this.#retryFlushTimer = this.#timers.setTimeout(() => {\n this.#retryFlushTimer = undefined;\n this.#flush();\n }, delay);\n } else if (pending.op === \"subscribe\") {\n // A refusal that asking again will not change: report it, do not loop.\n for (const channel of pending.channels) {\n this.#sent.set(channel, { filter: pending.filter, rejected: true });\n this.#rejections.set(channel, {\n channel,\n code: error.code,\n status: error.status,\n detail: error.detail,\n });\n }\n for (const holder of this.#holders) {\n this.#refreshRejected(holder);\n }\n }\n }\n if (error.code === \"EVENTS_UNAVAILABLE\") {\n this.#setSnapshot({ detail: EVENTS_UNAVAILABLE });\n }\n this.#reportAuthFailure(error.status);\n }\n\n /** Passes a 401 or 403 to `onAuthFailure`, after the failure itself was handled. */\n #reportAuthFailure(status: number | undefined): void {\n if (status === 401 || status === 403) {\n this.#options.onAuthFailure(status);\n }\n }\n}\n",
55
+ "import type { LiveClient, LiveClientOptions } from \"./client\";\nimport { createContext } from \"react\";\n\n/** What `LiveProvider` gives the hooks. */\nexport interface LiveContextValue {\n /** The one client, or `null` when live updates are off. */\n client: LiveClient | null;\n /** Why live updates are off, when `client` is `null`. */\n offDetail: string | null;\n /** A note to show while live (e.g. `events: \"local\"`), or `null`. */\n liveNote: string | null;\n /** `meta.events`. */\n events: \"push\" | \"poll\" | \"local\";\n /** `meta.publishing`. */\n publishing: boolean | null;\n}\n\n/** Carries the live client and what the status needs from `/meta`. */\nexport const LiveContext = createContext<LiveContextValue | null>(null);\n\n/**\n * Overrides for the client `LiveProvider` builds: a socket constructor,\n * timers, backoff. For tests and embedding; the app provides none.\n */\nexport type LiveClientOverrides = Partial<Omit<LiveClientOptions, \"url\">>;\n\n/** What {@link LiveOptionsContext} carries: client overrides, or live updates switched off. */\nexport interface LiveOptions extends LiveClientOverrides {\n /**\n * Keep live updates off (status `\"off\"`), whatever `/meta` says: for tests\n * that render the whole app with no server to connect to. Defaults to `false`.\n */\n disabled?: boolean;\n}\n\n/** Carries {@link LiveOptions} to `LiveProvider`. */\nexport const LiveOptionsContext = createContext<LiveOptions | null>(null);\n\n/** Shown while live when the API sees only its own process's events (`events: \"local\"`). */\nexport const LOCAL_EVENTS_NOTE =\n \"Only this API process's events are seen: workers in other processes are not\";\n",
56
+ "import type { EventName } from \"@kingsleyweb/bun-jobs/api/contract\";\n/**\n * Live updates over the API's WebSocket: the contract between the socket\n * client (this directory) and the screens that use it.\n *\n * One socket (`LiveProvider`, over a {@link LiveClient}) is shared by every\n * screen: each holds the channels it needs, the client refcounts them and\n * merges filters, and events are hints that invalidate queries. Outside a\n * `LiveProvider` everything reports `\"off\"` and polling is unchanged.\n */\nimport type { QueryKey } from \"@tanstack/react-query\";\nimport type {\n EventWire,\n JobsApiAckRejection,\n JobsApiGapMessage,\n} from \"../api/types\";\nimport type { LiveClientSnapshot } from \"./client\";\nimport { encodeJobId } from \"@kingsleyweb/bun-jobs/api/contract\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n use,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { LiveContext } from \"./context\";\n\n/**\n * Where live updates stand:\n * - `\"off\"`: no socket (the UI shows documentation only (`sections.manage`\n * false), the API has none, `events.connect` is refused, or the events are\n * only this process's (`events: \"local\"`) and nothing publishes);\n * - `\"connecting\"`: the first connection is being made;\n * - `\"live\"`: connected and subscribed;\n * - `\"reconnecting\"`: the connection dropped, a retry is scheduled;\n * - `\"refused\"`: the server refused the socket (a close or a failed upgrade\n * it will keep refusing); no more retries until reload.\n */\nexport type LiveState =\n \"off\" | \"connecting\" | \"live\" | \"reconnecting\" | \"refused\";\n\n/** What the header badge and the polling fallback read. */\nexport interface LiveStatus {\n /** See {@link LiveState}. */\n state: LiveState;\n /** Why it is `\"off\"`, `\"reconnecting\"` or `\"refused\"`, in words; `null` when live. */\n detail: string | null;\n /** `meta.events`: how events reach the API (`\"local\"` = only its own process). */\n events: \"push\" | \"poll\" | \"local\";\n /** `meta.publishing`: whether producers publish events (`null` = unknown). */\n publishing: boolean | null;\n /** When the last event frame arrived, epoch ms; `null` before any. */\n lastEventAt: number | null;\n}\n\n/** One screen's interest in some channels. */\nexport interface LiveSubscription {\n /** Channel names, from {@link liveChannels}. Refcounted across the app: several screens may hold one. */\n channels: readonly string[];\n /** Only these event types, on these channels. Omitted: all. Filters of screens sharing a channel are merged. */\n events?: readonly EventName[];\n /** Called for each event on these channels (after de-duplication). */\n onEvent?: (event: EventWire) => void;\n /** Called when the server reports a gap on these channels (events were lost: refetch). */\n onGap?: (gap: JobsApiGapMessage) => void;\n /** Subscribe only while `true`. Defaults to `true`. */\n enabled?: boolean;\n}\n\n/** Channel names (AsyncAPI `x-bun-jobs` channel families). */\nexport const liveChannels = {\n /** Every event (mode `both` only). */\n all: \"all\",\n /** Every queue event. */\n queues: \"queues\",\n /** Every runner event. */\n runners: \"runners\",\n /** One queue's events. */\n queue: (queue: string) => `queue/${queue}`,\n /** One job's events; the id is encoded as the server names it. */\n job: (queue: string, id: string) => `queue/${queue}/job/${encodeJobId(id)}`,\n /** One runner's events. */\n runner: (runner: string) => `runner/${runner}`,\n /** Every worker event, in every queue. Worker events are deliberately off `all` and `queues`, so a dashboard does not receive control traffic. */\n workers: \"workers\",\n /** One queue's worker events. */\n queueWorkers: (queue: string) => `queue/${queue}/workers`,\n} as const;\n\n/** How long events and gaps are gathered before one invalidation, in ms. */\nexport const LIVE_INVALIDATION_DELAY_MS = 250;\n\n/** The slowest a live screen still polls, as a safety net, in ms. */\nexport const LIVE_SAFETY_POLL_MS = 60_000;\n\n/** The client status outside a provider, or with no client. */\nconst OFF_SNAPSHOT: LiveClientSnapshot = {\n state: \"off\",\n detail: null,\n lastEventAt: null,\n};\n\n/** No rejections, one stable array. */\nconst NO_REJECTIONS: readonly JobsApiAckRejection[] = [];\n\n/** A subscribe function for no store. */\nconst noSubscribe = () => () => {};\n\n/** The client's snapshot, re-rendering on change; the \"off\" one without a client. */\nfunction useClientSnapshot(): LiveClientSnapshot {\n const client = use(LiveContext)?.client ?? null;\n return useSyncExternalStore(\n client?.subscribe ?? noSubscribe,\n client ? client.getSnapshot : () => OFF_SNAPSHOT,\n client ? client.getSnapshot : () => OFF_SNAPSHOT,\n );\n}\n\n/** Just the state, so a component re-renders on a state change and not on every event. */\nfunction useLiveState(): LiveState {\n const client = use(LiveContext)?.client ?? null;\n return useSyncExternalStore(\n client?.subscribe ?? noSubscribe,\n () => (client ? client.getSnapshot().state : \"off\"),\n () => (client ? client.getSnapshot().state : \"off\"),\n );\n}\n\n/** Where live updates stand. */\nexport function useLiveStatus(): LiveStatus {\n const context = use(LiveContext);\n const snapshot = useClientSnapshot();\n return useMemo((): LiveStatus => {\n if (!context) {\n return {\n state: \"off\",\n detail: \"Live updates are not available here\",\n events: \"local\",\n publishing: null,\n lastEventAt: null,\n };\n }\n const detail = !context.client\n ? context.offDetail\n : snapshot.state === \"live\"\n ? (snapshot.detail ?? context.liveNote)\n : snapshot.detail;\n return {\n state: context.client ? snapshot.state : \"off\",\n detail,\n events: context.events,\n publishing: context.publishing,\n lastEventAt: snapshot.lastEventAt,\n };\n }, [context, snapshot]);\n}\n\n/** Holds a subscription for the component's lifetime; returns the channels the server rejected. */\nexport function useLiveSubscription(subscription: LiveSubscription): {\n /** Channels the server refused (bad name, not permitted, limit), with why. */\n rejected: readonly JobsApiAckRejection[];\n} {\n const client = use(LiveContext)?.client ?? null;\n // The callbacks are read through a ref, so a re-render with new closures\n // does not resubscribe.\n const callbacksRef = useRef(subscription);\n useLayoutEffect(() => {\n callbacksRef.current = subscription;\n });\n\n const enabled = subscription.enabled !== false;\n const channelsKey = subscription.channels.join(\"\\n\");\n const eventsKey = subscription.events?.join(\",\");\n // Rejections belong to one hold: a changed subscription starts clean.\n const holdKey = `${enabled}|${eventsKey ?? \"*\"}|${channelsKey}`;\n const [reported, setReported] = useState<{\n /** The hold they were reported for. */\n key: string;\n /** The rejections. */\n rejected: readonly JobsApiAckRejection[];\n }>({ key: holdKey, rejected: NO_REJECTIONS });\n\n useEffect(() => {\n if (!client || !enabled || channelsKey === \"\") {\n return;\n }\n const hold = client.hold({\n channels: channelsKey.split(\"\\n\"),\n ...(eventsKey === undefined\n ? {}\n : {\n events: eventsKey.split(\",\") as NonNullable<\n LiveSubscription[\"events\"]\n >,\n }),\n onEvent: (event) => callbacksRef.current.onEvent?.(event),\n onGap: (gap) => callbacksRef.current.onGap?.(gap),\n onRejected: (rejected) =>\n setReported({\n key: `${enabled}|${eventsKey ?? \"*\"}|${channelsKey}`,\n rejected,\n }),\n });\n return () => hold.release();\n }, [client, enabled, channelsKey, eventsKey]);\n\n const rejected =\n client && reported.key === holdKey ? reported.rejected : NO_REJECTIONS;\n return { rejected };\n}\n\n/**\n * Invalidates `keys` when an event arrives on `channels` (coalesced, about\n * 250 ms) or a gap is reported. The screens' one-line way to be live.\n */\nexport function useLiveInvalidation(\n channels: readonly string[],\n keys: readonly QueryKey[],\n options: {\n /** Only these event types trigger it. Omitted: all. */\n events?: readonly EventName[];\n /** Subscribe only while `true`. Defaults to `true`. */\n enabled?: boolean;\n } = {},\n): void {\n const queryClient = useQueryClient();\n const keysRef = useRef(keys);\n useLayoutEffect(() => {\n keysRef.current = keys;\n });\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n useEffect(\n () => () => {\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n },\n [],\n );\n\n const schedule = () => {\n if (timerRef.current !== undefined) {\n return;\n }\n timerRef.current = setTimeout(() => {\n timerRef.current = undefined;\n for (const queryKey of keysRef.current) {\n void queryClient.invalidateQueries({ queryKey });\n }\n }, LIVE_INVALIDATION_DELAY_MS);\n };\n\n useLiveSubscription({\n channels,\n ...(options.events ? { events: options.events } : {}),\n enabled: options.enabled,\n onEvent: schedule,\n onGap: schedule,\n });\n}\n\n/**\n * The refetch interval to use given live updates: `base` while not live; while\n * live, a slow safety net (events are hints, and pub/sub is at-most-once), or\n * `false` when `base` is `false`.\n */\nexport function usePollInterval(base: number | false): number | false {\n const state = useLiveState();\n const publishing = use(LiveContext)?.publishing;\n return pollInterval(base, state === \"live\" && publishing !== false);\n}\n\n/** {@link usePollInterval}'s rule: `base`, or while live `false` / `max(base × 6, 60 s)`. */\nexport function pollInterval(\n base: number | false,\n live: boolean,\n): number | false {\n if (!live || base === false) {\n return base;\n }\n return Math.max(base * 6, LIVE_SAFETY_POLL_MS);\n}\n",
57
+ "import type { ReactNode } from \"react\";\nimport type { LiveContextValue, LiveOptions } from \"./context\";\nimport { use, useEffect, useMemo } from \"react\";\nimport { useUiConfig } from \"../context\";\nimport { useUnauthorizedRedirect } from \"@kingsleyweb/bun-ui/docs/embed/unauthorized\";\nimport { useCan, useMeta } from \"../meta/hooks\";\nimport { LiveClient, liveSocketUrl } from \"./client\";\nimport { LiveContext, LiveOptionsContext, LOCAL_EVENTS_NOTE } from \"./context\";\n\n/** Props of {@link LiveProvider}. */\nexport interface LiveProviderProps {\n /** The app. */\n children: ReactNode;\n /** Client overrides (socket constructor, timers), or `disabled`. Defaults to {@link LiveOptionsContext}'s, else none. */\n options?: LiveOptions;\n}\n\n/**\n * Owns the one socket for the app (inside MetaProvider and the query client).\n *\n * A client is created when the UI manages anything (`sections.manage`: a\n * docs-only UI has no live screen), the API has a socket (`meta.websocket`),\n * the caller may connect (`events.connect`), and nothing rules events out\n * (`events: \"local\"` with `publishing: false`); otherwise the status is `\"off\"`\n * with the reason. The client is built during render (it has no side\n * effects) and started and stopped in an effect, so StrictMode's\n * mount–unmount–mount stops it and starts it again.\n */\nexport function LiveProvider({ children, options }: LiveProviderProps) {\n const meta = useMeta();\n const config = useUiConfig();\n const canConnect = useCan(\"events.connect\");\n const contextOptions = use(LiveOptionsContext);\n const unauthorized = useUnauthorizedRedirect();\n // Kept as one object: the client is rebuilt only when it changes.\n const source = options ?? contextOptions;\n const disabled = source?.disabled === true;\n\n const websocket = meta.websocket;\n const offDetail = disabled\n ? \"Live updates are disabled\"\n : !config.sections.manage\n ? \"Live updates are off: this UI shows documentation only\"\n : !websocket\n ? \"The API has no live-events socket\"\n : !canConnect\n ? \"You may not connect to live events (events.connect)\"\n : meta.events === \"local\" && meta.publishing === false\n ? \"Nothing publishes events to this API\"\n : null;\n\n const url =\n websocket && offDetail === null\n ? liveSocketUrl(\n { path: websocket.path, port: websocket.port ?? null },\n config.apiBase,\n globalThis.location?.href ?? \"http://localhost/\",\n )\n : null;\n const heartbeatMs = websocket?.heartbeatMs;\n\n const client = useMemo(() => {\n if (url === null) {\n return null;\n }\n const { disabled: _disabled, ...overrides } = source ?? {};\n return new LiveClient({\n ...(heartbeatMs === undefined ? {} : { heartbeatMs }),\n ...(unauthorized.enabled\n ? { onAuthFailure: (status) => unauthorized.report(status) }\n : {}),\n ...overrides,\n url,\n });\n }, [url, heartbeatMs, source, unauthorized]);\n\n useEffect(() => {\n if (!client) {\n return;\n }\n client.start();\n return () => client.stop();\n }, [client]);\n\n const value = useMemo(\n (): LiveContextValue => ({\n client,\n offDetail: client ? null : offDetail,\n liveNote: meta.events === \"local\" ? LOCAL_EVENTS_NOTE : null,\n events: meta.events,\n publishing: meta.publishing,\n }),\n [client, offDetail, meta.events, meta.publishing],\n );\n\n return <LiveContext value={value}>{children}</LiveContext>;\n}\n",
58
+ "import type { BadgeTone } from \"../components/Badge\";\nimport type { LiveStatus } from \"../live\";\nimport { POLL_INTERVAL_MS } from \"../queryClient\";\n\n/** What the live-status badge says. */\nexport interface LiveStatusInfo {\n /** Short badge text. */\n text: string;\n /** Tooltip explaining it. */\n title: string;\n /** Colour. */\n tone: BadgeTone;\n}\n\n/** Explanations of each `meta.events` value (contract §4.7). */\nconst EVENTS_EXPLAINED = {\n push: \"events are pushed across processes (near real time)\",\n poll: \"events are read from the backend on an interval, across processes\",\n local: \"events are only seen from the API's own process\",\n} as const;\n\n/** Options of {@link liveStatusInfo}. */\nexport interface LiveStatusInfoOptions {\n /** The UI shows documentation only (`sections.manage` off): the badge says \"Live off\". Defaults to `false`. */\n docsOnly?: boolean;\n}\n\n/**\n * The badge's content, from the live client's status: `Live`,\n * `Connecting…`, `Reconnecting…`, or `Polling Ns` when there is no socket\n * (off) or the server refused it. A backend whose events are only its own\n * process's (`events: \"local\"`), or whose producers do not publish\n * (`publishing: false`), is a warning in every state, and the text says why.\n */\nexport function liveStatusInfo(\n status: LiveStatus,\n options: LiveStatusInfoOptions = {},\n): LiveStatusInfo {\n if (options.docsOnly) {\n // No screen here uses live updates or polls, so neither the poll period\n // nor the backend's event warnings mean anything.\n return {\n text: \"Live off\",\n title:\n \"Live updates are off: this UI shows documentation only, and nothing on it refreshes.\",\n tone: \"neutral\",\n };\n }\n const seconds = Math.round(POLL_INTERVAL_MS / 1000);\n const { events, publishing } = status;\n const publishingText =\n publishing === null ? \"unknown\" : publishing ? \"yes\" : \"no\";\n const warnings = [\n ...(events === \"local\" ? [\"events: local\"] : []),\n ...(publishing === false ? [\"publishing: no\"] : []),\n ];\n const backend = `The backend reports that ${EVENTS_EXPLAINED[events]}. Producers publishing events: ${publishingText}.`;\n const detail = status.detail ? ` ${sentence(status.detail)}` : \"\";\n const suffix = warnings.length > 0 ? ` · ${warnings.join(\" · \")}` : \"\";\n const warn = warnings.length > 0;\n\n switch (status.state) {\n case \"live\":\n return {\n text: `Live${suffix}`,\n title: `Live updates are on: events from the API's socket refresh the screens as things change, with a slow poll as a safety net. ${backend}`,\n tone: warn ? \"warning\" : \"success\",\n };\n case \"connecting\":\n return {\n text: `Connecting…${suffix}`,\n title: `Connecting to the API's live updates; until then, screens refresh every ${seconds} seconds. ${backend}`,\n tone: warn ? \"warning\" : \"info\",\n };\n case \"reconnecting\":\n return {\n text: `Reconnecting…${suffix}`,\n title: `Live updates dropped and will reconnect; meanwhile screens refresh every ${seconds} seconds.${detail} ${backend}`,\n tone: \"warning\",\n };\n case \"refused\":\n return {\n text: `Polling ${seconds}s${suffix}`,\n title: `The API refused live updates; screens refresh every ${seconds} seconds. Reload to try again.${detail} ${backend}`,\n tone: \"warning\",\n };\n case \"off\":\n return {\n text: `Polling ${seconds}s${suffix}`,\n title: `Live updates are off; screens refresh every ${seconds} seconds.${detail} ${backend}`,\n tone: warn ? \"warning\" : \"neutral\",\n };\n }\n}\n\n/** `text` ending in a full stop. */\nfunction sentence(text: string): string {\n return /[.!?…]$/.test(text) ? text : `${text}.`;\n}\n",
59
+ "import { useState } from \"react\";\nimport { Badge } from \"../components/Badge\";\nimport { useUiConfig } from \"../context\";\nimport { useLiveStatus } from \"../live\";\nimport { liveStatusInfo } from \"./liveStatusInfo\";\n\n/**\n * The header's live-status badge: live, connecting, reconnecting, or polling\n * (see {@link liveStatusInfo}).\n *\n * Beside it, a polite live region announces the badge's text when the\n * connection's state changes — never on the first render (the page load is\n * not news) and never for a change of detail alone, so a screen reader hears\n * \"Live updates: Reconnecting…\" once per transition rather than a stream.\n */\nexport function LiveStatus() {\n const status = useLiveStatus();\n const { sections } = useUiConfig();\n const info = liveStatusInfo(status, { docsOnly: !sections.manage });\n // What the region says, and the state it was last updated for. Adjusted\n // while rendering (not in an effect), so the announcement lands in the\n // same commit as the badge.\n const [spoken, setSpoken] = useState({ state: status.state, text: \"\" });\n if (spoken.state !== status.state) {\n setSpoken({ state: status.state, text: `Live updates: ${info.text}` });\n }\n\n return (\n <>\n <span\n className=\"live-status\"\n data-testid=\"live-status\"\n data-state={status.state}\n >\n <Badge\n tone={info.tone}\n title={info.title}\n >\n <span\n className=\"live-dot\"\n aria-hidden=\"true\"\n />\n {info.text}\n </Badge>\n </span>\n <span\n className=\"visually-hidden\"\n aria-live=\"polite\"\n data-testid=\"live-status-announcer\"\n >\n {spoken.text}\n </span>\n </>\n );\n}\n",
60
+ "import type { UiTheme } from \"../../lib/jobs/browser/config.ts\";\n\n/** `localStorage` key the chosen theme is remembered under. */\nexport const THEME_STORAGE_KEY = \"bun-jobs-ui:theme\";\n\n/** Every theme, in the order the toggle cycles through them. */\nexport const THEMES: readonly UiTheme[] = [\"system\", \"light\", \"dark\"];\n\n/** Whether a value is a theme. */\nexport function isTheme(value: unknown): value is UiTheme {\n return THEMES.includes(value as UiTheme);\n}\n\n/** The theme after `theme` in the toggle's cycle. */\nexport function nextTheme(theme: UiTheme): UiTheme {\n return THEMES[(THEMES.indexOf(theme) + 1) % THEMES.length];\n}\n\n/** The remembered theme, or `null`. Storage can be absent or throw (private mode, blocked site data). */\nexport function readStoredTheme(): UiTheme | null {\n try {\n const value = globalThis.localStorage?.getItem(THEME_STORAGE_KEY);\n return isTheme(value) ? value : null;\n } catch {\n return null;\n }\n}\n\n/** Remembers a theme; a storage failure only means it is not remembered. */\nexport function storeTheme(theme: UiTheme): void {\n try {\n globalThis.localStorage?.setItem(THEME_STORAGE_KEY, theme);\n } catch {\n // Not remembered; the page still works.\n }\n}\n\n/** The theme to start in: the remembered choice, else the mount's default. */\nexport function initialTheme(configured: UiTheme): UiTheme {\n return readStoredTheme() ?? configured;\n}\n\n/**\n * Applies a theme to the document: `data-theme=\"light\"|\"dark\"` forces one,\n * no attribute follows `prefers-color-scheme` (see `styles/tokens.css`).\n */\nexport function applyTheme(\n theme: UiTheme,\n root: HTMLElement = document.documentElement,\n): void {\n if (theme === \"system\") {\n delete root.dataset.theme;\n } else {\n root.dataset.theme = theme;\n }\n}\n",
61
+ "import type { UiTheme } from \"../../../lib/jobs/browser/config.ts\";\nimport { useState } from \"react\";\nimport { Button } from \"../components/Button\";\nimport { useUiConfig } from \"../context\";\nimport { applyTheme, initialTheme, nextTheme, storeTheme } from \"../theme\";\n\n/** Labels of each theme, for the toggle. */\nconst THEME_LABELS: Readonly<Record<UiTheme, string>> = {\n system: \"System\",\n light: \"Light\",\n dark: \"Dark\",\n};\n\n/** Cycles system → light → dark, remembering the choice in `localStorage`. */\nexport function ThemeToggle() {\n const config = useUiConfig();\n const [theme, setTheme] = useState<UiTheme>(() => initialTheme(config.theme));\n const next = nextTheme(theme);\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"theme-toggle\"\n aria-label={`Theme: ${THEME_LABELS[theme]}. Switch to ${THEME_LABELS[next]}.`}\n title={`Theme: ${THEME_LABELS[theme]}`}\n onClick={() => {\n setTheme(next);\n storeTheme(next);\n applyTheme(next);\n }}\n >\n <span aria-hidden=\"true\">Theme:</span> {THEME_LABELS[theme]}\n </Button>\n );\n}\n",
62
+ "import type { ReactNode } from \"react\";\nimport type { NavItem } from \"./nav\";\nimport { Chip } from \"../components/Badge\";\nimport { useUiConfig } from \"../context\";\nimport { useMeta } from \"../meta/hooks\";\nimport { Link } from \"../router\";\nimport { KeyboardShortcuts } from \"./KeyboardShortcuts\";\nimport { LiveStatus } from \"./LiveStatus\";\nimport { ThemeToggle } from \"./ThemeToggle\";\n\n/** Props of {@link Layout}. */\nexport interface LayoutProps {\n /** The entries the caller can use. */\n nav: readonly NavItem[];\n /** The current screen. */\n children: ReactNode;\n}\n\n/** The header: brand, namespace/driver/mode chips, live status, theme toggle. */\nexport function Header() {\n const config = useUiConfig();\n const meta = useMeta();\n return (\n <header className=\"app-header\">\n <Link\n to=\"/\"\n className=\"app-brand\"\n >\n {config.title}\n </Link>\n <div\n className=\"app-chips\"\n aria-label=\"API\"\n >\n <Chip\n label=\"namespace\"\n value={meta.namespace}\n />\n <Chip\n label=\"driver\"\n value={meta.driver.name}\n />\n <Chip\n label=\"mode\"\n value={meta.mode}\n />\n {meta.readOnly && (\n <Chip\n label=\"read-only\"\n value=\"yes\"\n />\n )}\n </div>\n <div className=\"app-header-end\">\n <LiveStatus />\n <ThemeToggle />\n </div>\n </header>\n );\n}\n\n/** The section nav. */\nexport function Sidebar({ nav }: { nav: readonly NavItem[] }) {\n return (\n <nav\n className=\"app-nav\"\n aria-label=\"Sections\"\n >\n <NavList items={nav} />\n </nav>\n );\n}\n\n/**\n * One level of the section nav. A parent entry (API docs) is current only on\n * its own page, so exactly one link carries `aria-current=\"page\"`; its\n * children match their whole subtree.\n */\nfunction NavList({\n items,\n nested = false,\n}: {\n /** The entries at this level. */\n items: readonly NavItem[];\n /** Whether this list sits under a parent entry. */\n nested?: boolean;\n}) {\n return (\n <ul className={nested ? \"app-nav-sub\" : undefined}>\n {items.map((item) => (\n <li key={item.id}>\n <Link\n to={item.to}\n activeMatch={item.children?.length ? \"exact\" : \"prefix\"}\n className=\"app-nav-link\"\n >\n {item.label}\n </Link>\n {item.children?.length ? (\n <NavList\n items={item.children}\n nested\n />\n ) : null}\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * The app frame: a skip link to the main landmark, the header (banner), the\n * section nav and the screen in `<main>`, plus the keyboard shortcuts (`/`\n * and `?`, see `shortcuts.ts`). Its root carries `data-testid=\"app-ready\"`:\n * it renders only once the bootstrap loaded, and the E2E smoke waits on it.\n */\nexport function Layout({ nav, children }: LayoutProps) {\n return (\n <div\n className=\"app\"\n data-testid=\"app-ready\"\n >\n <a\n className=\"skip-link\"\n href=\"#main\"\n onClick={(event) => {\n // Focus the main landmark directly: a fragment navigation would\n // put `#main` in the app's URL, and not every browser moves focus.\n const main = document.getElementById(\"main\");\n if (main) {\n event.preventDefault();\n main.focus();\n }\n }}\n >\n Skip to content\n </a>\n <Header />\n <div className=\"app-body\">\n <Sidebar nav={nav} />\n <main\n id=\"main\"\n className=\"app-main\"\n tabIndex={-1}\n >\n {children}\n </main>\n </div>\n <KeyboardShortcuts />\n </div>\n );\n}\n",
63
+ "import type { JobsUiSections } from \"../../../lib/jobs/browser/config.ts\";\nimport type { JobsApiAction } from \"../api/contract\";\nimport type { MetaDto } from \"../api/types\";\n\n/** Stable ids of the nav entries. */\nexport type NavId =\n | \"overview\"\n | \"queues\"\n | \"workers\"\n | \"summoning\"\n | \"providers\"\n | \"runners\"\n | \"events\"\n | \"docs\"\n | \"docs-http\"\n | \"docs-ws\";\n\n/** One sidebar entry. */\nexport interface NavItem {\n /** Stable id. */\n id: NavId;\n /** Visible label. */\n label: string;\n /** App path it links to. */\n to: string;\n /** Entries nested under this one (API docs → HTTP API, WebSocket API); absent for a leaf. */\n children?: NavItem[];\n}\n\n/** What {@link buildNav} decides from. */\nexport interface NavInputs {\n /** `GET /meta`. */\n meta: MetaDto;\n /** `JobsUiConfig.sections`. */\n sections: JobsUiSections;\n /** Whether the caller may perform an action (absent = no). */\n can: (action: JobsApiAction) => boolean;\n}\n\n/**\n * The entries the caller can use, in display order. An entry is **absent**\n * (never disabled) when its section is switched off, the API's mode prunes\n * its routes, or the caller lacks the action it lists with:\n *\n * - Overview — `manage`, mode jobs/both, and `metrics.read` or `queues.list`.\n * - Queues — `manage`, mode jobs/both, `queues.list`.\n * - Workers — `manage`, mode jobs/both, a worker registry (`meta.features.workers`), `workers.list`.\n * - Summoning — `manage`, mode jobs/both, `GET /summon` served\n * (`meta.features.summonList`: off in runner mode, absent on an older API),\n * `queues.list` (the route's action; each row is then filtered by\n * `queues.read` on its queue, server-side).\n * - Providers — `manage`, the provider routes served (`meta.features.providers`,\n * off in runner mode), and the opt-in `providers.read`.\n * - Runners — `manage`, mode runner/both, `runners.list`.\n * - Events — `manage`, a socket (`meta.websocket`), `events.connect`.\n * - API docs — `docs`, docs routed (`meta.docs`, the runtime authority), `docs.read`.\n * Nested under it: HTTP API always, WebSocket API when the API documents a\n * socket (`meta.docs.asyncapi`).\n */\nexport function buildNav({ meta, sections, can }: NavInputs): NavItem[] {\n const items: NavItem[] = [];\n const jobsMode = meta.mode === \"jobs\" || meta.mode === \"both\";\n const runnerMode = meta.mode === \"runner\" || meta.mode === \"both\";\n\n if (sections.manage) {\n if (jobsMode && (can(\"metrics.read\") || can(\"queues.list\"))) {\n items.push({\n id: \"overview\",\n label: \"Overview\",\n to: \"/\",\n });\n }\n if (jobsMode && can(\"queues.list\")) {\n items.push({\n id: \"queues\",\n label: \"Queues\",\n to: \"/queues\",\n });\n }\n if (jobsMode && meta.features.workers && can(\"workers.list\")) {\n items.push({\n id: \"workers\",\n label: \"Workers\",\n to: \"/workers\",\n });\n }\n if (jobsMode && meta.features.summonList === true && can(\"queues.list\")) {\n items.push({\n id: \"summoning\",\n label: \"Summoning\",\n to: \"/summon\",\n });\n }\n if (meta.features.providers && can(\"providers.read\")) {\n items.push({\n id: \"providers\",\n label: \"Providers\",\n to: \"/providers\",\n });\n }\n if (runnerMode && can(\"runners.list\")) {\n items.push({\n id: \"runners\",\n label: \"Runners\",\n to: \"/runners\",\n });\n }\n if (meta.websocket && can(\"events.connect\")) {\n items.push({\n id: \"events\",\n label: \"Events\",\n to: \"/events\",\n });\n }\n }\n if (sections.docs && meta.docs && can(\"docs.read\")) {\n const children: NavItem[] = [\n { id: \"docs-http\", label: \"HTTP API\", to: \"/docs/http\" },\n ];\n if (meta.docs.asyncapi !== undefined) {\n children.push({ id: \"docs-ws\", label: \"WebSocket API\", to: \"/docs/ws\" });\n }\n items.push({ id: \"docs\", label: \"API docs\", to: \"/docs\", children });\n }\n return items;\n}\n",
64
+ "import type { NavItem } from \"./nav\";\nimport { useMemo } from \"react\";\nimport { useUiConfig } from \"../context\";\nimport { useCanFn, useMeta } from \"../meta/hooks\";\nimport { buildNav } from \"./nav\";\n\n/** The nav entries for this caller (see {@link buildNav}). */\nexport function useNav(): NavItem[] {\n const meta = useMeta();\n const can = useCanFn();\n const { sections } = useUiConfig();\n return useMemo(\n () => buildNav({ meta, sections, can }),\n [meta, sections, can],\n );\n}\n",
65
+ "import type { ReactNode } from \"react\";\n\n/** Props of {@link EmptyState}. */\nexport interface EmptyStateProps {\n /** The headline, e.g. \"No queues yet\". */\n title: string;\n /** A sentence of explanation. */\n description?: ReactNode;\n /** A follow-up control. */\n action?: ReactNode;\n /**\n * Render the headline as a heading of this level instead of a paragraph.\n * Use `1` when the empty state IS the screen (a not-found or hidden screen\n * has no other `h1`). Defaults to none (a paragraph).\n */\n headingLevel?: 1 | 2 | 3;\n}\n\n/** What a list or screen shows when there is nothing to show. */\nexport function EmptyState({\n title,\n description,\n action,\n headingLevel,\n}: EmptyStateProps) {\n const Title = headingLevel ? (`h${headingLevel}` as const) : \"p\";\n return (\n <div className=\"empty-state\">\n <Title className=\"empty-state-title\">{title}</Title>\n {description && <p className=\"empty-state-description\">{description}</p>}\n {action && <div className=\"empty-state-action\">{action}</div>}\n </div>\n );\n}\n",
66
+ "import type { ReactNode } from \"react\";\nimport type { PermissionsTarget } from \"../api/client\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { queryKeys } from \"../api/queryKeys\";\nimport { useApiClient } from \"../context\";\nimport { useParams } from \"../routing\";\nimport {\n PermissionScopeStatusContext,\n ScopedPermissionsContext,\n} from \"./hooks\";\n\n/** Props of {@link PermissionScope}. */\nexport interface PermissionScopeProps {\n /** The queue or runner the screen shows; its actions are asked about it. */\n target: PermissionsTarget;\n /** The screen. */\n children: ReactNode;\n}\n\n/**\n * Asks `/meta/permissions` about one queue or runner, so a host whose\n * `authorize` decides per target gets buttons that match. Until the answer\n * arrives (or if it fails), the untargeted map from the bootstrap applies to\n * buttons and panels, which never wait on it. A screen whose own read the\n * target's answer might refuse (the job and runner screens) waits for it\n * through `usePermissionsSettled()` instead.\n */\nexport function PermissionScope({ target, children }: PermissionScopeProps) {\n const api = useApiClient();\n const scoped = useQuery({\n queryKey: queryKeys.permissions(target),\n queryFn: ({ signal }) => api.getPermissions(target, signal),\n });\n return (\n <PermissionScopeStatusContext\n value={scoped.isPending ? \"pending\" : \"settled\"}\n >\n <ScopedPermissionsContext value={scoped.data ?? null}>\n {children}\n </ScopedPermissionsContext>\n </PermissionScopeStatusContext>\n );\n}\n\n/** Props of {@link QueuePermissionScope}. */\nexport interface QueuePermissionScopeProps {\n /** The screen, routed under `/queues/:queue` or `/workers/:queue/:key`. */\n children: ReactNode;\n}\n\n/** A {@link PermissionScope} for the queue in the route's `:queue` param. */\nexport function QueuePermissionScope({ children }: QueuePermissionScopeProps) {\n const { queue = \"\" } = useParams<{ queue: string }>();\n return <PermissionScope target={{ queue }}>{children}</PermissionScope>;\n}\n\n/** Props of {@link RunnerPermissionScope}. */\nexport interface RunnerPermissionScopeProps {\n /** The screen, routed under `/runners/:runner`. */\n children: ReactNode;\n}\n\n/** A {@link PermissionScope} for the runner in the route's `:runner` param. */\nexport function RunnerPermissionScope({\n children,\n}: RunnerPermissionScopeProps) {\n const { runner = \"\" } = useParams<{ runner: string }>();\n return <PermissionScope target={{ runner }}>{children}</PermissionScope>;\n}\n",
67
+ "import { cx } from \"./classNames\";\n\n/** Props of {@link Spinner}. */\nexport interface SpinnerProps {\n /** What is loading; read by screen readers. Defaults to `\"Loading\"`. */\n label?: string;\n /** Show the label next to the spinner. Defaults to `false` (screen readers only). */\n showLabel?: boolean;\n /** Extra class names. */\n className?: string;\n}\n\n/** A loading indicator with a live `status` role. */\nexport function Spinner({\n label = \"Loading\",\n showLabel = false,\n className,\n}: SpinnerProps) {\n return (\n <span\n className={cx(\"spinner-wrap\", className)}\n role=\"status\"\n >\n <span\n className=\"spinner\"\n aria-hidden=\"true\"\n />\n <span className={showLabel ? \"spinner-label\" : \"visually-hidden\"}>\n {label}\n </span>\n </span>\n );\n}\n",
68
+ "import type { ComponentType, LazyExoticComponent } from \"react\";\nimport type { AddFlowDialogProps } from \"./job/AddFlowDialog\";\nimport type { AddedByStateGroupProps } from \"./overview/added\";\nimport type { SectionProps } from \"./overview/sections\";\nimport type { JobDefaultsPanelProps } from \"./queues/panels/jobDefaults\";\nimport { lazy, Suspense } from \"react\";\nimport { Spinner } from \"../components/Spinner\";\n\n/**\n * The screens loaded on demand. Each section's code (and its stylesheet) is a\n * separate chunk the bundler splits off, so the first page load carries only\n * the shell and the Overview; opening a queue, a job or a runner fetches its\n * chunk once. The chunks are served from `assetsPath` like the entry, which\n * the CSP's `script-src 'self'` allows.\n */\n\n/**\n * Wraps a lazily imported screen in a Suspense boundary with a labelled\n * spinner. A chunk that fails to load (a network blip, a redeploy) throws to\n * the route's `ScreenErrorBoundary`; `React.lazy` would keep that rejection\n * for good, so a failed load swaps in a fresh `lazy()` and \"Reload this\n * screen\" really fetches the chunk again.\n */\nexport function onDemand<TProps extends object = Record<string, never>>(\n load: () => Promise<ComponentType<TProps>>,\n label: string,\n): ComponentType<TProps> {\n let Screen: LazyExoticComponent<ComponentType<TProps>>;\n const create = () =>\n lazy(async () => {\n try {\n return { default: await load() };\n } catch (error) {\n Screen = create();\n throw error;\n }\n });\n Screen = create();\n function OnDemand(props: TProps) {\n return (\n <Suspense\n fallback={\n <Spinner\n label={label}\n showLabel\n />\n }\n >\n <Screen {...props} />\n </Suspense>\n );\n }\n return OnDemand;\n}\n\n/** `/queues`, on demand. */\nexport const QueuesListScreen = onDemand(\n async () => (await import(\"./queues\")).QueuesListScreen,\n \"Loading the queues\",\n);\n\n/** `/queues/:queue`, on demand. */\nexport const QueueScreen = onDemand(\n async () => (await import(\"./queues\")).QueueScreen,\n \"Loading the queue\",\n);\n\n/** `/queues/:queue/jobs/:id`, on demand. */\nexport const JobScreen = onDemand(\n async () => (await import(\"./job\")).JobScreen,\n \"Loading the job\",\n);\n\n/** `/events`, on demand. */\nexport const EventsScreen = onDemand(\n async () => (await import(\"./events\")).EventsScreen,\n \"Loading the events\",\n);\n\n/** `/docs`, on demand. */\nexport const DocsHomeScreen = onDemand(\n async () => (await import(\"./docs\")).DocsHomeScreen,\n \"Loading the API docs\",\n);\n\n/** `/docs/http[/:operationId]`, on demand. */\nexport const HttpDocsScreen = onDemand(\n async () => (await import(\"./docs\")).HttpDocsScreen,\n \"Loading the HTTP reference\",\n);\n\n/** `/docs/ws[/:item]`, on demand. */\nexport const WsDocsScreen = onDemand(\n async () => (await import(\"./docs\")).WsDocsScreen,\n \"Loading the WebSocket reference\",\n);\n\n/** `/runners`, on demand. */\nexport const RunnersListScreen = onDemand(\n async () => (await import(\"./runners\")).RunnersListScreen,\n \"Loading the runners\",\n);\n\n/** `/runners/:runner`, on demand. */\nexport const RunnerScreen = onDemand(\n async () => (await import(\"./runners\")).RunnerScreen,\n \"Loading the runner\",\n);\n\n/** `/workers`, on demand. */\nexport const WorkersListScreen = onDemand(\n async () => (await import(\"./workers\")).WorkersListScreen,\n \"Loading the workers\",\n);\n\n/** `/summon`, on demand. */\nexport const SummoningScreen = onDemand(\n async () => (await import(\"./summoning\")).SummoningScreen,\n \"Loading the summon controllers\",\n);\n\n/** `/providers`, on demand. */\nexport const ProvidersScreen = onDemand(\n async () => (await import(\"./providers\")).ProvidersScreen,\n \"Loading the providers\",\n);\n\n/** `/workers/:queue/:key`, on demand. */\nexport const WorkerScreen = onDemand(\n async () => (await import(\"./workers\")).WorkerScreen,\n \"Loading the worker\",\n);\n\n/**\n * The Overview's Runners analytics section, on demand.\n *\n * It is split off the entry deliberately: the Overview is the landing screen,\n * so everything it imports is paid for on every first load, and a deployment\n * recording no analytics (`meta.analytics === null`, which is every one until\n * the recording lands) never renders this section and so never fetches it.\n * `useAnalyticsGate` in `./overview/gate` decides, and stays in the entry.\n */\nexport const RunnersSection = onDemand<SectionProps>(\n async () => (await import(\"./overview/sections\")).RunnersSection,\n \"Loading runner analytics\",\n);\n\n/** The Overview's Workers analytics section, on demand; see {@link RunnersSection}. */\nexport const WorkersSection = onDemand<SectionProps>(\n async () => (await import(\"./overview/sections\")).WorkersSection,\n \"Loading worker analytics\",\n);\n\n/**\n * The Overview's \"added in range, by state\" group, on demand. Split off the\n * entry, which is nearly at its budget, and fetched only where\n * `features.addedByState` is true — a deployment without it never loads it.\n */\nexport const AddedByStateGroup = onDemand<AddedByStateGroupProps>(\n async () => (await import(\"./overview/added\")).AddedByStateGroup,\n \"Loading jobs added in the range\",\n);\n\n/**\n * The queue screen's Job defaults panel (with its editor and apply dialogs),\n * on demand: a chunk of its own, fetched only when the panel is opened on a\n * queue whose API serves job defaults, so the queue screen's chunk does not\n * grow by it.\n */\nexport const JobDefaultsPanel = onDemand<JobDefaultsPanelProps>(\n async () => (await import(\"./queues/panels/jobDefaults\")).JobDefaultsPanel,\n \"Loading the job defaults\",\n);\n\n/**\n * The queue screen's Add flow dialog, on demand: a chunk of its own, fetched\n * the first time the dialog is opened (the queue screen renders it only\n * while open), so neither the entry nor the queue and job screens' chunk\n * grows by it. `./job` re-exports this wrapper, not the dialog itself.\n */\nexport const AddFlowDialog = onDemand<AddFlowDialogProps>(\n async () => (await import(\"./job/AddFlowDialog\")).AddFlowDialog,\n \"Loading the add-flow form\",\n);\n",
69
+ "import type { AnalyticsPreset } from \"../api/contract\";\nimport {\n ANALYTICS_PRESETS,\n DEFAULT_ANALYTICS_PRESET,\n MAX_ANALYTICS_SPAN_MS,\n MIN_ANALYTICS_SPAN_MS,\n} from \"../api/contract\";\n\n/**\n * The time range the analytics views are read over: a rolling preset (\"the\n * last 10 minutes\") or a fixed custom span between two instants.\n *\n * A preset is stored as its duration, not as the instants it resolved to, so\n * a screen left open keeps following the clock; a custom range is stored as\n * the two instants, so it stays where it was put. Both live in the URL, so a\n * view is shareable and survives a reload.\n */\n\n/**\n * The rolling presets and the default, from the contract: the server decides\n * what it offers, and the UI must not hold a second list that can drift.\n */\nexport const RANGE_PRESETS = ANALYTICS_PRESETS;\n\n/** One rolling preset, in seconds. */\nexport type RangePreset = AnalyticsPreset;\n\n/** The preset a view opens on: the last hour, as the Overview always used. */\nexport const DEFAULT_PRESET: RangePreset = DEFAULT_ANALYTICS_PRESET;\n\n/** How each preset reads. */\nexport const PRESET_LABELS: Readonly<Record<RangePreset, string>> = {\n 60: \"Last 60 seconds\",\n 300: \"Last 5 minutes\",\n 600: \"Last 10 minutes\",\n 1800: \"Last 30 minutes\",\n 3600: \"Last hour\",\n 21600: \"Last 6 hours\",\n 86400: \"Last 24 hours\",\n};\n\n/** A rolling window ending now. */\nexport interface PresetRange {\n /** Discriminator. */\n kind: \"preset\";\n /** Its length in seconds. */\n seconds: RangePreset;\n}\n\n/** A fixed span between two instants. */\nexport interface CustomRange {\n /** Discriminator. */\n kind: \"custom\";\n /** Start, epoch ms, inclusive. */\n from: number;\n /** End, epoch ms, exclusive. */\n to: number;\n}\n\n/** What an analytics view is read over. */\nexport type TimeRange = PresetRange | CustomRange;\n\n/**\n * The longest span a view asks for, from the contract. A deployment reports\n * its own in `meta.analytics.maxSpanMs`, which a picker passes as `maxSpan`;\n * this is the fallback for an API that reports none.\n */\nexport const MAX_RANGE_MS = MAX_ANALYTICS_SPAN_MS;\n\n/** The shortest custom span that still holds a bucket, from the contract. */\nexport const MIN_RANGE_MS = MIN_ANALYTICS_SPAN_MS;\n\n/** The default range: {@link DEFAULT_PRESET}, rolling. */\nexport function defaultRange(): TimeRange {\n return { kind: \"preset\", seconds: DEFAULT_PRESET };\n}\n\n/** The instants a range covers right now; a preset resolves against `now`. */\nexport function rangeBounds(\n range: TimeRange,\n now = Date.now(),\n): { from: number; to: number } {\n return range.kind === \"preset\"\n ? { from: now - range.seconds * 1_000, to: now }\n : { from: range.from, to: range.to };\n}\n\n/** A range's length in ms. */\nexport function rangeLength(range: TimeRange, now = Date.now()): number {\n const { from, to } = rangeBounds(range, now);\n return to - from;\n}\n\n/** How a span reads in a message: \"24 hours\", \"31 days\", \"90 minutes\". */\nfunction describeSpan(ms: number): string {\n const units: [number, string][] = [\n [24 * 60 * 60 * 1_000, \"day\"],\n [60 * 60 * 1_000, \"hour\"],\n [60 * 1_000, \"minute\"],\n [1_000, \"second\"],\n ];\n for (const [size, name] of units) {\n if (ms >= size && ms % size === 0) {\n const count = ms / size;\n return `${count} ${name}${count === 1 ? \"\" : \"s\"}`;\n }\n }\n return `${Math.round(ms / 1_000)} seconds`;\n}\n\n/**\n * Why a custom range is not usable, or `null` when it is. `maxSpan` is what\n * the API says it can serve (`meta.analytics.maxSpanMs`), falling back to\n * {@link MAX_RANGE_MS}; `null` means no longest span (a job list's\n * `finishedOn` window, which the API does not bound).\n */\nexport function rangeProblem(\n from: number,\n to: number,\n maxSpan: number | null = MAX_RANGE_MS,\n): string | null {\n if (!Number.isFinite(from) || !Number.isFinite(to)) {\n return \"Give both a start and an end.\";\n }\n if (to <= from) {\n return \"The end must be after the start.\";\n }\n if (to - from < MIN_RANGE_MS) {\n return \"That range is shorter than a second.\";\n }\n if (maxSpan !== null && to - from > maxSpan) {\n return `That range is longer than ${describeSpan(maxSpan)}, which is as far back as this API keeps.`;\n }\n return null;\n}\n\n/**\n * A range written for the URL: `60s` / `3600s` for a preset, `<from>-<to>`\n * (epoch ms) for a custom one. `null` for the default, which is left out.\n */\nexport function writeRange(range: TimeRange): string | null {\n if (range.kind === \"preset\") {\n return range.seconds === DEFAULT_PRESET ? null : `${range.seconds}s`;\n }\n return `${range.from}-${range.to}`;\n}\n\n/** A range read back from the URL; anything malformed falls back to the default. */\nexport function readRange(raw: string | null): TimeRange {\n if (raw === null || raw === \"\") {\n return defaultRange();\n }\n const preset = /^(\\d+)s$/.exec(raw);\n if (preset) {\n const seconds = Number(preset[1]);\n const known = RANGE_PRESETS.find((candidate) => candidate === seconds);\n return known === undefined\n ? defaultRange()\n : { kind: \"preset\", seconds: known };\n }\n const custom = /^(\\d+)-(\\d+)$/.exec(raw);\n if (custom) {\n const from = Number(custom[1]);\n const to = Number(custom[2]);\n return rangeProblem(from, to) === null\n ? { kind: \"custom\", from, to }\n : defaultRange();\n }\n return defaultRange();\n}\n\n/** How a range reads in a heading: the preset's label, or the two instants. */\nexport function describeRange(range: TimeRange): string {\n if (range.kind === \"preset\") {\n return PRESET_LABELS[range.seconds];\n }\n const format = (value: number) =>\n new Date(value).toLocaleString(undefined, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n });\n return `${format(range.from)} — ${format(range.to)}`;\n}\n\n/**\n * The bucket size a range is **asked** to be read at, in seconds: one second\n * for anything up to 15 minutes, otherwise one minute.\n *\n * It is a hint and an upper bound on fineness, never what a chart is labelled\n * with. The server answers with the resolution it served and says when it\n * coarsened one (`clamped`, with `reason: \"retention\"` when the range reaches\n * past what it keeps per second — the default is five minutes, so the\n * ten-minute preset lands there). Label an axis from the response.\n */\nexport function bucketSeconds(range: TimeRange, now = Date.now()): 1 | 60 {\n return rangeLength(range, now) <= 15 * 60 * 1_000 ? 1 : 60;\n}\n",
70
+ "import type { TimeRange } from \"../analytics/range\";\nimport type { ApiClient, QueryParams } from \"./client\";\nimport type { AnalyticsResolution } from \"./contract\";\nimport type {\n AnalyticsRangeDto,\n AnalyticsSeriesDto,\n JobsBucketDto,\n JobsTotalsDto,\n RunnerAnalyticsDto,\n RunnerRunsBucketDto,\n RunnersAnalyticsDto,\n WorkerAnalyticsDto,\n WorkersAnalyticsDto,\n} from \"./types\";\nimport { bucketSeconds, rangeBounds } from \"../analytics/range\";\nimport { segment } from \"./client\";\nimport {\n ANALYTICS_RESOLUTIONS,\n DEFAULT_ANALYTICS_RESOLUTION,\n} from \"./contract\";\nimport { isApiError } from \"./errors\";\n\n/**\n * The analytics routes: the namespace jobs series, one queue's, the runners\n * and workers roll-ups, and one runner's or one worker's detail.\n *\n * Every read sends `from`/`to`/`resolution` — never the deprecated `minutes`,\n * which stays only on the two shipped routes (`/overview`,\n * `/queues/:queue/throughput`). `resolution` is a **hint and an upper bound on\n * fineness**: the server answers with the resolution it could serve, in\n * `range.resolution`, and that — never what was asked — is what an axis is\n * labelled from.\n *\n * **The 200-worker rule.** A section reads one summed series and a page of\n * scalar rows from the roll-up, then one batch request for the sparklines of\n * the rows actually on screen. A namespace with 200 workers therefore costs\n * two requests, not 200; {@link MAX_ANALYTICS_SERIES} (also\n * `meta.analytics.maxSeries`) is both the batch cap and the page size, so a\n * page is always exactly one batch request.\n */\n\n/* ------------------------------------------------------------------ *\n * Resolving a range into a request\n * ------------------------------------------------------------------ */\n\n/** The query one analytics read sends: the contract's `AnalyticsRangeQuery`, resolved to instants. */\nexport interface AnalyticsRequest {\n /** Start of the range, epoch ms, **inclusive**. */\n from: number;\n /** End of the range, epoch ms, **exclusive** — a bucket starting exactly here is not in the response. */\n to: number;\n /** The finest bucket width wanted, in seconds. A hint: the response says what was served. */\n resolution: AnalyticsResolution;\n}\n\n/**\n * The resolution a range is **asked** for: what the range wants\n * ({@link bucketSeconds}), from the contract's `ANALYTICS_RESOLUTIONS`.\n *\n * Deliberately *not* pre-coarsened to `meta.analytics.resolutions`. Against\n * the real API that hid the one explanation the user needs: the file driver\n * keeps minutes only, and asked for a minute over \"the last 60 seconds\" it\n * answers unclamped — so the section drew two minute buckets under a\n * 60-second label and said nothing. Asked for the second the range wants, the\n * server answers with minutes **and** `clamped: true, reason: \"driver\"`,\n * which `RangeCaption` turns into a sentence. The server decides what\n * it serves; the request says what the range wanted.\n */\nexport function requestResolution(\n range: TimeRange,\n now = Date.now(),\n): AnalyticsResolution {\n const wanted = bucketSeconds(range, now);\n return (\n ANALYTICS_RESOLUTIONS.find((candidate) => candidate === wanted) ??\n DEFAULT_ANALYTICS_RESOLUTION\n );\n}\n\n/**\n * The instants and resolution a range is read over, resolved against `now`.\n *\n * A rolling preset resolves afresh on every fetch, which is what keeps a live\n * view following the clock; a custom range resolves to the instants it was\n * given. This is called **inside** the query function, never to build a key —\n * see {@link analyticsKeys}.\n *\n * A preset starts at the **first whole bucket inside** its window, not at\n * `now − length`. The server clamps for retention by bucket, comparing the\n * bucket `from` falls in with the bucket `serverNow − retention` falls in; a\n * preset as long as the retention (the last 24 hours) sat on that line, so\n * whenever clock skew plus latency carried the server's instant across a\n * bucket boundary, the answer came back clamped and the section captioned a\n * range the user never shortened. Starting a bucket in tolerates a whole\n * bucket of skew, and costs only the partial bucket at the far end, which\n * the chart could not draw whole anyway. A custom range is sent as given.\n */\nexport function analyticsRequest(\n range: TimeRange,\n now = Date.now(),\n): AnalyticsRequest {\n const { from, to } = rangeBounds(range, now);\n const resolution = requestResolution(range, now);\n if (range.kind === \"custom\") {\n return { from, to, resolution };\n }\n const interval = resolution * 1_000;\n return {\n from: Math.floor(from / interval) * interval + interval,\n to,\n resolution,\n };\n}\n\n/** An {@link AnalyticsRequest} as query parameters. Never sends `minutes`. */\nexport function analyticsQuery(request: AnalyticsRequest): QueryParams {\n return {\n from: request.from,\n to: request.to,\n resolution: request.resolution,\n };\n}\n\n/* ------------------------------------------------------------------ *\n * Query keys\n * ------------------------------------------------------------------ */\n\n/**\n * A range as it appears in a query key.\n *\n * A **custom** range is keyed by its two instants, so two custom ranges never\n * share a cache entry. A **preset** is keyed by its length rather than by the\n * instants it happens to resolve to right now: a rolling window is one query\n * that refetches, and keying it by the resolved instants would mint a fresh\n * cache entry every bucket — at one-second buckets, sixty a minute, none of\n * which is ever read again. The resolution is part of the key either way, so\n * \"the last 10 minutes at 1 s\" and \"at 60 s\" are different entries.\n */\nexport type RangeKey =\n | {\n /** Discriminator. */\n kind: \"preset\";\n /** The rolling window's length, in seconds. */\n seconds: number;\n /** The resolution asked for, in seconds. */\n resolution: AnalyticsResolution;\n }\n | {\n /** Discriminator. */\n kind: \"custom\";\n /** Start, epoch ms, inclusive. */\n from: number;\n /** End, epoch ms, exclusive. */\n to: number;\n /** The resolution asked for, in seconds. */\n resolution: AnalyticsResolution;\n };\n\n/** The key fragment identifying one range at one requested resolution. */\nexport function rangeKey(\n range: TimeRange,\n resolution: AnalyticsResolution,\n): RangeKey {\n return range.kind === \"preset\"\n ? { kind: \"preset\", seconds: range.seconds, resolution }\n : { kind: \"custom\", from: range.from, to: range.to, resolution };\n}\n\n/**\n * TanStack Query keys of the analytics reads.\n *\n * Every key sits under the `analyticsAll` prefix, and every *kind* of read has\n * its own prefix above the range fragment, so an invalidation can target\n * exactly as much as it means to: `analyticsAll` for everything, `jobsAll` for\n * every jobs series whatever range it covers, `jobs(range, …)` for one. That\n * distinction is the one `queryKeys.overviewAll` vs `queryKeys.overview()`\n * exists for — invalidating the narrow key refreshes nothing when the screen\n * is showing a different range.\n */\nexport const analyticsKeys = {\n /** Everything read from an analytics route: what a broad invalidation targets. */\n all: [\"analytics\"] as const,\n /** Every namespace jobs series, whatever range. */\n jobsAll: [\"analytics\", \"jobs\"] as const,\n /** `GET /analytics/jobs`. */\n jobs: (key: RangeKey) => [\"analytics\", \"jobs\", key] as const,\n /** Every per-queue jobs series of one queue, whatever range. */\n queueJobsAll: (queue: string) =>\n [\"analytics\", \"queue\", queue, \"jobs\"] as const,\n /** `GET /queues/:queue/analytics/jobs`. */\n queueJobs: (queue: string, key: RangeKey) =>\n [\"analytics\", \"queue\", queue, \"jobs\", key] as const,\n /** Every runners roll-up, whatever range. */\n runnersAll: [\"analytics\", \"runners\"] as const,\n /** `GET /analytics/runners` (the roll-up and its rows; no `ids=`). */\n runners: (key: RangeKey) => [\"analytics\", \"runners\", \"rollup\", key] as const,\n /** `GET /analytics/runners?ids=…` for one visible page. */\n runnerSeries: (ids: readonly string[], key: RangeKey) =>\n [\"analytics\", \"runners\", \"series\", [...ids], key] as const,\n /** Everything about one runner's analytics, whatever range. */\n runnerAll: (runner: string) => [\"analytics\", \"runner\", runner] as const,\n /** `GET /runners/:runner/analytics`. */\n runner: (runner: string, key: RangeKey) =>\n [\"analytics\", \"runner\", runner, key] as const,\n /** Every workers roll-up, whatever range. */\n workersAll: [\"analytics\", \"workers\"] as const,\n /** `GET /analytics/workers` (the roll-up and its rows; no `keys=`). */\n workers: (key: RangeKey) => [\"analytics\", \"workers\", \"rollup\", key] as const,\n /** `GET /analytics/workers?keys=…` for one visible page. */\n workerSeries: (keys: readonly string[], key: RangeKey) =>\n [\"analytics\", \"workers\", \"series\", [...keys], key] as const,\n /** Everything about one worker key's analytics, whatever range. */\n workerAll: (queue: string, key: string) =>\n [\"analytics\", \"worker\", queue, key] as const,\n /** `GET /queues/:queue/analytics/workers/:key`. */\n worker: (queue: string, workerKey: string, key: RangeKey) =>\n [\"analytics\", \"worker\", queue, workerKey, key] as const,\n};\n\n/* ------------------------------------------------------------------ *\n * Reads\n * ------------------------------------------------------------------ */\n\n/** `GET /analytics/jobs`: the namespace's job throughput, from the roll-up buckets. */\nexport function getJobsAnalytics(\n api: ApiClient,\n request: AnalyticsRequest,\n signal?: AbortSignal,\n): Promise<AnalyticsSeriesDto<JobsBucketDto, JobsTotalsDto>> {\n return api.request(\"GET\", \"/analytics/jobs\", {\n query: analyticsQuery(request),\n signal,\n });\n}\n\n/** `GET /queues/:queue/analytics/jobs`: one queue's throughput (supersedes `/throughput`). */\nexport function getQueueJobsAnalytics(\n api: ApiClient,\n queue: string,\n request: AnalyticsRequest,\n signal?: AbortSignal,\n): Promise<AnalyticsSeriesDto<JobsBucketDto, JobsTotalsDto>> {\n return api.request(\"GET\", `/queues/${segment(queue)}/analytics/jobs`, {\n query: analyticsQuery(request),\n signal,\n });\n}\n\n/**\n * `GET /analytics/runners`: every runner's outcomes summed, plus a scalar row\n * per runner (at most `MAX_ANALYTICS_ROWS`, `truncated` beyond it).\n *\n * `ids` names the runners whose own series to return as well — the visible\n * page, and at most `meta.analytics.maxSeries`; an explicit over-ask is 400\n * `BULK_LIMIT`, not a truncation.\n */\nexport function getRunnersAnalytics(\n api: ApiClient,\n request: AnalyticsRequest,\n ids?: readonly string[],\n signal?: AbortSignal,\n): Promise<RunnersAnalyticsDto> {\n return api.request(\"GET\", \"/analytics/runners\", {\n query: {\n ...analyticsQuery(request),\n ids: ids && ids.length > 0 ? [...ids] : undefined,\n },\n signal,\n });\n}\n\n/** `GET /runners/:runner/analytics`: one runner's runs by outcome, and its durations. */\nexport function getRunnerAnalytics(\n api: ApiClient,\n runner: string,\n request: AnalyticsRequest,\n signal?: AbortSignal,\n): Promise<RunnerAnalyticsDto> {\n return api.request(\"GET\", `/runners/${segment(runner)}/analytics`, {\n query: analyticsQuery(request),\n signal,\n });\n}\n\n/**\n * `GET /analytics/workers`: every worker's throughput summed, plus a scalar\n * row per worker **key** (at most `MAX_ANALYTICS_ROWS`, `truncated` beyond\n * it).\n *\n * `keys` names the worker keys whose own series to return as well — the\n * visible page, and at most `meta.analytics.maxSeries`.\n */\nexport function getWorkersAnalytics(\n api: ApiClient,\n request: AnalyticsRequest,\n keys?: readonly string[],\n signal?: AbortSignal,\n): Promise<WorkersAnalyticsDto> {\n return api.request(\"GET\", \"/analytics/workers\", {\n query: {\n ...analyticsQuery(request),\n keys: keys && keys.length > 0 ? [...keys] : undefined,\n },\n signal,\n });\n}\n\n/** `GET /queues/:queue/analytics/workers/:key`: one worker key's throughput and busyness. */\nexport function getWorkerAnalytics(\n api: ApiClient,\n queue: string,\n workerKey: string,\n request: AnalyticsRequest,\n signal?: AbortSignal,\n): Promise<WorkerAnalyticsDto> {\n return api.request(\n \"GET\",\n `/queues/${segment(queue)}/analytics/workers/${segment(workerKey)}`,\n { query: analyticsQuery(request), signal },\n );\n}\n\n/* ------------------------------------------------------------------ *\n * Reading a response's range\n * ------------------------------------------------------------------ */\n\n/**\n * How the resolution a response was **served** at reads: \"1-second buckets\",\n * \"1-minute buckets\". Always taken from {@link AnalyticsRangeDto.resolution},\n * never from what the request asked for.\n */\nexport function describeResolution(range: AnalyticsRangeDto): string {\n return range.resolution === 1 ? \"1-second buckets\" : \"1-minute buckets\";\n}\n\n/**\n * How a range's axis reads in a sparkline's label: the resolution **served**,\n * and the instants covered.\n *\n * The axis runs from the first bucket's start (`from`) to the exclusive end\n * (`end`); the last bucket is plotted at `to`, which is the last bucket's\n * start and *not* the request's exclusive `to`.\n */\nexport function describeAxis(range: AnalyticsRangeDto): string {\n const format = (value: number) =>\n new Date(value).toLocaleTimeString(undefined, { timeStyle: \"short\" });\n return `${describeResolution(range)} from ${format(range.from)} to ${format(range.end)}`;\n}\n\n/**\n * The axis a series is plotted on: `from` is the first bucket's start, `to`\n * the **last** bucket's start (inclusive, not the request's exclusive `to`)\n * and `end` the exclusive end. So an axis runs `from … end` and the last\n * bucket sits at `to`. The single easiest thing here to get wrong.\n */\nexport function axisBounds(range: AnalyticsRangeDto): {\n /** Start of the axis: the first bucket's start, epoch ms. */\n start: number;\n /** End of the axis: `range.end`, the exclusive end of the covered time. */\n end: number;\n /** Start of the last bucket, epoch ms — where the final point is drawn. */\n lastBucket: number;\n} {\n return { start: range.from, end: range.end, lastBucket: range.to };\n}\n\n/**\n * An in-flight series derived from a runs series:\n * `inFlight[i] = inFlight[i - 1] + started − succeeded − failed − timeout −\n * killed`, starting at zero.\n *\n * **Derived, and it must be labelled so.** A run that started before the range\n * finishes inside it and a run that starts near the end finishes outside, so\n * the line drifts across a range boundary. The honest instantaneous number is\n * the `runningNow` scalar, which is read from the locks.\n */\nexport function derivedInFlight(\n buckets: readonly RunnerRunsBucketDto[],\n): number[] {\n let running = 0;\n return buckets.map((bucket) => {\n running = Math.max(\n 0,\n running +\n bucket.started -\n bucket.succeeded -\n bucket.failed -\n bucket.timeout -\n bucket.killed,\n );\n return running;\n });\n}\n\n/**\n * Whether `error` is the API saying the **whole** range is older than it\n * keeps (400 `RANGE_NOT_RETAINED`). Not a failure to retry: the same range\n * fails the same way, and the UI explains it rather than raising an alarm.\n */\nexport function isRangeNotRetained(error: unknown): boolean {\n return isApiError(error) && error.code === \"RANGE_NOT_RETAINED\";\n}\n",
71
+ "import { isApiError } from \"../api/errors\";\nimport { Button } from \"./Button\";\n\n/** Props of {@link ErrorView}. */\nexport interface ErrorViewProps {\n /** What failed: an `ApiError` renders its problem fields, anything else a generic message. */\n error: unknown;\n /** A heading override, e.g. \"Could not load queues\". */\n title?: string;\n /** Offers a retry button when given. */\n onRetry?: () => void;\n /**\n * Render the heading as a heading of this level instead of a paragraph.\n * Use `1` when the error replaces the whole screen, so it still has its\n * `h1`. Defaults to none (a paragraph).\n */\n headingLevel?: 1 | 2 | 3;\n}\n\n/** Renders a failed request: title, detail, code/status, and validation issues. */\nexport function ErrorView({\n error,\n title,\n onRetry,\n headingLevel,\n}: ErrorViewProps) {\n const Title = headingLevel ? (`h${headingLevel}` as const) : \"p\";\n const api = isApiError(error) ? error : null;\n const heading = title ?? api?.title ?? \"Something went wrong\";\n const detail =\n api?.detail ?? (error instanceof Error ? error.message : String(error));\n return (\n <div\n className=\"error-view\"\n role=\"alert\"\n >\n <Title className=\"error-view-title\">{heading}</Title>\n {detail && detail !== heading && (\n <p className=\"error-view-detail\">{detail}</p>\n )}\n {api && (\n <p className=\"error-view-meta\">\n <code>{api.code}</code>\n {api.status > 0 && <span> · HTTP {api.status}</span>}\n </p>\n )}\n {api && api.issues.length > 0 && (\n <ul className=\"error-view-issues\">\n {api.issues.map((issue) => (\n <li key={`${issue.target}:${issue.path}:${issue.message}`}>\n <code>\n {issue.target}\n {issue.path ? `.${issue.path}` : \"\"}\n </code>{\" \"}\n {issue.message}\n </li>\n ))}\n </ul>\n )}\n {onRetry && (\n <Button\n variant=\"secondary\"\n onClick={onRetry}\n >\n Retry\n </Button>\n )}\n </div>\n );\n}\n",
72
+ "import { isRangeNotRetained } from \"../api/analytics\";\nimport { isApiError } from \"../api/errors\";\nimport { ErrorView } from \"../components/ErrorView\";\nimport \"./analytics.css\";\n\n/**\n * A failed analytics read, with the one failure that is not a failure told\n * apart: `RANGE_NOT_RETAINED`.\n *\n * The API answers 400 `RANGE_NOT_RETAINED` when the **whole** range is older\n * than it keeps — deliberately, because a 200 with an empty series would read\n * as \"nothing happened\". So the UI must not read it as \"something broke\"\n * either: it says the numbers are gone, from when they are kept, and what to\n * do, and offers no Retry (the same range would fail the same way). Any other\n * error renders as the usual {@link ErrorView}.\n */\n\n/** The `context` a `RANGE_NOT_RETAINED` problem carries. */\ninterface NotRetainedContext {\n /** The oldest instant kept, epoch ms. */\n retainedFrom?: number;\n /** The resolution, in seconds, that instant is the retention of. */\n resolution?: number;\n}\n\n/** Props of {@link AnalyticsError}. */\nexport interface AnalyticsErrorProps {\n /** What the read failed with. */\n error: unknown;\n /** The heading for any other failure, e.g. \"Could not load worker analytics\". */\n title: string;\n /** Retries the read; offered for any failure but `RANGE_NOT_RETAINED`. */\n onRetry: () => void;\n /** Test id on the explanation. Defaults to `range-not-retained`. */\n testId?: string;\n}\n\n/** A failed analytics read: an explanation for an unretained range, an {@link ErrorView} otherwise. */\nexport function AnalyticsError({\n error,\n title,\n onRetry,\n testId = \"range-not-retained\",\n}: AnalyticsErrorProps) {\n if (!isApiError(error) || !isRangeNotRetained(error)) {\n return (\n <ErrorView\n error={error}\n title={title}\n onRetry={onRetry}\n />\n );\n }\n const context = error.context as NotRetainedContext;\n const kept =\n typeof context.retainedFrom === \"number\" &&\n Number.isFinite(context.retainedFrom)\n ? new Date(context.retainedFrom).toLocaleString(undefined, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n })\n : null;\n return (\n <div\n className=\"range-not-retained\"\n role=\"note\"\n data-testid={testId}\n >\n <p className=\"range-not-retained-title\">\n No numbers are kept for this range\n </p>\n <p className=\"range-not-retained-detail\">\n The whole range is older than this API keeps\n {kept ? (\n <>\n {\" \"}\n — its oldest figure is from <time>{kept}</time>\n </>\n ) : null}\n . That is not the same as nothing happening: whatever was counted then\n is no longer kept. Pick a more recent range.\n </p>\n </div>\n );\n}\n",
73
+ "import type { AnalyticsRangeDto } from \"../api/types\";\nimport { describeResolution } from \"../api/analytics\";\nimport \"./analytics.css\";\n\n/**\n * What one section is actually showing, taken from the response's own\n * `range` — never from what the request asked for.\n *\n * It is how a user learns that the 10-minute preset came back at minute\n * buckets: the server serves the finest resolution it can keep for the whole\n * span, says so in `resolution`, and explains the difference with `clamped`\n * and `reason`. Without a caption a chart is quietly labelled with a range it\n * does not cover.\n */\n\n/** How each `AnalyticsClampReason` reads, with the resolution served filled in. */\nconst REASONS: Readonly<Record<string, (range: AnalyticsRangeDto) => string>> =\n {\n retention: (range) =>\n `this API does not keep that far back at the resolution asked for, so it answered with ${describeResolution(range)}.`,\n maxBuckets: (range) =>\n `that span at the resolution asked for is more points than one response carries, so it answered with ${describeResolution(range)}.`,\n resolution: (range) =>\n `this API does not serve the resolution asked for, so it answered with ${describeResolution(range)}.`,\n driver: (range) =>\n `this backend cannot record that fineness at all, so it answered with ${describeResolution(range)}.`,\n };\n\n/** Props of {@link RangeCaption}. */\nexport interface RangeCaptionProps {\n /**\n * The range the response reports. `undefined` while the read is in flight\n * or failed, which renders nothing.\n */\n range: AnalyticsRangeDto | undefined;\n /**\n * Also caption an unclamped response, saying which buckets it is drawn at.\n * Defaults to `false`: a response that covers exactly what was asked for\n * needs no explanation.\n */\n always?: boolean;\n /** Test id on the caption. Defaults to `range-caption`. */\n testId?: string;\n}\n\n/** Says what a section is showing when that is not what was asked for. */\nexport function RangeCaption({\n range,\n always = false,\n testId = \"range-caption\",\n}: RangeCaptionProps) {\n if (!range) {\n return null;\n }\n if (!range.clamped) {\n return always ? (\n <p\n className=\"range-caption\"\n data-testid={testId}\n >\n Shown in {describeResolution(range)}.\n </p>\n ) : null;\n }\n const explain = range.reason ? REASONS[range.reason] : undefined;\n return (\n <p\n className=\"range-caption\"\n data-testid={testId}\n data-clamp-reason={range.reason ?? \"unknown\"}\n >\n This is not exactly the range asked for:{\" \"}\n {explain\n ? explain(range)\n : `it was answered with ${describeResolution(range)}.`}\n </p>\n );\n}\n",
74
+ "import { createContext, use } from \"react\";\n\n/** What a {@link Field} tells the control inside it. */\nexport interface FieldControlProps {\n /** The control's `id`; the field's `<label htmlFor>` points at it. */\n id: string;\n /** Ids of the hint and error (and any extra description), space separated; `undefined` when there are none. */\n \"aria-describedby\": string | undefined;\n /** `true` while the field shows an error. */\n \"aria-invalid\": boolean | undefined;\n /** Whether the field is marked required. */\n required: boolean | undefined;\n}\n\n/** Carries the enclosing field's wiring; `null` outside a field. */\nexport const FieldContext = createContext<FieldControlProps | null>(null);\n\n/** The enclosing {@link Field}'s wiring, or `null` when the control stands alone. */\nexport function useField(): FieldControlProps | null {\n return use(FieldContext);\n}\n\n/** Joins ids for `aria-describedby`, skipping empty ones; `undefined` when none are left. */\nexport function joinIds(\n ...ids: (string | false | null | undefined)[]\n): string | undefined {\n const joined = ids.filter(Boolean).join(\" \");\n return joined === \"\" ? undefined : joined;\n}\n",
75
+ "import type { ReactNode } from \"react\";\nimport type { FieldControlProps } from \"./fieldContext\";\nimport { useId, useMemo } from \"react\";\nimport { cx } from \"./classNames\";\nimport { FieldContext, joinIds } from \"./fieldContext\";\n\n/** Props of {@link Field}. */\nexport interface FieldProps {\n /** The visible label, a `<label>` for the control. */\n label: ReactNode;\n /** Help under the control; it describes the control (`aria-describedby`). */\n hint?: ReactNode;\n /** An error under the control; it describes the control and sets `aria-invalid`. Falsy means valid. */\n error?: ReactNode;\n /** Show a required marker and mark the control required. Defaults to `false`. */\n required?: boolean;\n /** The control's id. Defaults to a generated one. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n /** The control: one of this kit's inputs (they read the wiring from context), or a render function receiving it for anything else. */\n children: ReactNode | ((control: FieldControlProps) => ReactNode);\n}\n\n/**\n * A labelled form row: label, control, hint and error. The kit's inputs\n * ({@link TextInput}, {@link NumberInput}, {@link Select},\n * {@link DateTimeInput}, `JsonEditor`) pick up the id, `aria-describedby`,\n * `aria-invalid` and `required` from it; a plain element can take them from\n * the render-function form of `children`.\n */\nexport function Field({\n label,\n hint,\n error,\n required = false,\n id,\n className,\n children,\n}: FieldProps) {\n const generatedId = useId();\n const controlId = id ?? generatedId;\n const hintId = `${controlId}-hint`;\n const errorId = `${controlId}-error`;\n const hasError = Boolean(error);\n const control = useMemo<FieldControlProps>(\n () => ({\n id: controlId,\n \"aria-describedby\": joinIds(hint ? hintId : null, hasError && errorId),\n \"aria-invalid\": hasError || undefined,\n required: required || undefined,\n }),\n [controlId, hint, hintId, hasError, errorId, required],\n );\n return (\n <div className={cx(\"field\", hasError && \"field-invalid\", className)}>\n <label\n className=\"field-label\"\n htmlFor={controlId}\n >\n {label}\n {required && (\n <span\n className=\"field-required\"\n aria-hidden=\"true\"\n >\n {\" \"}\n *\n </span>\n )}\n </label>\n <FieldContext value={control}>\n {typeof children === \"function\" ? children(control) : children}\n </FieldContext>\n {hint && (\n <p\n id={hintId}\n className=\"field-hint\"\n >\n {hint}\n </p>\n )}\n {hasError && (\n <p\n id={errorId}\n className=\"field-error\"\n >\n {error}\n </p>\n )}\n </div>\n );\n}\n",
76
+ "import { MAX_DATE_MS } from \"../api/contract\";\n\n/**\n * Value conversions of the kit's inputs, pure. The `datetime-local` value\n * (`YYYY-MM-DDTHH:mm[:ss]`) is wall-clock time in the browser's own time\n * zone.\n */\n\n/** Parses an `<input type=\"number\">` value: `\"\"` (empty or unparsable) → `undefined`. */\nexport function parseNumberInput(text: string): number | undefined {\n if (text.trim() === \"\") {\n return undefined;\n }\n const value = Number(text);\n return Number.isFinite(value) ? value : undefined;\n}\n\n/** Pads to two digits. */\nfunction pad(value: number): string {\n return String(value).padStart(2, \"0\");\n}\n\n/**\n * Epoch ms → a `datetime-local` value in local time. Seconds are included\n * when `withSeconds` is set; otherwise the value is truncated to the minute.\n * `undefined`/`NaN` → `\"\"`.\n */\nexport function toDateTimeLocal(\n ms: number | undefined | null,\n withSeconds = false,\n): string {\n if (ms === undefined || ms === null || !Number.isFinite(ms)) {\n return \"\";\n }\n const date = new Date(ms);\n const day = `${String(date.getFullYear()).padStart(4, \"0\")}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n const time = `${pad(date.getHours())}:${pad(date.getMinutes())}`;\n return `${day}T${time}${withSeconds ? `:${pad(date.getSeconds())}` : \"\"}`;\n}\n\n/** The shape a `datetime-local` value takes. */\nconst DATE_TIME_LOCAL =\n /^(\\d{4,})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{1,3}))?)?$/;\n\n/** A `datetime-local` value → epoch ms, read as local time; `undefined` when empty or malformed. */\nexport function fromDateTimeLocal(text: string): number | undefined {\n const match = DATE_TIME_LOCAL.exec(text.trim());\n if (!match) {\n return undefined;\n }\n const [, year, month, day, hours, minutes, seconds, fraction] = match;\n const ms = new Date(\n Number(year),\n Number(month) - 1,\n Number(day),\n Number(hours),\n Number(minutes),\n Number(seconds ?? 0),\n Number((fraction ?? \"0\").padEnd(3, \"0\")),\n ).getTime();\n return Number.isNaN(ms) ? undefined : ms;\n}\n\n/** Shown for a `datetime-local` value the browser could not read, or that is malformed. */\nexport const DATE_TIME_UNREADABLE =\n \"Not a date and time this browser can read. Pick one again, or clear the field.\";\n\n/**\n * Shown for a time outside what the API accepts: epoch ms from 0 to\n * `MAX_DATE_MS`, the last instant a `Date` holds (the API refuses anything\n * else with 400 `VALIDATION` at the field).\n */\nexport const DATE_TIME_OUT_OF_RANGE =\n \"Pick a time from 1 January 1970 to 13 September 275760 (UTC): the API accepts no other.\";\n\n/** What {@link readDateTimeLocal} found in a `datetime-local` value. */\nexport type DateTimeReading =\n /** Nothing: the field was cleared. */\n | { kind: \"empty\" }\n /** A time the API accepts, epoch ms. */\n | { kind: \"time\"; ms: number }\n /** Something unusable; `problem` says why, for the field's error. */\n | { kind: \"problem\"; problem: string };\n\n/**\n * Reads a `datetime-local` value the way the API will judge it. Empty is\n * `empty` unless the browser flags a half-typed entry (`badInput`, for which\n * it reports `\"\"`). A malformed value, or one naming a day that does not\n * exist, is {@link DATE_TIME_UNREADABLE}; a time before the epoch or after\n * `MAX_DATE_MS` (which `Date` cannot even build) is\n * {@link DATE_TIME_OUT_OF_RANGE}.\n */\nexport function readDateTimeLocal(\n text: string,\n badInput = false,\n): DateTimeReading {\n const trimmed = text.trim();\n if (trimmed === \"\") {\n return badInput\n ? { kind: \"problem\", problem: DATE_TIME_UNREADABLE }\n : { kind: \"empty\" };\n }\n const match = DATE_TIME_LOCAL.exec(trimmed);\n if (!match) {\n return { kind: \"problem\", problem: DATE_TIME_UNREADABLE };\n }\n const [, year, month, day, hours, minutes, seconds] = match.map(Number);\n if (\n month < 1 ||\n month > 12 ||\n day < 1 ||\n day > daysInMonth(year, month) ||\n hours > 23 ||\n minutes > 59 ||\n (seconds ?? 0) > 59\n ) {\n return { kind: \"problem\", problem: DATE_TIME_UNREADABLE };\n }\n const ms = fromDateTimeLocal(trimmed);\n if (ms === undefined || ms < 0 || ms > MAX_DATE_MS) {\n return { kind: \"problem\", problem: DATE_TIME_OUT_OF_RANGE };\n }\n return { kind: \"time\", ms };\n}\n\n/** Days in a month (1-12) of a proleptic Gregorian year. */\nfunction daysInMonth(year: number, month: number): number {\n if (month === 2) {\n const leap = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n return leap ? 29 : 28;\n }\n return [4, 6, 9, 11].includes(month) ? 30 : 31;\n}\n\n/** The browser's time zone name (e.g. `\"Europe/London\"`), or `\"local time\"` when unknown. */\nexport function localTimeZone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone || \"local time\";\n } catch {\n return \"local time\";\n }\n}\n",
77
+ "import type {\n ChangeEvent,\n InputHTMLAttributes,\n ReactNode,\n Ref,\n SelectHTMLAttributes,\n} from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { cx } from \"./classNames\";\nimport { joinIds, useField } from \"./fieldContext\";\nimport {\n localTimeZone,\n parseNumberInput,\n readDateTimeLocal,\n toDateTimeLocal,\n} from \"./inputValues\";\n\n/**\n * The kit's form controls. Inside a {@link Field} each takes its id,\n * `aria-describedby`, `aria-invalid` and `required` from it; explicit props\n * win, and an explicit `aria-describedby` is added to the field's.\n */\n\n/** Wiring props every control accepts. */\ninterface ControlWiring {\n /** The element id. Defaults to the enclosing field's. */\n id?: string;\n /** Extra description ids, added to the field's. */\n \"aria-describedby\"?: string;\n /** Invalid state. Defaults to the enclosing field's. */\n \"aria-invalid\"?: boolean;\n /** Required. Defaults to the enclosing field's. */\n required?: boolean;\n}\n\n/** Resolves a control's wiring against the enclosing field. */\nfunction useWiring(props: ControlWiring) {\n const field = useField();\n return {\n id: props.id ?? field?.id,\n \"aria-describedby\": joinIds(\n field?.[\"aria-describedby\"],\n props[\"aria-describedby\"],\n ),\n \"aria-invalid\": props[\"aria-invalid\"] ?? field?.[\"aria-invalid\"],\n required: props.required ?? field?.required,\n };\n}\n\n/** Native input props the kit's inputs pass through (value and change are typed per control). */\ntype PassThroughInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n | \"value\"\n | \"defaultValue\"\n | \"onChange\"\n | \"type\"\n | \"id\"\n | \"aria-describedby\"\n | \"aria-invalid\"\n | \"required\"\n | \"min\"\n | \"max\"\n | \"step\"\n> & {\n /** The underlying `<input>`, e.g. to focus it. */\n ref?: Ref<HTMLInputElement>;\n};\n\n/** Props of {@link TextInput}. */\nexport interface TextInputProps extends PassThroughInputProps, ControlWiring {\n /** The text. */\n value: string;\n /** Called with the new text on each edit. */\n onChange: (value: string, event: ChangeEvent<HTMLInputElement>) => void;\n /** The input type. Defaults to `\"text\"`. */\n type?: \"text\" | \"search\" | \"email\" | \"url\" | \"password\" | \"tel\";\n}\n\n/** A single-line text input. */\nexport function TextInput({\n value,\n onChange,\n type = \"text\",\n className,\n ...rest\n}: TextInputProps) {\n const wiring = useWiring(rest);\n return (\n <input\n {...rest}\n {...wiring}\n type={type}\n className={cx(\"input\", className)}\n value={value}\n onChange={(event) => onChange(event.target.value, event)}\n />\n );\n}\n\n/** Props of {@link NumberInput}. */\nexport interface NumberInputProps extends PassThroughInputProps, ControlWiring {\n /** The number, or `undefined` for empty. */\n value: number | undefined;\n /** Called with the new number, or `undefined` when the input is empty (or not a number). */\n onChange: (\n value: number | undefined,\n event: ChangeEvent<HTMLInputElement>,\n ) => void;\n /** Smallest allowed value (native validation only; the value is not clamped). */\n min?: number;\n /** Largest allowed value (native validation only; the value is not clamped). */\n max?: number;\n /** Step. Defaults to `1`; pass `\"any\"` for decimals. */\n step?: number | \"any\";\n}\n\n/** A number input where empty means `undefined`, never `0`. */\nexport function NumberInput({\n value,\n onChange,\n min,\n max,\n step = 1,\n className,\n ...rest\n}: NumberInputProps) {\n const wiring = useWiring(rest);\n return (\n <input\n inputMode={step === \"any\" ? \"decimal\" : \"numeric\"}\n {...rest}\n {...wiring}\n type=\"number\"\n className={cx(\"input\", \"input-number\", className)}\n min={min}\n max={max}\n step={step}\n value={value === undefined || Number.isNaN(value) ? \"\" : value}\n onChange={(event) =>\n onChange(parseNumberInput(event.target.value), event)\n }\n />\n );\n}\n\n/** One option of a {@link Select}. */\nexport interface SelectOption<V extends string> {\n /** The value. */\n value: V;\n /** The text shown. Defaults to the value. */\n label?: string;\n /** Not selectable. */\n disabled?: boolean;\n}\n\n/** Props of {@link Select}. */\nexport interface SelectProps<V extends string>\n extends\n Omit<\n SelectHTMLAttributes<HTMLSelectElement>,\n | \"value\"\n | \"defaultValue\"\n | \"onChange\"\n | \"id\"\n | \"aria-describedby\"\n | \"aria-invalid\"\n | \"required\"\n | \"multiple\"\n >,\n ControlWiring {\n /** The choices. Include `{ value: \"\", label: \"Any\" }` (with `\"\"` in `V`) for an \"unset\" choice. */\n options: readonly SelectOption<V>[];\n /** The selected value. */\n value: V;\n /** Called with the chosen value. */\n onChange: (value: V, event: ChangeEvent<HTMLSelectElement>) => void;\n}\n\n/** A native `<select>` over a typed set of string values. */\nexport function Select<V extends string>({\n options,\n value,\n onChange,\n className,\n ...rest\n}: SelectProps<V>) {\n const wiring = useWiring(rest);\n return (\n <select\n {...rest}\n {...wiring}\n className={cx(\"input\", \"select\", className)}\n value={value}\n onChange={(event) => {\n const chosen = options.find(\n (option) => option.value === event.target.value,\n );\n if (chosen) {\n onChange(chosen.value, event);\n }\n }}\n >\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label ?? option.value}\n </option>\n ))}\n </select>\n );\n}\n\n/** Props of {@link Checkbox}. */\nexport interface CheckboxProps extends Omit<\n PassThroughInputProps,\n \"checked\" | \"defaultChecked\"\n> {\n /** Whether it is ticked. */\n checked: boolean;\n /** Called with the new state. */\n onChange: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void;\n /** The label beside the box; clicking it toggles. */\n label: ReactNode;\n /** Help under the label; it describes the box. */\n hint?: ReactNode;\n /** The element id. Defaults to a generated one. */\n id?: string;\n}\n\n/** A checkbox with its own label (it does not need a {@link Field}). */\nexport function Checkbox({\n checked,\n onChange,\n label,\n hint,\n id,\n className,\n ...rest\n}: CheckboxProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const hintId = `${inputId}-hint`;\n return (\n <div className={cx(\"checkbox\", className)}>\n <input\n {...rest}\n id={inputId}\n type=\"checkbox\"\n checked={checked}\n aria-describedby={hint ? hintId : undefined}\n onChange={(event) => onChange(event.target.checked, event)}\n />\n <label htmlFor={inputId}>{label}</label>\n {hint && (\n <p\n id={hintId}\n className=\"field-hint checkbox-hint\"\n >\n {hint}\n </p>\n )}\n </div>\n );\n}\n\n/** Props of {@link DateTimeInput}. */\nexport interface DateTimeInputProps\n extends Omit<PassThroughInputProps, \"min\" | \"max\">, ControlWiring {\n /** The instant, epoch ms, or `undefined` for empty. */\n value: number | undefined;\n /**\n * Called with the instant (epoch ms) the user picked, or `undefined` when\n * cleared, or when the field holds something unusable (then `onProblem`\n * says what).\n */\n onChange: (\n value: number | undefined,\n event: ChangeEvent<HTMLInputElement>,\n ) => void;\n /**\n * Called with a message when the field holds something unusable — a time\n * outside what the API accepts (0 to `MAX_DATE_MS`) or one the browser\n * could not read — and with `undefined` once it holds a usable time, is\n * cleared, or unmounts. Judged on each change and again on blur, since a\n * half-typed entry into an empty field fires no change. The typed text is\n * kept on screen meanwhile. Show the message as the field's error and hold\n * the form back until it clears (`useFieldProblems`, in\n * `hooks/useFieldProblems`).\n */\n onProblem?: (problem: string | undefined) => void;\n /** Earliest allowed instant, epoch ms (native validation only). */\n min?: number;\n /** Latest allowed instant, epoch ms (native validation only). */\n max?: number;\n /** Let the user pick seconds. Defaults to `false` (minute precision). */\n withSeconds?: boolean;\n /** Show the browser's time zone beside the input. Defaults to `true`. */\n showTimeZone?: boolean;\n}\n\n/**\n * A `datetime-local` input speaking epoch ms. The wall-clock value is read\n * in the browser's time zone, which is shown beside it (and part of its\n * description), so \"09:00\" is never ambiguous.\n */\nexport function DateTimeInput({\n value,\n onChange,\n onProblem,\n min,\n max,\n withSeconds = false,\n showTimeZone = true,\n className,\n onBlur,\n ...rest\n}: DateTimeInputProps) {\n const zoneId = useId();\n const wiring = useWiring(rest);\n // What the user typed, kept on screen while it is unusable (the value is\n // then `undefined`, which would otherwise blank the field).\n const [draft, setDraft] = useState<string | null>(null);\n const onProblemRef = useRef(onProblem);\n useEffect(() => {\n onProblemRef.current = onProblem;\n });\n // A field that goes away takes its problem with it.\n useEffect(() => () => onProblemRef.current?.(undefined), []);\n return (\n <span className=\"input-group\">\n <input\n {...rest}\n {...wiring}\n aria-describedby={joinIds(\n wiring[\"aria-describedby\"],\n showTimeZone && zoneId,\n )}\n type=\"datetime-local\"\n className={cx(\"input\", \"input-datetime\", className)}\n step={withSeconds ? 1 : 60}\n min={min === undefined ? undefined : toDateTimeLocal(min, withSeconds)}\n max={max === undefined ? undefined : toDateTimeLocal(max, withSeconds)}\n value={\n value === undefined\n ? (draft ?? \"\")\n : toDateTimeLocal(value, withSeconds)\n }\n onChange={(event) => {\n const reading = readDateTimeLocal(\n event.target.value,\n event.target.validity.badInput,\n );\n if (reading.kind === \"problem\") {\n setDraft(event.target.value);\n onChange(undefined, event);\n onProblem?.(reading.problem);\n return;\n }\n setDraft(null);\n onChange(reading.kind === \"time\" ? reading.ms : undefined, event);\n onProblem?.(undefined);\n }}\n // A half-typed entry into an empty field fires no change (its value\n // stays \"\"), so it is judged again on leaving the field.\n onBlur={(event) => {\n onBlur?.(event);\n const reading = readDateTimeLocal(\n event.target.value,\n event.target.validity.badInput,\n );\n onProblem?.(reading.kind === \"problem\" ? reading.problem : undefined);\n }}\n />\n {showTimeZone && (\n <span\n id={zoneId}\n className=\"input-suffix\"\n >\n {localTimeZone()}\n </span>\n )}\n </span>\n );\n}\n",
78
+ "import { useCallback, useState } from \"react\";\n\n/** What {@link useFieldProblems} returns. */\nexport interface FieldProblems<K extends string> {\n /** The current problem of each field that has one. */\n problems: Partial<Record<K, string>>;\n /** A field's `onProblem`: records or clears its problem. */\n report: (field: K, problem: string | undefined) => void;\n /** Whether any field has a problem: the form must not be sent. */\n blocked: boolean;\n}\n\n/**\n * Collects the problems fields report as they change (`DateTimeInput`'s\n * `onProblem`), for a form to show on each field and to disable its submit\n * button while any remains.\n */\nexport function useFieldProblems<K extends string>(): FieldProblems<K> {\n const [problems, setProblems] = useState<Partial<Record<K, string>>>({});\n const report = useCallback(\n (field: K, problem: string | undefined) =>\n setProblems((current) => {\n if (current[field] === problem) {\n return current;\n }\n const next = { ...current };\n if (problem === undefined) {\n delete next[field];\n } else {\n next[field] = problem;\n }\n return next;\n }),\n [],\n );\n return { problems, report, blocked: Object.keys(problems).length > 0 };\n}\n",
79
+ "import type { RangePreset, TimeRange } from \"./range\";\nimport { useState } from \"react\";\nimport { Button } from \"../components/Button\";\nimport { Field } from \"../components/Field\";\nimport { DateTimeInput, Select } from \"../components/inputs\";\nimport { useFieldProblems } from \"../hooks/useFieldProblems\";\nimport {\n MAX_RANGE_MS,\n PRESET_LABELS,\n RANGE_PRESETS,\n rangeBounds,\n rangeProblem,\n} from \"./range\";\nimport \"./analytics.css\";\n\n/** The `<select>` value standing for the custom range, which no preset uses. */\nconst CUSTOM = \"custom\";\n\n/** Props of {@link RangePicker}. */\nexport interface RangePickerProps {\n /** The range in force. */\n range: TimeRange;\n /** Called with the range the user chose. */\n onChange: (range: TimeRange) => void;\n /** An accessible name, e.g. \"Jobs range\"; several pickers may share a page. */\n label: string;\n /**\n * The longest span this API can serve (`meta.analytics.maxSpanMs`).\n * Presets beyond it are not offered and a custom range beyond it is\n * refused. Defaults to {@link MAX_RANGE_MS}. `null` sets no longest span:\n * every preset is offered and a custom range may be any length (a job\n * list's `finishedOn` window, which the API does not bound).\n */\n maxSpan?: number | null;\n}\n\n/**\n * Picks the range an analytics view is read over: a rolling preset, or a\n * custom span between two instants.\n *\n * Choosing a preset applies at once. The custom fields apply on \"Apply\", so a\n * half-typed start never triggers a read; they open on the instants the\n * current range covers, so switching to custom keeps what is on screen rather\n * than emptying the chart.\n */\nexport function RangePicker({\n range,\n onChange,\n label,\n maxSpan = MAX_RANGE_MS,\n}: RangePickerProps) {\n const bounds = rangeBounds(range);\n const [custom, setCustom] = useState<{\n from: number | undefined;\n to: number | undefined;\n }>(() => ({ from: bounds.from, to: bounds.to }));\n const [showCustom, setShowCustom] = useState(range.kind === \"custom\");\n const problems = useFieldProblems<\"from\" | \"to\">();\n\n const invalid =\n custom.from === undefined || custom.to === undefined\n ? \"Give both a start and an end.\"\n : rangeProblem(custom.from, custom.to, maxSpan);\n\n return (\n <div\n className=\"range-picker\"\n role=\"group\"\n aria-label={label}\n >\n <Field label=\"Range\">\n <Select\n value={\n showCustom\n ? CUSTOM\n : String(range.kind === \"preset\" ? range.seconds : CUSTOM)\n }\n onChange={(value) => {\n if (value === CUSTOM) {\n // Open on what is on screen now, so the chart does not empty.\n const now = rangeBounds(range);\n setCustom({ from: now.from, to: now.to });\n setShowCustom(true);\n return;\n }\n setShowCustom(false);\n onChange({\n kind: \"preset\",\n seconds: Number(value) as RangePreset,\n });\n }}\n options={[\n // A preset longer than this API keeps is not offered: it would\n // only ever come back clamped.\n ...RANGE_PRESETS.filter(\n (seconds) => maxSpan === null || seconds * 1_000 <= maxSpan,\n ).map((seconds) => ({\n value: String(seconds),\n label: PRESET_LABELS[seconds],\n })),\n { value: CUSTOM, label: \"Custom range…\" },\n ]}\n />\n </Field>\n {showCustom && (\n <>\n <Field\n label=\"From\"\n error={problems.problems.from}\n >\n <DateTimeInput\n value={custom.from}\n withSeconds\n max={custom.to}\n onChange={(from) =>\n setCustom((current) => ({ ...current, from }))\n }\n onProblem={(problem) => problems.report(\"from\", problem)}\n />\n </Field>\n <Field\n label=\"To\"\n error={problems.problems.to}\n hint={invalid === null || problems.blocked ? undefined : invalid}\n >\n <DateTimeInput\n value={custom.to}\n withSeconds\n min={custom.from}\n max={\n custom.from === undefined || maxSpan === null\n ? undefined\n : custom.from + maxSpan\n }\n onChange={(to) => setCustom((current) => ({ ...current, to }))}\n onProblem={(problem) => problems.report(\"to\", problem)}\n />\n </Field>\n <Button\n variant=\"primary\"\n disabled={invalid !== null || problems.blocked}\n onClick={() => {\n if (custom.from !== undefined && custom.to !== undefined) {\n onChange({ kind: \"custom\", from: custom.from, to: custom.to });\n }\n }}\n >\n Apply\n </Button>\n </>\n )}\n </div>\n );\n}\n",
80
+ "import type { AnalyticsRequest, RangeKey } from \"../api/analytics\";\nimport type { MetaAnalyticsDto } from \"../api/types\";\nimport type { TimeRange } from \"./range\";\nimport {\n analyticsRequest,\n rangeKey,\n requestResolution,\n} from \"../api/analytics\";\nimport { useMeta } from \"../meta/hooks\";\n\n/** What {@link useAnalyticsRange} gives a section. */\nexport interface AnalyticsRangeState {\n /**\n * What this deployment can serve (`meta.analytics`), or `null` when it\n * records nothing — in which case every analytics route is pruned and a\n * section must not read.\n */\n analytics: MetaAnalyticsDto | null;\n /**\n * The key fragment this range caches under. It holds the range's identity\n * (a preset's length, or a custom range's two instants) and the resolution\n * asked for — never the instants a rolling preset happens to resolve to,\n * which would mint a fresh cache entry every bucket. Query keys are hashed\n * structurally, so it need not be referentially stable.\n */\n key: RangeKey;\n /**\n * The request, resolved against the clock **at call time**. Call it inside a\n * query function, never to build a key: a rolling preset must cover a fresh\n * window on every fetch.\n */\n request: () => AnalyticsRequest;\n}\n\n/**\n * Turns the range a section shows into the request it sends and the key it\n * caches under, and says what `/meta` reports this deployment can serve.\n *\n * The resolution sent is the one the range wants, whatever the deployment\n * keeps (see `requestResolution`); what was actually **served** comes back in\n * the response's `range.resolution`, with `clamped`/`reason` when it differs,\n * and that is what a caption and an axis are written from.\n */\nexport function useAnalyticsRange(range: TimeRange): AnalyticsRangeState {\n const analytics = useMeta().analytics ?? null;\n return {\n analytics,\n key: rangeKey(range, requestResolution(range)),\n request: () => analyticsRequest(range),\n };\n}\n",
81
+ "import type { TimeRange } from \"./range\";\nimport { useCallback } from \"react\";\nimport { useQueryParam } from \"../routing\";\nimport { readRange, writeRange } from \"./range\";\n\n/**\n * The analytics range, in the URL, so a view is shareable and survives a\n * reload. `key` names the parameter: the page-wide one is `range`, a section\n * with its own control uses its own key (`jobsRange`, …), which is what the\n * \"apply to the whole page\" toggle switches between.\n */\nexport function useRange(key: string): [TimeRange, (next: TimeRange) => void] {\n const [raw, setRaw] = useQueryParam(key);\n const set = useCallback(\n (next: TimeRange) => setRaw(writeRange(next) ?? \"\"),\n [setRaw],\n );\n return [readRange(raw || null), set];\n}\n\n/**\n * Whether the range control applies to the whole page (one control for every\n * section) or to each section separately. Stored in the URL as `rangeScope`,\n * so a shared link carries it; `page` is the default, since comparing\n * sections over one window is what a dashboard is for.\n */\nexport function useRangeScope(): [boolean, (applyToPage: boolean) => void] {\n const [raw, setRaw] = useQueryParam(\"rangeScope\");\n const applyToPage = raw !== \"section\";\n const set = useCallback(\n (next: boolean) => setRaw(next ? \"\" : \"section\"),\n [setRaw],\n );\n return [applyToPage, set];\n}\n",
82
+ "import type { JobState } from \"./contract\";\nimport { JOB_STATES } from \"./contract\";\nimport { ApiError } from \"./errors\";\n\n/**\n * Minimal response-shape guards for the detail reads a screen renders\n * straight into its heading. They are not a schema: each checks only the few\n * fields the screen cannot draw without, so a host answering `{}`, `[]` or a\n * string (a misrouted proxy, a stub, a bug) gets the screen's error state\n * instead of an empty screen or a render crash.\n */\n\n/** A record's fields, for a shape check. */\nexport type ShapeFields = Readonly<Record<string, unknown>>;\n\n/** Whether a value is a plain JSON object (not an array, not `null`). */\nexport function isRecord(value: unknown): value is ShapeFields {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Returns `value` as `T` when it is a JSON object passing `check`; otherwise\n * throws an {@link ApiError} of kind `parse`, code `UNEXPECTED_RESPONSE`, so\n * the screen shows its error view (with Retry). `what` names the expected\n * thing (\"a job\"), `path` the API path read. Guarded reads are `GET`s the API\n * answers `200`, which is the status the error carries.\n */\nexport function assertShape<T>(\n value: unknown,\n check: (fields: ShapeFields) => boolean,\n what: string,\n path: string,\n): T {\n if (isRecord(value) && check(value)) {\n return value as T;\n }\n throw new ApiError({\n kind: \"parse\",\n status: 200,\n code: \"UNEXPECTED_RESPONSE\",\n title: \"The API answered an unexpected response\",\n detail: `Expected ${what}, got ${describe(value)}.`,\n instance: path,\n });\n}\n\n/**\n * {@link assertShape} for a body whose type is already known — a typed\n * client's result, typed by the route map — so nothing is asserted: `value`\n * comes back as the type it went in as, once `check` passes. The run-time\n * half of `assertShape` alone; it throws the same `UNEXPECTED_RESPONSE`.\n */\nexport function checkShape<T>(\n value: T,\n check: (fields: ShapeFields) => boolean,\n what: string,\n path: string,\n): T {\n if (isRecord(value) && check(value)) {\n return value;\n }\n throw new ApiError({\n kind: \"parse\",\n status: 200,\n code: \"UNEXPECTED_RESPONSE\",\n title: \"The API answered an unexpected response\",\n detail: `Expected ${what}, got ${describe(value)}.`,\n instance: path,\n });\n}\n\n/** A short description of what arrived instead. */\nfunction describe(value: unknown): string {\n if (Array.isArray(value)) {\n return \"an array\";\n }\n if (value === null) {\n return \"null\";\n }\n if (isRecord(value)) {\n return \"an object without the expected fields\";\n }\n return `a ${typeof value}`;\n}\n\n/** Whether every named field is a string. */\nexport function hasStrings(\n fields: ShapeFields,\n ...names: readonly string[]\n): boolean {\n return names.every((name) => typeof fields[name] === \"string\");\n}\n\n/** Whether a value is one of the {@link JOB_STATES}. */\nexport function isJobState(value: unknown): value is JobState {\n return (JOB_STATES as readonly unknown[]).includes(value);\n}\n",
83
+ "import type { ApiClient } from \"./client\";\nimport type { QueueDemandDto, QueueDemandListDto } from \"./types\";\nimport { queryKeys } from \"./queryKeys\";\nimport { assertShape } from \"./shape\";\n\n/**\n * A queue's demand: what a scaler polls to decide how many workers to run\n * (`GET /queues/:queue/demand`, and `GET /demand` for several queues).\n *\n * Both routes are served wherever `features.demand` is true — every backend\n * except `runner` mode — but not every backend can count directly: an answer\n * says so itself (`exact: false`), and `/meta` has no signal for it, so the\n * UI reads it from each answer rather than assuming.\n */\n\n/** The path segment of a queue name. */\nfunction segment(value: string): string {\n return encodeURIComponent(value);\n}\n\n/** `GET /queues/:queue/demand`, relative to the API base. */\nexport function demandPath(queue: string): string {\n return `/queues/${segment(queue)}/demand`;\n}\n\n/** Query keys of the demand reads. */\nexport const demandKeys = {\n /** `GET /queues/:queue/demand`. */\n queue: (queue: string) => [...queryKeys.queue(queue), \"demand\"] as const,\n /** `GET /demand?queues=…` for these queues, in this order. */\n list: (queues: readonly string[]) => [\"demand\", \"list\", queues] as const,\n};\n\n/** Whether `value` has the numeric fields every demand answer carries. */\nfunction isDemand(fields: Record<string, unknown>): boolean {\n return (\n typeof fields.queue === \"string\" &&\n typeof fields.paused === \"boolean\" &&\n typeof fields.exact === \"boolean\" &&\n typeof fields.capped === \"boolean\" &&\n [\n \"at\",\n \"waiting\",\n \"dueNow\",\n \"stalled\",\n \"active\",\n \"workers\",\n \"demand\",\n \"outstanding\",\n ].every((key) => typeof fields[key] === \"number\")\n );\n}\n\n/** `GET /queues/:queue/demand` (JSON). */\nexport async function getQueueDemand(\n api: ApiClient,\n queue: string,\n signal?: AbortSignal,\n): Promise<QueueDemandDto> {\n const path = demandPath(queue);\n const body = await api.request<unknown>(\"GET\", path, {\n signal,\n query: { format: \"json\" },\n });\n return assertShape<QueueDemandDto>(body, isDemand, \"a queue's demand\", path);\n}\n\n/**\n * `GET /demand` for `queues`, sent as repeated `queues` keys, so a name with\n * a comma in it is not split. A queue the caller cannot see is left out of\n * the answer, never an error.\n */\nexport async function listQueueDemand(\n api: ApiClient,\n queues: readonly string[],\n signal?: AbortSignal,\n): Promise<QueueDemandListDto> {\n const path = \"/demand\";\n const body = await api.request<unknown>(\"GET\", path, {\n signal,\n query: { format: \"json\", queues },\n });\n return assertShape<QueueDemandListDto>(\n body,\n (fields) =>\n Array.isArray(fields.queues) &&\n typeof fields.truncated === \"boolean\" &&\n fields.queues.every(\n (item: unknown) =>\n typeof item === \"object\" &&\n item !== null &&\n isDemand(item as Record<string, unknown>),\n ),\n \"the queues' demand\",\n path,\n );\n}\n\n/**\n * The absolute URLs a scaler reads a queue's demand from: JSON (a KEDA\n * `metrics-api` scaler, an ACA event job) and the Prometheus exposition.\n * Built on the page's origin when the API base is a path.\n */\nexport function demandUrls(\n apiBase: string,\n queue: string,\n origin: string,\n): { json: string; prometheus: string } {\n const url = new URL(\n `${apiBase.replace(/\\/$/, \"\")}${demandPath(queue)}`,\n origin,\n );\n const prometheus = new URL(url);\n prometheus.searchParams.set(\"format\", \"prometheus\");\n return { json: url.href, prometheus: prometheus.href };\n}\n",
84
+ "import type { ReactNode } from \"react\";\nimport { useId } from \"react\";\nimport { cx } from \"./classNames\";\n\n/** Props of {@link Card}. */\nexport interface CardProps {\n /** Heading, rendered as an `<h2>` that labels the card's region. */\n title?: ReactNode;\n /** Controls shown beside the heading. */\n actions?: ReactNode;\n /** Extra class names. */\n className?: string;\n /** The content. */\n children: ReactNode;\n}\n\n/** A bordered surface; with a `title` it is a labelled `<section>`. */\nexport function Card({ title, actions, className, children }: CardProps) {\n const headingId = useId();\n return (\n <section\n className={cx(\"card\", className)}\n aria-labelledby={title ? headingId : undefined}\n >\n {(title || actions) && (\n <div className=\"card-header\">\n {title && (\n <h2\n id={headingId}\n className=\"card-title\"\n >\n {title}\n </h2>\n )}\n {actions && <div className=\"card-actions\">{actions}</div>}\n </div>\n )}\n <div className=\"card-body\">{children}</div>\n </section>\n );\n}\n",
85
+ "/** The arithmetic of the `Pager`, pure. */\n\n/** The page sizes offered by default. */\nexport const DEFAULT_PAGE_SIZES: readonly number[] = [10, 20, 50, 100];\n\n/**\n * The largest page count still offered as a `<select>` of every page.\n * Beyond it the pager shows a bounded number input instead: a thousand-option\n * listbox is slow to build and impossible to scan, and typing \"437\" beats\n * scrolling to it.\n */\nexport const PAGE_SELECT_MAX = 100;\n\n/** A page position: where it starts and how many rows it holds. */\nexport interface PageWindow {\n /** Rows skipped. */\n offset: number;\n /** Rows per page. */\n limit: number;\n}\n\n/**\n * One move a `Pager` asks for: the window it wants, and how it was made.\n *\n * The extra fields exist for a list paged by **cursor**, where Previous and\n * Next walk rather than count. A pager without\n * {@link PagerWalk} never sets either, so a caller that reads\n * `offset` and `limit` alone — every list but the queue's jobs — sees exactly\n * what it saw before.\n */\nexport interface PageMove extends PageWindow {\n /**\n * Set when Previous or Next moved a **walked** list. The caller follows its\n * walk's cursor; `offset` then repeats the offset the pager was given\n * (there is no new one to report, and on a page whose backend did not count\n * what precedes it there is no old one either — it is `0`).\n */\n step?: \"next\" | \"prev\";\n /**\n * Whether only the page size changed. A walked list keeps its cursor for\n * one of these, so the page it re-reads starts at the row it starts at now;\n * `offset`/`limit` are the window a list paged by offset should move to.\n */\n resize?: boolean;\n}\n\n/**\n * Cursor navigation for a `Pager`: what it may walk, and whether this page\n * knows where it sits. Omitted by every list that pages by offset alone.\n */\nexport interface PagerWalk {\n /**\n * Whether Next can walk on — the API minted a cursor for the page after\n * this one (`page.next`). When it is false Next still moves by offset if\n * there is a next page, which is what a list the API refuses to walk (the\n * Active tab) falls back to.\n */\n canNext: boolean;\n /** Whether Previous can walk back to a page this walk has already shown. */\n canPrev: boolean;\n /**\n * Whether this page's row numbers are unknown: a walked page whose backend\n * did not count what precedes it (`page.offset` absent — SQL and MongoDB,\n * deliberately). The range then counts the rows shown rather than\n * numbering them, and no page number is offered, because nothing here knows\n * which page this is. Defaults to `false`.\n */\n unnumbered?: boolean;\n /**\n * A sentence explaining what walking this list does and does not show,\n * put on Previous and Next while they walk. Omit it for no tooltip.\n */\n hint?: string;\n}\n\n/** Inputs of {@link pagerState}. */\nexport interface PagerStateInput extends PageWindow {\n /** Total rows, when the API counted them. */\n total?: number | null;\n /** Rows actually on this page; defaults to `limit` (or what is left of `total`). */\n itemCount?: number;\n /** Whether the API said there are more rows after this page (used when `total` is unknown). */\n hasMore?: boolean;\n /**\n * Whether this page's row numbers are unknown ({@link PagerWalk.unnumbered}):\n * the range counts the rows instead of numbering them, `from`/`to` are `0`,\n * and there is no page count. Defaults to `false`.\n */\n unnumbered?: boolean;\n}\n\n/** What {@link pagerState} works out. */\nexport interface PagerState {\n /** 1-based index of the first row shown; `0` when the page is empty. */\n from: number;\n /** 1-based index of the last row shown; `0` when the page is empty. */\n to: number;\n /** The range as text: `\"1–20 of 345\"`, `\"1–20\"` without a total, `\"0 of 0\"` / `\"No rows\"` when empty. */\n text: string;\n /** Whether there is a previous page. */\n hasPrev: boolean;\n /** Whether there is a next page. */\n hasNext: boolean;\n /**\n * 1-based number of the page shown. Clamped into `1…pageCount` when the\n * total is known, so an offset past the end reads as the last page rather\n * than as a page that does not exist.\n */\n page: number;\n /**\n * How many pages there are, or `null` when the total is unknown — then\n * nothing can say how many pages follow this one. An empty result is one\n * (empty) page, never zero.\n */\n pageCount: number | null;\n}\n\n/** Formats row numbers with the locale's grouping. */\nconst numberFormat = new Intl.NumberFormat();\n\n/** Formats a count with the locale's grouping, as the range text does. */\nexport function formatNumber(value: number): string {\n return numberFormat.format(value);\n}\n\n/**\n * The pager's arithmetic, pure: the shown range and whether prev/next exist.\n * Without a total, \"next\" exists when `hasMore` says so, or (when `hasMore`\n * is not given) when the page came back full.\n *\n * With `unnumbered` the range counts the rows rather than numbering them,\n * since nothing knows where the page sits: \"1–20\" would be a guess, and a\n * guess that reads like a fact is worse than a count.\n */\nexport function pagerState({\n offset,\n limit,\n total,\n itemCount,\n hasMore,\n unnumbered,\n}: PagerStateInput): PagerState {\n const known = typeof total === \"number\";\n if (unnumbered === true) {\n const shown = Math.max(0, itemCount ?? limit);\n const rows = `${numberFormat.format(shown)} ${shown === 1 ? \"row\" : \"rows\"}`;\n return {\n from: 0,\n to: 0,\n text:\n shown === 0\n ? known\n ? `No rows of ${numberFormat.format(total)}`\n : \"No rows\"\n : known\n ? `${rows} of ${numberFormat.format(total)}`\n : rows,\n // Where the page sits is unknown, so an offset step back is not a move\n // anything here can work out: only the walk can go back.\n hasPrev: false,\n hasNext: hasMore ?? shown >= limit,\n page: 1,\n pageCount: null,\n };\n }\n const count = Math.max(\n 0,\n itemCount ?? (known ? Math.min(limit, total - offset) : limit),\n );\n const from = count > 0 ? offset + 1 : 0;\n const to = count > 0 ? offset + count : 0;\n const range =\n count > 0\n ? `${numberFormat.format(from)}–${numberFormat.format(to)}`\n : known\n ? \"0\"\n : \"No rows\";\n const text = known ? `${range} of ${numberFormat.format(total)}` : range;\n const hasNext = known\n ? offset + limit < total\n : (hasMore ?? (itemCount === undefined ? false : itemCount >= limit));\n const pageCount =\n known && limit > 0 ? Math.max(1, Math.ceil(total / limit)) : null;\n const onPage = limit > 0 ? Math.floor(offset / limit) + 1 : 1;\n const page = Math.max(1, Math.min(onPage, pageCount ?? onPage));\n return { from, to, text, hasPrev: offset > 0, hasNext, page, pageCount };\n}\n\n/**\n * The offset of a 1-based page, clamped into `1…pageCount` when one is given\n * — the inverse of {@link PagerState.page}, and pure.\n */\nexport function pageOffset(\n page: number,\n limit: number,\n pageCount?: number | null,\n): number {\n const last =\n typeof pageCount === \"number\" && pageCount > 0\n ? pageCount\n : Number.POSITIVE_INFINITY;\n const wanted = Math.floor(page);\n const clamped = Math.min(\n Math.max(Number.isFinite(wanted) ? wanted : 1, 1),\n last,\n );\n return (clamped - 1) * Math.max(0, limit);\n}\n\n/** Every page number, `1…pageCount`, for a select listing them all. */\nexport function pageNumbers(pageCount: number): number[] {\n const count = Number.isFinite(pageCount)\n ? Math.max(0, Math.floor(pageCount))\n : 0;\n return Array.from({ length: count }, (_unused, index) => index + 1);\n}\n\n/** The page sizes to offer: the defaults up to `max`, plus the current size and `max` itself. */\nexport function pageSizeOptions(\n sizes: readonly number[],\n current: number,\n max?: number,\n): number[] {\n const bounded = (size: number) =>\n size > 0 && (max === undefined || size <= max);\n const set = new Set(sizes.filter(bounded));\n if (bounded(current)) {\n set.add(current);\n }\n if (\n max !== undefined &&\n max > 0 &&\n (set.size === 0 || max < Math.max(...sizes))\n ) {\n set.add(max);\n }\n return [...set].sort((a, b) => a - b);\n}\n",
86
+ "import type { PageMove, PagerWalk, PageWindow } from \"./pagerState\";\nimport { useId, useState } from \"react\";\nimport { Button } from \"./Button\";\nimport { cx } from \"./classNames\";\nimport {\n DEFAULT_PAGE_SIZES,\n formatNumber,\n PAGE_SELECT_MAX,\n pageNumbers,\n pageOffset,\n pagerState,\n pageSizeOptions,\n} from \"./pagerState\";\n\n/** Props of {@link Pager}. */\nexport interface PagerProps extends PageWindow {\n /** Total rows, when known; without it the range reads \"1–20\". */\n total?: number | null;\n /** Rows on the current page; improves the range on the last page. */\n itemCount?: number;\n /** Whether the API reports more rows after this page (when there is no total). */\n hasMore?: boolean;\n /**\n * Cursor navigation: what Previous and Next may walk, and whether this page\n * knows where it sits. Omit it — every list but the queue's jobs does — and\n * the pager moves by offset exactly as it always has.\n */\n walk?: PagerWalk;\n /**\n * Called with the move asked for. Changing the size keeps the first visible\n * row on the new page. A walked list is moved by {@link PageMove.step}\n * rather than by `offset`; a pager without {@link PagerProps.walk} never\n * sets it.\n */\n onChange: (next: PageMove) => void;\n /** Page sizes to offer. Defaults to {@link DEFAULT_PAGE_SIZES}. */\n pageSizes?: readonly number[];\n /** The API's largest `limit` (e.g. `/meta.limits`); sizes above it are not offered. */\n maxPageSize?: number;\n /** Accessible name of the pager. Defaults to `\"Pagination\"`. */\n label?: string;\n /**\n * The largest page count still offered as a select of every page; above it\n * the Page control is a bounded number input. Defaults to\n * {@link PAGE_SELECT_MAX}.\n */\n pageSelectMax?: number;\n /** Disables every control, e.g. while a page loads. */\n disabled?: boolean;\n /** Extra class names. */\n className?: string;\n}\n\n/**\n * Offset/limit paging: the range, a page-size select, an exact-page control\n * and prev/next. Purely controlled.\n *\n * A pager with no total is a first-class rendering, not a degraded one: a\n * route may report `hasMore` without ever counting. Since neither a select\n * nor a bounded input can be built from an unknown number of pages, the Page\n * control is then replaced by the fact it would have shown — \"Page 3\", as\n * static text, and only while there is another page to go to. Nothing is\n * rendered disabled and unexplained, and prev/next and the size select stay\n * exactly as usable as they are with a total.\n *\n * With {@link PagerProps.walk} the same controls page a list by **cursor**:\n * Previous and Next report a `step` instead of a new offset, the Page control\n * still jumps by offset, and a page whose backend did not count what precedes\n * it shows neither a page number nor row numbers, because it has none.\n */\nexport function Pager({\n offset,\n limit,\n total,\n itemCount,\n hasMore,\n walk,\n onChange,\n pageSizes = DEFAULT_PAGE_SIZES,\n maxPageSize,\n label = \"Pagination\",\n pageSelectMax = PAGE_SELECT_MAX,\n disabled = false,\n className,\n}: PagerProps) {\n const sizeId = useId();\n const pageId = useId();\n const countId = useId();\n const state = pagerState({\n offset,\n limit,\n total,\n itemCount,\n hasMore,\n unnumbered: walk?.unnumbered,\n });\n /** Whether Previous walks back through the cursor trail rather than moving the offset. */\n const walksBack = walk?.canPrev === true;\n /** Whether Next walks on with the page's cursor rather than moving the offset. */\n const walksOn = walk?.canNext === true;\n const sizes = pageSizeOptions(pageSizes, limit, maxPageSize);\n /**\n * What is typed in the page input before it is committed, and the page it\n * was typed on; `null` shows the current page. Remembering the page keeps a\n * stale draft from outliving a move made elsewhere in the pager — press\n * Next mid-type and the box shows where you now are, not what you typed.\n */\n const [draft, setDraft] = useState<{\n /** The page it was typed on; a move away from that page discards it. */\n page: number;\n /** Exactly what is in the box, including `\"\"` and out-of-range numbers. */\n value: string;\n } | null>(null);\n const { page, pageCount } = state;\n /** The page input's value: the live draft, else the page we are on. */\n const typed = draft !== null && draft.page === page ? draft.value : null;\n /** Moves to the typed/picked page, if it is a page and not the current one. */\n const goToPage = (value: string) => {\n setDraft(null);\n if (pageCount === null) {\n return;\n }\n const wanted = Number.parseInt(value, 10);\n if (!Number.isFinite(wanted)) {\n return;\n }\n const next = pageOffset(wanted, limit, pageCount);\n if (next !== offset) {\n onChange({ offset: next, limit });\n }\n };\n return (\n <nav\n className={cx(\"pager\", className)}\n aria-label={label}\n >\n <span\n className=\"pager-range\"\n aria-live=\"polite\"\n title={\n walk?.unnumbered === true\n ? \"This backend does not count the rows before a walked page, so the rows are counted rather than numbered.\"\n : undefined\n }\n >\n {state.text}\n </span>\n <span className=\"pager-size\">\n <label htmlFor={sizeId}>Rows per page</label>\n <select\n id={sizeId}\n className=\"input select pager-select\"\n value={limit}\n disabled={disabled}\n onChange={(event) => {\n const next = Number(event.target.value);\n onChange({\n offset: Math.floor(offset / next) * next,\n limit: next,\n resize: true,\n });\n }}\n >\n {sizes.map((size) => (\n <option\n key={size}\n value={size}\n >\n {size}\n </option>\n ))}\n </select>\n </span>\n {pageCount === null ? (\n // No total, no page count, so nothing to pick from: say where we are\n // instead, and only while there is somewhere else to be — and never\n // on a walked page whose position nothing knows, where \"Page 1\" would\n // be the pager inventing the one fact it is missing.\n walk?.unnumbered !== true &&\n (state.hasPrev || state.hasNext) && (\n <span className=\"pager-page pager-page-static\">\n {`Page ${formatNumber(page)}`}\n </span>\n )\n ) : (\n <span className=\"pager-page\">\n <label htmlFor={pageId}>Page</label>\n {pageCount <= pageSelectMax ? (\n <select\n id={pageId}\n className=\"input select pager-select\"\n value={page}\n disabled={disabled}\n aria-describedby={countId}\n onChange={(event) => goToPage(event.target.value)}\n >\n {pageNumbers(pageCount).map((number) => (\n <option\n key={number}\n value={number}\n >\n {number}\n </option>\n ))}\n </select>\n ) : (\n <input\n id={pageId}\n className=\"input pager-select pager-page-input\"\n type=\"number\"\n inputMode=\"numeric\"\n min={1}\n max={pageCount}\n step={1}\n value={typed ?? String(page)}\n disabled={disabled}\n aria-describedby={countId}\n onChange={(event) =>\n setDraft({ page, value: event.target.value })\n }\n onBlur={(event) => goToPage(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n goToPage(event.currentTarget.value);\n }\n }}\n />\n )}\n <span\n className=\"pager-page-count\"\n id={countId}\n >\n {`of ${formatNumber(pageCount)}`}\n </span>\n </span>\n )}\n <span className=\"pager-buttons\">\n <Button\n size=\"sm\"\n disabled={disabled || !(state.hasPrev || walksBack)}\n title={walksBack ? walk?.hint : undefined}\n onClick={() =>\n onChange(\n walksBack\n ? { offset, limit, step: \"prev\" }\n : { offset: Math.max(0, offset - limit), limit },\n )\n }\n >\n Previous\n </Button>\n <Button\n size=\"sm\"\n disabled={disabled || !(state.hasNext || walksOn)}\n title={walksOn ? walk?.hint : undefined}\n onClick={() =>\n onChange(\n walksOn\n ? { offset, limit, step: \"next\" }\n : { offset: offset + limit, limit },\n )\n }\n >\n Next\n </Button>\n </span>\n </nav>\n );\n}\n",
87
+ "/** Inner padding, so a stroke at the extremes is not clipped. */\nexport const SPARK_PAD = 2;\n\n/** An SVG polyline `points` string for a series scaled to `max`. */\nexport function sparkPoints(\n values: readonly number[],\n max: number,\n width: number,\n height: number,\n): string {\n if (values.length === 0) {\n return \"\";\n }\n const innerW = width - SPARK_PAD * 2;\n const innerH = height - SPARK_PAD * 2;\n const step = values.length > 1 ? innerW / (values.length - 1) : 0;\n return values\n .map((value, index) => {\n const x = SPARK_PAD + (values.length > 1 ? index * step : innerW / 2);\n const y = SPARK_PAD + innerH - (max > 0 ? (value / max) * innerH : 0);\n return `${x.toFixed(1)},${y.toFixed(1)}`;\n })\n .join(\" \");\n}\n",
88
+ "import { SPARK_PAD, sparkPoints } from \"./sparkPoints\";\n\n/** Props of {@link Sparkline}. */\nexport interface SparklineProps {\n /** The main series, oldest first (e.g. completed per minute). */\n values: readonly number[];\n /** An optional second series on the same scale (e.g. failed per minute). */\n secondary?: readonly number[];\n /** Accessible description of what the line shows. */\n label: string;\n /** Width in CSS pixels. Defaults to `120`. */\n width?: number;\n /** Height in CSS pixels. Defaults to `28`. */\n height?: number;\n}\n\n/** A tiny inline line chart; decorative detail, with a text label for assistive tech. */\nexport function Sparkline({\n values,\n secondary,\n label,\n width = 120,\n height = 28,\n}: SparklineProps) {\n const max = Math.max(1, ...values, ...(secondary ?? []));\n return (\n <svg\n className=\"sparkline\"\n role=\"img\"\n aria-label={label}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n >\n <title>{label}</title>\n <line\n className=\"sparkline-baseline\"\n x1={SPARK_PAD}\n x2={width - SPARK_PAD}\n y1={height - SPARK_PAD}\n y2={height - SPARK_PAD}\n />\n {secondary && secondary.length > 0 && (\n <polyline\n className=\"sparkline-secondary\"\n points={sparkPoints(secondary, max, width, height)}\n />\n )}\n <polyline\n className=\"sparkline-primary\"\n points={sparkPoints(values, max, width, height)}\n />\n </svg>\n );\n}\n",
89
+ "import type { JobState } from \"./api/contract\";\n\n/** One shared integer formatter in the browser's locale. */\nconst integerFormat = new Intl.NumberFormat(undefined, {\n maximumFractionDigits: 0,\n});\n\n/** Formats a count, e.g. `12,345`. */\nexport function formatNumber(value: number): string {\n return integerFormat.format(value);\n}\n\n/**\n * The units {@link formatBytes} steps through, each 1024× the one before —\n * the binary units the rest of the app already prints (`jsonParse`, the\n * socket docs), since a memory figure is a 1024-based one.\n */\nconst BYTE_UNITS = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"] as const;\n\n/** One shared formatter for a size above a kilobyte: always exactly one decimal, so a column lines up. */\nconst byteFormat = new Intl.NumberFormat(undefined, {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n});\n\n/**\n * Formats a size in bytes in the browser's locale: `0 B`, `912 B`,\n * `1.5 KiB`, `412.3 MiB`, `2.0 GiB` — whole bytes below a kilobyte, then one\n * decimal in the largest unit that fits.\n *\n * **A missing size is not `0 B`.** `undefined`, `null` and anything not a\n * finite, non-negative number (an older worker reports no memory at all) give\n * `fallback` rather than a figure that was never measured.\n */\nexport function formatBytes(\n value: number | null | undefined,\n fallback = \"—\",\n): string {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return fallback;\n }\n let size = value;\n let index = 0;\n while (size >= 1024 && index < BYTE_UNITS.length - 1) {\n size /= 1024;\n index += 1;\n }\n const unit = BYTE_UNITS[index] ?? \"B\";\n return index === 0\n ? `${formatNumber(size)} ${unit}`\n : `${byteFormat.format(size)} ${unit}`;\n}\n\n/**\n * Display labels of the job states — the one place a state's label is\n * spelled. `failed` reads **\"Retrying\"**: in bun-jobs it is a job that failed\n * an attempt and waits for its retry (one that exhausts its attempts goes to\n * `dead`), so \"Failed\" misled. Only the label: the value stays `failed` in\n * every request, URL, query key, class name and test id.\n */\nexport const STATE_LABELS: Readonly<Record<JobState, string>> = {\n waiting: \"Waiting\",\n delayed: \"Delayed\",\n active: \"Active\",\n completed: \"Completed\",\n failed: \"Retrying\",\n dead: \"Dead\",\n \"waiting-children\": \"Waiting children\",\n};\n\n/**\n * A short explanation of a state whose label alone could mislead, for a\n * tooltip (the state badge's and the state tab's `title`); absent for the\n * rest. Tells someone hunting for \"failed\" jobs where they are.\n */\nexport const STATE_HINTS: Readonly<Partial<Record<JobState, string>>> = {\n failed:\n \"Failed an attempt, waiting to retry (the API calls this state failed). Jobs that gave up are under Dead.\",\n};\n\n/** `1 queue`, `2 queues`. */\nexport function plural(count: number, one: string, many = `${one}s`): string {\n return `${formatNumber(count)} ${count === 1 ? one : many}`;\n}\n\n/** What {@link displayText} shows for a value that is not text. */\nexport const INVALID_TEXT = \"(invalid)\";\n\n/**\n * A field the API types as a string, made safe to render as text: a string\n * as-is, a number or boolean stringified, anything else (an object, which\n * React would refuse to render as a child, `null`, `undefined`)\n * {@link INVALID_TEXT}. For names drawn from list responses the app does\n * not shape-check.\n */\nexport function displayText(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n return INVALID_TEXT;\n}\n",
90
+ "import type { JobState } from \"../api/contract\";\nimport { STATE_HINTS, STATE_LABELS } from \"../format\";\nimport { cx } from \"./classNames\";\n\n/** Props of {@link StateBadge}. */\nexport interface StateBadgeProps {\n /** The job state. */\n state: JobState;\n /** Extra class names. */\n className?: string;\n}\n\n/**\n * A job state, colour-coded by the `--state-*` tokens, with a tooltip where\n * the label alone could mislead ({@link STATE_HINTS}: \"Retrying\" is the\n * `failed` state).\n */\nexport function StateBadge({ state, className }: StateBadgeProps) {\n return (\n <span\n className={cx(\"state-badge\", `state-${state}`, className)}\n title={STATE_HINTS[state]}\n >\n <span\n className=\"state-dot\"\n aria-hidden=\"true\"\n />\n {STATE_LABELS[state]}\n </span>\n );\n}\n",
91
+ "import type { ReactNode } from \"react\";\nimport { cx } from \"./classNames\";\n\n/** Props of {@link Table}. */\nexport interface TableProps {\n /** Accessible name of the table (rendered as a visually hidden caption). */\n label: string;\n /** Extra class names on the `<table>`. */\n className?: string;\n /** `<thead>` / `<tbody>`. */\n children: ReactNode;\n}\n\n/**\n * A table in a scrollable, focusable region with a sticky header. Keyboard\n * users can scroll a wide table because the region is tabbable.\n */\nexport function Table({ label, className, children }: TableProps) {\n return (\n <div\n className=\"table-wrap\"\n role=\"region\"\n aria-label={label}\n // A scrollable region must be reachable by keyboard.\n tabIndex={0}\n >\n <table className={cx(\"table\", className)}>\n <caption className=\"visually-hidden\">{label}</caption>\n {children}\n </table>\n </div>\n );\n}\n",
92
+ "import type { PageWindow } from \"./pagerState\";\nimport { useState } from \"react\";\n\n/**\n * Paging a table whose rows are already in the browser.\n *\n * Several screens read a whole list in one request — the Overview's queues,\n * the live workers, the runners, a queue's repeat series — and a table of a\n * few hundred rows is unreadable however it was fetched. These cut that list\n * into pages without re-reading anything, so what a screen fetches, polls and\n * is allowed to see is unchanged.\n *\n * The arithmetic is here, once, so a screen keeping its window in the URL\n * ({@link clientWindow}) and one keeping it in component state\n * ({@link useClientPage}) clamp and hide the pager the same way.\n */\n\n/** The window a table actually shows, and whether it is worth a pager. */\nexport interface ClientWindow extends PageWindow {\n /**\n * Whether the rows outnumber one page, and so a pager belongs on the table.\n * A table that fits one page must not grow prev/next, a page select and a\n * size select that change nothing.\n */\n paged: boolean;\n}\n\n/**\n * The window to show: the one asked for, clamped to the rows there are now,\n * clamped to the rows there are.\n *\n * Clamping matters because these lists poll: rows go while the reader is on\n * the last page, and an unclamped window would show an empty table with no\n * hint that anything is left. It lands on the **last page with rows** rather\n * than the first, so a shrinking list keeps the reader where they were.\n *\n * @param total The rows the page is cut from.\n * @param window The window asked for (from the URL, or component state).\n */\nexport function clientWindow(total: number, window: PageWindow): ClientWindow {\n const limit = Math.max(1, Math.floor(window.limit));\n const lastStart = Math.max(0, Math.ceil(total / limit) - 1) * limit;\n return {\n offset: Math.min(Math.max(0, Math.floor(window.offset)), lastStart),\n limit,\n paged: total > limit,\n };\n}\n\n/** A page of rows, and what a `Pager` over them needs. */\nexport interface ClientPage<T> extends ClientWindow {\n /** The rows on the page, cut from the rows passed in. */\n rows: T[];\n /** Every row the page was cut from, which the pager shows as \"of N\". */\n total: number;\n /** Takes the window a `Pager` asks for. */\n onChange: (next: PageWindow) => void;\n}\n\n/**\n * A page of rows kept in component state, with the pager's window clamped by\n * {@link clientWindow}.\n *\n * @param rows Every row, already filtered and ordered as the table shows them.\n * @param defaultSize Rows per page to start with, or `null` for no paging at\n * all: every row on one page, and `paged` false. (`null` is for a shared table\n * whose callers opt in — see `WorkerTable`.)\n */\nexport function useClientPage<T>(\n rows: readonly T[],\n defaultSize: number | null,\n): ClientPage<T> {\n const [asked, setAsked] = useState<PageWindow>(() => ({\n offset: 0,\n limit: Math.max(1, defaultSize ?? 1),\n }));\n const total = rows.length;\n if (defaultSize === null) {\n return {\n rows: [...rows],\n offset: 0,\n limit: Math.max(1, total),\n total,\n paged: false,\n onChange: setAsked,\n };\n }\n const window = clientWindow(total, asked);\n return {\n rows: rows.slice(window.offset, window.offset + window.limit),\n ...window,\n total,\n onChange: setAsked,\n };\n}\n",
93
+ "import type { RefCallback } from \"react\";\nimport { useCallback, useState } from \"react\";\n\n/**\n * Whether an element has scrolled into view, latched: once `true` it stays\n * `true`, so work it started is not thrown away when it scrolls out again.\n * Without `IntersectionObserver` everything counts as visible.\n */\nexport function useInView<T extends Element>(\n rootMargin = \"200px\",\n): [RefCallback<T>, boolean] {\n const [inView, setInView] = useState(\n () => typeof IntersectionObserver === \"undefined\",\n );\n const ref = useCallback<RefCallback<T>>(\n (element) => {\n if (!element || inView || typeof IntersectionObserver === \"undefined\") {\n return;\n }\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n setInView(true);\n observer.disconnect();\n }\n },\n { rootMargin },\n );\n observer.observe(element);\n return () => observer.disconnect();\n },\n [inView, rootMargin],\n );\n return [ref, inView];\n}\n",
94
+ "/** Runs async work with at most `max` tasks in flight. */\nexport interface Limiter {\n /** Runs `task` when a slot is free; settles with its result. */\n run: <T>(task: () => Promise<T>) => Promise<T>;\n /** Tasks running now. */\n readonly active: number;\n /** Tasks waiting for a slot. */\n readonly pending: number;\n}\n\n/** Creates a {@link Limiter}. `max` below 1 is treated as 1. */\nexport function createLimiter(max: number): Limiter {\n const limit = Math.max(1, Math.floor(max));\n const queue: (() => void)[] = [];\n let active = 0;\n\n const release = () => {\n active--;\n queue.shift()?.();\n };\n\n return {\n run<T>(task: () => Promise<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const start = () => {\n active++;\n task().then(resolve, reject).finally(release);\n };\n if (active < limit) {\n start();\n } else {\n queue.push(start);\n }\n });\n },\n get active() {\n return active;\n },\n get pending() {\n return queue.length;\n },\n };\n}\n",
95
+ "import { useCan, useMeta } from \"../../meta/hooks\";\n\n/**\n * Whether an Overview analytics section may read at all: the caller may read\n * metrics, the backend serves analytics, and it records this kind.\n *\n * It lives apart from the sections themselves because the sections are loaded\n * on demand: the gate decides whether to render them, and so whether their\n * chunk is fetched at all. A deployment recording nothing therefore downloads\n * none of that code.\n *\n * Three things must hold, and each says something different:\n * `features.runnerMetrics` / `features.workerMetrics` — this API **serves**\n * that kind: the driver can store it **and** the API's mode mounts its\n * routes, so a flag and its route cannot disagree; `meta.analytics` — the\n * backend serves analytics (it is `null` when it cannot, and no route answers\n * 501); and `recording[kind]` — that kind is switched on, since recording is\n * what costs and a deployment may turn it off.\n *\n * Flags are not permissions: `readOnly` and the `actions` allow-list do not\n * turn them off, so `metrics.read` is still checked here. No new permission\n * action exists for analytics.\n */\nexport function useAnalyticsGate(kind: \"runners\" | \"workers\"): boolean {\n const meta = useMeta();\n const canMetrics = useCan(\"metrics.read\");\n const analytics = meta.analytics ?? null;\n const supported =\n kind === \"runners\"\n ? meta.features.runnerMetrics\n : meta.features.workerMetrics;\n return (\n canMetrics && supported && analytics !== null && analytics.recording[kind]\n );\n}\n",
96
+ "import type { QueryKey } from \"@tanstack/react-query\";\nimport type { ApiClient, QueryParams } from \"./client\";\nimport type { JobListSort, JobState } from \"./contract\";\nimport type {\n BulkPromoteResultDto,\n BulkRemoveResultDto,\n BulkRetryResultDto,\n CleanQueueBody,\n CleanResultDto,\n CountResultDto,\n DisableRepeatableResultDto,\n EnableRepeatableResultDto,\n JobCountsDto,\n JobPageDto,\n QueueDetailDto,\n QueueLimitsBody,\n QueueLimitsDto,\n QueueListDto,\n QueueListQuery,\n QueuePausedDto,\n QueueThroughputDto,\n RepeatableListDto,\n RetryAllBody,\n RetryAllResultDto,\n WorkerListDto,\n} from \"./types\";\nimport { segment } from \"./client\";\nimport { queryKeys } from \"./queryKeys\";\nimport { assertShape, hasStrings } from \"./shape\";\n\n/**\n * The queue screens' calls and query keys.\n *\n * Every key about one queue sits under `queryKeys.queue(q)` (`[\"queue\", q]`),\n * so one invalidation refreshes the whole screen; the paged queue list sits\n * under `[\"queues\"]`. After any mutation, {@link mutationInvalidations}\n * names what to refresh.\n */\n\n/** The filters of one jobs page, as they form its query key. */\nexport interface JobListFilters {\n /** The state tab, or `null` for every state. */\n state: JobState | null;\n /** Rows skipped. */\n offset: number;\n /**\n * The `page.next` of the page before, to walk on from it rather than count\n * to it; absent to page by {@link JobListFilters.offset}. The API ignores\n * `offset` when it is sent, so {@link jobListQuery} leaves the offset out.\n *\n * **Opaque, and bound to its walk** — the queue, the states, the sort and\n * the order. Never build, parse, store or compare one: it is meaningful\n * only to the walk that minted it, and one belonging to another walk is a\n * 400 rather than a silent restart at page one. So every change to one of\n * those must clear it, which is what the jobs table's walk key does.\n */\n cursor?: string;\n /** Rows per page. */\n limit: number;\n /** Order within the states. */\n order: \"asc\" | \"desc\";\n /** Exact names, or empty for any. */\n names: readonly string[];\n /** Id/name substring, or `\"\"` for none. */\n search: string;\n /** Whether to ask for `page.total`. */\n total: boolean;\n /**\n * The job-attribution filters, or absent for none. They reach the request\n * only when {@link jobListQuery} is told `features.jobAttribution` is true:\n * an API without it refuses all four parameters (400 `VALIDATION`).\n */\n attribution?: JobAttributionFilters;\n}\n\n/**\n * The window a jobs page is read over, on `finishedOn`. Stored as what the\n * user chose, never as instants a rolling window happened to resolve to, so a\n * query key stays put while the clock moves; {@link jobListQuery} resolves it.\n */\nexport type FinishedWindow =\n | {\n /** A rolling window ending now. */\n kind: \"last\";\n /** Its length, in ms: `finishedFrom` is now minus this, with no `finishedTo`. */\n ms: number;\n }\n | {\n /** A fixed span. */\n kind: \"between\";\n /** `finishedFrom`, epoch ms, inclusive. */\n from: number;\n /** `finishedTo`, epoch ms, exclusive; after `from`, or the API answers 400. */\n to: number;\n };\n\n/**\n * Which worker ran a job's last attempt (`processedBy`) and when it finished:\n * `GET /queues/:queue/jobs`' `workerKey`, `workerId`, `finishedFrom` and\n * `finishedTo`. ANDed with the other filters.\n */\nexport interface JobAttributionFilters {\n /**\n * Stable keys (`processedBy.key`), each sent as its own `workerKey`. The API\n * splits every value at commas, so a key holding one cannot be sent: check\n * {@link isSendableFilterValue} first.\n */\n workerKeys: readonly string[];\n /** Incarnation ids (`processedBy.id`), each its own `workerId`; the same comma rule. */\n workerIds: readonly string[];\n /**\n * The `finishedOn` window, or `null` for none. A job with no `finishedOn`\n * (waiting, delayed, active, waiting on children, failed with a retry\n * pending) never matches a window, from either end.\n */\n finished: FinishedWindow | null;\n}\n\n/**\n * Whether a value can be sent as ONE job-list filter value: the API splits\n * every value at commas, so a value holding one would become two filters.\n */\nexport function isSendableFilterValue(value: string): boolean {\n return value !== \"\" && !value.includes(\",\");\n}\n\n/** Options of {@link jobListQuery} and {@link listJobs}. */\nexport interface JobListQueryOptions {\n /**\n * `meta.features.jobAttribution`. Only when it is `true` are the\n * attribution filters sent; otherwise they are dropped, since the API\n * refuses them. Defaults to `false`.\n */\n attribution?: boolean;\n /** The clock a rolling `finished` window resolves against, epoch ms. Defaults to `Date.now()`. */\n now?: number;\n /**\n * `meta.features.addedByState`. When `true` the page is sorted by creation\n * time on every tab (`sort=createdAt`), unless the filters count the total:\n * see {@link sortsByCreation}. Otherwise no `sort` is sent and each tab\n * keeps its natural order, since an API without the feature refuses\n * `sort=createdAt` (400 `INVALID_ARGUMENT`). Defaults to `false`.\n */\n createdOrder?: boolean;\n}\n\n/**\n * Whether a page is sorted by creation time (`sort=createdAt`): only where\n * the backend serves it (`createdOrder`, `features.addedByState`) and never\n * together with `total=true`. On SQL and MongoDB a `createdAt` page of one\n * large state is a top-N sort over every job of that state, and counting it\n * walks them all again; a counted page keeps the tab's natural order instead.\n */\nexport function sortsByCreation(\n filters: Pick<JobListFilters, \"total\">,\n createdOrder: boolean | undefined,\n): boolean {\n return createdOrder === true && !filters.total;\n}\n\n/** Query keys of the queue screens. */\nexport const queueKeys = {\n /** Every paged `GET /queues` read by the queue list. */\n pages: [\"queues\", \"page\"] as const,\n /** One `GET /queues` page. */\n page: (query: Required<QueueListQuery>) => [\"queues\", \"page\", query] as const,\n /** `GET /queues/:queue`. */\n detail: (queue: string) => [...queryKeys.queue(queue), \"detail\"] as const,\n /** `GET /queues/:queue/counts`. */\n counts: (queue: string) => [...queryKeys.queue(queue), \"counts\"] as const,\n /** Every jobs page of a queue. */\n jobsAll: (queue: string) => [...queryKeys.queue(queue), \"jobs\"] as const,\n /** One `GET /queues/:queue/jobs` page. */\n jobs: (queue: string, filters: JobListFilters) =>\n [...queryKeys.queue(queue), \"jobs\", filters] as const,\n /** `GET /queues/:queue/workers`. */\n workers: (queue: string) => [...queryKeys.queue(queue), \"workers\"] as const,\n /** `GET /queues/:queue/throughput` (the Overview's key, shared). */\n throughput: (queue: string, minutes: number) =>\n queryKeys.queueThroughput(queue, minutes),\n /** `GET /queues/:queue/repeatables?include=data`. */\n repeatables: (queue: string) =>\n [...queryKeys.queue(queue), \"repeatables\"] as const,\n};\n\n/** What every mutation on a queue invalidates: the queue, every queue list, and the overview. */\nexport function mutationInvalidations(queue: string): QueryKey[] {\n return [queryKeys.queue(queue), queryKeys.queuesAll, [\"overview\"]];\n}\n\n/** The app path of one job (each segment percent-encoded as `segment()` does). */\nexport function jobPath(queue: string, id: string): string {\n return `/queues/${segment(queue)}/jobs/${segment(id)}`;\n}\n\n/** The app path of one queue. */\nexport function queuePath(queue: string): string {\n return `/queues/${segment(queue)}`;\n}\n\n/** The API path of a queue, plus an optional suffix. */\nfunction base(queue: string, suffix = \"\"): string {\n return `/queues/${segment(queue)}${suffix}`;\n}\n\n/**\n * Turns jobs-list filters into the request's query: only what differs from\n * the API's defaults, arrays as repeated keys, never `include`. The\n * attribution filters are added only with `options.attribution` true, and\n * `sort=createdAt` only as {@link sortsByCreation} allows.\n *\n * A `cursor` replaces the `offset` rather than joining it: the API ignores an\n * offset sent with a cursor, and sending one anyway would put a number in the\n * URL that decides nothing.\n */\nexport function jobListQuery(\n filters: JobListFilters,\n options: JobListQueryOptions = {},\n): QueryParams {\n const attribution =\n options.attribution === true ? filters.attribution : undefined;\n const finished = attribution?.finished ?? null;\n const now = options.now ?? Date.now();\n const sort: JobListSort | undefined = sortsByCreation(\n filters,\n options.createdOrder,\n )\n ? \"createdAt\"\n : undefined;\n const walking = filters.cursor !== undefined && filters.cursor !== \"\";\n return {\n state: filters.state === null ? undefined : [filters.state],\n cursor: walking ? filters.cursor : undefined,\n offset: !walking && filters.offset > 0 ? filters.offset : undefined,\n limit: filters.limit,\n order: filters.order === \"desc\" ? \"desc\" : undefined,\n sort,\n name: filters.names.length > 0 ? filters.names : undefined,\n search: filters.search || undefined,\n total: filters.total ? true : undefined,\n workerKey:\n attribution && attribution.workerKeys.length > 0\n ? attribution.workerKeys\n : undefined,\n workerId:\n attribution && attribution.workerIds.length > 0\n ? attribution.workerIds\n : undefined,\n finishedFrom:\n finished === null\n ? undefined\n : finished.kind === \"last\"\n ? now - finished.ms\n : finished.from,\n finishedTo:\n finished !== null && finished.kind === \"between\"\n ? finished.to\n : undefined,\n };\n}\n\n/** `GET /queues`, one page, with a case-insensitive name `search`. */\nexport function listQueuesPage(\n api: ApiClient,\n query: Required<QueueListQuery>,\n signal?: AbortSignal,\n): Promise<QueueListDto> {\n return api.request<QueueListDto>(\"GET\", \"/queues\", {\n query: {\n search: query.search || undefined,\n offset: query.offset > 0 ? query.offset : undefined,\n limit: query.limit,\n },\n signal,\n });\n}\n\n/**\n * `GET /queues/:queue`. A body without a string `name`, a boolean `paused`\n * and a number `total` rejects with an `UNEXPECTED_RESPONSE` `ApiError`, so\n * the screen shows its error state rather than a queue with nothing in it.\n */\nexport async function getQueue(\n api: ApiClient,\n queue: string,\n signal?: AbortSignal,\n): Promise<QueueDetailDto> {\n const path = base(queue);\n const body = await api.request<unknown>(\"GET\", path, { signal });\n return assertShape<QueueDetailDto>(\n body,\n (fields) =>\n hasStrings(fields, \"name\") &&\n typeof fields.paused === \"boolean\" &&\n typeof fields.total === \"number\",\n \"a queue\",\n path,\n );\n}\n\n/** `GET /queues/:queue/counts`. */\nexport function getQueueCounts(\n api: ApiClient,\n queue: string,\n signal?: AbortSignal,\n): Promise<JobCountsDto> {\n return api.request<JobCountsDto>(\"GET\", base(queue, \"/counts\"), { signal });\n}\n\n/**\n * `GET /queues/:queue/jobs`. The attribution filters go out only with\n * `options.attribution` (`features.jobAttribution`) true, and\n * `sort=createdAt` only with `options.createdOrder`\n * (`features.addedByState`) true.\n */\nexport function listJobs(\n api: ApiClient,\n queue: string,\n filters: JobListFilters,\n signal?: AbortSignal,\n options: JobListQueryOptions = {},\n): Promise<JobPageDto> {\n return api.request<JobPageDto>(\"GET\", base(queue, \"/jobs\"), {\n query: jobListQuery(filters, options),\n signal,\n });\n}\n\n/** `POST /queues/:queue/pause` (bodiless). */\nexport function pauseQueue(api: ApiClient, queue: string) {\n return api.request<QueuePausedDto>(\"POST\", base(queue, \"/pause\"));\n}\n\n/** `POST /queues/:queue/resume` (bodiless). */\nexport function resumeQueue(api: ApiClient, queue: string) {\n return api.request<QueuePausedDto>(\"POST\", base(queue, \"/resume\"));\n}\n\n/** `POST /queues/:queue/drain`. */\nexport function drainQueue(api: ApiClient, queue: string, delayed: boolean) {\n return api.request<CountResultDto>(\"POST\", base(queue, \"/drain\"), {\n body: { delayed },\n });\n}\n\n/** `POST /queues/:queue/clean`. */\nexport function cleanQueue(\n api: ApiClient,\n queue: string,\n body: CleanQueueBody,\n) {\n return api.request<CleanResultDto>(\"POST\", base(queue, \"/clean\"), { body });\n}\n\n/** `POST /queues/:queue/jobs/retry-all` (synchronous; may be slow). */\nexport function retryAllJobs(\n api: ApiClient,\n queue: string,\n body: RetryAllBody,\n) {\n return api.request<RetryAllResultDto>(\n \"POST\",\n base(queue, \"/jobs/retry-all\"),\n {\n body,\n },\n );\n}\n\n/** `POST /queues/:queue/jobs/retry`. */\nexport function bulkRetry(\n api: ApiClient,\n queue: string,\n ids: readonly string[],\n resetAttempts: boolean,\n) {\n return api.request<BulkRetryResultDto>(\"POST\", base(queue, \"/jobs/retry\"), {\n body: { ids, resetAttempts },\n });\n}\n\n/** `POST /queues/:queue/jobs/remove`. */\nexport function bulkRemove(\n api: ApiClient,\n queue: string,\n ids: readonly string[],\n) {\n return api.request<BulkRemoveResultDto>(\"POST\", base(queue, \"/jobs/remove\"), {\n body: { ids },\n });\n}\n\n/** `POST /queues/:queue/jobs/promote`. */\nexport function bulkPromote(\n api: ApiClient,\n queue: string,\n ids: readonly string[],\n) {\n return api.request<BulkPromoteResultDto>(\n \"POST\",\n base(queue, \"/jobs/promote\"),\n { body: { ids } },\n );\n}\n\n/** `PUT /queues/:queue/limits`. Resolves the stored limits. */\nexport function setQueueLimits(\n api: ApiClient,\n queue: string,\n body: QueueLimitsBody,\n) {\n return api.request<QueueLimitsDto | null>(\"PUT\", base(queue, \"/limits\"), {\n body,\n });\n}\n\n/** `DELETE /queues/:queue/limits`. */\nexport function removeQueueLimits(api: ApiClient, queue: string) {\n return api.request<QueueLimitsDto | null>(\"DELETE\", base(queue, \"/limits\"));\n}\n\n/** `GET /queues/:queue/workers`. */\nexport function listQueueWorkers(\n api: ApiClient,\n queue: string,\n signal?: AbortSignal,\n) {\n return api.request<WorkerListDto>(\"GET\", base(queue, \"/workers\"), { signal });\n}\n\n/** `GET /queues/:queue/throughput?minutes=`. */\nexport function getThroughput(\n api: ApiClient,\n queue: string,\n minutes: number,\n signal?: AbortSignal,\n): Promise<QueueThroughputDto> {\n return api.getQueueThroughput(queue, minutes, signal);\n}\n\n/** `GET /queues/:queue/repeatables?include=data`. */\nexport function listRepeatables(\n api: ApiClient,\n queue: string,\n signal?: AbortSignal,\n) {\n return api.request<RepeatableListDto>(\"GET\", base(queue, \"/repeatables\"), {\n query: { include: [\"data\"] },\n signal,\n });\n}\n\n/** `DELETE /queues/:queue/repeatables/:key`. */\nexport function removeRepeatable(api: ApiClient, queue: string, key: string) {\n return api.request<void>(\n \"DELETE\",\n base(queue, `/repeatables/${segment(key)}`),\n );\n}\n\n/** `POST /queues/:queue/repeatables/:key/disable`: idempotent; 404 for an unknown series. */\nexport function disableRepeatable(api: ApiClient, queue: string, key: string) {\n return api.request<DisableRepeatableResultDto>(\n \"POST\",\n base(queue, `/repeatables/${segment(key)}/disable`),\n );\n}\n\n/** `POST /queues/:queue/repeatables/:key/enable`: idempotent; 404 for an unknown series. */\nexport function enableRepeatable(api: ApiClient, queue: string, key: string) {\n return api.request<EnableRepeatableResultDto>(\n \"POST\",\n base(queue, `/repeatables/${segment(key)}/enable`),\n );\n}\n",
97
+ "import type { QueueEventName } from \"../../api/types\";\nimport { QUEUE_EVENT_TYPES } from \"@kingsleyweb/bun-jobs/api/contract\";\nimport { queryKeys } from \"../../api/queryKeys\";\nimport { queueKeys } from \"../../api/queues\";\nimport { liveChannels, useLiveInvalidation, usePollInterval } from \"../../live\";\nimport { POLL_INTERVAL_MS } from \"../../queryClient\";\n\n/**\n * How the queue screens stay current: events from the API's socket\n * invalidate the reads they change (see {@link useQueueLive}), and every read\n * also polls — at its base interval below while live updates are off, much\n * slower while they are live (`usePollInterval`), as a safety net for a lost\n * event.\n */\nexport const QUEUE_REFRESH = {\n /** Counts per state (the tabs and the header). */\n counts: POLL_INTERVAL_MS,\n /** The jobs page on screen. */\n jobs: POLL_INTERVAL_MS,\n /** The queue list. */\n list: POLL_INTERVAL_MS,\n /** The queue's detail (paused, limits): it changes rarely, and every mutation invalidates it. */\n detail: POLL_INTERVAL_MS * 3,\n /** Workers' heartbeats. */\n workers: POLL_INTERVAL_MS * 2,\n /** Demand: due-now and stalled move with the clock, not with an event. */\n demand: POLL_INTERVAL_MS * 2,\n /** Summon status: attempts time out and backoffs end with the clock. */\n summon: POLL_INTERVAL_MS,\n /** Throughput buckets are a minute wide. */\n throughput: 30_000,\n /** Repeatables' next runs. */\n repeatables: POLL_INTERVAL_MS * 6,\n} as const satisfies Record<string, number | false>;\n\n/** A kind of queue read. */\nexport type QueueRefreshKind = keyof typeof QUEUE_REFRESH;\n\n/**\n * Reads no event announces (a worker's heartbeat, a throughput bucket), so\n * they keep polling at their base interval even while live.\n */\nconst POLLED_ONLY: ReadonlySet<QueueRefreshKind> = new Set<QueueRefreshKind>([\n \"workers\",\n \"demand\",\n \"summon\",\n \"throughput\",\n]);\n\n/** The base refetch interval of one kind of queue read (while live updates are off). */\nexport function refreshInterval(kind: QueueRefreshKind): number | false {\n return QUEUE_REFRESH[kind];\n}\n\n/**\n * The refetch interval of one kind of queue read now: its base while live\n * updates are off, relaxed while they are live — except for the reads no\n * event announces, which always poll at their base.\n */\nexport function useRefreshInterval(kind: QueueRefreshKind): number | false {\n const relaxed = usePollInterval(QUEUE_REFRESH[kind]);\n return POLLED_ONLY.has(kind) ? QUEUE_REFRESH[kind] : relaxed;\n}\n\n/**\n * Queue events that do not change what a list or count shows: progress\n * (the jobs page shows none), adds that added nothing or only replaced\n * data, and a summon attempt (it starts or releases a worker, and moves no\n * job). Everything else moves a job between states, or adds or removes one.\n */\nconst NOT_COUNTED: ReadonlySet<QueueEventName> = new Set<QueueEventName>([\n \"progress\",\n \"duplicate\",\n \"throttled\",\n \"debounced\",\n \"summon\",\n]);\n\n/** The queue events that change counts, the jobs pages and the queue lists. */\nexport const COUNT_EVENTS: readonly QueueEventName[] = QUEUE_EVENT_TYPES.filter(\n (type) => !NOT_COUNTED.has(type),\n);\n\n/** The queue events that change a queue's detail (paused, totals): its lifecycle. */\nexport const DETAIL_EVENTS: readonly QueueEventName[] = [\n \"paused\",\n \"resumed\",\n \"drained\",\n \"cleaned\",\n \"retried\",\n];\n\n/** The queue events that change its repeatables (a series' next run). */\nexport const REPEATABLE_EVENTS: readonly QueueEventName[] = [\"repeatScheduled\"];\n\n/** What {@link useQueueLive} may refresh. */\nexport interface QueueLiveOptions {\n /** Whether the queue's detail and counts are readable (`queues.read`, settled). Nothing subscribes otherwise. */\n enabled: boolean;\n /** Whether the jobs pages are on screen (`jobs.list`). */\n jobs: boolean;\n /** Whether the repeatables panel may be (`repeatables.list`). */\n repeatables: boolean;\n}\n\n/**\n * The queue screen's live updates, on `queue/<q>`: counts on every event\n * that moves a job (progress excluded, so a job reporting progress never\n * refetches the jobs page), the jobs pages likewise, the detail on\n * pause/resume/drain/clean/retry-all, and the repeatables when a series\n * schedules its next run. Workers and throughput stay polled.\n */\nexport function useQueueLive(queue: string, options: QueueLiveOptions): void {\n const channels = [liveChannels.queue(queue)];\n useLiveInvalidation(\n channels,\n options.jobs\n ? [queueKeys.counts(queue), queueKeys.jobsAll(queue)]\n : [queueKeys.counts(queue)],\n { events: COUNT_EVENTS, enabled: options.enabled },\n );\n useLiveInvalidation(channels, [queueKeys.detail(queue)], {\n events: DETAIL_EVENTS,\n enabled: options.enabled,\n });\n useLiveInvalidation(channels, [queueKeys.repeatables(queue)], {\n events: REPEATABLE_EVENTS,\n enabled: options.enabled && options.repeatables,\n });\n}\n\n/** The Queues list's live updates: any counted event on `queues` refreshes its pages. */\nexport function useQueueListLive(enabled: boolean): void {\n useLiveInvalidation([liveChannels.queues], [queueKeys.pages], {\n events: COUNT_EVENTS,\n enabled,\n });\n}\n\n/** What {@link useOverviewLive} refreshes. */\nexport interface OverviewLiveOptions {\n /** Whether the totals card is on screen (`metrics.read`). */\n overview: boolean;\n /** The queue card's search, when it is on screen (`queues.list`); `null` otherwise. */\n search: string | null;\n}\n\n/**\n * The Overview's live updates, on `queues`: the namespace totals and the\n * queue table (the one search on screen). The sparklines stay polled.\n */\nexport function useOverviewLive({\n overview,\n search,\n}: OverviewLiveOptions): void {\n const keys = [\n // The prefix, not one window's key: the Overview's range decides the\n // window, and an event invalidates whichever one is on screen.\n ...(overview ? [queryKeys.overviewAll] : []),\n ...(search !== null ? [queryKeys.queues(search)] : []),\n ];\n useLiveInvalidation([liveChannels.queues], keys, {\n events: COUNT_EVENTS,\n enabled: keys.length > 0,\n });\n}\n",
98
+ "import type { QueueDemandDto } from \"../../../api/types\";\nimport { formatNumber } from \"../../../format\";\n\n/**\n * How a demand reading is written, so the UI never states a lower bound or\n * an approximation as a precise count.\n *\n * - **`capped`**: some count reached the backend's count cap, and the API says\n * only that \"the figures are lower bounds\", not which one. So every count\n * reads \"at least\" (`≥`) — the workers and the paused flag are not counts\n * of jobs and are exempt.\n * - **`exact: false`**: the backend cannot count demand directly and the\n * figures come from a fallback that is right as a trigger, approximate as a\n * count. It touches `dueNow` (only `1` or `0`), `stalled` (all of `active`\n * when no worker is live) and `nextDueAt`, and through them `demand` and\n * `outstanding`; `waiting` and `active` are still counted, so they are not\n * marked.\n */\n\n/** A count of a demand reading. */\nexport type DemandFigure =\n \"demand\" | \"outstanding\" | \"waiting\" | \"dueNow\" | \"stalled\" | \"active\";\n\n/** The figures the fallback of a backend that cannot count demand approximates. */\nconst APPROXIMATE: ReadonlySet<DemandFigure> = new Set<DemandFigure>([\n \"demand\",\n \"outstanding\",\n \"dueNow\",\n \"stalled\",\n]);\n\n/** How one figure of a reading is qualified: a lower bound, approximate, or neither. */\nexport interface DemandQualifier {\n /** A count cap was reached: the figure is at least this. */\n atLeast: boolean;\n /** The backend's fallback produced it: right as a trigger, approximate as a count. */\n approximate: boolean;\n}\n\n/** How `figure` of `reading` is qualified. */\nexport function qualify(\n reading: Pick<QueueDemandDto, \"capped\" | \"exact\">,\n figure: DemandFigure,\n): DemandQualifier {\n return {\n atLeast: reading.capped,\n approximate: !reading.exact && APPROXIMATE.has(figure),\n };\n}\n\n/**\n * `figure` of `reading` as text: the number, prefixed `≥` when it is a lower\n * bound and `≈` when it is approximate (`≥` wins: a lower bound is the\n * stronger thing to know).\n */\nexport function formatDemandFigure(\n reading: QueueDemandDto,\n figure: DemandFigure,\n): string {\n const { atLeast, approximate } = qualify(reading, figure);\n const value = formatNumber(reading[figure]);\n return atLeast ? `≥${value}` : approximate ? `≈${value}` : value;\n}\n\n/** The tooltip of a qualified figure, or `undefined` for a plain one. */\nexport function demandFigureHint(\n reading: QueueDemandDto,\n figure: DemandFigure,\n): string | undefined {\n const { atLeast, approximate } = qualify(reading, figure);\n const parts = [\n atLeast &&\n \"At least this many: a count reached the backend's cap, so the figures are lower bounds.\",\n approximate &&\n \"Approximate: this backend cannot count demand directly, so the figure is right as a trigger but not as a count.\",\n ].filter((part): part is string => part !== false);\n return parts.length === 0 ? undefined : parts.join(\" \");\n}\n\n/** What each figure means, for the panel's labels and hints. */\nexport const DEMAND_FIGURES: readonly {\n /** The figure. */\n figure: DemandFigure;\n /** Its label. */\n label: string;\n /** What it counts. */\n hint: string;\n}[] = [\n {\n figure: \"demand\",\n label: \"Demand\",\n hint: \"Work a worker could claim now: waiting, due now and stalled. 0 while the queue is paused. Point a launch-style scaler (a KEDA ScaledJob, an ACA event job) here.\",\n },\n {\n figure: \"outstanding\",\n label: \"Outstanding\",\n hint: \"Every unfinished job, each once: demand plus the jobs being worked on. It stays above 0 while a worker is busy on a long job. 0 while paused. Point a scale-style scaler (a KEDA ScaledObject) here.\",\n },\n {\n figure: \"waiting\",\n label: \"Waiting\",\n hint: \"Jobs in waiting.\",\n },\n {\n figure: \"dueNow\",\n label: \"Due now\",\n hint: \"Delayed jobs and pending retries whose time has passed, not yet promoted to waiting.\",\n },\n {\n figure: \"stalled\",\n label: \"Stalled\",\n hint: \"Active jobs whose worker died holding them: what the stalled sweep would recover now.\",\n },\n {\n figure: \"active\",\n label: \"Active\",\n hint: \"Jobs being worked on, stalled ones included.\",\n },\n];\n",
99
+ "import type { ReactNode } from \"react\";\nimport type { TimeRange } from \"../analytics/range\";\nimport type { JobState } from \"../api/contract\";\nimport type {\n AnalyticsSeriesDto,\n JobCounts,\n JobsBucketDto,\n JobsTotalsDto,\n Overview,\n QueueDemandDto,\n QueueSummaryDto,\n} from \"../api/types\";\nimport type { SectionProps } from \"./overview/sections\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport { useDeferredValue, useId, useMemo } from \"react\";\nimport { AnalyticsError } from \"../analytics/AnalyticsError\";\nimport { RangeCaption } from \"../analytics/RangeCaption\";\nimport { RangePicker } from \"../analytics/RangePicker\";\nimport { useAnalyticsRange } from \"../analytics/useAnalyticsRange\";\nimport { useRange, useRangeScope } from \"../analytics/useRange\";\nimport {\n analyticsKeys,\n describeResolution,\n getJobsAnalytics,\n getQueueJobsAnalytics,\n isRangeNotRetained,\n} from \"../api/analytics\";\nimport { JOB_STATES } from \"../api/contract\";\nimport { demandKeys, listQueueDemand } from \"../api/demand\";\nimport { queryKeys } from \"../api/queryKeys\";\nimport { Badge } from \"../components/Badge\";\nimport { Card } from \"../components/Card\";\nimport { EmptyState } from \"../components/EmptyState\";\nimport { ErrorView } from \"../components/ErrorView\";\nimport { Checkbox } from \"../components/inputs\";\nimport { Pager } from \"../components/Pager\";\nimport { Sparkline } from \"../components/Sparkline\";\nimport { Spinner } from \"../components/Spinner\";\nimport { StateBadge } from \"../components/StateBadge\";\nimport { Table } from \"../components/Table\";\nimport { useClientPage } from \"../components/useClientPage\";\nimport { useApiClient } from \"../context\";\nimport { formatNumber, plural } from \"../format\";\nimport { useInView } from \"../hooks/useInView\";\nimport { SEARCH_SHORTCUT } from \"../layout/shortcuts\";\nimport { createLimiter } from \"../limiter\";\nimport { usePollInterval } from \"../live\";\nimport { useCan, useFeature, useMeta } from \"../meta/hooks\";\nimport { POLL_INTERVAL_MS } from \"../queryClient\";\nimport { Link } from \"../router\";\nimport { useQueryParam } from \"../routing\";\nimport { AddedByStateGroup, RunnersSection, WorkersSection } from \"./lazy\";\nimport { useAnalyticsGate } from \"./overview/gate\";\nimport { useOverviewLive } from \"./queues/live\";\nimport { demandFigureHint, formatDemandFigure } from \"./queues/panels/demand\";\nimport \"./overview/sections.css\";\n\n/** Most per-queue analytics requests in flight at once, however many rows are visible. */\nconst SPARKLINE_CONCURRENCY = 4;\n\n/** Sparklines refresh slower than counts: no event announces a bucket, so they poll at this rate even while live. */\nconst SPARKLINE_REFETCH_MS = 30_000;\n\n/** Shared across rows so the cap is global. */\nconst throughputLimiter = createLimiter(SPARKLINE_CONCURRENCY);\n\n/**\n * Queues per page on the Overview.\n *\n * Twenty, like `/queues`: the card is a glance at the namespace, and a row\n * carries eight counts and a sparkline, so more than a screenful defeats it.\n * A sparkline is fetched per visible row, so a page is also what the card\n * costs in analytics reads.\n */\nconst QUEUE_PAGE_SIZE = 20;\n\n/** One stat tile. */\nfunction Stat({\n label,\n value,\n hint,\n className,\n}: {\n label: ReactNode;\n value: string;\n hint?: string;\n className?: string;\n}) {\n return (\n <div className={`stat ${className ?? \"\"}`}>\n <dt className=\"stat-label\">{label}</dt>\n <dd className=\"stat-value\">{value}</dd>\n {hint && <dd className=\"stat-hint\">{hint}</dd>}\n </div>\n );\n}\n\n/**\n * The \"Over the range\" tile: what happened to jobs in the range on screen, as\n * a compact label/number list rather than one headline, so several figures\n * fit one tile at a readable size.\n *\n * Two groups, never merged: \"Finished in range\" from the analytics series (by\n * finish time; failed *attempts*), and — only where `features.addedByState`\n * is true — the jobs added in the range by the state they are in now (by\n * creation time; still stored). They answer different questions, so they\n * are not expected to agree.\n */\nfunction RangeStat({\n jobs,\n added,\n}: {\n /** `GET /analytics/jobs` over the range on screen, once it has answered. */\n jobs?: AnalyticsSeriesDto<JobsBucketDto, JobsTotalsDto>;\n /** The range the added-by-state group is read over, or absent for no group. */\n added?: TimeRange;\n}) {\n const rows: { label: string; value: number; state: JobState }[] = jobs\n ? [\n {\n label: \"Completed\",\n value: jobs.totals.completed,\n state: \"completed\",\n },\n // Failed ATTEMPTS, not failed jobs: the series counts every attempt\n // that threw, including ones a retry later completed. Named so it\n // cannot be read as the `failed` state, which reads \"Retrying\"\n // (STATE_LABELS).\n {\n label: \"Failed attempts\",\n value: jobs.totals.failed,\n state: \"failed\",\n },\n ]\n : [];\n return (\n <section\n className=\"range-band\"\n aria-label=\"Over the range\"\n data-testid=\"range-stat\"\n >\n <p className=\"range-band-head\">\n <span className=\"range-band-title\">Over the range</span>\n {jobs && (\n <span className=\"muted\">in {describeResolution(jobs.range)}</span>\n )}\n </p>\n <div className=\"range-band-groups\">\n {jobs && (\n <div className=\"range-group\">\n {/* Named only beside the added group; alone it needs no name. */}\n {added && <p className=\"range-group-title\">Finished in range</p>}\n <dl className=\"range-cells\">\n {rows.map((row) => (\n <div\n key={row.state}\n className={`range-cell state-${row.state}`}\n >\n <dt>{row.label}</dt>\n <dd>{formatNumber(row.value)}</dd>\n </div>\n ))}\n </dl>\n </div>\n )}\n {added && (\n <div\n className=\"range-group range-group-wide\"\n data-testid=\"range-stat-added\"\n >\n <AddedByStateGroup range={added} />\n </div>\n )}\n </div>\n </section>\n );\n}\n\n/** Props of {@link OverviewSummary}. */\nexport interface OverviewSummaryProps {\n /** `GET /overview`: the counts, which no range applies to. */\n overview: Overview;\n /**\n * `GET /analytics/jobs` over the range on screen, when it has answered.\n * Its totals replace the deprecated `overview.throughput` window, and its\n * `range.resolution` is what the figure is labelled from.\n */\n jobs?: AnalyticsSeriesDto<JobsBucketDto, JobsTotalsDto>;\n /**\n * The range to count the jobs added in, by their state now\n * (`GET /overview/added`). Pass it only where `features.addedByState` is\n * true: absent, the tile shows the analytics series alone and reads nothing\n * more.\n */\n added?: TimeRange;\n}\n\n/** The namespace-wide totals: counts from `/overview`, throughput from the analytics series. */\nexport function OverviewSummary({\n overview,\n jobs,\n added,\n}: OverviewSummaryProps) {\n return (\n <div className=\"overview-summary\">\n <dl\n className=\"stat-grid\"\n aria-label=\"Jobs by state\"\n data-testid=\"state-counts\"\n >\n {JOB_STATES.map((state) => (\n <Stat\n key={state}\n className={`stat-state state-${state}`}\n label={<StateBadge state={state} />}\n value={formatNumber(overview.counts[state])}\n />\n ))}\n </dl>\n <dl\n className=\"stat-grid stat-grid-totals\"\n aria-label=\"Totals\"\n >\n <Stat\n label=\"Total jobs\"\n value={formatNumber(overview.total)}\n />\n <Stat\n label=\"Queues\"\n value={formatNumber(overview.queues)}\n hint={`${formatNumber(overview.pausedQueues)} paused`}\n />\n {overview.workers !== undefined && (\n <Stat\n label=\"Workers\"\n value={formatNumber(overview.workers)}\n />\n )}\n {/*\n Throughput belongs to the range the page is showing, so there is no\n fixed-window tile: with no analytics (`meta.analytics` is `null` and\n every analytics route is pruned) the figure is simply absent, rather\n than a \"last 60 minutes\" that contradicts the range picker above it.\n */}\n </dl>\n {/*\n Its own full-width band, not a tile in the totals grid: inside the grid\n its many figures stacked into one tall column and stretched every\n other tile to match.\n */}\n {(jobs || added) && (\n <RangeStat\n jobs={jobs}\n added={added}\n />\n )}\n {overview.truncated && (\n <p\n className=\"notice\"\n role=\"note\"\n >\n These totals cover only the first {plural(overview.queues, \"queue\")}:\n the API summarises at most that many.\n </p>\n )}\n </div>\n );\n}\n\n/** Props of {@link QueueSparkline}. */\nexport interface QueueSparklineProps {\n /** The queue. */\n queue: string;\n /** The range it covers; the response says at what resolution it was served. */\n range: TimeRange;\n}\n\n/** A queue's throughput sparkline, fetched once its row scrolls into view. */\nexport function QueueSparkline({ queue, range }: QueueSparklineProps) {\n const api = useApiClient();\n const [ref, inView] = useInView<HTMLSpanElement>();\n const { key, request } = useAnalyticsRange(range);\n const query = useQuery({\n queryKey: analyticsKeys.queueJobs(queue, key),\n queryFn: ({ signal }) =>\n throughputLimiter.run(() =>\n getQueueJobsAnalytics(api, queue, request(), signal),\n ),\n enabled: inView,\n refetchInterval: SPARKLINE_REFETCH_MS,\n staleTime: SPARKLINE_REFETCH_MS - 5_000,\n });\n const data = query.data;\n return (\n <span\n ref={ref}\n className=\"sparkline-cell\"\n >\n {data ? (\n <Sparkline\n values={data.buckets.map((bucket) => bucket.completed)}\n secondary={data.buckets.map((bucket) => bucket.failed)}\n label={`${queue}: ${formatNumber(data.totals.completed)} completed, ${formatNumber(data.totals.failed)} failed, in ${describeResolution(data.range)}`}\n />\n ) : query.isError ? (\n <span\n className=\"muted\"\n title={query.error.message}\n >\n {isRangeNotRetained(query.error) ? \"not kept\" : \"unavailable\"}\n </span>\n ) : (\n <span\n className=\"sparkline-placeholder\"\n aria-hidden=\"true\"\n />\n )}\n </span>\n );\n}\n\n/** Props of {@link QueueTable}. */\nexport interface QueueTableProps {\n /** The queues. */\n items: readonly QueueSummaryDto[];\n /** Whether to render the throughput column. Needs a `range`. */\n sparklines: boolean;\n /** The range each sparkline covers; required when `sparklines` is on. */\n range?: TimeRange;\n /**\n * The Demand column's readings, by queue name. Absent: no column\n * (`features.demand` off). `readings` is `undefined` while loading.\n */\n demand?: QueueDemandColumn;\n}\n\n/** What the Overview queue table's Demand column shows. */\nexport interface QueueDemandColumn {\n /** Each row's reading, by queue name, or `undefined` while the read is in flight. */\n readings: ReadonlyMap<string, QueueDemandDto> | undefined;\n /** The read's failure, if it failed. */\n error: Error | null;\n}\n\n/** The Demand column header's tooltip. */\nconst DEMAND_COLUMN_HINT =\n \"Work a worker could claim now: waiting, due now and stalled; 0 while the queue is paused. What a scaler polls. ≥ marks a lower bound, ≈ an approximate figure. Open a queue's Demand panel for the rest.\";\n\n/** Queues with their per-state counts. */\nexport function QueueTable({\n items,\n sparklines,\n range,\n demand,\n}: QueueTableProps) {\n const withSparklines = sparklines && range !== undefined;\n return (\n <Table label=\"Queues\">\n <thead>\n <tr>\n <th scope=\"col\">Queue</th>\n {JOB_STATES.map((state) => (\n <th\n key={state}\n scope=\"col\"\n className=\"num\"\n >\n <StateBadge state={state} />\n </th>\n ))}\n <th\n scope=\"col\"\n className=\"num\"\n >\n Total\n </th>\n {demand && (\n <th\n scope=\"col\"\n className=\"num\"\n title={DEMAND_COLUMN_HINT}\n >\n Demand\n </th>\n )}\n {withSparklines && <th scope=\"col\">Throughput</th>}\n </tr>\n </thead>\n <tbody>\n {items.map((queue) => (\n <tr\n key={queue.name}\n data-testid={`queue-row-${queue.name}`}\n >\n <th\n scope=\"row\"\n className=\"queue-name\"\n >\n <Link to={`/queues/${encodeURIComponent(queue.name)}`}>\n {queue.name}\n </Link>\n {queue.paused && (\n <Badge\n tone=\"warning\"\n className=\"queue-paused\"\n >\n Paused\n </Badge>\n )}\n </th>\n {JOB_STATES.map((state) => (\n <CountCell\n key={state}\n counts={queue.counts}\n state={state}\n />\n ))}\n <td className=\"num total\">{formatNumber(queue.total)}</td>\n {demand && (\n <DemandCell\n queue={queue.name}\n demand={demand}\n />\n )}\n {withSparklines && (\n <td>\n <QueueSparkline\n queue={queue.name}\n range={range}\n />\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </Table>\n );\n}\n\n/**\n * A row's demand, linked to the queue's Demand panel: the figure as its\n * answer qualifies it (≥, ≈), \"—\" for a queue the answer left out (the API\n * omits one the caller cannot read, never errors), and a muted word while\n * loading or after a failure.\n */\nfunction DemandCell({\n queue,\n demand,\n}: {\n /** The row's queue. */\n queue: string;\n /** The column's readings. */\n demand: QueueDemandColumn;\n}) {\n if (demand.readings === undefined) {\n return (\n <td className=\"num demand\">\n {demand.error ? (\n <span\n className=\"muted\"\n title={demand.error.message}\n >\n unavailable\n </span>\n ) : (\n <span\n className=\"muted\"\n aria-label=\"Loading demand\"\n >\n …\n </span>\n )}\n </td>\n );\n }\n const reading = demand.readings.get(queue);\n if (reading === undefined) {\n return (\n <td\n className=\"num demand muted\"\n title=\"The demand read did not include this queue.\"\n >\n —\n </td>\n );\n }\n const hint = [\n reading.paused ? \"Paused: a paused queue demands nothing.\" : undefined,\n demandFigureHint(reading, \"demand\"),\n ]\n .filter((part) => part !== undefined)\n .join(\" \");\n return (\n <td\n className={`num demand${reading.demand === 0 ? \" zero\" : \"\"}`}\n data-testid={`queue-demand-${queue}`}\n >\n <Link\n to={`/queues/${encodeURIComponent(queue)}?panel=demand`}\n title={hint === \"\" ? undefined : hint}\n >\n {formatDemandFigure(reading, \"demand\")}\n </Link>\n </td>\n );\n}\n\n/** One count cell; zero is dimmed so the non-zero counts stand out. */\nfunction CountCell({\n counts,\n state,\n}: {\n counts: JobCounts;\n state: (typeof JOB_STATES)[number];\n}) {\n const value = counts[state];\n return (\n <td className={`num count state-${state}${value === 0 ? \" zero\" : \"\"}`}>\n {formatNumber(value)}\n </td>\n );\n}\n\n/** The queue list card: search box, table, truncated notice, empty states. */\nfunction QueuesCard({ range, picker }: SectionProps) {\n const api = useApiClient();\n const canMetrics = useCan(\"metrics.read\");\n const throughput = useFeature(\"throughput\");\n // Every analytics route is pruned when the backend records nothing, so a\n // sparkline would be a 404 per row.\n const analytics = useMeta().analytics ?? null;\n const [search, setSearch] = useQueryParam(\"q\");\n const deferredSearch = useDeferredValue(search);\n const searchId = useId();\n const refetchInterval = usePollInterval(POLL_INTERVAL_MS);\n useOverviewLive({ overview: false, search: deferredSearch });\n const queues = useQuery({\n queryKey: queryKeys.queues(deferredSearch),\n queryFn: ({ signal }) => api.listQueues(deferredSearch, signal),\n refetchInterval,\n placeholderData: keepPreviousData,\n });\n // The read brings back every queue the API summarises (and says so when it\n // truncated), so the page is cut here rather than asked for: the filter, the\n // poll and the permissions are untouched.\n const page = useClientPage(queues.data?.items ?? [], QUEUE_PAGE_SIZE);\n // One `GET /demand` for the page on screen, not per row and not for every\n // queue: turning a page reads that page's demand.\n const demandOn = useFeature(\"demand\");\n const pageNames = useMemo(\n () => page.rows.map((queue) => queue.name),\n [page.rows],\n );\n const demand = useQuery({\n queryKey: demandKeys.list(pageNames),\n queryFn: ({ signal }) => listQueueDemand(api, pageNames, signal),\n enabled: demandOn && pageNames.length > 0,\n refetchInterval,\n placeholderData: keepPreviousData,\n });\n const demandReadings = useMemo(\n () =>\n demand.data === undefined\n ? undefined\n : new Map(\n demand.data.queues.map((reading) => [reading.queue, reading]),\n ),\n [demand.data],\n );\n\n return (\n <Card\n title=\"Queues\"\n actions={picker}\n >\n {/* Under the title rather than beside it: the filter belongs to the\n table below, and the header carries the range control. */}\n <div className=\"search queues-search\">\n <label\n htmlFor={searchId}\n className=\"visually-hidden\"\n >\n Filter queues by name\n </label>\n <input\n id={searchId}\n type=\"search\"\n className=\"input\"\n placeholder=\"Filter queues\"\n {...SEARCH_SHORTCUT}\n value={search}\n maxLength={200}\n onChange={(event) => setSearch(event.target.value)}\n />\n </div>\n {queues.isPending ? (\n <Spinner\n label=\"Loading queues\"\n showLabel\n />\n ) : queues.isError ? (\n <ErrorView\n error={queues.error}\n title=\"Could not load queues\"\n onRetry={() => void queues.refetch()}\n />\n ) : queues.data.items.length === 0 ? (\n deferredSearch ? (\n <EmptyState\n title=\"No queues match\"\n description={`No queue name contains “${deferredSearch}”.`}\n />\n ) : (\n <EmptyState\n title=\"No queues yet\"\n description=\"Queues appear here once a job is added to one.\"\n />\n )\n ) : (\n <>\n <QueueTable\n items={page.rows}\n sparklines={throughput && canMetrics && analytics !== null}\n range={range}\n demand={\n demandOn\n ? { readings: demandReadings, error: demand.error }\n : undefined\n }\n />\n {page.paged && (\n <Pager\n label=\"Queue pages\"\n offset={page.offset}\n limit={page.limit}\n total={page.total}\n itemCount={page.rows.length}\n onChange={page.onChange}\n />\n )}\n {queues.data.truncated && (\n <p\n className=\"notice\"\n role=\"note\"\n data-testid=\"queues-truncated\"\n >\n Showing the first {plural(queues.data.items.length, \"queue\")}.\n More exist; narrow the filter to find the others.\n </p>\n )}\n </>\n )}\n </Card>\n );\n}\n\n/** The namespace-wide totals card, read over `range`. */\nfunction SummaryCard({ range, picker }: SectionProps) {\n const api = useApiClient();\n // Where the backend cannot count by creation time the route does not\n // exist, so nothing is read and the tile keeps the series alone.\n const addedByState = useFeature(\"addedByState\");\n const refetchInterval = usePollInterval(POLL_INTERVAL_MS);\n const { analytics, key, request } = useAnalyticsRange(range);\n useOverviewLive({ overview: true, search: null });\n // The counts are a snapshot, not a window, so `/overview` is read without\n // the deprecated `minutes`; everything the range applies to comes from the\n // analytics series below.\n const overview = useQuery({\n queryKey: queryKeys.overview(),\n queryFn: ({ signal }) => api.getOverview(undefined, signal),\n refetchInterval,\n });\n const jobs = useQuery({\n queryKey: analyticsKeys.jobs(key),\n queryFn: ({ signal }) => getJobsAnalytics(api, request(), signal),\n enabled: analytics !== null,\n refetchInterval,\n });\n return (\n <Card\n title=\"Jobs\"\n actions={picker}\n >\n <RangeCaption\n range={jobs.data?.range}\n testId=\"jobs-range-caption\"\n />\n {overview.isPending ? (\n <Spinner\n label=\"Loading the overview\"\n showLabel\n />\n ) : overview.isError ? (\n <ErrorView\n error={overview.error}\n title=\"Could not load the overview\"\n onRetry={() => void overview.refetch()}\n />\n ) : (\n <>\n <OverviewSummary\n overview={overview.data}\n jobs={jobs.data}\n added={addedByState ? range : undefined}\n />\n {jobs.isError ? (\n <AnalyticsError\n error={jobs.error}\n title=\"Could not load job analytics\"\n onRetry={() => void jobs.refetch()}\n testId=\"jobs-range-not-retained\"\n />\n ) : (\n jobs.data && (\n <div\n className=\"overview-jobs-chart\"\n data-testid=\"jobs-series\"\n >\n <Sparkline\n values={jobs.data.buckets.map((bucket) => bucket.completed)}\n secondary={jobs.data.buckets.map((bucket) => bucket.failed)}\n label={`Every queue: ${formatNumber(jobs.data.totals.completed)} completed, ${formatNumber(jobs.data.totals.failed)} failed, in ${describeResolution(jobs.data.range)}`}\n width={240}\n />\n </div>\n )\n )}\n </>\n )}\n </Card>\n );\n}\n\n/** The start page: namespace-wide counts, and the queue table, over a chosen range. */\nexport function OverviewScreen() {\n const canMetrics = useCan(\"metrics.read\");\n const canQueues = useCan(\"queues.list\");\n // What this API can actually serve; an older one reports none and the\n // picker falls back to the contract's ceiling.\n const maxSpan = useMeta().analytics?.maxSpanMs;\n const [applyToPage, setApplyToPage] = useRangeScope();\n const [pageRange, setPageRange] = useRange(\"range\");\n const [jobsRange, setJobsRange] = useRange(\"jobsRange\");\n const [queuesRange, setQueuesRange] = useRange(\"queuesRange\");\n const [runnersRange, setRunnersRange] = useRange(\"runnersRange\");\n const [workersRange, setWorkersRange] = useRange(\"workersRange\");\n // Decided here, outside the sections, so a deployment recording nothing\n // never fetches their chunk.\n const canRunnerMetrics = useAnalyticsGate(\"runners\");\n const canWorkerMetrics = useAnalyticsGate(\"workers\");\n\n /** One section's range and its own control, by whether the page-wide one is in force. */\n const section = (\n range: TimeRange,\n set: (next: TimeRange) => void,\n label: string,\n ): SectionProps => ({\n range: applyToPage ? pageRange : range,\n picker: applyToPage ? null : (\n <RangePicker\n range={range}\n onChange={set}\n label={label}\n maxSpan={maxSpan}\n />\n ),\n });\n\n return (\n <div\n className=\"screen\"\n data-testid=\"overview\"\n >\n <div className=\"overview-header\">\n <h1 className=\"screen-title\">Overview</h1>\n <div className=\"overview-range\">\n {applyToPage && (\n <RangePicker\n range={pageRange}\n onChange={setPageRange}\n label=\"Range for every section\"\n maxSpan={maxSpan}\n />\n )}\n <Checkbox\n className=\"range-scope\"\n checked={applyToPage}\n onChange={setApplyToPage}\n label=\"Apply date filter to page\"\n hint=\"One range for every section, so the numbers are comparable. Off: each section has its own.\"\n />\n </div>\n </div>\n {canMetrics && (\n <SummaryCard {...section(jobsRange, setJobsRange, \"Jobs range\")} />\n )}\n {canQueues && (\n <QueuesCard {...section(queuesRange, setQueuesRange, \"Queues range\")} />\n )}\n {canRunnerMetrics && (\n <RunnersSection\n {...section(runnersRange, setRunnersRange, \"Runners range\")}\n />\n )}\n {canWorkerMetrics && (\n <WorkersSection\n {...section(workersRange, setWorkersRange, \"Workers range\")}\n />\n )}\n {!canMetrics && !canQueues && (\n <EmptyState\n title=\"Nothing to show\"\n description=\"You may not read metrics or list queues on this API.\"\n />\n )}\n </div>\n );\n}\n",
100
+ "import type { NavItem } from \"./layout/nav\";\nimport type { RouteDef } from \"./routing\";\nimport { EmptyState } from \"./components/EmptyState\";\nimport {\n QueuePermissionScope,\n RunnerPermissionScope,\n} from \"./meta/PermissionScope\";\nimport { Navigate } from \"./router\";\nimport {\n DocsHomeScreen,\n EventsScreen,\n HttpDocsScreen,\n JobScreen,\n ProvidersScreen,\n QueueScreen,\n QueuesListScreen,\n RunnerScreen,\n RunnersListScreen,\n SummoningScreen,\n WorkerScreen,\n WorkersListScreen,\n WsDocsScreen,\n} from \"./screens/lazy\";\nimport { OverviewScreen } from \"./screens/Overview\";\n\n/** The routes this caller can reach, from its nav entries. */\nexport function buildRoutes(nav: readonly NavItem[]): RouteDef[] {\n const routes: RouteDef[] = [];\n const first = nav[0];\n const overview = nav.find((item) => item.id === \"overview\");\n routes.push({\n path: \"/\",\n element: overview ? (\n <OverviewScreen />\n ) : first ? (\n <Navigate to={first.to} />\n ) : (\n <div className=\"screen\">\n <EmptyState\n headingLevel={1}\n title=\"Nothing to show\"\n description=\"This API offers you no screens. Ask for access, or check the mount's sections.\"\n />\n </div>\n ),\n });\n for (const item of nav) {\n if (item.id === \"overview\") {\n continue;\n }\n if (item.id === \"queues\") {\n // Most specific first: the router takes the first match.\n routes.push(\n {\n path: \"/queues/:queue/jobs/:id\",\n element: (\n <QueuePermissionScope>\n <JobScreen />\n </QueuePermissionScope>\n ),\n },\n {\n path: \"/queues/:queue\",\n element: (\n <QueuePermissionScope>\n <QueueScreen />\n </QueuePermissionScope>\n ),\n },\n { path: \"/queues\", element: <QueuesListScreen /> },\n );\n continue;\n }\n if (item.id === \"workers\") {\n routes.push(\n {\n // A key is unique only within its queue, so the page is addressed\n // by the pair; worker actions authorize against the queue.\n path: \"/workers/:queue/:key\",\n element: (\n <QueuePermissionScope>\n <WorkerScreen />\n </QueuePermissionScope>\n ),\n },\n { path: \"/workers\", element: <WorkersListScreen /> },\n );\n continue;\n }\n if (item.id === \"summoning\") {\n routes.push({ path: \"/summon\", element: <SummoningScreen /> });\n continue;\n }\n if (item.id === \"providers\") {\n routes.push({ path: \"/providers\", element: <ProvidersScreen /> });\n continue;\n }\n if (item.id === \"events\") {\n routes.push({ path: \"/events\", element: <EventsScreen /> });\n continue;\n }\n if (item.id === \"runners\") {\n routes.push(\n {\n path: \"/runners/:runner\",\n element: (\n <RunnerPermissionScope>\n <RunnerScreen />\n </RunnerPermissionScope>\n ),\n },\n { path: \"/runners\", element: <RunnersListScreen /> },\n );\n continue;\n }\n // docs: most specific first.\n routes.push(\n { path: \"/docs/http/:operationId\", element: <HttpDocsScreen /> },\n { path: \"/docs/http\", element: <HttpDocsScreen /> },\n { path: \"/docs/ws/:item\", element: <WsDocsScreen /> },\n { path: \"/docs/ws\", element: <WsDocsScreen /> },\n { path: \"/docs\", element: <DocsHomeScreen /> },\n );\n }\n return routes;\n}\n",
101
+ "import { EmptyState } from \"../components/EmptyState\";\nimport { Link } from \"../router\";\n\n/** The 404 screen: an unknown path, or a screen this caller cannot use. */\nexport function NotFoundScreen() {\n return (\n <div\n className=\"screen\"\n data-testid=\"not-found\"\n >\n <h1 className=\"screen-title\">Page not found</h1>\n <EmptyState\n title=\"There is nothing here\"\n description=\"The page does not exist, or this API does not offer it to you.\"\n action={<Link to=\"/\">Go to the start page</Link>}\n />\n </div>\n );\n}\n",
102
+ "import { Layout } from \"./layout/Layout\";\nimport { useNav } from \"./layout/useNav\";\nimport { LiveProvider } from \"./live\";\nimport { Routes } from \"./router\";\nimport { buildRoutes } from \"./routes\";\nimport { NotFoundScreen } from \"./screens/NotFound\";\n\n/** The app, below the providers and loaded meta: the live socket, layout, nav, and the matched screen. */\nexport function App() {\n const nav = useNav();\n return (\n <LiveProvider>\n <Layout nav={nav}>\n <Routes\n routes={buildRoutes(nav)}\n notFound={<NotFoundScreen />}\n />\n </Layout>\n </LiveProvider>\n );\n}\n",
103
+ "/**\n * The contract between `jobsUi()` (server, `lib/jobs/`) and the React app (`app/jobs/`).\n *\n * The server resolves this once per mount and inlines it into the HTML shell as\n * `<script type=\"application/json\" id=\"bun-jobs-ui-config\" nonce=\"…\">`. The app\n * reads it before its first request. It must stay free of runtime imports: both\n * sides import it, and the app side is bundled for the browser.\n */\n\nimport type { UiTheme } from \"../../kit/browser/shared\";\nimport type { UiUnauthorized } from \"./unauthorized\";\n\nexport type { UiTheme };\n\n/** Id of the `<script type=\"application/json\">` element carrying {@link JobsUiConfig}. */\nexport const JOBS_UI_CONFIG_ELEMENT_ID = \"bun-jobs-ui-config\";\n\n/** Sections of the app a mount can switch off. */\nexport interface JobsUiSections {\n /** Job/queue/runner management screens. Defaults to `true`. */\n manage: boolean;\n /** The OpenAPI and AsyncAPI documentation viewers. Defaults to `true`. */\n docs: boolean;\n}\n\n/** Resolved configuration handed to the browser. Never carries secrets. */\nexport interface JobsUiConfig {\n /** Shape version of this object, bumped on a breaking change. Currently `1`. */\n version: 1;\n /** Page title and brand text. Defaults to `\"Jobs\"`. */\n title: string;\n /** Absolute path the UI is mounted at, no trailing slash (e.g. `\"/jobs\"`). Client routes live under it. */\n basePath: string;\n /** Path the hashed assets are served from, e.g. `\"/jobs/assets\"`. */\n assetsPath: string;\n /**\n * Base URL of the management API with no trailing slash: a same-origin\n * absolute path (`\"/jobs-api\"`) or, with `apiUrl`, a full origin-qualified URL.\n */\n apiBase: string;\n /**\n * Header every mutation must carry (any non-empty value), or `null` when the\n * API has no CSRF header configured. Mirrors the API's `csrf.header`.\n */\n csrfHeader: string | null;\n /**\n * The API's WebSocket endpoint, when it has one: `path` is the full path\n * (including the API basePath); `port` is set only for a dedicated-port\n * socket. `null` when the API has no socket. `/meta` remains the authority at\n * runtime; this lets the app connect without waiting for it.\n */\n websocket: { path: string; port: number | null } | null;\n /** Full paths of the API's spec documents, or `null` when docs are off. */\n docs: { openapi: string; asyncapi: string | null } | null;\n /** Which sections are enabled. */\n sections: JobsUiSections;\n /** Initial colour scheme. */\n theme: UiTheme;\n /**\n * Where an authorization failure sends the browser (`jobsUi()`'s\n * `unauthorized`), or `null` when it is off: the app then shows each\n * screen's own message, as before.\n */\n unauthorized: UiUnauthorized | null;\n}\n",
104
+ "import type { JobsUiConfig } from \"../../lib/jobs/browser/config.ts\";\nimport { isUiUnauthorized } from \"../../lib/kit/browser/unauthorized\";\nimport { JOBS_UI_CONFIG_ELEMENT_ID } from \"../../lib/jobs/browser/config.ts\";\n\n/** The injected configuration was missing or malformed. */\nexport class UiConfigError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UiConfigError\";\n }\n}\n\n/** Whether a value is a plain object. */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Checks the fields the app relies on before its first request. It does not\n * re-validate everything the server resolved — only enough that a stale or\n * hand-edited shell fails with a message instead of a blank page.\n */\nexport function parseUiConfig(value: unknown): JobsUiConfig {\n if (!isRecord(value)) {\n throw new UiConfigError(\"The UI configuration is not an object.\");\n }\n if (value.version !== 1) {\n throw new UiConfigError(\n `Unsupported UI configuration version ${JSON.stringify(value.version)} (expected 1).`,\n );\n }\n for (const key of [\"title\", \"basePath\", \"assetsPath\", \"apiBase\"] as const) {\n if (typeof value[key] !== \"string\") {\n throw new UiConfigError(\n `The UI configuration's \"${key}\" is not a string.`,\n );\n }\n }\n if (value.csrfHeader !== null && typeof value.csrfHeader !== \"string\") {\n throw new UiConfigError(\n `The UI configuration's \"csrfHeader\" must be a string or null.`,\n );\n }\n if (!isRecord(value.sections)) {\n throw new UiConfigError(`The UI configuration's \"sections\" is missing.`);\n }\n if (![\"system\", \"light\", \"dark\"].includes(String(value.theme))) {\n throw new UiConfigError(`The UI configuration's \"theme\" is not valid.`);\n }\n // Missing in a shell from before the option existed: off.\n const unauthorized = value.unauthorized ?? null;\n if (unauthorized !== null && !isUiUnauthorized(unauthorized)) {\n throw new UiConfigError(\n `The UI configuration's \"unauthorized\" must be null or { redirectTo, returnParam, statuses }.`,\n );\n }\n return { ...value, unauthorized } as unknown as JobsUiConfig;\n}\n\n/** Reads the {@link JobsUiConfig} the server inlined as `<script type=\"application/json\" id=\"bun-jobs-ui-config\">`. */\nexport function readUiConfig(doc: Document = document): JobsUiConfig {\n const element = doc.getElementById(JOBS_UI_CONFIG_ELEMENT_ID);\n if (!element) {\n throw new UiConfigError(\n `The page has no #${JOBS_UI_CONFIG_ELEMENT_ID} element: it was not served by jobsUi().`,\n );\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(element.textContent ?? \"\");\n } catch {\n throw new UiConfigError(\"The UI configuration is not valid JSON.\");\n }\n return parseUiConfig(parsed);\n}\n",
105
+ "import type { ReactNode } from \"react\";\nimport { createContext, use } from \"react\";\n\n/** How a toast reads: its colour, its live-region politeness and its default lifetime. */\nexport type ToastKind = \"success\" | \"error\" | \"info\";\n\n/** A button on a toast, e.g. \"Undo\" or \"View job\". */\nexport interface ToastAction {\n /** The button's text. */\n label: string;\n /** What it does. The toast dismisses itself afterwards. */\n onClick: () => void;\n}\n\n/** Options of one toast. */\nexport interface ToastOptions {\n /** A second line under the message. */\n description?: ReactNode;\n /** One action button. */\n action?: ToastAction;\n /** Lifetime in ms; `0` keeps it until dismissed. Defaults to {@link TOAST_DURATION_MS} for the kind. */\n duration?: number;\n}\n\n/** Default lifetimes per kind, ms: errors stay twice as long, to be read. */\nexport const TOAST_DURATION_MS: Readonly<Record<ToastKind, number>> = {\n success: 5_000,\n info: 5_000,\n error: 10_000,\n};\n\n/** Most toasts on screen; a new one pushes out the oldest. */\nexport const MAX_TOASTS = 5;\n\n/** One toast as the provider holds it. */\nexport interface ToastRecord extends ToastOptions {\n /** Unique id, for {@link ToastApi.dismiss}. */\n id: string;\n /** Its kind. */\n kind: ToastKind;\n /** The headline. */\n message: ReactNode;\n}\n\n/** Shows one toast of a fixed kind; returns its id. */\nexport type ShowToast = (message: ReactNode, options?: ToastOptions) => string;\n\n/** What {@link useToast} returns. */\nexport interface ToastApi {\n /** A success toast: polite, auto-dismisses after 5 s. */\n success: ShowToast;\n /** An error toast: assertive, auto-dismisses after 10 s. */\n error: ShowToast;\n /** A neutral toast: polite, auto-dismisses after 5 s. */\n info: ShowToast;\n /** Removes a toast early. */\n dismiss: (id: string) => void;\n}\n\n/** Carries the toast API; `null` outside a `ToastProvider`. */\nexport const ToastContext = createContext<ToastApi | null>(null);\n\n/** Shows toasts. Needs a `ToastProvider` above (the app has one in `AppProviders`). */\nexport function useToast(): ToastApi {\n const api = use(ToastContext);\n if (!api) {\n throw new Error(\"useToast must be used inside a <ToastProvider>\");\n }\n return api;\n}\n",
106
+ "import type { ReactNode } from \"react\";\nimport type { ToastApi, ToastKind, ToastOptions, ToastRecord } from \"./toast\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Button } from \"./Button\";\nimport { cx } from \"./classNames\";\nimport { MAX_TOASTS, TOAST_DURATION_MS, ToastContext } from \"./toast\";\n\n/** Props of {@link ToastProvider}. */\nexport interface ToastProviderProps {\n /** The app. */\n children: ReactNode;\n /** Most toasts on screen at once. Defaults to {@link MAX_TOASTS}. */\n max?: number;\n}\n\n/**\n * Hosts toasts: provides {@link useToast} and renders the stack in two live\n * regions that exist from the first render (a region added together with\n * its content is not announced): `aria-live=\"polite\"` for success/info and\n * `aria-live=\"assertive\"` for errors. They carry no `status`/`alert` role\n * on purpose, so they never collide with a screen's own `getByRole(\"alert\")`.\n */\nexport function ToastProvider({\n children,\n max = MAX_TOASTS,\n}: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastRecord[]>([]);\n const counterRef = useRef(0);\n\n const dismiss = useCallback((id: string) => {\n setToasts((current) => current.filter((toast) => toast.id !== id));\n }, []);\n\n const api = useMemo<ToastApi>(() => {\n const show =\n (kind: ToastKind) =>\n (message: ReactNode, options: ToastOptions = {}): string => {\n counterRef.current += 1;\n const id = `toast-${counterRef.current}`;\n setToasts((current) =>\n [...current, { ...options, id, kind, message }].slice(-max),\n );\n return id;\n };\n return {\n success: show(\"success\"),\n error: show(\"error\"),\n info: show(\"info\"),\n dismiss,\n };\n }, [dismiss, max]);\n\n const polite = toasts.filter((toast) => toast.kind !== \"error\");\n const assertive = toasts.filter((toast) => toast.kind === \"error\");\n\n return (\n <ToastContext value={api}>\n {children}\n <div className=\"toast-viewport\">\n <ol\n className=\"toast-list\"\n aria-label=\"Notifications\"\n aria-live=\"polite\"\n aria-atomic=\"false\"\n >\n {polite.map((toast) => (\n <ToastItem\n key={toast.id}\n toast={toast}\n onDismiss={dismiss}\n />\n ))}\n </ol>\n <ol\n className=\"toast-list\"\n aria-label=\"Errors\"\n aria-live=\"assertive\"\n aria-atomic=\"false\"\n >\n {assertive.map((toast) => (\n <ToastItem\n key={toast.id}\n toast={toast}\n onDismiss={dismiss}\n />\n ))}\n </ol>\n </div>\n </ToastContext>\n );\n}\n\n/** Props of {@link ToastItem}. */\ninterface ToastItemProps {\n /** The toast. */\n toast: ToastRecord;\n /** Removes it. */\n onDismiss: (id: string) => void;\n}\n\n/** One toast; its timer pauses while hovered or focused, so it is not pulled from under the reader. */\nfunction ToastItem({ toast, onDismiss }: ToastItemProps) {\n const [paused, setPaused] = useState(false);\n const duration = toast.duration ?? TOAST_DURATION_MS[toast.kind];\n\n useEffect(() => {\n if (duration <= 0 || paused) {\n return;\n }\n const timer = setTimeout(onDismiss, duration, toast.id);\n return () => clearTimeout(timer);\n }, [duration, paused, onDismiss, toast.id]);\n\n return (\n <li\n className={cx(\"toast\", `toast-${toast.kind}`)}\n data-toast-kind={toast.kind}\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}\n onFocus={() => setPaused(true)}\n onBlur={() => setPaused(false)}\n >\n <div className=\"toast-text\">\n <p className=\"toast-message\">{toast.message}</p>\n {toast.description && (\n <p className=\"toast-description\">{toast.description}</p>\n )}\n </div>\n {toast.action && (\n <Button\n size=\"sm\"\n className=\"toast-action\"\n onClick={() => {\n toast.action!.onClick();\n onDismiss(toast.id);\n }}\n >\n {toast.action.label}\n </Button>\n )}\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"toast-dismiss\"\n aria-label=\"Dismiss notification\"\n onClick={() => onDismiss(toast.id)}\n >\n <span aria-hidden=\"true\">×</span>\n </Button>\n </li>\n );\n}\n",
107
+ "import type { ReactNode } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\nimport { isApiError } from \"../api/errors\";\nimport { queryKeys } from \"../api/queryKeys\";\nimport { ErrorView } from \"../components/ErrorView\";\nimport { Spinner } from \"../components/Spinner\";\nimport { useApiClient, useUiConfig } from \"../context\";\nimport { MetaContext } from \"./hooks\";\n\n/** Props of {@link BootstrapError}. */\nexport interface BootstrapErrorProps {\n /** Why the bootstrap failed. */\n error: unknown;\n /** Reloads meta and permissions. */\n onRetry: () => void;\n}\n\n/** The full-page screen when `/meta` or `/meta/permissions` failed. */\nexport function BootstrapError({ error, onRetry }: BootstrapErrorProps) {\n const config = useUiConfig();\n const status = isApiError(error) ? error.status : 0;\n const title =\n status === 401\n ? \"Sign in required\"\n : status === 403\n ? \"Access denied\"\n : \"The jobs API could not be loaded\";\n return (\n <main\n className=\"bootstrap-screen\"\n data-testid=\"bootstrap-error\"\n >\n <h1 className=\"bootstrap-title\">{config.title}</h1>\n <ErrorView\n error={error}\n title={title}\n onRetry={onRetry}\n />\n </main>\n );\n}\n\n/** Props of {@link MetaProvider}. */\nexport interface MetaProviderProps {\n /** Rendered once meta and permissions have loaded. */\n children: ReactNode;\n}\n\n/**\n * Loads `/meta` and `/meta/permissions` before anything else renders. Every\n * screen, nav entry and button is gated on what they say; while they load a\n * spinner shows, and a failure (401/403 included) shows {@link BootstrapError}.\n */\nexport function MetaProvider({ children }: MetaProviderProps) {\n const api = useApiClient();\n const meta = useQuery({\n queryKey: queryKeys.meta(),\n queryFn: ({ signal }) => api.getMeta(signal),\n staleTime: 60_000,\n });\n const permissions = useQuery({\n queryKey: queryKeys.permissions(),\n queryFn: ({ signal }) => api.getPermissions(undefined, signal),\n staleTime: 60_000,\n });\n\n const value = useMemo(\n () =>\n meta.data && permissions.data\n ? { meta: meta.data, permissions: permissions.data }\n : null,\n [meta.data, permissions.data],\n );\n\n const error = meta.error ?? permissions.error;\n if (error && !value) {\n return (\n <BootstrapError\n error={error}\n onRetry={() => {\n void meta.refetch();\n void permissions.refetch();\n }}\n />\n );\n }\n if (!value) {\n return (\n <main\n className=\"bootstrap-screen\"\n data-testid=\"bootstrap-loading\"\n >\n <Spinner\n label=\"Loading the jobs API\"\n showLabel\n />\n </main>\n );\n }\n return <MetaContext value={value}>{children}</MetaContext>;\n}\n",
108
+ "import type { QueryClient } from \"@tanstack/react-query\";\nimport type { ReactNode } from \"react\";\nimport type { JobsUiConfig } from \"../../lib/jobs/browser/config.ts\";\nimport type { ApiClient } from \"./api/client\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport { useEffect, useMemo } from \"react\";\nimport {\n UnauthorizedRedirectContext,\n createUnauthorizedRedirect,\n watchAuthFailures,\n} from \"@kingsleyweb/bun-ui/docs/embed/unauthorized\";\nimport { ToastProvider } from \"./components/ToastProvider\";\nimport { ApiClientContext, UiConfigContext } from \"./context\";\nimport { MetaProvider } from \"./meta/MetaProvider\";\nimport { RouterProvider } from \"./router\";\n\n/** Props of {@link AppProviders}. */\nexport interface AppProvidersProps {\n /** The injected configuration. */\n config: JobsUiConfig;\n /** The API client, built from `config` by `createApiClient`. */\n client: ApiClient;\n /** The query cache. */\n queryClient: QueryClient;\n /** The app. */\n children: ReactNode;\n}\n\n/**\n * Everything a screen needs above it: query cache, config, API client,\n * toasts, router, and the `/meta` bootstrap (which renders the loading and error\n * screens itself, so `children` only render once meta and permissions are\n * loaded). With `config.unauthorized`, every failed query and mutation is\n * also watched here, and the first one with a configured status sends the\n * browser to the sign-in target (`@kingsleyweb/bun-ui/docs/embed/unauthorized`).\n */\nexport function AppProviders({\n config,\n client,\n queryClient,\n children,\n}: AppProvidersProps) {\n const unauthorized = useMemo(\n () => createUnauthorizedRedirect(config.unauthorized, config.basePath),\n [config.unauthorized, config.basePath],\n );\n useEffect(\n () => watchAuthFailures(queryClient, unauthorized),\n [queryClient, unauthorized],\n );\n return (\n <QueryClientProvider client={queryClient}>\n <UiConfigContext value={config}>\n <UnauthorizedRedirectContext value={unauthorized}>\n <ApiClientContext value={client}>\n <ToastProvider>\n <RouterProvider basePath={config.basePath}>\n <MetaProvider>{children}</MetaProvider>\n </RouterProvider>\n </ToastProvider>\n </ApiClientContext>\n </UnauthorizedRedirectContext>\n </UiConfigContext>\n </QueryClientProvider>\n );\n}\n",
109
+ "import type { Root } from \"react-dom/client\";\nimport type { JobsUiConfig } from \"../../lib/jobs/browser/config.ts\";\nimport type { ApiClientOptions } from \"./api/client\";\nimport type { LiveOptions } from \"./live\";\nimport { StrictMode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { createApiClient } from \"./api/client\";\nimport { App } from \"./App\";\nimport { readUiConfig } from \"./config\";\nimport { LiveOptionsContext } from \"./live\";\nimport { AppProviders } from \"./providers\";\nimport { createQueryClient } from \"./queryClient\";\nimport { applyTheme, initialTheme } from \"./theme\";\n\n/** Options of {@link boot}. */\nexport interface BootOptions {\n /** The document to read the config from and render into. Defaults to `document`. */\n doc?: Document;\n /** Passed to the API client (tests inject `fetch`). */\n client?: ApiClientOptions;\n /** Retry failed reads. Defaults to `true`; tests pass `false`. */\n retry?: boolean;\n /** Live-socket options (tests pass `{ disabled: true }` or a fake socket). Defaults to none. */\n live?: LiveOptions;\n}\n\n/** What {@link boot} started. */\nexport interface BootResult {\n /** The config it read. */\n config: JobsUiConfig;\n /** The React root; `unmount()` tears the app down. */\n root: Root;\n}\n\n/**\n * Starts the app: reads the injected config, applies the theme, and renders\n * into `#root`. A missing or malformed config renders a plain message\n * instead (there is no API to talk to without it) and rethrows.\n */\nexport function boot(options: BootOptions = {}): BootResult {\n const doc = options.doc ?? document;\n const container = doc.getElementById(\"root\");\n if (!container) {\n throw new Error(\"The page has no #root element.\");\n }\n let config: JobsUiConfig;\n try {\n config = readUiConfig(doc);\n } catch (error) {\n container.textContent = `The jobs UI could not start: ${error instanceof Error ? error.message : String(error)}`;\n throw error;\n }\n applyTheme(initialTheme(config.theme), doc.documentElement);\n doc.title = config.title;\n\n const client = createApiClient(config, options.client);\n const queryClient = createQueryClient({ retry: options.retry });\n const root = createRoot(container);\n root.render(\n <StrictMode>\n <LiveOptionsContext value={options.live ?? null}>\n <AppProviders\n config={config}\n client={client}\n queryClient={queryClient}\n >\n <App />\n </AppProviders>\n </LiveOptionsContext>\n </StrictMode>,\n );\n return { config, root };\n}\n",
110
+ "import { boot } from \"./boot\";\n/**\n * The browser entry point `Bun.build` bundles: the stylesheets (emitted as\n * CSS files) and the app. Everything else lives in `boot.tsx`, so tests can\n * start the app without this module's import-time side effect.\n */\nimport \"./styles/tokens.css\";\nimport \"./styles/base.css\";\nimport \"./components/components.css\";\n\nboot();\n"
111
+ ],
112
+ "mappings": "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AAI,EACK,GAAW,WAAjB,EACG,GAAW,KACA,GAAW,WAAtB,OACE,GAAW,cAAc,KACzB,IACJ,YAAY,EAAa,SAAS,EACjC,GAAgC,GACnC,MAAO,EAAO,CACd,GACE,EACA,EACA,CACF,EAEJ,KACE,GAAI,CACF,GAAW,YAAY,EAAa,SAAS,EAC1C,GAAgC,GACnC,MAAO,EAAO,CACd,GACE,EACA,EACA,CACF,EAEN,MACF,IAAK,IACM,KAAT,OACG,IACK,EAAe,GACjB,GACQ,EAAa,WAAnB,EACI,EAAa,KACF,EAAa,WAAxB,OACE,EAAa,cAAc,KAC3B,EACN,EAAa,SACf,EACA,GAAiB,CAAY,GAC7B,GAAuB,GAAY,EAAa,SAAS,GAC/D,MACF,IAAK,GACH,EAAiB,GACjB,EAA4B,GAC5B,GAAa,EAAa,UAAU,cACpC,GAAwB,GACxB,GACE,EACA,EACA,CACF,EACA,GAAa,EACb,GAAwB,EACxB,MACF,IAAK,GACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,GAA4B,EAAG,EAAc,CAAsB,EACnE,IACE,GAA4B,EAAG,EAAc,CAAsB,EACrE,GACE,EACA,EACA,CACF,EACA,MACF,IAAK,GACH,KACG,GAAgB,EAAc,CAAsB,EACpD,EAAiB,EAAa,UAChB,OAAO,EAAe,uBAArC,YACE,GACE,EACA,EACA,CACF,GACJ,GACE,EACA,EACA,CACF,EACA,MACF,IAAK,IACH,GACE,EACA,EACA,CACF,EACA,MACF,IAAK,IACH,IACG,EAAiB,KACT,EAAa,gBAAtB,KACF,GACE,EACA,EACA,CACF,EACA,GAA4B,EAC5B,MACF,IAAK,IACH,GAAgB,EAAc,CAAsB,EACpD,GACE,EACA,EACA,CACF,EACA,MACF,IAAK,GACH,IACE,GAAgB,EAAc,CAAsB,EACtD,GACE,EACA,EACA,CACF,EACA,MACF,QACE,GACE,EACA,EACA,CACF,GAGN,SAAS,EAAgC,CAAC,EAAc,EAAc,CACpE,GACW,EAAa,gBAAtB,OACE,EAAe,EAAa,UACrB,IAAT,OACI,EAAe,EAAa,cAAyB,IAAT,OAChD,CACA,EAAe,EAAa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EACA,EACA,EACA,CACF,EACF,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,CACF,EACA,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,CACF,EACA,MACF,IAAK,IACH,MACF,IAAK,IACH,EAAyB,EAAa,UACtC,EAAK,EAAa,UACT,EAAa,gBAAtB,MACK,GACU,IAAT,MACS,EAAG,gBAAZ,MACA,GAAkC,CAAE,EACtC,EAAuB,YAAc,EACjC,GACE,EACA,EACA,EACA,CACF,EACA,GACE,EACA,CACF,IACH,GACU,IAAT,MACS,EAAG,gBAAZ,MACA,GAAkC,CAAY,EAChD,EAAuB,YAAc,EACjC,GACE,EACA,EACA,EACA,CACF,GACE,EAAuB,aAAe,EACxC,GACE,EACA,EACA,EACA,GACO,EAAa,aAAe,SAAnC,GAA6C,EAC/C,IACR,EAAQ,MAAQ,GAAmC,EAAI,CAAY,EACnE,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,CACF,EACA,EAAQ,MACN,GAA8B,EAAa,UAAW,CAAY,EACpE,MACF,IAAK,IACH,IACI,EAAQ,EAAa,UACd,IAAT,OACG,GAAqC,EAAM,MAAO,EAAE,EACrD,GAAqC,EAAa,MAAO,EAAE,IAC/D,GACE,EACA,EACA,EACA,CACF,EACA,MACF,QACE,GACE,EACA,EACA,EACA,CACF,GAGN,SAAS,EAA0C,CACjD,EACA,EACA,EACA,EACA,EACA,CACA,EACE,KACQ,EAAY,aAAe,SAAlC,GAA4C,IAC/C,IAAK,EAAc,EAAY,MAAgB,IAAT,MAAwB,CAC5D,IAAI,EAAe,EACjB,EAAe,EACf,EAAiB,EACjB,GAAuB,EACvB,GAAQ,EAAa,MACvB,OAAQ,EAAa,KACnB,IAAK,GACL,IAAK,IACL,IAAK,IACH,GACE,EACA,EACA,EACA,GACA,CACF,EACA,GAA0B,EAAG,CAAY,EACzC,MACF,IAAK,IACH,MACF,IAAK,IACH,IAAI,GAAW,EAAa,UACnB,EAAa,gBAAtB,KACI,GAAS,YAAc,EACrB,GACE,EACA,EACA,EACA,GACA,CACF,EACA,GACE,EACA,CACF,GACA,GAAS,aA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AC,EAClC,GAAkB,EAAe,EAAO,EAAG,EAAE,EAC7C,MAEF,EAAG,CAGD,OAFA,EAAkB,EAClB,EAAsB,EACd,GACN,IAAK,GACL,IAAK,GACH,MAAM,MAAM,GAAuB,GAAG,CAAC,EACzC,IAAK,GACH,IAAK,EAAQ,WAAa,IAAU,EAAQ,YAAc,EACxD,MACJ,IAAK,GACH,GACE,EACA,EACA,GACA,CAAC,EACH,EACA,QACF,IAAK,GACH,GAAsC,KACtC,MACF,IAAK,GACL,IAAK,GACH,MACF,QACE,MAAM,MAAM,GAAuB,GAAG,CAAC,EAE3C,IACG,EAAQ,YAAc,IACrB,EAAa,GAA+B,IAAM,GAAI,EACxD,GAAK,GACL,CAOA,GANA,GACE,EACA,EACA,GACA,CAAC,EACH,EACU,GAAa,EAAiB,EAAG,EAAE,IAAzC,EAA4C,QAChD,GAAsB,EACtB,EAAgB,cAAgB,GAC9B,GAAsB,KACpB,KACA,EACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,YACA,GACA,CACF,EACA,CACF,EACA,QAEF,GACE,EACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,KACA,GACA,CACF,GAGJ,YACO,GACT,GAAsB,CAAa,EAErC,SAAS,EAAqB,CAC5B,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,GACA,GACA,GACA,GACA,GACA,CACA,EAAK,cAAgB,GACrB,IAAI,GAAe,EAAa,aAC9B,IAA4B,EAAQ,aAAe,EAErD,GADA,GAAwB,KAEtB,IACA,GAAe,OACD,GAAe,YAA7B,UAEA,GACI,GAAwB,CACxB,YAAa,KACb,MAAO,EACP,SAAU,EACV,SAAU,EACV,gBAAiB,CAAC,EAClB,iBAAkB,GAClB,yBAA0B,GAC1B,UAAW,EACb,EACC,GAA2B,KAC5B,GACE,EACA,EACA,EACF,EACA,KACI,GAAe,GAChB,GAA2B,EAAK,cAChC,IACO,GAAyB,WAA/B,EACI,GACA,GAAyB,eAC7B,sBACM,IAAR,OACG,GAAa,QACb,GAAa,yBAA2B,GACxC,GAAe,GAAY,KAAK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,WACL,IAAK,YACH,GAAwB,OAAO,IAAtB,YAA4C,OAAO,IAApB,SACpC,EAAW,aAAa,EAAK,EAAE,EAC/B,EAAW,gBAAgB,CAAG,EAClC,MACF,IAAK,UACL,IAAK,WACI,IAAP,GACI,EAAW,aAAa,EAAK,EAAE,EACxB,IAAP,IACU,GAAR,MACe,OAAO,IAAtB,YACa,OAAO,IAApB,SACA,EAAW,aAAa,EAAK,CAAK,EAClC,EAAW,gBAAgB,CAAG,EACpC,MACF,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,OACK,GAAR,MACe,OAAO,IAAtB,YACa,OAAO,IAApB,UACA,CAAC,MAAM,CAAK,GACZ,GAAK,EACD,EAAW,aAAa,EAAK,CAAK,EAClC,EAAW,gBAAgB,CAAG,EAClC,MACF,IAAK,UACL,IAAK,QACK,GAAR,MACe,OAAO,IAAtB,YACa,OAAO,IAApB,UACA,MAAM,CAAK,EACP,EAAW,gBAAgB,CAAG,EAC9B,EAAW,aAAa,EAAK,CAAK,EACtC,MACF,IAAK,UACH,GAA0B,eAAgB,CAAU,EACpD,GAA0B,SAAU,CAAU,EAC9C,GAAqB,EAAY,UAAW,CAAK,EACjD,MACF,IAAK,eACH,GACE,EACA,+BACA,gBACA,CACF,EACA,MACF,IAAK,eACH,GACE,EACA,+BACA,gBACA,CACF,EACA,MACF,IAAK,YACH,GACE,EACA,+BACA,aACA,CACF,EACA,MACF,IAAK,YACH,GACE,EACA,+BACA,aACA,CACF,EACA,MACF,IAAK,aACH,GACE,EACA,+BACA,cACA,CACF,EACA,MACF,IAAK,YACH,GACE,EACA,+BACA,aACA,CACF,EACA,MACF,IAAK,UACH,GACE,EACA,uCACA,WACA,CACF,EACA,MACF,IAAK,UACH,GACE,EACA,uCACA,WACA,CACF,EACA,MACF,IAAK,WACH,GACE,EACA,uCACA,YACA,CACF,EACA,MACF,IAAK,KACH,GAAqB,EAAY,KAAM,CAAK,EAC5C,MACF,IAAK,YACL,IAAK,cACH,OACF,QACE,GACE,EAAE,EAAI,EAAI,SACD,EAAI,KAAZ,KAA0B,EAAI,KAAZ,KACV,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gBACA,iBACA,qBACA,eACA,eACA,eACA,gBACA,iBACA,eACA,gBACA,oBACA,YACA,YACA,YACA,WACA,cACA,aACA,gBACA,cACA,iBACA,eACA,YACA,mBACA,qBACA,sBACA,qBACA,mBACA,eACA,eACA,eACA,kBACA,gBACA,iBACA,eACA,qBACA,qBACA,uBACA,oBACA,iBACA,kBACF,EAyGO,IAAM,GAA0B,cAG1B,GAAoB,CAE/B,OAAQ,KAER,WAAY,KAEZ,iBAAkB,KAElB,OAAQ,KAER,QAAS,KAET,cAAe,KAEf,aAAc,IAChB,EAOa,GAAqC,IAGrC,EAAa,CACxB,UACA,UACA,SACA,YACA,SACA,OACA,kBACF,EAoDO,IAAM,GAAoB,CAC/B,QACA,YACA,UACA,UACA,SACA,WACA,YACA,SACA,WACA,OACA,UACA,UACA,WACA,SACA,UACA,UACA,UACA,UACA,YACA,YACA,kBACA,QACF,EAgEO,IAAM,GAAqB,CAChC,UACA,UACA,YACA,SACA,SACA,UACA,UACA,SACA,MACF,EAea,GAAc,CACzB,GAAG,GACH,UACA,UACA,YACA,SACA,UACA,UACA,SACA,OACA,QACA,QACF,EAoBa,GAAmB,CAC9B,WACA,UACA,UACA,WACA,mBACA,eACA,WACA,iBACF,EA0DO,IAAM,GAA4B,CAAC,QAAS,aAAa,EAwBnD,GAAsB,CACjC,SAAU,CAAE,IAAK,EAAG,IAAK,IAAM,EAC/B,QAAS,CAAE,IAAK,EAAG,IAAK,QAAW,EACnC,SAAU,CAAE,IAAK,SAAY,IAAK,OAAU,EAC5C,SAAU,CAAE,IAAK,EAAG,IAAK,GAAQ,EACjC,gBAAiB,CAAE,IAAK,EAAG,IAAK,GAAI,EACpC,aAAc,CAAE,IAAK,EAAG,IAAK,QAAW,EACxC,WAAY,CAAE,IAAK,EAAG,IAAK,QAAW,EACtC,cAAe,CAAE,IAAK,EAAG,IAAK,CAAE,EAChC,eAAgB,CAAE,IAAK,EAAG,IAAK,GAAU,EACzC,aAAc,CAAE,IAAK,EAAG,IAAK,WAAe,CAC9C,EAQa,GAA4B,CACvC,UACA,UACA,SACA,kBACF,EAmBa,GAAgB,CA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",
113
+ "debugId": "302731CE2C2F3AC164756E2164756E21",
114
+ "names": []
115
+ }