@vantran-se/openchamber-web 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/README.md +32 -24
  2. package/bin/cli.js +1 -3
  3. package/bin/cli.test.js +40 -16
  4. package/bin/lib/DOCUMENTATION.md +6 -5
  5. package/bin/lib/cli-args.js +6 -1
  6. package/bin/lib/cli-args.test.js +34 -0
  7. package/bin/lib/cli-lifecycle.js +0 -1
  8. package/bin/lib/cli-network.js +8 -2
  9. package/bin/lib/cli-process.js +1 -1
  10. package/bin/lib/cli-settings-accessors.test.js +21 -13
  11. package/bin/lib/cli-startup.js +17 -11
  12. package/bin/lib/cli-startup.test.js +92 -2
  13. package/bin/lib/commands-connect-url.js +8 -1
  14. package/bin/lib/commands-schedule.js +8 -2
  15. package/bin/lib/commands-serve.js +15 -21
  16. package/bin/lib/commands-update.js +12 -24
  17. package/bin/lib/commands-update.test.js +14 -46
  18. package/dist/assets/DiffView-Cv9MSXl1.js +4 -0
  19. package/dist/assets/FilePreviewCommentMenu-D4kLseHj.js +4 -0
  20. package/dist/assets/FilesView-BVoD8I2x.js +14 -0
  21. package/dist/assets/{GitView-DzuzhIPx.js → GitView-Bzb8p-ew.js} +4 -4
  22. package/dist/assets/GuestSurfacePane-Crdbvsxo.js +1 -0
  23. package/dist/assets/InProgressOperationBanner-CwMjNQgk.js +2 -0
  24. package/dist/assets/{JsonTreeView-B_EPRjzy.js → JsonTreeView-DRKHZfsn.js} +1 -1
  25. package/dist/assets/MarkdownImageGallery-DZtqT1Zn.js +1 -0
  26. package/dist/assets/MarkdownRendererImpl-CqG7HCNd.js +10 -0
  27. package/dist/assets/OnboardingScreen-DMIxwYK5.js +1 -0
  28. package/dist/assets/{PatchDiff-6yh1csza.js → PatchDiff-CUcCg1jk.js} +1 -1
  29. package/dist/assets/PierreDiffViewer-CnnR-dnD.js +228 -0
  30. package/dist/assets/PlanView-RCBadcY7.js +5 -0
  31. package/dist/assets/SettingsView-CjBjZFRO.js +30 -0
  32. package/dist/assets/SettingsWindow-DyM7QuhI.js +1 -0
  33. package/dist/assets/SubmoduleDiffSummary-BWIfgMED.js +1 -0
  34. package/dist/assets/ToolOutputDialog-Q0P3FuAi.js +15 -0
  35. package/dist/assets/ToolPartDiffPreview-p7qR9FpU.js +8 -0
  36. package/dist/assets/{VirtualizedFileDiff-BTJVRkyo.js → VirtualizedFileDiff-CFpjL8Ns.js} +3 -3
  37. package/dist/assets/{Virtualizer-xCEYz34p.js → Virtualizer-C0IsclZn.js} +1 -1
  38. package/dist/assets/WalkthroughView-DI31zD02.js +4 -0
  39. package/dist/assets/appThemeRegistry-B9gkFq9i.js +1 -0
  40. package/dist/assets/{computeVirtualFileMetrics-CmPe29DM.js → computeVirtualFileMetrics-C2WM6JC2.js} +2 -2
  41. package/dist/assets/de-YKfk5MmC.js +14 -0
  42. package/dist/assets/es-_gwT0kr-.js +20 -0
  43. package/dist/assets/fileTreeStatus-D438yi8M.js +1 -0
  44. package/dist/assets/fr-DqzvXmIm.js +18 -0
  45. package/dist/assets/index-BLaHKdtx.js +1 -0
  46. package/dist/assets/index-BkMXRrVQ.css +1 -0
  47. package/dist/assets/index-DxNa7xYB.js +65 -0
  48. package/dist/assets/initializeSharedPreferences-Bck5EAWP.js +1 -0
  49. package/dist/assets/{isDiffPlainText-CQmDCnEv.js → isDiffPlainText-Dgbw8VKk.js} +1 -1
  50. package/dist/assets/{isFilePlainText-CYBUzW4I.js → isFilePlainText-_ZS5UYRj.js} +1 -1
  51. package/dist/assets/ja-B-GFYhQE.js +20 -0
  52. package/dist/assets/ko-mzksfqDC.js +20 -0
  53. package/dist/assets/main-C5Xx8dn_.js +2 -0
  54. package/dist/assets/main-CfBSQM1H.js +990 -0
  55. package/dist/assets/markdownCore-BmWwW1ll.js +7 -0
  56. package/dist/assets/miniChat-mnKwy4vQ.js +2 -0
  57. package/dist/assets/mobile-DeEQd0wZ.js +2 -0
  58. package/dist/assets/nl-CWQr6NSq.js +20 -0
  59. package/dist/assets/{parseDiffFromFile-Cy0PNxun.js → parseDiffFromFile-BUgn-T9p.js} +2 -2
  60. package/dist/assets/patchFileDiff-Dt8LhgBh.js +13 -0
  61. package/dist/assets/pl-UmRcDUX2.js +20 -0
  62. package/dist/assets/pt-BR-BSLybvVF.js +20 -0
  63. package/dist/assets/relocateRestoredSession-B5E9xb3T.js +1 -0
  64. package/dist/assets/renderElectronMiniChatApp-C0a9A5_J.js +2 -0
  65. package/dist/assets/renderMobileApp-BNncg3Pk.js +25 -0
  66. package/dist/assets/runtimeEndpointReset-CZ5aafpl.js +62 -0
  67. package/dist/assets/{selectionMarkdown-TkYk5h9l.js → selectionMarkdown-CUN3wUld.js} +9 -9
  68. package/dist/assets/{sessionOwnership-Bs1xbRfB.js → sessionOwnership-BSuxCEhb.js} +1 -1
  69. package/dist/assets/shikiHighlight-DHDx-6eM.js +1 -0
  70. package/dist/assets/space-apply-DM_2pRW7.js +1 -0
  71. package/dist/assets/space-close-Bpomt8z0.js +1 -0
  72. package/dist/assets/{surface-B6n7wJtt.js → surface-C-jQaGnL.js} +1 -1
  73. package/dist/assets/{textMateThemeFromAppTheme-CDlKffWz.js → textMateThemeFromAppTheme-DlsTphbY.js} +1 -1
  74. package/dist/assets/tr-gaTrX_HK.js +11 -0
  75. package/dist/assets/uk-CnJF6ykl.js +20 -0
  76. package/dist/assets/{useAppFontEffects-DCqCVGlT.js → useAppFontEffects-DGlvOqP_.js} +194 -233
  77. package/dist/assets/useInlineCommentController-kMN4Wg_D.js +2 -0
  78. package/dist/assets/{useRootScrollLock-BowwS8kq.js → useRootScrollLock-DMPpvpNP.js} +2 -2
  79. package/dist/assets/{vendor-base-ui-DX96QhTP.js → vendor-base-ui-Det7U81h.js} +1 -1
  80. package/dist/assets/{vendor-codemirror-autocomplete-DW1FQz9_.js → vendor-codemirror-autocomplete-BSHQHbKu.js} +1 -1
  81. package/dist/assets/{vendor-codemirror-commands-DpmhalwN.js → vendor-codemirror-commands-C4G_dPWe.js} +1 -1
  82. package/dist/assets/{vendor-codemirror-lang-angular-BqExbN1M.js → vendor-codemirror-lang-angular-B6LbBGHB.js} +1 -1
  83. package/dist/assets/{vendor-codemirror-lang-cpp-DZA36HfS.js → vendor-codemirror-lang-cpp-BWWXBx7W.js} +1 -1
  84. package/dist/assets/{vendor-codemirror-lang-css-B07blnnZ.js → vendor-codemirror-lang-css-Cayfb29q.js} +1 -1
  85. package/dist/assets/{vendor-codemirror-lang-go-BM8K9D1-.js → vendor-codemirror-lang-go-BoKlCNKw.js} +1 -1
  86. package/dist/assets/{vendor-codemirror-lang-html-DaH9adfE.js → vendor-codemirror-lang-html-BQWerHsJ.js} +1 -1
  87. package/dist/assets/{vendor-codemirror-lang-java-CsdC0viz.js → vendor-codemirror-lang-java-DWX7Fq_K.js} +1 -1
  88. package/dist/assets/{vendor-codemirror-lang-javascript-CpGYXGuo.js → vendor-codemirror-lang-javascript-DbpEcZM0.js} +2 -2
  89. package/dist/assets/{vendor-codemirror-lang-jinja-BBeGzXw5.js → vendor-codemirror-lang-jinja-D1JIJRA7.js} +1 -1
  90. package/dist/assets/{vendor-codemirror-lang-json-58T70Hqs.js → vendor-codemirror-lang-json-BzgckzmB.js} +1 -1
  91. package/dist/assets/{vendor-codemirror-lang-less-BI-xCA59.js → vendor-codemirror-lang-less-B9EpDXFi.js} +1 -1
  92. package/dist/assets/{vendor-codemirror-lang-liquid-zEcMa-zy.js → vendor-codemirror-lang-liquid-9U7kRbSf.js} +1 -1
  93. package/dist/assets/{vendor-codemirror-lang-markdown-BLKnlLP4.js → vendor-codemirror-lang-markdown-D2TEBIvZ.js} +1 -1
  94. package/dist/assets/{vendor-codemirror-lang-php-9f35M83-.js → vendor-codemirror-lang-php-BT6sDVzE.js} +1 -1
  95. package/dist/assets/vendor-codemirror-lang-python-jAMtYiA9.js +3 -0
  96. package/dist/assets/{vendor-codemirror-lang-rust-MNDL_jZQ.js → vendor-codemirror-lang-rust-CVO56EiL.js} +1 -1
  97. package/dist/assets/{vendor-codemirror-lang-sass-p9epsSNm.js → vendor-codemirror-lang-sass-DZlOoUWu.js} +1 -1
  98. package/dist/assets/{vendor-codemirror-lang-sql-Bqzh0EXX.js → vendor-codemirror-lang-sql-fZ6t1DPw.js} +1 -1
  99. package/dist/assets/{vendor-codemirror-lang-vue-BnNUWV-p.js → vendor-codemirror-lang-vue-DxbqrLiE.js} +1 -1
  100. package/dist/assets/{vendor-codemirror-lang-wast-C2a-oLmk.js → vendor-codemirror-lang-wast-DyU1Gt-I.js} +1 -1
  101. package/dist/assets/vendor-codemirror-lang-xml-C9a_K5_p.js +1 -0
  102. package/dist/assets/{vendor-codemirror-lang-yaml-C0sjswB0.js → vendor-codemirror-lang-yaml-Cptq8l0e.js} +1 -1
  103. package/dist/assets/{vendor-codemirror-language-ByBn5zIW.js → vendor-codemirror-language-DufXoQvE.js} +2 -2
  104. package/dist/assets/vendor-codemirror-language-data-CtwSWKtX.js +2 -0
  105. package/dist/assets/{vendor-codemirror-search-ib-sHD5W.js → vendor-codemirror-search-CvXM_pZg.js} +1 -1
  106. package/dist/assets/{vendor-codemirror-state-G3UuR-be.js → vendor-codemirror-state-Dek9sMtw.js} +1 -1
  107. package/dist/assets/{vendor-codemirror-view-Bniqp7p5.js → vendor-codemirror-view-1e0FQ6Wn.js} +1 -1
  108. package/dist/assets/vendor-framer-motion-DxDVhOLc.js +9 -0
  109. package/dist/assets/vendor-katex-CuQvj9-L.js +257 -0
  110. package/dist/assets/vendor-katex-DdZNUVNG.css +1 -0
  111. package/dist/assets/{vendor-motion-dom-DcCgeG69.js → vendor-motion-dom-HXPOMxb7.js} +1 -1
  112. package/dist/assets/{vendor-opencode-client-DHzhmLwV.js → vendor-opencode-client-BmFcUkbQ.js} +1 -1
  113. package/dist/assets/{vendor-replit-codemirror-vim-DkzqxN2H.js → vendor-replit-codemirror-vim-BlJRn-cW.js} +2 -2
  114. package/dist/assets/{vendor-tanstack-react-virtual-H_JmXOFV.js → vendor-tanstack-react-virtual-CvuLsk7D.js} +1 -1
  115. package/dist/assets/{vendor-tanstack-virtual-core-Dxc8hSTB.js → vendor-tanstack-virtual-core-DPaNcJcT.js} +1 -1
  116. package/dist/assets/zh-CN-t2vigSB1.js +20 -0
  117. package/dist/assets/zh-TW-jAgqBokB.js +20 -0
  118. package/dist/index.html +6 -6
  119. package/dist/mini-chat.html +6 -6
  120. package/dist/mobile.html +6 -6
  121. package/package.json +8 -5
  122. package/server/index.js +80 -36
  123. package/server/lib/agent-memory/actions.js +1 -6
  124. package/server/lib/agent-memory/routes.js +1 -2
  125. package/server/lib/agent-memory/runtime.js +1 -8
  126. package/server/lib/agent-tool/DOCUMENTATION.md +7 -3
  127. package/server/lib/agent-tool/runtime.js +3 -6
  128. package/server/lib/agent-tool/runtime.test.js +0 -2
  129. package/server/lib/browser-control/DOCUMENTATION.md +6 -0
  130. package/server/lib/changelog/update-notes.js +1 -1
  131. package/server/lib/context-obligatory/runtime.js +1 -2
  132. package/server/lib/dev-tunnel/DOCUMENTATION.md +8 -0
  133. package/server/lib/dev-tunnel/client.js +21 -10
  134. package/server/lib/dev-tunnel/tunnel.test.js +34 -0
  135. package/server/lib/dispatch-results/runtime.js +1 -1
  136. package/server/lib/enterprise-mode.d.ts +1 -0
  137. package/server/lib/enterprise-mode.js +13 -2
  138. package/server/lib/enterprise-mode.test.js +21 -0
  139. package/server/lib/event-stream/DOCUMENTATION.md +2 -2
  140. package/server/lib/event-stream/index.js +1 -3
  141. package/server/lib/event-stream/translate-v2.js +1 -9
  142. package/server/lib/event-stream/translate-v2.test.js +0 -11
  143. package/server/lib/fs/DOCUMENTATION.md +5 -2
  144. package/server/lib/fs/routes.js +62 -15
  145. package/server/lib/fs/routes.test.js +278 -48
  146. package/server/lib/fs/workspace-file-names.js +104 -0
  147. package/server/lib/fs/workspace-file-names.test.js +62 -0
  148. package/server/lib/git/DOCUMENTATION.md +17 -5
  149. package/server/lib/git/contributor-provenance-storage.js +9 -6
  150. package/server/lib/git/contributor-provenance-storage.test.js +29 -0
  151. package/server/lib/git/credential-broker.js +1 -1
  152. package/server/lib/git/credential-resolver.js +1 -4
  153. package/server/lib/git/credentials.js +1 -0
  154. package/server/lib/git/discovery-endpoint.js +1 -1
  155. package/server/lib/git/identity-provisioning.js +2 -1
  156. package/server/lib/git/identity-storage.js +3 -4
  157. package/server/lib/git/lfs-discovery.js +14 -14
  158. package/server/lib/git/lfs-discovery.test.js +16 -6
  159. package/server/lib/git/network-operation-plan.js +50 -62
  160. package/server/lib/git/network-operation-plan.test.js +103 -1
  161. package/server/lib/git/network-operation-registry.js +4 -6
  162. package/server/lib/git/network-operation-storage.js +4 -6
  163. package/server/lib/git/network-operations.js +12 -4
  164. package/server/lib/git/network-operations.test.js +19 -6
  165. package/server/lib/git/redaction.js +2 -1
  166. package/server/lib/git/repository-credential-runtime.js +5 -3
  167. package/server/lib/git/repository-credential-runtime.test.js +22 -0
  168. package/server/lib/git/routes.js +31 -137
  169. package/server/lib/git/routes.test.js +2 -2
  170. package/server/lib/git/service.js +143 -27
  171. package/server/lib/git/service.test.js +215 -1
  172. package/server/lib/git/ssh-credential-storage.js +1 -4
  173. package/server/lib/git/submodule-discovery.js +1 -1
  174. package/server/lib/git/worktree-bootstrap-storage.js +3 -4
  175. package/server/lib/git/worktree-bootstrap-storage.test.js +15 -0
  176. package/server/lib/git/worktree-creation.js +194 -0
  177. package/server/lib/git/worktree-creation.test.js +155 -0
  178. package/server/lib/github/DOCUMENTATION.md +11 -6
  179. package/server/lib/github/auth.js +2 -4
  180. package/server/lib/github/device-flow.js +2 -2
  181. package/server/lib/github/gh-cli-credential.js +1 -0
  182. package/server/lib/github/octokit.js +31 -0
  183. package/server/lib/github/pr-status.js +35 -18
  184. package/server/lib/github/pr-status.test.js +271 -3
  185. package/server/lib/github/reference-search.js +102 -13
  186. package/server/lib/github/reference-search.test.js +48 -7
  187. package/server/lib/github/routes.auth.test.js +18 -0
  188. package/server/lib/github/routes.js +360 -6
  189. package/server/lib/github/routes.mutations.test.js +239 -0
  190. package/server/lib/github/routes.test.js +134 -2
  191. package/server/lib/gitlab/DOCUMENTATION.md +5 -1
  192. package/server/lib/gitlab/auth-storage.test.js +1 -0
  193. package/server/lib/gitlab/mappers.js +30 -1
  194. package/server/lib/gitlab/resources.js +230 -6
  195. package/server/lib/gitlab/resources.test.js +179 -0
  196. package/server/lib/gitlab/routes.js +200 -6
  197. package/server/lib/gitlab/routes.test.js +186 -2
  198. package/server/lib/gitlab/validation.js +1 -5
  199. package/server/lib/guests/DOCUMENTATION.md +1 -1
  200. package/server/lib/guests/oauth.js +2 -2
  201. package/server/lib/guests/service.js +1 -1
  202. package/server/lib/guests/sockets.js +1 -1
  203. package/server/lib/injected-env.d.ts +8 -0
  204. package/server/lib/injected-env.js +50 -0
  205. package/server/lib/injected-env.test.js +56 -0
  206. package/server/lib/linear/DOCUMENTATION.md +5 -6
  207. package/server/lib/linear/issues.js +62 -4
  208. package/server/lib/linear/issues.test.js +68 -0
  209. package/server/lib/linear/oauth.js +5 -5
  210. package/server/lib/linear/parse.js +2 -9
  211. package/server/lib/message-queue/DOCUMENTATION.md +23 -1
  212. package/server/lib/message-queue/runtime.js +85 -12
  213. package/server/lib/message-queue/runtime.test.js +172 -2
  214. package/server/lib/notifications/apns-runtime.js +5 -6
  215. package/server/lib/notifications/apns-runtime.test.js +20 -4
  216. package/server/lib/openchamber-control/DOCUMENTATION.md +19 -1
  217. package/server/lib/openchamber-control/actions.js +2 -1
  218. package/server/lib/openchamber-control/service.js +119 -20
  219. package/server/lib/openchamber-control/service.test.js +166 -0
  220. package/server/lib/openchamber-sessions/archive-store.js +1 -6
  221. package/server/lib/openchamber-sessions/routes.js +47 -12
  222. package/server/lib/openchamber-sessions/routes.test.js +65 -2
  223. package/server/lib/openchamber-sessions/session-metadata-store.js +1 -6
  224. package/server/lib/opencode/DOCUMENTATION.md +22 -8
  225. package/server/lib/opencode/agents.js +62 -0
  226. package/server/lib/opencode/auth-state-runtime.js +3 -1
  227. package/server/lib/opencode/auth.d.ts +1 -1
  228. package/server/lib/opencode/auth.js +8 -0
  229. package/server/lib/opencode/auth.test.js +31 -0
  230. package/server/lib/opencode/config-entity-routes.js +16 -0
  231. package/server/lib/opencode/config-entity-v2.test.js +16 -1
  232. package/server/lib/opencode/config-paths.test.js +2 -2
  233. package/server/lib/opencode/config-v2.js +2 -4
  234. package/server/lib/opencode/feature-routes-runtime.js +89 -49
  235. package/server/lib/opencode/lifecycle.js +41 -21
  236. package/server/lib/opencode/lifecycle.test.js +50 -2
  237. package/server/lib/opencode/model-discovery.js +1 -1
  238. package/server/lib/opencode/model-discovery.test.js +17 -0
  239. package/server/lib/opencode/models-metadata.js +0 -2
  240. package/server/lib/opencode/openchamber-routes.test.js +3 -3
  241. package/server/lib/opencode/plugins.js +6 -9
  242. package/server/lib/opencode/provider-source-route.test.js +101 -3
  243. package/server/lib/opencode/providers-disabled.test.js +59 -0
  244. package/server/lib/opencode/providers.js +34 -0
  245. package/server/lib/opencode/proxy.js +11 -3
  246. package/server/lib/opencode/routes.js +40 -2
  247. package/server/lib/opencode/settings-helpers.js +27 -1
  248. package/server/lib/opencode/settings-helpers.test.js +19 -7
  249. package/server/lib/opencode/settings-registry.json +27 -16
  250. package/server/lib/opencode/settings-runtime.test.js +18 -0
  251. package/server/lib/opencode/shared-service-runtime.js +23 -104
  252. package/server/lib/opencode/shared.js +77 -46
  253. package/server/lib/opencode/shared.test.js +12 -12
  254. package/server/lib/opencode/shutdown-runtime.test.js +2 -3
  255. package/server/lib/opencode/skill-routes.js +123 -38
  256. package/server/lib/opencode/skill-routes.test.js +201 -0
  257. package/server/lib/opencode/skills.js +81 -34
  258. package/server/lib/opencode/skills.test.js +176 -21
  259. package/server/lib/opencode/startup-pipeline-runtime.js +6 -3
  260. package/server/lib/opencode/startup-pipeline-runtime.test.js +2 -1
  261. package/server/lib/opencode/watcher.test.js +0 -54
  262. package/server/lib/outbound-proxy.js +52 -0
  263. package/server/lib/outbound-proxy.test.js +55 -0
  264. package/server/lib/package-manager.js +23 -17
  265. package/server/lib/package-manager.test.js +5 -18
  266. package/server/lib/permission-auto-accept/DOCUMENTATION.md +1 -1
  267. package/server/lib/permission-auto-accept/runtime.js +19 -47
  268. package/server/lib/permission-auto-accept/runtime.test.js +2 -2
  269. package/server/lib/project-context/DOCUMENTATION.md +7 -1
  270. package/server/lib/project-context/routes.js +1 -2
  271. package/server/lib/project-context/runtime.js +12 -14
  272. package/server/lib/project-context/runtime.test.js +78 -2
  273. package/server/lib/projects/project-config.js +30 -15
  274. package/server/lib/projects/project-config.test.js +30 -0
  275. package/server/lib/projects/project-setup.js +1 -2
  276. package/server/lib/projects/routes.js +1 -2
  277. package/server/lib/quota/DOCUMENTATION.md +35 -7
  278. package/server/lib/quota/index.js +1 -0
  279. package/server/lib/quota/providers/claude/index.js +1 -1
  280. package/server/lib/quota/providers/cline-pass.js +1 -1
  281. package/server/lib/quota/providers/exe-dev.js +1 -1
  282. package/server/lib/quota/providers/google/index.js +1 -1
  283. package/server/lib/quota/providers/hyper.js +1 -1
  284. package/server/lib/quota/providers/kimi.js +116 -36
  285. package/server/lib/quota/providers/kimi.test.js +128 -3
  286. package/server/lib/quota/providers/opencode-go.js +144 -21
  287. package/server/lib/quota/providers/opencode-go.test.js +229 -6
  288. package/server/lib/quota/providers/openrouter.js +1 -1
  289. package/server/lib/quota/providers/zenmux.js +1 -1
  290. package/server/lib/quota/utils/auth.js +1 -0
  291. package/server/lib/quota/utils/transformers.js +2 -6
  292. package/server/lib/relay/DOCUMENTATION.md +18 -3
  293. package/server/lib/relay/e2ee.js +7 -7
  294. package/server/lib/relay/host-client.js +84 -13
  295. package/server/lib/relay/host-client.test.js +201 -1
  296. package/server/lib/relay/identity.js +6 -29
  297. package/server/lib/relay/identity.test.js +18 -28
  298. package/server/lib/relay/key-store.js +141 -0
  299. package/server/lib/relay/key-store.test.js +138 -0
  300. package/server/lib/relay/service.js +8 -8
  301. package/server/lib/relay/service.test.js +10 -5
  302. package/server/lib/relay/signing-key.js +13 -36
  303. package/server/lib/relay/tunnel-codec.js +10 -10
  304. package/server/lib/route-module-exports.test.js +22 -0
  305. package/server/lib/routing/DOCUMENTATION.md +23 -3
  306. package/server/lib/routing/cache.js +87 -0
  307. package/server/lib/routing/defaults.js +11 -0
  308. package/server/lib/routing/history.js +12 -4
  309. package/server/lib/routing/runtime.js +39 -3
  310. package/server/lib/routing/runtime.test.js +81 -2
  311. package/server/lib/routing/store.js +12 -1
  312. package/server/lib/routing/store.test.js +13 -0
  313. package/server/lib/scheduled-tasks/DOCUMENTATION.md +59 -1
  314. package/server/lib/scheduled-tasks/existing-session.js +119 -0
  315. package/server/lib/scheduled-tasks/existing-session.test.js +350 -0
  316. package/server/lib/scheduled-tasks/loops.js +1 -8
  317. package/server/lib/scheduled-tasks/routes.js +8 -8
  318. package/server/lib/scheduled-tasks/runtime.js +103 -13
  319. package/server/lib/scheduled-tasks/runtime.test.js +48 -0
  320. package/server/lib/scheduled-tasks/service.js +33 -11
  321. package/server/lib/scheduled-tasks/service.test.js +128 -2
  322. package/server/lib/scheduled-tasks/session-defaults.js +27 -0
  323. package/server/lib/scheduled-tasks/session-defaults.test.js +19 -0
  324. package/server/lib/session-assist/context.js +1 -0
  325. package/server/lib/session-folders/routes.js +2 -2
  326. package/server/lib/session-goal/objectives.js +1 -1
  327. package/server/lib/session-knowledge/routes.js +2 -2
  328. package/server/lib/session-knowledge/runtime.js +1 -2
  329. package/server/lib/session-work/DOCUMENTATION.md +39 -14
  330. package/server/lib/session-work/questions.js +31 -2
  331. package/server/lib/session-work/runtime.js +22 -13
  332. package/server/lib/session-work/runtime.test.js +43 -26
  333. package/server/lib/session-work/state.js +10 -4
  334. package/server/lib/session-work/state.test.js +8 -1
  335. package/server/lib/shared/DOCUMENTATION.md +89 -0
  336. package/server/lib/shared/guards.js +53 -0
  337. package/server/lib/shared/guards.test.js +112 -0
  338. package/server/lib/skills-catalog/DOCUMENTATION.md +10 -8
  339. package/server/lib/skills-catalog/cache.js +3 -2
  340. package/server/lib/skills-catalog/curated-sources.js +5 -1
  341. package/server/lib/skills-catalog/git.js +107 -20
  342. package/server/lib/skills-catalog/git.test.js +78 -0
  343. package/server/lib/skills-catalog/install.js +21 -12
  344. package/server/lib/skills-catalog/scan.js +25 -15
  345. package/server/lib/skills-catalog/source.js +26 -1
  346. package/server/lib/skills-catalog/source.test.js +27 -0
  347. package/server/lib/source-control/DOCUMENTATION.md +2 -1
  348. package/server/lib/source-control/audit-storage.js +7 -6
  349. package/server/lib/source-control/audit-storage.test.js +11 -0
  350. package/server/lib/source-control/binding-service.js +2 -5
  351. package/server/lib/source-control/change-request-worktree.js +90 -0
  352. package/server/lib/source-control/change-request-worktree.test.js +121 -0
  353. package/server/lib/source-control/mutation-executor.js +1 -1
  354. package/server/lib/source-control/mutation-storage.js +11 -5
  355. package/server/lib/source-control/provider-instance.js +1 -2
  356. package/server/lib/source-control/repository-identity.js +1 -1
  357. package/server/lib/source-control/routes.js +14 -2
  358. package/server/lib/spaces/DOCUMENTATION.md +42 -17
  359. package/server/lib/spaces/command-stream.test.js +15 -0
  360. package/server/lib/spaces/dispatcher.js +7 -0
  361. package/server/lib/spaces/dispatcher.test.js +17 -0
  362. package/server/lib/spaces/hardening.js +2 -2
  363. package/server/lib/spaces/hardening.test.js +1 -1
  364. package/server/lib/spaces/host.js +2 -0
  365. package/server/lib/spaces/journey.js +66 -5
  366. package/server/lib/spaces/journey.test.js +95 -4
  367. package/server/lib/spaces/layout.js +1 -1
  368. package/server/lib/spaces/places/docker-disk.js +38 -14
  369. package/server/lib/spaces/places/docker-disk.test.js +80 -1
  370. package/server/lib/spaces/places/docker.js +35 -11
  371. package/server/lib/spaces/places/fake-docker.js +22 -3
  372. package/server/lib/spaces/places/memory-place.js +3 -0
  373. package/server/lib/spaces/places/packed.docker.live.test.js +1 -1
  374. package/server/lib/spaces/routes.js +5 -0
  375. package/server/lib/spaces/routes.test.js +4 -2
  376. package/server/lib/spaces/run-command.js +9 -2
  377. package/server/lib/spaces/tools.js +4 -5
  378. package/server/lib/spaces/tools.test.js +2 -2
  379. package/server/lib/terminal/runtime.js +18 -6
  380. package/server/lib/terminal/runtime.test.js +66 -0
  381. package/server/lib/tts/index.js +3 -0
  382. package/server/lib/tts/service.js +4 -2
  383. package/server/lib/walkthrough/DOCUMENTATION.md +3 -1
  384. package/server/lib/walkthrough/index.js +2 -3
  385. package/server/lib/walkthrough/pr-source.test.js +22 -0
  386. package/server/lib/walkthrough/sources.js +6 -1
  387. package/server/opencode-proxy.test.js +127 -0
  388. package/bin/lib/commands-startup.test.js +0 -15
  389. package/dist/assets/CodeMirrorCommentWidgets-CVDSjcrP.js +0 -1
  390. package/dist/assets/DiffView-Ct7vL3fD.js +0 -4
  391. package/dist/assets/FilesView-DT0uEYgT.js +0 -17
  392. package/dist/assets/GuestSurfacePane-DVvk1VPu.js +0 -1
  393. package/dist/assets/LinearIssuesView-C10MwA9h.js +0 -1
  394. package/dist/assets/MarkdownImageGallery-BbN_K_3d.js +0 -1
  395. package/dist/assets/MarkdownRendererImpl-BLt2Tkk9.js +0 -10
  396. package/dist/assets/OnboardingScreen-Bgp5A3WB.js +0 -1
  397. package/dist/assets/PierreDiffViewer-CWJLj-S-.js +0 -210
  398. package/dist/assets/PlanView-DsRWnsOI.js +0 -5
  399. package/dist/assets/PublishDialog-CCeKloRu.js +0 -2
  400. package/dist/assets/SettingsView-BuPPsNPp.js +0 -30
  401. package/dist/assets/SettingsWindow-CM5fL8Ot.js +0 -1
  402. package/dist/assets/SubmoduleDiffSummary-CfsMcfiQ.js +0 -1
  403. package/dist/assets/ToolOutputDialog-mZrfSofz.js +0 -15
  404. package/dist/assets/ToolPartDiffPreview-BUGCRYEL.js +0 -8
  405. package/dist/assets/WalkthroughView-ClBo7PPd.js +0 -4
  406. package/dist/assets/appThemeRegistry-CxzMxR-H.js +0 -1
  407. package/dist/assets/de-CBla4hjd.js +0 -14
  408. package/dist/assets/es-BmnZtxTD.js +0 -20
  409. package/dist/assets/fileTreeStatus-BSHFIGEg.js +0 -1
  410. package/dist/assets/fr-OVKIBUZO.js +0 -18
  411. package/dist/assets/index-CKCFKmjF.js +0 -1
  412. package/dist/assets/index-Dbx4V4GN.css +0 -1
  413. package/dist/assets/index-vQ1Pg1cr.js +0 -61
  414. package/dist/assets/ja-6v-yr-gE.js +0 -20
  415. package/dist/assets/ko-I_ZLvgQ9.js +0 -20
  416. package/dist/assets/main-CmO4dRtR.js +0 -2
  417. package/dist/assets/main-b9vqhlYM.js +0 -999
  418. package/dist/assets/markdownCore-BPEZRQfP.js +0 -7
  419. package/dist/assets/miniChat-B5Oi7B-6.js +0 -2
  420. package/dist/assets/mobile-CVtShif9.js +0 -2
  421. package/dist/assets/nl-DcvIJf46.js +0 -20
  422. package/dist/assets/patchFileDiff-CW3wCH1O.js +0 -13
  423. package/dist/assets/pl-JxCUl0sd.js +0 -20
  424. package/dist/assets/pt-BR-L89mjja2.js +0 -20
  425. package/dist/assets/relocateRestoredSession-DYh_9oBa.js +0 -1
  426. package/dist/assets/renderElectronMiniChatApp-BD-1JHSg.js +0 -2
  427. package/dist/assets/renderMobileApp-7s5InXt1.js +0 -25
  428. package/dist/assets/runtimeEndpointReset-DqLJC6L1.js +0 -53
  429. package/dist/assets/shikiHighlight-CXgZnvHh.js +0 -1
  430. package/dist/assets/space-apply-1trGVIl8.js +0 -1
  431. package/dist/assets/space-close-y7j-NuBv.js +0 -1
  432. package/dist/assets/tr-ka5J1flt.js +0 -11
  433. package/dist/assets/uk-PyGe6Q_u.js +0 -20
  434. package/dist/assets/useInlineCommentController-CrjSGCpi.js +0 -2
  435. package/dist/assets/vendor-codemirror-lang-python-B7ClrMIT.js +0 -3
  436. package/dist/assets/vendor-codemirror-lang-xml-C8tGnS64.js +0 -1
  437. package/dist/assets/vendor-codemirror-language-data-q2bKO1EM.js +0 -2
  438. package/dist/assets/vendor-framer-motion-Bq3iTZ6r.js +0 -1
  439. package/dist/assets/vendor-katex-CHD9BdDO.js +0 -257
  440. package/dist/assets/vendor-katex-Cp579UoJ.css +0 -1
  441. package/dist/assets/zh-CN-B0P2tybJ.js +0 -20
  442. package/dist/assets/zh-TW-Bs9C5cN8.js +0 -20
