agim-cli 1.2.115 → 1.2.116

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 (157) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/web/public/assets/{a2a-BzsMbsts.js → a2a-DoPVhKvM.js} +2 -2
  3. package/dist/web/public/assets/{a2a-BzsMbsts.js.map → a2a-DoPVhKvM.js.map} +1 -1
  4. package/dist/web/public/assets/{activity-CupFilVp.js → activity-CegIax_4.js} +2 -2
  5. package/dist/web/public/assets/{activity-CupFilVp.js.map → activity-CegIax_4.js.map} +1 -1
  6. package/dist/web/public/assets/{admins-BT1N7cZ-.js → admins-BCOor7EH.js} +2 -2
  7. package/dist/web/public/assets/{admins-BT1N7cZ-.js.map → admins-BCOor7EH.js.map} +1 -1
  8. package/dist/web/public/assets/{agents-BDRnYRTJ.js → agents-BLw0_jKM.js} +2 -2
  9. package/dist/web/public/assets/{agents-BDRnYRTJ.js.map → agents-BLw0_jKM.js.map} +1 -1
  10. package/dist/web/public/assets/{approvals-DQpE8vhd.js → approvals-CXQok6Cz.js} +2 -2
  11. package/dist/web/public/assets/{approvals-DQpE8vhd.js.map → approvals-CXQok6Cz.js.map} +1 -1
  12. package/dist/web/public/assets/{asks-DPBCUpfo.js → asks-xP2Otb6U.js} +2 -2
  13. package/dist/web/public/assets/{asks-DPBCUpfo.js.map → asks-xP2Otb6U.js.map} +1 -1
  14. package/dist/web/public/assets/{audit-DeLpvLdc.js → audit-DNYwnXg8.js} +2 -2
  15. package/dist/web/public/assets/{audit-DeLpvLdc.js.map → audit-DNYwnXg8.js.map} +1 -1
  16. package/dist/web/public/assets/{bell-FJcNdfO1.js → bell-WsDs6GmV.js} +2 -2
  17. package/dist/web/public/assets/{bell-FJcNdfO1.js.map → bell-WsDs6GmV.js.map} +1 -1
  18. package/dist/web/public/assets/{bgjobs-2igxfgdb.js → bgjobs-B2BaMU2j.js} +2 -2
  19. package/dist/web/public/assets/{bgjobs-2igxfgdb.js.map → bgjobs-B2BaMU2j.js.map} +1 -1
  20. package/dist/web/public/assets/{brain-DVE7F0fi.js → brain-B8fJEQyw.js} +2 -2
  21. package/dist/web/public/assets/{brain-DVE7F0fi.js.map → brain-B8fJEQyw.js.map} +1 -1
  22. package/dist/web/public/assets/{briefcase-CZ7IbO42.js → briefcase-Cwk6Nkg7.js} +2 -2
  23. package/dist/web/public/assets/{briefcase-CZ7IbO42.js.map → briefcase-Cwk6Nkg7.js.map} +1 -1
  24. package/dist/web/public/assets/{chevron-right-Ckog5ufj.js → chevron-right-D1NFHRso.js} +2 -2
  25. package/dist/web/public/assets/{chevron-right-Ckog5ufj.js.map → chevron-right-D1NFHRso.js.map} +1 -1
  26. package/dist/web/public/assets/{circle-check-BsvOPmQ8.js → circle-check-C5jWAGrG.js} +2 -2
  27. package/dist/web/public/assets/{circle-check-BsvOPmQ8.js.map → circle-check-C5jWAGrG.js.map} +1 -1
  28. package/dist/web/public/assets/{circle-check-big-B6Cm3QrD.js → circle-check-big-BMc_m83k.js} +2 -2
  29. package/dist/web/public/assets/{circle-check-big-B6Cm3QrD.js.map → circle-check-big-BMc_m83k.js.map} +1 -1
  30. package/dist/web/public/assets/{circle-x-B4eNkmrg.js → circle-x-DK_VnW5O.js} +2 -2
  31. package/dist/web/public/assets/{circle-x-B4eNkmrg.js.map → circle-x-DK_VnW5O.js.map} +1 -1
  32. package/dist/web/public/assets/{confirm-dialog-BlS0v42Y.js → confirm-dialog-CBbIPd8e.js} +2 -2
  33. package/dist/web/public/assets/{confirm-dialog-BlS0v42Y.js.map → confirm-dialog-CBbIPd8e.js.map} +1 -1
  34. package/dist/web/public/assets/{data-table-DBKQnMMT.js → data-table-Dw8WxmGK.js} +2 -2
  35. package/dist/web/public/assets/{data-table-DBKQnMMT.js.map → data-table-Dw8WxmGK.js.map} +1 -1
  36. package/dist/web/public/assets/{dialog-C3s_8PVJ.js → dialog-Byj1GNwS.js} +2 -2
  37. package/dist/web/public/assets/{dialog-C3s_8PVJ.js.map → dialog-Byj1GNwS.js.map} +1 -1
  38. package/dist/web/public/assets/{download-Bjh71c-L.js → download-PHySCcQT.js} +2 -2
  39. package/dist/web/public/assets/{download-Bjh71c-L.js.map → download-PHySCcQT.js.map} +1 -1
  40. package/dist/web/public/assets/{email-GQHRSZUn.js → email-BRL-m3Nq.js} +2 -2
  41. package/dist/web/public/assets/{email-GQHRSZUn.js.map → email-BRL-m3Nq.js.map} +1 -1
  42. package/dist/web/public/assets/{empty-state-D1DCgdU3.js → empty-state-C4sK7D2H.js} +2 -2
  43. package/dist/web/public/assets/{empty-state-D1DCgdU3.js.map → empty-state-C4sK7D2H.js.map} +1 -1
  44. package/dist/web/public/assets/{external-link-e7BaJ7SA.js → external-link-CFqp81U8.js} +2 -2
  45. package/dist/web/public/assets/{external-link-e7BaJ7SA.js.map → external-link-CFqp81U8.js.map} +1 -1
  46. package/dist/web/public/assets/{eye-CsEevkPC.js → eye-znt0VqpD.js} +2 -2
  47. package/dist/web/public/assets/{eye-CsEevkPC.js.map → eye-znt0VqpD.js.map} +1 -1
  48. package/dist/web/public/assets/{facts-CJfoY5hF.js → facts-C-z_MHuR.js} +2 -2
  49. package/dist/web/public/assets/{facts-CJfoY5hF.js.map → facts-C-z_MHuR.js.map} +1 -1
  50. package/dist/web/public/assets/{goals-D7UWxamV.js → goals-DjW7xUUU.js} +2 -2
  51. package/dist/web/public/assets/{goals-D7UWxamV.js.map → goals-DjW7xUUU.js.map} +1 -1
  52. package/dist/web/public/assets/{health-BTexN0L8.js → health-u3wVVbRE.js} +2 -2
  53. package/dist/web/public/assets/{health-BTexN0L8.js.map → health-u3wVVbRE.js.map} +1 -1
  54. package/dist/web/public/assets/{heart-pulse-BM1ux0EY.js → heart-pulse-CuRQDV1Z.js} +2 -2
  55. package/dist/web/public/assets/{heart-pulse-BM1ux0EY.js.map → heart-pulse-CuRQDV1Z.js.map} +1 -1
  56. package/dist/web/public/assets/{heartbeat-DVjVtdhR.js → heartbeat-fKsOewwO.js} +2 -2
  57. package/dist/web/public/assets/{heartbeat-DVjVtdhR.js.map → heartbeat-fKsOewwO.js.map} +1 -1
  58. package/dist/web/public/assets/{hot-BDP_pB4z.js → hot-ClV4mA4o.js} +2 -2
  59. package/dist/web/public/assets/{hot-BDP_pB4z.js.map → hot-ClV4mA4o.js.map} +1 -1
  60. package/dist/web/public/assets/index-7yc9y9We.js +199 -0
  61. package/dist/web/public/assets/index-7yc9y9We.js.map +1 -0
  62. package/dist/web/public/assets/index-hiagPF9i.css +1 -0
  63. package/dist/web/public/assets/{installed-atOe7sV_.js → installed-BtgOuIiG.js} +2 -2
  64. package/dist/web/public/assets/{installed-atOe7sV_.js.map → installed-BtgOuIiG.js.map} +1 -1
  65. package/dist/web/public/assets/{jobs-dNZjmnF_.js → jobs-eiyYlyJG.js} +2 -2
  66. package/dist/web/public/assets/{jobs-dNZjmnF_.js.map → jobs-eiyYlyJG.js.map} +1 -1
  67. package/dist/web/public/assets/{layout-B2VPwyz-.js → layout-BpwuHk-s.js} +2 -2
  68. package/dist/web/public/assets/{layout-B2VPwyz-.js.map → layout-BpwuHk-s.js.map} +1 -1
  69. package/dist/web/public/assets/{layout-MBS8rn-e.js → layout-CChyylLw.js} +2 -2
  70. package/dist/web/public/assets/{layout-MBS8rn-e.js.map → layout-CChyylLw.js.map} +1 -1
  71. package/dist/web/public/assets/{layout-BncWEIS9.js → layout-CQ-wMpff.js} +2 -2
  72. package/dist/web/public/assets/{layout-BncWEIS9.js.map → layout-CQ-wMpff.js.map} +1 -1
  73. package/dist/web/public/assets/{layout-CI8hrEc2.js → layout-DuYDIza7.js} +2 -2
  74. package/dist/web/public/assets/{layout-CI8hrEc2.js.map → layout-DuYDIza7.js.map} +1 -1
  75. package/dist/web/public/assets/{layout-BTEf3WdH.js → layout-Oy_rbq06.js} +2 -2
  76. package/dist/web/public/assets/{layout-BTEf3WdH.js.map → layout-Oy_rbq06.js.map} +1 -1
  77. package/dist/web/public/assets/{llm-DLtUwugt.js → llm-Bs-G20DR.js} +2 -2
  78. package/dist/web/public/assets/{llm-DLtUwugt.js.map → llm-Bs-G20DR.js.map} +1 -1
  79. package/dist/web/public/assets/{loader-circle-CtFCiPu1.js → loader-circle-CwM-6o9f.js} +2 -2
  80. package/dist/web/public/assets/{loader-circle-CtFCiPu1.js.map → loader-circle-CwM-6o9f.js.map} +1 -1
  81. package/dist/web/public/assets/{map-pin-C15wH78Y.js → map-pin-MuWUOLcD.js} +2 -2
  82. package/dist/web/public/assets/{map-pin-C15wH78Y.js.map → map-pin-MuWUOLcD.js.map} +1 -1
  83. package/dist/web/public/assets/{mcp-BaQwFIce.js → mcp-D9ob2tYX.js} +2 -2
  84. package/dist/web/public/assets/{mcp-BaQwFIce.js.map → mcp-D9ob2tYX.js.map} +1 -1
  85. package/dist/web/public/assets/{memos-DYQOmtCk.js → memos-Bd7EttaU.js} +2 -2
  86. package/dist/web/public/assets/{memos-DYQOmtCk.js.map → memos-Bd7EttaU.js.map} +1 -1
  87. package/dist/web/public/assets/{messengers-BY8LZqe9.js → messengers-CbnTejKi.js} +2 -2
  88. package/dist/web/public/assets/{messengers-BY8LZqe9.js.map → messengers-CbnTejKi.js.map} +1 -1
  89. package/dist/web/public/assets/{native-agent-BB6EQ2LY.js → native-agent-BmBH1fBn.js} +2 -2
  90. package/dist/web/public/assets/{native-agent-BB6EQ2LY.js.map → native-agent-BmBH1fBn.js.map} +1 -1
  91. package/dist/web/public/assets/{network-DZJYq1Mj.js → network-Cdb-7ukZ.js} +2 -2
  92. package/dist/web/public/assets/{network-DZJYq1Mj.js.map → network-Cdb-7ukZ.js.map} +1 -1
  93. package/dist/web/public/assets/{outbox-BDqtRSxv.js → outbox-BsdSXMUW.js} +2 -2
  94. package/dist/web/public/assets/{outbox-BDqtRSxv.js.map → outbox-BsdSXMUW.js.map} +1 -1
  95. package/dist/web/public/assets/{pagination-Ba3Mjh77.js → pagination-BuNA-fxU.js} +2 -2
  96. package/dist/web/public/assets/{pagination-Ba3Mjh77.js.map → pagination-BuNA-fxU.js.map} +1 -1
  97. package/dist/web/public/assets/{persona-D_4-IJmo.js → persona-V0lGwDex.js} +2 -2
  98. package/dist/web/public/assets/{persona-D_4-IJmo.js.map → persona-V0lGwDex.js.map} +1 -1
  99. package/dist/web/public/assets/{play-DPwqjccL.js → play-BdDkAgqw.js} +2 -2
  100. package/dist/web/public/assets/{play-DPwqjccL.js.map → play-BdDkAgqw.js.map} +1 -1
  101. package/dist/web/public/assets/{plus-_UEfPKDJ.js → plus-FlZ1UWzO.js} +2 -2
  102. package/dist/web/public/assets/{plus-_UEfPKDJ.js.map → plus-FlZ1UWzO.js.map} +1 -1
  103. package/dist/web/public/assets/{policy-DYDO0S91.js → policy-CpWgbIqb.js} +2 -2
  104. package/dist/web/public/assets/{policy-DYDO0S91.js.map → policy-CpWgbIqb.js.map} +1 -1
  105. package/dist/web/public/assets/{refresh-ccw-DV-LGOe8.js → refresh-ccw-l9Z6wukO.js} +2 -2
  106. package/dist/web/public/assets/{refresh-ccw-DV-LGOe8.js.map → refresh-ccw-l9Z6wukO.js.map} +1 -1
  107. package/dist/web/public/assets/{reminders-dpL0vI2y.js → reminders-Coh0D3Fv.js} +2 -2
  108. package/dist/web/public/assets/{reminders-dpL0vI2y.js.map → reminders-Coh0D3Fv.js.map} +1 -1
  109. package/dist/web/public/assets/{save-HyYEfaEh.js → save-CllPj34m.js} +2 -2
  110. package/dist/web/public/assets/{save-HyYEfaEh.js.map → save-CllPj34m.js.map} +1 -1
  111. package/dist/web/public/assets/{schedules-S_21sNfk.js → schedules-0rlWAXrz.js} +2 -2
  112. package/dist/web/public/assets/{schedules-S_21sNfk.js.map → schedules-0rlWAXrz.js.map} +1 -1
  113. package/dist/web/public/assets/{search-Djy367Rt.js → search-DDbspILM.js} +2 -2
  114. package/dist/web/public/assets/{search-Djy367Rt.js.map → search-DDbspILM.js.map} +1 -1
  115. package/dist/web/public/assets/{security-CEMQ0kCc.js → security-SlM_YhUr.js} +2 -2
  116. package/dist/web/public/assets/{security-CEMQ0kCc.js.map → security-SlM_YhUr.js.map} +1 -1
  117. package/dist/web/public/assets/{service-CKUTO48Q.js → service-BnbEtpH9.js} +2 -2
  118. package/dist/web/public/assets/{service-CKUTO48Q.js.map → service-BnbEtpH9.js.map} +1 -1
  119. package/dist/web/public/assets/{status-badge-B3slbwsq.js → status-badge-DKc8aeGe.js} +2 -2
  120. package/dist/web/public/assets/{status-badge-B3slbwsq.js.map → status-badge-DKc8aeGe.js.map} +1 -1
  121. package/dist/web/public/assets/{subtasks-DdPpimPU.js → subtasks-2PcTOMXV.js} +2 -2
  122. package/dist/web/public/assets/{subtasks-DdPpimPU.js.map → subtasks-2PcTOMXV.js.map} +1 -1
  123. package/dist/web/public/assets/{table-DWSx-SNj.js → table-BIc6RbM1.js} +2 -2
  124. package/dist/web/public/assets/{table-DWSx-SNj.js.map → table-BIc6RbM1.js.map} +1 -1
  125. package/dist/web/public/assets/{topn-S7eTYdrL.js → topn-Bn-Y2tpa.js} +2 -2
  126. package/dist/web/public/assets/{topn-S7eTYdrL.js.map → topn-Bn-Y2tpa.js.map} +1 -1
  127. package/dist/web/public/assets/{trash-2-CLAmlNXR.js → trash-2-UPbZm-9k.js} +2 -2
  128. package/dist/web/public/assets/{trash-2-CLAmlNXR.js.map → trash-2-UPbZm-9k.js.map} +1 -1
  129. package/dist/web/public/assets/{use-background-tasks-vNs4a0ZJ.js → use-background-tasks-DyaXWxmJ.js} +2 -2
  130. package/dist/web/public/assets/{use-background-tasks-vNs4a0ZJ.js.map → use-background-tasks-DyaXWxmJ.js.map} +1 -1
  131. package/dist/web/public/assets/{use-llm-admin-D7dW4gjp.js → use-llm-admin-DO9nbZeO.js} +2 -2
  132. package/dist/web/public/assets/{use-llm-admin-D7dW4gjp.js.map → use-llm-admin-DO9nbZeO.js.map} +1 -1
  133. package/dist/web/public/assets/{use-memory-DKKNkzgN.js → use-memory-Bf-AR2xS.js} +2 -2
  134. package/dist/web/public/assets/{use-memory-DKKNkzgN.js.map → use-memory-Bf-AR2xS.js.map} +1 -1
  135. package/dist/web/public/assets/{use-observability-BOI93kfB.js → use-observability-Beido9rh.js} +2 -2
  136. package/dist/web/public/assets/{use-observability-BOI93kfB.js.map → use-observability-Beido9rh.js.map} +1 -1
  137. package/dist/web/public/assets/{use-settings-4nvtqd3e.js → use-settings-J28YEhhv.js} +2 -2
  138. package/dist/web/public/assets/{use-settings-4nvtqd3e.js.map → use-settings-J28YEhhv.js.map} +1 -1
  139. package/dist/web/public/assets/{use-workspace-Dueu86Od.js → use-workspace-BoRhOeiK.js} +2 -2
  140. package/dist/web/public/assets/{use-workspace-Dueu86Od.js.map → use-workspace-BoRhOeiK.js.map} +1 -1
  141. package/dist/web/public/assets/{useQuery-D2xXEtPQ.js → useQuery-dWspFqPU.js} +2 -2
  142. package/dist/web/public/assets/{useQuery-D2xXEtPQ.js.map → useQuery-dWspFqPU.js.map} +1 -1
  143. package/dist/web/public/assets/{vector-C8P2Ue4j.js → vector-DX4RPkXe.js} +2 -2
  144. package/dist/web/public/assets/{vector-C8P2Ue4j.js.map → vector-DX4RPkXe.js.map} +1 -1
  145. package/dist/web/public/assets/{viewer-yPQqtQrA.js → viewer-CRv__j_2.js} +2 -2
  146. package/dist/web/public/assets/{viewer-yPQqtQrA.js.map → viewer-CRv__j_2.js.map} +1 -1
  147. package/dist/web/public/assets/{workspace-w-27u5cT.js → workspace-DU5F-0GM.js} +2 -2
  148. package/dist/web/public/assets/{workspace-w-27u5cT.js.map → workspace-DU5F-0GM.js.map} +1 -1
  149. package/dist/web/public/assets/{workspaces-8_zB1j-c.js → workspaces-DCEYab_X.js} +2 -2
  150. package/dist/web/public/assets/{workspaces-8_zB1j-c.js.map → workspaces-DCEYab_X.js.map} +1 -1
  151. package/dist/web/public/assets/{x-B5fwYKOg.js → x-CioZGQfq.js} +2 -2
  152. package/dist/web/public/assets/{x-B5fwYKOg.js.map → x-CioZGQfq.js.map} +1 -1
  153. package/dist/web/public/index.html +2 -2
  154. package/package.json +1 -1
  155. package/dist/web/public/assets/index-B2MYJZsl.css +0 -1
  156. package/dist/web/public/assets/index-mOwnXPKu.js +0 -171
  157. package/dist/web/public/assets/index-mOwnXPKu.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"mappings":"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","names":["f","require$$0","k","l","m","n","p","q","c","a","g","b","d","e","h","reactJsxRuntime_production_min","jsxRuntimeModule","client","_extends","t","Action","PopStateEventType","createBrowserHistory","options","createBrowserLocation","window","globalHistory","pathname","search","hash","createLocation","createBrowserHref","to","createPath","getUrlBasedHistory","invariant","value","message","warning","cond","createKey","getHistoryState","location","index","current","state","key","parsePath","_ref","path","parsedPath","hashIndex","searchIndex","getLocation","createHref","validateLocation","v5Compat","action","listener","getIndex","handlePop","nextIndex","delta","history","push","historyState","url","error","replace","createURL","base","href","fn","ResultType","immutableRouteKeys","isIndexRoute","route","convertRoutesToDataRoutes","routes","mapRouteProperties","parentPath","manifest","treePath","id","indexRoute","pathOrLayoutRoute","matchRoutes","locationArg","basename","matchRoutesImpl","allowPartial","stripBasename","branches","flattenRoutes","rankRouteBranches","matches","decoded","decodePath","i","matchRouteBranch","convertRouteMatchToUiMatch","match","loaderData","params","parentsMeta","flattenRoute","relativePath","meta","joinPaths","routesMeta","computeScore","_route$path","exploded","explodeOptionalSegments","segments","first","rest","isOptional","required","restExploded","result","subpath","compareIndexes","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","s","initialScore","score","segment","branch","matchedParams","matchedPathname","end","remainingPathname","matchPath","normalizePathname","pattern","matcher","compiledParams","compilePath","pathnameBase","captureGroups","memo","paramName","splatValue","caseSensitive","regexpSource","_","v","startIndex","nextChar","ABSOLUTE_URL_REGEX$1","isAbsoluteUrl","resolvePath","fromPathname","toPathname","oldPathname","removeDoubleSlashes","resolvePathname","normalizeSearch","normalizeHash","getInvalidPathError","char","field","dest","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","idx","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","from","routePathnameIndex","toSegments","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","ErrorResponseImpl","status","statusText","data","internal","isRouteErrorResponse","validMutationMethodsArr","validMutationMethods","validRequestMethodsArr","validRequestMethods","redirectStatusCodes","redirectPreserveMethodStatusCodes","IDLE_NAVIGATION","IDLE_FETCHER","IDLE_BLOCKER","ABSOLUTE_URL_REGEX","defaultMapRouteProperties","TRANSITIONS_STORAGE_KEY","createRouter","init","routerWindow","isBrowser","isServer","detectErrorBoundary","dataRoutes","inFlightDataRoutes","dataStrategyImpl","defaultDataStrategy","patchRoutesOnNavigationImpl","future","unlistenHistory","subscribers","savedScrollPositions","getScrollRestorationKey","getScrollPosition","initialScrollRestored","initialMatches","initialMatchesIsFOW","initialErrors","getInternalRouterError","getShortCircuitMatches","checkFogOfWar","initialized","errors","shouldLoadRouteOnHydration","fogOfWar","router","pendingAction","pendingPreventScrollReset","pendingNavigationController","pendingViewTransitionEnabled","appliedViewTransitions","removePageHideEventListener","isUninterruptedRevalidation","isRevalidationRequired","cancelledDeferredRoutes","cancelledFetcherLoads","fetchControllers","incrementingLoadId","pendingNavigationLoadId","fetchReloadIds","fetchRedirectIds","fetchLoadMatches","activeFetchers","deletedFetchers","activeDeferreds","blockerFunctions","unblockBlockerHistoryUpdate","initialize","historyAction","blockerKey","shouldBlockNavigation","nextHistoryUpdatePromise","resolve","updateBlocker","blockers","updateState","startNavigation","restoreAppliedTransitions","_saveAppliedTransitions","persistAppliedTransitions","dispose","deleteFetcher","deleteBlocker","subscribe","newState","opts","completedFetchers","deletedFetchersKeys","fetcher","subscriber","completeNavigation","_temp","_location$state","_location$state2","flushSync","isActionReload","isMutationMethod","actionData","mergeLoaderData","preventScrollReset","viewTransitionOpts","priorPaths","toPaths","getSavedScrollPosition","navigate","normalizedPath","normalizeTo","submission","normalizeNavigateOptions","currentLocation","nextLocation","userReplace","revalidate","interruptActiveLoads","saveScrollPosition","routesToUse","loadingNavigation","isHashChangeOnly","notFoundMatches","handleNavigational404","request","createClientSideRequest","pendingActionResult","findNearestBoundary","actionResult","handleAction","routeId","isErrorResult","getLoadingNavigation","shortCircuited","updatedMatches","handleLoaders","getActionDataForCommit","isFogOfWar","navigation","getSubmittingNavigation","discoverResult","discoverRoutes","boundaryId","actionMatch","getTargetMatch","callDataStrategy","isRedirectResult","normalizeRedirectLocation","startRedirectNavigation","isDeferredResult","boundaryMatch","overrideNavigation","fetcherSubmission","initialHydration","activeSubmission","getSubmissionFromNavigation","shouldUpdateNavigationState","getUpdatedActionData","matchesToLoad","revalidatingFetchers","getMatchesToLoad","cancelActiveDeferreds","updatedFetchers","markFetchRedirectsDone","updates","getUpdatedRevalidatingFetchers","rf","abortFetcher","abortPendingFetchRevalidations","loaderResults","fetcherResults","callLoadersAndMaybeResolveData","redirect","findRedirect","processLoaderData","deferredData","aborted","didAbortFetchLoads","abortStaleFetchLoads","shouldUpdateFetchers","revalidatingFetcher","getLoadingFetcher","fetch","setFetcherError","handleFetcherAction","handleFetcherLoader","requestMatches","detectAndHandle405Error","existingFetcher","updateFetcherState","getSubmittingFetcher","abortController","fetchRequest","originatingLoadId","getDoneFetcher","revalidationRequest","loadId","loadFetcher","staleKey","r","doneFetcher","resolveDeferredData","isNavigation","_temp2","redirectLocation","isDocumentReload","redirectHistoryAction","formMethod","formAction","formEncType","type","fetcherKey","results","dataResults","callDataStrategyImpl","isRedirectDataStrategyResultResult","response","normalizeRelativeRoutingRedirectResponse","convertDataStrategyResultToDataResult","fetchersToLoad","currentMatches","loaderResultsPromise","fetcherResultsPromise","acc","resolveNavigationDeferredResults","resolveFetcherDeferredResults","getFetcher","deleteFetcherAndUpdateState","count","controller","markFetchersDone","keys","doneKeys","landedId","yeetedKeys","getBlocker","blocker","newBlocker","_ref2","entries","blockerFunction","predicate","cancelledRouteIds","dfd","enableScrollRestoration","positions","getPosition","getKey","y","getScrollKey","signal","partialMatches","isNonHMR","localManifest","children","patchRoutesImpl","newMatches","newPartialMatches","_internalSetRoutes","newRoutes","patchRoutes","isSubmissionNavigation","prependBasename","fromRouteId","relative","contextualMatches","activeRouteMatch","nakedIndex","hasNakedIndexQuery","indexValues","qs","normalizeFormMethod","isFetcher","isValidMethod","getInvalidBodyError","rawFormMethod","stripHashFromPath","text","_ref3","name","json","searchParams","formData","convertFormDataToSearchParams","convertSearchParamsToFormData","getLoaderMatchesUntilBoundary","includeBoundary","skipActionErrorRevalidation","currentUrl","nextUrl","boundaryMatches","actionStatus","shouldSkipRevalidation","navigationMatches","isNewLoader","currentRouteMatch","nextRouteMatch","shouldRevalidateLoader","isNewRouteInstance","fetcherMatches","fetcherMatch","shouldRevalidate","hasData","hasError","currentLoaderData","currentMatch","isNew","isMissingData","currentPath","loaderMatch","arg","routeChoice","_childrenToPatch","childrenToPatch","uniqueChildren","newRoute","existingRoute","isSameRoute","aChild","_existingRoute$childr","bChild","loadLazyRouteModule","lazyRoute","routeToUpdate","routeUpdates","lazyRouteProperty","isPropertyStaticallyDefined","_ref4","requestContext","loadRouteDefinitionsPromises","dsMatches","loadRoutePromise","shouldLoad","handlerOverride","callLoaderOrAction","staticContext","onReject","runHandler","handler","reject","abortPromise","actualHandler","ctx","handlerPromise","handlerError","dataStrategyResult","isResponse","contentType","isDataWithResponseInit","_result$init3","_result$init4","_result$init","_result$init2","isDeferredData","_result$init5","_result$init6","_result$init7","_result$init8","trimmedMatches","historyInstance","invalidProtocols","normalizedLocation","isSameBasename","processRouteLoaderData","skipLoaderErrorBubbling","statusCode","foundError","loaderHeaders","pendingError","newLoaderData","mergedLoaderData","_temp5","method","errorMessage","deferred","isRevalidatingLoader","unwrap","_window","transitions","sessionPositions","DataRouterContext","React.createContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","RouteErrorContext","useHref","useInRouterContext","UNSAFE_invariant","navigator","React.useContext","useResolvedPath","joinedPathname","useLocation","useIsomorphicLayoutEffect","cb","React.useLayoutEffect","useNavigate","isDataRoute","useNavigateStable","useNavigateUnstable","dataRouterContext","routePathnamesJson","UNSAFE_getResolveToMatches","activeRef","React.useRef","React.useCallback","OutletContext","useOutlet","context","outlet","React.createElement","React.useMemo","useRoutesImpl","dataRouterState","parentMatches","routeMatch","parentParams","parentPathnameBase","locationFromContext","parentSegments","_renderMatches","DefaultErrorComponent","useRouteError","stack","preStyles","React.Fragment","defaultErrorElement","RenderErrorBoundary","React.Component","props","errorInfo","RenderedRoute","routeContext","_dataRouterState","_future","renderedMatches","errorIndex","renderFallback","fallbackIndex","needsToRunLoader","shouldRenderHydrateFallback","errorElement","hydrateFallbackElement","warningOnce","getChildren","DataRouterHook","DataRouterStateHook","useDataRouterContext","hookName","useDataRouterState","useRouteContext","useCurrentRouteId","thisRoute","_state$errors","alreadyWarned$1","logV6DeprecationWarnings","renderFuture","routerFuture","Navigate","isStatic","jsonPath","React.useEffect","Outlet","Router","_ref5","basenameProp","locationProp","navigationType","staticProp","navigationContext","locationContext","trailingPathname","_objectWithoutPropertiesLoose","isModifiedEvent","event","shouldProcessLinkClick","target","createSearchParams","getSearchParamsForLocation","locationSearch","defaultSearchParams","_excluded","_excluded2","REACT_ROUTER_VERSION","createBrowserRouter","parseHydrationData","UNSAFE_mapRouteProperties","deserializeErrors","serialized","val","UNSAFE_ErrorResponseImpl","ErrorConstructor","ViewTransitionContext","FetchersContext","START_TRANSITION","startTransitionImpl","React","FLUSH_SYNC","flushSyncImpl","ReactDOM","startTransitionSafe","flushSyncSafe","Deferred","reason","RouterProvider","fallbackElement","setStateImpl","React.useState","pendingState","setPendingState","vtContext","setVtContext","renderDfd","setRenderDfd","transition","setTransition","interruption","setInterruption","fetcherData","v7_startTransition","optInStartTransition","setState","isViewTransitionUnavailable","renderPromise","UNSAFE_logV6DeprecationWarnings","UNSAFE_DataRouterContext","UNSAFE_DataRouterStateContext","MemoizedDataRoutes","React.memo","DataRoutes","UNSAFE_useRoutesImpl","Link","React.forwardRef","_ref7","ref","onClick","reloadDocument","viewTransition","UNSAFE_NavigationContext","absoluteHref","isExternal","targetUrl","internalOnClick","useLinkClickHandler","handleClick","NavLink","_ref8","ariaCurrentProp","classNameProp","styleProp","routerState","isTransitioning","useViewTransitionState","nextLocationPathname","endSlashPosition","isActive","isPending","renderProps","ariaCurrent","className","style","replaceProp","useSearchParams","defaultInit","defaultSearchParamsRef","hasSetSearchParamsRef","setSearchParams","nextInit","navigateOptions","newSearchParams","nextPath","createStoreImpl","createState","listeners","partial","nextState","previousState","getState","api","initialState","createStore","identity","useStore","selector","slice","createImpl","useBoundStore","create","TOKEN_KEY","readToken","writeToken","token","initialToken","useAuth","set","bindAuthToStorage","onStorage","next","RequireAuth","signedIn","warn","i18n","code","msg","args","isString","alreadyWarned","warnOnce","loadedClb","loadNamespaces","ns","loadLanguages","lng","hasLoadedNamespace","i18nInstance","loadNotPending","obj","isObject","matchHtmlEntity","htmlEntities","unescapeHtmlEntity","unescape","defaultOptions","setDefaults","getDefaults","setI18n","instance","getI18n","initReactI18next","I18nContext","createContext","ReportNamespaces","namespaces","usePrevious","ignore","useRef","useEffect","alwaysNewT","language","namespace","keyPrefix","useMemoizedT","useCallback","useTranslation","i18nFromProps","i18nFromContext","defaultNSFromContext","useContext","notReadyT","optsOrDefaultValue","retNotReady","i18nOptions","useSuspense","ready","memoGetT","getT","getNewT","setT","useState","joinedNS","previousJoinedNS","isMounted","bindI18n","bindI18nStore","boundReset","ret","toKebabCase","string","mergeClasses","classes","array","defaultAttributes","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","iconNode","createElement","tag","attrs","createLucideIcon","iconName","Component","Check","ChevronDown","ChevronUp","CircleAlert","FileQuestion","House","Laptop","MessageSquarePlus","Moon","RotateCcw","Send","ShieldCheck","SunMedium","TriangleAlert","setRef","composeRefs","refs","node","hasCleanup","cleanups","cleanup","useComposedRefs","REACT_LAZY_TYPE","use","isPromiseLike","isLazyComponent","element","createSlot","ownerName","SlotClone","createSlotClone","Slot2","forwardedRef","slotProps","childrenArray","React.Children","slottable","isSlottable","newElement","newChildren","child","React.isValidElement","jsx","React.cloneElement","Slot","childrenRef","getElementRef","props2","mergeProps","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","getter","mayWarn","clsx","falsyToString","cx","cva","config","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","CLASS_PART_SEPARATOR","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","prefix","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","group","twJoin","argument","resolvedValue","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","cn","inputs","buttonVariants","Button","asChild","Comp","ErrorBoundary","_error","info","ErrorFallback","onReset","isDev","jsxs","AlertTriangle","Home","Subscribable","FocusManager","#focused","#cleanup","#setup","onFocus","setup","focused","isFocused","focusManager","defaultTimeoutProvider","callback","delay","timeoutId","intervalId","TimeoutManager","#provider","#providerCalled","provider","timeoutManager","systemSetTimeoutZero","noop","functionalUpdate","updater","input","isValidTimeout","timeUntilStale","updatedAt","staleTime","resolveStaleTime","query","resolveQueryBoolean","option","matchQuery","filters","exact","fetchStatus","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","matchMutation","mutation","mutationKey","hashKey","isPlainObject","hasOwn","replaceEqualDeep","depth","isPlainArray","aSize","bItems","bSize","copy","equalItems","aItem","bItem","shallowEqualObjects","o","hasObjectPrototype","ctor","prot","sleep","timeout","replaceData","prevData","addToEnd","items","item","max","newItems","addToStart","skipToken","ensureQueryFn","fetchOptions","shouldThrowError","throwOnError","addConsumeAwareSignal","object","getSignal","onCancelled","consumed","environmentManager","isServerFn","isServerValue","pendingThenable","thenable","_resolve","_reject","finalize","defaultScheduler","createNotifyManager","queue","transactions","notifyFn","batchNotifyFn","scheduleFn","schedule","flush","originalQueue","notifyManager","OnlineManager","#online","onOnline","onlineListener","offlineListener","online","onlineManager","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","createRetryer","isRetryCancelled","continueFn","isResolved","cancel","cancelOptions","cancelRetry","continueRetry","canContinue","canStart","pause","continueResolve","run","promiseOrValue","initialPromise","retry","retryDelay","shouldRetry","Removable","#gcTimeout","newGcTime","infiniteQueryBehavior","pages","direction","oldPages","oldPageParams","currentPage","fetchFn","cancelled","addSignalProperty","queryFn","fetchPage","previous","queryFnContext","queryFnContext2","page","maxPages","addTo","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","lastIndex","Query","#queryType","#initialState","#revertState","#cache","#client","#retryer","#defaultOptions","#abortSignalConsumed","getDefaultState","defaultState","successState","newData","#dispatch","promise","observer","x","#isInitialPausedFetch","context2","reducer","fetchState","dataUpdatedAt","initialDataUpdatedAt","Mutation","#observers","#mutationCache","variables","onContinue","mutationFnContext","restored","isPaused","MutationCache","#mutations","#scopes","#mutationId","scope","scopeFor","scopedMutations","firstPendingMutation","defaultedFilters","pausedMutations","MutationObserver","#currentResult","#currentMutation","#mutateOptions","#updateResult","prevOptions","#notify","onMutateResult","QueryCache","#queries","queryHash","queryInMap","queries","QueryClient","#queryCache","#queryDefaults","#mutationDefaults","#mountCount","#unsubscribeFocus","#unsubscribeOnline","defaultedOptions","cachedData","queryCache","defaultedCancelOptions","promises","defaults","queryDefault","QueryClientContext","useQueryClient","queryClient","QueryClientProvider","useMutation","React.useSyncExternalStore","onStoreChange","mutate","mutateOptions","jt","ee","ae","oe","se","te","Yt","E","Ot","Ft","$t","bt","yt","S","u","w","re","ie","T","F","D","ne","le","ce","de","ue","wt","tt","pe","me","ge","Wt","he","be","ye","we","M","xe","ve","Dt","Pt","Nt","Bt","Ct","kt","It","Mt","Ht","At","Lt","et","ut","ft","ot","at","X","st","pt","rt","B","P","nt","it","Y","C","lt","J","W","H","A","mt","L","z","ct","R","j","O","G","Vt","Ut","N","V","Kt","Xt","dt","Jt","Tt","gt","U","St","K","Gt","Qt","Rt","Et","qt","ht","$","Zt","Q","Z","I","zt","xt","_t","Te","$e","fe","vt","TOKEN_STORAGE_KEY","buildQueryString","parts","getStoredToken","headers","tok","body","res","err","ApiClientError","isJson","hadExplicitCode","spec","reqId","slug","describeError","fallback","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Input","NODES","Primitive","primitive","Node","primitiveProps","NAME","Label","Root","labelVariants","LabelPrimitive.Root","safeNext","raw","LoginRoute","setToken","setLocalToken","login","toast","onSubmit","BACKOFF_STEPS_MS","buildWsUrl","singleton","openChatWs","ws","attempt","reconnectTimer","closed","notifyStatus","notifyMessage","clearReconnect","scheduleReconnect","connect","parsed","send","close","onVisibility","APPROVAL_DISMISS_AFTER_MS","cur","toastForOutcome","messageCounter","mkId","useChat","dispatch","useReducer","wsRef","chunkBuf","flushScheduled","currentReplyIdRef","off1","off2","onIncoming","loadOrCreateThreadId","existing","fresh","threadId","bootstrap","off3","bufferChunk","flushChunks","replyId","trimmed","userId","switchAgent","approvalClick","messageId","choice","ok","newConversation","badgeVariants","Badge","MessageBubble","onApprove","ApprovalView","isUser","approval","prompt","outcome","isAuto","pendingChoice","setPendingChoice","AutoAllowCountdown","Row","OutcomeBadge","Fragment","graceSeconds","remaining","setRemaining","by","ApprovalDock","approvals","DockRow","entry","clamp","min","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","createContext2","rootComponentName","defaultContext","Context","Provider","useContext2","consumerName","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext3","BaseContext","createScope","scopeContexts","contexts","composeContextScopes","scopes","baseScope","scopeHooks","createScope2","overrideScopes","nextScopes","nextScopes2","useScope","currentScope","createCollection","PROVIDER_NAME","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","CollectionSlot","composedRefs","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","DirectionContext","useDirection","localDir","globalDir","dispatchDiscreteCustomEvent","ReactDOM.flushSync","useCallbackRef","callbackRef","useEscapeKeydown","onEscapeKeyDownProp","ownerDocument","onEscapeKeyDown","handleKeyDown","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","disableOutsidePointerEvents","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","setNode","force","node2","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","focusOutside","useFocusOutside","dispatchUpdate","handleUpdate","BRANCH_NAME","DismissableLayerBranch","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","eventDetail","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","detail","discrete","useFocusGuards","edgeGuards","createFocusGuard","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","loop","trapped","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","container","setContainer","onMountAutoFocus","onUnmountAutoFocus","lastFocusedElementRef","focusScope","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutations","mutationObserver","focusScopesStack","previouslyFocusedElement","mountEvent","focusFirst","removeLinks","getTabbableCandidates","unmountEvent","isTabKey","focusedElement","container2","last","getTabbableEdges","candidates","select","candidate","findVisible","nodes","walker","isHiddenInput","elements","isHidden","upTo","isSelectableInput","createFocusScopesStack","activeFocusScope","arrayRemove","updatedArray","useLayoutEffect2","useReactId","useId","deterministicId","setId","useLayoutEffect","reactId","sides","round","floor","createCoords","oppositeSideMap","start","evaluate","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","list","expandPaddingObject","getPaddingObject","rectToClientRect","rect","width","height","computeCoordsFromPlacement","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","detectOverflow","_await$platform$isEle","platform","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","MAX_RESET_COUNT","computePosition","middleware","platformWithDetectOverflow","statefulPlacement","resetCount","middlewareData","currentMiddleware","nextX","nextY","reset","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextPlacement","resetPlacement","_overflowsData$filter2","currentSideAxis","getSideOffsets","isAnySideFullyClipped","hide","offsets","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","len","limitMin","limitMax","_middlewareData$offse2","isOriginSide","_state$middlewareData","_state$middlewareData2","apply","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","elementOrCss","css","isWebKit","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","left","top","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","el","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstRect","right","bottom","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","io","root","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","hide$1","arrow$1","limitShift$1","mergedOptions","platformWithCache","computePosition$1","isClient","deepEqual","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","transform","whileElementsMounted","open","setData","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","floatingStyles","initialStyles","isRef","arrow$2","deps","Arrow","arrowProps","useSize","setSize","borderSizeEntry","borderSize","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","anchorRef","previousAnchor","CONTENT_NAME","PopperContentProvider","useContentContext","PopperContent","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","contentProps","content","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","hasExplicitBoundaries","isNotNull","isPositioned","anchorWidth","anchorHeight","contentStyle","floatingUIarrow","transformOrigin","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","Root2","Anchor","Content","PORTAL_NAME","Portal","containerProp","portalProps","mounted","setMounted","useInsertionEffect","useControllableState","prop","defaultProp","onChange","caller","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","isControlledRef","wasControlled","setValue","nextValue","value2","isFunction","prevValueRef","VISUALLY_HIDDEN_STYLES","VisuallyHidden","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","parent","targets","correctedTarget","applyAttributeToOthers","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","attr","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","__assign","__rest","__spreadArray","pack","ar","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","initialValue","currentValues","useMergeRefs","defaultValue","newValue","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","innerCreateMedium","buffer","assigned","medium","cbs","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","SideCar","_a","sideCar","Target","exportSidecar","exported","effectCar","nothing","RemoveScroll","parentRef","callbacks","setCallbacks","forwardProps","removeScrollBar","enabled","shards","noRelative","noIsolation","inert","allowPinchZoom","_b","Container","gapMode","containerRef","containerProps","getNonce","makeStyleTag","nonce","injectStyles","insertStyleTag","head","stylesheetSingleton","counter","stylesheet","styleHookSingleton","sheet","styles","isDynamic","styleSingleton","useStyle","Sheet","dynamic","zeroGap","parse","getOffset","cs","getGapWidth","documentWidth","windowWidth","Style","lockAttribute","getStyles","allowRelative","important","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noImportant","passiveSupported","nonPassive","alwaysContainsScroll","elementCanBeScrolled","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","isScrollable","elementCouldBeScrolled","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","handleScroll","endTarget","sourceDelta","noOverscroll","directionFactor","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","position","scroll_1","capacity","elementScroll","parent_1","getTouchXY","getDeltaXY","extractRef","deltaCompare","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","shouldCancelEvent","touch","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","isTouchingSelection","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","sourceEvent","shardNodes","shouldStop","shouldCancel","should","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","ReactRemoveScroll","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","createSelectContext","usePopperScope","SelectProvider","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","Select","__scopeSelect","openProp","defaultOpen","onOpenChange","valueProp","onValueChange","dir","autoComplete","disabled","form","popperScope","trigger","setTrigger","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","setOpen","triggerPointerDownPosRef","isFormControl","nativeOptionsSet","setNativeOptionsSet","nativeSelectKey","PopperPrimitive.Root","prev","optionsSet","SelectBubbleInput","TRIGGER_NAME","SelectTrigger","triggerProps","isDisabled","getItems","pointerTypeRef","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","enabledItems","currentItem","nextItem","findNextItem","handleOpen","pointerEvent","PopperPrimitive.Anchor","shouldShowPlaceholder","isTypingAhead","VALUE_NAME","SelectValue","placeholder","valueProps","onValueNodeHasChildrenChange","hasChildren","ICON_NAME","SelectIcon","iconProps","SelectPortal","PortalPrimitive","SelectContent","fragment","setFragment","frag","ReactDOM.createPortal","SelectContentProvider","SelectContentImpl","CONTENT_MARGIN","useSelectContentContext","CONTENT_IMPL_NAME","onCloseAutoFocus","viewport","setViewport","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","setIsPositioned","firstValidItemFoundRef","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","focusSelectedItem","pointerMoveDelta","handlePointerMove","handlePointerUp","itemRefCallback","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","isModifierKey","candidateNodes","currentElement","currentIndex","ITEM_ALIGNED_POSITION_NAME","popperProps","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","rightDelta","leftEdge","clampedRight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","contentPaddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","clampedTriggerMiddleToBottomEdge","isFirstItem","handleScrollButtonChange","SelectViewportProvider","POPPER_POSITION_NAME","PopperPrimitive.Content","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","groupProps","groupId","LABEL_NAME","SelectLabel","labelProps","groupContext","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","textValueProp","itemProps","isSelected","textValue","setTextValue","setIsFocused","textId","handleSelect","prevTextValue","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","textContent","nativeOption","onNativeOptionAdd","onNativeOptionRemove","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","SelectScrollButtonImpl","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","canScrollDown2","onAutoScroll","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","SEPARATOR_NAME","SelectSeparator","separatorProps","SelectArrow","PopperPrimitive.Arrow","BUBBLE_INPUT_NAME","prevValue","selectProto","onSearchChange","handleSearchChange","timerRef","updateSearch","normalizedSearch","currentItemIndex","wrappedItems","wrapArray","Trigger","Value","Content2","Viewport","Item","ItemText","ItemIndicator","ScrollUpButton","ScrollDownButton","Separator","SelectPrimitive.Root","SelectPrimitive.Value","SelectPrimitive.Trigger","SelectPrimitive.Icon","SelectPrimitive.ScrollUpButton","SelectPrimitive.ScrollDownButton","SelectPrimitive.Portal","SelectPrimitive.Content","SelectPrimitive.Viewport","SelectPrimitive.Label","SelectPrimitive.Item","SelectPrimitive.ItemIndicator","SelectPrimitive.ItemText","SelectPrimitive.Separator","AgentPicker","agents","THEME_KEY","LANG_KEY","readTheme","readLang","writeTheme","mode","writeLang","lang","usePrefs","get","applyThemeToDocument","useApplyTheme","mq","ThemeAndLangControls","setTheme","setLang","useMediaQuery","setMatches","useIsDesktop","NAV","Topbar","isDesktop","navLinks","STATUS_STYLES","ChatRoute","clearError","setInput","listRef","inputRef","onKeyDown","AlertCircle","mid","NotFoundRoute","loc","authedLazy","factory","Cmp","lazy","__vitePreload","AppRouter","defer","rej","makeString","lastOfPathSeparatorRegExp","cleanKey","canNotTraverseDeeper","getLastOfPath","Empty","stackIndex","setPath","pushPath","concat","getPath","getPathWithDefaults","defaultData","deepExtend","source","overwrite","regexEscape","str","_entityMap","escape","RegExpCache","regExpFromCache","regExpNew","chars","looksLikeObjectPathRegExpCache","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","matched","ki","deepFind","tokens","getCleanedCode","consoleLogger","Logger","concreteLogger","_len","_key","_len2","_key2","_len3","_key3","_len4","_key4","lvl","debugOnly","moduleName","baseLogger","EventEmitter","events","numListeners","numTimesAdded","ResourceStore","ignoreJSONStructure","resources","postProcessor","module","processors","translator","processor","checkedLoadedFor","shouldHandleAsObject","Translator","services","wouldCheckForNsInKey","seemsNaturalLanguage","lastKey","returnDetails","appendNamespaceToCIMode","resolved","resUsedKey","resExactUsedKey","noObject","joinArrays","handleAsObjectInI18nFormat","needsPluralHandling","hasDefaultValue","defaultValueSuffix","defaultValueSuffixOrdinalFallback","needsZeroSuffixLookup","resForObjHndl","handleAsObject","resType","resTypeIsArray","newKeyToUse","deepKey","usedDefault","usedKey","resForMissing","updateMissing","fk","lngs","fallbackLngs","specificDefaultValue","defaultForMissing","suffixes","suffix","_this","skipOnVariables","nestBef","nb","na","nestAft","postProcess","postProcessorNames","found","exactUsedKey","usedLng","usedNS","extracted","needsContextHandling","codes","finalKeys","pluralSuffix","zeroSuffix","ordinalPrefix","contextKey","possibleKey","optionsKeys","useOptionsReplaceForData","LanguageUtil","formattedCode","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","fc","suffixesOrder","dummyRule","PluralResolver","languageUtils","cleanedCode","cacheKey","rule","lngPart","pluralCategory1","pluralCategory2","pluralCategory","deepFindWithDefaults","regexSafe","Interpolator","escape$1","escapeValue","useRawValueToEscape","prefixEscaped","suffixEscaped","formatSeparator","unescapeSuffix","unescapePrefix","nestingPrefix","nestingPrefixEscaped","nestingSuffix","nestingSuffixEscaped","nestingOptionsSeparator","maxReplaces","alwaysFormat","getOrResetRegExp","existingRegExp","replaces","handleFormat","missingInterpolationHandler","todo","matchedVar","temp","safeValue","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","formatters","doReduce","elem","parseFormatStr","formatStr","formatName","formatOptions","optStr","opt","trimmedKey","createCachedFormatter","optForCache","formatter","Formatter","format","formats","mem","formatted","valOptions","removePending","Connector","backend","store","languages","toLoad","pending","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","loaded","loadedKeys","fcName","tried","wait","resolver","fallbackValue","isUpdate","clb","transformOptions","bindMemberFunctions","I18n","defOpts","createClassOnDemand","ClassOrObject","lu","load","finish","usedCallback","append","li","lngInLngs","_this2","setLngProps","done","setLng","_this3","fixedT","resultKey","_len5","_key5","fallbackLng","lastLng","loadState","preResult","preloaded","newLngs","rtlLngs","forkResourceStore","clone","clonedData","_len6","_key6","_createForOfIteratorHelper","_unsupportedIterableToArray","_n","_arrayLikeToArray","_typeof","UNSAFE_KEYS","isSafeUrlSegmentBase","isSafeLangUrlSegment","isSafeNsUrlSegment","SAFETY_CHECK_BY_KEY","sanitizeLogValue","redactUrlCredentials","hasXMLHttpRequest","isPromise","maybePromise","makePromise","interpolationRegexp","interpolateUrl","unsafe","check","_iterator","_step","seg","ownKeys","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","fetchApi","XmlHttpRequestApi","ActiveXObjectApi","mod","addQueryString","queryString","_i","_Object$keys","fetchIt","altFetch","altResponse","requestWithFetch","payload","reqOptions","requestWithXmlHttpRequest","_i2","_Object$keys2","_classCallCheck","_defineProperties","_createClass","Backend","allOptions","timer","loadUrlLanguages","loadUrlNamespaces","loadPath","resolvedLoadPath","safeLngs","safeNss","safeUrl","isNetworkError","term","parseErr","_this4","finished","dataArray","resArray","addPath","_this5","_this$services","backendConnector","logger","currentLanguage","HttpBackend","commonEn","errorsEn","tasksEn","approvalsEn","remindersEn","memosEn","memoryEn","skillsEn","workspaceEn","observabilityEn","settingsEn","commonZh","errorsZh","tasksZh","approvalsZh","remindersZh","memosZh","memoryZh","skillsZh","workspaceZh","observabilityZh","settingsZh","detectInitialLang","syncI18nLanguage","useStateMachine","machine","React.useReducer","Presence","present","presence","usePresence","React2.Children","React2.cloneElement","React2.useState","stylesRef","React2.useRef","prevPresentRef","prevAnimationNameRef","React2.useEffect","currentAnimationName","getAnimationName","wasPresent","prevAnimationName","ownerWindow","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","React2.useCallback","createSlottable","Slottable2","Fragment2","createTooltipContext","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider","__scopeTooltip","delayDuration","skipDelayDuration","disableHoverableContent","isOpenDelayedRef","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","TooltipTrigger","providerContext","isPointerDownRef","hasPointerMoveOpenedRef","PortalProvider","usePortalContext","TooltipContent","portalContext","forceMount","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","onClose","onPointerInTransitChange","handleRemoveGraceArea","handleCreateGraceArea","hoverTarget","currentTarget","exitPoint","exitSide","getExitSideFromRect","paddedExitPoints","getPaddedExitPoints","hoverTargetPoints","getPointsFromRect","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","Slottable","ariaLabel","VisuallyHiddenPrimitive.Root","TooltipArrow","point","polygon","inside","ii","jj","xi","yi","xj","yj","points","newPoints","getHullPresorted","upperHull","lowerHull","TooltipPrimitive.Provider","TooltipPrimitive.Content","Toaster","Sonner","LanguageBinder","ThemeBinder","AuthBinder","Providers","rootEl"],"ignoreList":[0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,68,69,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,137,138,139,140,142,143,144],"sources":["../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../node_modules/react-dom/client.js","../../node_modules/@remix-run/router/dist/router.js","../../node_modules/react-router/dist/index.js","../../node_modules/react-router-dom/dist/index.js","../../node_modules/zustand/esm/vanilla.mjs","../../node_modules/zustand/esm/react.mjs","../../src/stores/auth.ts","../../src/components/shell/require-auth.tsx","../../node_modules/react-i18next/dist/es/utils.js","../../node_modules/react-i18next/dist/es/unescape.js","../../node_modules/react-i18next/dist/es/defaults.js","../../node_modules/react-i18next/dist/es/i18nInstance.js","../../node_modules/react-i18next/dist/es/initReactI18next.js","../../node_modules/react-i18next/dist/es/context.js","../../node_modules/react-i18next/dist/es/useTranslation.js","../../node_modules/lucide-react/dist/esm/shared/src/utils.js","../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../node_modules/lucide-react/dist/esm/Icon.js","../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../node_modules/lucide-react/dist/esm/icons/check.js","../../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../node_modules/lucide-react/dist/esm/icons/chevron-up.js","../../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../../node_modules/lucide-react/dist/esm/icons/file-question.js","../../node_modules/lucide-react/dist/esm/icons/house.js","../../node_modules/lucide-react/dist/esm/icons/laptop.js","../../node_modules/lucide-react/dist/esm/icons/message-square-plus.js","../../node_modules/lucide-react/dist/esm/icons/moon.js","../../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js","../../node_modules/lucide-react/dist/esm/icons/send.js","../../node_modules/lucide-react/dist/esm/icons/shield-check.js","../../node_modules/lucide-react/dist/esm/icons/sun-medium.js","../../node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/clsx/dist/clsx.mjs","../../node_modules/class-variance-authority/dist/index.mjs","../../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../src/lib/utils.ts","../../src/components/ui/button.tsx","../../src/components/shell/error-boundary.tsx","../../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/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/thenable.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/mutation.js","../../node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../node_modules/@tanstack/query-core/build/modern/mutationObserver.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/QueryClientProvider.js","../../node_modules/@tanstack/react-query/build/modern/useMutation.js","../../node_modules/sonner/dist/index.mjs","../../src/lib/api/client.ts","../../src/lib/api/endpoints.ts","../../src/lib/api/errors.ts","../../src/components/ui/card.tsx","../../src/components/ui/input.tsx","../../node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/@radix-ui/react-label/dist/index.mjs","../../src/components/ui/label.tsx","../../src/routes/login.tsx","../../src/lib/api/ws.ts","../../src/hooks/use-chat.ts","../../src/components/ui/badge.tsx","../../src/components/chat/message-bubble.tsx","../../src/components/chat/approval-dock.tsx","../../node_modules/@radix-ui/number/dist/index.mjs","../../node_modules/@radix-ui/primitive/dist/index.mjs","../../node_modules/@radix-ui/react-context/dist/index.mjs","../../node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-collection/dist/index.mjs","../../node_modules/@radix-ui/react-direction/dist/index.mjs","../../node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../node_modules/@radix-ui/react-id/dist/index.mjs","../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../node_modules/@radix-ui/react-arrow/dist/index.mjs","../../node_modules/@radix-ui/react-use-size/dist/index.mjs","../../node_modules/@radix-ui/react-popper/dist/index.mjs","../../node_modules/@radix-ui/react-portal/dist/index.mjs","../../node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../node_modules/aria-hidden/dist/es2015/index.js","../../node_modules/tslib/tslib.es6.mjs","../../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../node_modules/use-callback-ref/dist/es2015/assignRef.js","../../node_modules/use-callback-ref/dist/es2015/useRef.js","../../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../node_modules/use-sidecar/dist/es2015/medium.js","../../node_modules/use-sidecar/dist/es2015/exports.js","../../node_modules/react-remove-scroll/dist/es2015/medium.js","../../node_modules/react-remove-scroll/dist/es2015/UI.js","../../node_modules/get-nonce/dist/es2015/index.js","../../node_modules/react-style-singleton/dist/es2015/singleton.js","../../node_modules/react-style-singleton/dist/es2015/hook.js","../../node_modules/react-style-singleton/dist/es2015/component.js","../../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../node_modules/react-remove-scroll/dist/es2015/Combination.js","../../node_modules/@radix-ui/react-select/dist/index.mjs","../../src/components/ui/select.tsx","../../src/components/chat/agent-picker.tsx","../../src/stores/prefs.ts","../../src/components/shell/theme-lang-controls.tsx","../../src/hooks/use-media-query.ts","../../src/components/shell/topbar.tsx","../../src/routes/chat.tsx","../../src/routes/not-found.tsx","../../src/router.tsx","../../src/lib/query-client.ts","../../node_modules/i18next/dist/esm/i18next.js","../../node_modules/i18next-http-backend/esm/utils.js","../../node_modules/i18next-http-backend/esm/request.js","../../node_modules/i18next-http-backend/esm/index.js","../../src/i18n/index.ts","../../node_modules/@radix-ui/react-presence/dist/index.mjs","../../node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../src/components/ui/tooltip.tsx","../../src/components/ui/sonner.tsx","../../src/components/shell/providers.tsx","../../src/main.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its 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'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","/**\n * @remix-run/router v1.23.3\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (Action) {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Action[\"Pop\"] = \"POP\";\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Action[\"Push\"] = \"PUSH\";\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nfunction createMemoryHistory(options) {\n if (options === void 0) {\n options = {};\n }\n let {\n initialEntries = [\"/\"],\n initialIndex,\n v5Compat = false\n } = options;\n let entries; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n let action = Action.Pop;\n let listener = null;\n function clampIndex(n) {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation() {\n return entries[index];\n }\n function createMemoryLocation(to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n return location;\n }\n function createHref(to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n let history = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\"\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({\n action,\n location: nextLocation,\n delta: 1\n });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({\n action,\n location: nextLocation,\n delta: 0\n });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({\n action,\n location: nextLocation,\n delta\n });\n }\n },\n listen(fn) {\n listener = fn;\n return () => {\n listener = null;\n };\n }\n };\n return history;\n}\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nfunction createBrowserHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createBrowserLocation(window, globalHistory) {\n let {\n pathname,\n search,\n hash\n } = window.location;\n return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createBrowserHref(window, to) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\n}\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nfunction createHashHistory(options) {\n if (options === void 0) {\n options = {};\n }\n function createHashLocation(window, globalHistory) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = parsePath(window.location.hash.substr(1));\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route (<Route path=\"*\">) since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n return createLocation(\"\", {\n pathname,\n search,\n hash\n },\n // state defaults to `null` because `window.history.state` does\n globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n }\n function createHashHref(window, to) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n function validateHashLocation(location, to) {\n warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n }\n return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\nfunction warning(cond, message) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n return {\n usr: location.state,\n key: location.key,\n idx: index\n };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n if (state === void 0) {\n state = null;\n }\n let location = _extends({\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\"\n }, typeof to === \"string\" ? parsePath(to) : to, {\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: to && to.key || key || createKey()\n });\n return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\"\n } = _ref;\n if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n let parsedPath = {};\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n if (path) {\n parsedPath.pathname = path;\n }\n }\n return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n if (options === void 0) {\n options = {};\n }\n let {\n window = document.defaultView,\n v5Compat = false\n } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener = null;\n let index = getIndex();\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState(_extends({}, globalHistory.state, {\n idx: index\n }), \"\");\n }\n function getIndex() {\n let state = globalHistory.state || {\n idx: null\n };\n return state.idx;\n }\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({\n action,\n location: history.location,\n delta\n });\n }\n }\n function push(to, state) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 1\n });\n }\n }\n function replace(to, state) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n if (v5Compat && listener) {\n listener({\n action,\n location: history.location,\n delta: 0\n });\n }\n }\n function createURL(to) {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n return new URL(href, base);\n }\n let history = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n }\n };\n return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n ResultType[\"data\"] = \"data\";\n ResultType[\"deferred\"] = \"deferred\";\n ResultType[\"redirect\"] = \"redirect\";\n ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n if (parentPath === void 0) {\n parentPath = [];\n }\n if (manifest === void 0) {\n manifest = {};\n }\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\". Route \" + \"id's must be globally unique within Data Router usages\");\n if (isIndexRoute(route)) {\n let indexRoute = _extends({}, route, mapRouteProperties(route), {\n id\n });\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n id,\n children: undefined\n });\n manifest[id] = pathOrLayoutRoute;\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n }\n return pathOrLayoutRoute;\n }\n });\n}\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/v6/utils/match-routes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n if (basename === void 0) {\n basename = \"/\";\n }\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial) {\n let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n let pathname = stripBasename(location.pathname || \"/\", basename);\n if (pathname == null) {\n return null;\n }\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n let matches = null;\n let decoded = decodePath(pathname);\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n matches = matchRouteBranch(branches[i], decoded, allowPartial);\n }\n return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n let {\n route,\n pathname,\n params\n } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle\n };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n if (branches === void 0) {\n branches = [];\n }\n if (parentsMeta === void 0) {\n parentsMeta = [];\n }\n if (parentPath === void 0) {\n parentPath = \"\";\n }\n let flattenRoute = (route, index, relativePath) => {\n let meta = {\n relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route\n };\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta\n });\n };\n routes.forEach((route, index) => {\n var _route$path;\n // coarse-grain check for optional params\n if (route.path === \"\" || !((_route$path = route.path) != null && _route$path.includes(\"?\"))) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n return branches;\n}\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path) {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n let [first, ...rest] = segments;\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n let result = [];\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n // for absolute paths, ensure `/` instead of empty segment\n return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n if (index) {\n initialScore += indexRouteValue;\n }\n return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n return siblings ?\n // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1] :\n // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\nfunction matchRouteBranch(branch, pathname, allowPartial) {\n if (allowPartial === void 0) {\n allowPartial = false;\n }\n let {\n routesMeta\n } = branch;\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath({\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end\n }, remainingPathname);\n let route = meta.route;\n if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n match = matchPath({\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false\n }, remainingPathname);\n }\n if (!match) {\n return null;\n }\n Object.assign(matchedParams, match.params);\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n route\n });\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/v6/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n if (params === void 0) {\n params = {};\n }\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n path = path.replace(/\\*$/, \"/*\");\n }\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n const segments = path.split(/\\/+/).map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\";\n // Apply the splat\n return stringify(params[star]);\n }\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key];\n invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n return stringify(param);\n }\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter(segment => !!segment);\n return prefix + segments.join(\"/\");\n}\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/v6/utils/match-path\n */\nfunction matchPath(pattern, pathname) {\n if (typeof pattern === \"string\") {\n pattern = {\n path: pattern,\n caseSensitive: false,\n end: true\n };\n }\n let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n let match = pathname.match(matcher);\n if (!match) return null;\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params = compiledParams.reduce((memo, _ref, index) => {\n let {\n paramName,\n isOptional\n } = _ref;\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n }\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n }, {});\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern\n };\n}\nfunction compilePath(path, caseSensitive, end) {\n if (caseSensitive === void 0) {\n caseSensitive = false;\n }\n if (end === void 0) {\n end = true;\n }\n warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n let params = [];\n let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/\\/:([\\w-]+)(\\?)?/g, (_, paramName, isOptional) => {\n params.push({\n paramName,\n isOptional: isOptional != null\n });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n });\n if (path.endsWith(\"*\")) {\n params.push({\n paramName: \"*\"\n });\n regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else ;\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n return [matcher, params];\n}\nfunction decodePath(value) {\n try {\n return value.split(\"/\").map(v => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n } catch (error) {\n warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n return value;\n }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n if (basename === \"/\") return pathname;\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n return pathname.slice(startIndex) || \"/\";\n}\nconst ABSOLUTE_URL_REGEX$1 = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst isAbsoluteUrl = url => ABSOLUTE_URL_REGEX$1.test(url);\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/v6/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n if (fromPathname === void 0) {\n fromPathname = \"/\";\n }\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\"\n } = typeof to === \"string\" ? parsePath(to) : to;\n let pathname;\n if (toPathname) {\n if (isAbsoluteUrl(toPathname)) {\n pathname = toPathname;\n } else {\n if (toPathname.includes(\"//\")) {\n let oldPathname = toPathname;\n toPathname = removeDoubleSlashes(toPathname);\n warning(false, \"Pathnames cannot have embedded double slashes - normalizing \" + (oldPathname + \" -> \" + toPathname));\n }\n if (toPathname.startsWith(\"/\")) {\n pathname = resolvePathname(toPathname.substring(1), \"/\");\n } else {\n pathname = resolvePathname(toPathname, fromPathname);\n }\n }\n } else {\n pathname = fromPathname;\n }\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash)\n };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n relativeSegments.forEach(segment => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"]. Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in <Link to=\\\"...\\\"> and the router will parse it for you.\";\n}\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\" element={<Link to=\"..\"}>\n * </Route>\n *\n * <Route path=\"/\">\n * <Route path=\"accounts\">\n * <Route element={<AccountsLayout />}> // <-- Does not contribute\n * <Route index element={<Link to=\"..\"} /> // <-- Does not contribute\n * </Route\n * </Route>\n * </Route>\n */\nfunction getPathContributingMatches(matches) {\n return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nfunction getResolveToMatches(matches, v7_relativeSplatPath) {\n let pathMatches = getPathContributingMatches(matches);\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase);\n }\n return pathMatches.map(match => match.pathnameBase);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n if (isPathRelative === void 0) {\n isPathRelative = false;\n }\n let to;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = _extends({}, toArg);\n invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n }\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n let from;\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `<Link to>` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how <a href> works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n to.pathname = toSegments.join(\"/\");\n }\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n let path = resolvePath(to, from);\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n path.pathname += \"/\";\n }\n return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n // Empty strings should be treated the same as / paths\n return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\nconst removeDoubleSlashes = path => path.replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst joinPaths = paths => removeDoubleSlashes(paths.join(\"/\"));\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n *\n * @deprecated The `json` method is deprecated in favor of returning raw objects.\n * This method will be removed in v7.\n */\nconst json = function json(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n return new Response(JSON.stringify(data), _extends({}, responseInit, {\n headers\n }));\n};\nclass DataWithResponseInit {\n constructor(data, init) {\n this.type = \"DataWithResponseInit\";\n this.data = data;\n this.init = init || null;\n }\n}\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nfunction data(data, init) {\n return new DataWithResponseInit(data, typeof init === \"number\" ? {\n status: init\n } : init);\n}\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n constructor(data, responseInit) {\n this.pendingKeysSet = new Set();\n this.subscribers = new Set();\n this.deferredKeys = [];\n invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject;\n this.abortPromise = new Promise((_, r) => reject = r);\n this.controller = new AbortController();\n let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n this.data = Object.entries(data).reduce((acc, _ref2) => {\n let [key, value] = _ref2;\n return Object.assign(acc, {\n [key]: this.trackPromise(key, value)\n });\n }, {});\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n this.init = responseInit;\n }\n trackPromise(key, value) {\n if (!(value instanceof Promise)) {\n return value;\n }\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n Object.defineProperty(promise, \"_tracked\", {\n get: () => true\n });\n return promise;\n }\n onSettle(promise, key, error, data) {\n if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n return Promise.reject(error);\n }\n this.pendingKeysSet.delete(key);\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n Object.defineProperty(promise, \"_error\", {\n get: () => undefinedError\n });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", {\n get: () => error\n });\n this.emit(false, key);\n return Promise.reject(error);\n }\n Object.defineProperty(promise, \"_data\", {\n get: () => data\n });\n this.emit(false, key);\n return data;\n }\n emit(aborted, settledKey) {\n this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n }\n subscribe(fn) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n async resolveData(signal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise(resolve => {\n this.subscribe(aborted => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n get unwrappedData() {\n invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n return Object.entries(this.data).reduce((acc, _ref3) => {\n let [key, value] = _ref3;\n return Object.assign(acc, {\n [key]: unwrapTrackedPromise(value)\n });\n }, {});\n }\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\nfunction isTrackedPromise(value) {\n return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n/**\n * @deprecated The `defer` method is deprecated in favor of returning raw\n * objects. This method will be removed in v7.\n */\nconst defer = function defer(data, init) {\n if (init === void 0) {\n init = {};\n }\n let responseInit = typeof init === \"number\" ? {\n status: init\n } : init;\n return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n if (init === void 0) {\n init = 302;\n }\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = {\n status: responseInit\n };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n return new Response(null, _extends({}, responseInit, {\n headers\n }));\n};\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirectDocument = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst replace = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nclass ErrorResponseImpl {\n constructor(status, statusText, data, internal) {\n if (internal === void 0) {\n internal = false;\n }\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n};\nconst IDLE_FETCHER = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n};\nconst IDLE_BLOCKER = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n let mapRouteProperties;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = route => ({\n hasErrorBoundary: detectErrorBoundary(route)\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Routes keyed by ID\n let manifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n let inFlightDataRoutes;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.dataStrategy || defaultDataStrategy;\n let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation;\n // Config driven behavior flags\n let future = _extends({\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false\n }, init.future);\n // Cleanup function for history\n let unlistenHistory = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from <ScrollRestoration /> until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialMatchesIsFOW = false;\n let initialErrors = null;\n if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname\n });\n let {\n matches,\n route\n } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = {\n [route.id]: error\n };\n }\n // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname);\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n let initialized;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnNavigation` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatchesIsFOW = true;\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some(m => m.route.lazy)) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!initialMatches.some(m => m.route.loader)) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(m => errors[m.route.id] !== undefined);\n initialized = initialMatches.slice(0, idx + 1).every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n } else {\n initialized = initialMatches.every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors));\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n let router;\n let state = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n actionData: init.hydrationData && init.hydrationData.actionData || null,\n errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n fetchers: new Map(),\n blockers: new Map()\n };\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction = Action.Pop;\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n // AbortController for the active navigation\n let pendingNavigationController;\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions = new Map();\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener = null;\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes = [];\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads = new Set();\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let unblockBlockerHistoryUpdate = undefined;\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(_ref => {\n let {\n action: historyAction,\n location,\n delta\n } = _ref;\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (unblockBlockerHistoryUpdate) {\n unblockBlockerHistoryUpdate();\n unblockBlockerHistoryUpdate = undefined;\n return;\n }\n warning(blockerFunctions.size === 0 || delta != null, \"You are trying to use a blocker on a POP navigation to a location \" + \"that was not created by @remix-run/router. This will fail silently in \" + \"production. This can happen if you are navigating outside the router \" + \"via `window.history.pushState`/`window.location.hash` instead of using \" + \"router navigation APIs. This can also happen if you are using \" + \"createHashRouter and the user manually changes the URL.\");\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction\n });\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n let nextHistoryUpdatePromise = new Promise(resolve => {\n unblockBlockerHistoryUpdate = resolve;\n });\n init.history.go(delta * -1);\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location\n });\n // Re-do the same POP navigation we just blocked, after the url\n // restoration is also complete. See:\n // https://github.com/remix-run/react-router/issues/11613\n nextHistoryUpdatePromise.then(() => init.history.go(delta));\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({\n blockers\n });\n }\n });\n return;\n }\n return startNavigation(historyAction, location);\n });\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(Action.Pop, state.location, {\n initialHydration: true\n });\n }\n return router;\n }\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n // Subscribe to state updates for the router\n function subscribe(fn) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n // Update our state and notify the calling context of the change\n function updateState(newState, opts) {\n if (opts === void 0) {\n opts = {};\n }\n state = _extends({}, state, newState);\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers = [];\n let deletedFetchersKeys = [];\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n // Remove any lingering deleted fetchers that have already been removed\n // from state.fetchers\n deletedFetchers.forEach(key => {\n if (!state.fetchers.has(key) && !fetchControllers.has(key)) {\n deletedFetchersKeys.push(key);\n }\n });\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach(subscriber => subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n viewTransitionOpts: opts.viewTransitionOpts,\n flushSync: opts.flushSync === true\n }));\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach(key => state.fetchers.delete(key));\n deletedFetchersKeys.forEach(key => deleteFetcher(key));\n } else {\n // We already called deleteFetcher() on these, can remove them from this\n // Set now that we've handed the keys off to the data layer\n deletedFetchersKeys.forEach(key => deletedFetchers.delete(key));\n }\n }\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(location, newState, _temp) {\n var _location$state, _location$state2;\n let {\n flushSync\n } = _temp === void 0 ? {} : _temp;\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n let actionData;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === Action.Replace) {\n init.history.replace(location, location.state);\n }\n let viewTransitionOpts;\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === Action.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location\n };\n }\n updateState(_extends({}, newState, {\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n preventScrollReset,\n blockers\n }), {\n viewTransitionOpts,\n flushSync: flushSync === true\n });\n // Reset stateful navigation vars\n pendingAction = Action.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n }\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(to, opts) {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n let {\n path,\n submission,\n error\n } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n let historyAction = Action.Push;\n if (userReplace === true) {\n historyAction = Action.Replace;\n } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = Action.Replace;\n }\n let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n let flushSync = (opts && opts.flushSync) === true;\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction\n });\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey, IDLE_BLOCKER);\n updateState({\n blockers\n });\n }\n });\n return;\n }\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.viewTransition,\n flushSync\n });\n }\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({\n revalidation: \"loading\"\n });\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true\n });\n return;\n }\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(pendingAction || state.historyAction, state.navigation.location, {\n overrideNavigation: state.navigation,\n // Proxy through any rending view transition\n enableViewTransition: pendingViewTransitionEnabled === true\n });\n }\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(historyAction, location, opts) {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = opts != null && opts.initialHydration && state.matches && state.matches.length > 0 && !initialMatchesIsFOW ?\n // `matchRoutes()` has already been called if we're in here via `router.initialize()`\n state.matches : matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial hydration will always\n // be \"same hash\". For example, on /page#hash and submit a <Form method=\"post\">\n // which will default to a navigation to /page\n if (matches && state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n completeNavigation(location, {\n matches\n }, {\n flushSync\n });\n return;\n }\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let {\n error,\n notFoundMatches,\n route\n } = handleNavigational404(location.pathname);\n completeNavigation(location, {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n }, {\n flushSync\n });\n return;\n }\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);\n let pendingActionResult;\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [findNearestBoundary(matches).route.id, {\n type: ResultType.error,\n error: opts.pendingError\n }];\n } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n // Call action if we received an action submission\n let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, {\n replace: opts.replace,\n flushSync\n });\n if (actionResult.shortCircuited) {\n return;\n }\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n pendingNavigationController = null;\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error\n }\n });\n return;\n }\n }\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = false;\n // Create a GET request for the loaders\n request = createClientSideRequest(init.history, request.url, request.signal);\n }\n // Call loaders\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors\n } = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult);\n if (shortCircuited) {\n return;\n }\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n completeNavigation(location, _extends({\n matches: updatedMatches || matches\n }, getActionDataForCommit(pendingActionResult), {\n loaderData,\n errors\n }));\n }\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(request, location, submission, matches, isFogOfWar, opts) {\n if (opts === void 0) {\n opts = {};\n }\n interruptActiveLoads();\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({\n navigation\n }, {\n flushSync: opts.flushSync === true\n });\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n if (discoverResult.type === \"aborted\") {\n return {\n shortCircuited: true\n };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [boundaryId, {\n type: ResultType.error,\n error: discoverResult.error\n }]\n };\n } else if (!discoverResult.matches) {\n let {\n notFoundMatches,\n error,\n route\n } = handleNavigational404(location.pathname);\n return {\n matches: notFoundMatches,\n pendingActionResult: [route.id, {\n type: ResultType.error,\n error\n }]\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n // Call our action and get the result\n let result;\n let actionMatch = getTargetMatch(matches, location);\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id\n })\n };\n } else {\n let results = await callDataStrategy(\"action\", state, request, [actionMatch], matches, null);\n result = results[actionMatch.route.id];\n if (request.signal.aborted) {\n return {\n shortCircuited: true\n };\n }\n }\n if (isRedirectResult(result)) {\n let replace;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(result.response.headers.get(\"Location\"), new URL(request.url), basename, init.history);\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, true, {\n submission,\n replace\n });\n return {\n shortCircuited: true\n };\n }\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, {\n type: \"defer-action\"\n });\n }\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n // By default, all submissions to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = Action.Push;\n }\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result]\n };\n }\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result]\n };\n }\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration);\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(_extends({\n navigation: loadingNavigation\n }, actionData !== undefined ? {\n actionData\n } : {}), {\n flushSync\n });\n }\n let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n if (discoverResult.type === \"aborted\") {\n return {\n shortCircuited: true\n };\n } else if (discoverResult.type === \"error\") {\n let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id;\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: discoverResult.error\n }\n };\n } else if (!discoverResult.matches) {\n let {\n error,\n notFoundMatches,\n route\n } = handleNavigational404(location.pathname);\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error\n }\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult);\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));\n pendingNavigationLoadId = ++incrementingLoadId;\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(location, _extends({\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n [pendingActionResult[0]]: pendingActionResult[1].error\n } : null\n }, getActionDataForCommit(pendingActionResult), updatedFetchers ? {\n fetchers: new Map(state.fetchers)\n } : {}), {\n flushSync\n });\n return {\n shortCircuited: true\n };\n }\n if (shouldUpdateNavigationState) {\n let updates = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, {\n flushSync\n });\n }\n revalidatingFetchers.forEach(rf => {\n abortFetcher(rf.key);\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n }\n let {\n loaderResults,\n fetcherResults\n } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, request);\n if (request.signal.aborted) {\n return {\n shortCircuited: true\n };\n }\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n }\n revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n await startRedirectNavigation(request, redirect.result, true, {\n replace\n });\n return {\n shortCircuited: true\n };\n }\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n await startRedirectNavigation(request, redirect.result, true, {\n replace\n });\n return {\n shortCircuited: true\n };\n }\n // Process and commit output from loaders\n let {\n loaderData,\n errors\n } = processLoaderData(state, matches, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds);\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe(aborted => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n // Preserve SSR errors during partial hydration\n if (future.v7_partialHydration && initialHydration && state.errors) {\n errors = _extends({}, state.errors, errors);\n }\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n return _extends({\n matches,\n loaderData,\n errors\n }, shouldUpdateFetchers ? {\n fetchers: new Map(state.fetchers)\n } : {});\n }\n function getUpdatedActionData(pendingActionResult) {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n revalidatingFetchers.forEach(rf => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(key, routeId, href, opts) {\n if (isServer) {\n throw new Error(\"router.fetch() was called during the server render, but it shouldn't be. \" + \"You are likely calling a useFetcher() method in the body of your component. \" + \"Try moving it to a useEffect or a callback.\");\n }\n abortFetcher(key);\n let flushSync = (opts && opts.flushSync) === true;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative);\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n if (!matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: normalizedPath\n }), {\n flushSync\n });\n return;\n }\n let {\n path,\n submission,\n error\n } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);\n if (error) {\n setFetcherError(key, routeId, error, {\n flushSync\n });\n return;\n }\n let match = getTargetMatch(matches, path);\n let preventScrollReset = (opts && opts.preventScrollReset) === true;\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n return;\n }\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, {\n routeId,\n path\n });\n handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission);\n }\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, preventScrollReset, submission) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n function detectAndHandle405Error(m) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId\n });\n setFetcherError(key, routeId, error, {\n flushSync\n });\n return true;\n }\n return false;\n }\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync\n });\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(requestMatches, new URL(fetchRequest.url).pathname, fetchRequest.signal, key);\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, {\n flushSync\n });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: path\n }), {\n flushSync\n });\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\"action\", state, fetchRequest, [match], requestMatches, key);\n let actionResult = actionResults[match.route.id];\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, false, {\n fetcherSubmission: submission,\n preventScrollReset\n });\n }\n }\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, {\n type: \"defer-action\"\n });\n }\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal);\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n invariant(matches, \"Didn't find any matches after fetcher action\");\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]);\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);\n state.fetchers.set(staleKey, revalidatingFetcher);\n abortFetcher(staleKey);\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n updateState({\n fetchers: new Map(state.fetchers)\n });\n let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));\n abortController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n let {\n loaderResults,\n fetcherResults\n } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);\n if (abortController.signal.aborted) {\n return;\n }\n abortController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));\n let redirect = findRedirect(loaderResults);\n if (redirect) {\n return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n preventScrollReset\n });\n }\n redirect = findRedirect(fetcherResults);\n if (redirect) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n fetchRedirectIds.add(redirect.key);\n return startRedirectNavigation(revalidationRequest, redirect.result, false, {\n preventScrollReset\n });\n }\n // Process and commit output from loaders\n let {\n loaderData,\n errors\n } = processLoaderData(state, matches, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n abortStaleFetchLoads(loadId);\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers)\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors),\n fetchers: new Map(state.fetchers)\n });\n isRevalidationRequired = false;\n }\n }\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, preventScrollReset, submission) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {\n flushSync\n });\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(matches, new URL(fetchRequest.url).pathname, fetchRequest.signal, key);\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n setFetcherError(key, routeId, discoverResult.error, {\n flushSync\n });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(key, routeId, getInternalRouterError(404, {\n pathname: path\n }), {\n flushSync\n });\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\"loader\", state, fetchRequest, [match], matches, key);\n let result = results[match.route.id];\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;\n }\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n if (fetchRequest.signal.aborted) {\n return;\n }\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result, false, {\n preventScrollReset\n });\n return;\n }\n }\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(request, redirect, isNavigation, _temp2) {\n let {\n submission,\n fetcherSubmission,\n preventScrollReset,\n replace\n } = _temp2 === void 0 ? {} : _temp2;\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(location, new URL(request.url), basename, init.history);\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true\n });\n if (isBrowser) {\n let isDocumentReload = false;\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n let redirectHistoryAction = replace === true || redirect.response.headers.has(\"X-Remix-Replace\") ? Action.Replace : Action.Push;\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let {\n formMethod,\n formAction,\n formEncType\n } = state.navigation;\n if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (redirectPreserveMethodStatusCodes.has(redirect.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: _extends({}, activeSubmission, {\n formAction: location\n }),\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(redirectLocation, submission);\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve these flags across redirects\n preventScrollReset: preventScrollReset || pendingPreventScrollReset,\n enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n });\n }\n }\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(type, state, request, matchesToLoad, matches, fetcherKey) {\n let results;\n let dataResults = {};\n try {\n results = await callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties);\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n matchesToLoad.forEach(m => {\n dataResults[m.route.id] = {\n type: ResultType.error,\n error: e\n };\n });\n return dataResults;\n }\n for (let [routeId, result] of Object.entries(results)) {\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result;\n dataResults[routeId] = {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, future.v7_relativeSplatPath)\n };\n } else {\n dataResults[routeId] = await convertDataStrategyResultToDataResult(result);\n }\n }\n return dataResults;\n }\n async function callLoadersAndMaybeResolveData(state, matches, matchesToLoad, fetchersToLoad, request) {\n let currentMatches = state.matches;\n // Kick off loaders and fetchers in parallel\n let loaderResultsPromise = callDataStrategy(\"loader\", state, request, matchesToLoad, matches, null);\n let fetcherResultsPromise = Promise.all(fetchersToLoad.map(async f => {\n if (f.matches && f.match && f.controller) {\n let results = await callDataStrategy(\"loader\", state, createClientSideRequest(init.history, f.path, f.controller.signal), [f.match], f.matches, f.key);\n let result = results[f.match.route.id];\n // Fetcher results are keyed by fetcher key from here on out, not routeId\n return {\n [f.key]: result\n };\n } else {\n return Promise.resolve({\n [f.key]: {\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path\n })\n }\n });\n }\n }));\n let loaderResults = await loaderResultsPromise;\n let fetcherResults = (await fetcherResultsPromise).reduce((acc, r) => Object.assign(acc, r), {});\n await Promise.all([resolveNavigationDeferredResults(matches, loaderResults, request.signal, currentMatches, state.loaderData), resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad)]);\n return {\n loaderResults,\n fetcherResults\n };\n }\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n }\n abortFetcher(key);\n });\n }\n function updateFetcherState(key, fetcher, opts) {\n if (opts === void 0) {\n opts = {};\n }\n state.fetchers.set(key, fetcher);\n updateState({\n fetchers: new Map(state.fetchers)\n }, {\n flushSync: (opts && opts.flushSync) === true\n });\n }\n function setFetcherError(key, routeId, error, opts) {\n if (opts === void 0) {\n opts = {};\n }\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState({\n errors: {\n [boundaryMatch.route.id]: error\n },\n fetchers: new Map(state.fetchers)\n }, {\n flushSync: (opts && opts.flushSync) === true\n });\n }\n function getFetcher(key) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n function deleteFetcher(key) {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n // If we opted into the flag we can clear this now since we're calling\n // deleteFetcher() at the end of updateState() and we've already handed the\n // deleted fetcher keys off to the data layer.\n // If not, we're eagerly calling deleteFetcher() and we need to keep this\n // Set populated until the next updateState call, and we'll clear\n // `deletedFetchers` then\n if (future.v7_fetcherPersist) {\n deletedFetchers.delete(key);\n }\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n function deleteFetcherAndUpdateState(key) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n if (!future.v7_fetcherPersist) {\n deleteFetcher(key);\n }\n } else {\n activeFetchers.set(key, count);\n }\n updateState({\n fetchers: new Map(state.fetchers)\n });\n }\n function abortFetcher(key) {\n let controller = fetchControllers.get(key);\n if (controller) {\n controller.abort();\n fetchControllers.delete(key);\n }\n }\n function markFetchersDone(keys) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n function markFetchRedirectsDone() {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, \"Expected fetcher: \" + key);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n function abortStaleFetchLoads(landedId) {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, \"Expected fetcher: \" + key);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n function getBlocker(key, fn) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n return blocker;\n }\n function deleteBlocker(key) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key, newBlocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\", \"Invalid blocker state transition: \" + blocker.state + \" -> \" + newBlocker.state);\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({\n blockers\n });\n }\n function shouldBlockNavigation(_ref2) {\n let {\n currentLocation,\n nextLocation,\n historyAction\n } = _ref2;\n if (blockerFunctions.size === 0) {\n return;\n }\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({\n currentLocation,\n nextLocation,\n historyAction\n })) {\n return blockerKey;\n }\n }\n function handleNavigational404(pathname) {\n let error = getInternalRouterError(404, {\n pathname\n });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let {\n matches,\n route\n } = getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n return {\n notFoundMatches: matches,\n route,\n error\n };\n }\n function cancelActiveDeferreds(predicate) {\n let cancelledRouteIds = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the <ScrollRestoration> component\n function enableScrollRestoration(positions, getPosition, getKey) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({\n restoreScrollPosition: y\n });\n }\n }\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n function getScrollKey(location, matches) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));\n return key || location.key;\n }\n return location.key;\n }\n function saveScrollPosition(location, matches) {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n function getSavedScrollPosition(location, matches) {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n function checkFogOfWar(matches, routesToUse, pathname) {\n if (patchRoutesOnNavigationImpl) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n return {\n active: true,\n matches: fogMatches || []\n };\n } else {\n if (Object.keys(matches[0].params).length > 0) {\n // If we matched a dynamic param or a splat, it might only be because\n // we haven't yet discovered other routes that would match with a\n // higher score. Call patchRoutesOnNavigation just to be sure\n let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n return {\n active: true,\n matches: partialMatches\n };\n }\n }\n }\n return {\n active: false,\n matches: null\n };\n }\n async function discoverRoutes(matches, pathname, signal, fetcherKey) {\n if (!patchRoutesOnNavigationImpl) {\n return {\n type: \"success\",\n matches\n };\n }\n let partialMatches = matches;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let localManifest = manifest;\n try {\n await patchRoutesOnNavigationImpl({\n signal,\n path: pathname,\n matches: partialMatches,\n fetcherKey,\n patch: (routeId, children) => {\n if (signal.aborted) return;\n patchRoutesImpl(routeId, children, routesToUse, localManifest, mapRouteProperties);\n }\n });\n } catch (e) {\n return {\n type: \"error\",\n error: e,\n partialMatches\n };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR && !signal.aborted) {\n dataRoutes = [...dataRoutes];\n }\n }\n if (signal.aborted) {\n return {\n type: \"aborted\"\n };\n }\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n if (newMatches) {\n return {\n type: \"success\",\n matches: newMatches\n };\n }\n let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n // Avoid loops if the second pass results in the same partial matches\n if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) {\n return {\n type: \"success\",\n matches: null\n };\n }\n partialMatches = newPartialMatches;\n }\n }\n function _internalSetRoutes(newRoutes) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);\n }\n function patchRoutes(routeId, children) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties);\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: to => init.history.createHref(to),\n encodeLocation: to => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes\n };\n return router;\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\nconst UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\nfunction createStaticHandler(routes, opts) {\n invariant(routes.length > 0, \"You must provide a non-empty routes array to createStaticHandler\");\n let manifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties;\n if (opts != null && opts.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts != null && opts.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = route => ({\n hasErrorBoundary: detectErrorBoundary(route)\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future = _extends({\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false\n }, opts ? opts.future : null);\n let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(request, _temp3) {\n let {\n requestContext,\n skipLoaderErrorBubbling,\n dataStrategy\n } = _temp3 === void 0 ? {} : _temp3;\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, {\n method\n });\n let {\n matches: methodNotAllowedMatches,\n route\n } = getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, {\n pathname: location.pathname\n });\n let {\n matches: notFoundMatches,\n route\n } = getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null\n };\n }\n let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, skipLoaderErrorBubbling === true, null);\n if (isResponse(result)) {\n return result;\n }\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return _extends({\n location,\n basename\n }, result);\n }\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(request, _temp4) {\n let {\n routeId,\n requestContext,\n dataStrategy\n } = _temp4 === void 0 ? {} : _temp4;\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, {\n method\n });\n } else if (!matches) {\n throw getInternalRouterError(404, {\n pathname: location.pathname\n });\n }\n let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, {\n pathname: location.pathname\n });\n }\n let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, false, match);\n if (isResponse(result)) {\n return result;\n }\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n if (result.loaderData) {\n var _result$activeDeferre;\n let data = Object.values(result.loaderData)[0];\n if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n return undefined;\n }\n async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) {\n invariant(request.signal, \"query()/queryRoute() requests must contain an AbortController signal\");\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch != null);\n return result;\n }\n let result = await loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch);\n return isResponse(result) ? result : _extends({}, result, {\n actionData: null,\n actionHeaders: {}\n });\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isDataStrategyResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n async function submit(request, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest) {\n let result;\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error\n };\n } else {\n let results = await callDataStrategy(\"action\", request, [actionMatch], matches, isRouteRequest, requestContext, dataStrategy);\n result = results[actionMatch.route.id];\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")\n }\n });\n }\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, {\n type: \"defer-action\"\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error\n };\n }\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: {\n [actionMatch.route.id]: result.data\n },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null\n };\n }\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal\n });\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null, [boundaryMatch.route.id, result]);\n // action status codes take precedence over loader status codes\n return _extends({}, context, {\n statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n actionData: null,\n actionHeaders: _extends({}, result.headers ? {\n [actionMatch.route.id]: result.headers\n } : {})\n });\n }\n let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null);\n return _extends({}, context, {\n actionData: {\n [actionMatch.route.id]: result.data\n }\n }, result.statusCode ? {\n statusCode: result.statusCode\n } : {}, {\n actionHeaders: result.headers ? {\n [actionMatch.route.id]: result.headers\n } : {}\n });\n }\n async function loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, pendingActionResult) {\n let isRouteRequest = routeMatch != null;\n // Short circuit if we have no loaders to run (queryRoute())\n if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch == null ? void 0 : routeMatch.route.id\n });\n }\n let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;\n let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce((acc, m) => Object.assign(acc, {\n [m.route.id]: null\n }), {}),\n errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n [pendingActionResult[0]]: pendingActionResult[1].error\n } : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null\n };\n }\n let results = await callDataStrategy(\"loader\", request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy);\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling);\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));\n matches.forEach(match => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n return _extends({}, context, {\n matches,\n activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null\n });\n }\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) {\n let results = await callDataStrategyImpl(dataStrategy || defaultDataStrategy, type, null, request, matchesToLoad, matches, null, manifest, mapRouteProperties, requestContext);\n let dataResults = {};\n await Promise.all(matches.map(async match => {\n if (!(match.route.id in results)) {\n return;\n }\n let result = results[match.route.id];\n if (isRedirectDataStrategyResultResult(result)) {\n let response = result.result;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(response, request, match.route.id, matches, basename, future.v7_relativeSplatPath);\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n }));\n return dataResults;\n }\n return {\n dataRoutes,\n query,\n queryRoute\n };\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nfunction getStaticContextFromError(routes, context, error) {\n let newContext = _extends({}, context, {\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error\n }\n });\n return newContext;\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest, future) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n}\nfunction isSubmissionNavigation(opts) {\n return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== undefined);\n}\nfunction normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) {\n let contextualMatches;\n let activeRouteMatch;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n // Resolve the relative path\n let path = resolveTo(to ? to : \".\", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === \"path\");\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n // Account for `?index` params when routing to the current location\n if ((to == null || to === \"\" || to === \".\") && activeRouteMatch) {\n let nakedIndex = hasNakedIndexQuery(path.search);\n if (activeRouteMatch.route.index && !nakedIndex) {\n // Add one when we're targeting an index route\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n } else if (!activeRouteMatch.route.index && nakedIndex) {\n // Remove existing ones when we're not\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n params.delete(\"index\");\n indexValues.filter(v => v).forEach(v => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? \"?\" + qs : \"\";\n }\n }\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return {\n path\n };\n }\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, {\n method: opts.formMethod\n })\n };\n }\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, {\n type: \"invalid-body\"\n })\n });\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();\n let formAction = stripHashFromPath(path);\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ?\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce((acc, _ref3) => {\n let [name, value] = _ref3;\n return \"\" + acc + name + \"=\" + value + \"\\n\";\n }, \"\") : String(opts.body);\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text\n }\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n try {\n let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined\n }\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n invariant(typeof FormData === \"function\", \"FormData is not available in this environment\");\n let searchParams;\n let formData;\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n let submission = {\n formMethod,\n formAction,\n formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined\n };\n if (isMutationMethod(submission.formMethod)) {\n return {\n path,\n submission\n };\n }\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = \"?\" + searchParams;\n return {\n path: createPath(parsedPath),\n submission\n };\n}\n// Filter out all routes at/below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary) {\n if (includeBoundary === void 0) {\n includeBoundary = false;\n }\n let index = matches.findIndex(m => m.route.id === boundaryId);\n if (index >= 0) {\n return matches.slice(0, includeBoundary ? index + 1 : index);\n }\n return matches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, initialHydration, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {\n let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryMatches = matches;\n if (initialHydration && state.errors) {\n // On initial hydration, only consider matches up to _and including_ the boundary.\n // This is inclusive to handle cases where a server loader ran successfully,\n // a child server loader bubbled up to this route, but this route has\n // `clientLoader.hydrate` so we want to still run the `clientLoader` so that\n // we have a complete version of `loaderData`\n boundaryMatches = getLoaderMatchesUntilBoundary(matches, Object.keys(state.errors)[0], true);\n } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) {\n // If an action threw an error, we call loaders up to, but not including the\n // boundary\n boundaryMatches = getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]);\n }\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : undefined;\n let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let {\n route\n } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n if (route.loader == null) {\n return false;\n }\n if (initialHydration) {\n return shouldLoadRouteOnHydration(route, state.loaderData, state.errors);\n }\n // Always call the loader on new route instances and pending defer cancellations\n if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {\n return true;\n }\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n return shouldRevalidateLoader(match, _extends({\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params\n }, submission, {\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false :\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n }));\n });\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial hydration (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (initialHydration || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {\n return;\n }\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null\n });\n return;\n }\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === undefined) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params\n }, submission, {\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired\n }));\n }\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController()\n });\n }\n });\n return [navigationMatches, revalidatingFetchers];\n}\nfunction shouldLoadRouteOnHydration(route, loaderData, errors) {\n // We dunno if we have a loader - gotta find out!\n if (route.lazy) {\n return true;\n }\n // No loader, nothing to initialize\n if (!route.loader) {\n return false;\n }\n let hasData = loaderData != null && loaderData[route.id] !== undefined;\n let hasError = errors != null && errors[route.id] !== undefined;\n // Don't run if we error'd during SSR\n if (!hasData && hasError) {\n return false;\n }\n // Explicitly opting-in to running on hydration\n if (typeof route.loader === \"function\" && route.loader.hydrate === true) {\n return true;\n }\n // Otherwise, run if we're not yet initialized with anything\n return !hasData && !hasError;\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n return arg.defaultShouldRevalidate;\n}\nfunction patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) {\n var _childrenToPatch;\n let childrenToPatch;\n if (routeId) {\n let route = manifest[routeId];\n invariant(route, \"No route found to patch children into: routeId = \" + routeId);\n if (!route.children) {\n route.children = [];\n }\n childrenToPatch = route.children;\n } else {\n childrenToPatch = routesToUse;\n }\n // Don't patch in routes we already know about so that `patch` is idempotent\n // to simplify user-land code. This is useful because we re-call the\n // `patchRoutesOnNavigation` function for matched routes with params.\n let uniqueChildren = children.filter(newRoute => !childrenToPatch.some(existingRoute => isSameRoute(newRoute, existingRoute)));\n let newRoutes = convertRoutesToDataRoutes(uniqueChildren, mapRouteProperties, [routeId || \"_\", \"patch\", String(((_childrenToPatch = childrenToPatch) == null ? void 0 : _childrenToPatch.length) || \"0\")], manifest);\n childrenToPatch.push(...newRoutes);\n}\nfunction isSameRoute(newRoute, existingRoute) {\n // Most optimal check is by id\n if (\"id\" in newRoute && \"id\" in existingRoute && newRoute.id === existingRoute.id) {\n return true;\n }\n // Second is by pathing differences\n if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) {\n return false;\n }\n // Pathless layout routes are trickier since we need to check children.\n // If they have no children then they're the same as far as we can tell\n if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) {\n return true;\n }\n // Otherwise, we look to see if every child in the new route is already\n // represented in the existing route's children\n return newRoute.children.every((aChild, i) => {\n var _existingRoute$childr;\n return (_existingRoute$childr = existingRoute.children) == null ? void 0 : _existingRoute$childr.some(bChild => isSameRoute(aChild, bChild));\n });\n}\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(route, mapRouteProperties, manifest) {\n if (!route.lazy) {\n return;\n }\n let lazyRoute = await route.lazy();\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue = routeToUpdate[lazyRouteProperty];\n let isPropertyStaticallyDefined = staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n warning(!isPropertyStaticallyDefined, \"Route \\\"\" + routeToUpdate.id + \"\\\" has a static property \\\"\" + lazyRouteProperty + \"\\\" \" + \"defined but its lazy function is also returning a value for this property. \" + (\"The lazy route property \\\"\" + lazyRouteProperty + \"\\\" will be ignored.\"));\n if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n }\n }\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), {\n lazy: undefined\n }));\n}\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy(_ref4) {\n let {\n matches\n } = _ref4;\n let matchesToLoad = matches.filter(m => m.shouldLoad);\n let results = await Promise.all(matchesToLoad.map(m => m.resolve()));\n return results.reduce((acc, result, i) => Object.assign(acc, {\n [matchesToLoad[i].route.id]: result\n }), {});\n}\nasync function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties, requestContext) {\n let loadRouteDefinitionsPromises = matches.map(m => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties, manifest) : undefined);\n let dsMatches = matches.map((match, i) => {\n let loadRoutePromise = loadRouteDefinitionsPromises[i];\n let shouldLoad = matchesToLoad.some(m => m.route.id === match.route.id);\n // `resolve` encapsulates route.lazy(), executing the loader/action,\n // and mapping return values/thrown errors to a `DataStrategyResult`. Users\n // can pass a callback to take fine-grained control over the execution\n // of the loader/action\n let resolve = async handlerOverride => {\n if (handlerOverride && request.method === \"GET\" && (match.route.lazy || match.route.loader)) {\n shouldLoad = true;\n }\n return shouldLoad ? callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, requestContext) : Promise.resolve({\n type: ResultType.data,\n result: undefined\n });\n };\n return _extends({}, match, {\n shouldLoad,\n resolve\n });\n });\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: dsMatches,\n request,\n params: matches[0].params,\n fetcherKey,\n context: requestContext\n });\n // Wait for all routes to load here but 'swallow the error since we want\n // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n // called from `match.resolve()`\n try {\n await Promise.all(loadRouteDefinitionsPromises);\n } catch (e) {\n // No-op\n }\n return results;\n}\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) {\n let result;\n let onReject;\n let runHandler = handler => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject;\n // This will never resolve so safe to type it as Promise<DataStrategyResult> to\n // satisfy the function return value\n let abortPromise = new Promise((_, r) => reject = r);\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n let actualHandler = ctx => {\n if (typeof handler !== \"function\") {\n return Promise.reject(new Error(\"You cannot call the handler for a route which defines a boolean \" + (\"\\\"\" + type + \"\\\" [routeId: \" + match.route.id + \"]\")));\n }\n return handler({\n request,\n params: match.params,\n context: staticContext\n }, ...(ctx !== undefined ? [ctx] : []));\n };\n let handlerPromise = (async () => {\n try {\n let val = await (handlerOverride ? handlerOverride(ctx => actualHandler(ctx)) : actualHandler());\n return {\n type: \"data\",\n result: val\n };\n } catch (e) {\n return {\n type: \"error\",\n result: e\n };\n }\n })();\n return Promise.race([handlerPromise, abortPromise]);\n };\n try {\n let handler = match.route[type];\n // If we have a route.lazy promise, await that first\n if (loadRoutePromise) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch(e => {\n handlerError = e;\n }), loadRoutePromise]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value;\n } else {\n // Load lazy route module, then run any returned handler\n await loadRoutePromise;\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return {\n type: ResultType.data,\n result: undefined\n };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname\n });\n } else {\n result = await runHandler(handler);\n }\n invariant(result.result !== undefined, \"You defined \" + (type === \"action\" ? \"an action\" : \"a loader\") + \" for route \" + (\"\\\"\" + match.route.id + \"\\\" but didn't return anything from your `\" + type + \"` \") + \"function. Please return a value or `null`.\");\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // DataStrategyResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return {\n type: ResultType.error,\n result: e\n };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n return result;\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n let {\n result,\n type\n } = dataStrategyResult;\n if (isResponse(result)) {\n let data;\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return {\n type: ResultType.error,\n error: e\n };\n }\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers\n };\n }\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers\n };\n }\n if (type === ResultType.error) {\n if (isDataWithResponseInit(result)) {\n var _result$init3, _result$init4;\n if (result.data instanceof Error) {\n var _result$init, _result$init2;\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status,\n headers: (_result$init2 = result.init) != null && _result$init2.headers ? new Headers(result.init.headers) : undefined\n };\n }\n // Convert thrown data() to ErrorResponse instances\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(((_result$init3 = result.init) == null ? void 0 : _result$init3.status) || 500, undefined, result.data),\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n headers: (_result$init4 = result.init) != null && _result$init4.headers ? new Headers(result.init.headers) : undefined\n };\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined\n };\n }\n if (isDeferredData(result)) {\n var _result$init5, _result$init6;\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status,\n headers: ((_result$init6 = result.init) == null ? void 0 : _result$init6.headers) && new Headers(result.init.headers)\n };\n }\n if (isDataWithResponseInit(result)) {\n var _result$init7, _result$init8;\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: (_result$init7 = result.init) == null ? void 0 : _result$init7.status,\n headers: (_result$init8 = result.init) != null && _result$init8.headers ? new Headers(result.init.headers) : undefined\n };\n }\n return {\n type: ResultType.data,\n data: result\n };\n}\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, v7_relativeSplatPath) {\n let location = response.headers.get(\"Location\");\n invariant(location, \"Redirects returned/thrown from loaders/actions must have a Location header\");\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1);\n location = normalizeTo(new URL(request.url), trimmedMatches, basename, true, location, v7_relativeSplatPath);\n response.headers.set(\"Location\", location);\n }\n return response;\n}\nfunction normalizeRedirectLocation(location, currentUrl, basename, historyInstance) {\n // Match Chrome's behavior:\n // https://github.com/chromium/chromium/blob/216dbeb61db0c667e62082e5f5400a32d6983df3/content/public/common/url_utils.cc#L82\n let invalidProtocols = [\"about:\", \"blob:\", \"chrome:\", \"chrome-untrusted:\", \"content:\", \"data:\", \"devtools:\", \"file:\", \"filesystem:\",\n // eslint-disable-next-line no-script-url\n \"javascript:\"];\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n if (invalidProtocols.includes(url.protocol)) {\n throw new Error(\"Invalid redirect location\");\n }\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return removeDoubleSlashes(url.pathname) + url.search + url.hash;\n }\n }\n try {\n let url = historyInstance.createURL(location);\n if (invalidProtocols.includes(url.protocol)) {\n throw new Error(\"Invalid redirect location\");\n }\n } catch (e) {}\n return location;\n}\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(history, location, signal, submission) {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init = {\n signal\n };\n if (submission && isMutationMethod(submission.formMethod)) {\n let {\n formMethod,\n formEncType\n } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n if (formEncType === \"application/json\") {\n init.headers = new Headers({\n \"Content-Type\": formEncType\n });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n let searchParams = new URLSearchParams();\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\nfunction processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) {\n // Fill in loaderData/errors from our loaders\n let loaderData = {};\n let errors = null;\n let statusCode;\n let foundError = false;\n let loaderHeaders = {};\n let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined;\n // Process loader results into state.loaderData/state.errors\n matches.forEach(match => {\n if (!(match.route.id in results)) {\n return;\n }\n let id = match.route.id;\n let result = results[id];\n invariant(!isRedirectResult(result), \"Cannot handle redirect results in processLoaderData\");\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n errors = errors || {};\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode != null && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = {\n [pendingActionResult[0]]: pendingError\n };\n loaderData[pendingActionResult[0]] = undefined;\n }\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders\n };\n}\nfunction processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) {\n let {\n loaderData,\n errors\n } = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble\n );\n // Process results from our revalidating fetchers\n revalidatingFetchers.forEach(rf => {\n let {\n key,\n match,\n controller\n } = rf;\n let result = fetcherResults[key];\n invariant(result, \"Did not find corresponding fetcher result\");\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n return;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = _extends({}, errors, {\n [boundaryMatch.route.id]: result.error\n });\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n });\n return {\n loaderData,\n errors\n };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n let mergedLoaderData = _extends({}, newLoaderData);\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1]) ? {\n // Clear out prior actionData on errors\n actionData: {}\n } : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data\n }\n };\n}\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(matches, routeId) {\n let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];\n return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === \"/\") || {\n id: \"__shim-error-route__\"\n };\n return {\n matches: [{\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route\n }],\n route\n };\n}\nfunction getInternalRouterError(status, _temp5) {\n let {\n pathname,\n routeId,\n method,\n type,\n message\n } = _temp5 === void 0 ? {} : _temp5;\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage = \"You made a \" + method + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide a `loader` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = \"Route \\\"\" + routeId + \"\\\" does not match URL \\\"\" + pathname + \"\\\"\";\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = \"No route matches URL \\\"\" + pathname + \"\\\"\";\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage = \"You made a \" + method.toUpperCase() + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide an `action` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n } else if (method) {\n errorMessage = \"Invalid request method \\\"\" + method.toUpperCase() + \"\\\"\";\n }\n }\n return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);\n}\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results) {\n let entries = Object.entries(results);\n for (let i = entries.length - 1; i >= 0; i--) {\n let [key, result] = entries[i];\n if (isRedirectResult(result)) {\n return {\n key,\n result\n };\n }\n }\n}\nfunction stripHashFromPath(path) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath(_extends({}, parsedPath, {\n hash: \"\"\n }));\n}\nfunction isHashChangeOnly(a, b) {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\nfunction isDataStrategyResult(result) {\n return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === ResultType.data || result.type === ResultType.error);\n}\nfunction isRedirectDataStrategyResultResult(result) {\n return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isDeferredResult(result) {\n return result.type === ResultType.deferred;\n}\nfunction isErrorResult(result) {\n return result.type === ResultType.error;\n}\nfunction isRedirectResult(result) {\n return (result && result.type) === ResultType.redirect;\n}\nfunction isDataWithResponseInit(value) {\n return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isDeferredData(value) {\n let deferred = value;\n return deferred && typeof deferred === \"object\" && typeof deferred.data === \"object\" && typeof deferred.subscribe === \"function\" && typeof deferred.cancel === \"function\" && typeof deferred.resolveData === \"function\";\n}\nfunction isResponse(value) {\n return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectResponse(result) {\n if (!isResponse(result)) {\n return false;\n }\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\nfunction isValidMethod(method) {\n return validRequestMethods.has(method.toLowerCase());\n}\nfunction isMutationMethod(method) {\n return validMutationMethods.has(method.toLowerCase());\n}\nasync function resolveNavigationDeferredResults(matches, results, signal, currentMatches, currentLoaderData) {\n let entries = Object.entries(results);\n for (let index = 0; index < entries.length; index++) {\n let [routeId, result] = entries[index];\n let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n let currentMatch = currentMatches.find(m => m.route.id === match.route.id);\n let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n if (isDeferredResult(result) && isRevalidatingLoader) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n await resolveDeferredData(result, signal, false).then(result => {\n if (result) {\n results[routeId] = result;\n }\n });\n }\n }\n}\nasync function resolveFetcherDeferredResults(matches, results, revalidatingFetchers) {\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let {\n key,\n routeId,\n controller\n } = revalidatingFetchers[index];\n let result = results[key];\n let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n if (isDeferredResult(result)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n invariant(controller, \"Expected an AbortController for revalidating fetcher deferred result\");\n await resolveDeferredData(result, controller.signal, true).then(result => {\n if (result) {\n results[key] = result;\n }\n });\n }\n }\n}\nasync function resolveDeferredData(result, signal, unwrap) {\n if (unwrap === void 0) {\n unwrap = false;\n }\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e\n };\n }\n }\n return {\n type: ResultType.data,\n data: result.deferredData.data\n };\n}\nfunction hasNakedIndexQuery(search) {\n return new URLSearchParams(search).getAll(\"index\").some(v => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n let {\n formMethod,\n formAction,\n formEncType,\n text,\n formData,\n json\n } = navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined\n };\n }\n}\nfunction getLoadingNavigation(location, submission) {\n if (submission) {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n } else {\n let navigation = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined\n };\n return navigation;\n }\n}\nfunction getSubmittingNavigation(location, submission) {\n let navigation = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text\n };\n return navigation;\n}\nfunction getLoadingFetcher(submission, data) {\n if (submission) {\n let fetcher = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data\n };\n return fetcher;\n } else {\n let fetcher = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data\n };\n return fetcher;\n }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n let fetcher = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined\n };\n return fetcher;\n}\nfunction getDoneFetcher(data) {\n let fetcher = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data\n };\n return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n if (transitions.size > 0) {\n let json = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));\n } catch (error) {\n warning(false, \"Failed to save applied view transitions in sessionStorage (\" + error + \").\");\n }\n }\n}\n//#endregion\n\nexport { AbortedDeferredError, Action, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, UNSAFE_DEFERRED_SYMBOL, DeferredData as UNSAFE_DeferredData, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, convertRouteMatchToUiMatch as UNSAFE_convertRouteMatchToUiMatch, convertRoutesToDataRoutes as UNSAFE_convertRoutesToDataRoutes, decodePath as UNSAFE_decodePath, getResolveToMatches as UNSAFE_getResolveToMatches, invariant as UNSAFE_invariant, warning as UNSAFE_warning, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, createRouter, createStaticHandler, data, defer, generatePath, getStaticContextFromError, getToPathname, isDataWithResponseInit, isDeferredData, isRouteErrorResponse, joinPaths, json, matchPath, matchRoutes, normalizePathname, parsePath, redirect, redirectDocument, replace, resolvePath, resolveTo, stripBasename };\n//# sourceMappingURL=router.js.map\n","/**\n * React Router v6.30.4\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_invariant, joinPaths, matchPath, UNSAFE_decodePath, UNSAFE_getResolveToMatches, UNSAFE_warning, resolveTo, parsePath, matchRoutes, Action, UNSAFE_convertRouteMatchToUiMatch, stripBasename, IDLE_BLOCKER, isRouteErrorResponse, createMemoryHistory, AbortedDeferredError, createRouter } from '@remix-run/router';\nexport { AbortedDeferredError, Action as NavigationType, createPath, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, replace, resolvePath } from '@remix-run/router';\n\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\n\nconst DataRouterContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n DataRouterContext.displayName = \"DataRouter\";\n}\nconst DataRouterStateContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\nconst AwaitContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n AwaitContext.displayName = \"Await\";\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\n\nconst NavigationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n NavigationContext.displayName = \"Navigation\";\n}\nconst LocationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n LocationContext.displayName = \"Location\";\n}\nconst RouteContext = /*#__PURE__*/React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n RouteContext.displayName = \"Route\";\n}\nconst RouteErrorContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n RouteErrorContext.displayName = \"RouteError\";\n}\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/v6/hooks/use-href\n */\nfunction useHref(to, _temp) {\n let {\n relative\n } = _temp === void 0 ? {} : _temp;\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useHref() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let {\n basename,\n navigator\n } = React.useContext(NavigationContext);\n let {\n hash,\n pathname,\n search\n } = useResolvedPath(to, {\n relative\n });\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n return navigator.createHref({\n pathname: joinedPathname,\n search,\n hash\n });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-in-router-context\n */\nfunction useInRouterContext() {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/v6/hooks/use-location\n */\nfunction useLocation() {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useLocation() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigation-type\n */\nfunction useNavigationType() {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/v6/hooks/use-match\n */\nfunction useMatch(pattern) {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useMatch() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let {\n pathname\n } = useLocation();\n return React.useMemo(() => matchPath(pattern, UNSAFE_decodePath(pathname)), [pathname, pattern]);\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\n\nconst navigateEffectWarning = \"You should call navigate() in a React.useEffect(), not when \" + \"your component is first rendered.\";\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(cb) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/v6/hooks/use-navigate\n */\nfunction useNavigate() {\n let {\n isDataRoute\n } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useNavigate() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let dataRouterContext = React.useContext(DataRouterContext);\n let {\n basename,\n future,\n navigator\n } = React.useContext(NavigationContext);\n let {\n matches\n } = React.useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React.useCallback(function (to, options) {\n if (options === void 0) {\n options = {};\n }\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n let path = resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === \"path\");\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);\n }, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]);\n return navigate;\n}\nconst OutletContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/v6/hooks/use-outlet-context\n */\nfunction useOutletContext() {\n return React.useContext(OutletContext);\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/v6/hooks/use-outlet\n */\nfunction useOutlet(context) {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return /*#__PURE__*/React.createElement(OutletContext.Provider, {\n value: context\n }, outlet);\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/v6/hooks/use-params\n */\nfunction useParams() {\n let {\n matches\n } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? routeMatch.params : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/v6/hooks/use-resolved-path\n */\nfunction useResolvedPath(to, _temp2) {\n let {\n relative\n } = _temp2 === void 0 ? {} : _temp2;\n let {\n future\n } = React.useContext(NavigationContext);\n let {\n matches\n } = React.useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n return React.useMemo(() => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, relative === \"path\"), [to, routePathnamesJson, locationPathname, relative]);\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/v6/hooks/use-routes\n */\nfunction useRoutes(routes, locationArg) {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nfunction useRoutesImpl(routes, locationArg, dataRouterState, future) {\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n \"useRoutes() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let {\n navigator\n } = React.useContext(NavigationContext);\n let {\n matches: parentMatches\n } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n if (process.env.NODE_ENV !== \"production\") {\n // You won't get a warning about 2 different <Routes> under a <Route>\n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // <Routes>\n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // <Route path=\"blog\" element={<Blog />} />\n // <Route path=\"blog/feed\" element={<BlogFeed />} />\n // </Routes>\n //\n // function Blog() {\n // return (\n // <Routes>\n // <Route path=\"post/:id\" element={<Post />} />\n // </Routes>\n // );\n // }\n let parentPath = parentRoute && parentRoute.path || \"\";\n warningOnce(parentPathname, !parentRoute || parentPath.endsWith(\"*\"), \"You rendered descendant <Routes> (or called `useRoutes()`) at \" + (\"\\\"\" + parentPathname + \"\\\" (under <Route path=\\\"\" + parentPath + \"\\\">) but the \") + \"parent route path has no trailing \\\"*\\\". This means if you navigate \" + \"deeper, the parent won't match anymore and therefore the child \" + \"routes will never render.\\n\\n\" + (\"Please change the parent <Route path=\\\"\" + parentPath + \"\\\"> to <Route \") + (\"path=\\\"\" + (parentPath === \"/\" ? \"*\" : parentPath + \"/*\") + \"\\\">.\"));\n }\n let locationFromContext = useLocation();\n let location;\n if (locationArg) {\n var _parsedLocationArg$pa;\n let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n !(parentPathnameBase === \"/\" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, \" + \"the location pathname must begin with the portion of the URL pathname that was \" + (\"matched by all parent routes. The current pathname base is \\\"\" + parentPathnameBase + \"\\\" \") + (\"but pathname \\\"\" + parsedLocationArg.pathname + \"\\\" was given in the `location` prop.\")) : UNSAFE_invariant(false) : void 0;\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n let pathname = location.pathname || \"/\";\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n let matches = matchRoutes(routes, {\n pathname: remainingPathname\n });\n if (process.env.NODE_ENV !== \"production\") {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(parentRoute || matches != null, \"No routes matched location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \") : void 0;\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined || matches[matches.length - 1].route.lazy !== undefined, \"Matched leaf route at location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \" + \"does not have an element or Component. This means it will render an <Outlet /> with a \" + \"null value by default resulting in an \\\"empty\\\" page.\") : void 0;\n }\n let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]),\n pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase])\n })), parentMatches, dataRouterState, future);\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return /*#__PURE__*/React.createElement(LocationContext.Provider, {\n value: {\n location: _extends({\n pathname: \"/\",\n search: \"\",\n hash: \"\",\n state: null,\n key: \"default\"\n }, location),\n navigationType: Action.Pop\n }\n }, renderedMatches);\n }\n return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error) ? error.status + \" \" + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = {\n padding: \"0.5rem\",\n backgroundColor: lightgrey\n };\n let codeStyles = {\n padding: \"2px 4px\",\n backgroundColor: lightgrey\n };\n let devInfo = null;\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Error handled by React Router default ErrorBoundary:\", error);\n devInfo = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"p\", null, \"\\uD83D\\uDCBF Hey developer \\uD83D\\uDC4B\"), /*#__PURE__*/React.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /*#__PURE__*/React.createElement(\"code\", {\n style: codeStyles\n }, \"ErrorBoundary\"), \" or\", \" \", /*#__PURE__*/React.createElement(\"code\", {\n style: codeStyles\n }, \"errorElement\"), \" prop on your route.\"));\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"h2\", null, \"Unexpected Application Error!\"), /*#__PURE__*/React.createElement(\"h3\", {\n style: {\n fontStyle: \"italic\"\n }\n }, message), stack ? /*#__PURE__*/React.createElement(\"pre\", {\n style: preStyles\n }, stack) : null, devInfo);\n}\nconst defaultErrorElement = /*#__PURE__*/React.createElement(DefaultErrorComponent, null);\nclass RenderErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error\n };\n }\n static getDerivedStateFromError(error) {\n return {\n error: error\n };\n }\n static getDerivedStateFromProps(props, state) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(\"React Router caught the following error during render\", error, errorInfo);\n }\n render() {\n return this.state.error !== undefined ? /*#__PURE__*/React.createElement(RouteContext.Provider, {\n value: this.props.routeContext\n }, /*#__PURE__*/React.createElement(RouteErrorContext.Provider, {\n value: this.state.error,\n children: this.props.component\n })) : this.props.children;\n }\n}\nfunction RenderedRoute(_ref) {\n let {\n routeContext,\n match,\n children\n } = _ref;\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n return /*#__PURE__*/React.createElement(RouteContext.Provider, {\n value: routeContext\n }, children);\n}\nfunction _renderMatches(matches, parentMatches, dataRouterState, future) {\n var _dataRouterState;\n if (parentMatches === void 0) {\n parentMatches = [];\n }\n if (dataRouterState === void 0) {\n dataRouterState = null;\n }\n if (future === void 0) {\n future = null;\n }\n if (matches == null) {\n var _future;\n if (!dataRouterState) {\n return null;\n }\n if (dataRouterState.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches;\n } else if ((_future = future) != null && _future.v7_partialHydration && parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n // Don't bail if we're initializing with partial hydration and we have\n // router matches. That means we're actively running `patchRoutesOnNavigation`\n // so we should render down the partial matches to the appropriate\n // `HydrateFallback`. We only do this if `parentMatches` is empty so it\n // only impacts the root matches for `RouterProvider` and no descendant\n // `<Routes>`\n matches = dataRouterState.matches;\n } else {\n return null;\n }\n }\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = (_dataRouterState = dataRouterState) == null ? void 0 : _dataRouterState.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]) !== undefined);\n !(errorIndex >= 0) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"Could not find a matching route for errors on route IDs: \" + Object.keys(errors).join(\",\")) : UNSAFE_invariant(false) : void 0;\n renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n if (match.route.id) {\n let {\n loaderData,\n errors\n } = dataRouterState;\n let needsToRunLoader = match.route.loader && loaderData[match.route.id] === undefined && (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error;\n let shouldRenderHydrateFallback = false;\n let errorElement = null;\n let hydrateFallbackElement = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\"route-fallback\", false, \"No `HydrateFallback` element provided to render during initial hydration\");\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `<Route Component={...}>` in `<Routes>` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = /*#__PURE__*/React.createElement(match.route.Component, null);\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return /*#__PURE__*/React.createElement(RenderedRoute, {\n match: match,\n routeContext: {\n outlet,\n matches,\n isDataRoute: dataRouterState != null\n },\n children: children\n });\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/React.createElement(RenderErrorBoundary, {\n location: dataRouterState.location,\n revalidation: dataRouterState.revalidation,\n component: errorElement,\n error: error,\n children: getChildren(),\n routeContext: {\n outlet: null,\n matches,\n isDataRoute: true\n }\n }) : getChildren();\n }, null);\n}\nvar DataRouterHook = /*#__PURE__*/function (DataRouterHook) {\n DataRouterHook[\"UseBlocker\"] = \"useBlocker\";\n DataRouterHook[\"UseRevalidator\"] = \"useRevalidator\";\n DataRouterHook[\"UseNavigateStable\"] = \"useNavigate\";\n return DataRouterHook;\n}(DataRouterHook || {});\nvar DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) {\n DataRouterStateHook[\"UseBlocker\"] = \"useBlocker\";\n DataRouterStateHook[\"UseLoaderData\"] = \"useLoaderData\";\n DataRouterStateHook[\"UseActionData\"] = \"useActionData\";\n DataRouterStateHook[\"UseRouteError\"] = \"useRouteError\";\n DataRouterStateHook[\"UseNavigation\"] = \"useNavigation\";\n DataRouterStateHook[\"UseRouteLoaderData\"] = \"useRouteLoaderData\";\n DataRouterStateHook[\"UseMatches\"] = \"useMatches\";\n DataRouterStateHook[\"UseRevalidator\"] = \"useRevalidator\";\n DataRouterStateHook[\"UseNavigateStable\"] = \"useNavigate\";\n DataRouterStateHook[\"UseRouteId\"] = \"useRouteId\";\n return DataRouterStateHook;\n}(DataRouterStateHook || {});\nfunction getDataRouterConsoleError(hookName) {\n return hookName + \" must be used within a data router. See https://reactrouter.com/v6/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n let ctx = React.useContext(DataRouterContext);\n !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return ctx;\n}\nfunction useDataRouterState(hookName) {\n let state = React.useContext(DataRouterStateContext);\n !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return state;\n}\nfunction useRouteContext(hookName) {\n let route = React.useContext(RouteContext);\n !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n !thisRoute.route.id ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, hookName + \" can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nfunction useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nfunction useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nfunction useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(() => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation\n }), [dataRouterContext.router.revalidate, state.revalidation]);\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nfunction useMatches() {\n let {\n matches,\n loaderData\n } = useDataRouterState(DataRouterStateHook.UseMatches);\n return React.useMemo(() => matches.map(m => UNSAFE_convertRouteMatchToUiMatch(m, loaderData)), [matches, loaderData]);\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nfunction useLoaderData() {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n if (state.errors && state.errors[routeId] != null) {\n console.error(\"You cannot `useLoaderData` in an errorElement (routeId: \" + routeId + \")\");\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nfunction useRouteLoaderData(routeId) {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nfunction useActionData() {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nfunction useRouteError() {\n var _state$errors;\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nfunction useAsyncValue() {\n let value = React.useContext(AwaitContext);\n return value == null ? void 0 : value._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nfunction useAsyncError() {\n let value = React.useContext(AwaitContext);\n return value == null ? void 0 : value._error;\n}\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nfunction useBlocker(shouldBlock) {\n let {\n router,\n basename\n } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(arg => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let {\n currentLocation,\n nextLocation,\n historyAction\n } = arg;\n return shouldBlock({\n currentLocation: _extends({}, currentLocation, {\n pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n }),\n nextLocation: _extends({}, nextLocation, {\n pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n }),\n historyAction\n });\n }, [basename, shouldBlock]);\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable() {\n let {\n router\n } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n let navigate = React.useCallback(function (to, options) {\n if (options === void 0) {\n options = {};\n }\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, _extends({\n fromRouteId: id\n }, options));\n }\n }, [router, id]);\n return navigate;\n}\nconst alreadyWarned$1 = {};\nfunction warningOnce(key, cond, message) {\n if (!cond && !alreadyWarned$1[key]) {\n alreadyWarned$1[key] = true;\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, message) : void 0;\n }\n}\n\nconst alreadyWarned = {};\nfunction warnOnce(key, message) {\n if (process.env.NODE_ENV !== \"production\" && !alreadyWarned[message]) {\n alreadyWarned[message] = true;\n console.warn(message);\n }\n}\nconst logDeprecation = (flag, msg, link) => warnOnce(flag, \"\\u26A0\\uFE0F React Router Future Flag Warning: \" + msg + \". \" + (\"You can use the `\" + flag + \"` future flag to opt-in early. \") + (\"For more information, see \" + link + \".\"));\nfunction logV6DeprecationWarnings(renderFuture, routerFuture) {\n if ((renderFuture == null ? void 0 : renderFuture.v7_startTransition) === undefined) {\n logDeprecation(\"v7_startTransition\", \"React Router will begin wrapping state updates in `React.startTransition` in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_starttransition\");\n }\n if ((renderFuture == null ? void 0 : renderFuture.v7_relativeSplatPath) === undefined && (!routerFuture || routerFuture.v7_relativeSplatPath === undefined)) {\n logDeprecation(\"v7_relativeSplatPath\", \"Relative route resolution within Splat routes is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath\");\n }\n if (routerFuture) {\n if (routerFuture.v7_fetcherPersist === undefined) {\n logDeprecation(\"v7_fetcherPersist\", \"The persistence behavior of fetchers is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist\");\n }\n if (routerFuture.v7_normalizeFormMethod === undefined) {\n logDeprecation(\"v7_normalizeFormMethod\", \"Casing of `formMethod` fields is being normalized to uppercase in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod\");\n }\n if (routerFuture.v7_partialHydration === undefined) {\n logDeprecation(\"v7_partialHydration\", \"`RouterProvider` hydration behavior is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_partialhydration\");\n }\n if (routerFuture.v7_skipActionErrorRevalidation === undefined) {\n logDeprecation(\"v7_skipActionErrorRevalidation\", \"The revalidation behavior after 4xx/5xx `action` responses is changing in v7\", \"https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation\");\n }\n }\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n let {\n fallbackElement,\n router,\n future\n } = _ref;\n let [state, setStateImpl] = React.useState(router.state);\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n }, [setStateImpl, v7_startTransition]);\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n React.useEffect(() => {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n let navigator = React.useMemo(() => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: n => router.navigate(n),\n push: (to, state, opts) => router.navigate(to, {\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n }),\n replace: (to, state, opts) => router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n })\n };\n }, [router]);\n let basename = router.basename || \"/\";\n let dataRouterContext = React.useMemo(() => ({\n router,\n navigator,\n static: false,\n basename\n }), [router, navigator, basename]);\n React.useEffect(() => logV6DeprecationWarnings(future, router.future), [router, future]);\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DataRouterContext.Provider, {\n value: dataRouterContext\n }, /*#__PURE__*/React.createElement(DataRouterStateContext.Provider, {\n value: state\n }, /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: navigator,\n future: {\n v7_relativeSplatPath: router.future.v7_relativeSplatPath\n }\n }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(DataRoutes, {\n routes: router.routes,\n future: router.future,\n state: state\n }) : fallbackElement))), null);\n}\nfunction DataRoutes(_ref2) {\n let {\n routes,\n future,\n state\n } = _ref2;\n return useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/v6/router-components/memory-router\n */\nfunction MemoryRouter(_ref3) {\n let {\n basename,\n children,\n initialEntries,\n initialIndex,\n future\n } = _ref3;\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createMemoryHistory({\n initialEntries,\n initialIndex,\n v5Compat: true\n });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location\n });\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n }, [setStateImpl, v7_startTransition]);\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n React.useEffect(() => logV6DeprecationWarnings(future), [future]);\n return /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n future: future\n });\n}\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/v6/components/navigate\n */\nfunction Navigate(_ref4) {\n let {\n to,\n replace,\n state,\n relative\n } = _ref4;\n !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of\n // the router loaded. We can help them understand how to avoid that.\n \"<Navigate> may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n let {\n future,\n static: isStatic\n } = React.useContext(NavigationContext);\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(!isStatic, \"<Navigate> must not be used on the initial render in a <StaticRouter>. \" + \"This is a no-op, but you should modify your code so the <Navigate> is \" + \"only ever rendered in response to some user interaction or state change.\") : void 0;\n let {\n matches\n } = React.useContext(RouteContext);\n let {\n pathname: locationPathname\n } = useLocation();\n let navigate = useNavigate();\n\n // Resolve the path outside of the effect so that when effects run twice in\n // StrictMode they navigate to the same place\n let path = resolveTo(to, UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath), locationPathname, relative === \"path\");\n let jsonPath = JSON.stringify(path);\n React.useEffect(() => navigate(JSON.parse(jsonPath), {\n replace,\n state,\n relative\n }), [navigate, jsonPath, relative, replace, state]);\n return null;\n}\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/v6/components/outlet\n */\nfunction Outlet(props) {\n return useOutlet(props.context);\n}\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/v6/components/route\n */\nfunction Route(_props) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"A <Route> is only ever to be used as the child of <Routes> element, \" + \"never rendered directly. Please wrap your <Route> in a <Routes>.\") : UNSAFE_invariant(false) ;\n}\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/v6/router-components/router\n */\nfunction Router(_ref5) {\n let {\n basename: basenameProp = \"/\",\n children = null,\n location: locationProp,\n navigationType = Action.Pop,\n navigator,\n static: staticProp = false,\n future\n } = _ref5;\n !!useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"You cannot render a <Router> inside another <Router>.\" + \" You should never have more than one in your app.\") : UNSAFE_invariant(false) : void 0;\n\n // Preserve trailing slashes on basename, so we can let the user control\n // the enforcement of trailing slashes throughout the app\n let basename = basenameProp.replace(/^\\/*/, \"/\");\n let navigationContext = React.useMemo(() => ({\n basename,\n navigator,\n static: staticProp,\n future: _extends({\n v7_relativeSplatPath: false\n }, future)\n }), [basename, future, navigator, staticProp]);\n if (typeof locationProp === \"string\") {\n locationProp = parsePath(locationProp);\n }\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n state = null,\n key = \"default\"\n } = locationProp;\n let locationContext = React.useMemo(() => {\n let trailingPathname = stripBasename(pathname, basename);\n if (trailingPathname == null) {\n return null;\n }\n return {\n location: {\n pathname: trailingPathname,\n search,\n hash,\n state,\n key\n },\n navigationType\n };\n }, [basename, pathname, search, hash, state, key, navigationType]);\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(locationContext != null, \"<Router basename=\\\"\" + basename + \"\\\"> is not able to match the URL \" + (\"\\\"\" + pathname + search + hash + \"\\\" because it does not start with the \") + \"basename, so the <Router> won't render anything.\") : void 0;\n if (locationContext == null) {\n return null;\n }\n return /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n value: navigationContext\n }, /*#__PURE__*/React.createElement(LocationContext.Provider, {\n children: children,\n value: locationContext\n }));\n}\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/v6/components/routes\n */\nfunction Routes(_ref6) {\n let {\n children,\n location\n } = _ref6;\n return useRoutes(createRoutesFromChildren(children), location);\n}\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nfunction Await(_ref7) {\n let {\n children,\n errorElement,\n resolve\n } = _ref7;\n return /*#__PURE__*/React.createElement(AwaitErrorBoundary, {\n resolve: resolve,\n errorElement: errorElement\n }, /*#__PURE__*/React.createElement(ResolveAwait, null, children));\n}\nvar AwaitRenderStatus = /*#__PURE__*/function (AwaitRenderStatus) {\n AwaitRenderStatus[AwaitRenderStatus[\"pending\"] = 0] = \"pending\";\n AwaitRenderStatus[AwaitRenderStatus[\"success\"] = 1] = \"success\";\n AwaitRenderStatus[AwaitRenderStatus[\"error\"] = 2] = \"error\";\n return AwaitRenderStatus;\n}(AwaitRenderStatus || {});\nconst neverSettledPromise = new Promise(() => {});\nclass AwaitErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n error: null\n };\n }\n static getDerivedStateFromError(error) {\n return {\n error\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(\"<Await> caught the following error during render\", error, errorInfo);\n }\n render() {\n let {\n children,\n errorElement,\n resolve\n } = this.props;\n let promise = null;\n let status = AwaitRenderStatus.pending;\n if (!(resolve instanceof Promise)) {\n // Didn't get a promise - provide as a resolved promise\n status = AwaitRenderStatus.success;\n promise = Promise.resolve();\n Object.defineProperty(promise, \"_tracked\", {\n get: () => true\n });\n Object.defineProperty(promise, \"_data\", {\n get: () => resolve\n });\n } else if (this.state.error) {\n // Caught a render error, provide it as a rejected promise\n status = AwaitRenderStatus.error;\n let renderError = this.state.error;\n promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n Object.defineProperty(promise, \"_tracked\", {\n get: () => true\n });\n Object.defineProperty(promise, \"_error\", {\n get: () => renderError\n });\n } else if (resolve._tracked) {\n // Already tracked promise - check contents\n promise = resolve;\n status = \"_error\" in promise ? AwaitRenderStatus.error : \"_data\" in promise ? AwaitRenderStatus.success : AwaitRenderStatus.pending;\n } else {\n // Raw (untracked) promise - track it\n status = AwaitRenderStatus.pending;\n Object.defineProperty(resolve, \"_tracked\", {\n get: () => true\n });\n promise = resolve.then(data => Object.defineProperty(resolve, \"_data\", {\n get: () => data\n }), error => Object.defineProperty(resolve, \"_error\", {\n get: () => error\n }));\n }\n if (status === AwaitRenderStatus.error && promise._error instanceof AbortedDeferredError) {\n // Freeze the UI by throwing a never resolved promise\n throw neverSettledPromise;\n }\n if (status === AwaitRenderStatus.error && !errorElement) {\n // No errorElement, throw to the nearest route-level error boundary\n throw promise._error;\n }\n if (status === AwaitRenderStatus.error) {\n // Render via our errorElement\n return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n value: promise,\n children: errorElement\n });\n }\n if (status === AwaitRenderStatus.success) {\n // Render children with resolved value\n return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n value: promise,\n children: children\n });\n }\n\n // Throw to the suspense boundary\n throw promise;\n }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait(_ref8) {\n let {\n children\n } = _ref8;\n let data = useAsyncValue();\n let toRender = typeof children === \"function\" ? children(data) : children;\n return /*#__PURE__*/React.createElement(React.Fragment, null, toRender);\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/v6/utils/create-routes-from-children\n */\nfunction createRoutesFromChildren(children, parentPath) {\n if (parentPath === void 0) {\n parentPath = [];\n }\n let routes = [];\n React.Children.forEach(children, (element, index) => {\n if (! /*#__PURE__*/React.isValidElement(element)) {\n // Ignore non-elements. This allows people to more easily inline\n // conditionals in their route config.\n return;\n }\n let treePath = [...parentPath, index];\n if (element.type === React.Fragment) {\n // Transparently support React.Fragment and its children.\n routes.push.apply(routes, createRoutesFromChildren(element.props.children, treePath));\n return;\n }\n !(element.type === Route) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"[\" + (typeof element.type === \"string\" ? element.type : element.type.name) + \"] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>\") : UNSAFE_invariant(false) : void 0;\n !(!element.props.index || !element.props.children) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"An index route cannot have child routes.\") : UNSAFE_invariant(false) : void 0;\n let route = {\n id: element.props.id || treePath.join(\"-\"),\n caseSensitive: element.props.caseSensitive,\n element: element.props.element,\n Component: element.props.Component,\n index: element.props.index,\n path: element.props.path,\n loader: element.props.loader,\n action: element.props.action,\n errorElement: element.props.errorElement,\n ErrorBoundary: element.props.ErrorBoundary,\n hasErrorBoundary: element.props.ErrorBoundary != null || element.props.errorElement != null,\n shouldRevalidate: element.props.shouldRevalidate,\n handle: element.props.handle,\n lazy: element.props.lazy\n };\n if (element.props.children) {\n route.children = createRoutesFromChildren(element.props.children, treePath);\n }\n routes.push(route);\n });\n return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nfunction renderMatches(matches) {\n return _renderMatches(matches);\n}\n\nfunction mapRouteProperties(route) {\n let updates = {\n // Note: this check also occurs in createRoutesFromChildren so update\n // there if you change this -- please and thank you!\n hasErrorBoundary: route.ErrorBoundary != null || route.errorElement != null\n };\n if (route.Component) {\n if (process.env.NODE_ENV !== \"production\") {\n if (route.element) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `Component` and `element` on your route - \" + \"`Component` will be used.\") : void 0;\n }\n }\n Object.assign(updates, {\n element: /*#__PURE__*/React.createElement(route.Component),\n Component: undefined\n });\n }\n if (route.HydrateFallback) {\n if (process.env.NODE_ENV !== \"production\") {\n if (route.hydrateFallbackElement) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - \" + \"`HydrateFallback` will be used.\") : void 0;\n }\n }\n Object.assign(updates, {\n hydrateFallbackElement: /*#__PURE__*/React.createElement(route.HydrateFallback),\n HydrateFallback: undefined\n });\n }\n if (route.ErrorBoundary) {\n if (process.env.NODE_ENV !== \"production\") {\n if (route.errorElement) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `ErrorBoundary` and `errorElement` on your route - \" + \"`ErrorBoundary` will be used.\") : void 0;\n }\n }\n Object.assign(updates, {\n errorElement: /*#__PURE__*/React.createElement(route.ErrorBoundary),\n ErrorBoundary: undefined\n });\n }\n return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n return createRouter({\n basename: opts == null ? void 0 : opts.basename,\n future: _extends({}, opts == null ? void 0 : opts.future, {\n v7_prependBasename: true\n }),\n history: createMemoryHistory({\n initialEntries: opts == null ? void 0 : opts.initialEntries,\n initialIndex: opts == null ? void 0 : opts.initialIndex\n }),\n hydrationData: opts == null ? void 0 : opts.hydrationData,\n routes,\n mapRouteProperties,\n dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation\n }).initialize();\n}\n\nexport { Await, MemoryRouter, Navigate, Outlet, Route, Router, RouterProvider, Routes, DataRouterContext as UNSAFE_DataRouterContext, DataRouterStateContext as UNSAFE_DataRouterStateContext, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RouteContext as UNSAFE_RouteContext, logV6DeprecationWarnings as UNSAFE_logV6DeprecationWarnings, mapRouteProperties as UNSAFE_mapRouteProperties, useRouteId as UNSAFE_useRouteId, useRoutesImpl as UNSAFE_useRoutesImpl, createMemoryRouter, createRoutesFromChildren, createRoutesFromChildren as createRoutesFromElements, renderMatches, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes };\n//# sourceMappingURL=index.js.map\n","/**\n * React Router DOM v6.30.4\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_logV6DeprecationWarnings, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nexport { UNSAFE_ErrorResponseImpl } from '@remix-run/router';\n\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n return event.button === 0 && (\n // Ignore everything but left clicks\n !target || target === \"_self\") &&\n // Let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // Ignore clicks with modifier keys\n;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n * let searchParams = new URLSearchParams([\n * ['sort', 'name'],\n * ['sort', 'price']\n * ]);\n *\n * you can do:\n *\n * let searchParams = createSearchParams({\n * sort: ['name', 'price']\n * });\n */\nfunction createSearchParams(init) {\n if (init === void 0) {\n init = \"\";\n }\n return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n let value = init[key];\n return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n let searchParams = createSearchParams(locationSearch);\n if (defaultSearchParams) {\n // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n // web extensions. Relevant Bugzilla tickets:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n defaultSearchParams.forEach((_, key) => {\n if (!searchParams.has(key)) {\n defaultSearchParams.getAll(key).forEach(value => {\n searchParams.append(key, value);\n });\n }\n });\n }\n return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n if (_formDataSupportsSubmitter === null) {\n try {\n new FormData(document.createElement(\"form\"),\n // @ts-expect-error if FormData supports the submitter parameter, this will throw\n 0);\n _formDataSupportsSubmitter = false;\n } catch (e) {\n _formDataSupportsSubmitter = true;\n }\n }\n return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n if (encType != null && !supportedFormEncTypes.has(encType)) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `<Form>`/`<fetcher.Form>` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n return null;\n }\n return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n let method;\n let action;\n let encType;\n let formData;\n let body;\n if (isFormElement(target)) {\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n formData = new FormData(target);\n } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n let form = target.form;\n if (form == null) {\n throw new Error(\"Cannot submit a <button> or <input type=\\\"submit\\\"> without a <form>\");\n }\n // <button>/<input type=\"submit\"> may override attributes of <form>\n // When grabbing the action from the element, it will have had the basename\n // prefixed to ensure non-JS scenarios work, so strip it since we'll\n // re-prefix in the router\n let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n action = attr ? stripBasename(attr, basename) : null;\n method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n // Build a FormData object populated from a form and submitter\n formData = new FormData(form, target);\n // If this browser doesn't support the `FormData(el, submitter)` format,\n // then tack on the submitter value at the end. This is a lightweight\n // solution that is not 100% spec compliant. For complete support in older\n // browsers, consider using the `formdata-submitter-polyfill` package\n if (!isFormDataSubmitterSupported()) {\n let {\n name,\n type,\n value\n } = target;\n if (type === \"image\") {\n let prefix = name ? name + \".\" : \"\";\n formData.append(prefix + \"x\", \"0\");\n formData.append(prefix + \"y\", \"0\");\n } else if (name) {\n formData.append(name, value);\n }\n }\n } else if (isHtmlElement(target)) {\n throw new Error(\"Cannot submit element that is not <form>, <button>, or \" + \"<input type=\\\"submit|image\\\">\");\n } else {\n method = defaultMethod;\n action = null;\n encType = defaultEncType;\n body = target;\n }\n // Send body for <Form encType=\"text/plain\" so we encode it into text\n if (formData && encType === \"text/plain\") {\n body = formData;\n formData = undefined;\n }\n return {\n action,\n method: method.toLowerCase(),\n encType,\n formData,\n body\n };\n}\n\nconst _excluded = [\"onClick\", \"relative\", \"reloadDocument\", \"replace\", \"state\", \"target\", \"to\", \"preventScrollReset\", \"viewTransition\"],\n _excluded2 = [\"aria-current\", \"caseSensitive\", \"className\", \"end\", \"style\", \"to\", \"viewTransition\", \"children\"],\n _excluded3 = [\"fetcherKey\", \"navigate\", \"reloadDocument\", \"replace\", \"state\", \"method\", \"action\", \"onSubmit\", \"relative\", \"preventScrollReset\", \"viewTransition\"];\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report. This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"6\";\ntry {\n window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n // no-op\n}\nfunction createBrowserRouter(routes, opts) {\n return createRouter({\n basename: opts == null ? void 0 : opts.basename,\n future: _extends({}, opts == null ? void 0 : opts.future, {\n v7_prependBasename: true\n }),\n history: createBrowserHistory({\n window: opts == null ? void 0 : opts.window\n }),\n hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n routes,\n mapRouteProperties: UNSAFE_mapRouteProperties,\n dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,\n window: opts == null ? void 0 : opts.window\n }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n return createRouter({\n basename: opts == null ? void 0 : opts.basename,\n future: _extends({}, opts == null ? void 0 : opts.future, {\n v7_prependBasename: true\n }),\n history: createHashHistory({\n window: opts == null ? void 0 : opts.window\n }),\n hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n routes,\n mapRouteProperties: UNSAFE_mapRouteProperties,\n dataStrategy: opts == null ? void 0 : opts.dataStrategy,\n patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation,\n window: opts == null ? void 0 : opts.window\n }).initialize();\n}\nfunction parseHydrationData() {\n var _window;\n let state = (_window = window) == null ? void 0 : _window.__staticRouterHydrationData;\n if (state && state.errors) {\n state = _extends({}, state, {\n errors: deserializeErrors(state.errors)\n });\n }\n return state;\n}\nfunction deserializeErrors(errors) {\n if (!errors) return null;\n let entries = Object.entries(errors);\n let serialized = {};\n for (let [key, val] of entries) {\n // Hey you! If you change this, please change the corresponding logic in\n // serializeErrors in react-router-dom/server.tsx :)\n if (val && val.__type === \"RouteErrorResponse\") {\n serialized[key] = new UNSAFE_ErrorResponseImpl(val.status, val.statusText, val.data, val.internal === true);\n } else if (val && val.__type === \"Error\") {\n // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n if (val.__subType) {\n let ErrorConstructor = window[val.__subType];\n if (typeof ErrorConstructor === \"function\") {\n try {\n // @ts-expect-error\n let error = new ErrorConstructor(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n } catch (e) {\n // no-op - fall through and create a normal Error\n }\n }\n }\n if (serialized[key] == null) {\n let error = new Error(val.message);\n // Wipe away the client-side stack trace. Nothing to fill it in with\n // because we don't serialize SSR stack traces for security reasons\n error.stack = \"\";\n serialized[key] = error;\n }\n } else {\n serialized[key] = val;\n }\n }\n return serialized;\n}\nconst ViewTransitionContext = /*#__PURE__*/React.createContext({\n isTransitioning: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n ViewTransitionContext.displayName = \"ViewTransition\";\n}\nconst FetchersContext = /*#__PURE__*/React.createContext(new Map());\nif (process.env.NODE_ENV !== \"production\") {\n FetchersContext.displayName = \"Fetchers\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\nfunction startTransitionSafe(cb) {\n if (startTransitionImpl) {\n startTransitionImpl(cb);\n } else {\n cb();\n }\n}\nfunction flushSyncSafe(cb) {\n if (flushSyncImpl) {\n flushSyncImpl(cb);\n } else {\n cb();\n }\n}\nclass Deferred {\n constructor() {\n this.status = \"pending\";\n this.promise = new Promise((resolve, reject) => {\n this.resolve = value => {\n if (this.status === \"pending\") {\n this.status = \"resolved\";\n resolve(value);\n }\n };\n this.reject = reason => {\n if (this.status === \"pending\") {\n this.status = \"rejected\";\n reject(reason);\n }\n };\n });\n }\n}\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n let {\n fallbackElement,\n router,\n future\n } = _ref;\n let [state, setStateImpl] = React.useState(router.state);\n let [pendingState, setPendingState] = React.useState();\n let [vtContext, setVtContext] = React.useState({\n isTransitioning: false\n });\n let [renderDfd, setRenderDfd] = React.useState();\n let [transition, setTransition] = React.useState();\n let [interruption, setInterruption] = React.useState();\n let fetcherData = React.useRef(new Map());\n let {\n v7_startTransition\n } = future || {};\n let optInStartTransition = React.useCallback(cb => {\n if (v7_startTransition) {\n startTransitionSafe(cb);\n } else {\n cb();\n }\n }, [v7_startTransition]);\n let setState = React.useCallback((newState, _ref2) => {\n let {\n deletedFetchers,\n flushSync: flushSync,\n viewTransitionOpts: viewTransitionOpts\n } = _ref2;\n newState.fetchers.forEach((fetcher, key) => {\n if (fetcher.data !== undefined) {\n fetcherData.current.set(key, fetcher.data);\n }\n });\n deletedFetchers.forEach(key => fetcherData.current.delete(key));\n let isViewTransitionUnavailable = router.window == null || router.window.document == null || typeof router.window.document.startViewTransition !== \"function\";\n // If this isn't a view transition or it's not available in this browser,\n // just update and be done with it\n if (!viewTransitionOpts || isViewTransitionUnavailable) {\n if (flushSync) {\n flushSyncSafe(() => setStateImpl(newState));\n } else {\n optInStartTransition(() => setStateImpl(newState));\n }\n return;\n }\n // flushSync + startViewTransition\n if (flushSync) {\n // Flush through the context to mark DOM elements as transition=ing\n flushSyncSafe(() => {\n // Cancel any pending transitions\n if (transition) {\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n }\n setVtContext({\n isTransitioning: true,\n flushSync: true,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n });\n // Update the DOM\n let t = router.window.document.startViewTransition(() => {\n flushSyncSafe(() => setStateImpl(newState));\n });\n // Clean up after the animation completes\n t.finished.finally(() => {\n flushSyncSafe(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({\n isTransitioning: false\n });\n });\n });\n flushSyncSafe(() => setTransition(t));\n return;\n }\n // startTransition + startViewTransition\n if (transition) {\n // Interrupting an in-progress transition, cancel and let everything flush\n // out, and then kick off a new transition from the interruption state\n renderDfd && renderDfd.resolve();\n transition.skipTransition();\n setInterruption({\n state: newState,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n } else {\n // Completed navigation update with opted-in view transitions, let 'er rip\n setPendingState(newState);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: viewTransitionOpts.currentLocation,\n nextLocation: viewTransitionOpts.nextLocation\n });\n }\n }, [router.window, transition, renderDfd, fetcherData, optInStartTransition]);\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n // When we start a view transition, create a Deferred we can use for the\n // eventual \"completed\" render\n React.useEffect(() => {\n if (vtContext.isTransitioning && !vtContext.flushSync) {\n setRenderDfd(new Deferred());\n }\n }, [vtContext]);\n // Once the deferred is created, kick off startViewTransition() to update the\n // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n // happened)\n React.useEffect(() => {\n if (renderDfd && pendingState && router.window) {\n let newState = pendingState;\n let renderPromise = renderDfd.promise;\n let transition = router.window.document.startViewTransition(async () => {\n optInStartTransition(() => setStateImpl(newState));\n await renderPromise;\n });\n transition.finished.finally(() => {\n setRenderDfd(undefined);\n setTransition(undefined);\n setPendingState(undefined);\n setVtContext({\n isTransitioning: false\n });\n });\n setTransition(transition);\n }\n }, [optInStartTransition, pendingState, renderDfd, router.window]);\n // When the new location finally renders and is committed to the DOM, this\n // effect will run to resolve the transition\n React.useEffect(() => {\n if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n renderDfd.resolve();\n }\n }, [renderDfd, transition, state.location, pendingState]);\n // If we get interrupted with a new navigation during a transition, we skip\n // the active transition, let it cleanup, then kick it off again here\n React.useEffect(() => {\n if (!vtContext.isTransitioning && interruption) {\n setPendingState(interruption.state);\n setVtContext({\n isTransitioning: true,\n flushSync: false,\n currentLocation: interruption.currentLocation,\n nextLocation: interruption.nextLocation\n });\n setInterruption(undefined);\n }\n }, [vtContext.isTransitioning, interruption]);\n React.useEffect(() => {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n let navigator = React.useMemo(() => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: n => router.navigate(n),\n push: (to, state, opts) => router.navigate(to, {\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n }),\n replace: (to, state, opts) => router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n })\n };\n }, [router]);\n let basename = router.basename || \"/\";\n let dataRouterContext = React.useMemo(() => ({\n router,\n navigator,\n static: false,\n basename\n }), [router, navigator, basename]);\n let routerFuture = React.useMemo(() => ({\n v7_relativeSplatPath: router.future.v7_relativeSplatPath\n }), [router.future.v7_relativeSplatPath]);\n React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future, router.future), [future, router.future]);\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a <script> here\n // containing the hydrated server-side staticContext (from StaticRouterProvider).\n // useId relies on the component tree structure to generate deterministic id's\n // so we need to ensure it remains the same on the client even though\n // we don't need the <script> tag\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UNSAFE_DataRouterContext.Provider, {\n value: dataRouterContext\n }, /*#__PURE__*/React.createElement(UNSAFE_DataRouterStateContext.Provider, {\n value: state\n }, /*#__PURE__*/React.createElement(FetchersContext.Provider, {\n value: fetcherData.current\n }, /*#__PURE__*/React.createElement(ViewTransitionContext.Provider, {\n value: vtContext\n }, /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n location: state.location,\n navigationType: state.historyAction,\n navigator: navigator,\n future: routerFuture\n }, state.initialized || router.future.v7_partialHydration ? (/*#__PURE__*/React.createElement(MemoizedDataRoutes, {\n routes: router.routes,\n future: router.future,\n state: state\n })) : fallbackElement))))), null);\n}\n// Memoize to avoid re-renders when updating `ViewTransitionContext`\nconst MemoizedDataRoutes = /*#__PURE__*/React.memo(DataRoutes);\nfunction DataRoutes(_ref3) {\n let {\n routes,\n future,\n state\n } = _ref3;\n return UNSAFE_useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nfunction BrowserRouter(_ref4) {\n let {\n basename,\n children,\n future,\n window\n } = _ref4;\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createBrowserHistory({\n window,\n v5Compat: true\n });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location\n });\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n }, [setStateImpl, v7_startTransition]);\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n return /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n future: future\n });\n}\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nfunction HashRouter(_ref5) {\n let {\n basename,\n children,\n future,\n window\n } = _ref5;\n let historyRef = React.useRef();\n if (historyRef.current == null) {\n historyRef.current = createHashHistory({\n window,\n v5Compat: true\n });\n }\n let history = historyRef.current;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location\n });\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n }, [setStateImpl, v7_startTransition]);\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n return /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n future: future\n });\n}\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter(_ref6) {\n let {\n basename,\n children,\n future,\n history\n } = _ref6;\n let [state, setStateImpl] = React.useState({\n action: history.action,\n location: history.location\n });\n let {\n v7_startTransition\n } = future || {};\n let setState = React.useCallback(newState => {\n v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n }, [setStateImpl, v7_startTransition]);\n React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n React.useEffect(() => UNSAFE_logV6DeprecationWarnings(future), [future]);\n return /*#__PURE__*/React.createElement(Router, {\n basename: basename,\n children: children,\n location: state.location,\n navigationType: state.action,\n navigator: history,\n future: future\n });\n}\nif (process.env.NODE_ENV !== \"production\") {\n HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\nconst isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nconst Link = /*#__PURE__*/React.forwardRef(function LinkWithRef(_ref7, ref) {\n let {\n onClick,\n relative,\n reloadDocument,\n replace,\n state,\n target,\n to,\n preventScrollReset,\n viewTransition\n } = _ref7,\n rest = _objectWithoutPropertiesLoose(_ref7, _excluded);\n let {\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n // Rendered into <a href> for absolute URLs\n let absoluteHref;\n let isExternal = false;\n if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n // Render the absolute href server- and client-side\n absoluteHref = to;\n // Only check for external origins client-side\n if (isBrowser) {\n try {\n let currentUrl = new URL(window.location.href);\n let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n let path = stripBasename(targetUrl.pathname, basename);\n if (targetUrl.origin === currentUrl.origin && path != null) {\n // Strip the protocol/origin/basename for same-origin absolute URLs\n to = path + targetUrl.search + targetUrl.hash;\n } else {\n isExternal = true;\n }\n } catch (e) {\n // We can't do external URL detection without a valid URL\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"<Link to=\\\"\" + to + \"\\\"> contains an invalid URL which will probably break \" + \"when clicked - please update to a valid URL path.\") : void 0;\n }\n }\n }\n // Rendered into <a href> for relative URLs\n let href = useHref(to, {\n relative\n });\n let internalOnClick = useLinkClickHandler(to, {\n replace,\n state,\n target,\n preventScrollReset,\n relative,\n viewTransition\n });\n function handleClick(event) {\n if (onClick) onClick(event);\n if (!event.defaultPrevented) {\n internalOnClick(event);\n }\n }\n return (\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/anchor-has-content\n React.createElement(\"a\", _extends({}, rest, {\n href: absoluteHref || href,\n onClick: isExternal || reloadDocument ? onClick : handleClick,\n ref: ref,\n target: target\n }))\n );\n});\nif (process.env.NODE_ENV !== \"production\") {\n Link.displayName = \"Link\";\n}\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = /*#__PURE__*/React.forwardRef(function NavLinkWithRef(_ref8, ref) {\n let {\n \"aria-current\": ariaCurrentProp = \"page\",\n caseSensitive = false,\n className: classNameProp = \"\",\n end = false,\n style: styleProp,\n to,\n viewTransition,\n children\n } = _ref8,\n rest = _objectWithoutPropertiesLoose(_ref8, _excluded2);\n let path = useResolvedPath(to, {\n relative: rest.relative\n });\n let location = useLocation();\n let routerState = React.useContext(UNSAFE_DataRouterStateContext);\n let {\n navigator,\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n let isTransitioning = routerState != null &&\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useViewTransitionState(path) && viewTransition === true;\n let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;\n let locationPathname = location.pathname;\n let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n if (!caseSensitive) {\n locationPathname = locationPathname.toLowerCase();\n nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n toPathname = toPathname.toLowerCase();\n }\n if (nextLocationPathname && basename) {\n nextLocationPathname = stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n }\n // If the `to` has a trailing slash, look at that exact spot. Otherwise,\n // we're looking for a slash _after_ what's in `to`. For example:\n //\n // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n // both want to look for a / at index 6 to match URL `/users/matt`\n const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n let renderProps = {\n isActive,\n isPending,\n isTransitioning\n };\n let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n let className;\n if (typeof classNameProp === \"function\") {\n className = classNameProp(renderProps);\n } else {\n // If the className prop is not a function, we use a default `active`\n // class for <NavLink />s that are active. In v5 `active` was the default\n // value for `activeClassName`, but we are removing that API and can still\n // use the old default behavior for a cleaner upgrade path and keep the\n // simple styling rules working as they currently do.\n className = [classNameProp, isActive ? \"active\" : null, isPending ? \"pending\" : null, isTransitioning ? \"transitioning\" : null].filter(Boolean).join(\" \");\n }\n let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n return /*#__PURE__*/React.createElement(Link, _extends({}, rest, {\n \"aria-current\": ariaCurrent,\n className: className,\n ref: ref,\n style: style,\n to: to,\n viewTransition: viewTransition\n }), typeof children === \"function\" ? children(renderProps) : children);\n});\nif (process.env.NODE_ENV !== \"production\") {\n NavLink.displayName = \"NavLink\";\n}\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nconst Form = /*#__PURE__*/React.forwardRef((_ref9, forwardedRef) => {\n let {\n fetcherKey,\n navigate,\n reloadDocument,\n replace,\n state,\n method = defaultMethod,\n action,\n onSubmit,\n relative,\n preventScrollReset,\n viewTransition\n } = _ref9,\n props = _objectWithoutPropertiesLoose(_ref9, _excluded3);\n let submit = useSubmit();\n let formAction = useFormAction(action, {\n relative\n });\n let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n let submitHandler = event => {\n onSubmit && onSubmit(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n let submitter = event.nativeEvent.submitter;\n let submitMethod = (submitter == null ? void 0 : submitter.getAttribute(\"formmethod\")) || method;\n submit(submitter || event.currentTarget, {\n fetcherKey,\n method: submitMethod,\n navigate,\n replace,\n state,\n relative,\n preventScrollReset,\n viewTransition\n });\n };\n return /*#__PURE__*/React.createElement(\"form\", _extends({\n ref: forwardedRef,\n method: formMethod,\n action: formAction,\n onSubmit: reloadDocument ? onSubmit : submitHandler\n }, props));\n});\nif (process.env.NODE_ENV !== \"production\") {\n Form.displayName = \"Form\";\n}\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nfunction ScrollRestoration(_ref0) {\n let {\n getKey,\n storageKey\n } = _ref0;\n useScrollRestoration({\n getKey,\n storageKey\n });\n return null;\n}\nif (process.env.NODE_ENV !== \"production\") {\n ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\nvar DataRouterHook;\n(function (DataRouterHook) {\n DataRouterHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n DataRouterHook[\"UseSubmit\"] = \"useSubmit\";\n DataRouterHook[\"UseSubmitFetcher\"] = \"useSubmitFetcher\";\n DataRouterHook[\"UseFetcher\"] = \"useFetcher\";\n DataRouterHook[\"useViewTransitionState\"] = \"useViewTransitionState\";\n})(DataRouterHook || (DataRouterHook = {}));\nvar DataRouterStateHook;\n(function (DataRouterStateHook) {\n DataRouterStateHook[\"UseFetcher\"] = \"useFetcher\";\n DataRouterStateHook[\"UseFetchers\"] = \"useFetchers\";\n DataRouterStateHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n})(DataRouterStateHook || (DataRouterStateHook = {}));\n// Internal hooks\nfunction getDataRouterConsoleError(hookName) {\n return hookName + \" must be used within a data router. See https://reactrouter.com/v6/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n let ctx = React.useContext(UNSAFE_DataRouterContext);\n !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return ctx;\n}\nfunction useDataRouterState(hookName) {\n let state = React.useContext(UNSAFE_DataRouterStateContext);\n !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n return state;\n}\n// External hooks\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nfunction useLinkClickHandler(to, _temp) {\n let {\n target,\n replace: replaceProp,\n state,\n preventScrollReset,\n relative,\n viewTransition\n } = _temp === void 0 ? {} : _temp;\n let navigate = useNavigate();\n let location = useLocation();\n let path = useResolvedPath(to, {\n relative\n });\n return React.useCallback(event => {\n if (shouldProcessLinkClick(event, target)) {\n event.preventDefault();\n // If the URL hasn't changed, a regular <a> will do a replace instead of\n // a push, so do the same here unless the replace prop is explicitly set\n let replace = replaceProp !== undefined ? replaceProp : createPath(location) === createPath(path);\n navigate(to, {\n replace,\n state,\n preventScrollReset,\n relative,\n viewTransition\n });\n }\n }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, viewTransition]);\n}\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nfunction useSearchParams(defaultInit) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(typeof URLSearchParams !== \"undefined\", \"You cannot use the `useSearchParams` hook in a browser that does not \" + \"support the URLSearchParams API. If you need to support Internet \" + \"Explorer 11, we recommend you load a polyfill such as \" + \"https://github.com/ungap/url-search-params.\") : void 0;\n let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n let hasSetSearchParamsRef = React.useRef(false);\n let location = useLocation();\n let searchParams = React.useMemo(() =>\n // Only merge in the defaults if we haven't yet called setSearchParams.\n // Once we call that we want those to take precedence, otherwise you can't\n // remove a param with setSearchParams({}) if it has an initial value\n getSearchParamsForLocation(location.search, hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current), [location.search]);\n let navigate = useNavigate();\n let setSearchParams = React.useCallback((nextInit, navigateOptions) => {\n const newSearchParams = createSearchParams(typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit);\n hasSetSearchParamsRef.current = true;\n navigate(\"?\" + newSearchParams, navigateOptions);\n }, [navigate, searchParams]);\n return [searchParams, setSearchParams];\n}\nfunction validateClientSideSubmission() {\n if (typeof document === \"undefined\") {\n throw new Error(\"You are calling submit during the server render. \" + \"Try calling submit within a `useEffect` or callback instead.\");\n }\n}\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => \"__\" + String(++fetcherId) + \"__\";\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nfunction useSubmit() {\n let {\n router\n } = useDataRouterContext(DataRouterHook.UseSubmit);\n let {\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n let currentRouteId = UNSAFE_useRouteId();\n return React.useCallback(function (target, options) {\n if (options === void 0) {\n options = {};\n }\n validateClientSideSubmission();\n let {\n action,\n method,\n encType,\n formData,\n body\n } = getFormSubmissionInfo(target, basename);\n if (options.navigate === false) {\n let key = options.fetcherKey || getUniqueFetcherId();\n router.fetch(key, currentRouteId, options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n flushSync: options.flushSync\n });\n } else {\n router.navigate(options.action || action, {\n preventScrollReset: options.preventScrollReset,\n formData,\n body,\n formMethod: options.method || method,\n formEncType: options.encType || encType,\n replace: options.replace,\n state: options.state,\n fromRouteId: currentRouteId,\n flushSync: options.flushSync,\n viewTransition: options.viewTransition\n });\n }\n }, [router, basename, currentRouteId]);\n}\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nfunction useFormAction(action, _temp2) {\n let {\n relative\n } = _temp2 === void 0 ? {} : _temp2;\n let {\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n let routeContext = React.useContext(UNSAFE_RouteContext);\n !routeContext ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFormAction must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n let [match] = routeContext.matches.slice(-1);\n // Shallow clone path so we can modify it below, otherwise we modify the\n // object referenced by useMemo inside useResolvedPath\n let path = _extends({}, useResolvedPath(action ? action : \".\", {\n relative\n }));\n // If no action was specified, browsers will persist current search params\n // when determining the path, so match that behavior\n // https://github.com/remix-run/remix/issues/927\n let location = useLocation();\n if (action == null) {\n // Safe to write to this directly here since if action was undefined, we\n // would have called useResolvedPath(\".\") which will never include a search\n path.search = location.search;\n // When grabbing search params from the URL, remove any included ?index param\n // since it might not apply to our contextual route. We add it back based\n // on match.route.index below\n let params = new URLSearchParams(path.search);\n let indexValues = params.getAll(\"index\");\n let hasNakedIndexParam = indexValues.some(v => v === \"\");\n if (hasNakedIndexParam) {\n params.delete(\"index\");\n indexValues.filter(v => v).forEach(v => params.append(\"index\", v));\n let qs = params.toString();\n path.search = qs ? \"?\" + qs : \"\";\n }\n }\n if ((!action || action === \".\") && match.route.index) {\n path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n }\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the form action. If this is a root navigation, then just use\n // the raw basename which allows the basename to have full control over the\n // presence of a trailing slash on root actions\n if (basename !== \"/\") {\n path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n return createPath(path);\n}\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nfunction useFetcher(_temp3) {\n var _route$matches;\n let {\n key\n } = _temp3 === void 0 ? {} : _temp3;\n let {\n router\n } = useDataRouterContext(DataRouterHook.UseFetcher);\n let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n let fetcherData = React.useContext(FetchersContext);\n let route = React.useContext(UNSAFE_RouteContext);\n let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;\n !fetcherData ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a FetchersContext\") : UNSAFE_invariant(false) : void 0;\n !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n !(routeId != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n // Fetcher key handling\n // OK to call conditionally to feature detect `useId`\n // eslint-disable-next-line react-hooks/rules-of-hooks\n let defaultKey = useIdImpl ? useIdImpl() : \"\";\n let [fetcherKey, setFetcherKey] = React.useState(key || defaultKey);\n if (key && key !== fetcherKey) {\n setFetcherKey(key);\n } else if (!fetcherKey) {\n // We will only fall through here when `useId` is not available\n setFetcherKey(getUniqueFetcherId());\n }\n // Registration/cleanup\n React.useEffect(() => {\n router.getFetcher(fetcherKey);\n return () => {\n // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n // will not delete immediately but instead queue up a delete after the\n // fetcher returns to an `idle` state\n router.deleteFetcher(fetcherKey);\n };\n }, [router, fetcherKey]);\n // Fetcher additions\n let load = React.useCallback((href, opts) => {\n !routeId ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"No routeId available for fetcher.load()\") : UNSAFE_invariant(false) : void 0;\n router.fetch(fetcherKey, routeId, href, opts);\n }, [fetcherKey, routeId, router]);\n let submitImpl = useSubmit();\n let submit = React.useCallback((target, opts) => {\n submitImpl(target, _extends({}, opts, {\n navigate: false,\n fetcherKey\n }));\n }, [fetcherKey, submitImpl]);\n let FetcherForm = React.useMemo(() => {\n let FetcherForm = /*#__PURE__*/React.forwardRef((props, ref) => {\n return /*#__PURE__*/React.createElement(Form, _extends({}, props, {\n navigate: false,\n fetcherKey: fetcherKey,\n ref: ref\n }));\n });\n if (process.env.NODE_ENV !== \"production\") {\n FetcherForm.displayName = \"fetcher.Form\";\n }\n return FetcherForm;\n }, [fetcherKey]);\n // Exposed FetcherWithComponents\n let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n let data = fetcherData.get(fetcherKey);\n let fetcherWithComponents = React.useMemo(() => _extends({\n Form: FetcherForm,\n submit,\n load\n }, fetcher, {\n data\n }), [FetcherForm, submit, load, fetcher, data]);\n return fetcherWithComponents;\n}\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nfunction useFetchers() {\n let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n return Array.from(state.fetchers.entries()).map(_ref1 => {\n let [key, fetcher] = _ref1;\n return _extends({}, fetcher, {\n key\n });\n });\n}\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions = {};\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration(_temp4) {\n let {\n getKey,\n storageKey\n } = _temp4 === void 0 ? {} : _temp4;\n let {\n router\n } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n let {\n restoreScrollPosition,\n preventScrollReset\n } = useDataRouterState(DataRouterStateHook.UseScrollRestoration);\n let {\n basename\n } = React.useContext(UNSAFE_NavigationContext);\n let location = useLocation();\n let matches = useMatches();\n let navigation = useNavigation();\n // Trigger manual scroll restoration while we're active\n React.useEffect(() => {\n window.history.scrollRestoration = \"manual\";\n return () => {\n window.history.scrollRestoration = \"auto\";\n };\n }, []);\n // Save positions on pagehide\n usePageHide(React.useCallback(() => {\n if (navigation.state === \"idle\") {\n let key = (getKey ? getKey(location, matches) : null) || location.key;\n savedScrollPositions[key] = window.scrollY;\n }\n try {\n sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));\n } catch (error) {\n process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (\" + error + \").\") : void 0;\n }\n window.history.scrollRestoration = \"auto\";\n }, [storageKey, getKey, navigation.state, location, matches]));\n // Read in any saved scroll locations\n if (typeof document !== \"undefined\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n try {\n let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);\n if (sessionPositions) {\n savedScrollPositions = JSON.parse(sessionPositions);\n }\n } catch (e) {\n // no-op, use default empty object\n }\n }, [storageKey]);\n // Enable scroll restoration in the router\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n let getKeyWithoutBasename = getKey && basename !== \"/\" ? (location, matches) => getKey(// Strip the basename to match useLocation()\n _extends({}, location, {\n pathname: stripBasename(location.pathname, basename) || location.pathname\n }), matches) : getKey;\n let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKeyWithoutBasename);\n return () => disableScrollRestoration && disableScrollRestoration();\n }, [router, basename, getKey]);\n // Restore scrolling when state.restoreScrollPosition changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(() => {\n // Explicit false means don't do anything (used for submissions)\n if (restoreScrollPosition === false) {\n return;\n }\n // been here before, scroll to it\n if (typeof restoreScrollPosition === \"number\") {\n window.scrollTo(0, restoreScrollPosition);\n return;\n }\n // try to scroll to the hash\n if (location.hash) {\n let el = document.getElementById(decodeURIComponent(location.hash.slice(1)));\n if (el) {\n el.scrollIntoView();\n return;\n }\n }\n // Don't reset if this navigation opted out\n if (preventScrollReset === true) {\n return;\n }\n // otherwise go to the top on new locations\n window.scrollTo(0, 0);\n }, [location, restoreScrollPosition, preventScrollReset]);\n }\n}\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction useBeforeUnload(callback, options) {\n let {\n capture\n } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? {\n capture\n } : undefined;\n window.addEventListener(\"beforeunload\", callback, opts);\n return () => {\n window.removeEventListener(\"beforeunload\", callback, opts);\n };\n }, [callback, capture]);\n}\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes. This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(callback, options) {\n let {\n capture\n } = options || {};\n React.useEffect(() => {\n let opts = capture != null ? {\n capture\n } : undefined;\n window.addEventListener(\"pagehide\", callback, opts);\n return () => {\n window.removeEventListener(\"pagehide\", callback, opts);\n };\n }, [callback, capture]);\n}\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open. Use at your own risk.\n */\nfunction usePrompt(_ref10) {\n let {\n when,\n message\n } = _ref10;\n let blocker = useBlocker(when);\n React.useEffect(() => {\n if (blocker.state === \"blocked\") {\n let proceed = window.confirm(message);\n if (proceed) {\n // This timeout is needed to avoid a weird \"race\" on POP navigations\n // between the `window.history` revert navigation and the result of\n // `window.confirm`\n setTimeout(blocker.proceed, 0);\n } else {\n blocker.reset();\n }\n }\n }, [blocker, message]);\n React.useEffect(() => {\n if (blocker.state === \"blocked\" && !when) {\n blocker.reset();\n }\n }, [blocker, when]);\n}\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href. You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(to, opts) {\n if (opts === void 0) {\n opts = {};\n }\n let vtContext = React.useContext(ViewTransitionContext);\n !(vtContext != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. \" + \"Did you accidentally import `RouterProvider` from `react-router`?\") : UNSAFE_invariant(false) : void 0;\n let {\n basename\n } = useDataRouterContext(DataRouterHook.useViewTransitionState);\n let path = useResolvedPath(to, {\n relative: opts.relative\n });\n if (!vtContext.isTransitioning) {\n return false;\n }\n let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n // Transition is active if we're going to or coming from the indicated\n // destination. This ensures that other PUSH navigations that reverse\n // an indicated transition apply. I.e., on the list view you have:\n //\n // <NavLink to=\"/details/1\" viewTransition>\n //\n // If you click the breadcrumb back to the list view:\n //\n // <NavLink to=\"/list\" viewTransition>\n //\n // We should apply the transition because it's indicated as active going\n // from /list -> /details/1 and therefore should be active on the reverse\n // (even though this isn't strictly a POP reverse)\n return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n//#endregion\n\nexport { BrowserRouter, Form, HashRouter, Link, NavLink, RouterProvider, ScrollRestoration, FetchersContext as UNSAFE_FetchersContext, ViewTransitionContext as UNSAFE_ViewTransitionContext, useScrollRestoration as UNSAFE_useScrollRestoration, createBrowserRouter, createHashRouter, createSearchParams, HistoryRouter as unstable_HistoryRouter, usePrompt as unstable_usePrompt, useBeforeUnload, useFetcher, useFetchers, useFormAction, useLinkClickHandler, useSearchParams, useSubmit, useViewTransitionState };\n//# sourceMappingURL=index.js.map\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","/**\n * stores/auth.ts — token + signed-in state.\n *\n * The token lives in localStorage (same key the agim backend already\n * uses, `agim_token`) and is mirrored into a zustand store so React\n * components can subscribe to \"am I logged in\" without polling\n * localStorage on every render.\n *\n * Why not roll this into prefs.ts:\n * * Different lifecycle: prefs are operator-tunable UI state;\n * auth is a single high-signal boolean (\"can I make API calls\")\n * plus the token string itself.\n * * Different security posture: token writes are expected to be\n * rare (login, logout, 401 wipe); prefs writes happen every\n * theme toggle.\n * * Cleaner store shape — pages can `useAuth(s => s.signedIn)`\n * without dragging theme/lang along.\n */\n\nimport { create } from 'zustand'\n\nconst TOKEN_KEY = 'agim_token'\n\ninterface AuthState {\n token: string | null\n signedIn: boolean\n setToken: (token: string | null) => void\n clear: () => void\n}\n\nfunction readToken(): string | null {\n try {\n return localStorage.getItem(TOKEN_KEY)\n } catch {\n return null\n }\n}\n\nfunction writeToken(token: string | null): void {\n try {\n if (token) localStorage.setItem(TOKEN_KEY, token)\n else localStorage.removeItem(TOKEN_KEY)\n } catch {\n /* private mode — login won't persist but the in-memory state still works */\n }\n}\n\nconst initialToken = readToken()\n\nexport const useAuth = create<AuthState>((set) => ({\n token: initialToken,\n signedIn: Boolean(initialToken),\n setToken: (token) => {\n writeToken(token)\n set({ token, signedIn: Boolean(token) })\n },\n clear: () => {\n writeToken(null)\n set({ token: null, signedIn: false })\n },\n}))\n\n/**\n * Subscribe the auth store to cross-tab localStorage changes — when\n * the user signs out in tab A, tab B's UI flips to signed-out within\n * one storage event. Called from providers.tsx on mount.\n */\nexport function bindAuthToStorage(): () => void {\n function onStorage(e: StorageEvent): void {\n if (e.key !== TOKEN_KEY) return\n const next = e.newValue\n useAuth.setState({ token: next, signedIn: Boolean(next) })\n }\n window.addEventListener('storage', onStorage)\n return () => window.removeEventListener('storage', onStorage)\n}\n","/**\n * RequireAuth — route guard. Wraps every authenticated route in the\n * router config so an un-signed-in visit redirects to /login while\n * preserving the intended destination in the `?next=` query so post-\n * login navigation lands the user where they were headed.\n *\n * Mirrors the legacy _app.js redirect logic (same `next` shape, same\n * localStorage key `agim_token`) so a v1 session is a valid v2 session\n * with no migration step.\n */\n\nimport { Navigate, useLocation } from 'react-router-dom'\nimport type { ReactNode } from 'react'\nimport { useAuth } from '@/stores/auth'\n\ninterface RequireAuthProps {\n children: ReactNode\n}\n\nexport function RequireAuth({ children }: RequireAuthProps): JSX.Element {\n const signedIn = useAuth((s) => s.signedIn)\n const location = useLocation()\n\n if (!signedIn) {\n const next = encodeURIComponent(location.pathname + location.search)\n return <Navigate to={`/login?next=${next}`} replace />\n }\n return <>{children}</>\n}\n","export const warn = (i18n, code, msg, rest) => {\n const args = [msg, {\n code,\n ...(rest || {})\n }];\n if (i18n?.services?.logger?.forward) {\n return i18n.services.logger.forward(args, 'warn', 'react-i18next::', true);\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n if (i18n?.services?.logger?.warn) {\n i18n.services.logger.warn(...args);\n } else if (console?.warn) {\n console.warn(...args);\n }\n};\nconst alreadyWarned = {};\nexport const warnOnce = (i18n, code, msg, rest) => {\n if (isString(msg) && alreadyWarned[msg]) return;\n if (isString(msg)) alreadyWarned[msg] = new Date();\n warn(i18n, code, msg, rest);\n};\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n if (i18n.options.preload && i18n.options.preload.indexOf(lng) > -1) return loadNamespaces(i18n, ns, cb);\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nexport const hasLoadedNamespace = (ns, i18n, options = {}) => {\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce(i18n, 'NO_LANGUAGES', 'i18n.languages were undefined or empty', {\n languages: i18n.languages\n });\n return true;\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&amp;': '&',\n '&#38;': '&',\n '&lt;': '<',\n '&#60;': '<',\n '&gt;': '>',\n '&#62;': '>',\n '&apos;': \"'\",\n '&#39;': \"'\",\n '&quot;': '\"',\n '&#34;': '\"',\n '&nbsp;': ' ',\n '&#160;': ' ',\n '&copy;': '©',\n '&#169;': '©',\n '&reg;': '®',\n '&#174;': '®',\n '&hellip;': '…',\n '&#8230;': '…',\n '&#x2F;': '/',\n '&#47;': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape\n};\nexport const setDefaults = (options = {}) => {\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;","let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;","import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n type: '3rdParty',\n init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces() {\n return Object.keys(this.usedNamespaces);\n }\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = (await ForComponent.getInitialProps?.(ctx)) ?? {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n const namespaces = i18n.reportNamespaces?.getUsedNamespaces() ?? [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};","import { useState, useEffect, useContext, useRef, useCallback } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst usePrevious = (value, ignore) => {\n const ref = useRef();\n useEffect(() => {\n ref.current = ignore ? ref.current : value;\n }, [value, ignore]);\n return ref.current;\n};\nconst alwaysNewT = (i18n, language, namespace, keyPrefix) => i18n.getFixedT(language, namespace, keyPrefix);\nconst useMemoizedT = (i18n, language, namespace, keyPrefix) => useCallback(alwaysNewT(i18n, language, namespace, keyPrefix), [i18n, language, namespace, keyPrefix]);\nexport const useTranslation = (ns, props = {}) => {\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce(i18n, 'NO_I18NEXT_INSTANCE', 'useTranslation: You will need to pass in an i18next instance by using initReactI18next');\n const notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n const retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n if (i18n.options.react?.wait) warnOnce(i18n, 'DEPRECATED_OPTION', 'useTranslation: It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n const i18nOptions = {\n ...getDefaults(),\n ...i18n.options.react,\n ...props\n };\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n let namespaces = ns || defaultNSFromContext || i18n.options?.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n i18n.reportNamespaces.addUsedNamespaces?.(namespaces);\n const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const memoGetT = useMemoizedT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const getT = () => memoGetT;\n const getNewT = () => alwaysNewT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const [t, setT] = useState(getT);\n let joinedNS = namespaces.join();\n if (props.lng) joinedNS = `${props.lng}${joinedNS}`;\n const previousJoinedNS = usePrevious(joinedNS);\n const isMounted = useRef(true);\n useEffect(() => {\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n isMounted.current = true;\n if (!ready && !useSuspense) {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n } else {\n loadNamespaces(i18n, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n }\n }\n if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {\n setT(getNewT);\n }\n const boundReset = () => {\n if (isMounted.current) setT(getNewT);\n };\n if (bindI18n) i18n?.on(bindI18n, boundReset);\n if (bindI18nStore) i18n?.store.on(bindI18nStore, boundReset);\n return () => {\n isMounted.current = false;\n if (i18n && bindI18n) bindI18n?.split(' ').forEach(e => i18n.off(e, boundReset));\n if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));\n };\n }, [i18n, joinedNS]);\n useEffect(() => {\n if (isMounted.current && ready) {\n setT(getT);\n }\n }, [i18n, keyPrefix, ready]);\n const ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready) return ret;\n if (!ready && !useSuspense) return ret;\n throw new Promise(resolve => {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => resolve());\n } else {\n loadNamespaces(i18n, namespaces, () => resolve());\n }\n });\n};","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses, toKebabCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => {\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),\n ...props\n })\n );\n Component.displayName = `${iconName}`;\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Check = createLucideIcon(\"Check\", [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]]);\n\nexport { Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"ChevronDown\", [\n [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronUp = createLucideIcon(\"ChevronUp\", [[\"path\", { d: \"m18 15-6-6-6 6\", key: \"153udz\" }]]);\n\nexport { ChevronUp as default };\n//# sourceMappingURL=chevron-up.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleAlert = createLucideIcon(\"CircleAlert\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n]);\n\nexport { CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst FileQuestion = createLucideIcon(\"FileQuestion\", [\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }],\n [\"path\", { d: \"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z\", key: \"1mlx9k\" }],\n [\"path\", { d: \"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3\", key: \"mhlwft\" }]\n]);\n\nexport { FileQuestion as default };\n//# sourceMappingURL=file-question.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst House = createLucideIcon(\"House\", [\n [\"path\", { d: \"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\", key: \"5wwlr5\" }],\n [\n \"path\",\n {\n d: \"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\",\n key: \"1d0kgt\"\n }\n ]\n]);\n\nexport { House as default };\n//# sourceMappingURL=house.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Laptop = createLucideIcon(\"Laptop\", [\n [\n \"path\",\n {\n d: \"M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16\",\n key: \"tarvll\"\n }\n ]\n]);\n\nexport { Laptop as default };\n//# sourceMappingURL=laptop.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MessageSquarePlus = createLucideIcon(\"MessageSquarePlus\", [\n [\"path\", { d: \"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\", key: \"1lielz\" }],\n [\"path\", { d: \"M12 7v6\", key: \"lw1j43\" }],\n [\"path\", { d: \"M9 10h6\", key: \"9gxzsh\" }]\n]);\n\nexport { MessageSquarePlus as default };\n//# sourceMappingURL=message-square-plus.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Moon = createLucideIcon(\"Moon\", [\n [\"path\", { d: \"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\", key: \"a7tn18\" }]\n]);\n\nexport { Moon as default };\n//# sourceMappingURL=moon.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RotateCcw = createLucideIcon(\"RotateCcw\", [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n]);\n\nexport { RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Send = createLucideIcon(\"Send\", [\n [\n \"path\",\n {\n d: \"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\",\n key: \"1ffxy3\"\n }\n ],\n [\"path\", { d: \"m21.854 2.147-10.94 10.939\", key: \"12cjpa\" }]\n]);\n\nexport { Send as default };\n//# sourceMappingURL=send.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ShieldCheck = createLucideIcon(\"ShieldCheck\", [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { ShieldCheck as default };\n//# sourceMappingURL=shield-check.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst SunMedium = createLucideIcon(\"SunMedium\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"path\", { d: \"M12 3v1\", key: \"1asbbs\" }],\n [\"path\", { d: \"M12 20v1\", key: \"1wcdkc\" }],\n [\"path\", { d: \"M3 12h1\", key: \"lp3yf2\" }],\n [\"path\", { d: \"M20 12h1\", key: \"1vloll\" }],\n [\"path\", { d: \"m18.364 5.636-.707.707\", key: \"1hakh0\" }],\n [\"path\", { d: \"m6.343 17.657-.707.707\", key: \"18m9nf\" }],\n [\"path\", { d: \"m5.636 5.636.707.707\", key: \"1xv1c5\" }],\n [\"path\", { d: \"m17.657 17.657.707.707\", key: \"vl76zb\" }]\n]);\n\nexport { SunMedium as default };\n//# sourceMappingURL=sun-medium.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst TriangleAlert = createLucideIcon(\"TriangleAlert\", [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar use = React[\" use \".trim().toString()];\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * `cn` — canonical tailwind class composer. Accepts the usual `clsx`\n * input shapes (strings / arrays / objects / falsy values) and then\n * runs the result through `tailwind-merge` so conflicting Tailwind\n * utilities (e.g. `px-2 px-4`) resolve to a single value.\n *\n * Every shadcn component expects this exact helper at `@/lib/utils`.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n","/**\n * Button — primary actionable element.\n *\n * Adapted from shadcn/ui (https://ui.shadcn.com) but tuned to agim's\n * native token palette (bg-accent / bg-surface / bg-danger ...) rather\n * than shadcn's bg-primary / bg-card / bg-destructive aliases. Same\n * Radix Slot escape hatch (asChild) for wrapping <Link>s etc.\n *\n * Mobile: every variant ships a min-h-9 (36px) baseline and the `icon`\n * size is intentionally bumped to h-11/w-11 to hit the 44px touch\n * guidance. Pages that need a tighter desktop look can compose\n * `size=\"sm\"` (still 32px tall — never narrower than thumb width).\n */\n\nimport * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst buttonVariants = cva(\n [\n 'inline-flex items-center justify-center gap-2',\n 'whitespace-nowrap rounded-md text-sm font-medium',\n 'transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg',\n 'disabled:pointer-events-none disabled:opacity-55',\n '[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n ].join(' '),\n {\n variants: {\n variant: {\n default:\n 'bg-accent text-accent-fg hover:bg-accent-hover',\n secondary:\n 'bg-surface-2 text-text hover:bg-surface-hover border border-border',\n outline:\n 'bg-surface text-text border border-border hover:bg-surface-hover hover:border-border-strong',\n ghost:\n 'bg-transparent text-text-dim hover:bg-surface-hover hover:text-text',\n destructive:\n 'bg-surface text-danger border border-danger hover:bg-danger hover:text-white',\n link:\n 'bg-transparent text-accent underline-offset-4 hover:underline px-0 h-auto',\n },\n size: {\n // Compact 32px rhythm — matches h-8 Input / Select / Topbar widgets.\n // Trade-off: tighter than the 44×44 mobile touch ideal, but the\n // operator asked for a uniform compact UI across the whole console.\n default: 'h-8 px-3 py-1 text-sm',\n sm: 'h-7 px-2.5 py-1 text-xs',\n lg: 'h-9 px-5',\n icon: 'h-8 w-8',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n },\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","/**\n * ErrorBoundary — catches uncaught render-time errors anywhere in\n * the SPA so a single broken route can't blank the whole console.\n *\n * Mount at the router root once; child routes inherit. Inside a\n * RequireAuth boundary so a thrown error post-login still keeps\n * the user authenticated.\n *\n * React still requires class components for error boundaries (the\n * hook-based equivalent is on the React roadmap but not shipped).\n * This is the only class component we keep in the app.\n *\n * Production behavior: shows a generic apology + the error message\n * (no stack), with a Reload + Back-to-home pair. Dev mode (Vite\n * `import.meta.env.DEV`) additionally shows the component stack\n * so the operator can pin down the failure path.\n */\n\nimport { Component, type ErrorInfo, type ReactNode } from 'react'\nimport { Link } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { AlertTriangle, RotateCcw, Home } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\n\ninterface ErrorBoundaryProps {\n children: ReactNode\n}\n\ninterface ErrorBoundaryState {\n error: Error | null\n info: ErrorInfo | null\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { error: null, info: null }\n\n static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n return { error }\n }\n\n componentDidCatch(_error: Error, info: ErrorInfo): void {\n // Capture the component stack for the dev surface. We deliberately\n // don't send this to any telemetry endpoint — adding one now would\n // need its own design (PII review, retention, opt-out).\n this.setState({ info })\n }\n\n handleReset = (): void => {\n this.setState({ error: null, info: null })\n }\n\n render(): ReactNode {\n if (this.state.error) {\n return <ErrorFallback\n error={this.state.error}\n info={this.state.info}\n onReset={this.handleReset}\n />\n }\n return this.props.children\n }\n}\n\ninterface ErrorFallbackProps {\n error: Error\n info: ErrorInfo | null\n onReset: () => void\n}\n\nfunction ErrorFallback({ error, info, onReset }: ErrorFallbackProps): JSX.Element {\n // The boundary may sit OUTSIDE the i18n provider during some\n // test setups, so defaultValue strings shield against an unhooked\n // t() returning the key verbatim.\n const { t } = useTranslation('common')\n const isDev = typeof import.meta !== 'undefined' && Boolean(import.meta.env?.DEV)\n\n return (\n <div className=\"grid min-h-dvh place-items-center bg-bg px-4 py-8\">\n <div className=\"flex flex-col items-center gap-4 text-center max-w-xl\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-danger-bg text-danger\">\n <AlertTriangle className=\"h-6 w-6\" />\n </div>\n <h1 className=\"text-xl font-semibold\">\n {t('errorBoundary.title', { defaultValue: 'Something went wrong.' })}\n </h1>\n <p className=\"text-sm text-text-dim\">\n {t('errorBoundary.description', {\n defaultValue: 'An unexpected error broke the page render. Try reloading or heading back to the home screen; if it persists, copy the message below and report it.',\n })}\n </p>\n <pre className=\"w-full max-w-lg overflow-auto rounded-md bg-surface-2 px-3 py-2 text-left text-xs leading-5 text-text-dim\">\n {error.name}: {error.message}\n </pre>\n {isDev && info?.componentStack && (\n <details className=\"w-full max-w-lg text-left text-xs\">\n <summary className=\"cursor-pointer text-text-dim\">component stack (dev)</summary>\n <pre className=\"mt-1 max-h-64 overflow-auto rounded-md bg-surface-2 px-3 py-2 text-text-muted\">\n {info.componentStack}\n </pre>\n </details>\n )}\n <div className=\"mt-2 flex flex-wrap items-center justify-center gap-2\">\n <Button\n type=\"button\"\n variant=\"default\"\n onClick={() => {\n onReset()\n // Reload as a last resort — the boundary's reset only\n // clears its local state, but a corrupted module is\n // probably unrecoverable without a fresh JS context.\n if (typeof window !== 'undefined') window.location.reload()\n }}\n >\n <RotateCcw className=\"h-4 w-4\" />\n {t('errorBoundary.reload', { defaultValue: 'Reload' })}\n </Button>\n <Button type=\"button\" variant=\"secondary\" asChild>\n <Link to=\"/\" onClick={onReset}>\n <Home className=\"h-4 w-4\" />\n {t('errorBoundary.home', { defaultValue: 'Home' })}\n </Link>\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","// src/subscribable.ts\nvar Subscribable = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n};\nexport {\n Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar FocusManager = class extends Subscribable {\n #focused;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onFocus) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const listener = () => onFocus();\n window.addEventListener(\"visibilitychange\", listener, false);\n return () => {\n window.removeEventListener(\"visibilitychange\", listener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup((focused) => {\n if (typeof focused === \"boolean\") {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n setFocused(focused) {\n const changed = this.#focused !== focused;\n if (changed) {\n this.#focused = focused;\n this.onFocus();\n }\n }\n onFocus() {\n const isFocused = this.isFocused();\n this.listeners.forEach((listener) => {\n listener(isFocused);\n });\n }\n isFocused() {\n if (typeof this.#focused === \"boolean\") {\n return this.#focused;\n }\n return globalThis.document?.visibilityState !== \"hidden\";\n }\n};\nvar focusManager = new FocusManager();\nexport {\n FocusManager,\n focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n // We need the wrapper function syntax below instead of direct references to\n // global setTimeout etc.\n //\n // BAD: `setTimeout: setTimeout`\n // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n //\n // If we use direct references here, then anything that wants to spy on or\n // replace the global setTimeout (like tests) won't work since we'll already\n // have a hard reference to the original implementation at the time when this\n // file was imported.\n setTimeout: (callback, delay) => setTimeout(callback, delay),\n clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n setInterval: (callback, delay) => setInterval(callback, delay),\n clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n // We cannot have TimeoutManager<T> as we must instantiate it with a concrete\n // type at app boot; and if we leave that type, then any new timer provider\n // would need to support the default provider's concrete timer ID, which is\n // infeasible across environments.\n //\n // We settle for type safety for the TimeoutProvider type, and accept that\n // this class is unsafe internally to allow for extension.\n #provider = defaultTimeoutProvider;\n #providerCalled = false;\n setTimeoutProvider(provider) {\n if (process.env.NODE_ENV !== \"production\") {\n if (this.#providerCalled && provider !== this.#provider) {\n console.error(\n `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n { previous: this.#provider, provider }\n );\n }\n }\n this.#provider = provider;\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = false;\n }\n }\n setTimeout(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setTimeout(callback, delay);\n }\n clearTimeout(timeoutId) {\n this.#provider.clearTimeout(timeoutId);\n }\n setInterval(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setInterval(callback, delay);\n }\n clearInterval(intervalId) {\n this.#provider.clearInterval(intervalId);\n }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n setTimeout(callback, 0);\n}\nexport {\n TimeoutManager,\n defaultTimeoutProvider,\n systemSetTimeoutZero,\n timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveQueryBoolean(option, query) {\n return typeof option === \"function\" ? option(query) : option;\n}\nfunction matchQuery(filters, query) {\n const {\n type = \"all\",\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n if (type !== \"all\") {\n const isActive = query.isActive();\n if (type === \"active\" && !isActive) {\n return false;\n }\n if (type === \"inactive\" && isActive) {\n return false;\n }\n }\n if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n return false;\n }\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n if (predicate && !predicate(query)) {\n return false;\n }\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const { exact, status, predicate, mutationKey } = filters;\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n if (status && mutation.state.status !== status) {\n return false;\n }\n if (predicate && !predicate(mutation)) {\n return false;\n }\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = options?.queryKeyHashFn || hashKey;\n return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n return JSON.stringify(\n queryKey,\n (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val\n );\n}\nfunction partialMatchKey(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n }\n return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b, depth = 0) {\n if (a === b) {\n return a;\n }\n if (depth > 500) return b;\n const array = isPlainArray(a) && isPlainArray(b);\n if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n const aItems = array ? a : Object.keys(a);\n const aSize = aItems.length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? new Array(bSize) : {};\n let equalItems = 0;\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n const aItem = a[key];\n const bItem = b[key];\n if (aItem === bItem) {\n copy[key] = aItem;\n if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n continue;\n }\n if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n copy[key] = bItem;\n continue;\n }\n const v = replaceEqualDeep(aItem, bItem, depth + 1);\n copy[key] = v;\n if (v === aItem) equalItems++;\n }\n return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n }\n const ctor = o.constructor;\n if (ctor === void 0) {\n return true;\n }\n const prot = ctor.prototype;\n if (!hasObjectPrototype(prot)) {\n return false;\n }\n if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n return false;\n }\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false;\n }\n return true;\n}\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n return new Promise((resolve) => {\n timeoutManager.setTimeout(resolve, timeout);\n });\n}\nfunction replaceData(prevData, data, options) {\n if (typeof options.structuralSharing === \"function\") {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== \"production\") {\n try {\n return replaceEqualDeep(prevData, data);\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n );\n throw error;\n }\n }\n return replaceEqualDeep(prevData, data);\n }\n return data;\n}\nfunction keepPreviousData(previousData) {\n return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = /* @__PURE__ */ Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n );\n }\n }\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise;\n }\n if (!options.queryFn || options.queryFn === skipToken) {\n return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n }\n return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n if (typeof throwOnError === \"function\") {\n return throwOnError(...params);\n }\n return !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n let consumed = false;\n let signal;\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n signal ??= getSignal();\n if (consumed) {\n return signal;\n }\n consumed = true;\n if (signal.aborted) {\n onCancelled();\n } else {\n signal.addEventListener(\"abort\", onCancelled, { once: true });\n }\n return signal;\n }\n });\n return object;\n}\nexport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn,\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n isPlainArray,\n isPlainObject,\n isServer,\n isValidTimeout,\n keepPreviousData,\n matchMutation,\n matchQuery,\n noop,\n partialMatchKey,\n replaceData,\n replaceEqualDeep,\n resolveQueryBoolean,\n resolveStaleTime,\n shallowEqualObjects,\n shouldThrowError,\n skipToken,\n sleep,\n timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/environmentManager.ts\nimport { isServer } from \"./utils.js\";\nvar environmentManager = /* @__PURE__ */ (() => {\n let isServerFn = () => isServer;\n return {\n /**\n * Returns whether the current runtime should be treated as a server environment.\n */\n isServer() {\n return isServerFn();\n },\n /**\n * Overrides the server check globally.\n */\n setIsServer(isServerValue) {\n isServerFn = isServerValue;\n }\n };\n})();\nexport {\n environmentManager\n};\n//# sourceMappingURL=environmentManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n let resolve;\n let reject;\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n thenable.status = \"pending\";\n thenable.catch(() => {\n });\n function finalize(data) {\n Object.assign(thenable, data);\n delete thenable.resolve;\n delete thenable.reject;\n }\n thenable.resolve = (value) => {\n finalize({\n status: \"fulfilled\",\n value\n });\n resolve(value);\n };\n thenable.reject = (reason) => {\n finalize({\n status: \"rejected\",\n reason\n });\n reject(reason);\n };\n return thenable;\n}\nfunction tryResolveSync(promise) {\n let data;\n promise.then((result) => {\n data = result;\n return result;\n }, noop)?.catch(noop);\n if (data !== void 0) {\n return { data };\n }\n return void 0;\n}\nexport {\n pendingThenable,\n tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n let notifyFn = (callback) => {\n callback();\n };\n let batchNotifyFn = (callback) => {\n callback();\n };\n let scheduleFn = defaultScheduler;\n const schedule = (callback) => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleFn(() => {\n notifyFn(callback);\n });\n }\n };\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n return {\n batch: (callback) => {\n let result;\n transactions++;\n try {\n result = callback();\n } finally {\n transactions--;\n if (!transactions) {\n flush();\n }\n }\n return result;\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: (callback) => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn) => {\n notifyFn = fn;\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn) => {\n batchNotifyFn = fn;\n },\n setScheduler: (fn) => {\n scheduleFn = fn;\n }\n };\n}\nvar notifyManager = createNotifyManager();\nexport {\n createNotifyManager,\n defaultScheduler,\n notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nvar OnlineManager = class extends Subscribable {\n #online = true;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onOnline) => {\n if (typeof window !== \"undefined\" && window.addEventListener) {\n const onlineListener = () => onOnline(true);\n const offlineListener = () => onOnline(false);\n window.addEventListener(\"online\", onlineListener, false);\n window.addEventListener(\"offline\", offlineListener, false);\n return () => {\n window.removeEventListener(\"online\", onlineListener);\n window.removeEventListener(\"offline\", offlineListener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup(this.setOnline.bind(this));\n }\n setOnline(online) {\n const changed = this.#online !== online;\n if (changed) {\n this.#online = online;\n this.listeners.forEach((listener) => {\n listener(online);\n });\n }\n }\n isOnline() {\n return this.#online;\n }\n};\nvar onlineManager = new OnlineManager();\nexport {\n OnlineManager,\n onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n constructor(options) {\n super(\"CancelledError\");\n this.revert = options?.revert;\n this.silent = options?.silent;\n }\n};\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let continueFn;\n const thenable = pendingThenable();\n const isResolved = () => thenable.status !== \"pending\";\n const cancel = (cancelOptions) => {\n if (!isResolved()) {\n const error = new CancelledError(cancelOptions);\n reject(error);\n config.onCancel?.(error);\n }\n };\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n const canStart = () => canFetch(config.networkMode) && config.canRun();\n const resolve = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.resolve(value);\n }\n };\n const reject = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.reject(value);\n }\n };\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved() || canContinue()) {\n continueResolve(value);\n }\n };\n config.onPause?.();\n }).then(() => {\n continueFn = void 0;\n if (!isResolved()) {\n config.onContinue?.();\n }\n });\n };\n const run = () => {\n if (isResolved()) {\n return;\n }\n let promiseOrValue;\n const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n try {\n promiseOrValue = initialPromise ?? config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n if (isResolved()) {\n return;\n }\n const retry = config.retry ?? (environmentManager.isServer() ? 0 : 3);\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n if (isRetryCancelled || !shouldRetry) {\n reject(error);\n return;\n }\n failureCount++;\n config.onFail?.(failureCount, error);\n sleep(delay).then(() => {\n return canContinue() ? void 0 : pause();\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n };\n return {\n promise: thenable,\n status: () => thenable.status,\n cancel,\n continue: () => {\n continueFn?.();\n return thenable;\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n if (canStart()) {\n run();\n } else {\n pause().then(run);\n }\n return thenable;\n }\n };\n}\nexport {\n CancelledError,\n canFetch,\n createRetryer,\n isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { environmentManager } from \"./environmentManager.js\";\nimport { isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n #gcTimeout;\n destroy() {\n this.clearGcTimeout();\n }\n scheduleGc() {\n this.clearGcTimeout();\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = timeoutManager.setTimeout(() => {\n this.optionalRemove();\n }, this.gcTime);\n }\n }\n updateGcTime(newGcTime) {\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (environmentManager.isServer() ? Infinity : 5 * 60 * 1e3)\n );\n }\n clearGcTimeout() {\n if (this.#gcTimeout !== void 0) {\n timeoutManager.clearTimeout(this.#gcTimeout);\n this.#gcTimeout = void 0;\n }\n }\n};\nexport {\n Removable\n};\n//# sourceMappingURL=removable.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject(context.signal.reason);\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/query.ts\nimport {\n ensureQueryFn,\n noop,\n replaceData,\n resolveQueryBoolean,\n resolveStaleTime,\n skipToken,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar Query = class extends Removable {\n #queryType;\n #initialState;\n #revertState;\n #cache;\n #client;\n #retryer;\n #defaultOptions;\n #abortSignalConsumed;\n constructor(config) {\n super();\n this.#abortSignalConsumed = false;\n this.#defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.#client = config.client;\n this.#cache = this.#client.getQueryCache();\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.#initialState = getDefaultState(this.options);\n this.state = config.state ?? this.#initialState;\n this.scheduleGc();\n }\n get meta() {\n return this.options.meta;\n }\n get queryType() {\n return this.#queryType;\n }\n get promise() {\n return this.#retryer?.promise;\n }\n setOptions(options) {\n this.options = { ...this.#defaultOptions, ...options };\n if (options?._type) {\n this.#queryType = options._type;\n }\n this.updateGcTime(this.options.gcTime);\n if (this.state && this.state.data === void 0) {\n const defaultState = getDefaultState(this.options);\n if (defaultState.data !== void 0) {\n this.setState(\n successState(defaultState.data, defaultState.dataUpdatedAt)\n );\n this.#initialState = defaultState;\n }\n }\n }\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n this.#cache.remove(this);\n }\n }\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options);\n this.#dispatch({\n data,\n type: \"success\",\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual\n });\n return data;\n }\n setState(state) {\n this.#dispatch({ type: \"setState\", state });\n }\n cancel(options) {\n const promise = this.#retryer?.promise;\n this.#retryer?.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n destroy() {\n super.destroy();\n this.cancel({ silent: true });\n }\n get resetState() {\n return this.#initialState;\n }\n reset() {\n this.destroy();\n this.setState(this.resetState);\n }\n isActive() {\n return this.observers.some(\n (observer) => resolveQueryBoolean(observer.options.enabled, this) !== false\n );\n }\n isDisabled() {\n if (this.getObserversCount() > 0) {\n return !this.isActive();\n }\n return this.options.queryFn === skipToken || !this.isFetched();\n }\n isFetched() {\n return this.state.dataUpdateCount + this.state.errorUpdateCount > 0;\n }\n isStatic() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n );\n }\n return false;\n }\n isStale() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale\n );\n }\n return this.state.data === void 0 || this.state.isInvalidated;\n }\n isStaleByTime(staleTime = 0) {\n if (this.state.data === void 0) {\n return true;\n }\n if (staleTime === \"static\") {\n return false;\n }\n if (this.state.isInvalidated) {\n return true;\n }\n return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n onFocus() {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n onOnline() {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer);\n this.clearGcTimeout();\n this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n }\n }\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer);\n if (!this.observers.length) {\n if (this.#retryer) {\n if (this.#abortSignalConsumed || this.#isInitialPausedFetch()) {\n this.#retryer.cancel({ revert: true });\n } else {\n this.#retryer.cancelRetry();\n }\n }\n this.scheduleGc();\n }\n this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n }\n }\n getObserversCount() {\n return this.observers.length;\n }\n #isInitialPausedFetch() {\n return this.state.fetchStatus === \"paused\" && this.state.status === \"pending\";\n }\n invalidate() {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: \"invalidate\" });\n }\n }\n async fetch(options, fetchOptions) {\n if (this.state.fetchStatus !== \"idle\" && // If the promise in the retryer is already rejected, we have to definitely\n // re-start the fetch; there is a chance that the query is still in a\n // pending state when that happens\n this.#retryer?.status() !== \"rejected\") {\n if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n this.cancel({ silent: true });\n } else if (this.#retryer) {\n this.#retryer.continueRetry();\n return this.#retryer.promise;\n }\n }\n if (options) {\n this.setOptions(options);\n }\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn);\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n );\n }\n }\n const abortController = new AbortController();\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true;\n return abortController.signal;\n }\n });\n };\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions);\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: this.#client,\n queryKey: this.queryKey,\n meta: this.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n this.#abortSignalConsumed = false;\n if (this.options.persister) {\n return this.options.persister(\n queryFn,\n queryFnContext,\n this\n );\n }\n return queryFn(queryFnContext);\n };\n const createFetchContext = () => {\n const context2 = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n client: this.#client,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context2);\n return context2;\n };\n const context = createFetchContext();\n const behavior = this.#queryType === \"infinite\" ? infiniteQueryBehavior(\n this.options.pages\n ) : this.options.behavior;\n behavior?.onFetch(context, this);\n this.#revertState = this.state;\n if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n }\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise,\n fn: context.fetchFn,\n onCancel: (error) => {\n if (error instanceof CancelledError && error.revert) {\n this.setState({\n ...this.#revertState,\n fetchStatus: \"idle\"\n });\n }\n abortController.abort();\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true\n });\n try {\n const data = await this.#retryer.start();\n if (data === void 0) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n );\n }\n throw new Error(`${this.queryHash} data is undefined`);\n }\n this.setData(data);\n this.#cache.config.onSuccess?.(data, this);\n this.#cache.config.onSettled?.(\n data,\n this.state.error,\n this\n );\n return data;\n } catch (error) {\n if (error instanceof CancelledError) {\n if (error.silent) {\n return this.#retryer.promise;\n } else if (error.revert) {\n if (this.state.data === void 0) {\n throw error;\n }\n return this.state.data;\n }\n }\n this.#dispatch({\n type: \"error\",\n error\n });\n this.#cache.config.onError?.(\n error,\n this\n );\n this.#cache.config.onSettled?.(\n this.state.data,\n error,\n this\n );\n throw error;\n } finally {\n this.scheduleGc();\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n fetchStatus: \"paused\"\n };\n case \"continue\":\n return {\n ...state,\n fetchStatus: \"fetching\"\n };\n case \"fetch\":\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null\n };\n case \"success\":\n const newState = {\n ...state,\n ...successState(action.data, action.dataUpdatedAt),\n dataUpdateCount: state.dataUpdateCount + 1,\n ...!action.manual && {\n fetchStatus: \"idle\",\n fetchFailureCount: 0,\n fetchFailureReason: null\n }\n };\n this.#revertState = action.manual ? newState : void 0;\n return newState;\n case \"error\":\n const error = action.error;\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: \"idle\",\n status: \"error\",\n // flag existing data as invalidated if we get a background error\n // note that \"no data\" always means stale so we can set unconditionally here\n isInvalidated: true\n };\n case \"invalidate\":\n return {\n ...state,\n isInvalidated: true\n };\n case \"setState\":\n return {\n ...state,\n ...action.state\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate();\n });\n this.#cache.notify({ query: this, type: \"updated\", action });\n });\n }\n};\nfunction fetchState(data, options) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n ...data === void 0 && {\n error: null,\n status: \"pending\"\n }\n };\n}\nfunction successState(data, dataUpdatedAt) {\n return {\n data,\n dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: \"success\"\n };\n}\nfunction getDefaultState(options) {\n const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n const hasData = data !== void 0;\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? \"success\" : \"pending\",\n fetchStatus: \"idle\"\n };\n}\nexport {\n Query,\n fetchState\n};\n//# sourceMappingURL=query.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #client;\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.#client = config.client;\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n const onContinue = () => {\n this.#dispatch({ type: \"continue\" });\n };\n const mutationFnContext = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables, mutationFnContext);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue,\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (restored) {\n onContinue();\n } else {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n if (this.#mutationCache.config.onMutate) {\n await this.#mutationCache.config.onMutate(\n variables,\n this,\n mutationFnContext\n );\n }\n const context = await this.options.onMutate?.(\n variables,\n mutationFnContext\n );\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSuccess?.(\n data,\n variables,\n this.state.context,\n mutationFnContext\n );\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSettled?.(\n data,\n null,\n variables,\n this.state.context,\n mutationFnContext\n );\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onError?.(\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n this.#dispatch({ type: \"error\", error });\n throw error;\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n #client;\n #currentResult = void 0;\n #currentMutation;\n #mutateOptions;\n constructor(client, options) {\n super();\n this.#client = client;\n this.setOptions(options);\n this.bindMethods();\n this.#updateResult();\n }\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n this.options = this.#client.defaultMutationOptions(options);\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: \"observerOptionsUpdated\",\n mutation: this.#currentMutation,\n observer: this\n });\n }\n if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n this.reset();\n } else if (this.#currentMutation?.state.status === \"pending\") {\n this.#currentMutation.setOptions(this.options);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this);\n }\n }\n onMutationUpdate(action) {\n this.#updateResult();\n this.#notify(action);\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n reset() {\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = void 0;\n this.#updateResult();\n this.#notify();\n }\n mutate(variables, options) {\n this.#mutateOptions = options;\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n this.#currentMutation.addObserver(this);\n return this.#currentMutation.execute(variables);\n }\n #updateResult() {\n const state = this.#currentMutation?.state ?? getDefaultState();\n this.#currentResult = {\n ...state,\n isPending: state.status === \"pending\",\n isSuccess: state.status === \"success\",\n isError: state.status === \"error\",\n isIdle: state.status === \"idle\",\n mutate: this.mutate,\n reset: this.reset\n };\n }\n #notify(action) {\n notifyManager.batch(() => {\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables;\n const onMutateResult = this.#currentResult.context;\n const context = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n if (action?.type === \"success\") {\n try {\n this.#mutateOptions.onSuccess?.(\n action.data,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n action.data,\n null,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n } else if (action?.type === \"error\") {\n try {\n this.#mutateOptions.onError?.(\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n void 0,\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n }\n }\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n });\n }\n};\nexport {\n MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options._type = \"infinite\";\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options._type = \"infinite\";\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n void 0\n);\nvar useQueryClient = (queryClient) => {\n const client = React.useContext(QueryClientContext);\n if (queryClient) {\n return queryClient;\n }\n if (!client) {\n throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n }\n return client;\n};\nvar QueryClientProvider = ({\n client,\n children\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n MutationObserver,\n noop,\n notifyManager,\n shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n const client = useQueryClient(queryClient);\n const [observer] = React.useState(\n () => new MutationObserver(\n client,\n options\n )\n );\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n const mutate = React.useCallback(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n },\n [observer]\n );\n if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n throw result.error;\n }\n return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n useMutation\n};\n//# sourceMappingURL=useMutation.js.map","\"use client\";import o,{forwardRef as fe,isValidElement as xt}from\"react\";import vt from\"react-dom\";import E from\"react\";var jt=n=>{switch(n){case\"success\":return ee;case\"info\":return ae;case\"warning\":return oe;case\"error\":return se;default:return null}},te=Array(12).fill(0),Yt=({visible:n,className:e})=>E.createElement(\"div\",{className:[\"sonner-loading-wrapper\",e].filter(Boolean).join(\" \"),\"data-visible\":n},E.createElement(\"div\",{className:\"sonner-spinner\"},te.map((t,a)=>E.createElement(\"div\",{className:\"sonner-loading-bar\",key:`spinner-bar-${a}`})))),ee=E.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\",fill:\"currentColor\",height:\"20\",width:\"20\"},E.createElement(\"path\",{fillRule:\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",clipRule:\"evenodd\"})),oe=E.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 24 24\",fill:\"currentColor\",height:\"20\",width:\"20\"},E.createElement(\"path\",{fillRule:\"evenodd\",d:\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",clipRule:\"evenodd\"})),ae=E.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\",fill:\"currentColor\",height:\"20\",width:\"20\"},E.createElement(\"path\",{fillRule:\"evenodd\",d:\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",clipRule:\"evenodd\"})),se=E.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\",fill:\"currentColor\",height:\"20\",width:\"20\"},E.createElement(\"path\",{fillRule:\"evenodd\",d:\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",clipRule:\"evenodd\"})),Ot=E.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"12\",height:\"12\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"},E.createElement(\"line\",{x1:\"18\",y1:\"6\",x2:\"6\",y2:\"18\"}),E.createElement(\"line\",{x1:\"6\",y1:\"6\",x2:\"18\",y2:\"18\"}));import $t from\"react\";var Ft=()=>{let[n,e]=$t.useState(document.hidden);return $t.useEffect(()=>{let t=()=>{e(document.hidden)};return document.addEventListener(\"visibilitychange\",t),()=>window.removeEventListener(\"visibilitychange\",t)},[]),n};import re from\"react\";var bt=1,yt=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)});this.publish=e=>{this.subscribers.forEach(t=>t(e))};this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]};this.create=e=>{var S;let{message:t,...a}=e,u=typeof(e==null?void 0:e.id)==\"number\"||((S=e.id)==null?void 0:S.length)>0?e.id:bt++,f=this.toasts.find(g=>g.id===u),w=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(u)&&this.dismissedToasts.delete(u),f?this.toasts=this.toasts.map(g=>g.id===u?(this.publish({...g,...e,id:u,title:t}),{...g,...e,id:u,dismissible:w,title:t}):g):this.addToast({title:t,...a,dismissible:w,id:u}),u};this.dismiss=e=>(this.dismissedToasts.add(e),e||this.toasts.forEach(t=>{this.subscribers.forEach(a=>a({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,dismiss:!0})),e);this.message=(e,t)=>this.create({...t,message:e});this.error=(e,t)=>this.create({...t,message:e,type:\"error\"});this.success=(e,t)=>this.create({...t,type:\"success\",message:e});this.info=(e,t)=>this.create({...t,type:\"info\",message:e});this.warning=(e,t)=>this.create({...t,type:\"warning\",message:e});this.loading=(e,t)=>this.create({...t,type:\"loading\",message:e});this.promise=(e,t)=>{if(!t)return;let a;t.loading!==void 0&&(a=this.create({...t,promise:e,type:\"loading\",message:t.loading,description:typeof t.description!=\"function\"?t.description:void 0}));let u=e instanceof Promise?e:e(),f=a!==void 0,w,S=u.then(async i=>{if(w=[\"resolve\",i],re.isValidElement(i))f=!1,this.create({id:a,type:\"default\",message:i});else if(ie(i)&&!i.ok){f=!1;let T=typeof t.error==\"function\"?await t.error(`HTTP error! status: ${i.status}`):t.error,F=typeof t.description==\"function\"?await t.description(`HTTP error! status: ${i.status}`):t.description;this.create({id:a,type:\"error\",message:T,description:F})}else if(t.success!==void 0){f=!1;let T=typeof t.success==\"function\"?await t.success(i):t.success,F=typeof t.description==\"function\"?await t.description(i):t.description;this.create({id:a,type:\"success\",message:T,description:F})}}).catch(async i=>{if(w=[\"reject\",i],t.error!==void 0){f=!1;let D=typeof t.error==\"function\"?await t.error(i):t.error,T=typeof t.description==\"function\"?await t.description(i):t.description;this.create({id:a,type:\"error\",message:D,description:T})}}).finally(()=>{var i;f&&(this.dismiss(a),a=void 0),(i=t.finally)==null||i.call(t)}),g=()=>new Promise((i,D)=>S.then(()=>w[0]===\"reject\"?D(w[1]):i(w[1])).catch(D));return typeof a!=\"string\"&&typeof a!=\"number\"?{unwrap:g}:Object.assign(a,{unwrap:g})};this.custom=(e,t)=>{let a=(t==null?void 0:t.id)||bt++;return this.create({jsx:e(a),id:a,...t}),a};this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id));this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},v=new yt,ne=(n,e)=>{let t=(e==null?void 0:e.id)||bt++;return v.addToast({title:n,...e,id:t}),t},ie=n=>n&&typeof n==\"object\"&&\"ok\"in n&&typeof n.ok==\"boolean\"&&\"status\"in n&&typeof n.status==\"number\",le=ne,ce=()=>v.toasts,de=()=>v.getActiveToasts(),ue=Object.assign(le,{success:v.success,info:v.info,warning:v.warning,error:v.error,custom:v.custom,message:v.message,promise:v.promise,dismiss:v.dismiss,loading:v.loading},{getHistory:ce,getToasts:de});function wt(n,{insertAt:e}={}){if(!n||typeof document==\"undefined\")return;let t=document.head||document.getElementsByTagName(\"head\")[0],a=document.createElement(\"style\");a.type=\"text/css\",e===\"top\"&&t.firstChild?t.insertBefore(a,t.firstChild):t.appendChild(a),a.styleSheet?a.styleSheet.cssText=n:a.appendChild(document.createTextNode(n))}wt(`:where(html[dir=\"ltr\"]),:where([data-sonner-toaster][dir=\"ltr\"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir=\"rtl\"]),:where([data-sonner-toaster][dir=\"rtl\"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted=\"true\"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted=\"true\"]){transform:none}}:where([data-sonner-toaster][data-x-position=\"right\"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position=\"left\"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position=\"center\"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position=\"top\"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position=\"bottom\"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled=\"true\"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position=\"top\"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position=\"bottom\"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise=\"true\"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme=\"dark\"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled=\"true\"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping=\"true\"]):before{content:\"\";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position=\"top\"][data-swiping=\"true\"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position=\"bottom\"][data-swiping=\"true\"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping=\"false\"][data-removed=\"true\"]):before{content:\"\";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:\"\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted=\"true\"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded=\"false\"][data-front=\"false\"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded=\"false\"][data-front=\"false\"][data-styled=\"true\"])>*{opacity:0}:where([data-sonner-toast][data-visible=\"false\"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted=\"true\"][data-expanded=\"true\"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"true\"][data-swipe-out=\"false\"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"false\"][data-swipe-out=\"false\"][data-expanded=\"true\"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"false\"][data-swipe-out=\"false\"][data-expanded=\"false\"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"false\"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\n`);function tt(n){return n.label!==void 0}var pe=3,me=\"32px\",ge=\"16px\",Wt=4e3,he=356,be=14,ye=20,we=200;function M(...n){return n.filter(Boolean).join(\" \")}function xe(n){let[e,t]=n.split(\"-\"),a=[];return e&&a.push(e),t&&a.push(t),a}var ve=n=>{var Dt,Pt,Nt,Bt,Ct,kt,It,Mt,Ht,At,Lt;let{invert:e,toast:t,unstyled:a,interacting:u,setHeights:f,visibleToasts:w,heights:S,index:g,toasts:i,expanded:D,removeToast:T,defaultRichColors:F,closeButton:et,style:ut,cancelButtonStyle:ft,actionButtonStyle:l,className:ot=\"\",descriptionClassName:at=\"\",duration:X,position:st,gap:pt,loadingIcon:rt,expandByDefault:B,classNames:s,icons:P,closeButtonAriaLabel:nt=\"Close toast\",pauseWhenPageIsHidden:it}=n,[Y,C]=o.useState(null),[lt,J]=o.useState(null),[W,H]=o.useState(!1),[A,mt]=o.useState(!1),[L,z]=o.useState(!1),[ct,d]=o.useState(!1),[h,y]=o.useState(!1),[R,j]=o.useState(0),[p,_]=o.useState(0),O=o.useRef(t.duration||X||Wt),G=o.useRef(null),k=o.useRef(null),Vt=g===0,Ut=g+1<=w,N=t.type,V=t.dismissible!==!1,Kt=t.className||\"\",Xt=t.descriptionClassName||\"\",dt=o.useMemo(()=>S.findIndex(r=>r.toastId===t.id)||0,[S,t.id]),Jt=o.useMemo(()=>{var r;return(r=t.closeButton)!=null?r:et},[t.closeButton,et]),Tt=o.useMemo(()=>t.duration||X||Wt,[t.duration,X]),gt=o.useRef(0),U=o.useRef(0),St=o.useRef(0),K=o.useRef(null),[Gt,Qt]=st.split(\"-\"),Rt=o.useMemo(()=>S.reduce((r,m,c)=>c>=dt?r:r+m.height,0),[S,dt]),Et=Ft(),qt=t.invert||e,ht=N===\"loading\";U.current=o.useMemo(()=>dt*pt+Rt,[dt,Rt]),o.useEffect(()=>{O.current=Tt},[Tt]),o.useEffect(()=>{H(!0)},[]),o.useEffect(()=>{let r=k.current;if(r){let m=r.getBoundingClientRect().height;return _(m),f(c=>[{toastId:t.id,height:m,position:t.position},...c]),()=>f(c=>c.filter(b=>b.toastId!==t.id))}},[f,t.id]),o.useLayoutEffect(()=>{if(!W)return;let r=k.current,m=r.style.height;r.style.height=\"auto\";let c=r.getBoundingClientRect().height;r.style.height=m,_(c),f(b=>b.find(x=>x.toastId===t.id)?b.map(x=>x.toastId===t.id?{...x,height:c}:x):[{toastId:t.id,height:c,position:t.position},...b])},[W,t.title,t.description,f,t.id]);let $=o.useCallback(()=>{mt(!0),j(U.current),f(r=>r.filter(m=>m.toastId!==t.id)),setTimeout(()=>{T(t)},we)},[t,T,f,U]);o.useEffect(()=>{if(t.promise&&N===\"loading\"||t.duration===1/0||t.type===\"loading\")return;let r;return D||u||it&&Et?(()=>{if(St.current<gt.current){let b=new Date().getTime()-gt.current;O.current=O.current-b}St.current=new Date().getTime()})():(()=>{O.current!==1/0&&(gt.current=new Date().getTime(),r=setTimeout(()=>{var b;(b=t.onAutoClose)==null||b.call(t,t),$()},O.current))})(),()=>clearTimeout(r)},[D,u,t,N,it,Et,$]),o.useEffect(()=>{t.delete&&$()},[$,t.delete]);function Zt(){var r,m,c;return P!=null&&P.loading?o.createElement(\"div\",{className:M(s==null?void 0:s.loader,(r=t==null?void 0:t.classNames)==null?void 0:r.loader,\"sonner-loader\"),\"data-visible\":N===\"loading\"},P.loading):rt?o.createElement(\"div\",{className:M(s==null?void 0:s.loader,(m=t==null?void 0:t.classNames)==null?void 0:m.loader,\"sonner-loader\"),\"data-visible\":N===\"loading\"},rt):o.createElement(Yt,{className:M(s==null?void 0:s.loader,(c=t==null?void 0:t.classNames)==null?void 0:c.loader),visible:N===\"loading\"})}return o.createElement(\"li\",{tabIndex:0,ref:k,className:M(ot,Kt,s==null?void 0:s.toast,(Dt=t==null?void 0:t.classNames)==null?void 0:Dt.toast,s==null?void 0:s.default,s==null?void 0:s[N],(Pt=t==null?void 0:t.classNames)==null?void 0:Pt[N]),\"data-sonner-toast\":\"\",\"data-rich-colors\":(Nt=t.richColors)!=null?Nt:F,\"data-styled\":!(t.jsx||t.unstyled||a),\"data-mounted\":W,\"data-promise\":!!t.promise,\"data-swiped\":h,\"data-removed\":A,\"data-visible\":Ut,\"data-y-position\":Gt,\"data-x-position\":Qt,\"data-index\":g,\"data-front\":Vt,\"data-swiping\":L,\"data-dismissible\":V,\"data-type\":N,\"data-invert\":qt,\"data-swipe-out\":ct,\"data-swipe-direction\":lt,\"data-expanded\":!!(D||B&&W),style:{\"--index\":g,\"--toasts-before\":g,\"--z-index\":i.length-g,\"--offset\":`${A?R:U.current}px`,\"--initial-height\":B?\"auto\":`${p}px`,...ut,...t.style},onDragEnd:()=>{z(!1),C(null),K.current=null},onPointerDown:r=>{ht||!V||(G.current=new Date,j(U.current),r.target.setPointerCapture(r.pointerId),r.target.tagName!==\"BUTTON\"&&(z(!0),K.current={x:r.clientX,y:r.clientY}))},onPointerUp:()=>{var x,Q,q,Z;if(ct||!V)return;K.current=null;let r=Number(((x=k.current)==null?void 0:x.style.getPropertyValue(\"--swipe-amount-x\").replace(\"px\",\"\"))||0),m=Number(((Q=k.current)==null?void 0:Q.style.getPropertyValue(\"--swipe-amount-y\").replace(\"px\",\"\"))||0),c=new Date().getTime()-((q=G.current)==null?void 0:q.getTime()),b=Y===\"x\"?r:m,I=Math.abs(b)/c;if(Math.abs(b)>=ye||I>.11){j(U.current),(Z=t.onDismiss)==null||Z.call(t,t),J(Y===\"x\"?r>0?\"right\":\"left\":m>0?\"down\":\"up\"),$(),d(!0),y(!1);return}z(!1),C(null)},onPointerMove:r=>{var Q,q,Z,zt;if(!K.current||!V||((Q=window.getSelection())==null?void 0:Q.toString().length)>0)return;let c=r.clientY-K.current.y,b=r.clientX-K.current.x,I=(q=n.swipeDirections)!=null?q:xe(st);!Y&&(Math.abs(b)>1||Math.abs(c)>1)&&C(Math.abs(b)>Math.abs(c)?\"x\":\"y\");let x={x:0,y:0};Y===\"y\"?(I.includes(\"top\")||I.includes(\"bottom\"))&&(I.includes(\"top\")&&c<0||I.includes(\"bottom\")&&c>0)&&(x.y=c):Y===\"x\"&&(I.includes(\"left\")||I.includes(\"right\"))&&(I.includes(\"left\")&&b<0||I.includes(\"right\")&&b>0)&&(x.x=b),(Math.abs(x.x)>0||Math.abs(x.y)>0)&&y(!0),(Z=k.current)==null||Z.style.setProperty(\"--swipe-amount-x\",`${x.x}px`),(zt=k.current)==null||zt.style.setProperty(\"--swipe-amount-y\",`${x.y}px`)}},Jt&&!t.jsx?o.createElement(\"button\",{\"aria-label\":nt,\"data-disabled\":ht,\"data-close-button\":!0,onClick:ht||!V?()=>{}:()=>{var r;$(),(r=t.onDismiss)==null||r.call(t,t)},className:M(s==null?void 0:s.closeButton,(Bt=t==null?void 0:t.classNames)==null?void 0:Bt.closeButton)},(Ct=P==null?void 0:P.close)!=null?Ct:Ot):null,t.jsx||xt(t.title)?t.jsx?t.jsx:typeof t.title==\"function\"?t.title():t.title:o.createElement(o.Fragment,null,N||t.icon||t.promise?o.createElement(\"div\",{\"data-icon\":\"\",className:M(s==null?void 0:s.icon,(kt=t==null?void 0:t.classNames)==null?void 0:kt.icon)},t.promise||t.type===\"loading\"&&!t.icon?t.icon||Zt():null,t.type!==\"loading\"?t.icon||(P==null?void 0:P[N])||jt(N):null):null,o.createElement(\"div\",{\"data-content\":\"\",className:M(s==null?void 0:s.content,(It=t==null?void 0:t.classNames)==null?void 0:It.content)},o.createElement(\"div\",{\"data-title\":\"\",className:M(s==null?void 0:s.title,(Mt=t==null?void 0:t.classNames)==null?void 0:Mt.title)},typeof t.title==\"function\"?t.title():t.title),t.description?o.createElement(\"div\",{\"data-description\":\"\",className:M(at,Xt,s==null?void 0:s.description,(Ht=t==null?void 0:t.classNames)==null?void 0:Ht.description)},typeof t.description==\"function\"?t.description():t.description):null),xt(t.cancel)?t.cancel:t.cancel&&tt(t.cancel)?o.createElement(\"button\",{\"data-button\":!0,\"data-cancel\":!0,style:t.cancelButtonStyle||ft,onClick:r=>{var m,c;tt(t.cancel)&&V&&((c=(m=t.cancel).onClick)==null||c.call(m,r),$())},className:M(s==null?void 0:s.cancelButton,(At=t==null?void 0:t.classNames)==null?void 0:At.cancelButton)},t.cancel.label):null,xt(t.action)?t.action:t.action&&tt(t.action)?o.createElement(\"button\",{\"data-button\":!0,\"data-action\":!0,style:t.actionButtonStyle||l,onClick:r=>{var m,c;tt(t.action)&&((c=(m=t.action).onClick)==null||c.call(m,r),!r.defaultPrevented&&$())},className:M(s==null?void 0:s.actionButton,(Lt=t==null?void 0:t.classNames)==null?void 0:Lt.actionButton)},t.action.label):null))};function _t(){if(typeof window==\"undefined\"||typeof document==\"undefined\")return\"ltr\";let n=document.documentElement.getAttribute(\"dir\");return n===\"auto\"||!n?window.getComputedStyle(document.documentElement).direction:n}function Te(n,e){let t={};return[n,e].forEach((a,u)=>{let f=u===1,w=f?\"--mobile-offset\":\"--offset\",S=f?ge:me;function g(i){[\"top\",\"right\",\"bottom\",\"left\"].forEach(D=>{t[`${w}-${D}`]=typeof i==\"number\"?`${i}px`:i})}typeof a==\"number\"||typeof a==\"string\"?g(a):typeof a==\"object\"?[\"top\",\"right\",\"bottom\",\"left\"].forEach(i=>{a[i]===void 0?t[`${w}-${i}`]=S:t[`${w}-${i}`]=typeof a[i]==\"number\"?`${a[i]}px`:a[i]}):g(S)}),t}function Oe(){let[n,e]=o.useState([]);return o.useEffect(()=>v.subscribe(t=>{if(t.dismiss){setTimeout(()=>{vt.flushSync(()=>{e(a=>a.filter(u=>u.id!==t.id))})});return}setTimeout(()=>{vt.flushSync(()=>{e(a=>{let u=a.findIndex(f=>f.id===t.id);return u!==-1?[...a.slice(0,u),{...a[u],...t},...a.slice(u+1)]:[t,...a]})})})}),[]),{toasts:n}}var $e=fe(function(e,t){let{invert:a,position:u=\"bottom-right\",hotkey:f=[\"altKey\",\"KeyT\"],expand:w,closeButton:S,className:g,offset:i,mobileOffset:D,theme:T=\"light\",richColors:F,duration:et,style:ut,visibleToasts:ft=pe,toastOptions:l,dir:ot=_t(),gap:at=be,loadingIcon:X,icons:st,containerAriaLabel:pt=\"Notifications\",pauseWhenPageIsHidden:rt}=e,[B,s]=o.useState([]),P=o.useMemo(()=>Array.from(new Set([u].concat(B.filter(d=>d.position).map(d=>d.position)))),[B,u]),[nt,it]=o.useState([]),[Y,C]=o.useState(!1),[lt,J]=o.useState(!1),[W,H]=o.useState(T!==\"system\"?T:typeof window!=\"undefined\"&&window.matchMedia&&window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\"),A=o.useRef(null),mt=f.join(\"+\").replace(/Key/g,\"\").replace(/Digit/g,\"\"),L=o.useRef(null),z=o.useRef(!1),ct=o.useCallback(d=>{s(h=>{var y;return(y=h.find(R=>R.id===d.id))!=null&&y.delete||v.dismiss(d.id),h.filter(({id:R})=>R!==d.id)})},[]);return o.useEffect(()=>v.subscribe(d=>{if(d.dismiss){s(h=>h.map(y=>y.id===d.id?{...y,delete:!0}:y));return}setTimeout(()=>{vt.flushSync(()=>{s(h=>{let y=h.findIndex(R=>R.id===d.id);return y!==-1?[...h.slice(0,y),{...h[y],...d},...h.slice(y+1)]:[d,...h]})})})}),[]),o.useEffect(()=>{if(T!==\"system\"){H(T);return}if(T===\"system\"&&(window.matchMedia&&window.matchMedia(\"(prefers-color-scheme: dark)\").matches?H(\"dark\"):H(\"light\")),typeof window==\"undefined\")return;let d=window.matchMedia(\"(prefers-color-scheme: dark)\");try{d.addEventListener(\"change\",({matches:h})=>{H(h?\"dark\":\"light\")})}catch(h){d.addListener(({matches:y})=>{try{H(y?\"dark\":\"light\")}catch(R){console.error(R)}})}},[T]),o.useEffect(()=>{B.length<=1&&C(!1)},[B]),o.useEffect(()=>{let d=h=>{var R,j;f.every(p=>h[p]||h.code===p)&&(C(!0),(R=A.current)==null||R.focus()),h.code===\"Escape\"&&(document.activeElement===A.current||(j=A.current)!=null&&j.contains(document.activeElement))&&C(!1)};return document.addEventListener(\"keydown\",d),()=>document.removeEventListener(\"keydown\",d)},[f]),o.useEffect(()=>{if(A.current)return()=>{L.current&&(L.current.focus({preventScroll:!0}),L.current=null,z.current=!1)}},[A.current]),o.createElement(\"section\",{ref:t,\"aria-label\":`${pt} ${mt}`,tabIndex:-1,\"aria-live\":\"polite\",\"aria-relevant\":\"additions text\",\"aria-atomic\":\"false\",suppressHydrationWarning:!0},P.map((d,h)=>{var j;let[y,R]=d.split(\"-\");return B.length?o.createElement(\"ol\",{key:d,dir:ot===\"auto\"?_t():ot,tabIndex:-1,ref:A,className:g,\"data-sonner-toaster\":!0,\"data-theme\":W,\"data-y-position\":y,\"data-lifted\":Y&&B.length>1&&!w,\"data-x-position\":R,style:{\"--front-toast-height\":`${((j=nt[0])==null?void 0:j.height)||0}px`,\"--width\":`${he}px`,\"--gap\":`${at}px`,...ut,...Te(i,D)},onBlur:p=>{z.current&&!p.currentTarget.contains(p.relatedTarget)&&(z.current=!1,L.current&&(L.current.focus({preventScroll:!0}),L.current=null))},onFocus:p=>{p.target instanceof HTMLElement&&p.target.dataset.dismissible===\"false\"||z.current||(z.current=!0,L.current=p.relatedTarget)},onMouseEnter:()=>C(!0),onMouseMove:()=>C(!0),onMouseLeave:()=>{lt||C(!1)},onDragEnd:()=>C(!1),onPointerDown:p=>{p.target instanceof HTMLElement&&p.target.dataset.dismissible===\"false\"||J(!0)},onPointerUp:()=>J(!1)},B.filter(p=>!p.position&&h===0||p.position===d).map((p,_)=>{var O,G;return o.createElement(ve,{key:p.id,icons:st,index:_,toast:p,defaultRichColors:F,duration:(O=l==null?void 0:l.duration)!=null?O:et,className:l==null?void 0:l.className,descriptionClassName:l==null?void 0:l.descriptionClassName,invert:a,visibleToasts:ft,closeButton:(G=l==null?void 0:l.closeButton)!=null?G:S,interacting:lt,position:d,style:l==null?void 0:l.style,unstyled:l==null?void 0:l.unstyled,classNames:l==null?void 0:l.classNames,cancelButtonStyle:l==null?void 0:l.cancelButtonStyle,actionButtonStyle:l==null?void 0:l.actionButtonStyle,removeToast:ct,toasts:B.filter(k=>k.position==p.position),heights:nt.filter(k=>k.position==p.position),setHeights:it,expandByDefault:w,gap:at,loadingIcon:X,expanded:Y,pauseWhenPageIsHidden:rt,swipeDirections:e.swipeDirections})})):null}))});export{$e as Toaster,ue as toast,Oe as useSonner};\n//# sourceMappingURL=index.mjs.map","/**\n * lib/api/client.ts — single fetch wrapper every endpoints.ts function\n * calls. PR-3 ships the minimum viable shape (Bearer injection,\n * JSON-or-text handling, ApiError throw on non-2xx). PR-4 layers on\n * 401 redirect-to-login + a more nuanced error-code mapper that\n * react-i18next consumes.\n *\n * Mobile-aware: we never await Response.text() when the response is a\n * stream — sonner toasts won't appear on phones until the fetch\n * resolves, and big bodies on a flaky 4G can take forever otherwise.\n */\n\nimport type { ApiError } from '@/types/api'\n\nconst TOKEN_STORAGE_KEY = 'agim_token'\n\n/**\n * RequestOptions intentionally accepts a loose `query` shape so the\n * generated endpoints.ts can pass typed-interface query objects\n * (e.g. ListJobsQuery) without exact-type-friendly index signatures.\n * `buildQueryString` coerces every value to a string at runtime.\n */\n/**\n * RequestOptions.query is declared as `object | undefined` (not the\n * more obvious `Record<string, ...>`) so the generated endpoints.ts\n * can pass a typed-interface query value (`ListJobsQuery`,\n * `ListMemoryFactsQuery`, etc.) directly. TypeScript treats interfaces\n * without an explicit index signature as *not* assignable to\n * `Record<string, unknown>`; `object` is the looser bound that\n * accommodates both shapes. `buildQueryString` runtime-iterates over\n * the entries, so the type loosening is purely a compile-time\n * concession.\n */\nexport interface RequestOptions {\n query?: object | undefined\n body?: unknown\n headers?: Record<string, string>\n signal?: AbortSignal\n}\n\nfunction buildQueryString(q: RequestOptions['query']): string {\n if (!q) return ''\n const parts: string[] = []\n for (const [k, v] of Object.entries(q as Record<string, unknown>)) {\n if (v === undefined || v === null || v === '') continue\n if (typeof v === 'boolean') {\n parts.push(`${encodeURIComponent(k)}=${v ? '1' : '0'}`)\n continue\n }\n parts.push(`${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n }\n return parts.length ? `?${parts.join('&')}` : ''\n}\n\nfunction getStoredToken(): string | null {\n try {\n return localStorage.getItem(TOKEN_STORAGE_KEY)\n } catch {\n return null\n }\n}\n\nasync function request<T>(\n method: string,\n path: string,\n opts: RequestOptions = {},\n): Promise<T> {\n const url = path + buildQueryString(opts.query)\n const headers: Record<string, string> = { ...(opts.headers ?? {}) }\n const tok = getStoredToken()\n if (tok && !headers.Authorization) {\n headers.Authorization = `Bearer ${tok}`\n }\n let body: BodyInit | undefined\n if (opts.body !== undefined && opts.body !== null) {\n if (opts.body instanceof FormData || typeof opts.body === 'string') {\n body = opts.body\n } else {\n headers['Content-Type'] = headers['Content-Type'] ?? 'application/json'\n body = JSON.stringify(opts.body)\n }\n }\n\n let res: Response\n try {\n res = await fetch(url, {\n method,\n headers,\n body,\n credentials: 'same-origin',\n signal: opts.signal,\n })\n } catch (err) {\n // Network failure (offline, DNS, aborted by user). Surface as\n // ApiError so the QueryClient onError handler can toast it\n // uniformly with HTTP errors. PR-4 wires the toast.\n const message = err instanceof Error ? err.message : String(err)\n throw new ApiClientError({\n code: 'NETWORK',\n message,\n status: 0,\n })\n }\n\n if (res.status === 204) {\n return undefined as T\n }\n\n const ct = res.headers.get('content-type') || ''\n const isJson = ct.includes('application/json')\n\n if (!res.ok) {\n let code = `HTTP_${res.status}`\n let message = res.statusText\n let hadExplicitCode = false\n if (isJson) {\n try {\n const body = (await res.json()) as { error?: string; code?: string }\n if (body.error) message = body.error\n if (body.code) {\n code = body.code\n hadExplicitCode = true\n }\n } catch {\n /* keep default */\n }\n }\n // Map common HTTP status → stable codes the i18n table covers.\n // Only apply when the backend didn't send an explicit `code` —\n // forward-compat for when agim's server returns machine codes\n // (independent PR; see plan deferred item).\n if (!hadExplicitCode) {\n if (res.status === 401) code = 'AUTH_INVALID'\n if (res.status === 403) code = 'FORBIDDEN'\n if (res.status === 404) code = 'NOT_FOUND'\n if (res.status === 413) code = 'PAYLOAD_TOO_LARGE'\n }\n if (res.status === 401 && !path.startsWith('/api/auth/')) {\n // Token missing / invalid / expired → kick the user to /login.\n // Skip when the failing call IS the auth endpoint, otherwise we\n // loop on a fresh invalid-token submission.\n try { localStorage.removeItem(TOKEN_STORAGE_KEY) } catch { /* private mode */ }\n const next = encodeURIComponent(location.pathname + location.search)\n // Only redirect from non-login pages to avoid loops with\n // pre-mount fetches against the auth endpoint itself.\n if (!location.pathname.startsWith('/login')) {\n location.href = `/login?next=${next}`\n }\n }\n throw new ApiClientError({ code, message, status: res.status })\n }\n\n if (isJson) {\n return (await res.json()) as T\n }\n // Fall back to text for non-JSON 2xx (e.g. /api/memory/export).\n return (await res.text()) as unknown as T\n}\n\n/**\n * ApiClientError carries the structured error shape every consumer\n * (react-query onError, toast subscriber, error boundary) expects.\n * Throw via `throw new ApiClientError(...)`; catch in QueryClient's\n * defaultOptions.queries.onError (PR-4).\n */\nexport class ApiClientError extends Error implements ApiError {\n code: string\n status: number\n constructor(spec: ApiError) {\n super(spec.message)\n this.name = 'ApiClientError'\n this.code = spec.code\n this.status = spec.status\n }\n}\n\nexport const client = {\n get: <T>(path: string, opts?: RequestOptions): Promise<T> => request<T>('GET', path, opts),\n post: <T>(path: string, opts?: RequestOptions): Promise<T> => request<T>('POST', path, opts),\n put: <T>(path: string, opts?: RequestOptions): Promise<T> => request<T>('PUT', path, opts),\n patch: <T>(path: string, opts?: RequestOptions): Promise<T> => request<T>('PATCH', path, opts),\n delete: <T>(path: string, opts?: RequestOptions): Promise<T> => request<T>('DELETE', path, opts),\n}\n\n/** Test-only — drop the saved token without bouncing through localStorage exceptions. */\nexport function _clearStoredToken(): void {\n try { localStorage.removeItem(TOKEN_STORAGE_KEY) } catch { /* private mode */ }\n}\n","/* eslint-disable */\n/**\n * GENERATED by tools/gen-endpoints.mjs — DO NOT EDIT BY HAND.\n * Source: tools/endpoints.json (regenerate with\n * `node tools/extract-endpoints.mjs && node tools/gen-endpoints.mjs`).\n *\n * One thin function per backend REST endpoint. Functions live on the\n * exported `api` object so consumers `import { api } from \"@/lib/api/endpoints\"`\n * and call `api.listJobs(...)`. Hooks in src/hooks/ wrap these in\n * react-query useQuery / useMutation. The wrapper itself is in\n * lib/api/client.ts and centralizes auth + error handling.\n */\n\nimport { client } from './client'\nimport type {\n A2AStats,\n ACPDiscoverBody,\n ACPDiscoverResponse,\n ACPTestBody,\n ACPTestResponse,\n AppConfig,\n EmailTestResponse,\n ViewerTunnelStatusResponse,\n AddAdminBody,\n AdminAllowlistResponse,\n AdminMutationResponse,\n AuditResponse,\n BatchJobBody,\n EnvResponse,\n RemoveAdminBody,\n WechatQrStartResponse,\n WechatQrStatusResponse,\n WorkspaceConfig,\n ServiceActionResponse,\n ServiceStatus,\n UpdateEnvBody,\n CreateJobBody,\n CreateJobResponse,\n HealthSummary,\n ListA2ARecentQuery,\n ListA2ARecentResponse,\n ListApprovalsResponse,\n ListAuditQuery,\n TopNDim,\n TopNMetric,\n ResolveApprovalBody,\n ResolveApprovalResponse,\n CancelReminderResponse,\n ConsolidateMemoryResponse,\n ConsolidateStatusResponse,\n DeleteMemoResponse,\n ListBgjobsQuery,\n ListBgjobsResponse,\n ListSkillsResponse,\n RemoteHotSkillsResponse,\n SkillDetail,\n VectorActionResponse,\n VectorClearResponse,\n VectorTestResponse,\n WorkspaceFilesResponse,\n WriteWorkspaceFileBody,\n WriteWorkspaceFileResponse,\n ListJobsQuery,\n ListJobsResponse,\n DeleteMemoryFactsBody,\n DeleteMemoryFactsResponse,\n ListMemoryFactsQuery,\n ListMemoryFactsResponse,\n ListMemoryUsersResponse,\n ListMemosQuery,\n ListMemosResponse,\n ListOutboxQuery,\n ListOutboxResponse,\n ListRemindersQuery,\n ListRemindersResponse,\n ListSchedulesQuery,\n ListSchedulesResponse,\n ListSubtasksQuery,\n ListSubtasksResponse,\n LoginBody,\n LoginResponse,\n OkResponse,\n OutboxRetryResponse,\n OutboxStats,\n Persona,\n SnoozeReminderBody,\n SnoozeReminderResponse,\n TopNResponse,\n UpdatePersonaBody,\n VectorStatus,\n} from '@/types/api'\n\nexport const api = {\n /** GET /api/a2a/recent */\n getA2ARecent: (query: ListA2ARecentQuery) =>\n client.get<ListA2ARecentResponse>('/api/a2a/recent', { query }),\n\n /** GET /api/a2a/stats */\n getA2AStats: () =>\n client.get<A2AStats>('/api/a2a/stats'),\n\n /** DELETE /api/admin-allowlist */\n removeAdminAllowlist: (body: RemoveAdminBody) =>\n client.delete<AdminMutationResponse>('/api/admin-allowlist', { body }),\n\n /** GET /api/admin-allowlist */\n listAdminAllowlist: () =>\n client.get<AdminAllowlistResponse>('/api/admin-allowlist'),\n\n /** POST /api/admin-allowlist */\n addAdminAllowlist: (body: AddAdminBody) =>\n client.post<AdminMutationResponse>('/api/admin-allowlist', { body }),\n\n /** GET /api/agent-health */\n getAgentHealth: (opts?: { query?: Record<string, string | number | boolean | undefined> }) =>\n client.get<unknown>('/api/agent-health', opts),\n\n /** POST /api/agents/acp/discover — probe a `<baseUrl>/.well-known/acp`\n * document. With `register: true` the server also hot-loads the\n * discovered agents into the in-memory registry; persisting them\n * across restarts still requires PUT /api/config { acpAgents }. */\n discoverAcpAgents: (body: ACPDiscoverBody) =>\n client.post<ACPDiscoverResponse>('/api/agents/acp/discover', { body }),\n\n /** POST /api/agents/acp/test — probe a single agent endpoint by\n * fetching its `/agent/card` manifest. Used by the \"Test\" buttons\n * in /settings/agents to validate an ACP entry before saving. */\n testAcpAgent: (body: ACPTestBody) =>\n client.post<ACPTestResponse>('/api/agents/acp/test', { body }),\n\n /** POST /api/messengers/email/test — run nodemailer.verify() against\n * the SMTP creds currently in process.env. No mail is sent. Operators\n * fill the form, Save (PUT /api/env), then click Test. */\n testEmail: () =>\n client.post<EmailTestResponse>('/api/messengers/email/test'),\n\n /** GET /api/agents/status — agent name → online boolean map */\n getAgentsStatus: () =>\n client.get<Record<string, boolean>>('/api/agents/status'),\n\n /** GET /api/approvals */\n listApprovals: () =>\n client.get<ListApprovalsResponse>('/api/approvals'),\n\n /** POST /api/approvals/:reqId/resolve */\n resolveApproval: (reqId: string, body: ResolveApprovalBody) =>\n client.post<ResolveApprovalResponse>(`/api/approvals/${encodeURIComponent(reqId)}/resolve`, { body }),\n\n /** GET /api/audit */\n getAudit: (query: ListAuditQuery) =>\n client.get<AuditResponse>('/api/audit', { query }),\n\n /** POST /api/auth/login (public) */\n login: (body: LoginBody) =>\n client.post<LoginResponse>('/api/auth/login', { body }),\n\n /** POST /api/auth/logout */\n logout: (opts?: { body?: unknown }) =>\n client.post<OkResponse>('/api/auth/logout', opts),\n\n /** GET /api/bgjobs */\n listBgJobs: (query: ListBgjobsQuery) =>\n client.get<ListBgjobsResponse>('/api/bgjobs', { query }),\n\n /** GET /api/config */\n getConfig: () =>\n client.get<AppConfig>('/api/config'),\n\n /** PUT /api/config */\n updateConfig: (body: Partial<AppConfig>) =>\n client.put<AppConfig>('/api/config', { body }),\n\n /** GET /api/workspaces — summary shape by default; pass full: true\n * for the editor (returns members array, not count). */\n listWorkspacesFull: () =>\n client.get<{ workspaces: WorkspaceConfig[] }>('/api/workspaces', { query: { full: true } }),\n\n /** POST /api/workspaces — upsert a workspace; backend wipes\n * members === [] to \"open\" workspace. */\n upsertWorkspace: (body: WorkspaceConfig) =>\n client.post<{ ok: boolean; workspace: WorkspaceConfig }>('/api/workspaces', { body }),\n\n /** POST /api/messengers/wechat/qr-start — start the WeChat\n * login QR session. Returns a PNG data: URL of the QR + a\n * token to poll status with. */\n startWechatQr: () =>\n client.post<WechatQrStartResponse>('/api/messengers/wechat/qr-start'),\n\n /** GET /api/messengers/wechat/qr-status?token=… — poll for\n * status. Server persists wechat-ilink to config on `confirmed`. */\n getWechatQrStatus: (query: { token: string }) =>\n client.get<WechatQrStatusResponse>('/api/messengers/wechat/qr-status', { query }),\n\n /** GET /api/env */\n getEnv: (query: { reveal?: boolean }) =>\n client.get<EnvResponse>('/api/env', { query }),\n\n /** PUT /api/env */\n updateEnv: (body: UpdateEnvBody) =>\n client.put<EnvResponse>('/api/env', { body }),\n\n /** GET /api/health (public) */\n getHealth: (opts?: { query?: Record<string, string | number | boolean | undefined> }) =>\n client.get<{ status: string }>('/api/health', opts),\n\n /** GET /api/health/summary */\n getHealthSummary: (query: { days?: number }) =>\n client.get<HealthSummary>('/api/health/summary', { query }),\n\n /** GET /api/health/topn */\n getHealthTopN: (query: { dim: TopNDim; by: TopNMetric; days?: number; limit?: number }) =>\n client.get<TopNResponse>('/api/health/topn', { query }),\n\n /** POST /api/invoke */\n invoke: (opts?: { body?: unknown }) =>\n client.post<unknown>('/api/invoke', opts),\n\n /** GET /api/jobs */\n listJobs: (query: ListJobsQuery) =>\n client.get<ListJobsResponse>('/api/jobs', { query }),\n\n /** POST /api/jobs */\n createJob: (body: CreateJobBody) =>\n client.post<CreateJobResponse>('/api/jobs', { body }),\n\n /** POST /api/jobs/batch-cancel */\n batchCancelJobs: (body: BatchJobBody) =>\n client.post<OkResponse>('/api/jobs/batch-cancel', { body }),\n\n /** POST /api/jobs/batch-run */\n batchRunJobs: (body: BatchJobBody) =>\n client.post<OkResponse>('/api/jobs/batch-run', { body }),\n\n /** POST /api/loc (public) */\n submitLoc: (opts?: { body?: unknown }) =>\n client.post<unknown>('/api/loc', opts),\n\n /** GET /api/loc/info (public) */\n getLocInfo: (opts?: { query?: Record<string, string | number | boolean | undefined> }) =>\n client.get<unknown>('/api/loc/info', opts),\n\n /** POST /api/memory/consolidate */\n consolidateMemory: () =>\n client.post<ConsolidateMemoryResponse>('/api/memory/consolidate'),\n\n /** GET /api/memory/consolidate/status */\n getMemoryConsolidateStatus: () =>\n client.get<ConsolidateStatusResponse>('/api/memory/consolidate/status'),\n\n /** GET /api/memory/export */\n exportMemory: (opts?: { query?: Record<string, string | number | boolean | undefined> }) =>\n client.get<unknown>('/api/memory/export', opts),\n\n /** DELETE /api/memory/facts (bulk; body specifies ids / category /\n * max_confidence / confirm_clear). */\n deleteMemoryFacts: (query: { user_key: string }, body: DeleteMemoryFactsBody) =>\n client.delete<DeleteMemoryFactsResponse>('/api/memory/facts', { query, body }),\n\n /** DELETE /api/memory/facts/:id (single-fact delete; user_key in query). */\n deleteMemoryFactById: (id: number, query: { user_key: string }) =>\n client.delete<OkResponse & { id: number }>(`/api/memory/facts/${id}`, { query }),\n\n /** GET /api/memory/facts */\n listMemoryFacts: (query: ListMemoryFactsQuery) =>\n client.get<ListMemoryFactsResponse>('/api/memory/facts', { query }),\n\n /** DELETE /api/memory/persona */\n deleteMemoryPersona: (query: { user_key: string }) =>\n client.delete<{ ok: boolean }>('/api/memory/persona', { query }),\n\n /** GET /api/memory/persona */\n getMemoryPersona: (query: { user_key: string }) =>\n client.get<Persona>('/api/memory/persona', { query }),\n\n /** PUT /api/memory/persona */\n updateMemoryPersona: (query: { user_key: string }, body: UpdatePersonaBody) =>\n client.put<{ ok: boolean }>('/api/memory/persona', { query, body }),\n\n /** GET /api/memory/users */\n listMemoryUsers: () =>\n client.get<ListMemoryUsersResponse>('/api/memory/users'),\n\n /** POST /api/memory/vector/backfill */\n backfillMemoryVector: (query: { user_key?: string }, body?: { max_rows?: number }) =>\n client.post<VectorActionResponse>('/api/memory/vector/backfill', { query, body }),\n\n /** POST /api/memory/vector/clear */\n clearMemoryVector: (query: { user_key?: string }) =>\n client.post<VectorClearResponse>('/api/memory/vector/clear', { query }),\n\n /** POST /api/memory/vector/download */\n downloadMemoryVector: () =>\n client.post<VectorActionResponse>('/api/memory/vector/download'),\n\n /** GET /api/memory/vector/status */\n getMemoryVectorStatus: (query: { user_key?: string }) =>\n client.get<VectorStatus>('/api/memory/vector/status', { query }),\n\n /** POST /api/memory/vector/test */\n testMemoryVector: () =>\n client.post<VectorTestResponse>('/api/memory/vector/test'),\n\n /** GET /api/memos */\n listMemos: (query: ListMemosQuery) =>\n client.get<ListMemosResponse>('/api/memos', { query }),\n\n /** DELETE /api/memos/:id */\n deleteMemo: (id: number) =>\n client.delete<DeleteMemoResponse>(`/api/memos/${id}`),\n\n // (WeChat QR start + status are defined earlier with typed responses.)\n\n /** GET /api/metrics */\n getMetrics: (opts?: { query?: Record<string, string | number | boolean | undefined> }) =>\n client.get<unknown>('/api/metrics', opts),\n\n /** POST /api/notify */\n notify: (opts?: { body?: unknown }) =>\n client.post<unknown>('/api/notify', opts),\n\n /** GET /api/outbox */\n listOutbox: (query: ListOutboxQuery) =>\n client.get<ListOutboxResponse>('/api/outbox', { query }),\n\n /** GET /api/outbox/stats */\n getOutboxStats: () =>\n client.get<OutboxStats>('/api/outbox/stats'),\n\n /** POST /api/outbox/:id/retry */\n retryOutbox: (id: number) =>\n client.post<OutboxRetryResponse>(`/api/outbox/${id}/retry`),\n\n /** GET /api/reminders */\n listReminders: (query: ListRemindersQuery) =>\n client.get<ListRemindersResponse>('/api/reminders', { query }),\n\n /** POST /api/reminders/:id/cancel */\n cancelReminder: (id: number) =>\n client.post<CancelReminderResponse>(`/api/reminders/${id}/cancel`),\n\n /** POST /api/reminders/:id/snooze */\n snoozeReminder: (id: number, body: SnoozeReminderBody) =>\n client.post<SnoozeReminderResponse>(`/api/reminders/${id}/snooze`, { body }),\n\n /** GET /api/schedules */\n listSchedules: (query: ListSchedulesQuery) =>\n client.get<ListSchedulesResponse>('/api/schedules', { query }),\n\n /** POST /api/service/restart */\n restartService: () =>\n client.post<ServiceActionResponse>('/api/service/restart'),\n\n /** POST /api/service/start */\n startService: () =>\n client.post<ServiceActionResponse>('/api/service/start'),\n\n /** GET /api/service/status */\n getServiceStatus: () =>\n client.get<ServiceStatus>('/api/service/status'),\n\n /** POST /api/service/stop */\n stopService: () =>\n client.post<ServiceActionResponse>('/api/service/stop'),\n\n /** GET /api/skills */\n listSkills: () =>\n client.get<ListSkillsResponse>('/api/skills'),\n\n /** GET /api/skills/:slug */\n getSkillDetail: (slug: string) =>\n client.get<SkillDetail>(`/api/skills/${encodeURIComponent(slug)}`),\n\n /** GET /api/skills/remote/hot — proxy to skillhub.cn with 5min\n * server cache. Per-entry fields are optional in case the upstream\n * shape changes. */\n getSkillsRemoteHot: () =>\n client.get<RemoteHotSkillsResponse>('/api/skills/remote/hot'),\n\n /** GET /api/subtasks */\n listSubtasks: (query: ListSubtasksQuery) =>\n client.get<ListSubtasksResponse>('/api/subtasks', { query }),\n\n /** GET /api/viewer */\n listViewerPastes: (opts?: { query?: Record<string, string | number | boolean | undefined> }) =>\n client.get<unknown>('/api/viewer', opts),\n\n /** GET /api/viewer/tunnel — combined viewer config + cloudflared\n * tunnel state (running, URL, binary location, last error). The UI\n * polls this card whenever the operator clicks Refresh. */\n getViewerTunnel: () =>\n client.get<ViewerTunnelStatusResponse>('/api/viewer/tunnel'),\n\n /** GET /api/workspace-files — discriminated union response on\n * ?path= (dir listing vs file content). */\n getWorkspaceFiles: (query: { agent: string; path?: string }) =>\n client.get<WorkspaceFilesResponse>('/api/workspace-files', { query }),\n\n /** PUT /api/workspace-files */\n writeWorkspaceFile: (query: { agent: string; path: string }, body: WriteWorkspaceFileBody) =>\n client.put<WriteWorkspaceFileResponse>('/api/workspace-files', { query, body }),\n\n} as const\n","/**\n * lib/api/errors.ts — single place mapping ApiClientError to a user-\n * facing toast string. PR-3 introduced ApiClientError with a `code`\n * field; this file is the consumer side.\n *\n * Why a separate module instead of inlining in QueryClient.onError:\n * - Multiple places need to resolve the same message (toast,\n * error boundary, form-error inline). One translator keeps them\n * in sync.\n * - Tests can assert \"code X → key Y\" without rendering React.\n */\n\nimport type { TFunction } from 'i18next'\nimport { ApiClientError } from './client'\n\n/**\n * Translate any thrown value (ApiClientError, generic Error, anything)\n * into a stable error code + a human-readable message. The i18n\n * dictionary in `errors` namespace is the source of truth — see\n * src/i18n/locales/{en,zh}/errors.json.\n */\nexport function describeError(err: unknown, t: TFunction): { code: string; message: string } {\n if (err instanceof ApiClientError) {\n // The fallback path also gets `detail` so `errors:UNKNOWN` can\n // interpolate the raw backend message. Without this the\n // \"Something went wrong ({{detail}}).\" template fell through\n // empty when the per-code key didn't exist in the dict.\n const fallback = t('errors:UNKNOWN', {\n code: err.code,\n detail: err.message,\n defaultValue: err.message,\n })\n const message = t(`errors:${err.code}`, {\n defaultValue: fallback,\n detail: err.message,\n })\n return { code: err.code, message }\n }\n if (err instanceof Error) {\n return {\n code: 'UNKNOWN',\n message: t('errors:UNKNOWN', { code: err.name, defaultValue: err.message }),\n }\n }\n return {\n code: 'UNKNOWN',\n message: t('errors:UNKNOWN', { code: 'UNKNOWN', defaultValue: String(err) }),\n }\n}\n\n/**\n * isAuthError — true when the error indicates the user must re-auth.\n * Used by useAuth + the QueryClient to trigger the /login redirect.\n */\nexport function isAuthError(err: unknown): boolean {\n return err instanceof ApiClientError && (err.code === 'AUTH_INVALID' || err.status === 401)\n}\n","/**\n * Card — neutral surface container used by stat tiles, detail panels,\n * empty states, settings sections. The 6 named slots\n * (Header / Title / Description / Content / Footer + the wrapper)\n * give pages a consistent rhythm without prescribing layout — a route\n * can compose them in any order.\n */\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border border-border bg-surface text-text shadow-sm',\n className,\n )}\n {...props}\n />\n ),\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col space-y-1 p-3 sm:p-4', className)}\n {...props}\n />\n ),\n)\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('text-md font-semibold leading-tight', className)}\n {...props}\n />\n ),\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('text-sm text-text-dim', className)}\n {...props}\n />\n ),\n)\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-3 pt-0 sm:p-4 sm:pt-0', className)} {...props} />\n ),\n)\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex items-center p-5 pt-0 sm:p-6 sm:pt-0 gap-2',\n className,\n )}\n {...props}\n />\n ),\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }\n","/**\n * Input — single-line text input with shell-style focus ring.\n *\n * Density: h-8 (32px). The original shadcn default is h-9 (36px),\n * but real-world feedback found 36px rows visually inflated against\n * shadcn-style table cells (h-10 at most). 32px sits closer to\n * Linear / Notion density. iOS auto-zoom is suppressed via\n * `maximum-scale=1` in viewport meta, so text-sm (14px) is safe\n * here without inflating to 16px.\n */\n\nimport * as React from 'react'\nimport { cn } from '@/lib/utils'\n\nconst Input = React.forwardRef<HTMLInputElement, React.InputHTMLAttributes<HTMLInputElement>>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-8 w-full rounded-md border border-border bg-surface',\n 'px-3 py-1 text-sm shadow-sm',\n 'file:border-0 file:bg-transparent file:text-sm file:font-medium',\n 'placeholder:text-text-muted',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-1 focus-visible:ring-offset-bg',\n 'disabled:cursor-not-allowed disabled:opacity-55',\n className,\n )}\n ref={ref}\n {...props}\n />\n )\n },\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Label — accessible <label> primitive backed by Radix Label so it\n * works with both native form controls and Radix-style ones (Select\n * trigger / etc.) via `htmlFor` resolution.\n */\n\nimport * as React from 'react'\nimport * as LabelPrimitive from '@radix-ui/react-label'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","/**\n * /login — token-based sign-in.\n *\n * The agim backend's auth model is simple: the operator copies a\n * token from `~/.agim/tokens.json` (or runs `agim token list`) and\n * pastes it here. POST /api/auth/login validates it (timing-safe\n * SHA-256 compare) and returns `{ok, tokenId}`. We additionally\n * stash the raw token in localStorage so future fetches attach\n * Authorization: Bearer.\n *\n * Mobile-aware:\n * * Single full-width form; no chrome.\n * * `inputMode=\"text\"` + `autoComplete=\"off\"` — never autofill a\n * token from password managers.\n * * Submit button uses `size=\"lg\"` to clear the 44×44 hit target\n * even with the keyboard up.\n */\n\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useMutation } from '@tanstack/react-query'\nimport { useNavigate, useSearchParams } from 'react-router-dom'\nimport { toast } from 'sonner'\n\nimport { api } from '@/lib/api/endpoints'\nimport { describeError } from '@/lib/api/errors'\nimport { useAuth } from '@/stores/auth'\nimport { Button } from '@/components/ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from '@/components/ui/card'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\n\n/** Sanitize the `next` query param: only allow same-origin paths so a\n * rogue `?next=https://evil.com/` can't redirect off-domain after\n * login. Falls back to `/` for anything else. */\nfunction safeNext(raw: string | null): string {\n if (!raw) return '/'\n try {\n const decoded = decodeURIComponent(raw)\n if (decoded.startsWith('/') && !decoded.startsWith('//')) return decoded\n } catch {\n /* malformed encoding */\n }\n return '/'\n}\n\nexport default function LoginRoute(): JSX.Element {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const [params] = useSearchParams()\n const setToken = useAuth((s) => s.setToken)\n const [token, setLocalToken] = useState('')\n\n const next = safeNext(params.get('next'))\n\n const login = useMutation({\n mutationFn: (raw: string) => api.login({ token: raw }),\n onSuccess: () => {\n // POST returned ok — token validates server-side. Persist + go.\n setToken(token.trim())\n toast.success(t('states.saved'))\n navigate(next, { replace: true })\n },\n onError: (err) => {\n const { message } = describeError(err, t)\n toast.error(message)\n },\n })\n\n function onSubmit(e: React.FormEvent<HTMLFormElement>): void {\n e.preventDefault()\n const v = token.trim()\n if (!v) return\n login.mutate(v)\n }\n\n return (\n <div className=\"grid min-h-dvh place-items-center bg-bg px-4 py-8 pt-safe\">\n <Card className=\"w-full max-w-md\">\n <CardHeader>\n <CardTitle className=\"text-xl\">\n <span className=\"mr-2\">🤖</span>\n {t('appName')}\n </CardTitle>\n <CardDescription>\n {t('login.intro', {\n defaultValue:\n 'Paste your access token from ~/.agim/tokens.json or `agim token list`.',\n })}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <form onSubmit={onSubmit} className=\"flex flex-col gap-4\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"token\">\n {t('login.tokenLabel', { defaultValue: 'Access token' })}\n </Label>\n <Input\n id=\"token\"\n type=\"password\"\n value={token}\n onChange={(e) => setLocalToken(e.target.value)}\n placeholder=\"agim_••••••••\"\n autoComplete=\"off\"\n autoFocus\n required\n />\n </div>\n <Button\n type=\"submit\"\n size=\"lg\"\n disabled={login.isPending || token.trim().length === 0}\n >\n {login.isPending\n ? t('states.loading')\n : t('login.submit', { defaultValue: 'Sign in' })}\n </Button>\n </form>\n </CardContent>\n <CardFooter className=\"block text-xs text-text-muted\">\n {t('login.hint', {\n defaultValue:\n 'Loopback (127.0.0.1) requests bypass this check; you only see this page when accessing agim from another host or with IMHUB_TRUST_LOOPBACK=off.',\n })}\n </CardFooter>\n </Card>\n </div>\n )\n}\n","/**\n * lib/api/ws.ts — WebSocket client with exponential backoff + mobile-\n * aware reconnect (visibility / online events).\n *\n * One module-level instance per path: openChatWs() returns the same\n * connection across remounts of the chat route, so a fast navigate\n * away and back doesn't tear down + re-establish (mobile networks\n * make handshake-flapping painful).\n *\n * Wire protocol is the legacy NDJSON-over-WS shape — see types/ws.ts.\n * Auth is implicit: same-origin cookie travels with the upgrade\n * request, so the backend's loopback / token gate applies the same\n * way it does for REST.\n *\n * Mobile reconnect strategy:\n * * `visibilitychange` → on `document.visible`, if the socket is\n * not OPEN, close-and-reconnect. iOS suspends background WS\n * after ~30s; we don't notice the close until the tab focuses.\n * * `online` → if the device was offline, immediately attempt one\n * fresh connect (skip backoff).\n * * `offline` → leave the socket alone; the OS will close it.\n *\n * Backoff: 1s → 2s → 5s → 10s → 30s (cap), reset on first\n * successful OPEN. Each handler subscribes via `subscribe(cb)` and\n * is called with every inbound message + connection lifecycle event.\n */\n\nimport type { ChatIncoming, ChatOutgoing } from '@/types/ws'\n\ntype Listener =\n | { type: 'message'; fn: (msg: ChatIncoming) => void }\n | { type: 'status'; fn: (s: WsStatus) => void }\n\nexport type WsStatus = 'connecting' | 'open' | 'closed' | 'error'\n\ninterface ChatWsHandle {\n send: (msg: ChatOutgoing) => boolean\n subscribe: (l: Listener) => () => void\n status: () => WsStatus\n close: () => void\n}\n\nconst BACKOFF_STEPS_MS = [1000, 2000, 5000, 10_000, 30_000]\n\nfunction buildWsUrl(path: string): string {\n const proto = location.protocol === 'https:' ? 'wss:' : 'ws:'\n return `${proto}//${location.host}${path}`\n}\n\nlet singleton: ChatWsHandle | null = null\n\nexport function openChatWs(): ChatWsHandle {\n if (singleton) return singleton\n\n let ws: WebSocket | null = null\n let status: WsStatus = 'connecting'\n let attempt = 0\n let reconnectTimer: ReturnType<typeof setTimeout> | null = null\n let closed = false\n const listeners = new Set<Listener>()\n\n function notifyStatus(next: WsStatus): void {\n status = next\n for (const l of listeners) if (l.type === 'status') l.fn(next)\n }\n\n function notifyMessage(msg: ChatIncoming): void {\n for (const l of listeners) if (l.type === 'message') l.fn(msg)\n }\n\n function clearReconnect(): void {\n if (reconnectTimer != null) {\n clearTimeout(reconnectTimer)\n reconnectTimer = null\n }\n }\n\n function scheduleReconnect(): void {\n if (closed) return\n clearReconnect()\n const delay = BACKOFF_STEPS_MS[Math.min(attempt, BACKOFF_STEPS_MS.length - 1)] ?? 30_000\n attempt += 1\n reconnectTimer = setTimeout(() => connect(), delay)\n }\n\n function connect(): void {\n clearReconnect()\n notifyStatus('connecting')\n try {\n ws = new WebSocket(buildWsUrl('/ws'))\n } catch (err) {\n // Construction itself failed (CSP, invalid URL, etc.). Retry.\n notifyStatus('error')\n console.warn('[ws] construct failed', err)\n scheduleReconnect()\n return\n }\n ws.addEventListener('open', () => {\n attempt = 0\n notifyStatus('open')\n })\n ws.addEventListener('message', (e: MessageEvent<string>) => {\n let parsed: ChatIncoming\n try {\n parsed = JSON.parse(e.data) as ChatIncoming\n } catch {\n console.warn('[ws] bad json', e.data?.slice?.(0, 200))\n return\n }\n notifyMessage(parsed)\n })\n ws.addEventListener('close', () => {\n notifyStatus('closed')\n if (!closed) scheduleReconnect()\n })\n ws.addEventListener('error', () => {\n // The browser will fire `close` right after; don't double-\n // schedule a reconnect here.\n notifyStatus('error')\n })\n }\n\n function send(msg: ChatOutgoing): boolean {\n if (!ws || ws.readyState !== WebSocket.OPEN) return false\n try {\n ws.send(JSON.stringify(msg))\n return true\n } catch {\n return false\n }\n }\n\n function subscribe(l: Listener): () => void {\n listeners.add(l)\n // Replay current status to a new subscriber so it doesn't have\n // to wait for the next transition.\n if (l.type === 'status') l.fn(status)\n return () => {\n listeners.delete(l)\n }\n }\n\n function close(): void {\n closed = true\n clearReconnect()\n try { ws?.close() } catch { /* ignore */ }\n ws = null\n singleton = null // allow a future openChatWs() to start fresh\n }\n\n // Mobile: re-handshake on visibility / online events. iOS suspends\n // background tabs' WS after ~30s and the SPA only finds out when\n // the user comes back. Forcing a reconnect on visible+closed is\n // cheap and keeps the chat stream live.\n function onVisibility(): void {\n if (document.visibilityState !== 'visible') return\n if (!ws || ws.readyState === WebSocket.CLOSED) {\n attempt = 0\n connect()\n }\n }\n function onOnline(): void {\n attempt = 0\n if (!ws || ws.readyState !== WebSocket.OPEN) connect()\n }\n document.addEventListener('visibilitychange', onVisibility)\n window.addEventListener('online', onOnline)\n\n connect()\n\n singleton = {\n send,\n subscribe,\n status: () => status,\n close: () => {\n document.removeEventListener('visibilitychange', onVisibility)\n window.removeEventListener('online', onOnline)\n close()\n },\n }\n return singleton\n}\n","/**\n * useChat — single hook driving the /chat route. Wires the WebSocket\n * (lib/api/ws.ts) into a useReducer state machine that holds the\n * message list, in-flight streaming chunk, available agents, and\n * approval cards.\n *\n * Stream throttling: every `chunk` event accumulates into a ref and\n * flushes to React state via requestAnimationFrame, so a 60 tps token\n * stream doesn't render 60 times a second (each setState costs\n * roughly a reconciliation pass — at 60fps that's the budget gone).\n *\n * The user-driven `send` API is intentionally optimistic: appending\n * the user message + an empty assistant placeholder happens\n * immediately, then the WS chunk/done events fill in the assistant\n * text. If the WS isn't OPEN we surface an error toast (caller).\n */\n\nimport { useEffect, useReducer, useRef } from 'react'\nimport { toast } from 'sonner'\nimport { openChatWs, type WsStatus } from '@/lib/api/ws'\nimport type { ApprovalCardOutcome, ApprovalCardPrompt, ChatIncoming } from '@/types/ws'\n\n/** v1.2.115 — how long the resolved card lingers in the dock before\n * auto-dismiss. Long enough to read the ✅/❌ flip, short enough to\n * not feel sluggish; matches sonner's default toast duration so the\n * toast and the card fade out around the same time. */\nconst APPROVAL_DISMISS_AFTER_MS = 1200\n\nexport type MessageRole = 'user' | 'assistant' | 'system'\n\n/** Three click outcomes the chat surface sends back. Maps 1:1 to the\n * callback_data trailing letter that approval-router expects:\n * `y` → allow\n * `n` → deny\n * `a` → allow + auto-allow further (the \"Auto for similar\" button) */\nexport type ApprovalChoice = 'y' | 'n' | 'a'\n\nexport interface ChatMessage {\n id: string\n role: MessageRole\n content: string\n agent?: string\n timestamp: number\n /** Approval cards land here as a system message with embedded data.\n * `prompt` is the full structured payload from the server (toolName,\n * inputJson, mode, graceSeconds, reqId). `text` is a plain string\n * used for the legacy approval-text fallback path. */\n approval?: {\n messageId: string\n prompt?: ApprovalCardPrompt\n /** Legacy `approval-text` body (no buttons, no tool input). */\n text?: string\n outcome?: ApprovalCardOutcome\n }\n}\n\n/**\n * v1.2.115 — approval cards moved out of the chat message stream into a\n * floating dock above the input. PendingApproval is the dock's row\n * shape: messageId + prompt + optional outcome (set when the server's\n * approval-card-edit lands; triggers a toast and a brief auto-dismiss).\n */\nexport interface PendingApproval {\n messageId: string\n prompt: ApprovalCardPrompt\n /** Set when the bus resolves. Holding the outcome briefly (vs\n * immediate removal) gives the user a visible state flip\n * (✅/❌/⏱) before the row fades. */\n outcome?: ApprovalCardOutcome\n /** Bookkeeping for the timed dismiss. Optional — managed in the\n * reducer's APPROVAL_EDIT branch via setTimeout. */\n resolvedAt?: number\n}\n\nexport interface ChatState {\n messages: ChatMessage[]\n /** Active approval cards rendered in the dock (NOT in `messages`).\n * v1.2.115 — previously approvals lived inline as system messages,\n * but resolved cards lingered in history clutter. Dock approach:\n * show only while pending → toast on resolve → dismiss. */\n pendingApprovals: PendingApproval[]\n agents: string[]\n agent: string // currently selected\n status: WsStatus\n /** When non-null, an assistant message is being streamed; chunks\n * accumulate into messages[currentReplyId].content. */\n currentReplyId: string | null\n error: string | null\n}\n\nconst initialState: ChatState = {\n messages: [],\n pendingApprovals: [],\n agents: [],\n agent: '',\n status: 'connecting',\n currentReplyId: null,\n error: null,\n}\n\ntype Action =\n | { kind: 'WS_STATUS'; status: WsStatus }\n | { kind: 'INIT'; agents: string[]; defaultAgent: string }\n | { kind: 'HISTORY'; messages: ChatMessage[]; agent: string }\n | { kind: 'AGENTS'; agents: string[] }\n | { kind: 'AGENT_SWITCHED'; agent: string }\n | { kind: 'SEND_USER'; message: ChatMessage; placeholder: ChatMessage }\n | { kind: 'CHUNK'; replyId: string; text: string }\n | { kind: 'DONE'; replyId: string; finalText: string }\n | { kind: 'ERROR'; message: string }\n | { kind: 'APPROVAL_CARD'; messageId: string; prompt: ApprovalCardPrompt }\n | { kind: 'APPROVAL_TEXT'; messageId: string; text: string }\n | { kind: 'APPROVAL_EDIT'; messageId: string; outcome: ApprovalCardOutcome }\n | { kind: 'APPROVAL_DISMISS'; messageId: string }\n | { kind: 'RESET_CONVERSATION' }\n | { kind: 'CLEAR_ERROR' }\n\nfunction reducer(s: ChatState, a: Action): ChatState {\n switch (a.kind) {\n case 'WS_STATUS':\n return { ...s, status: a.status }\n case 'INIT':\n return { ...s, agents: a.agents, agent: s.agent || a.defaultAgent }\n case 'HISTORY':\n return { ...s, messages: a.messages, agent: a.agent }\n case 'AGENTS':\n return { ...s, agents: a.agents }\n case 'AGENT_SWITCHED':\n return { ...s, agent: a.agent }\n case 'SEND_USER':\n return {\n ...s,\n messages: [...s.messages, a.message, a.placeholder],\n currentReplyId: a.placeholder.id,\n error: null,\n }\n case 'CHUNK': {\n // Append text to the current streaming reply.\n const idx = s.messages.findIndex((m) => m.id === a.replyId)\n if (idx < 0) return s\n const next = [...s.messages]\n const target = next[idx]\n if (target) {\n next[idx] = { ...target, content: target.content + a.text }\n }\n return { ...s, messages: next }\n }\n case 'DONE': {\n const idx = s.messages.findIndex((m) => m.id === a.replyId)\n if (idx < 0) return { ...s, currentReplyId: null }\n const next = [...s.messages]\n const target = next[idx]\n if (target) {\n // Server's `done` ships the full text — prefer it over the\n // accumulated chunks so we recover from any chunk we dropped.\n next[idx] = { ...target, content: a.finalText || target.content }\n }\n return { ...s, messages: next, currentReplyId: null }\n }\n case 'ERROR':\n return { ...s, error: a.message, currentReplyId: null }\n case 'APPROVAL_CARD':\n // v1.2.115 — dock-only. Don't pollute the chat stream; the dock\n // renders these. Dedupe by messageId in case server replays.\n if (s.pendingApprovals.some((p) => p.messageId === a.messageId)) return s\n return {\n ...s,\n pendingApprovals: [\n ...s.pendingApprovals,\n { messageId: a.messageId, prompt: a.prompt },\n ],\n }\n case 'APPROVAL_TEXT':\n // v1.2.115 — legacy text-fallback (no buttons, used by adapters\n // without sendApprovalCard, or for receipt strings like \"已批准\n // 并启用自动放行\"). The hook surfaces these via the toast layer\n // (handled in the WS-message dispatcher below); the reducer\n // intentionally doesn't store them. Receipts are transient\n // notifications, not chat content.\n return s\n case 'APPROVAL_EDIT': {\n // Mark resolved on the dock entry; the dock effect auto-dismisses\n // after a short delay so the user sees the ✅/❌/⏱ transition.\n const idx = s.pendingApprovals.findIndex((p) => p.messageId === a.messageId)\n if (idx < 0) return s\n const next = [...s.pendingApprovals]\n const cur = next[idx]\n if (cur) {\n next[idx] = { ...cur, outcome: a.outcome, resolvedAt: Date.now() }\n }\n return { ...s, pendingApprovals: next }\n }\n case 'APPROVAL_DISMISS':\n return {\n ...s,\n pendingApprovals: s.pendingApprovals.filter((p) => p.messageId !== a.messageId),\n }\n case 'RESET_CONVERSATION':\n // Clear all chat state but keep WS status + agent list + current\n // agent. Pending dock entries also clear — server's empty\n // history reply takes over rendering.\n return {\n ...s,\n messages: [],\n pendingApprovals: [],\n currentReplyId: null,\n error: null,\n }\n case 'CLEAR_ERROR':\n return { ...s, error: null }\n }\n}\n\n/** Surface a one-line resolution outcome via sonner. Keep these short:\n * the dock row itself already shows the colored badge; the toast is\n * the lingering confirmation when the row fades. */\nfunction toastForOutcome(o: ApprovalCardOutcome): void {\n switch (o.decision) {\n case 'allowed': toast.success('已批准'); return\n case 'allowed-pinned': toast.success('已批准 · 后续同类自动放行'); return\n case 'denied': toast.error('已拒绝'); return\n case 'denied-revoked': toast.error('已拒绝 · 撤销自动放行规则'); return\n case 'expired': toast.warning('已过期'); return\n }\n}\n\nlet messageCounter = 0\nfunction mkId(prefix: string): string {\n messageCounter += 1\n return `${prefix}-${Date.now()}-${messageCounter}`\n}\n\n/** Pure exports for unit tests. The hook itself is the public\n * interface; these let test files exercise the reducer directly\n * without spinning up a WebSocket. */\nexport { reducer as chatReducer, initialState as initialChatState }\nexport type ChatAction = Action\n\nexport interface UseChat {\n state: ChatState\n send: (text: string) => void\n switchAgent: (name: string) => void\n /** Approval card button click. The hook composes the\n * `apv:<reqId>:<y|n|a>` callback_data that approval-router expects;\n * callers only pass the messageId + reqId + the user's choice.\n * Returns whether the WS send actually went out — false means the\n * socket was reconnecting and the click should be re-tried. The\n * hook also dispatches an ERROR for the chat surface to render. */\n approvalClick: (messageId: string, reqId: string, choice: ApprovalChoice) => boolean\n /** Drop all messages + tell the server to fork a new session\n * (resetConversation: new id, drops CLI session pins + auto-allow\n * rules + plan-mode). The server replies with empty history. */\n newConversation: () => void\n clearError: () => void\n}\n\nexport function useChat(): UseChat {\n const [state, dispatch] = useReducer(reducer, initialState)\n const wsRef = useRef(openChatWs())\n // Per-stream buffer + rAF token; chunks accumulate then flush once\n // per frame so we avoid 60 setState/sec.\n const chunkBuf = useRef<Map<string, string>>(new Map())\n const flushScheduled = useRef(false)\n // Mirror of state.currentReplyId, kept current so bufferChunk doesn't\n // read a stale closure value. Without this, the WS subscription\n // (mounted once with useEffect([])) captures the first-render `state`\n // where currentReplyId is null, every chunk gets early-returned, and\n // the assistant bubble stays stuck on \"…\" until React re-renders for\n // an unrelated reason (e.g. tab switch).\n const currentReplyIdRef = useRef<string | null>(null)\n useEffect(() => {\n currentReplyIdRef.current = state.currentReplyId\n }, [state.currentReplyId])\n\n useEffect(() => {\n const ws = wsRef.current\n const off1 = ws.subscribe({\n type: 'status',\n fn: (status) => dispatch({ kind: 'WS_STATUS', status }),\n })\n const off2 = ws.subscribe({\n type: 'message',\n fn: (msg: ChatIncoming) => onIncoming(msg),\n })\n // 2026-05-19: persist a per-browser threadId so refresh / re-open\n // resumes the same server-side session. Generated once on first\n // chat and stored in localStorage; sent with every `get-history`.\n // Server falls back to its own clientId if we don't send one.\n function loadOrCreateThreadId(): string {\n try {\n const existing = localStorage.getItem('agim-web-thread-id')\n if (existing && /^web-[A-Za-z0-9_-]{4,64}$/.test(existing)) return existing\n } catch { /* private mode */ }\n const fresh = `web-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`\n try { localStorage.setItem('agim-web-thread-id', fresh) } catch { /* ignore */ }\n return fresh\n }\n const threadId = loadOrCreateThreadId()\n\n // On mount, ask the backend to:\n // * replay history (rekey session to our persisted threadId)\n // * re-send the agents list — the WS connection is a module-level\n // singleton, so the server's `init` (agents + clientId) only\n // fires on the FIRST mount of the whole app. When the user\n // navigates away from /chat and back, `useChat()` re-mounts with\n // a fresh empty reducer state but the WS doesn't re-emit `init`,\n // leaving the agent picker empty. `get-agents` re-publishes.\n function bootstrap(): void {\n ws.send({ type: 'get-history', threadId })\n ws.send({ type: 'get-agents' })\n }\n // R10: previously the open-branch returned a cleanup that only\n // unsubscribed off1/off2, while the not-open branch returned a\n // cleanup that ALSO unsubscribed the one-shot off3. Under\n // StrictMode + route hops (/chat → /tasks → /chat) the off1/off2\n // subscriptions leaked across remounts. Unify: always declare off3\n // (no-op when we already saw 'open'), always return a single\n // cleanup that drops all three.\n let off3: () => void = () => {}\n if (ws.status() === 'open') {\n bootstrap()\n } else {\n off3 = ws.subscribe({\n type: 'status',\n fn: (s) => {\n if (s === 'open') {\n bootstrap()\n off3()\n }\n },\n })\n }\n return () => { off1(); off2(); off3() }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- ws is module-singleton\n }, [])\n\n function onIncoming(msg: ChatIncoming): void {\n switch (msg.type) {\n case 'init':\n dispatch({ kind: 'INIT', agents: msg.agents, defaultAgent: msg.defaultAgent })\n return\n case 'history':\n dispatch({\n kind: 'HISTORY',\n agent: msg.agent,\n messages: msg.messages.map((h, i): ChatMessage => ({\n id: `hist-${i}`,\n role: h.role,\n content: h.content,\n agent: h.agent,\n timestamp: h.timestamp ? Date.parse(h.timestamp) : Date.now() - i * 1000,\n })),\n })\n return\n case 'agents':\n dispatch({ kind: 'AGENTS', agents: msg.agents })\n return\n case 'agent-switched':\n dispatch({ kind: 'AGENT_SWITCHED', agent: msg.agent })\n return\n case 'chunk':\n bufferChunk(msg.text)\n return\n case 'done':\n flushChunks()\n dispatch({\n kind: 'DONE',\n // Same stale-closure trap as bufferChunk — read via ref.\n replyId: currentReplyIdRef.current ?? '',\n finalText: msg.text,\n })\n return\n case 'error':\n flushChunks()\n dispatch({ kind: 'ERROR', message: msg.message })\n return\n case 'approval-card':\n dispatch({\n kind: 'APPROVAL_CARD',\n messageId: msg.messageId,\n prompt: msg.prompt,\n })\n return\n case 'approval-card-edit':\n dispatch({\n kind: 'APPROVAL_EDIT',\n messageId: msg.messageId,\n outcome: msg.outcome,\n })\n // v1.2.115 — toast on resolve so the dismissal isn't silent.\n // The dock row itself flips to a ✅/❌ badge for ~1.2s before\n // fading out (driven by APPROVAL_DISMISS_AFTER_MS below); the\n // toast carries the outcome label so it stays visible after\n // the row vanishes.\n toastForOutcome(msg.outcome)\n window.setTimeout(() => {\n dispatch({ kind: 'APPROVAL_DISMISS', messageId: msg.messageId })\n }, APPROVAL_DISMISS_AFTER_MS)\n return\n case 'approval-text':\n // approval-text is the legacy fallback path used by adapters\n // that can't render cards (or for \"receipt\" lines after a\n // card resolves). v1.2.115: surface as a toast — no longer\n // injected into the chat stream — and ignore the dispatch.\n toast.info(msg.text)\n return\n case 'metrics':\n // Dashboards (PR-N) consume these; the chat surface ignores.\n return\n default:\n return\n }\n }\n\n function bufferChunk(text: string): void {\n const replyId = currentReplyIdRef.current\n if (!replyId) return\n const cur = chunkBuf.current.get(replyId) ?? ''\n chunkBuf.current.set(replyId, cur + text)\n if (flushScheduled.current) return\n flushScheduled.current = true\n requestAnimationFrame(() => {\n flushScheduled.current = false\n flushChunks()\n })\n }\n\n function flushChunks(): void {\n for (const [replyId, text] of chunkBuf.current.entries()) {\n if (text) dispatch({ kind: 'CHUNK', replyId, text })\n }\n chunkBuf.current.clear()\n }\n\n function send(text: string): void {\n const trimmed = text.trim()\n if (!trimmed) return\n const ws = wsRef.current\n const userId = mkId('u')\n const replyId = mkId('a')\n dispatch({\n kind: 'SEND_USER',\n message: { id: userId, role: 'user', content: trimmed, timestamp: Date.now() },\n placeholder: {\n id: replyId,\n role: 'assistant',\n content: '',\n agent: state.agent,\n timestamp: Date.now(),\n },\n })\n const ok = ws.send({ type: 'message', text: trimmed, agent: state.agent })\n if (!ok) {\n dispatch({ kind: 'ERROR', message: 'Not connected. Reconnecting…' })\n }\n }\n\n function switchAgent(name: string): void {\n wsRef.current.send({ type: 'switch-agent', agent: name })\n }\n\n function approvalClick(messageId: string, reqId: string, choice: ApprovalChoice): boolean {\n // approval-router parses `apv:<reqId>:<y|n|a>`. v1 composed this\n // client-side too; we route through unchanged because the router\n // is the canonical sink and ignores any other prefix.\n //\n // v1.2.88 — previously ignored ws.send()'s return value, which\n // meant a click during WS reconnect was silently dropped: the\n // user saw zero feedback and the approval card sat there\n // pending forever. Match the chat-send path (line 402): treat a\n // failed send as an explicit error so the user knows to wait\n // for reconnect and retry. The boolean return lets the calling\n // component clear its optimistic \"submitting…\" state.\n const ok = wsRef.current.send({\n type: 'approval-action',\n data: `apv:${reqId}:${choice}`,\n messageId,\n })\n if (!ok) {\n dispatch({ kind: 'ERROR', message: 'Not connected. Reconnecting — try clicking again in a moment.' })\n }\n return ok\n }\n\n function newConversation(): void {\n // Optimistic clear so the UI repaints empty immediately; the server's\n // follow-up `history` message with messages=[] reconfirms the state.\n dispatch({ kind: 'RESET_CONVERSATION' })\n wsRef.current.send({ type: 'new-conversation' })\n }\n\n return {\n state,\n send,\n switchAgent,\n approvalClick,\n newConversation,\n clearError: () => dispatch({ kind: 'CLEAR_ERROR' }),\n }\n}\n","/**\n * Badge — compact pill for status / metadata. Used by StatusBadge\n * (components/common/) to map domain statuses (job/approval/reminder)\n * onto a consistent palette.\n *\n * The variant names here are intentionally narrow — only the colors\n * the design system reserves for status. Layout-only badges (e.g. a\n * count of selected rows) compose `variant=\"secondary\"` plus extra\n * classes via `className`.\n */\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '@/lib/utils'\n\nconst badgeVariants = cva(\n [\n 'inline-flex items-center gap-1',\n 'rounded-full border px-2 py-0.5',\n 'text-xs font-semibold uppercase tracking-wide leading-5',\n 'transition-colors',\n ].join(' '),\n {\n variants: {\n variant: {\n default: 'bg-surface-2 text-text-dim border-transparent',\n secondary: 'bg-surface-2 text-text border-border',\n outline: 'bg-transparent text-text-dim border-border',\n success: 'bg-success-bg text-success border-transparent',\n warning: 'bg-warning-bg text-warning border-transparent',\n danger: 'bg-danger-bg text-danger border-transparent',\n info: 'bg-info-bg text-info border-transparent',\n accent: 'bg-accent-bg text-accent border-transparent',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps): JSX.Element {\n return <span className={cn(badgeVariants({ variant }), className)} {...props} />\n}\n\nexport { Badge, badgeVariants }\n","/**\n * MessageBubble — one chat message (user, assistant, or system/approval).\n *\n * Approval cards are rendered with the same structure as v1's\n * index.html:renderApprovalCard:\n * * Title row\n * * `auto-allow` mode gets a countdown row (graceSeconds → live\n * ticker until the bus auto-resolves)\n * * Tool name + Input JSON in dedicated rows (the input goes into a\n * scrollable <pre> so an inputJson of a few hundred chars doesn't\n * blow out the layout)\n * * Three action buttons: Allow / Auto-allow / Deny (auto-allow mode\n * hides Allow and Auto-allow because the bus is going to auto-allow\n * anyway — only Deny is meaningful)\n * * Once resolved, the buttons are replaced with a coloured outcome\n * line that reflects all 5 decision states with optional byUser\n *\n * No markdown for now — plain text + preserved whitespace is correct\n * enough for agim's debugging-focused chat surface.\n */\n\nimport { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Button } from '@/components/ui/button'\nimport { Badge } from '@/components/ui/badge'\nimport { cn } from '@/lib/utils'\nimport type { ChatMessage, ApprovalChoice } from '@/hooks/use-chat'\nimport type { ApprovalCardOutcome } from '@/types/ws'\n\nexport interface MessageBubbleProps {\n msg: ChatMessage\n /** Returns whether the WS click was actually transmitted. The\n * approval card uses this to revert its optimistic \"submitting\"\n * state when the socket is disconnected. */\n onApprove?: (messageId: string, reqId: string, choice: ApprovalChoice) => boolean | void\n}\n\nexport function MessageBubble({ msg, onApprove }: MessageBubbleProps): JSX.Element {\n if (msg.approval) {\n return <ApprovalView approval={msg.approval} onApprove={onApprove} />\n }\n\n const isUser = msg.role === 'user'\n return (\n <div className={cn('flex', isUser ? 'justify-end' : 'justify-start')}>\n <div\n className={cn(\n 'max-w-[85%] sm:max-w-[75%] rounded-lg px-3 py-2 shadow-sm',\n isUser\n ? 'bg-accent text-accent-fg'\n : 'bg-surface text-text border border-border',\n )}\n >\n {!isUser && msg.agent && (\n <div className=\"mb-1 text-xs font-medium text-text-muted\">{msg.agent}</div>\n )}\n <div className=\"whitespace-pre-wrap break-words text-sm leading-relaxed\">\n {msg.content || (msg.role === 'assistant' && (\n <span className=\"inline-block animate-pulse text-text-dim\">…</span>\n ))}\n </div>\n </div>\n </div>\n )\n}\n\n/* ─────────── Approval card ─────────── */\n\ninterface ApprovalViewProps {\n approval: NonNullable<ChatMessage['approval']>\n onApprove?: (messageId: string, reqId: string, choice: ApprovalChoice) => boolean | void\n}\n\nfunction ApprovalView({ approval, onApprove }: ApprovalViewProps): JSX.Element {\n const { t } = useTranslation()\n const { messageId, prompt, text, outcome } = approval\n const isAuto = prompt?.mode === 'auto-allow'\n\n // v1.2.88 — optimistic \"submitting\" state. Without this, a click\n // produced ZERO visible feedback until the server pushed\n // `approval-card-edit` back (typically tens to hundreds of ms,\n // sometimes longer when the agent is busy). The user perceived\n // this as \"the button didn't work\" and would click again. Now we\n // disable both buttons and surface a \"已发送\" hint the instant a\n // click fires. If `onApprove` reports the WS send failed, we\n // revert so the user can retry once reconnected.\n const [pendingChoice, setPendingChoice] = useState<ApprovalChoice | null>(null)\n\n // Reset the optimistic state when the server's outcome lands — the\n // outer branch will take over rendering anyway, but this keeps the\n // component state hygienic if the card stays mounted.\n useEffect(() => {\n if (outcome) setPendingChoice(null)\n }, [outcome])\n\n function handleClick(choice: ApprovalChoice): void {\n if (pendingChoice || !prompt || !onApprove) return\n setPendingChoice(choice)\n const ok = onApprove(messageId, prompt.reqId, choice)\n // `void` return from the legacy v1 wiring counts as success — only\n // explicit `false` (from the use-chat hook) means the WS dropped it.\n if (ok === false) setPendingChoice(null)\n }\n\n return (\n <div\n className={cn(\n 'mx-auto w-full max-w-2xl rounded-lg border p-4',\n isAuto ? 'border-warning/60 bg-warning-bg' : 'border-warning bg-warning-bg',\n outcome && 'opacity-90',\n )}\n >\n <div className=\"mb-2 flex flex-wrap items-center gap-2\">\n <Badge variant=\"warning\">\n {t('chat.approvalTitle', { defaultValue: '🔐 Tool approval' })}\n </Badge>\n {isAuto && !outcome && (\n <Badge variant=\"outline\" className=\"text-[10px] uppercase\">\n {t('chat.approvalAutoBadge', { defaultValue: 'auto-allow' })}\n </Badge>\n )}\n </div>\n\n {/* Auto-allow countdown */}\n {isAuto && !outcome && prompt && (\n <AutoAllowCountdown graceSeconds={prompt.graceSeconds ?? 0} />\n )}\n\n {/* Structured prompt: tool + input. Falls back to legacy text path\n (`approval-text`) when the server didn't send a structured prompt. */}\n {prompt ? (\n <div className=\"mt-1 flex flex-col gap-2 text-sm\">\n <Row label={t('chat.approvalToolLabel', { defaultValue: 'Tool' })}>\n <code className=\"rounded bg-surface-2 px-1.5 py-0.5 font-mono text-xs\">\n {prompt.toolName}\n </code>\n </Row>\n <Row label={t('chat.approvalInputLabel', { defaultValue: 'Input' })}>\n <pre className=\"mt-1 max-h-64 overflow-auto rounded bg-surface-2 p-2 font-mono text-xs leading-relaxed text-text\">\n {prompt.inputJson}\n </pre>\n </Row>\n </div>\n ) : text ? (\n <pre className=\"whitespace-pre-wrap break-words text-sm text-text\">{text}</pre>\n ) : null}\n\n {/* Outcome (resolved) or action buttons (pending). */}\n {outcome ? (\n <OutcomeBadge outcome={outcome} />\n ) : prompt ? (\n <>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {/* In auto-allow mode the bus will auto-allow; only Deny is\n meaningful. Hide the Allow/Auto-allow buttons to avoid\n redundant clicks. */}\n {!isAuto && (\n <>\n <Button\n size=\"sm\"\n disabled={pendingChoice !== null}\n onClick={() => handleClick('y')}\n >\n {t('chat.approvalAllow', { defaultValue: 'Allow' })}\n </Button>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={pendingChoice !== null}\n onClick={() => handleClick('a')}\n title={t('chat.approvalAutoTip', {\n defaultValue: 'Allow and auto-allow similar calls for the rest of the session',\n })}\n >\n {t('chat.approvalAuto', { defaultValue: 'Auto for similar' })}\n </Button>\n </>\n )}\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={pendingChoice !== null}\n onClick={() => handleClick('n')}\n >\n {t('chat.approvalDeny', { defaultValue: 'Deny' })}\n </Button>\n </div>\n {pendingChoice !== null && (\n <p className=\"mt-2 text-xs text-text-dim\">\n {t('chat.approvalSubmitting', {\n defaultValue: '已发送,等待结果…',\n })}\n </p>\n )}\n </>\n ) : null}\n </div>\n )\n}\n\ninterface RowProps {\n label: string\n children: React.ReactNode\n}\n\nfunction Row({ label, children }: RowProps): JSX.Element {\n return (\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-xs font-medium text-text-muted\">{label}</span>\n {children}\n </div>\n )\n}\n\n/** Live ticker that counts down from `graceSeconds` to 0. Once the\n * ticker hits 0 the approval-bus has either already auto-allowed the\n * call or is about to; the card will be replaced with the outcome via\n * approval-card-edit. We render \"auto-allowing in Ns\" until then. */\nfunction AutoAllowCountdown({ graceSeconds }: { graceSeconds: number }): JSX.Element | null {\n const { t } = useTranslation()\n const [remaining, setRemaining] = useState(Math.max(0, graceSeconds))\n useEffect(() => {\n if (graceSeconds <= 0) return\n setRemaining(graceSeconds)\n const id = setInterval(() => {\n setRemaining((s) => (s > 0 ? s - 1 : 0))\n }, 1000)\n return () => clearInterval(id)\n }, [graceSeconds])\n if (graceSeconds <= 0) return null\n return (\n <p className=\"mb-2 text-xs text-warning\">\n {remaining > 0\n ? t('chat.approvalAutoIn', {\n count: remaining,\n defaultValue: 'Auto-allowing in {{count}}s — Deny to stop.',\n })\n : t('chat.approvalAutoResolving', {\n defaultValue: 'Auto-allowing now…',\n })}\n </p>\n )\n}\n\n/** Five terminal states + optional `byUserDisplay` attribution. v1\n * rendered these with colour + icon prefixes; we do the same via\n * Badge variant. */\nfunction OutcomeBadge({ outcome }: { outcome: ApprovalCardOutcome }): JSX.Element {\n const { t } = useTranslation()\n const by = outcome.byUserDisplay ? ` · ${outcome.byUserDisplay}` : ''\n switch (outcome.decision) {\n case 'allowed':\n return (\n <div className=\"mt-3\">\n <Badge variant=\"success\">\n {t('chat.outcome.allowed', { defaultValue: '✅ Allowed' })}{by}\n </Badge>\n </div>\n )\n case 'allowed-pinned':\n return (\n <div className=\"mt-3\">\n <Badge variant=\"success\">\n {t('chat.outcome.allowedPinned', {\n defaultValue: '✅ Allowed + auto-allow further',\n })}{by}\n </Badge>\n </div>\n )\n case 'denied':\n return (\n <div className=\"mt-3\">\n <Badge variant=\"danger\">\n {t('chat.outcome.denied', { defaultValue: '❌ Denied' })}{by}\n </Badge>\n </div>\n )\n case 'denied-revoked':\n return (\n <div className=\"mt-3\">\n <Badge variant=\"danger\">\n {t('chat.outcome.deniedRevoked', {\n defaultValue: '❌ Denied (auto-allow revoked)',\n })}{by}\n </Badge>\n </div>\n )\n case 'expired':\n return (\n <div className=\"mt-3\">\n <Badge variant=\"outline\">\n {t('chat.outcome.expired', { defaultValue: '⏱ Timed out' })}{by}\n </Badge>\n </div>\n )\n }\n}\n","/**\n * ApprovalDock — floating panel for pending approval cards (v1.2.115).\n *\n * Before this iteration, approval cards rendered inline in the chat\n * message stream and resolved cards lingered as \"✅ Allowed · WEB\"\n * badges sandwiched between assistant replies. Two problems:\n * 1. Chat history was visually cluttered — every tool call left a\n * stale terminal-state row behind.\n * 2. Active cards were buried below the latest assistant reply, so\n * the user had to scroll back to find them.\n *\n * Dock semantics:\n * - Renders only PENDING cards (and briefly the just-resolved ones\n * for the badge transition, then they auto-dismiss).\n * - Stacked vertically above the chat input; max-height 240px with\n * an inner scroll so a flood of concurrent approvals doesn't push\n * the chat list off-screen.\n * - Click → optimistic disabled state (\"已发送…\") via per-row\n * `pendingChoice` local state. Outcome arrives → row swaps to\n * OutcomeBadge → setTimeout in use-chat.ts dismisses the row.\n *\n * Why all rows are unconditional disclosure (no collapse): users\n * explicitly need to act on every one; hiding any of them risks\n * stalling the agent loop. The 240px scroll cap is the safety valve.\n */\n\nimport { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ShieldCheck } from 'lucide-react'\n\nimport type { ApprovalChoice, PendingApproval } from '@/hooks/use-chat'\nimport type { ApprovalCardOutcome } from '@/types/ws'\nimport { Button } from '@/components/ui/button'\nimport { Badge } from '@/components/ui/badge'\nimport { cn } from '@/lib/utils'\n\nexport interface ApprovalDockProps {\n approvals: PendingApproval[]\n onApprove: (messageId: string, reqId: string, choice: ApprovalChoice) => boolean | void\n}\n\nexport function ApprovalDock({ approvals, onApprove }: ApprovalDockProps): JSX.Element | null {\n if (approvals.length === 0) return null\n return (\n <div className=\"border-t border-warning/40 bg-warning-bg/40\">\n <div className=\"mx-auto max-h-60 w-full max-w-3xl overflow-y-auto px-3 py-2 sm:px-4\">\n <div className=\"flex flex-col gap-2\">\n {approvals.map((a) => (\n <DockRow key={a.messageId} entry={a} onApprove={onApprove} />\n ))}\n </div>\n </div>\n </div>\n )\n}\n\ninterface DockRowProps {\n entry: PendingApproval\n onApprove: (messageId: string, reqId: string, choice: ApprovalChoice) => boolean | void\n}\n\nfunction DockRow({ entry, onApprove }: DockRowProps): JSX.Element {\n const { t } = useTranslation()\n const { messageId, prompt, outcome } = entry\n const isAuto = prompt.mode === 'auto-allow'\n\n // v1.2.88 optimistic submitting state — kept for the dock so the\n // user gets immediate feedback on click. Cleared when the outcome\n // arrives (use-chat dismisses the row shortly after).\n const [pendingChoice, setPendingChoice] = useState<ApprovalChoice | null>(null)\n useEffect(() => { if (outcome) setPendingChoice(null) }, [outcome])\n\n function handleClick(choice: ApprovalChoice): void {\n if (pendingChoice || !onApprove) return\n setPendingChoice(choice)\n const ok = onApprove(messageId, prompt.reqId, choice)\n if (ok === false) setPendingChoice(null)\n }\n\n return (\n <div\n className={cn(\n 'rounded-lg border bg-surface p-3 shadow-sm transition-opacity',\n outcome ? 'border-success/60 opacity-80' : 'border-warning',\n )}\n >\n <div className=\"mb-1.5 flex flex-wrap items-center gap-2\">\n <Badge variant=\"warning\" className=\"gap-1\">\n <ShieldCheck className=\"h-3 w-3\" />\n {t('chat.approvalTitle', { defaultValue: '工具授权' })}\n </Badge>\n {isAuto && !outcome && (\n <Badge variant=\"outline\" className=\"text-[10px] uppercase\">\n {t('chat.approvalAutoBadge', { defaultValue: 'auto-allow' })}\n </Badge>\n )}\n {isAuto && !outcome && prompt.graceSeconds != null && (\n <AutoAllowCountdown graceSeconds={prompt.graceSeconds} />\n )}\n <code className=\"ml-auto rounded bg-surface-2 px-1.5 py-0.5 font-mono text-xs\">\n {prompt.toolName}\n </code>\n </div>\n\n <pre className=\"mb-2 max-h-32 overflow-auto rounded bg-surface-2 p-2 font-mono text-xs leading-relaxed text-text\">\n {prompt.inputJson}\n </pre>\n\n {outcome ? (\n <OutcomeBadge outcome={outcome} />\n ) : (\n <>\n <div className=\"flex flex-wrap gap-2\">\n {!isAuto && (\n <>\n <Button\n size=\"sm\"\n disabled={pendingChoice !== null}\n onClick={() => handleClick('y')}\n >\n {t('chat.approvalAllow', { defaultValue: '批准' })}\n </Button>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={pendingChoice !== null}\n onClick={() => handleClick('a')}\n title={t('chat.approvalAutoTip', {\n defaultValue: 'Allow and auto-allow similar calls for the rest of the session',\n })}\n >\n {t('chat.approvalAuto', { defaultValue: '本类自动放行' })}\n </Button>\n </>\n )}\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={pendingChoice !== null}\n onClick={() => handleClick('n')}\n >\n {t('chat.approvalDeny', { defaultValue: '拒绝' })}\n </Button>\n </div>\n {pendingChoice !== null && (\n <p className=\"mt-1.5 text-xs text-text-dim\">\n {t('chat.approvalSubmitting', { defaultValue: '已发送,等待结果…' })}\n </p>\n )}\n </>\n )}\n </div>\n )\n}\n\n/** Mirrors message-bubble.tsx's countdown — kept inline to avoid a\n * cross-module import dependency. The bus-side timer is authoritative;\n * this just paints a visual cue. */\nfunction AutoAllowCountdown({ graceSeconds }: { graceSeconds: number }): JSX.Element | null {\n const { t } = useTranslation()\n const [remaining, setRemaining] = useState(Math.max(0, graceSeconds))\n useEffect(() => {\n if (graceSeconds <= 0) return\n setRemaining(graceSeconds)\n const id = setInterval(() => {\n setRemaining((s) => (s > 0 ? s - 1 : 0))\n }, 1000)\n return () => clearInterval(id)\n }, [graceSeconds])\n if (graceSeconds <= 0) return null\n return (\n <span className=\"text-xs text-warning\">\n {remaining > 0\n ? t('chat.approvalAutoIn', {\n count: remaining,\n defaultValue: 'Auto-allowing in {{count}}s — Deny to stop.',\n })\n : t('chat.approvalAutoResolving', { defaultValue: 'Auto-allowing now…' })}\n </span>\n )\n}\n\nfunction OutcomeBadge({ outcome }: { outcome: ApprovalCardOutcome }): JSX.Element {\n const { t } = useTranslation()\n const by = outcome.byUserDisplay ? ` · ${outcome.byUserDisplay}` : ''\n switch (outcome.decision) {\n case 'allowed':\n return <Badge variant=\"success\">{t('chat.outcome.allowed', { defaultValue: '✅ Allowed' })}{by}</Badge>\n case 'allowed-pinned':\n return <Badge variant=\"success\">{t('chat.outcome.allowedPinned', { defaultValue: '✅ Allowed + auto-allow further' })}{by}</Badge>\n case 'denied':\n return <Badge variant=\"danger\">{t('chat.outcome.denied', { defaultValue: '❌ Denied' })}{by}</Badge>\n case 'denied-revoked':\n return <Badge variant=\"danger\">{t('chat.outcome.deniedRevoked', { defaultValue: '❌ Denied (auto-allow revoked)' })}{by}</Badge>\n case 'expired':\n return <Badge variant=\"outline\">{t('chat.outcome.expired', { defaultValue: '⏱ Timed out' })}{by}</Badge>\n }\n}\n","// packages/core/number/src/number.ts\nfunction clamp(value, [min, max]) {\n return Math.min(max, Math.max(min, value));\n}\nexport {\n clamp\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, autoPlacement as autoPlacement$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar isClient = typeof document !== 'undefined';\n\nvar noop = function noop() {};\nvar index = isClient ? useLayoutEffect : noop;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n let length;\n let i;\n let keys;\n if (a && b && typeof a === 'object') {\n if (Array.isArray(a)) {\n length = a.length;\n if (length !== b.length) return false;\n for (i = length; i-- !== 0;) {\n if (!deepEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) {\n return false;\n }\n for (i = length; i-- !== 0;) {\n if (!{}.hasOwnProperty.call(b, keys[i])) {\n return false;\n }\n }\n for (i = length; i-- !== 0;) {\n const key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n continue;\n }\n if (!deepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n const ref = React.useRef(value);\n index(() => {\n ref.current = value;\n });\n return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n if (options === void 0) {\n options = {};\n }\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform,\n elements: {\n reference: externalReference,\n floating: externalFloating\n } = {},\n transform = true,\n whileElementsMounted,\n open\n } = options;\n const [data, setData] = React.useState({\n x: 0,\n y: 0,\n strategy,\n placement,\n middlewareData: {},\n isPositioned: false\n });\n const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n if (!deepEqual(latestMiddleware, middleware)) {\n setLatestMiddleware(middleware);\n }\n const [_reference, _setReference] = React.useState(null);\n const [_floating, _setFloating] = React.useState(null);\n const setReference = React.useCallback(node => {\n if (node !== referenceRef.current) {\n referenceRef.current = node;\n _setReference(node);\n }\n }, []);\n const setFloating = React.useCallback(node => {\n if (node !== floatingRef.current) {\n floatingRef.current = node;\n _setFloating(node);\n }\n }, []);\n const referenceEl = externalReference || _reference;\n const floatingEl = externalFloating || _floating;\n const referenceRef = React.useRef(null);\n const floatingRef = React.useRef(null);\n const dataRef = React.useRef(data);\n const hasWhileElementsMounted = whileElementsMounted != null;\n const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n const platformRef = useLatestRef(platform);\n const openRef = useLatestRef(open);\n const update = React.useCallback(() => {\n if (!referenceRef.current || !floatingRef.current) {\n return;\n }\n const config = {\n placement,\n strategy,\n middleware: latestMiddleware\n };\n if (platformRef.current) {\n config.platform = platformRef.current;\n }\n computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n const fullData = {\n ...data,\n // The floating element's position may be recomputed while it's closed\n // but still mounted (such as when transitioning out). To ensure\n // `isPositioned` will be `false` initially on the next open, avoid\n // setting it to `true` when `open === false` (must be specified).\n isPositioned: openRef.current !== false\n };\n if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n dataRef.current = fullData;\n ReactDOM.flushSync(() => {\n setData(fullData);\n });\n }\n });\n }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n index(() => {\n if (open === false && dataRef.current.isPositioned) {\n dataRef.current.isPositioned = false;\n setData(data => ({\n ...data,\n isPositioned: false\n }));\n }\n }, [open]);\n const isMountedRef = React.useRef(false);\n index(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n index(() => {\n if (referenceEl) referenceRef.current = referenceEl;\n if (floatingEl) floatingRef.current = floatingEl;\n if (referenceEl && floatingEl) {\n if (whileElementsMountedRef.current) {\n return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n }\n update();\n }\n }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n const refs = React.useMemo(() => ({\n reference: referenceRef,\n floating: floatingRef,\n setReference,\n setFloating\n }), [setReference, setFloating]);\n const elements = React.useMemo(() => ({\n reference: referenceEl,\n floating: floatingEl\n }), [referenceEl, floatingEl]);\n const floatingStyles = React.useMemo(() => {\n const initialStyles = {\n position: strategy,\n left: 0,\n top: 0\n };\n if (!elements.floating) {\n return initialStyles;\n }\n const x = roundByDPR(elements.floating, data.x);\n const y = roundByDPR(elements.floating, data.y);\n if (transform) {\n return {\n ...initialStyles,\n transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n ...(getDPR(elements.floating) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy,\n left: x,\n top: y\n };\n }, [strategy, transform, elements.floating, data.x, data.y]);\n return React.useMemo(() => ({\n ...data,\n update,\n refs,\n elements,\n floatingStyles\n }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n function isRef(value) {\n return {}.hasOwnProperty.call(value, 'current');\n }\n return {\n name: 'arrow',\n options,\n fn(state) {\n const {\n element,\n padding\n } = typeof options === 'function' ? options(state) : options;\n if (element && isRef(element)) {\n if (element.current != null) {\n return arrow$2({\n element: element.current,\n padding\n }).fn(state);\n }\n return {};\n }\n if (element) {\n return arrow$2({\n element,\n padding\n }).fn(state);\n }\n return {};\n }\n };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => {\n const result = offset$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => {\n const result = shift$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => {\n const result = limitShift$1(options);\n return {\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => {\n const result = flip$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => {\n const result = size$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => {\n const result = autoPlacement$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => {\n const result = hide$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => {\n const result = inline$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => {\n const result = arrow$1(options);\n return {\n name: result.name,\n fn: result.fn,\n options: [options, deps]\n };\n};\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef?.current || ref.current;\n if (previousAnchor !== anchorRef.current) {\n context.onAnchorChange(anchorRef.current);\n }\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-previous/src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","// src/visually-hidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar VISUALLY_HIDDEN_STYLES = Object.freeze({\n // See: https://github.com/twbs/bootstrap/blob/main/scss/mixins/_visually-hidden.scss\n position: \"absolute\",\n border: 0,\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\"\n});\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...props,\n ref: forwardedRef,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style }\n }\n );\n }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n Root,\n VISUALLY_HIDDEN_STYLES,\n VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of <Style\n */\n var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n return true;\n },\n });\n // @ts-ignore\n window.addEventListener('test', options, options);\n // @ts-ignore\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n // textarea will always _contain_ scroll inside self. It only can be hidden\n return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n if (!(node instanceof Element)) {\n return false;\n }\n var styles = window.getComputedStyle(node);\n return (\n // not-not-scrollable\n styles[overflow] !== 'hidden' &&\n // contains scroll inside self\n !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n var ownerDocument = node.ownerDocument;\n var current = node;\n do {\n // Skip over shadow root\n if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n current = current.host;\n }\n var isScrollable = elementCouldBeScrolled(axis, current);\n if (isScrollable) {\n var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n if (scrollHeight > clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","\"use client\";\n\n// src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VISUALLY_HIDDEN_STYLES } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar Select = (props) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n form\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState(null);\n const [valueNode, setValueNode] = React.useState(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: SELECT_NAME\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n caller: SELECT_NAME\n });\n const triggerPointerDownPosRef = React.useRef(null);\n const isFormControl = trigger ? form || !!trigger.closest(\"form\") : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsxs(\n SelectProvider,\n {\n required,\n scope: __scopeSelect,\n trigger,\n onTriggerChange: setTrigger,\n valueNode,\n onValueNodeChange: setValueNode,\n valueNodeHasChildren,\n onValueNodeHasChildrenChange: setValueNodeHasChildren,\n contentId: useId(),\n value,\n onValueChange: setValue,\n open,\n onOpenChange: setOpen,\n dir: direction,\n triggerPointerDownPosRef,\n disabled,\n children: [\n /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n SelectNativeOptionsProvider,\n {\n scope: props.__scopeSelect,\n onNativeOptionAdd: React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, []),\n onNativeOptionRemove: React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, []),\n children\n }\n ) }),\n isFormControl ? /* @__PURE__ */ jsxs(\n SelectBubbleInput,\n {\n \"aria-hidden\": true,\n required,\n tabIndex: -1,\n name,\n autoComplete,\n value,\n onChange: (event) => setValue(event.target.value),\n disabled,\n form,\n children: [\n value === void 0 ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n Array.from(nativeOptionsSet)\n ]\n },\n nativeSelectKey\n ) : null\n ]\n }\n ) });\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n const pointerTypeRef = React.useRef(\"touch\");\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== void 0) {\n context.onValueChange(nextItem.value);\n }\n });\n const handleOpen = (pointerEvent) => {\n if (!isDisabled) {\n context.onOpenChange(true);\n resetTypeahead();\n }\n if (pointerEvent) {\n context.triggerPointerDownPosRef.current = {\n x: Math.round(pointerEvent.pageX),\n y: Math.round(pointerEvent.pageY)\n };\n }\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"combobox\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open,\n \"aria-required\": context.required,\n \"aria-autocomplete\": \"none\",\n dir: context.dir,\n \"data-state\": context.open ? \"open\" : \"closed\",\n disabled: isDisabled,\n \"data-disabled\": isDisabled ? \"\" : void 0,\n \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n ...triggerProps,\n ref: composedRefs,\n onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n event.currentTarget.focus();\n if (pointerTypeRef.current !== \"mouse\") {\n handleOpen(event);\n }\n }),\n onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n handleOpen(event);\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== \"\";\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === \" \") return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== void 0;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...valueProps,\n ref: composedRefs,\n style: { pointerEvents: \"none\" },\n children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsx(Fragment, { children: placeholder }) : children\n }\n );\n }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar SelectPortal = (props) => {\n return /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...props });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n (props, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState();\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n if (!context.open) {\n const frag = fragment;\n return frag ? ReactDOM.createPortal(\n /* @__PURE__ */ jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { children: props.children }) }) }),\n frag\n ) : null;\n }\n return /* @__PURE__ */ jsx(SelectContentImpl, { ...props, ref: forwardedRef });\n }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar Slot = createSlot(\"SelectContent.RemoveScroll\");\nvar SelectContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n position = \"item-aligned\",\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState(null);\n const [selectedItemText, setSelectedItemText] = React.useState(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n useFocusGuards();\n const focusFirst = React.useCallback(\n (candidates) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: \"nearest\" });\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n const handlePointerMove = (event) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n };\n };\n const handlePointerUp = (event) => {\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n if (!content.contains(event.target)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener(\"pointermove\", handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n }\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener(\"blur\", close);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"blur\", close);\n window.removeEventListener(\"resize\", close);\n };\n }, [onOpenChange]);\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n setTimeout(() => nextItem.ref.current.focus());\n }\n });\n const itemRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n const popperContentProps = SelectPosition === SelectPopperPosition ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions\n } : {};\n return /* @__PURE__ */ jsx(\n SelectContentProvider,\n {\n scope: __scopeSelect,\n content,\n viewport,\n onViewportChange: setViewport,\n itemRefCallback,\n selectedItem,\n onItemLeave: handleItemLeave,\n itemTextRefCallback,\n focusSelectedItem,\n selectedItemText,\n position,\n isPositioned,\n searchRef,\n children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: context.open,\n onMountAutoFocus: (event) => {\n event.preventDefault();\n },\n onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n }),\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: true,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n SelectPosition,\n {\n role: \"listbox\",\n id: context.contentId,\n \"data-state\": context.open ? \"open\" : \"closed\",\n dir: context.dir,\n onContextMenu: (event) => event.preventDefault(),\n ...contentProps,\n ...popperContentProps,\n onPlaced: () => setIsPositioned(true),\n ref: composedRefs,\n style: {\n // flex layout so we can place the scroll buttons properly\n display: \"flex\",\n flexDirection: \"column\",\n // reset the outline by default as the content MAY get focused\n outline: \"none\",\n ...contentProps.style\n },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current);\n if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n const currentElement = event.target;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n const triggerRect = context.trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n if (context.dir !== \"rtl\") {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [\n CONTENT_MARGIN,\n // Prevents the content from going off the starting edge of the\n // viewport. It may still go off the ending edge, but this can be\n // controlled by the user since they may want to manage overflow in a\n // specific way.\n // https://github.com/radix-ui/primitives/issues/2049\n Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.left = clampedLeft + \"px\";\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.right = clampedRight + \"px\";\n }\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n if (willAlignWithoutTopOverflow) {\n const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = \"0px\";\n const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + \"px\";\n } else {\n const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n contentWrapper.style.top = \"0px\";\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + \"px\";\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + \"px\";\n contentWrapper.style.maxHeight = availableHeight + \"px\";\n onPlaced?.();\n requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced\n ]);\n useLayoutEffect(() => position(), [position]);\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n const handleScrollButtonChange = React.useCallback(\n (node) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n return /* @__PURE__ */ jsx(\n SelectViewportProvider,\n {\n scope: __scopeSelect,\n contentWrapper,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n children: /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: setContentWrapper,\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"fixed\",\n zIndex: contentZIndex\n },\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...popperProps,\n ref: composedRefs,\n style: {\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: \"border-box\",\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: \"100%\",\n ...popperProps.style\n }\n }\n )\n }\n )\n }\n );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeSelect,\n align = \"start\",\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n return /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n ...popperScope,\n ...popperProps,\n ref: forwardedRef,\n align,\n collisionPadding,\n style: {\n // Ensure border-box for floating-ui calculations\n boxSizing: \"border-box\",\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-select-viewport\": \"\",\n role: \"presentation\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: \"relative\",\n flex: 1,\n // Viewport should only be scrollable in the vertical direction.\n // This won't work in vertical writing modes, so we'll need to\n // revisit this if/when that is supported\n // https://developer.chrome.com/blog/vertical-form-controls\n overflow: \"hidden auto\",\n ...viewportProps.style\n },\n onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n contentWrapper.style.height = clampedNextHeight + \"px\";\n if (contentWrapper.style.bottom === \"0px\") {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n contentWrapper.style.justifyContent = \"flex-end\";\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })\n }\n ) })\n ] });\n }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n const pointerTypeRef = React.useRef(\"touch\");\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n if (value === \"\") {\n throw new Error(\n \"A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.\"\n );\n }\n return /* @__PURE__ */ jsx(\n SelectItemContextProvider,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n }, []),\n children: /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textValue,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"option\",\n \"aria-labelledby\": textId,\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-selected\": isSelected && isFocused,\n \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n tabIndex: disabled ? void 0 : -1,\n ...itemProps,\n ref: composedRefs,\n onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n onClick: composeEventHandlers(itemProps.onClick, () => {\n if (pointerTypeRef.current !== \"mouse\") handleSelect();\n }),\n onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n if (pointerTypeRef.current === \"mouse\") handleSelect();\n }),\n onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n }),\n onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n pointerTypeRef.current = event.pointerType;\n if (disabled) {\n contentContext.onItemLeave?.();\n } else if (pointerTypeRef.current === \"mouse\") {\n event.currentTarget.focus({ preventScroll: true });\n }\n }),\n onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n }),\n onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== \"\";\n if (isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n if (event.key === \" \") event.preventDefault();\n })\n }\n )\n }\n )\n }\n );\n }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n [itemContext.disabled, itemContext.value, textContent]\n );\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n ] });\n }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const canScrollUp2 = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollUp ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollDown ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n const autoScrollTimerRef = React.useRef(null);\n const getItems = useCollection(__scopeSelect);\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n }, [getItems]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-hidden\": true,\n ...scrollIndicatorProps,\n ref: forwardedRef,\n style: { flexShrink: 0, ...scrollIndicatorProps.style },\n onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })\n }\n );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n }\n);\nSelectArrow.displayName = ARROW_NAME;\nvar BUBBLE_INPUT_NAME = \"SelectBubbleInput\";\nvar SelectBubbleInput = React.forwardRef(\n ({ __scopeSelect, value, ...props }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const select = ref.current;\n if (!select) return;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n \"value\"\n );\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"change\", { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.select,\n {\n ...props,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },\n ref: composedRefs,\n defaultValue: value\n }\n );\n }\n);\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction shouldShowPlaceholder(value) {\n return value === \"\" || value === void 0;\n}\nfunction useTypeaheadSearch(onSearchChange) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef(\"\");\n const timerRef = React.useRef(0);\n const handleTypeaheadSearch = React.useCallback(\n (key) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n },\n [handleSearchChange]\n );\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = \"\";\n window.clearTimeout(timerRef.current);\n }, []);\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find(\n (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root2 = Select;\nvar Trigger = SelectTrigger;\nvar Value = SelectValue;\nvar Icon = SelectIcon;\nvar Portal = SelectPortal;\nvar Content2 = SelectContent;\nvar Viewport = SelectViewport;\nvar Group = SelectGroup;\nvar Label = SelectLabel;\nvar Item = SelectItem;\nvar ItemText = SelectItemText;\nvar ItemIndicator = SelectItemIndicator;\nvar ScrollUpButton = SelectScrollUpButton;\nvar ScrollDownButton = SelectScrollDownButton;\nvar Separator = SelectSeparator;\nvar Arrow2 = SelectArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Group,\n Icon,\n Item,\n ItemIndicator,\n ItemText,\n Label,\n Portal,\n Root2 as Root,\n ScrollDownButton,\n ScrollUpButton,\n Select,\n SelectArrow,\n SelectContent,\n SelectGroup,\n SelectIcon,\n SelectItem,\n SelectItemIndicator,\n SelectItemText,\n SelectLabel,\n SelectPortal,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n Separator,\n Trigger,\n Value,\n Viewport,\n createSelectScope\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Select — Radix-backed combobox.\n *\n * Mobile note: Radix Select renders a native-feeling overlay (not the\n * iOS picker wheel). For very long lists (e.g. agent list, user list\n * in Memory), prefer Command + Popover (added in a later PR) so users\n * can search-filter.\n */\n\nimport * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst Select = SelectPrimitive.Root\nconst SelectGroup = SelectPrimitive.Group\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex h-8 w-full items-center justify-between gap-2',\n 'rounded-md border border-border bg-surface px-3 py-1 text-sm',\n 'placeholder:text-text-muted',\n 'focus:outline-none focus:ring-2 focus:ring-accent focus:ring-offset-1 focus:ring-offset-bg',\n 'disabled:cursor-not-allowed disabled:opacity-55',\n '[&>span]:line-clamp-1',\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-60\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={cn(\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden',\n 'rounded-md border border-border bg-surface text-text shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n position === 'popper' && [\n 'data-[side=bottom]:translate-y-1',\n 'data-[side=top]:-translate-y-1',\n 'data-[side=left]:-translate-x-1',\n 'data-[side=right]:translate-x-1',\n ],\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]',\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n 'px-2 py-1.5 text-xs font-semibold uppercase tracking-wide text-text-muted',\n className,\n )}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded py-1.5 pl-8 pr-2 text-sm outline-none',\n 'focus:bg-surface-hover focus:text-text',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","/**\n * AgentPicker — dropdown to switch the active agent in the chat\n * surface. Driven by the `agents` list the WS server pushes via\n * `init` / `agents` messages.\n */\n\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\n\nexport interface AgentPickerProps {\n agents: string[]\n value: string\n onChange: (agent: string) => void\n}\n\nexport function AgentPicker({ agents, value, onChange }: AgentPickerProps): JSX.Element {\n return (\n <Select value={value || undefined} onValueChange={onChange}>\n <SelectTrigger className=\"h-7 w-28 sm:w-36 text-xs\">\n <SelectValue placeholder={agents[0] ?? '—'} />\n </SelectTrigger>\n <SelectContent>\n {agents.map((a) => (\n <SelectItem key={a} value={a}>\n {a}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n","/**\n * stores/prefs.ts — global user preferences. Single zustand store\n * (persisted to localStorage) covering theme + language for now;\n * future PRs may add sidebar collapsed, lastActiveWorkspace, etc.\n *\n * Persistence key strategy:\n * theme — `agim-theme` ('system' is stored as absence, matching\n * the legacy _app.js behavior, so v1 → v2 carry-over\n * is byte-for-byte compatible).\n * lang — `im-hub-lang`, the existing key every legacy HTML\n * reads. Mirrors the lang the user picked in v1 so\n * upgrading doesn't reset the UI to English.\n *\n * The store uses the canonical zustand persist middleware with a\n * custom serializer (rather than the auto-JSON wrapper) so each\n * piece sits at its own localStorage key — that's what makes the\n * v1/v2 sharing work.\n */\n\nimport { create } from 'zustand'\nimport { useEffect } from 'react'\n\nexport type ThemeMode = 'system' | 'light' | 'dark'\nexport type Lang = 'en' | 'zh'\n\nconst THEME_KEY = 'agim-theme'\nconst LANG_KEY = 'im-hub-lang'\n\ninterface PrefsState {\n theme: ThemeMode\n lang: Lang\n setTheme: (mode: ThemeMode) => void\n cycleTheme: () => void\n setLang: (lang: Lang) => void\n}\n\nfunction readTheme(): ThemeMode {\n try {\n const v = localStorage.getItem(THEME_KEY)\n if (v === 'light' || v === 'dark') return v\n } catch {\n /* private-mode */\n }\n return 'system'\n}\n\nfunction readLang(): Lang {\n try {\n const v = localStorage.getItem(LANG_KEY)\n if (v === 'en' || v === 'zh') return v\n } catch {\n /* private-mode */\n }\n // No persisted value yet — match the browser preference once, then\n // freeze on first explicit user choice.\n const nav = (navigator.language || 'en').toLowerCase()\n return nav.startsWith('zh') ? 'zh' : 'en'\n}\n\nfunction writeTheme(mode: ThemeMode): void {\n try {\n if (mode === 'system') localStorage.removeItem(THEME_KEY)\n else localStorage.setItem(THEME_KEY, mode)\n } catch {\n /* ignore */\n }\n}\n\nfunction writeLang(lang: Lang): void {\n try {\n localStorage.setItem(LANG_KEY, lang)\n } catch {\n /* ignore */\n }\n}\n\nexport const usePrefs = create<PrefsState>((set, get) => ({\n theme: readTheme(),\n lang: readLang(),\n setTheme: (mode) => {\n writeTheme(mode)\n set({ theme: mode })\n },\n cycleTheme: () => {\n const cur = get().theme\n const next: ThemeMode = cur === 'system' ? 'light' : cur === 'light' ? 'dark' : 'system'\n writeTheme(next)\n set({ theme: next })\n },\n setLang: (lang) => {\n writeLang(lang)\n set({ lang })\n },\n}))\n\n/**\n * applyThemeToDocument — keeps `<html data-theme>` in sync with the\n * active theme. Mirrors the IIFE in index.html so the first paint and\n * subsequent toggles look identical.\n */\nfunction applyThemeToDocument(mode: ThemeMode): void {\n if (mode === 'system') document.documentElement.removeAttribute('data-theme')\n else document.documentElement.setAttribute('data-theme', mode)\n}\n\n/**\n * useApplyTheme — call from <App>. Subscribes to theme + the\n * `prefers-color-scheme` media query so `system` mode tracks OS\n * preference changes without a reload. The IIFE in index.html\n * applied the initial value before React hydrated; this hook\n * keeps it consistent thereafter.\n */\nexport function useApplyTheme(): void {\n const theme = usePrefs((s) => s.theme)\n useEffect(() => {\n applyThemeToDocument(theme)\n if (theme !== 'system') return\n // Watch OS preference flips. The CSS itself handles the colors via\n // a prefers-color-scheme @media block; we only need to nudge a\n // re-render when sonner's portaled toast or any other root-themed\n // surface needs to observe the change.\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const onChange = (): void => applyThemeToDocument(theme)\n mq.addEventListener('change', onChange)\n return () => mq.removeEventListener('change', onChange)\n }, [theme])\n}\n\n/** Test-only — reset to initial defaults without touching localStorage. */\nexport function _resetPrefsForTest(): void {\n usePrefs.setState({ theme: 'system', lang: 'en' })\n}\n","/**\n * ThemeAndLangControls — shared topbar widget (lang + theme Select).\n * Lives in shell/ so every route's topbar reaches for the same\n * component; if we ever change the affordance (icon button vs\n * dropdown vs cycle button) the change lands once.\n */\n\nimport { useTranslation } from 'react-i18next'\nimport { Laptop, Moon, SunMedium } from 'lucide-react'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { usePrefs, type Lang, type ThemeMode } from '@/stores/prefs'\n\nexport function ThemeAndLangControls(): JSX.Element {\n const { t } = useTranslation()\n const theme = usePrefs((s) => s.theme)\n const lang = usePrefs((s) => s.lang)\n const setTheme = usePrefs((s) => s.setTheme)\n const setLang = usePrefs((s) => s.setLang)\n\n return (\n <>\n <Select value={lang} onValueChange={(v) => setLang(v as Lang)}>\n <SelectTrigger className=\"h-7 w-16 sm:w-20 text-xs\" aria-label={t('lang.label')}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"en\">{t('lang.en')}</SelectItem>\n <SelectItem value=\"zh\">{t('lang.zh')}</SelectItem>\n </SelectContent>\n </Select>\n <Select value={theme} onValueChange={(v) => setTheme(v as ThemeMode)}>\n <SelectTrigger className=\"h-7 w-16 text-xs sm:w-28\" aria-label={t('theme.label')}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"system\">\n <span className=\"inline-flex items-center gap-2\">\n <Laptop className=\"h-4 w-4\" /> {t('theme.system')}\n </span>\n </SelectItem>\n <SelectItem value=\"light\">\n <span className=\"inline-flex items-center gap-2\">\n <SunMedium className=\"h-4 w-4\" /> {t('theme.light')}\n </span>\n </SelectItem>\n <SelectItem value=\"dark\">\n <span className=\"inline-flex items-center gap-2\">\n <Moon className=\"h-4 w-4\" /> {t('theme.dark')}\n </span>\n </SelectItem>\n </SelectContent>\n </Select>\n </>\n )\n}\n","/**\n * useMediaQuery + useIsDesktop — viewport-driven render branches.\n *\n * The shell's Topbar pre-R10 rendered its nav twice (once for desktop\n * inline, once for mobile second-row strip), relying on Tailwind's\n * `hidden` / `sm:hidden` to hide one. jsdom doesn't strip\n * `display:none` elements from the accessibility tree, so\n * `getByRole('link', { name: 'Chat' })` matched both — three tests\n * failed every run. Real screen readers were also announcing every\n * nav item twice.\n *\n * This hook gives the same render the right shape at runtime: read\n * the breakpoint via `matchMedia`, render once, and only swap when\n * the viewport actually crosses the line.\n *\n * SPA-only: no SSR mismatch concern. On first render before the\n * `useEffect` populates, we read the matchMedia value synchronously\n * in the initializer so the first paint is already correct on a\n * desktop / mobile load (initialiser runs in both browser + jsdom).\n */\n\nimport { useEffect, useState } from 'react'\n\n/** Subscribe to a media query string. Stable identity per query. */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n // jsdom + the test environment provide a matchMedia mock that\n // always returns matches=false. SSR-time would fail; we don't SSR.\n if (typeof window === 'undefined' || !window.matchMedia) return false\n return window.matchMedia(query).matches\n })\n useEffect(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return\n const mq = window.matchMedia(query)\n const onChange = (e: MediaQueryListEvent): void => setMatches(e.matches)\n // Match the current value once on mount in case the user resized\n // between SSR and hydration (paranoia for the future-SSR case).\n setMatches(mq.matches)\n mq.addEventListener('change', onChange)\n return () => mq.removeEventListener('change', onChange)\n }, [query])\n return matches\n}\n\n/** `≥ sm` breakpoint (Tailwind default = 640px). Topbar uses this to\n * pick between inline desktop nav and the row-2 mobile strip. */\nexport function useIsDesktop(): boolean {\n return useMediaQuery('(min-width: 640px)')\n}\n","/**\n * Topbar — shared application chrome. Pinned to the top of every\n * protected route. Holds: brand, primary nav (Chat / Tasks / ...),\n * theme + language controls.\n *\n * Mobile (< sm):\n * * Brand stays on the left\n * * Nav collapses into a horizontal scroll strip (no hamburger\n * yet — we have ≤ 9 nav items so a horizontal scroller is more\n * thumb-friendly than a drawer for now)\n * * Theme+lang stay on the right, condensed\n *\n * The /chat route shipped in M1 with its own bespoke topbar (status\n * pill + agent picker). It'll adopt this shell in a follow-up; the\n * Topbar is forward-compatible (extra topbar slot left of the\n * controls for future page chrome via children).\n */\n\nimport { NavLink } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { ThemeAndLangControls } from '@/components/shell/theme-lang-controls'\nimport { useIsDesktop } from '@/hooks/use-media-query'\nimport { cn } from '@/lib/utils'\n\ninterface NavEntry {\n to: string\n i18nKey: string\n}\n\n/** Order matches the M1 plan's IA. Each entry is gated on the route\n * actually existing — we show only the ones plumbed-in so users\n * don't click a \"Reminders\" link that 404s mid-M2. As each follow-up\n * PR lands its route, the `mounted` flag flips. */\nconst NAV: Array<NavEntry & { mounted: boolean }> = [\n { to: '/', i18nKey: 'nav.chat', mounted: true },\n { to: '/tasks', i18nKey: 'nav.tasks', mounted: true },\n { to: '/approvals', i18nKey: 'nav.approvals', mounted: true },\n { to: '/reminders', i18nKey: 'nav.reminders', mounted: true },\n { to: '/memos', i18nKey: 'nav.memos', mounted: true },\n { to: '/memory', i18nKey: 'nav.memory', mounted: true },\n // Skills consolidated under Settings → 技能 in 2026-05 (installed CRUD +\n // skillhub 热门 in one place). Old /skills URLs still resolve via the\n // redirect in router.tsx so bookmarks don't 404.\n { to: '/workspace', i18nKey: 'nav.workspace', mounted: true },\n { to: '/observability', i18nKey: 'nav.observability', mounted: true },\n { to: '/settings', i18nKey: 'nav.settings', mounted: true },\n]\n\nexport interface TopbarProps {\n /** Optional content slot rendered between the nav and the\n * theme/lang controls. Pages use it for page-specific chrome\n * (the chat route's status pill + agent picker live here once\n * /chat adopts the shell). */\n children?: React.ReactNode\n}\n\nexport function Topbar({ children }: TopbarProps): JSX.Element {\n const { t } = useTranslation()\n // R10: render nav exactly once. Pre-R10 we rendered it both in the\n // `hidden sm:flex` desktop slot AND a `sm:hidden` mobile row, relying\n // on CSS to hide one. That left two copies in the accessibility tree\n // (and the test DOM), breaking `getByRole` lookups and announcing\n // every nav item twice to screen readers.\n const isDesktop = useIsDesktop()\n const navLinks = (\n <nav\n className={cn(\n 'flex flex-1 min-w-0 items-center gap-1',\n 'overflow-x-auto scrollbar-thin',\n '[&::-webkit-scrollbar]:h-1 [&::-webkit-scrollbar-thumb]:bg-border',\n )}\n aria-label={t('appName')}\n >\n {NAV.filter((n) => n.mounted).map((n) => (\n <NavLink\n key={n.to}\n to={n.to}\n end={n.to === '/'}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-2.5 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(n.i18nKey)}\n </NavLink>\n ))}\n </nav>\n )\n\n return (\n <header\n className={cn(\n 'sticky top-0 z-20',\n // Mobile (<sm): two-row layout — brand + widgets on row 1, nav\n // links on row 2 (horizontally scrollable). Desktop (≥sm): single\n // row, nav inline. Avoids the \"brand + 4 widgets squeeze nav off-\n // screen\" issue on /chat where children = AgentPicker pushes the\n // nav width below the threshold to even show the active item.\n 'flex flex-col sm:flex-row sm:items-center sm:gap-3',\n 'border-b border-border bg-surface',\n 'pt-safe',\n 'shadow-sm',\n )}\n >\n {/* Row 1 (mobile) / left half (desktop) — brand + widgets */}\n <div\n className={cn(\n 'flex items-center gap-2 sm:gap-3',\n 'overflow-x-hidden',\n 'px-3 sm:px-4 py-2 sm:py-2',\n 'sm:flex-1 sm:min-w-0',\n )}\n >\n <NavLink\n to=\"/\"\n className=\"flex shrink-0 items-center gap-1 text-md font-semibold no-underline\"\n end\n >\n <span aria-hidden=\"true\">🤖</span>\n <span className=\"hidden sm:inline\">{t('appName')}</span>\n </NavLink>\n\n {/* Desktop nav lives inline on row 1; the mobile copy is on\n row 2 below. Render only one based on the viewport. */}\n {isDesktop && <div className=\"flex flex-1 min-w-0\">{navLinks}</div>}\n\n {children && <div className=\"flex items-center gap-2\">{children}</div>}\n\n <div className=\"flex shrink-0 items-center gap-2\">\n <ThemeAndLangControls />\n </div>\n </div>\n\n {/* Row 2 (mobile only) — scrollable nav strip */}\n {!isDesktop && (\n <div className=\"border-t border-border px-3 py-1\">{navLinks}</div>\n )}\n </header>\n )\n}\n","/**\n * /chat — agim's primary surface. Replaces the PR-5 placeholder.\n *\n * Layout: sticky topbar (agent picker + status dot + theme/lang) +\n * scrollable message list + bottom input pinned with safe-area\n * padding. Uses `min-h-dvh` so the soft keyboard pushes the input\n * up instead of overlaying it on iOS Safari.\n *\n * State: useChat() owns the WebSocket + reducer; the route is a\n * thin presenter — every interaction (send, switch-agent, approval\n * click) calls through. Theme + language come from the shell's\n * usePrefs store; lib/api/errors.ts handles the toast.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Send, AlertCircle, MessageSquarePlus } from 'lucide-react'\nimport { toast } from 'sonner'\n\nimport { useChat } from '@/hooks/use-chat'\nimport { Button } from '@/components/ui/button'\nimport { Badge } from '@/components/ui/badge'\nimport { MessageBubble } from '@/components/chat/message-bubble'\nimport { ApprovalDock } from '@/components/chat/approval-dock'\nimport { AgentPicker } from '@/components/chat/agent-picker'\nimport { Topbar } from '@/components/shell/topbar'\nimport { cn } from '@/lib/utils'\n\nconst STATUS_STYLES: Record<string, string> = {\n open: 'bg-success',\n connecting: 'bg-warning animate-pulse',\n closed: 'bg-text-muted',\n error: 'bg-danger',\n}\n\nexport default function ChatRoute(): JSX.Element {\n const { t } = useTranslation()\n const {\n state, send, switchAgent, approvalClick, newConversation, clearError,\n } = useChat()\n const [input, setInput] = useState('')\n const listRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLTextAreaElement>(null)\n\n // Auto-scroll to bottom on new messages OR streaming chunk. Use\n // requestAnimationFrame so the layout has settled before we scroll;\n // also tolerate the case where the user scrolled up intentionally.\n useEffect(() => {\n if (!listRef.current) return\n const el = listRef.current\n const nearBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 200\n if (!nearBottom && state.currentReplyId == null) return\n requestAnimationFrame(() => {\n el.scrollTop = el.scrollHeight\n })\n }, [state.messages, state.currentReplyId])\n\n // Surface WS errors as toasts (and clear so they don't re-fire on\n // every render).\n useEffect(() => {\n if (!state.error) return\n toast.error(state.error)\n clearError()\n }, [state.error, clearError])\n\n function onSubmit(e?: React.FormEvent): void {\n e?.preventDefault()\n const v = input.trim()\n if (!v) return\n if (state.status !== 'open') {\n toast.error(t('chat.notConnected', { defaultValue: 'Not connected. Reconnecting…' }))\n return\n }\n send(v)\n setInput('')\n // Keep focus on mobile keyboards.\n requestAnimationFrame(() => inputRef.current?.focus())\n }\n\n function onKeyDown(e: React.KeyboardEvent<HTMLTextAreaElement>): void {\n // Respect IME composition: CJK input methods use Enter to commit\n // candidates. Without this guard, pressing Enter to confirm a\n // Chinese candidate would also submit the message — the textarea\n // sees an Enter event the IME hasn't yet \"consumed\". `isComposing`\n // is true while the composition span is active; `keyCode === 229`\n // is the legacy fallback for browsers that don't expose the flag.\n const ne = e.nativeEvent as KeyboardEvent & { isComposing?: boolean }\n if (ne.isComposing || e.keyCode === 229) return\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onSubmit()\n }\n }\n\n return (\n <div className=\"flex h-dvh flex-col bg-bg\">\n {/* App-wide Topbar (brand + nav + theme/lang). Chat-specific\n chrome — WS status pill + agent picker — slots into the\n children prop so it stays on the right of the topbar. */}\n <Topbar>\n <span\n className={cn('inline-block h-2 w-2 rounded-full', STATUS_STYLES[state.status])}\n title={state.status}\n />\n <span className=\"hidden text-xs text-text-dim sm:inline\">{state.status}</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n newConversation()\n toast.success(t('chat.newConvToast', { defaultValue: 'Started a new conversation' }))\n requestAnimationFrame(() => inputRef.current?.focus())\n }}\n disabled={state.status !== 'open'}\n title={t('chat.newConvHint', {\n defaultValue: 'Clear messages and start a fresh session',\n })}\n aria-label={t('chat.newConv', { defaultValue: 'New conversation' })}\n >\n <MessageSquarePlus className=\"h-4 w-4\" />\n <span className=\"hidden text-xs sm:inline\">\n {t('chat.newConv', { defaultValue: 'New' })}\n </span>\n </Button>\n <AgentPicker agents={state.agents} value={state.agent} onChange={switchAgent} />\n </Topbar>\n\n {/* Message list */}\n <div\n ref={listRef}\n className=\"flex-1 overflow-y-auto\"\n >\n <div className=\"mx-auto flex max-w-3xl flex-col gap-2 px-3 py-3 sm:px-4\">\n {state.messages.length === 0 && state.status === 'open' && (\n <div className=\"flex flex-col items-center gap-2 py-16 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-surface-2 text-2xl\">\n 💬\n </div>\n <h2 className=\"text-base font-semibold\">\n {t('chat.welcomeTitle', { defaultValue: 'Start a conversation' })}\n </h2>\n <p className=\"max-w-md text-sm text-text-dim\">\n {t('chat.welcomeBody', {\n defaultValue:\n 'Type a message to ask the active agent. Use the agent dropdown to switch.',\n })}\n </p>\n </div>\n )}\n {state.messages.length === 0 && state.status !== 'open' && (\n <div className=\"grid place-items-center py-16 text-center\">\n <AlertCircle className=\"h-10 w-10 text-text-muted\" />\n <p className=\"mt-3 text-sm text-text-dim\">\n {state.status === 'connecting'\n ? t('chat.connecting', { defaultValue: 'Connecting to agim…' })\n : t('chat.disconnected', {\n defaultValue:\n 'Disconnected. Reconnecting automatically; you can keep typing.',\n })}\n </p>\n </div>\n )}\n {state.messages\n // v1.2.115 — approval cards now render in the dock, not\n // inline. Filter out any approval-typed messages that may\n // exist in restored history from older builds (server-side\n // session may still hold them as system rows).\n .filter((m) => !m.approval)\n .map((m) => (\n <MessageBubble\n key={m.id}\n msg={m}\n onApprove={(mid, reqId, choice) => approvalClick(mid, reqId, choice)}\n />\n ))}\n </div>\n </div>\n\n {/* v1.2.115 — floating approval dock pinned above the input.\n Renders only when there are pending cards. */}\n <ApprovalDock\n approvals={state.pendingApprovals}\n onApprove={(mid, reqId, choice) => approvalClick(mid, reqId, choice)}\n />\n\n {/* Input — height matches the h-8 topbar widgets (agent picker /\n lang select / theme button) so the whole chat surface has one\n consistent vertical rhythm. */}\n <form\n onSubmit={onSubmit}\n className=\"sticky bottom-0 border-t border-border bg-surface px-4 py-2 pb-safe sm:px-6\"\n >\n <div className=\"mx-auto flex max-w-3xl items-end gap-2\">\n <textarea\n ref={inputRef}\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={onKeyDown}\n placeholder={t('chat.inputPlaceholder', {\n defaultValue: 'Message… (Enter sends, Shift+Enter newlines)',\n })}\n rows={1}\n className={cn(\n 'flex-1 resize-none rounded-md border border-border bg-bg',\n 'px-3 py-1.5 text-sm leading-5',\n 'focus:outline-none focus:ring-2 focus:ring-accent focus:ring-offset-1 focus:ring-offset-bg',\n 'max-h-32 min-h-8',\n )}\n />\n <Button\n type=\"submit\"\n disabled={!input.trim() || state.status !== 'open'}\n aria-label={t('chat.send', { defaultValue: 'Send' })}\n className=\"h-8 w-8 p-0\"\n >\n <Send className=\"h-4 w-4\" />\n </Button>\n </div>\n {state.currentReplyId && (\n <div className=\"mx-auto mt-2 flex max-w-3xl items-center gap-2\">\n <Badge variant=\"info\">\n {t('chat.streaming', { defaultValue: '… streaming' })}\n </Badge>\n </div>\n )}\n </form>\n </div>\n )\n}\n","/**\n * 404 — fallback for unknown paths. Renders inside the Topbar shell\n * so the operator keeps app-level nav (and can route to any other\n * page from a typo'd URL).\n */\n\nimport { useTranslation } from 'react-i18next'\nimport { Link, useLocation } from 'react-router-dom'\nimport { FileQuestion } from 'lucide-react'\nimport { Topbar } from '@/components/shell/topbar'\nimport { Button } from '@/components/ui/button'\n\nexport default function NotFoundRoute(): JSX.Element {\n const { t } = useTranslation()\n const loc = useLocation()\n return (\n <div className=\"flex min-h-dvh flex-col bg-bg\">\n <Topbar />\n <main className=\"grid flex-1 place-items-center px-4 py-8 pb-safe\">\n <div className=\"flex max-w-md flex-col items-center gap-3 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-surface-2 text-text-dim\">\n <FileQuestion className=\"h-6 w-6\" />\n </div>\n <div className=\"text-6xl font-bold tracking-tight text-text-muted\">404</div>\n <h1 className=\"text-xl font-semibold\">\n {t('notFound.title', { defaultValue: 'Nothing here.' })}\n </h1>\n <p className=\"text-sm text-text-dim\">\n {t('notFound.description', {\n defaultValue: \"The page you're looking for doesn't exist.\",\n })}\n </p>\n <code className=\"rounded bg-surface-2 px-2 py-0.5 text-xs text-text-muted\">{loc.pathname}</code>\n <Button asChild className=\"mt-2\">\n <Link to=\"/\">{t('actions.back')}</Link>\n </Button>\n </div>\n </main>\n </div>\n )\n}\n","/**\n * router.tsx — single source of truth for the SPA routing config.\n *\n * Routes split into two tiers:\n * * Eager: /login + / (chat) — entry points the operator hits\n * immediately, so loading them inline avoids a chunk fetch on\n * the critical first-paint path.\n * * Lazy: everything else, via react-router's `lazy:` property.\n * Each `() => import(...)` produces its own Vite chunk, so\n * /memory etc. only pay their KB when the user navigates there.\n *\n * The whole tree is wrapped in <ErrorBoundary> at the root so an\n * uncaught render error in any child route falls back to the\n * friendly \"Something went wrong\" surface instead of a blank page.\n */\n\nimport { createBrowserRouter, Navigate, RouterProvider } from 'react-router-dom'\nimport { RequireAuth } from '@/components/shell/require-auth'\nimport { ErrorBoundary } from '@/components/shell/error-boundary'\n\nimport LoginRoute from '@/routes/login'\nimport ChatRoute from '@/routes/chat'\nimport NotFoundRoute from '@/routes/not-found'\n\n/** Wrap a `lazy:` factory so the route renders behind RequireAuth.\n * We can't apply the auth wrapper via element AND lazy, so the\n * wrap happens once the module loads. */\nfunction authedLazy(factory: () => Promise<{ default: React.ComponentType }>) {\n return async () => {\n const mod = await factory()\n const Cmp = mod.default\n return {\n element: (\n <RequireAuth>\n <Cmp />\n </RequireAuth>\n ),\n }\n }\n}\n\n/** Plain `lazy:` for nested route children — they inherit auth from\n * the parent route's element. */\nfunction lazy(factory: () => Promise<{ default: React.ComponentType }>) {\n return async () => {\n const mod = await factory()\n const Cmp = mod.default\n return { element: <Cmp /> }\n }\n}\n\nconst router = createBrowserRouter([\n { path: '/login', element: <LoginRoute /> },\n {\n path: '/',\n element: (\n <RequireAuth>\n <ChatRoute />\n </RequireAuth>\n ),\n },\n {\n path: '/tasks',\n lazy: authedLazy(() => import('@/routes/tasks/layout')),\n children: [\n { index: true, element: <Navigate to=\"jobs\" replace /> },\n { path: 'jobs', lazy: lazy(() => import('@/routes/tasks/jobs')) },\n { path: 'subtasks', lazy: lazy(() => import('@/routes/tasks/subtasks')) },\n { path: 'bgjobs', lazy: lazy(() => import('@/routes/tasks/bgjobs')) },\n { path: 'schedules', lazy: lazy(() => import('@/routes/tasks/schedules')) },\n { path: 'outbox', lazy: lazy(() => import('@/routes/tasks/outbox')) },\n { path: 'a2a', lazy: lazy(() => import('@/routes/tasks/a2a')) },\n // P1 follow-up — cross-thread admin views (heartbeat / goals / asks).\n { path: 'heartbeat', lazy: lazy(() => import('@/routes/tasks/heartbeat')) },\n { path: 'goals', lazy: lazy(() => import('@/routes/tasks/goals')) },\n { path: 'asks', lazy: lazy(() => import('@/routes/tasks/asks')) },\n ],\n },\n {\n path: '/approvals',\n lazy: authedLazy(() => import('@/routes/approvals')),\n },\n {\n path: '/reminders',\n lazy: authedLazy(() => import('@/routes/reminders')),\n },\n {\n path: '/memos',\n lazy: authedLazy(() => import('@/routes/memos')),\n },\n {\n path: '/memory',\n lazy: authedLazy(() => import('@/routes/memory/layout')),\n children: [\n { index: true, element: <Navigate to=\"facts\" replace /> },\n { path: 'facts', lazy: lazy(() => import('@/routes/memory/facts')) },\n { path: 'persona', lazy: lazy(() => import('@/routes/memory/persona')) },\n { path: 'vector', lazy: lazy(() => import('@/routes/memory/vector')) },\n // Skills moved into Settings → 技能 (2026-05 second pass). Old\n // /memory/skills + /skills bookmarks redirect to the new combined\n // Settings home (installed + skillhub 热门).\n { path: 'skills', element: <Navigate to=\"/settings/agim-skills/installed\" replace /> },\n ],\n },\n {\n // Backward-compat: /skills, /skills/installed, /skills/hot all land\n // on the new merged Settings → 技能 home. Keep these forever; they're\n // tiny and protect prior bookmarks / IM-pinned links.\n path: '/skills',\n children: [\n { index: true, element: <Navigate to=\"/settings/agim-skills/installed\" replace /> },\n { path: 'installed', element: <Navigate to=\"/settings/agim-skills/installed\" replace /> },\n { path: 'hot', element: <Navigate to=\"/settings/agim-skills/hot\" replace /> },\n ],\n },\n {\n path: '/workspace',\n lazy: authedLazy(() => import('@/routes/workspace')),\n },\n {\n path: '/observability',\n lazy: authedLazy(() => import('@/routes/observability/layout')),\n children: [\n { index: true, element: <Navigate to=\"health\" replace /> },\n { path: 'health', lazy: lazy(() => import('@/routes/observability/health')) },\n { path: 'topn', lazy: lazy(() => import('@/routes/observability/topn')) },\n { path: 'audit', lazy: lazy(() => import('@/routes/observability/audit')) },\n ],\n },\n {\n path: '/settings',\n lazy: authedLazy(() => import('@/routes/settings/layout')),\n children: [\n { index: true, element: <Navigate to=\"messengers\" replace /> },\n { path: 'messengers', lazy: lazy(() => import('@/routes/settings/messengers')) },\n { path: 'email', lazy: lazy(() => import('@/routes/settings/email')) },\n { path: 'viewer', lazy: lazy(() => import('@/routes/settings/viewer')) },\n { path: 'agents', lazy: lazy(() => import('@/routes/settings/agents')) },\n { path: 'policy', lazy: lazy(() => import('@/routes/settings/policy')) },\n { path: 'security', lazy: lazy(() => import('@/routes/settings/security')) },\n // R13 follow-up — generic \"/settings/env\" raw editor removed. The\n // domain-specific pages (email / policy / viewer / memory) still\n // mount their own UIs against /api/env for the keys they own; the\n // catch-all editor was a foot-gun and the user explicitly asked\n // for it gone. /api/env GET+PUT endpoints stay (admin-gated).\n { path: 'service', lazy: lazy(() => import('@/routes/settings/service')) },\n { path: 'admins', lazy: lazy(() => import('@/routes/settings/admins')) },\n { path: 'workspaces', lazy: lazy(() => import('@/routes/settings/workspaces')) },\n { path: 'llm', lazy: lazy(() => import('@/routes/settings/llm')) },\n { path: 'mcp', lazy: lazy(() => import('@/routes/settings/mcp')) },\n { path: 'native-agent', lazy: lazy(() => import('@/routes/settings/native-agent')) },\n {\n path: 'agim-skills',\n lazy: lazy(() => import('@/routes/settings/agim-skills/layout')),\n children: [\n { index: true, element: <Navigate to=\"installed\" replace /> },\n { path: 'installed', lazy: lazy(() => import('@/routes/settings/agim-skills/installed')) },\n { path: 'hot', lazy: lazy(() => import('@/routes/settings/agim-skills/hot')) },\n ],\n },\n ],\n },\n { path: '*', element: <NotFoundRoute /> },\n])\n\nexport function AppRouter(): JSX.Element {\n return (\n <ErrorBoundary>\n <RouterProvider router={router} />\n </ErrorBoundary>\n )\n}\n","/**\n * lib/query-client.ts — single QueryClient instance for the app.\n *\n * Defaults tuned for an admin/ops console:\n * - 30s staleTime: lists feel \"live\" without hammering the API\n * every focus event; routes that need true real-time (jobs,\n * approvals) subscribe to /events SSE on top via useEventStream\n * (PR-9).\n * - retry: 0 on mutations (idempotency unclear backend-side); 1\n * retry on queries with a short backoff (transient flakes\n * during agent boot are common).\n * - refetchOnWindowFocus: false — the agim console isn't a\n * dashboard people leave open in the background; tab focus\n * refetching causes more janky reloads than useful refreshes.\n * The SSE channel is the explicit live-data path.\n */\n\nimport { QueryClient } from '@tanstack/react-query'\n\nexport const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30_000,\n gcTime: 5 * 60_000,\n retry: 1,\n retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 8000),\n refetchOnWindowFocus: false,\n refetchOnReconnect: true, // mobile WiFi/cell swap → refetch\n },\n mutations: {\n retry: 0,\n },\n },\n})\n","const isString = obj => typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return '' + object;\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n if (!Object.prototype.hasOwnProperty.call(obj, k)) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nvar _entityMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = function (obj, path) {\n let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n if (!obj) return undefined;\n if (obj[path]) {\n if (!Object.prototype.hasOwnProperty.call(obj, path)) return undefined;\n return obj[path];\n }\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].indexOf(typeof next) > -1 && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code?.replace('_', '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n console?.[type]?.apply?.(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.init(concreteLogger, options);\n }\n init(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return this.forward(args, 'log', '', true);\n }\n warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return this.forward(args, 'warn', '', true);\n }\n error() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n return this.forward(args, 'error', '');\n }\n deprecate() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(_ref => {\n let [observer, numTimesAdded] = _ref;\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(_ref2 => {\n let [observer, numTimesAdded] = _ref2;\n for (let i = 0; i < numTimesAdded; i++) {\n observer.apply(observer, [event, ...args]);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: ['translation'],\n defaultNS: 'translation'\n };\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.indexOf('.') > -1) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data?.[lng]?.[ns], key, keySeparator);\n }\n addResource(lng, ns, key, value) {\n let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false,\n skipCopy: false\n };\n let path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n value = this.processors[processor]?.process(value, key, options, translator) ?? value;\n });\n return value;\n }\n};\n\nconst checkedLoadedFor = {};\nconst shouldHandleAsObject = res => !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\nclass Translator extends EventEmitter {\n constructor(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n if (key == null) {\n return false;\n }\n const resolved = this.resolve(key, options);\n return resolved?.res !== undefined;\n }\n extractFromKey(key, options) {\n let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let namespaces = options.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, options, lastKey) {\n if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof options === 'object') options = {\n ...options\n };\n if (!options) options = {};\n if (keys == null) return '';\n if (!Array.isArray(keys)) keys = [String(keys)];\n const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], options);\n const namespace = namespaces[namespaces.length - 1];\n const lng = options.lng || this.language;\n const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng?.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, options);\n let res = resolved?.res;\n const resUsedKey = resolved?.usedKey || key;\n const resExactUsedKey = resolved?.exactUsedKey || key;\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const needsPluralHandling = options.count !== undefined && !isString(options.count);\n const hasDefaultValue = Translator.hasDefaultValue(options);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0;\n const defaultValue = needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] || options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n let resForObjHndl = res;\n if (handleAsObjectInI18nFormat && !res && hasDefaultValue) {\n resForObjHndl = defaultValue;\n }\n const handleAsObject = shouldHandleAsObject(resForObjHndl);\n const resType = Object.prototype.toString.apply(resForObjHndl);\n if (handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && noObject.indexOf(resType) < 0 && !(isString(joinArrays) && Array.isArray(resForObjHndl))) {\n if (!options.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, resForObjHndl, {\n ...options,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(resForObjHndl);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in resForObjHndl) {\n if (Object.prototype.hasOwnProperty.call(resForObjHndl, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n if (hasDefaultValue && !res) {\n copy[m] = this.translate(deepKey, {\n ...options,\n defaultValue: shouldHandleAsObject(defaultValue) ? defaultValue[m] : undefined,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n } else {\n copy[m] = this.translate(deepKey, {\n ...options,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n }\n if (copy[m] === deepKey) copy[m] = resForObjHndl[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...options,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n } else if (this.backendConnector?.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, options);\n if (needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] && suffixes.indexOf(`${this.options.pluralSeparator}zero`) < 0) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, options, resolved, lastKey) {\n var _this = this;\n if (this.i18nFormat?.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...options\n }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init({\n ...options,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...options.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (options?.interpolation?.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = options.replace && !isString(options.replace) ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, options.lng || this.language || resolved.usedLng, options);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n if (!options.lng && resolved && resolved.res) options.lng = this.language || resolved.usedLng;\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (lastKey?.[0] === args[0] && !options.context) {\n _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return _this.translate(...args, key);\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n const postProcess = options.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res != null && postProcessorNames?.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(options)\n },\n ...options\n } : options, this);\n }\n return res;\n }\n resolve(keys) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, options);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = options.count !== undefined && !isString(options.count);\n const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0;\n const needsContextHandling = options.context !== undefined && (isString(options.context) || typeof options.context === 'number') && options.context !== '';\n const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat?.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n finalKeys.push(key + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n finalKeys.push(contextKey + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat?.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.indexOf('-') > -1) {\n let formattedCode;\n try {\n formattedCode = Intl.getCanonicalLocales(code)[0];\n } catch (e) {}\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n if (this.options.lowerCaseLng) {\n return code.toLowerCase();\n }\n return code;\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return supportedLng;\n if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n if (supportedLng.indexOf('-') > 0 && lngOnly.indexOf('-') < 0 && supportedLng.substring(0, supportedLng.indexOf('-')) === lngOnly) return supportedLng;\n if (supportedLng.indexOf(lngOnly) === 0 && lngOnly.length > 1) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst dummyRule = {\n select: count => count === 1 ? 'one' : 'other',\n resolvedOptions: () => ({\n pluralCategories: ['one', 'other']\n })\n};\nclass PluralResolver {\n constructor(languageUtils) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n this.pluralRulesCache = {};\n }\n addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (!Intl) {\n this.logger.error('No Intl support, please use an Intl polyfill!');\n return dummyRule;\n }\n if (!code.match(/-|_/)) return dummyRule;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n needsPlural(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n return rule?.resolvedOptions().pluralCategories.length > 1;\n }\n getPluralFormsOfKey(code, key) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n if (!rule) return [];\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n getSuffix(code, count) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const rule = this.getRule(code, options);\n if (rule) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return this.getSuffix('dev', count, options);\n }\n}\n\nconst deepFindWithDefaults = function (data, defaultData, key) {\n let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options?.interpolation?.format || (value => value);\n this.init(options);\n }\n init() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix || '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp?.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}(.+?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (key.indexOf(this.formatSeparator) < 0) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n const missingInterpolationHandler = options?.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options?.interpolation?.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n const c = key.split(new RegExp(`${sep}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if ((matchedSingleQuotes?.length ?? 0) % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.indexOf(this.prefix) > -1) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n let doReduce = false;\n if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (doReduce) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.indexOf('(') > -1) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (val, lng, options) => {\n let optForCache = options;\n if (options && options.interpolationkey && options.formatParams && options.formatParams[options.interpolationkey] && options[options.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [options.interpolationkey]: undefined\n };\n }\n const key = lng + JSON.stringify(optForCache);\n let formatter = cache[key];\n if (!formatter) {\n formatter = fn(getCleanedCode(lng), options);\n cache[key] = formatter;\n }\n return formatter(val);\n };\n};\nclass Formatter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.formats = {\n number: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n this.init(options);\n }\n init(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && formats[0].indexOf(')') < 0 && formats.find(f => f.indexOf(')') > -1)) {\n const lastIndex = formats.findIndex(f => f.indexOf(')') > -1);\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options?.formatParams?.[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n this.backend?.init?.(services, options.backend, options);\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName) {\n let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n let callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let callback = arguments.length > 3 ? arguments[3] : undefined;\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name) {\n let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n if (this.services?.utils?.hasLoadedNamespace && !this.services?.utils?.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend?.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initAsync: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: value => value,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n }\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs?.indexOf?.('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n if (typeof options.initImmediate === 'boolean') options.initAsync = options.initImmediate;\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nclass I18n extends EventEmitter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initAsync) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init() {\n var _this = this;\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (options.defaultNS == null && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf('translation') < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n _this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n _this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = function () {\n return _this.store[fcName](...arguments);\n };\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = function () {\n _this.store[fcName](...arguments);\n return _this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (this.languages && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initAsync) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language) {\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng?.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n this.options.preload?.forEach?.(l => append(l));\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].indexOf(l) > -1) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n }\n changeLanguage(lng, callback) {\n var _this2 = this;\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve(function () {\n return _this2.t(...arguments);\n });\n if (callback) callback(err, function () {\n return _this2.t(...arguments);\n });\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const l = isString(lngs) ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n this.services.languageDetector?.cacheUserLanguage?.(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix) {\n var _this3 = this;\n const fixedT = function (key, opts) {\n let options;\n if (typeof opts !== 'object') {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n options = {\n ...opts\n };\n }\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n if (options.keyPrefix !== '') options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const keySeparator = _this3.options.keySeparator || '.';\n let resultKey;\n if (options.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n } else {\n resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n }\n return _this3.t(resultKey, options);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return this.translator?.translate(...args);\n }\n exists() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n return this.translator?.exists(...args);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0 && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages?.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services?.languageUtils || new LanguageUtil(get());\n return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n }\n cloneInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n const clonedData = Object.keys(this.store.data).reduce((prev, l) => {\n prev[l] = {\n ...this.store.data[l]\n };\n return Object.keys(prev[l]).reduce((acc, n) => {\n acc[n] = {\n ...prev[l][n]\n };\n return acc;\n }, {});\n }, {});\n clone.store = new ResourceStore(clonedData, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', function (event) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","function _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nvar UNSAFE_KEYS = ['__proto__', 'constructor', 'prototype'];\nexport function defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var _i = 0, _Object$keys = Object.keys(source); _i < _Object$keys.length; _i++) {\n var prop = _Object$keys[_i];\n if (UNSAFE_KEYS.indexOf(prop) > -1) continue;\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nfunction isSafeUrlSegmentBase(v) {\n if (typeof v !== 'string') return false;\n if (v.length === 0 || v.length > 128) return false;\n if (UNSAFE_KEYS.indexOf(v) > -1) return false;\n if (v.indexOf('..') > -1) return false;\n if (v.indexOf('\\\\') > -1) return false;\n if (/[?#%\\s@]/.test(v)) return false;\n if (/[\\x00-\\x1F\\x7F]/.test(v)) return false;\n return true;\n}\nexport function isSafeLangUrlSegment(v) {\n if (!isSafeUrlSegmentBase(v)) return false;\n if (v.indexOf('/') > -1) return false;\n return true;\n}\nexport function isSafeNsUrlSegment(v) {\n return isSafeUrlSegmentBase(v);\n}\nexport var isSafeUrlSegment = isSafeLangUrlSegment;\nvar SAFETY_CHECK_BY_KEY = {\n lng: isSafeLangUrlSegment,\n ns: isSafeNsUrlSegment\n};\nexport function sanitizeLogValue(v) {\n if (typeof v !== 'string') return v;\n return v.replace(/[\\r\\n\\x00-\\x1F\\x7F]/g, ' ');\n}\nexport function redactUrlCredentials(u) {\n if (typeof u !== 'string' || u.length === 0) return u;\n try {\n var parsed = new URL(u);\n if (parsed.username || parsed.password) {\n parsed.username = '';\n parsed.password = '';\n return parsed.toString();\n }\n return u;\n } catch (e) {\n return u.replace(/(\\/\\/)[^/@\\s]+@/g, '$1');\n }\n}\nexport function hasXMLHttpRequest() {\n return typeof XMLHttpRequest === 'function' || (typeof XMLHttpRequest === \"undefined\" ? \"undefined\" : _typeof(XMLHttpRequest)) === 'object';\n}\nfunction isPromise(maybePromise) {\n return !!maybePromise && typeof maybePromise.then === 'function';\n}\nexport function makePromise(maybePromise) {\n if (isPromise(maybePromise)) {\n return maybePromise;\n }\n return Promise.resolve(maybePromise);\n}\nvar interpolationRegexp = /\\{\\{(.+?)\\}\\}/g;\nexport function interpolate(str, data) {\n return str.replace(interpolationRegexp, function (match, key) {\n var k = key.trim();\n if (UNSAFE_KEYS.indexOf(k) > -1) return match;\n var value = data[k];\n return value != null ? value : match;\n });\n}\nexport function interpolateUrl(str, data) {\n var unsafe = false;\n var result = str.replace(interpolationRegexp, function (match, key) {\n var k = key.trim();\n if (UNSAFE_KEYS.indexOf(k) > -1) return match;\n var value = data[k];\n if (value == null) return match;\n var check = SAFETY_CHECK_BY_KEY[k] || isSafeLangUrlSegment;\n var segments = String(value).split('+');\n var _iterator = _createForOfIteratorHelper(segments),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var seg = _step.value;\n if (!check(seg)) {\n unsafe = true;\n return match;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return segments.join('+');\n });\n return unsafe ? null : result;\n}","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nimport { hasXMLHttpRequest } from './utils.js';\nvar fetchApi = typeof fetch === 'function' ? fetch : undefined;\nif (typeof global !== 'undefined' && global.fetch) {\n fetchApi = global.fetch;\n} else if (typeof window !== 'undefined' && window.fetch) {\n fetchApi = window.fetch;\n}\nvar XmlHttpRequestApi;\nif (hasXMLHttpRequest()) {\n if (typeof global !== 'undefined' && global.XMLHttpRequest) {\n XmlHttpRequestApi = global.XMLHttpRequest;\n } else if (typeof window !== 'undefined' && window.XMLHttpRequest) {\n XmlHttpRequestApi = window.XMLHttpRequest;\n }\n}\nvar ActiveXObjectApi;\nif (typeof ActiveXObject === 'function') {\n if (typeof global !== 'undefined' && global.ActiveXObject) {\n ActiveXObjectApi = global.ActiveXObject;\n } else if (typeof window !== 'undefined' && window.ActiveXObject) {\n ActiveXObjectApi = window.ActiveXObject;\n }\n}\nif (typeof fetchApi !== 'function') fetchApi = undefined;\nif (!fetchApi && !XmlHttpRequestApi && !ActiveXObjectApi) {\n try {\n import('cross-fetch').then(function (mod) {\n fetchApi = mod.default;\n }).catch(function () {});\n } catch (e) {}\n}\nvar UNSAFE_KEYS = ['__proto__', 'constructor', 'prototype'];\nvar addQueryString = function addQueryString(url, params) {\n if (params && _typeof(params) === 'object') {\n var queryString = '';\n for (var _i = 0, _Object$keys = Object.keys(params); _i < _Object$keys.length; _i++) {\n var paramName = _Object$keys[_i];\n if (UNSAFE_KEYS.indexOf(paramName) > -1) continue;\n queryString += '&' + encodeURIComponent(paramName) + '=' + encodeURIComponent(params[paramName]);\n }\n if (!queryString) return url;\n url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);\n }\n return url;\n};\nvar fetchIt = function fetchIt(url, fetchOptions, callback, altFetch) {\n var resolver = function resolver(response) {\n if (!response.ok) return callback(response.statusText || 'Error', {\n status: response.status\n });\n response.text().then(function (data) {\n callback(null, {\n status: response.status,\n data: data\n });\n }).catch(callback);\n };\n if (altFetch) {\n var altResponse = altFetch(url, fetchOptions);\n if (altResponse instanceof Promise) {\n altResponse.then(resolver).catch(callback);\n return;\n }\n }\n if (typeof fetch === 'function') {\n fetch(url, fetchOptions).then(resolver).catch(callback);\n } else {\n fetchApi(url, fetchOptions).then(resolver).catch(callback);\n }\n};\nvar requestWithFetch = function requestWithFetch(options, url, payload, callback) {\n if (options.queryStringParams) {\n url = addQueryString(url, options.queryStringParams);\n }\n var headers = _objectSpread({}, typeof options.customHeaders === 'function' ? options.customHeaders() : options.customHeaders);\n if (typeof window === 'undefined' && typeof global !== 'undefined' && typeof global.process !== 'undefined' && global.process.versions && global.process.versions.node) {\n headers['User-Agent'] = \"i18next-http-backend (node/\".concat(global.process.version, \"; \").concat(global.process.platform, \" \").concat(global.process.arch, \")\");\n }\n if (payload) headers['Content-Type'] = 'application/json';\n var reqOptions = typeof options.requestOptions === 'function' ? options.requestOptions(payload) : options.requestOptions;\n var fetchOptions = _objectSpread({\n method: payload ? 'POST' : 'GET',\n body: payload ? options.stringify(payload) : undefined,\n headers: headers\n }, options._omitFetchOptions ? {} : reqOptions);\n var altFetch = typeof options.alternateFetch === 'function' && options.alternateFetch.length >= 1 ? options.alternateFetch : undefined;\n try {\n fetchIt(url, fetchOptions, callback, altFetch);\n } catch (e) {\n if (!reqOptions || Object.keys(reqOptions).length === 0 || !e.message || e.message.indexOf('not implemented') < 0) {\n return callback(e);\n }\n try {\n Object.keys(reqOptions).forEach(function (opt) {\n delete fetchOptions[opt];\n });\n fetchIt(url, fetchOptions, callback, altFetch);\n options._omitFetchOptions = true;\n } catch (err) {\n callback(err);\n }\n }\n};\nvar requestWithXmlHttpRequest = function requestWithXmlHttpRequest(options, url, payload, callback) {\n if (payload && _typeof(payload) === 'object') {\n payload = addQueryString('', payload).slice(1);\n }\n if (options.queryStringParams) {\n url = addQueryString(url, options.queryStringParams);\n }\n try {\n var x = XmlHttpRequestApi ? new XmlHttpRequestApi() : new ActiveXObjectApi('MSXML2.XMLHTTP.3.0');\n x.open(payload ? 'POST' : 'GET', url, 1);\n if (!options.crossDomain) {\n x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n x.withCredentials = !!options.withCredentials;\n if (payload) {\n x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n if (x.overrideMimeType) {\n x.overrideMimeType('application/json');\n }\n var h = options.customHeaders;\n h = typeof h === 'function' ? h() : h;\n if (h) {\n for (var _i2 = 0, _Object$keys2 = Object.keys(h); _i2 < _Object$keys2.length; _i2++) {\n var i = _Object$keys2[_i2];\n if (UNSAFE_KEYS.indexOf(i) > -1) continue;\n x.setRequestHeader(i, h[i]);\n }\n }\n x.onreadystatechange = function () {\n x.readyState > 3 && callback(x.status >= 400 ? x.statusText : null, {\n status: x.status,\n data: x.responseText\n });\n };\n x.send(payload);\n } catch (e) {\n console && console.log(e);\n }\n};\nvar request = function request(options, url, payload, callback) {\n if (typeof payload === 'function') {\n callback = payload;\n payload = undefined;\n }\n callback = callback || function () {};\n if (fetchApi && url.indexOf('file:') !== 0) {\n return requestWithFetch(options, url, payload, callback);\n }\n if (hasXMLHttpRequest() || typeof ActiveXObject === 'function') {\n return requestWithXmlHttpRequest(options, url, payload, callback);\n }\n callback(new Error('No fetch and no xhr implementation found!'));\n};\nexport default request;","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { makePromise, interpolateUrl, sanitizeLogValue, redactUrlCredentials } from './utils.js';\nimport request from './request.js';\nvar getDefaults = function getDefaults() {\n return {\n loadPath: '/locales/{{lng}}/{{ns}}.json',\n addPath: '/locales/add/{{lng}}/{{ns}}',\n parse: function parse(data) {\n return JSON.parse(data);\n },\n stringify: JSON.stringify,\n parsePayload: function parsePayload(namespace, key, fallbackValue) {\n return _defineProperty({}, key, fallbackValue || '');\n },\n parseLoadPayload: function parseLoadPayload(languages, namespaces) {\n return undefined;\n },\n request: request,\n reloadInterval: typeof window !== 'undefined' ? false : 60 * 60 * 1000,\n customHeaders: {},\n queryStringParams: {},\n crossDomain: false,\n withCredentials: false,\n overrideMimeType: false,\n requestOptions: {\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'default'\n }\n };\n};\nvar Backend = function () {\n function Backend(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _classCallCheck(this, Backend);\n this.services = services;\n this.options = options;\n this.allOptions = allOptions;\n this.type = 'backend';\n this.init(services, options, allOptions);\n }\n return _createClass(Backend, [{\n key: \"init\",\n value: function init(services) {\n var _this = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = _objectSpread(_objectSpread(_objectSpread({}, getDefaults()), this.options || {}), options);\n this.allOptions = allOptions;\n if (this.services && this.options.reloadInterval) {\n var timer = setInterval(function () {\n return _this.reload();\n }, this.options.reloadInterval);\n if (_typeof(timer) === 'object' && typeof timer.unref === 'function') timer.unref();\n }\n }\n }, {\n key: \"readMulti\",\n value: function readMulti(languages, namespaces, callback) {\n this._readAny(languages, languages, namespaces, namespaces, callback);\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n this._readAny([language], language, [namespace], namespace, callback);\n }\n }, {\n key: \"_readAny\",\n value: function _readAny(languages, loadUrlLanguages, namespaces, loadUrlNamespaces, callback) {\n var _this2 = this;\n var loadPath = this.options.loadPath;\n if (typeof this.options.loadPath === 'function') {\n loadPath = this.options.loadPath(languages, namespaces);\n }\n loadPath = makePromise(loadPath);\n loadPath.then(function (resolvedLoadPath) {\n if (!resolvedLoadPath) return callback(null, {});\n var url = interpolateUrl(resolvedLoadPath, {\n lng: languages.join('+'),\n ns: namespaces.join('+')\n });\n if (url == null) {\n var safeLngs = languages.map(sanitizeLogValue).join(', ');\n var safeNss = namespaces.map(sanitizeLogValue).join(', ');\n return callback(new Error('i18next-http-backend: unsafe lng/ns value — refusing to build request URL for languages=[' + safeLngs + '] namespaces=[' + safeNss + ']'), false);\n }\n _this2.loadUrl(url, callback, loadUrlLanguages, loadUrlNamespaces);\n });\n }\n }, {\n key: \"loadUrl\",\n value: function loadUrl(url, callback, languages, namespaces) {\n var _this3 = this;\n var lng = typeof languages === 'string' ? [languages] : languages;\n var ns = typeof namespaces === 'string' ? [namespaces] : namespaces;\n var payload = this.options.parseLoadPayload(lng, ns);\n var safeUrl = sanitizeLogValue(redactUrlCredentials(url));\n this.options.request(this.options, url, payload, function (err, res) {\n if (res && (res.status >= 500 && res.status < 600 || !res.status)) return callback('failed loading ' + safeUrl + '; status code: ' + res.status, true);\n if (res && res.status >= 400 && res.status < 500) return callback('failed loading ' + safeUrl + '; status code: ' + res.status, false);\n if (!res && err && err.message) {\n var errorMessage = err.message.toLowerCase();\n var isNetworkError = ['failed', 'fetch', 'network', 'load'].find(function (term) {\n return errorMessage.indexOf(term) > -1;\n });\n if (isNetworkError) {\n return callback('failed loading ' + safeUrl + ': ' + sanitizeLogValue(err.message), true);\n }\n }\n if (err) return callback(err, false);\n var ret, parseErr;\n try {\n if (typeof res.data === 'string') {\n ret = _this3.options.parse(res.data, languages, namespaces);\n } else {\n ret = res.data;\n }\n } catch (e) {\n parseErr = 'failed parsing ' + safeUrl + ' to json';\n }\n if (parseErr) return callback(parseErr, false);\n callback(null, ret);\n });\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue, callback) {\n var _this4 = this;\n if (!this.options.addPath) return;\n if (typeof languages === 'string') languages = [languages];\n var payload = this.options.parsePayload(namespace, key, fallbackValue);\n var finished = 0;\n var dataArray = [];\n var resArray = [];\n languages.forEach(function (lng) {\n var addPath = _this4.options.addPath;\n if (typeof _this4.options.addPath === 'function') {\n addPath = _this4.options.addPath(lng, namespace);\n }\n var url = interpolateUrl(addPath, {\n lng: lng,\n ns: namespace\n });\n if (url == null) {\n finished += 1;\n if (callback && finished === languages.length) callback(dataArray, resArray);\n return;\n }\n _this4.options.request(_this4.options, url, payload, function (data, res) {\n finished += 1;\n dataArray.push(data);\n resArray.push(res);\n if (finished === languages.length) {\n if (typeof callback === 'function') callback(dataArray, resArray);\n }\n });\n });\n }\n }, {\n key: \"reload\",\n value: function reload() {\n var _this5 = this;\n var _this$services = this.services,\n backendConnector = _this$services.backendConnector,\n languageUtils = _this$services.languageUtils,\n logger = _this$services.logger;\n var currentLanguage = backendConnector.language;\n if (currentLanguage && currentLanguage.toLowerCase() === 'cimode') return;\n var toLoad = [];\n var append = function append(lng) {\n var lngs = languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n append(currentLanguage);\n if (this.allOptions.preload) this.allOptions.preload.forEach(function (l) {\n return append(l);\n });\n toLoad.forEach(function (lng) {\n _this5.allOptions.ns.forEach(function (ns) {\n backendConnector.read(lng, ns, 'read', null, null, function (err, data) {\n if (err) logger.warn(\"loading namespace \".concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) logger.log(\"loaded namespace \".concat(ns, \" for language \").concat(lng), data);\n backendConnector.loaded(\"\".concat(lng, \"|\").concat(ns), err, data);\n });\n });\n });\n }\n }]);\n}();\nBackend.type = 'backend';\nexport default Backend;","/**\n * i18n — react-i18next setup.\n *\n * Namespaces:\n * common — buttons / generic / states reused on every page\n * errors — ApiClientError code → human-readable text\n *\n * Each domain route adds its own ns later (tasks / approvals /\n * memory / observability / settings / chat / ...). Loaded via\n * i18next-http-backend so the SPA initial bundle stays small; ns\n * arrive on-demand when a route's `useTranslation('tasks')` runs.\n *\n * The active language is mirrored from `usePrefs` (zustand) so a\n * single `setLang('zh')` flips both the React state tree and the\n * i18next instance. The legacy localStorage key `im-hub-lang` is\n * preserved so the v1 UI's persisted preference carries over.\n */\n\nimport i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport HttpBackend from 'i18next-http-backend'\n\n// JSON bundles for the cold-start namespaces are inlined so the\n// first paint already has button labels / error toasts in the right\n// language — no flash-of-untranslated-content. Page-specific ns are\n// loaded via HttpBackend on demand.\nimport commonEn from './locales/en/common.json'\nimport commonZh from './locales/zh/common.json'\nimport errorsEn from './locales/en/errors.json'\nimport errorsZh from './locales/zh/errors.json'\n// Page-level namespaces. Eager-loaded for now — the per-page JSON\n// chunks are small (≤ 4 KB each), and pre-loading sidesteps the need\n// to host them as static assets under /locales/<lng>/<ns>.json. When\n// the count grows past ~6 we'll graduate to http-backend lazy loads.\nimport tasksEn from './locales/en/tasks.json'\nimport tasksZh from './locales/zh/tasks.json'\nimport approvalsEn from './locales/en/approvals.json'\nimport approvalsZh from './locales/zh/approvals.json'\nimport remindersEn from './locales/en/reminders.json'\nimport remindersZh from './locales/zh/reminders.json'\nimport memosEn from './locales/en/memos.json'\nimport memosZh from './locales/zh/memos.json'\nimport memoryEn from './locales/en/memory.json'\nimport memoryZh from './locales/zh/memory.json'\nimport skillsEn from './locales/en/skills.json'\nimport skillsZh from './locales/zh/skills.json'\nimport workspaceEn from './locales/en/workspace.json'\nimport workspaceZh from './locales/zh/workspace.json'\nimport observabilityEn from './locales/en/observability.json'\nimport observabilityZh from './locales/zh/observability.json'\nimport settingsEn from './locales/en/settings.json'\nimport settingsZh from './locales/zh/settings.json'\n\nvoid i18n\n .use(HttpBackend)\n .use(initReactI18next)\n .init({\n resources: {\n en: { common: commonEn, errors: errorsEn, tasks: tasksEn, approvals: approvalsEn, reminders: remindersEn, memos: memosEn, memory: memoryEn, skills: skillsEn, workspace: workspaceEn, observability: observabilityEn, settings: settingsEn },\n zh: { common: commonZh, errors: errorsZh, tasks: tasksZh, approvals: approvalsZh, reminders: remindersZh, memos: memosZh, memory: memoryZh, skills: skillsZh, workspace: workspaceZh, observability: observabilityZh, settings: settingsZh },\n },\n lng: detectInitialLang(),\n fallbackLng: 'en',\n supportedLngs: ['en', 'zh'],\n ns: ['common', 'errors', 'tasks', 'approvals', 'reminders', 'memos', 'memory', 'skills', 'workspace', 'observability', 'settings'],\n defaultNS: 'common',\n interpolation: { escapeValue: false }, // React already escapes\n react: { useSuspense: false }, // we render skeletons ourselves\n backend: {\n // Served by Vite from src/web-app/public/locales/<lang>/<ns>.json\n // in dev; from dist/assets in prod. PR-N migrates this to inline\n // bundle once page count justifies it.\n loadPath: '/locales/{{lng}}/{{ns}}.json',\n },\n detection: {\n // We bypass i18next's built-in detector; usePrefs.lang is the\n // source of truth, propagated via syncI18nLanguage().\n order: [],\n caches: [],\n },\n })\n\nfunction detectInitialLang(): 'en' | 'zh' {\n try {\n const v = localStorage.getItem('im-hub-lang')\n if (v === 'en' || v === 'zh') return v\n } catch {\n /* ignore */\n }\n return (navigator.language || 'en').toLowerCase().startsWith('zh') ? 'zh' : 'en'\n}\n\n/** Imperatively flip the active language. Called by setLang() and\n * also by tests that want to force a language without going through\n * the zustand store. */\nexport function syncI18nLanguage(lang: 'en' | 'zh'): void {\n if (i18n.language === lang) return\n void i18n.changeLanguage(lang)\n}\n\nexport default i18n\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = (props) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children\n } = props;\n const isOpenDelayedRef = React.useRef(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n return /* @__PURE__ */ jsx(\n TooltipProviderContextProvider,\n {\n scope: __scopeTooltip,\n isOpenDelayedRef,\n delayDuration,\n onOpen: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n isOpenDelayedRef.current = false;\n }, []),\n onClose: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => isOpenDelayedRef.current = true,\n skipDelayDuration\n );\n }, [skipDelayDuration]),\n isPointerInTransitRef,\n onPointerInTransitChange: React.useCallback((inTransit) => {\n isPointerInTransitRef.current = inTransit;\n }, []),\n disableHoverableContent,\n children\n }\n );\n};\nTooltipProvider.displayName = PROVIDER_NAME;\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = (props) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const contentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: (open2) => {\n if (open2) {\n providerContext.onOpen();\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open2);\n },\n caller: TOOLTIP_NAME\n });\n const stateAttribute = React.useMemo(() => {\n return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n }, [open]);\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n TooltipContextProvider,\n {\n scope: __scopeTooltip,\n contentId,\n open,\n stateAttribute,\n trigger,\n onTriggerChange: setTrigger,\n onTriggerEnter: React.useCallback(() => {\n if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n onTriggerLeave: React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent]),\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n children\n }\n ) });\n};\nTooltip.displayName = TOOLTIP_NAME;\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n React.useEffect(() => {\n return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerUp]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n \"aria-describedby\": context.open ? context.contentId : void 0,\n \"data-state\": context.stateAttribute,\n ...triggerProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === \"touch\") return;\n if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n }),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n if (context.open) {\n context.onClose();\n }\n isPointerDownRef.current = true;\n document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n }),\n onBlur: composeEventHandlers(props.onBlur, context.onClose),\n onClick: composeEventHandlers(props.onClick, context.onClose)\n }\n ) });\n }\n);\nTooltipTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar TooltipPortal = (props) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nTooltipPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n }\n);\nvar TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n const { trigger, onClose } = context;\n const content = ref.current;\n const { onPointerInTransitChange } = providerContext;\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n const handleCreateGraceArea = React.useCallback(\n (event, hoverTarget) => {\n const currentTarget = event.currentTarget;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);\n trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n content.addEventListener(\"pointerleave\", handleContentLeave);\n return () => {\n trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n content.removeEventListener(\"pointerleave\", handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event) => {\n const target = event.target;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n});\nvar [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n \"aria-label\": ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event) => {\n const target = event.target;\n if (target?.contains(context.trigger)) onClose();\n };\n window.addEventListener(\"scroll\", handleScroll, { capture: true });\n return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n return /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: onClose,\n children: /* @__PURE__ */ jsxs(\n PopperPrimitive.Content,\n {\n \"data-state\": context.stateAttribute,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n },\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel || children }) })\n ]\n }\n )\n }\n );\n }\n);\nTooltipContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"TooltipArrow\";\nvar TooltipArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n ARROW_NAME,\n __scopeTooltip\n );\n return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nTooltipArrow.displayName = ARROW_NAME;\nfunction getExitSideFromRect(point, rect) {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return \"left\";\n case right:\n return \"right\";\n case top:\n return \"top\";\n case bottom:\n return \"bottom\";\n default:\n throw new Error(\"unreachable\");\n }\n}\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n const paddedExitPoints = [];\n switch (exitSide) {\n case \"top\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"bottom\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case \"left\":\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"right\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\nfunction getPointsFromRect(rect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom }\n ];\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction getHull(points) {\n const newPoints = points.slice();\n newPoints.sort((a, b) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return 1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return 1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\nfunction getHullPresorted(points) {\n if (points.length <= 1) return points.slice();\n const upperHull = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n const lowerHull = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Portal,\n Provider,\n Root3 as Root,\n Tooltip,\n TooltipArrow,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n Trigger,\n createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Tooltip — Radix Tooltip. Skip on touch devices (no hover); Radix\n * already disables pointer-events tooltips on coarse pointers, so on\n * mobile they only appear via long-press if the page wraps with the\n * `disableHoverableContent` provider option.\n *\n * Use sparingly — important context belongs in visible text, not a\n * hover. We surface tooltips mostly for IconButton affordances\n * (Refresh, Theme cycle, etc.) where the icon alone is ambiguous.\n */\n\nimport * as React from 'react'\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport { cn } from '@/lib/utils'\n\nconst TooltipProvider = TooltipPrimitive.Provider\nconst Tooltip = TooltipPrimitive.Root\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-md',\n 'bg-text text-bg px-2 py-1 text-xs font-medium shadow-md',\n 'data-[state=delayed-open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=delayed-open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=delayed-open]:zoom-in-95',\n className,\n )}\n {...props}\n />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","/**\n * Toaster — thin wrapper around the `sonner` package, which is what\n * shadcn/ui uses as its default toast since 2024. Renders nothing\n * until something calls `toast.success(...)`, `toast.error(...)`, etc.\n *\n * Usage:\n * import { Toaster } from '@/components/ui/sonner'\n * import { toast } from 'sonner'\n * <App>… <Toaster /></App>\n * toast.error('Network unreachable')\n *\n * Theme: we don't pass a fixed theme; sonner reads `prefers-color-\n * scheme` itself, and we additionally override its CSS variables in\n * @layer base so they pick up our HSL tokens.\n *\n * Mobile: position defaults to `top-center` so the toast is reachable\n * even when the soft keyboard is up.\n */\n\nimport { Toaster as Sonner, type ToasterProps } from 'sonner'\n\nfunction Toaster(props: ToasterProps): JSX.Element {\n return (\n <Sonner\n position=\"top-center\"\n richColors\n closeButton\n toastOptions={{\n classNames: {\n toast:\n 'border border-border bg-surface text-text shadow-md',\n title: 'font-medium',\n description: 'text-text-dim text-sm',\n actionButton:\n 'bg-accent text-accent-fg rounded-md',\n cancelButton:\n 'bg-surface-2 text-text rounded-md',\n error: 'bg-danger-bg text-danger border-danger',\n success: 'bg-success-bg text-success border-success',\n warning: 'bg-warning-bg text-warning border-warning',\n info: 'bg-info-bg text-info border-info',\n },\n }}\n {...props}\n />\n )\n}\n\nexport { Toaster }\n","/**\n * Providers — single wrapping shell composing the cross-cutting\n * providers every route depends on: QueryClient, i18n, theme\n * application, tooltip provider, toaster mount.\n *\n * Kept as one component (rather than splitting into ProviderTree +\n * Toaster + ...) so a future addition (e.g. <ErrorBoundary>) lands\n * in one obvious spot and the route layer never imports providers\n * directly.\n */\n\nimport { QueryClientProvider } from '@tanstack/react-query'\nimport { useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\n\nimport { queryClient } from '@/lib/query-client'\nimport { syncI18nLanguage } from '@/i18n'\nimport { TooltipProvider } from '@/components/ui/tooltip'\nimport { Toaster } from '@/components/ui/sonner'\nimport { useApplyTheme, usePrefs } from '@/stores/prefs'\nimport { bindAuthToStorage } from '@/stores/auth'\nimport '@/i18n'\n\nfunction LanguageBinder({ children }: { children: React.ReactNode }): JSX.Element {\n // Keep the i18next instance in lockstep with the zustand store —\n // setLang in the store fires, this effect runs, i18next changes\n // language, every useTranslation() resubscribes automatically.\n const lang = usePrefs((s) => s.lang)\n const { i18n } = useTranslation()\n useEffect(() => {\n if (i18n.language !== lang) {\n syncI18nLanguage(lang)\n }\n }, [lang, i18n])\n return <>{children}</>\n}\n\nfunction ThemeBinder({ children }: { children: React.ReactNode }): JSX.Element {\n useApplyTheme()\n return <>{children}</>\n}\n\nfunction AuthBinder({ children }: { children: React.ReactNode }): JSX.Element {\n // Cross-tab sync: sign-out in one tab flips others to /login on\n // their next render. The lib/api/client.ts 401 handler covers the\n // single-tab case; this catches the multi-tab one.\n useEffect(() => bindAuthToStorage(), [])\n return <>{children}</>\n}\n\nexport function Providers({ children }: { children: React.ReactNode }): JSX.Element {\n return (\n <QueryClientProvider client={queryClient}>\n <LanguageBinder>\n <ThemeBinder>\n <AuthBinder>\n <TooltipProvider>\n {children}\n <Toaster />\n </TooltipProvider>\n </AuthBinder>\n </ThemeBinder>\n </LanguageBinder>\n </QueryClientProvider>\n )\n}\n","/**\n * agim web v2 — React entrypoint.\n *\n * Composition order (PR-5):\n * <Providers> QueryClient + i18n bind + theme bind + auth bind\n * + TooltipProvider + Toaster\n * <AppRouter> react-router config (login / home / 404)\n */\n\nimport React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport { AppRouter } from './router'\nimport { Providers } from './components/shell/providers'\nimport './styles/globals.css'\n\nconst rootEl = document.getElementById('root')\nif (!rootEl) throw new Error('agim: #root not found in index.html')\n\nReactDOM.createRoot(rootEl).render(\n <React.StrictMode>\n <Providers>\n <AppRouter />\n </Providers>\n </React.StrictMode>,\n)\n"],"file":"assets/index-mOwnXPKu.js"}