@@ -0,0 +1,9 @@
1
+ import{r as c,j as T}from"./vendor-react-BUCujlKS.js";import{i as Ct,g as Se,s as Kt,a as Xt,b as Mt,c as Z,d as we,e as Ee,f as Ce,h as Me,r as Ae,j as Ve,k as Yt,l as De,m as be,n as Le,o as Te,S as qt,H as Jt,F as k,p as Re,q as Zt,t as Y,u as At,v as D,w as Ie,x as N,y as at,z as ke,A as I,B as je,C as Fe,D as Oe,E as Vt,G as Ge,I as We,J as Dt,K as He,L as Be,M as Ne,N as Ue,O as Qt,P as $e,Q as ze,R as _e,T as Ke,U as Xe,V as Ye,W as qe,X as Je,Y as Ze,Z as Qe,_ as tn,$ as en,a0 as q,a1 as nn,a2 as sn,a3 as on,a4 as rn,a5 as an,a6 as un}from"./vendor-motion-dom-HXPOMxb7.js";import{p as te,s as ut,m as ln,a as lt,c as cn,n as X,g as ee,r as ne}from"./vendor-motion-utils-BGh8QBgx.js";const ht=c.createContext({});function dt(t){const e=c.useRef(null);return e.current===null&&(e.current=t()),e.current}const se=typeof window<"u",oe=se?c.useLayoutEffect:c.useEffect,Q=c.createContext(null),mt=c.createContext({transformPagePoint:t=>t,isStatic:!1,reducedMotion:"never"});function bt(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function fn(...t){return e=>{let n=!1;const s=t.map(o=>{const i=bt(o,e);return!n&&typeof i=="function"&&(n=!0),i});if(n)return()=>{for(let o=0;o<s.length;o++){const i=s[o];typeof i=="function"?i():bt(t[o],null)}}}}function hn(...t){return c.useCallback(fn(...t),t)}class dn extends c.Component{getSnapshotBeforeUpdate(e){const n=this.props.childRef.current;if(n&&e.isPresent&&!this.props.isPresent&&this.props.pop!==!1){const s=n.offsetParent,o=Ct(s)&&s.offsetWidth||0,i=Ct(s)&&s.offsetHeight||0,r=this.props.sizeRef.current;r.height=n.offsetHeight||0,r.width=n.offsetWidth||0,r.top=n.offsetTop,r.left=n.offsetLeft,r.right=o-r.width-r.left,r.bottom=i-r.height-r.top}return null}componentDidUpdate(){}render(){return this.props.children}}function mn({children:t,isPresent:e,anchorX:n,anchorY:s,root:o,pop:i}){const r=c.useId(),a=c.useRef(null),d=c.useRef({width:0,height:0,top:0,left:0,right:0,bottom:0}),{nonce:f}=c.useContext(mt),p=t.props?.ref??t?.ref,u=hn(a,p);return c.useInsertionEffect(()=>{const{width:l,height:m,top:h,left:P,right:v,bottom:g}=d.current;if(e||i===!1||!a.current||!l||!m)return;const y=n==="left"?`left: ${P}`:`right: ${v}`,w=s==="bottom"?`bottom: ${g}`:`top: ${h}`;a.current.dataset.motionPopId=r;const S=document.createElement("style");f&&(S.nonce=f);const C=o??document.head;return C.appendChild(S),S.sheet&&S.sheet.insertRule(`
2
+ [data-motion-pop-id="${r}"] {
3
+ position: absolute !important;
4
+ width: ${l}px !important;
5
+ height: ${m}px !important;
6
+ ${y}px !important;
7
+ ${w}px !important;
8
+ }
9
+ `),()=>{C.contains(S)&&C.removeChild(S)}},[e]),T.jsx(dn,{isPresent:e,childRef:a,sizeRef:d,pop:i,children:i===!1?t:c.cloneElement(t,{ref:u})})}const pn=({children:t,initial:e,isPresent:n,onExitComplete:s,custom:o,presenceAffectsLayout:i,mode:r,anchorX:a,anchorY:d,root:f})=>{const p=dt(gn),u=c.useId();let l=!0,m=c.useMemo(()=>(l=!1,{id:u,initial:e,isPresent:n,custom:o,onExitComplete:h=>{p.set(h,!0);for(const P of p.values())if(!P)return;s&&s()},register:h=>(p.set(h,!1),()=>p.delete(h))}),[n,p,s]);return i&&l&&(m={...m}),c.useMemo(()=>{p.forEach((h,P)=>p.set(P,!1))},[n]),c.useEffect(()=>{!n&&!p.size&&s&&s()},[n]),t=T.jsx(mn,{pop:r==="popLayout",isPresent:n,anchorX:a,anchorY:d,root:f,children:t}),T.jsx(Q.Provider,{value:m,children:t})};function gn(){return new Map}function ie(t=!0){const e=c.useContext(Q);if(e===null)return[!0,null];const{isPresent:n,onExitComplete:s,register:o}=e,i=c.useId();c.useEffect(()=>{if(t)return o(i)},[t]);const r=c.useCallback(()=>t&&s&&s(i),[i,s,t]);return!n&&s?[!1,r]:[!0]}const _=t=>t.key||"";function Lt(t){const e=[];return c.Children.forEach(t,n=>{c.isValidElement(n)&&e.push(n)}),e}const _s=({children:t,custom:e,initial:n=!0,onExitComplete:s,presenceAffectsLayout:o=!0,mode:i="sync",propagate:r=!1,anchorX:a="left",anchorY:d="top",root:f})=>{const[p,u]=ie(r),l=c.useMemo(()=>Lt(t),[t]),m=r&&!p?[]:l.map(_),h=c.useRef(!0),P=c.useRef(l),v=dt(()=>new Map),g=c.useRef(new Set),[y,w]=c.useState(l),[S,C]=c.useState(l);oe(()=>{h.current=!1,P.current=l;for(let E=0;E<S.length;E++){const x=_(S[E]);m.includes(x)?(v.delete(x),g.current.delete(x)):v.get(x)!==!0&&v.set(x,!1)}},[S,m.length,m.join("-")]);const A=[];if(l!==y){let E=[...l];for(let x=0;x<S.length;x++){const V=S[x],M=_(V);m.includes(M)||(E.splice(x,0,V),A.push(V))}return i==="wait"&&A.length&&(E=A),C(Lt(E)),w(l),null}const{forceRender:b}=c.useContext(ht);return T.jsx(T.Fragment,{children:S.map(E=>{const x=_(E),V=r&&!p?!1:l===S||m.includes(x),M=()=>{if(g.current.has(x))return;if(g.current.add(x),v.has(x))v.set(x,!0);else return;let j=!0;v.forEach(F=>{F||(j=!1)}),j&&(b?.(),C(P.current),r&&u?.(),s&&s())};return T.jsx(pn,{isPresent:V,initial:!h.current||n?void 0:!1,custom:e,presenceAffectsLayout:o,mode:i,root:f,onExitComplete:V?void 0:M,anchorX:a,anchorY:d,children:E},x)})})},re=c.createContext({strict:!1}),Tt={animation:["animate","variants","whileHover","whileTap","exit","whileInView","whileFocus","whileDrag"],exit:["exit"],drag:["drag","dragControls"],focus:["whileFocus"],hover:["whileHover","onHoverStart","onHoverEnd"],tap:["whileTap","onTap","onTapStart","onTapCancel"],pan:["onPan","onPanStart","onPanSessionStart","onPanEnd"],inView:["whileInView","onViewportEnter","onViewportLeave"],layout:["layout","layoutId"]};let Rt=!1;function vn(){if(Rt)return;const t={};for(const e in Tt)t[e]={isEnabled:n=>Tt[e].some(s=>!!n[s])};Kt(t),Rt=!0}function ae(){return vn(),Se()}function yn(t){const e=ae();for(const n in t)e[n]={...e[n],...t[n]};Kt(e)}const Pn=new Set(["animate","exit","variants","initial","style","values","variants","transition","transformTemplate","custom","inherit","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","_dragX","_dragY","onHoverStart","onHoverEnd","onViewportEnter","onViewportLeave","globalTapTarget","propagate","ignoreStrict","viewport"]);function J(t){return t.startsWith("while")||t.startsWith("drag")&&t!=="draggable"||t.startsWith("layout")||t.startsWith("onTap")||t.startsWith("onPan")||t.startsWith("onLayout")||Pn.has(t)}let ue=t=>!J(t);function xn(t){typeof t=="function"&&(ue=e=>e.startsWith("on")?!J(e):t(e))}try{xn(require("@emotion/is-prop-valid").default)}catch{}function Sn(t,e,n){const s={};for(const o in t)o==="values"&&typeof t.values=="object"||(ue(o)||n===!0&&J(o)||!e&&!J(o)||t.draggable&&o.startsWith("onDrag"))&&(s[o]=t[o]);return s}const tt=c.createContext({});function wn(t,e){if(Xt(t)){const{initial:n,animate:s}=t;return{initial:n===!1||Mt(n)?n:void 0,animate:Mt(s)?s:void 0}}return t.inherit!==!1?e:{}}function En(t){const{initial:e,animate:n}=wn(t,c.useContext(tt));return c.useMemo(()=>({initial:e,animate:n}),[It(e),It(n)])}function It(t){return Array.isArray(t)?t.join(" "):t}const pt=()=>({style:{},transform:{},transformOrigin:{},vars:{}});function le(t,e,n){for(const s in e)!Z(e[s])&&!we(s,n)&&(t[s]=e[s])}function Cn({transformTemplate:t},e){return c.useMemo(()=>{const n=pt();return Ee(n,e,t),Object.assign({},n.vars,n.style)},[e])}function Mn(t,e){const n=t.style||{},s={};return le(s,n,t),Object.assign(s,Cn(t,e)),s}function An(t,e){const n={},s=Mn(t,e);return t.drag&&t.dragListener!==!1&&(n.draggable=!1,s.userSelect=s.WebkitUserSelect=s.WebkitTouchCallout="none",s.touchAction=t.drag===!0?"none":`pan-${t.drag==="x"?"y":"x"}`),t.tabIndex===void 0&&(t.onTap||t.onTapStart||t.whileTap)&&(n.tabIndex=0),n.style=s,n}const ce=()=>({...pt(),attrs:{}});function Vn(t,e,n,s){const o=c.useMemo(()=>{const i=ce();return Ce(i,e,Me(s),t.transformTemplate,t.style),{...i.attrs,style:{...i.style}}},[e]);if(t.style){const i={};le(i,t.style,t),o.style={...i,...o.style}}return o}const Dn=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","switch","symbol","svg","text","tspan","use","view"];function gt(t){return typeof t!="string"||t.includes("-")?!1:!!(Dn.indexOf(t)>-1||/[A-Z]/u.test(t))}function bn(t,e,n,{latestValues:s},o,i=!1,r){const d=(r??gt(t)?Vn:An)(e,s,o,t),f=Sn(e,typeof t=="string",i),p=t!==c.Fragment?{...f,...d,ref:n}:{},{children:u}=e,l=c.useMemo(()=>Z(u)?u.get():u,[u]);return c.createElement(t,{...p,children:l})}function Ln({scrapeMotionValuesFromProps:t,createRenderState:e},n,s,o){return{latestValues:Tn(n,s,o,t),renderState:e()}}function Tn(t,e,n,s){const o={},i=s(t,{});for(const l in i)o[l]=Ae(i[l]);let{initial:r,animate:a}=t;const d=Xt(t),f=Ve(t);e&&f&&!d&&t.inherit!==!1&&(r===void 0&&(r=e.initial),a===void 0&&(a=e.animate));let p=n?n.initial===!1:!1;p=p||r===!1;const u=p?a:r;if(u&&typeof u!="boolean"&&!Yt(u)){const l=Array.isArray(u)?u:[u];for(let m=0;m<l.length;m++){const h=De(t,l[m]);if(h){const{transitionEnd:P,transition:v,...g}=h;for(const y in g){let w=g[y];if(Array.isArray(w)){const S=p?w.length-1:0;w=w[S]}w!==null&&(o[y]=w)}for(const y in P)o[y]=P[y]}}}return o}const fe=t=>(e,n)=>{const s=c.useContext(tt),o=c.useContext(Q),i=()=>Ln(t,e,s,o);return n?i():dt(i)},Rn=fe({scrapeMotionValuesFromProps:be,createRenderState:pt}),In=fe({scrapeMotionValuesFromProps:Le,createRenderState:ce}),kn=Symbol.for("motionComponentSymbol");function jn(t,e,n){const s=c.useRef(n);c.useInsertionEffect(()=>{s.current=n});const o=c.useRef(null);return c.useCallback(i=>{i&&t.onMount?.(i),e&&(i?e.mount(i):e.unmount());const r=s.current;if(typeof r=="function")if(i){const a=r(i);typeof a=="function"&&(o.current=a)}else o.current?(o.current(),o.current=null):r(i);else r&&(r.current=i)},[e])}const he=c.createContext({});function O(t){return t&&typeof t=="object"&&Object.prototype.hasOwnProperty.call(t,"current")}function Fn(t,e,n,s,o,i){const{visualElement:r}=c.useContext(tt),a=c.useContext(re),d=c.useContext(Q),f=c.useContext(mt),p=f.reducedMotion,u=f.skipAnimations,l=c.useRef(null),m=c.useRef(!1);s=s||a.renderer,!l.current&&s&&(l.current=s(t,{visualState:e,parent:r,props:n,presenceContext:d,blockInitialAnimation:d?d.initial===!1:!1,reducedMotionConfig:p,skipAnimations:u,isSVG:i}),m.current&&l.current&&(l.current.manuallyAnimateOnMount=!0));const h=l.current,P=c.useContext(he);h&&!h.projection&&o&&(h.type==="html"||h.type==="svg")&&On(l.current,n,o,P);const v=c.useRef(!1);c.useInsertionEffect(()=>{h&&v.current&&h.update(n,d)});const g=n[Te],y=c.useRef(!!g&&!window.MotionHandoffIsComplete?.(g)&&window.MotionHasOptimisedAnimation?.(g));return oe(()=>{m.current=!0,h&&(v.current=!0,window.MotionIsMounted=!0,h.updateFeatures(),h.scheduleRenderMicrotask(),y.current&&h.animationState&&h.animationState.animateChanges())}),c.useEffect(()=>{h&&(!y.current&&h.animationState&&h.animationState.animateChanges(),y.current&&(queueMicrotask(()=>{window.MotionHandoffMarkAsComplete?.(g)}),y.current=!1),h.enteringChildren=void 0)}),h}function On(t,e,n,s){const{layoutId:o,layout:i,drag:r,dragConstraints:a,layoutScroll:d,layoutRoot:f,layoutCrossfade:p}=e;t.projection=new n(t.latestValues,e["data-framer-portal-id"]?void 0:de(t.parent)),t.projection.setOptions({layoutId:o,layout:i,alwaysMeasureLayout:!!r||a&&O(a),visualElement:t,animationType:typeof i=="string"?i:"both",initialPromotionConfig:s,crossfade:p,layoutScroll:d,layoutRoot:f})}function de(t){if(t)return t.options.allowProjection!==!1?t.projection:de(t.parent)}function et(t,{forwardMotionProps:e=!1,type:n}={},s,o){s&&yn(s);const i=n?n==="svg":gt(t),r=i?In:Rn;function a(f,p){let u;const l={...c.useContext(mt),...f,layoutId:Gn(f)},{isStatic:m}=l,h=En(f),P=r(f,m);if(!m&&se){Wn();const v=Hn(l);u=v.MeasureLayout,h.visualElement=Fn(t,P,l,o,v.ProjectionNode,i)}return T.jsxs(tt.Provider,{value:h,children:[u&&h.visualElement?T.jsx(u,{visualElement:h.visualElement,...l}):null,bn(t,f,jn(P,h.visualElement,p),P,m,e,i)]})}a.displayName=`motion.${typeof t=="string"?t:`create(${t.displayName??t.name??""})`}`;const d=c.forwardRef(a);return d[kn]=t,d}function Gn({layoutId:t}){const e=c.useContext(ht).id;return e&&t!==void 0?e+"-"+t:t}function Wn(t,e){c.useContext(re).strict}function Hn(t){const e=ae(),{drag:n,layout:s}=e;if(!n&&!s)return{};const o={...n,...s};return{MeasureLayout:n?.isEnabled(t)||s?.isEnabled(t)?o.MeasureLayout:void 0,ProjectionNode:o.ProjectionNode}}function Bn(t,e){if(typeof Proxy>"u")return et;const n=new Map,s=(i,r)=>et(i,r,t,e),o=(i,r)=>s(i,r);return new Proxy(o,{get:(i,r)=>r==="create"?s:(n.has(r)||n.set(r,et(r,void 0,t,e)),n.get(r))})}const Nn=(t,e)=>e.isSVG??gt(t)?new qt(e):new Jt(e,{allowProjection:t!==c.Fragment});class Un extends k{constructor(e){super(e),e.animationState||(e.animationState=Re(e))}updateAnimationControlsSubscription(){const{animate:e}=this.node.getProps();Yt(e)&&(this.unmountControls=e.subscribe(this.node))}mount(){this.updateAnimationControlsSubscription()}update(){const{animate:e}=this.node.getProps(),{animate:n}=this.node.prevProps||{};e!==n&&this.updateAnimationControlsSubscription()}unmount(){this.node.animationState.reset(),this.unmountControls?.()}}let $n=0;class zn extends k{constructor(){super(...arguments),this.id=$n++}update(){if(!this.node.presenceContext)return;const{isPresent:e,onExitComplete:n}=this.node.presenceContext,{isPresent:s}=this.node.prevPresenceContext||{};if(!this.node.animationState||e===s)return;const o=this.node.animationState.setActive("exit",!e);n&&!e&&o.then(()=>{n(this.id)})}mount(){const{register:e,onExitComplete:n}=this.node.presenceContext||{};n&&n(this.id),e&&(this.unmount=e(this.id))}unmount(){}}const _n={animation:{Feature:Un},exit:{Feature:zn}};function U(t){return{point:{x:t.pageX,y:t.pageY}}}const Kn=t=>e=>Zt(e)&&t(e,U(e));function B(t,e,n,s){return Y(t,e,Kn(n),s)}const me=({current:t})=>t?t.ownerDocument.defaultView:null,kt=(t,e)=>Math.abs(t-e);function Xn(t,e){const n=kt(t.x,e.x),s=kt(t.y,e.y);return Math.sqrt(n**2+s**2)}const jt=new Set(["auto","scroll"]);class pe{constructor(e,n,{transformPagePoint:s,contextWindow:o=window,dragSnapToOrigin:i=!1,distanceThreshold:r=3,element:a}={}){if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.contextWindow=window,this.scrollPositions=new Map,this.removeScrollListeners=null,this.onElementScroll=m=>{this.handleScroll(m.target)},this.onWindowScroll=()=>{this.handleScroll(window)},this.updatePoint=()=>{if(!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const m=st(this.lastMoveEventInfo,this.history),h=this.startEvent!==null,P=Xn(m.offset,{x:0,y:0})>=this.distanceThreshold;if(!h&&!P)return;const{point:v}=m,{timestamp:g}=At;this.history.push({...v,timestamp:g});const{onStart:y,onMove:w}=this.handlers;h||(y&&y(this.lastMoveEvent,m),this.startEvent=this.lastMoveEvent),w&&w(this.lastMoveEvent,m)},this.handlePointerMove=(m,h)=>{this.lastMoveEvent=m,this.lastMoveEventInfo=nt(h,this.transformPagePoint),D.update(this.updatePoint,!0)},this.handlePointerUp=(m,h)=>{this.end();const{onEnd:P,onSessionEnd:v,resumeAnimation:g}=this.handlers;if((this.dragSnapToOrigin||!this.startEvent)&&g&&g(),!(this.lastMoveEvent&&this.lastMoveEventInfo))return;const y=st(m.type==="pointercancel"?this.lastMoveEventInfo:nt(h,this.transformPagePoint),this.history);this.startEvent&&P&&P(m,y),v&&v(m,y)},!Zt(e))return;this.dragSnapToOrigin=i,this.handlers=n,this.transformPagePoint=s,this.distanceThreshold=r,this.contextWindow=o||window;const d=U(e),f=nt(d,this.transformPagePoint),{point:p}=f,{timestamp:u}=At;this.history=[{...p,timestamp:u}];const{onSessionStart:l}=n;l&&l(e,st(f,this.history)),this.removeListeners=te(B(this.contextWindow,"pointermove",this.handlePointerMove),B(this.contextWindow,"pointerup",this.handlePointerUp),B(this.contextWindow,"pointercancel",this.handlePointerUp)),a&&this.startScrollTracking(a)}startScrollTracking(e){let n=e.parentElement;for(;n;){const s=getComputedStyle(n);(jt.has(s.overflowX)||jt.has(s.overflowY))&&this.scrollPositions.set(n,{x:n.scrollLeft,y:n.scrollTop}),n=n.parentElement}this.scrollPositions.set(window,{x:window.scrollX,y:window.scrollY}),window.addEventListener("scroll",this.onElementScroll,{capture:!0}),window.addEventListener("scroll",this.onWindowScroll),this.removeScrollListeners=()=>{window.removeEventListener("scroll",this.onElementScroll,{capture:!0}),window.removeEventListener("scroll",this.onWindowScroll)}}handleScroll(e){const n=this.scrollPositions.get(e);if(!n)return;const s=e===window,o=s?{x:window.scrollX,y:window.scrollY}:{x:e.scrollLeft,y:e.scrollTop},i={x:o.x-n.x,y:o.y-n.y};i.x===0&&i.y===0||(s?this.lastMoveEventInfo&&(this.lastMoveEventInfo.point.x+=i.x,this.lastMoveEventInfo.point.y+=i.y):this.history.length>0&&(this.history[0].x-=i.x,this.history[0].y-=i.y),this.scrollPositions.set(e,o),D.update(this.updatePoint,!0))}updateHandlers(e){this.handlers=e}end(){this.removeListeners&&this.removeListeners(),this.removeScrollListeners&&this.removeScrollListeners(),this.scrollPositions.clear(),Ie(this.updatePoint)}}function nt(t,e){return e?{point:e(t.point)}:t}function Ft(t,e){return{x:t.x-e.x,y:t.y-e.y}}function st({point:t},e){return{point:t,delta:Ft(t,ge(e)),offset:Ft(t,Yn(e)),velocity:qn(e,.1)}}function Yn(t){return t[0]}function ge(t){return t[t.length-1]}function qn(t,e){if(t.length<2)return{x:0,y:0};let n=t.length-1,s=null;const o=ge(t);for(;n>=0&&(s=t[n],!(o.timestamp-s.timestamp>ut(e)));)n--;if(!s)return{x:0,y:0};s===t[0]&&t.length>2&&o.timestamp-s.timestamp>ut(e)*2&&(s=t[1]);const i=ln(o.timestamp-s.timestamp);if(i===0)return{x:0,y:0};const r={x:(o.x-s.x)/i,y:(o.y-s.y)/i};return r.x===1/0&&(r.x=0),r.y===1/0&&(r.y=0),r}function Jn(t,{min:e,max:n},s){return e!==void 0&&t<e?t=s?N(e,t,s.min):Math.max(t,e):n!==void 0&&t>n&&(t=s?N(n,t,s.max):Math.min(t,n)),t}function Ot(t,e,n){return{min:e!==void 0?t.min+e:void 0,max:n!==void 0?t.max+n-(t.max-t.min):void 0}}function Zn(t,{top:e,left:n,bottom:s,right:o}){return{x:Ot(t.x,n,o),y:Ot(t.y,e,s)}}function Gt(t,e){let n=e.min-t.min,s=e.max-t.max;return e.max-e.min<t.max-t.min&&([n,s]=[s,n]),{min:n,max:s}}function Qn(t,e){return{x:Gt(t.x,e.x),y:Gt(t.y,e.y)}}function ts(t,e){let n=.5;const s=at(t),o=at(e);return o>s?n=lt(e.min,e.max-s,t.min):s>o&&(n=lt(t.min,t.max-o,e.min)),cn(0,1,n)}function es(t,e){const n={};return e.min!==void 0&&(n.min=e.min-t.min),e.max!==void 0&&(n.max=e.max-t.min),n}const ct=.35;function ns(t=ct){return t===!1?t=0:t===!0&&(t=ct),{x:Wt(t,"left","right"),y:Wt(t,"top","bottom")}}function Wt(t,e,n){return{min:Ht(t,e),max:Ht(t,n)}}function Ht(t,e){return typeof t=="number"?t:t[e]||0}const ss=new WeakMap;class os{constructor(e){this.openDragLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=ke(),this.latestPointerEvent=null,this.latestPanInfo=null,this.visualElement=e}start(e,{snapToCursor:n=!1,distanceThreshold:s}={}){const{presenceContext:o}=this.visualElement;if(o&&o.isPresent===!1)return;const i=u=>{n&&this.snapToCursor(U(u).point),this.stopAnimation()},r=(u,l)=>{const{drag:m,dragPropagation:h,onDragStart:P}=this.getProps();if(m&&!h&&(this.openDragLock&&this.openDragLock(),this.openDragLock=We(m),!this.openDragLock))return;this.latestPointerEvent=u,this.latestPanInfo=l,this.isDragging=!0,this.currentDirection=null,this.resolveConstraints(),this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!0,this.visualElement.projection.target=void 0),I(g=>{let y=this.getAxisMotionValue(g).get()||0;if(He.test(y)){const{projection:w}=this.visualElement;if(w&&w.layout){const S=w.layout.layoutBox[g];S&&(y=at(S)*(parseFloat(y)/100))}}this.originPoint[g]=y}),P&&D.update(()=>P(u,l),!1,!0),Vt(this.visualElement,"transform");const{animationState:v}=this.visualElement;v&&v.setActive("whileDrag",!0)},a=(u,l)=>{this.latestPointerEvent=u,this.latestPanInfo=l;const{dragPropagation:m,dragDirectionLock:h,onDirectionLock:P,onDrag:v}=this.getProps();if(!m&&!this.openDragLock)return;const{offset:g}=l;if(h&&this.currentDirection===null){this.currentDirection=rs(g),this.currentDirection!==null&&P&&P(this.currentDirection);return}this.updateAxis("x",l.point,g),this.updateAxis("y",l.point,g),this.visualElement.render(),v&&D.update(()=>v(u,l),!1,!0)},d=(u,l)=>{this.latestPointerEvent=u,this.latestPanInfo=l,this.stop(u,l),this.latestPointerEvent=null,this.latestPanInfo=null},f=()=>{const{dragSnapToOrigin:u}=this.getProps();(u||this.constraints)&&this.startAnimation({x:0,y:0})},{dragSnapToOrigin:p}=this.getProps();this.panSession=new pe(e,{onSessionStart:i,onStart:r,onMove:a,onSessionEnd:d,resumeAnimation:f},{transformPagePoint:this.visualElement.getTransformPagePoint(),dragSnapToOrigin:p,distanceThreshold:s,contextWindow:me(this.visualElement),element:this.visualElement.current})}stop(e,n){const s=e||this.latestPointerEvent,o=n||this.latestPanInfo,i=this.isDragging;if(this.cancel(),!i||!o||!s)return;const{velocity:r}=o;this.startAnimation(r);const{onDragEnd:a}=this.getProps();a&&D.postRender(()=>a(s,o))}cancel(){this.isDragging=!1;const{projection:e,animationState:n}=this.visualElement;e&&(e.isAnimationBlocked=!1),this.endPanSession();const{dragPropagation:s}=this.getProps();!s&&this.openDragLock&&(this.openDragLock(),this.openDragLock=null),n&&n.setActive("whileDrag",!1)}endPanSession(){this.panSession&&this.panSession.end(),this.panSession=void 0}updateAxis(e,n,s){const{drag:o}=this.getProps();if(!s||!K(e,o,this.currentDirection))return;const i=this.getAxisMotionValue(e);let r=this.originPoint[e]+s[e];this.constraints&&this.constraints[e]&&(r=Jn(r,this.constraints[e],this.elastic[e])),i.set(r)}resolveConstraints(){const{dragConstraints:e,dragElastic:n}=this.getProps(),s=this.visualElement.projection&&!this.visualElement.projection.layout?this.visualElement.projection.measure(!1):this.visualElement.projection?.layout,o=this.constraints;e&&O(e)?this.constraints||(this.constraints=this.resolveRefConstraints()):e&&s?this.constraints=Zn(s.layoutBox,e):this.constraints=!1,this.elastic=ns(n),o!==this.constraints&&!O(e)&&s&&this.constraints&&!this.hasMutatedConstraints&&I(i=>{this.constraints!==!1&&this.getAxisMotionValue(i)&&(this.constraints[i]=es(s.layoutBox[i],this.constraints[i]))})}resolveRefConstraints(){const{dragConstraints:e,onMeasureDragConstraints:n}=this.getProps();if(!e||!O(e))return!1;const s=e.current,{projection:o}=this.visualElement;if(!o||!o.layout)return!1;const i=je(s,o.root,this.visualElement.getTransformPagePoint());let r=Qn(o.layout.layoutBox,i);if(n){const a=n(Fe(r));this.hasMutatedConstraints=!!a,a&&(r=Oe(a))}return r}startAnimation(e){const{drag:n,dragMomentum:s,dragElastic:o,dragTransition:i,dragSnapToOrigin:r,onDragTransitionEnd:a}=this.getProps(),d=this.constraints||{},f=I(p=>{if(!K(p,n,this.currentDirection))return;let u=d&&d[p]||{};r&&(u={min:0,max:0});const l=o?200:1e6,m=o?40:1e7,h={type:"inertia",velocity:s?e[p]:0,bounceStiffness:l,bounceDamping:m,timeConstant:750,restDelta:1,restSpeed:10,...i,...u};return this.startAxisValueAnimation(p,h)});return Promise.all(f).then(a)}startAxisValueAnimation(e,n){const s=this.getAxisMotionValue(e);return Vt(this.visualElement,e),s.start(Ge(e,s,0,n,this.visualElement,!1))}stopAnimation(){I(e=>this.getAxisMotionValue(e).stop())}getAxisMotionValue(e){const n=`_drag${e.toUpperCase()}`,s=this.visualElement.getProps(),o=s[n];return o||this.visualElement.getValue(e,(s.initial?s.initial[e]:void 0)||0)}snapToCursor(e){I(n=>{const{drag:s}=this.getProps();if(!K(n,s,this.currentDirection))return;const{projection:o}=this.visualElement,i=this.getAxisMotionValue(n);if(o&&o.layout){const{min:r,max:a}=o.layout.layoutBox[n],d=i.get()||0;i.set(e[n]-N(r,a,.5)+d)}})}scalePositionWithinConstraints(){if(!this.visualElement.current)return;const{drag:e,dragConstraints:n}=this.getProps(),{projection:s}=this.visualElement;if(!O(n)||!s||!this.constraints)return;this.stopAnimation();const o={x:0,y:0};I(r=>{const a=this.getAxisMotionValue(r);if(a&&this.constraints!==!1){const d=a.get();o[r]=ts({min:d,max:d},this.constraints[r])}});const{transformTemplate:i}=this.visualElement.getProps();this.visualElement.current.style.transform=i?i({},""):"none",s.root&&s.root.updateScroll(),s.updateLayout(),this.constraints=!1,this.resolveConstraints(),I(r=>{if(!K(r,e,null))return;const a=this.getAxisMotionValue(r),{min:d,max:f}=this.constraints[r];a.set(N(d,f,o[r]))}),this.visualElement.render()}addListeners(){if(!this.visualElement.current)return;ss.set(this.visualElement,this);const e=this.visualElement.current,n=B(e,"pointerdown",f=>{const{drag:p,dragListener:u=!0}=this.getProps(),l=f.target,m=l!==e&&Be(l);p&&u&&!m&&this.start(f)});let s;const o=()=>{const{dragConstraints:f}=this.getProps();O(f)&&f.current&&(this.constraints=this.resolveRefConstraints(),s||(s=is(e,f.current,()=>this.scalePositionWithinConstraints())))},{projection:i}=this.visualElement,r=i.addEventListener("measure",o);i&&!i.layout&&(i.root&&i.root.updateScroll(),i.updateLayout()),D.read(o);const a=Y(window,"resize",()=>this.scalePositionWithinConstraints()),d=i.addEventListener("didUpdate",(({delta:f,hasLayoutChanged:p})=>{this.isDragging&&p&&(I(u=>{const l=this.getAxisMotionValue(u);l&&(this.originPoint[u]+=f[u].translate,l.set(l.get()+f[u].translate))}),this.visualElement.render())}));return()=>{a(),n(),r(),d&&d(),s&&s()}}getProps(){const e=this.visualElement.getProps(),{drag:n=!1,dragDirectionLock:s=!1,dragPropagation:o=!1,dragConstraints:i=!1,dragElastic:r=ct,dragMomentum:a=!0}=e;return{...e,drag:n,dragDirectionLock:s,dragPropagation:o,dragConstraints:i,dragElastic:r,dragMomentum:a}}}function Bt(t){let e=!0;return()=>{if(e){e=!1;return}t()}}function is(t,e,n){const s=Dt(t,Bt(n)),o=Dt(e,Bt(n));return()=>{s(),o()}}function K(t,e,n){return(e===!0||e===t)&&(n===null||n===t)}function rs(t,e=10){let n=null;return Math.abs(t.y)>e?n="y":Math.abs(t.x)>e&&(n="x"),n}class as extends k{constructor(e){super(e),this.removeGroupControls=X,this.removeListeners=X,this.controls=new os(e)}mount(){const{dragControls:e}=this.node.getProps();e&&(this.removeGroupControls=e.subscribe(this.controls)),this.removeListeners=this.controls.addListeners()||X}update(){const{dragControls:e}=this.node.getProps(),{dragControls:n}=this.node.prevProps||{};e!==n&&(this.removeGroupControls(),e&&(this.removeGroupControls=e.subscribe(this.controls)))}unmount(){this.removeGroupControls(),this.removeListeners(),this.controls.isDragging||this.controls.endPanSession()}}const ot=t=>(e,n)=>{t&&D.update(()=>t(e,n),!1,!0)};class us extends k{constructor(){super(...arguments),this.removePointerDownListener=X}onPointerDown(e){this.session=new pe(e,this.createPanHandlers(),{transformPagePoint:this.node.getTransformPagePoint(),contextWindow:me(this.node)})}createPanHandlers(){const{onPanSessionStart:e,onPanStart:n,onPan:s,onPanEnd:o}=this.node.getProps();return{onSessionStart:ot(e),onStart:ot(n),onMove:ot(s),onEnd:(i,r)=>{delete this.session,o&&D.postRender(()=>o(i,r))}}}mount(){this.removePointerDownListener=B(this.node.current,"pointerdown",e=>this.onPointerDown(e))}update(){this.session&&this.session.updateHandlers(this.createPanHandlers())}unmount(){this.removePointerDownListener(),this.session&&this.session.end()}}let it=!1;class ls extends c.Component{componentDidMount(){const{visualElement:e,layoutGroup:n,switchLayoutGroup:s,layoutId:o}=this.props,{projection:i}=e;i&&(n.group&&n.group.add(i),s&&s.register&&o&&s.register(i),it&&i.root.didUpdate(),i.addEventListener("animationComplete",()=>{this.safeToRemove()}),i.setOptions({...i.options,layoutDependency:this.props.layoutDependency,onExitComplete:()=>this.safeToRemove()})),Ue.hasEverUpdated=!0}getSnapshotBeforeUpdate(e){const{layoutDependency:n,visualElement:s,drag:o,isPresent:i}=this.props,{projection:r}=s;return r&&(r.isPresent=i,e.layoutDependency!==n&&r.setOptions({...r.options,layoutDependency:n}),it=!0,o||e.layoutDependency!==n||n===void 0||e.isPresent!==i?r.willUpdate():this.safeToRemove(),e.isPresent!==i&&(i?r.promote():r.relegate()||D.postRender(()=>{const a=r.getStack();(!a||!a.members.length)&&this.safeToRemove()}))),null}componentDidUpdate(){const{projection:e}=this.props.visualElement;e&&(e.root.didUpdate(),Ne.postRender(()=>{!e.currentAnimation&&e.isLead()&&this.safeToRemove()}))}componentWillUnmount(){const{visualElement:e,layoutGroup:n,switchLayoutGroup:s}=this.props,{projection:o}=e;it=!0,o&&(o.scheduleCheckAfterUnmount(),n&&n.group&&n.group.remove(o),s&&s.deregister&&s.deregister(o))}safeToRemove(){const{safeToRemove:e}=this.props;e&&e()}render(){return null}}function ve(t){const[e,n]=ie(),s=c.useContext(ht);return T.jsx(ls,{...t,layoutGroup:s,switchLayoutGroup:c.useContext(he),isPresent:e,safeToRemove:n})}const cs={pan:{Feature:us},drag:{Feature:as,ProjectionNode:Qt,MeasureLayout:ve}};function Nt(t,e,n){const{props:s}=t;t.animationState&&s.whileHover&&t.animationState.setActive("whileHover",n==="Start");const o="onHover"+n,i=s[o];i&&D.postRender(()=>i(e,U(e)))}class fs extends k{mount(){const{current:e}=this.node;e&&(this.unmount=$e(e,(n,s)=>(Nt(this.node,s,"Start"),o=>Nt(this.node,o,"End"))))}unmount(){}}class hs extends k{constructor(){super(...arguments),this.isActive=!1}onFocus(){let e=!1;try{e=this.node.current.matches(":focus-visible")}catch{e=!0}!e||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!0),this.isActive=!0)}onBlur(){!this.isActive||!this.node.animationState||(this.node.animationState.setActive("whileFocus",!1),this.isActive=!1)}mount(){this.unmount=te(Y(this.node.current,"focus",()=>this.onFocus()),Y(this.node.current,"blur",()=>this.onBlur()))}unmount(){}}function Ut(t,e,n){const{props:s}=t;if(t.current instanceof HTMLButtonElement&&t.current.disabled)return;t.animationState&&s.whileTap&&t.animationState.setActive("whileTap",n==="Start");const o="onTap"+(n==="End"?"":n),i=s[o];i&&D.postRender(()=>i(e,U(e)))}class ds extends k{mount(){const{current:e}=this.node;if(!e)return;const{globalTapTarget:n,propagate:s}=this.node.props;this.unmount=ze(e,(o,i)=>(Ut(this.node,i,"Start"),(r,{success:a})=>Ut(this.node,r,a?"End":"Cancel")),{useGlobalTarget:n,stopPropagation:s?.tap===!1})}unmount(){}}const ft=new WeakMap,rt=new WeakMap,ms=t=>{const e=ft.get(t.target);e&&e(t)},ps=t=>{t.forEach(ms)};function gs({root:t,...e}){const n=t||document;rt.has(n)||rt.set(n,{});const s=rt.get(n),o=JSON.stringify(e);return s[o]||(s[o]=new IntersectionObserver(ps,{root:t,...e})),s[o]}function vs(t,e,n){const s=gs(e);return ft.set(t,n),s.observe(t),()=>{ft.delete(t),s.unobserve(t)}}const ys={some:0,all:1};class Ps extends k{constructor(){super(...arguments),this.hasEnteredView=!1,this.isInView=!1}startObserver(){this.unmount();const{viewport:e={}}=this.node.getProps(),{root:n,margin:s,amount:o="some",once:i}=e,r={root:n?n.current:void 0,rootMargin:s,threshold:typeof o=="number"?o:ys[o]},a=d=>{const{isIntersecting:f}=d;if(this.isInView===f||(this.isInView=f,i&&!f&&this.hasEnteredView))return;f&&(this.hasEnteredView=!0),this.node.animationState&&this.node.animationState.setActive("whileInView",f);const{onViewportEnter:p,onViewportLeave:u}=this.node.getProps(),l=f?p:u;l&&l(d)};return vs(this.node.current,r,a)}mount(){this.startObserver()}update(){if(typeof IntersectionObserver>"u")return;const{props:e,prevProps:n}=this.node;["amount","margin","root"].some(xs(e,n))&&this.startObserver()}unmount(){}}function xs({viewport:t={}},{viewport:e={}}={}){return n=>t[n]!==e[n]}const Ss={inView:{Feature:Ps},tap:{Feature:ds},focus:{Feature:hs},hover:{Feature:fs}},ws={layout:{ProjectionNode:Qt,MeasureLayout:ve}},Es={..._n,...Ss,...cs,...ws},Ks=Bn(Es,Nn);function Xs(){!_e.current&&Ke();const[t]=c.useState(Xe.current);return t}function vt(t){return typeof t=="object"&&!Array.isArray(t)}function ye(t,e,n,s){return t==null?[]:typeof t=="string"&&vt(e)?Ye(t,n,s):t instanceof NodeList?Array.from(t):Array.isArray(t)?t.filter(o=>o!=null):[t]}function Cs(t,e,n){return t*(e+1)}function $t(t,e,n,s){return typeof e=="number"?e:e.startsWith("-")||e.startsWith("+")?Math.max(0,t+parseFloat(e)):e==="<"?n:e.startsWith("<")?Math.max(0,n+parseFloat(e.slice(1))):s.get(e)??t}function Ms(t,e,n){for(let s=0;s<t.length;s++){const o=t[s];o.at>e&&o.at<n&&(ne(t,o),s--)}}function As(t,e,n,s,o,i){Ms(t,o,i);for(let r=0;r<e.length;r++)t.push({value:e[r],at:N(o,i,s[r]),easing:ee(n,r)})}function Vs(t,e){for(let n=0;n<t.length;n++)t[n]=t[n]/(e+1)}function Ds(t,e){return t.at===e.at?t.value===null?1:e.value===null?-1:0:t.at-e.at}const bs="easeInOut";function Ls(t,{defaultTransition:e={},...n}={},s,o){const i=e.duration||.3,r=new Map,a=new Map,d={},f=new Map;let p=0,u=0,l=0;for(let m=0;m<t.length;m++){const h=t[m];if(typeof h=="string"){f.set(h,u);continue}else if(!Array.isArray(h)){f.set(h.name,$t(u,h.at,p,f));continue}let[P,v,g={}]=h;g.at!==void 0&&(u=$t(u,g.at,p,f));let y=0;const w=(S,C,A,b=0,E=0)=>{const x=Ts(S),{delay:V=0,times:M=qe(x),type:j=e.type||"keyframes",repeat:F,repeatType:Bs,repeatDelay:Ns=0,...xe}=C;let{ease:R=e.ease||"easeOut",duration:L}=C;const yt=typeof V=="function"?V(b,E):V,Pt=x.length,xt=Qe(j)?j:o?.[j||"keyframes"];if(Pt<=2&&xt){let G=100;if(Pt===2&&ks(x)){const W=x[1]-x[0];G=Math.abs(W)}const $={...e,...xe};L!==void 0&&($.duration=ut(L));const z=Je($,G,xt);R=z.ease,L=z.duration}L??(L=i);const St=u+yt;M.length===1&&M[0]===0&&(M[1]=1);const wt=M.length-x.length;if(wt>0&&Ze(M,wt),x.length===1&&x.unshift(null),F){L=Cs(L,F);const G=[...x],$=[...M];R=Array.isArray(R)?[...R]:[R];const z=[...R];for(let W=0;W<F;W++){x.push(...G);for(let H=0;H<G.length;H++)M.push($[H]+(W+1)),R.push(H===0?"linear":ee(z,H-1))}Vs(M,F)}const Et=St+L;As(A,x,R,M,St,Et),y=Math.max(yt+L,y),l=Math.max(Et,l)};if(Z(P)){const S=zt(P,a);w(v,g,_t("default",S))}else{const S=ye(P,v,s,d),C=S.length;for(let A=0;A<C;A++){v=v,g=g;const b=S[A],E=zt(b,a);for(const x in v)w(v[x],Rs(g,x),_t(x,E),A,C)}}p=u,u+=y}return a.forEach((m,h)=>{for(const P in m){const v=m[P];v.sort(Ds);const g=[],y=[],w=[];for(let b=0;b<v.length;b++){const{at:E,value:x,easing:V}=v[b];g.push(x),y.push(lt(0,l,E)),w.push(V||"easeOut")}y[0]!==0&&(y.unshift(0),g.unshift(g[0]),w.unshift(bs)),y[y.length-1]!==1&&(y.push(1),g.push(null)),r.has(h)||r.set(h,{keyframes:{},transition:{}});const S=r.get(h);S.keyframes[P]=g;const{type:C,...A}=e;S.transition[P]={...A,duration:l,ease:w,times:y,...n}}}),r}function zt(t,e){return!e.has(t)&&e.set(t,{}),e.get(t)}function _t(t,e){return e[t]||(e[t]=[]),e[t]}function Ts(t){return Array.isArray(t)?t:[t]}function Rs(t,e){return t&&t[e]?{...t,...t[e]}:{...t}}const Is=t=>typeof t=="number",ks=t=>t.every(Is);function js(t){const e={presenceContext:null,props:{},visualState:{renderState:{transform:{},transformOrigin:{},style:{},vars:{},attrs:{}},latestValues:{}}},n=tn(t)&&!en(t)?new qt(e):new Jt(e);n.mount(t),q.set(t,n)}function Fs(t){const e={presenceContext:null,props:{},visualState:{renderState:{output:{}},latestValues:{}}},n=new nn(e);n.mount(t),q.set(t,n)}function Os(t,e){return Z(t)||typeof t=="number"||typeof t=="string"&&!vt(e)}function Pe(t,e,n,s){const o=[];if(Os(t,e))o.push(sn(t,vt(e)&&e.default||e,n&&(n.default||n)));else{if(t==null)return o;const i=ye(t,e,s),r=i.length;for(let a=0;a<r;a++){const d=i[a],f=d instanceof Element?js:Fs;q.has(d)||f(d);const p=q.get(d),u={...n};"delay"in u&&typeof u.delay=="function"&&(u.delay=u.delay(a,r)),o.push(...on(p,{...e,transition:u},{}))}}return o}function Gs(t,e,n){const s=[],o=t.map(r=>{if(Array.isArray(r)&&typeof r[0]=="function"){const a=r[0],d=rn(0);return d.on("change",a),r.length===1?[d,[0,1]]:r.length===2?[d,[0,1],r[1]]:[d,r[1],r[2]]}return r});return Ls(o,e,n,{spring:an}).forEach(({keyframes:r,transition:a},d)=>{s.push(...Pe(d,r,a))}),s}function Ws(t){return Array.isArray(t)&&t.some(Array.isArray)}function Hs(t={}){const{scope:e,reduceMotion:n}=t;function s(o,i,r){let a=[],d;if(Ws(o))a=Gs(o,n!==void 0?{reduceMotion:n,...i}:i,e);else{const{onComplete:p,...u}=r||{};typeof p=="function"&&(d=p),a=Pe(o,i,n!==void 0?{reduceMotion:n,...u}:u,e)}const f=new un(a);return d&&f.finished.then(d),e&&(e.animations.push(f),f.finished.then(()=>{ne(e.animations,f)})),f}return s}const Ys=Hs();export{_s as A,ie as a,Ys as b,Ks as m,Xs as u};