vibe64 0.1.39 → 0.1.41

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 (262) hide show
  1. package/bin/run.js +1955 -1855
  2. package/bin/server.js +136 -112
  3. package/bin/upgrade-state.js +5514 -5343
  4. package/dist/assets/GithubBrowserTabs-YvIe2BdE.js +1 -0
  5. package/dist/assets/LocalDatabaseServer-BWAvRlUl.css +1 -0
  6. package/dist/assets/LocalDatabaseServer-CVsGChHh.js +2 -0
  7. package/dist/assets/StudioErrorNotice-C_jbvp9V.js +1 -0
  8. package/dist/assets/VAlert-gwuhYlYb.js +1 -0
  9. package/dist/assets/VAutocomplete-D7Vk5wq_.js +1 -0
  10. package/dist/assets/VAvatar-DvRBcmqv.js +1 -0
  11. package/dist/assets/VBtn-BhVEwXLX.js +1 -0
  12. package/dist/assets/VCard-C3Hx769y.js +1 -0
  13. package/dist/assets/VCheckbox-DyCGSN0H.js +1 -0
  14. package/dist/assets/VCheckboxBtn-DCyuVH7W.css +1 -0
  15. package/dist/assets/VCheckboxBtn-DYcQU2Pn.js +1 -0
  16. package/dist/assets/VChip-VVdtjfq-.js +1 -0
  17. package/dist/assets/VDialog-CQDhjRiV.js +1 -0
  18. package/dist/assets/VDivider-Dq25WsKu.js +1 -0
  19. package/dist/assets/VExpansionPanels-C1y-myl5.js +1 -0
  20. package/dist/assets/VMenu-CDcBLYWR.js +1 -0
  21. package/dist/assets/VOverlay-Cp4rFk6g.js +1 -0
  22. package/dist/assets/VRadioGroup-CAjNZwF7.js +1 -0
  23. package/dist/assets/VRow-BskP28jR.js +1 -0
  24. package/dist/assets/VSelect-D3oLvCcB.js +2 -0
  25. package/dist/assets/VSheet-DxYEFfnM.js +1 -0
  26. package/dist/assets/VSkeletonLoader-Cync3lZZ.js +1 -0
  27. package/dist/assets/VSpacer-CgWOWvBh.js +1 -0
  28. package/dist/assets/VSwitch-BxGuGypi.js +1 -0
  29. package/dist/assets/VTextField-C0b_0cSa.js +1 -0
  30. package/dist/assets/VTextField-F6unyhrS.css +1 -0
  31. package/dist/assets/VTextarea-B7sZd1JY.js +1 -0
  32. package/dist/assets/{Vibe64AsyncModuleState-Do9EqX3S.js → Vibe64AsyncModuleState-syuPcpGx.js} +1 -1
  33. package/dist/assets/{Vibe64AuthSettingsButton-M44SSmZ9.css → Vibe64AuthSettingsButton-D2lltUhi.css} +1 -1
  34. package/dist/assets/Vibe64AuthSettingsButton-DLdfT68V.js +5 -0
  35. package/dist/assets/Vibe64CopyCommand-CYiZcy0d.js +1 -0
  36. package/dist/assets/Vibe64CopyCommand-ClbQLYZi.css +1 -0
  37. package/dist/assets/{Vibe64DashboardBackButton-BH_8j_VR.js → Vibe64DashboardBackButton-Go_MJuIK.js} +1 -1
  38. package/dist/assets/{Vibe64DashboardPageHeader-BXQR00HK.js → Vibe64DashboardPageHeader-BMrdRph6.js} +1 -1
  39. package/dist/assets/Vibe64DashboardPageHeader-CdlzsyKQ.css +1 -0
  40. package/dist/assets/Vibe64DashboardShell-DMPz6fIx.js +1 -0
  41. package/dist/assets/{Vibe64DatabaseWorkspace-CEml9BWn.js → Vibe64DatabaseWorkspace-BCEIOlSg.js} +3 -3
  42. package/dist/assets/{Vibe64DatabaseWorkspace-DPDMxhAW.css → Vibe64DatabaseWorkspace-DePBDUMy.css} +1 -1
  43. package/dist/assets/{Vibe64OutputControls-Co5YzwcK.css → Vibe64OutputControls-CeBzZPUT.css} +1 -1
  44. package/dist/assets/Vibe64OutputControls-DMoqL0VD.js +8 -0
  45. package/dist/assets/{Vibe64RepositoryWorkspace-obZFXkoG.js → Vibe64RepositoryWorkspace-BdwRwbxp.js} +2 -2
  46. package/dist/assets/{Vibe64RepositoryWorkspace-Agyt4O-V.css → Vibe64RepositoryWorkspace-Bw9W691N.css} +1 -1
  47. package/dist/assets/{Vibe64SessionFiles-CQzs6fee.js → Vibe64SessionFiles-ChJWUOqm.js} +4 -4
  48. package/dist/assets/Vibe64SessionFiles-DsPb8hOe.css +1 -0
  49. package/dist/assets/{Vibe64TemporaryAiFixAction-BiuIE9mC.js → Vibe64TemporaryAiFixAction-CIePbdW8.js} +1 -1
  50. package/dist/assets/{Vibe64UiStoryboardView-BhKRpL0N.js → Vibe64UiStoryboardView-Bp9STItF.js} +1 -1
  51. package/dist/assets/{Vibe64UnavailableSessions-Ca5nC7KH.js → Vibe64UnavailableSessions-JBgHzM-j.js} +1 -1
  52. package/dist/assets/{_sessionId_-CKkGH3Rx.js → _sessionId_-Bw0KfJeR.js} +1 -1
  53. package/dist/assets/{_sessionTool_-1V-z6Pbp.js → _sessionTool_-BV1AwpUx.js} +1 -1
  54. package/dist/assets/_slug_-CAmuBm-M.css +1 -0
  55. package/dist/assets/_slug_-q9prK_gX.js +25 -0
  56. package/dist/assets/{access-WlhPvPgy.js → access-C05Nkq6r.js} +1 -1
  57. package/dist/assets/app-D1CGY9Xm.js +1 -0
  58. package/dist/assets/assistantRouting-DeE8jvtE.js +3 -0
  59. package/dist/assets/{changes-CHJjrZAc.js → changes-D17XpgGz.js} +1 -1
  60. package/dist/assets/client-BxGiylrJ.js +2 -0
  61. package/dist/assets/client-C8jwAMY9.css +1 -0
  62. package/dist/assets/{conversation-B90ERX9h.js → conversation-DZW4-Wck.js} +2 -2
  63. package/dist/assets/{conversation-vxJGwmtW.css → conversation-TK6EmDk4.css} +1 -1
  64. package/dist/assets/{createSimpleFunctional-CZTGuNuR.js → createSimpleFunctional-zlXZooQW.js} +1 -1
  65. package/dist/assets/{dashboard-CuutW8iv.js → dashboard-BXXgeQ0Q.js} +1 -1
  66. package/dist/assets/definitions-SNvFDEFS.js +1 -0
  67. package/dist/assets/dialog-transition-D2vqGksQ.js +1 -0
  68. package/dist/assets/env-B5V1EC4M.css +1 -0
  69. package/dist/assets/env-sXAQqKWk.js +1 -0
  70. package/dist/assets/health-92hh8xXh.css +1 -0
  71. package/dist/assets/health-Cr34pf2p.js +1 -0
  72. package/dist/assets/{history-1_NU8azF.js → history-N1iRZaab.js} +1 -1
  73. package/dist/assets/incoming-Bdqo8z25.css +1 -0
  74. package/dist/assets/incoming-CNwZa_yD.js +2 -0
  75. package/dist/assets/{index-irlMYzLh.css → index-B17d4wpZ.css} +1 -1
  76. package/dist/assets/index-Mxalhei8.js +138 -0
  77. package/dist/assets/{integrations-BMzWQQpa.js → integrations-BmwFvHgZ.js} +10 -10
  78. package/dist/assets/integrations-Co8WvCiD.css +1 -0
  79. package/dist/assets/issues-BbiG7dCV.js +1 -0
  80. package/dist/assets/layout-B2Ap07aa.js +1 -0
  81. package/dist/assets/{lazy-NHSwD9FS.js → lazy-BjyT2XvW.js} +1 -1
  82. package/dist/assets/{learning-Bdi3XRS7.js → learning-CUCuuoHM.js} +1 -1
  83. package/dist/assets/mdi-Bt90Ns76.js +1 -0
  84. package/dist/assets/placement-CQy46H3H.js +1 -0
  85. package/dist/assets/publish-4r_4K5IY.js +3 -0
  86. package/dist/assets/publish-BFTsAMCF.css +1 -0
  87. package/dist/assets/pull-requests-BjwokcU0.css +1 -0
  88. package/dist/assets/pull-requests-DY9jg3cE.js +1 -0
  89. package/dist/assets/{repository-BL_2bgzC.js → repository-DhXdoMP6.js} +1 -1
  90. package/dist/assets/ripple-EFNA8EBu.js +11 -0
  91. package/dist/assets/rolldown-runtime-DBalRfVu.js +1 -0
  92. package/dist/assets/{session-BdhKrcX4.js → session-BGpiZThC.js} +1 -1
  93. package/dist/assets/{settings-1rpuL7eR.js → settings-Cj4u-76p.js} +1 -1
  94. package/dist/assets/settings-D8x4KUqV.css +1 -0
  95. package/dist/assets/shared-DZETtWRH.js +2 -0
  96. package/dist/assets/studioGateApi-BXHVBVEc.js +1 -0
  97. package/dist/assets/studioUrls-DpSS-0z1.js +1 -0
  98. package/dist/assets/useArchivedVibe64Sessions-BXNg8oES.js +1 -0
  99. package/dist/assets/useCommand-nWFczmJy.js +1 -0
  100. package/dist/assets/useEndpointResource-Ds8EDBZ2.js +1 -0
  101. package/dist/assets/useRealtimeEvent-DrOiU8lJ.js +1 -0
  102. package/dist/assets/{useUiFeedback-BPBF_0bp.js → useUiFeedback-CMwE4MLs.js} +1 -1
  103. package/dist/assets/useVibe64ConversationLog-C1xjhFtS.js +1 -0
  104. package/dist/assets/{useVibe64DatabaseTools-4o6S8eXq.js → useVibe64DatabaseTools-H6H-YJQX.js} +1 -1
  105. package/dist/assets/useVibe64ProjectScope-B5ogg6jd.js +1 -0
  106. package/dist/assets/useVibe64SessionData-CnDOFFHb.js +1 -0
  107. package/dist/assets/{useVibe64SessionSelection-BzL1y_Vq.js → useVibe64SessionSelection-J87nJ9p5.js} +1 -1
  108. package/dist/assets/{useVibe64SystemGraph-B4RmsC9Y.js → useVibe64SystemGraph-DbSfrYF8.js} +1 -1
  109. package/dist/assets/{useVibe64Terminal-Cg3idMcy.js → useVibe64Terminal-I7Sf6xMW.js} +1 -1
  110. package/dist/assets/vibe64ProjectScope.local-B06ABkhI.js +1 -0
  111. package/dist/assets/vibe64SavedEnvValues-B_QE9aAj.js +1 -0
  112. package/dist/assets/vibe64SessionFocus-CA-sk8Ri.css +1 -0
  113. package/dist/assets/vibe64SessionFocus-DlN8NwcE.js +1 -0
  114. package/dist/assets/{vibe64SessionInfo-BuBUdL-e.js → vibe64SessionInfo-B0uItVOK.js} +1 -1
  115. package/dist/assets/{vibe64SessionToolDefinitions-BJaJH5LR.js → vibe64SessionToolDefinitions-Dsn8WYmO.js} +1 -1
  116. package/dist/index.html +56 -46
  117. package/docs/colleague-usage/account-profile-and-appearance.md +1 -1
  118. package/docs/colleague-usage/{ai-accounts-and-routing.md → ai-accounts.md} +41 -114
  119. package/docs/colleague-usage/ai-model-setups.md +159 -0
  120. package/docs/colleague-usage/ai-onboarding.md +97 -22
  121. package/docs/colleague-usage/ai-personal-use.md +41 -0
  122. package/docs/colleague-usage/auto-workflow.md +8 -3
  123. package/docs/colleague-usage/codex-context-recovery.md +2 -1
  124. package/docs/colleague-usage/coding-agent-goals.md +7 -4
  125. package/docs/colleague-usage/coding-agents.md +8 -5
  126. package/docs/colleague-usage/colleague-watches.md +15 -4
  127. package/docs/colleague-usage/colleague.md +21 -5
  128. package/docs/colleague-usage/connected-contributions.md +13 -13
  129. package/docs/colleague-usage/connected-projects.md +2 -2
  130. package/docs/colleague-usage/conversation-context.md +1 -1
  131. package/docs/colleague-usage/dashboard-navigation.md +5 -3
  132. package/docs/colleague-usage/development-env.md +21 -4
  133. package/docs/colleague-usage/file-interfaces.md +1 -1
  134. package/docs/colleague-usage/github-work.md +8 -8
  135. package/docs/colleague-usage/health-checks.md +52 -18
  136. package/docs/colleague-usage/incoming-changes.md +3 -3
  137. package/docs/colleague-usage/integrations.md +5 -3
  138. package/docs/colleague-usage/learning-course-catalogue.md +3 -3
  139. package/docs/colleague-usage/learning-environment.md +78 -56
  140. package/docs/colleague-usage/learning-mode-ui.md +31 -19
  141. package/docs/colleague-usage/learning-practice-projects.md +15 -4
  142. package/docs/colleague-usage/learning-teacher-guide.md +10 -4
  143. package/docs/colleague-usage/learning-with-colleague.md +12 -8
  144. package/docs/colleague-usage/lesson-authoring.md +13 -13
  145. package/docs/colleague-usage/lesson-step-bar.md +47 -33
  146. package/docs/colleague-usage/main-chat-approvals.md +150 -0
  147. package/docs/colleague-usage/preview-browser-checks.md +5 -1
  148. package/docs/colleague-usage/preview-starting-application.md +10 -1
  149. package/docs/colleague-usage/project-language-tools.md +16 -2
  150. package/docs/colleague-usage/project-settings.md +1 -1
  151. package/docs/colleague-usage/project-setup.md +17 -7
  152. package/docs/colleague-usage/publishing.md +187 -0
  153. package/docs/colleague-usage/running-vibe64-on-your-computer.md +54 -6
  154. package/docs/colleague-usage/sessions.md +18 -10
  155. package/docs/colleague-usage/set-up-linux.md +254 -0
  156. package/docs/colleague-usage/set-up-macos.md +199 -0
  157. package/docs/colleague-usage/set-up-windows.md +76 -0
  158. package/docs/colleague-usage/starter-apps.md +23 -6
  159. package/docs/colleague-usage/teaching-content.md +2 -2
  160. package/docs/colleague-usage/team-ai-access.md +108 -0
  161. package/docs/colleague-usage/temporary-chats.md +9 -7
  162. package/docs/colleague-usage/workspace-preparation.md +50 -1
  163. package/docs/templates/learn-topic/README.md +3 -3
  164. package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.json +2 -1
  165. package/docs/training-content.md +37 -15
  166. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  167. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  168. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  169. package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
  170. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  171. package/node_modules/@jskit-ai/connectors-catalog/patterns/oauth-connection/PATTERN.md +25 -0
  172. package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
  173. package/node_modules/@jskit-ai/http-runtime/package.json +1 -1
  174. package/node_modules/@jskit-ai/kernel/package.json +1 -1
  175. package/node_modules/@jskit-ai/realtime/package.json +1 -1
  176. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  177. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  178. package/node_modules/@jskit-ai/uploads-runtime/package.json +1 -1
  179. package/node_modules/@local/vibe64-accounts/package.json +2 -1
  180. package/node_modules/@local/vibe64-core/package.json +4 -1
  181. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +82 -81
  182. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +83 -82
  183. package/node_modules/@local/vibe64-genesis/package.json +1 -0
  184. package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +118 -68
  185. package/node_modules/@local/vibe64-genesis/src/server/index.js +536 -449
  186. package/node_modules/@local/vibe64-genesis/src/server/packaging.js +105 -0
  187. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +144 -145
  188. package/node_modules/@local/vibe64-packaging/package.json +26 -0
  189. package/node_modules/@local/vibe64-packaging/src/server/packers/capacitor/ShellIcons.java +112 -0
  190. package/node_modules/@local/vibe64-project/package.json +3 -1
  191. package/node_modules/@local/vibe64-publishing/package.json +12 -0
  192. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +7 -7
  193. package/node_modules/@local/vibe64-runtime/src/shared/assistantRoutingScores.json +25 -22
  194. package/node_modules/@local/vibe64-terminals/package.json +2 -1
  195. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1341 -1300
  196. package/node_modules/@local/vibe64-training/package.json +2 -1
  197. package/package.json +19 -15
  198. package/server.bundle.mjs +43109 -41089
  199. package/dist/assets/GithubBrowserTabs-C2NO5l8g.js +0 -1
  200. package/dist/assets/StudioErrorNotice-CSrUw1QV.js +0 -1
  201. package/dist/assets/VAlert-P256xaE0.js +0 -1
  202. package/dist/assets/VAutocomplete-BDb95qJX.js +0 -1
  203. package/dist/assets/VAvatar-DPzqDH4r.js +0 -1
  204. package/dist/assets/VBtn-B2MBK2DL.js +0 -1
  205. package/dist/assets/VCard-mXy0k4aS.js +0 -1
  206. package/dist/assets/VCheckbox-C7A1ZW4D.js +0 -1
  207. package/dist/assets/VChip-CcI-Oo2J.js +0 -1
  208. package/dist/assets/VDialog-Bu3EfKb1.js +0 -1
  209. package/dist/assets/VDivider-BMEqUoAB.js +0 -1
  210. package/dist/assets/VExpansionPanels-Dgjrop0V.js +0 -1
  211. package/dist/assets/VMenu-C_x18lwb.js +0 -1
  212. package/dist/assets/VOverlay-CeMZurIN.js +0 -1
  213. package/dist/assets/VRadioGroup-CUu2-KIP.js +0 -1
  214. package/dist/assets/VRow-Cpw7OHQV.js +0 -1
  215. package/dist/assets/VSelect-DL3HaA5m.js +0 -2
  216. package/dist/assets/VSheet-DZWsu0kL.js +0 -1
  217. package/dist/assets/VSkeletonLoader-CttxM1tw.js +0 -1
  218. package/dist/assets/VSpacer-Dhmsvk4t.js +0 -1
  219. package/dist/assets/VSwitch-BRHeDJkH.js +0 -1
  220. package/dist/assets/VTextField-BR2eZeFT.js +0 -1
  221. package/dist/assets/VTextField-BiatYyd3.css +0 -1
  222. package/dist/assets/VTextarea-DbqamXJd.js +0 -1
  223. package/dist/assets/Vibe64AuthSettingsButton-fY4ZiIFF.js +0 -5
  224. package/dist/assets/Vibe64DashboardPageHeader-Gm1IvlHx.css +0 -1
  225. package/dist/assets/Vibe64DashboardShell-BSq7uXEW.js +0 -1
  226. package/dist/assets/Vibe64OutputControls-_zhGX9ne.js +0 -8
  227. package/dist/assets/Vibe64SessionFiles-Bl8wJ5Sk.css +0 -1
  228. package/dist/assets/_slug_-BclonbST.js +0 -24
  229. package/dist/assets/_slug_-CZ1bxO9C.css +0 -1
  230. package/dist/assets/app-BNP_n_Tt.js +0 -1
  231. package/dist/assets/assistantRouting-D4XpXcEf.js +0 -3
  232. package/dist/assets/client-BWV84wi2.js +0 -2
  233. package/dist/assets/client-DGrP-2AJ.css +0 -1
  234. package/dist/assets/definitions-BrMvu6yV.js +0 -1
  235. package/dist/assets/env-BzRtyO0w.css +0 -1
  236. package/dist/assets/env-D3KQGvRe.js +0 -1
  237. package/dist/assets/health-BJvooRnJ.css +0 -1
  238. package/dist/assets/health-BhoO1d4h.js +0 -1
  239. package/dist/assets/incoming-DWDrmxyH.css +0 -1
  240. package/dist/assets/incoming-DzADFGqp.js +0 -2
  241. package/dist/assets/index-dNxr4Lg9.js +0 -138
  242. package/dist/assets/integrations-Cq1x-Di9.css +0 -1
  243. package/dist/assets/issues-Bywux4s7.js +0 -1
  244. package/dist/assets/mdi-CG9pWOSj.js +0 -1
  245. package/dist/assets/placement-BF-zIEhA.js +0 -1
  246. package/dist/assets/pull-requests-CdbhyFOv.css +0 -1
  247. package/dist/assets/pull-requests-ncmKT3sS.js +0 -1
  248. package/dist/assets/ripple-BVltMmyV.js +0 -11
  249. package/dist/assets/settings-BopLnpB0.css +0 -1
  250. package/dist/assets/shared-DpMvYJO3.js +0 -2
  251. package/dist/assets/studioGateApi-DcCqiD9V.js +0 -1
  252. package/dist/assets/studioUrls-DmMMIScP.js +0 -1
  253. package/dist/assets/useArchivedVibe64Sessions-_LB2XxEa.js +0 -1
  254. package/dist/assets/useCommand-Bqxb-naz.js +0 -1
  255. package/dist/assets/useEndpointResource-DWoQ2keu.js +0 -1
  256. package/dist/assets/useRealtimeEvent-Bwapstla.js +0 -1
  257. package/dist/assets/useVibe64ConversationLog-BqUI0S5n.js +0 -1
  258. package/dist/assets/useVibe64Learning-DyqXkpLw.js +0 -1
  259. package/dist/assets/useVibe64ProjectScope-Bp1ImZlz.js +0 -1
  260. package/dist/assets/useVibe64SessionData-B686lToN.js +0 -1
  261. package/dist/assets/vibe64SessionFocus-CqZNTvYF.js +0 -1
  262. package/dist/assets/vibe64SessionFocus-OJ2toBd9.css +0 -1
@@ -0,0 +1,138 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pages-DuMgH61T.js","assets/runtime-core.esm-bundler-DGXg_mpN.js","assets/useApi-BPuI6ZR9-CFWU1m37.js","assets/route-block-DbL-SuOj.js","assets/app-D1CGY9Xm.js","assets/VBtn-BhVEwXLX.js","assets/ripple-EFNA8EBu.js","assets/rolldown-runtime-DBalRfVu.js","assets/ripple-DqhAt1Ze.css","assets/VBtn-uSpaN2Ha.css","assets/VSkeletonLoader-Cync3lZZ.js","assets/VSkeletonLoader-LCPSxykp.css","assets/_plugin-vue_export-helper-DNW4j-dv.js","assets/StudioErrorNotice-C_jbvp9V.js","assets/VChip-VVdtjfq-.js","assets/VAvatar-DvRBcmqv.js","assets/VAvatar-9ilDR2r2.css","assets/VChip-PprDbmQn.css","assets/mdi-Bt90Ns76.js","assets/VSheet-DxYEFfnM.js","assets/VSheet-BbLSwuzR.css","assets/StudioErrorNotice-1K8E_MXD.css","assets/Vibe64AuthSettingsButton-DLdfT68V.js","assets/VMenu-CDcBLYWR.js","assets/VOverlay-Cp4rFk6g.js","assets/lazy-BjyT2XvW.js","assets/VOverlay-DG-PukqI.css","assets/createSimpleFunctional-zlXZooQW.js","assets/dialog-transition-D2vqGksQ.js","assets/ssrBoot-Rlh6kLbD.js","assets/VDivider-Dq25WsKu.js","assets/VDivider-DvkP_iX7.css","assets/VMenu-D_W8zRGm.css","assets/VTextField-C0b_0cSa.js","assets/VTextField-F6unyhrS.css","assets/vibe64AssistantHost-CP6oxv5b.js","assets/VDialog-CQDhjRiV.js","assets/VDialog-DP-kc9Gx.css","assets/VCard-C3Hx769y.js","assets/VCard-dv-Dc592.css","assets/VSpacer-CgWOWvBh.js","assets/VSpacer-DfbUir7X.css","assets/client-BxGiylrJ.js","assets/useEndpointResource-Ds8EDBZ2.js","assets/vibe64ProjectScope.local-B06ABkhI.js","assets/normalize-CO2KHj_d.js","assets/deepFreeze-BgoYkoTa.js","assets/useRealtimeEvent-DrOiU8lJ.js","assets/VSelect-D3oLvCcB.js","assets/VCheckboxBtn-DYcQU2Pn.js","assets/VCheckboxBtn-DCyuVH7W.css","assets/VSelect-y7fezdfU.css","assets/studioUrls-DpSS-0z1.js","assets/surface-DY1u73tB.js","assets/VAlert-gwuhYlYb.js","assets/VAlert-DVXMoK42.css","assets/VAutocomplete-D7Vk5wq_.js","assets/VAutocomplete-D48FgPMA.css","assets/VCheckbox-DyCGSN0H.js","assets/VCheckbox-ChRKi1kj.css","assets/VRow-BskP28jR.js","assets/VRow-DIr3-SqU.css","assets/VExpansionPanels-C1y-myl5.js","assets/VExpansionPanels-cvCWEkWz.css","assets/VRadioGroup-CAjNZwF7.js","assets/VRadioGroup-C9f4tbih.css","assets/Vibe64CopyCommand-CYiZcy0d.js","assets/clipboard-CZs9aH3L.js","assets/Vibe64CopyCommand-ClbQLYZi.css","assets/VSwitch-BxGuGypi.js","assets/VSwitch-FGoTnWb6.css","assets/useVibe64Terminal-I7Sf6xMW.js","assets/preload-helper-BvdcsxN9.js","assets/browserLocalStorage-B4C7rHrs.js","assets/useVibe64Terminal-Bk2QOSDO.css","assets/shared-DZETtWRH.js","assets/assistantRouting-DeE8jvtE.js","assets/useCommand-nWFczmJy.js","assets/error-Dug56can.js","assets/placement-CwTqWLQH.js","assets/usePaths-Db88-HOm.js","assets/pathname-Bb895US8.js","assets/useUiFeedback-CMwE4MLs.js","assets/shared-BEwrtWSp.js","assets/vibe64ApiResponses-DNLY1Kel.js","assets/studioGateApi-BXHVBVEc.js","assets/client-C8jwAMY9.css","assets/Vibe64AuthSettingsButton-D2lltUhi.css","assets/app-CZu7oxUO.css","assets/learning-CUCuuoHM.js","assets/_slug_-q9prK_gX.js","assets/Vibe64SessionFiles-ChJWUOqm.js","assets/VTextarea-B7sZd1JY.js","assets/VTextarea-DDl63AeD.css","assets/conversation-DZW4-Wck.js","assets/thinkingText-DewCOEcu.js","assets/conversation-TK6EmDk4.css","assets/vibe64BrowserTabOrigin-SF9E31vi.js","assets/useVibe64SystemGraph-DbSfrYF8.js","assets/useVibe64ProjectScope-B5ogg6jd.js","assets/dist-CDa9Iec1.js","assets/vibe64SessionPanelModel-DDorOuiL.js","assets/vibe64SessionViewModel-DR4tOlGM.js","assets/libesm-CR-iGldz.js","assets/Vibe64SessionFiles-DsPb8hOe.css","assets/Vibe64TemporaryAiFixAction-CIePbdW8.js","assets/Vibe64TemporaryAiFixAction-D_mq1dFE.css","assets/Vibe64DashboardBackButton-Go_MJuIK.js","assets/Vibe64DashboardBackButton-DD9UR77P.css","assets/vibe64GithubProject-CdFrbVHp.js","assets/vibe64SessionFocus-DlN8NwcE.js","assets/vibe64SessionFocus-CA-sk8Ri.css","assets/Vibe64AsyncModuleState-syuPcpGx.js","assets/Vibe64AsyncModuleState-CgINkpFP.css","assets/vibe64SessionInfo-B0uItVOK.js","assets/Vibe64DashboardShell-DMPz6fIx.js","assets/placement-CQy46H3H.js","assets/vibe64SessionToolDefinitions-Dsn8WYmO.js","assets/Vibe64DashboardShell-De2mbdpI.css","assets/useVibe64SessionData-CnDOFFHb.js","assets/useVibe64SessionSelection-J87nJ9p5.js","assets/useVibe64ConversationLog-C1xjhFtS.js","assets/definitions-SNvFDEFS.js","assets/Vibe64UnavailableSessions-JBgHzM-j.js","assets/Vibe64UnavailableSessions-CUzfo5Hr.css","assets/vibe64RepositoryRealtime-DXk0Jai3.js","assets/_slug_-CAmuBm-M.css","assets/dashboard-BXXgeQ0Q.js","assets/_sessionTool_-BV1AwpUx.js","assets/_sessionTool_-DiYoi-BF.css","assets/access-C05Nkq6r.js","assets/access-CeQCLDjt.css","assets/changes-D17XpgGz.js","assets/Vibe64RepositoryWorkspace-BdwRwbxp.js","assets/Vibe64DashboardPageHeader-BMrdRph6.js","assets/Vibe64DashboardPageHeader-CdlzsyKQ.css","assets/Vibe64RepositoryWorkspace-Bw9W691N.css","assets/env-sXAQqKWk.js","assets/vibe64SavedEnvValues-B_QE9aAj.js","assets/env-B5V1EC4M.css","assets/health-Cr34pf2p.js","assets/health-92hh8xXh.css","assets/history-N1iRZaab.js","assets/useArchivedVibe64Sessions-BXNg8oES.js","assets/history-BOwbCRQP.css","assets/_sessionId_-Bw0KfJeR.js","assets/_sessionId_-C5Jvmuf5.css","assets/incoming-CNwZa_yD.js","assets/incoming-Bdqo8z25.css","assets/integrations-BmwFvHgZ.js","assets/integrations-Co8WvCiD.css","assets/issues-BbiG7dCV.js","assets/GithubBrowserTabs-YvIe2BdE.js","assets/issues-XnpGgdmn.css","assets/publish-4r_4K5IY.js","assets/publish-BFTsAMCF.css","assets/pull-requests-DY9jg3cE.js","assets/pull-requests-BjwokcU0.css","assets/repository-DhXdoMP6.js","assets/session-BGpiZThC.js","assets/session-5qADMzDP.css","assets/settings-Cj4u-76p.js","assets/settings-D8x4KUqV.css","assets/error-DgrgRbJJ.js","assets/Vibe64DatabaseWorkspace-BCEIOlSg.js","assets/useVibe64DatabaseTools-H6H-YJQX.js","assets/vue-flow-core-BlVEnES8.js","assets/Vibe64DatabaseWorkspace-DePBDUMy.css","assets/LocalDatabaseServer-CVsGChHh.js","assets/LocalDatabaseServer-BWAvRlUl.css","assets/Vibe64UiStoryboardView-Bp9STItF.js","assets/Vibe64UiStoryboardView-3WXph5bz.css"])))=>i.map(i=>d[i]);
2
+ import{r as __exportAll}from"./rolldown-runtime-DBalRfVu.js";import{$ as mergeModels,$n as normalizeProps,B as h$1,Cn as toRaw,D as createVNode,E as createTextVNode,En as toValue,Ft as useModel,H as hasInjectionContext,Ht as watch,J as inject$1,L as getCurrentInstance,Lt as useSlots,Nt as useAttrs,On as unref,Pt as useId,T as createStaticVNode,Ut as watchEffect,Wt as watchPostEffect,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,_n as readonly,an as getCurrentScope,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,ft as onUnmounted,g as computed,gn as reactive,gt as provide,hn as proxyRefs,in as effectScope,it as onBeforeUnmount,k as defineComponent,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick$1,u as Teleport,un as isRef,v as createBlock,vn as ref,w as createSlots,wn as toRef,wt as resolveDynamicComponent,xn as shallowRef,xt as renderSlot,y as createCommentVNode,yn as shallowReactive,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{$ as makeThemeProps,$n as consoleWarn,A as useElevation,B as useTextColor,Bn as isFunction,Cn as pickWithRest,Ct as defineComponent$1,D as makeLocationProps,Dn as wrapInArray,Dt as createDefaults,E as useDensity,En as templateRef,Et as RootDefaultsSymbol,Gn as isString,Gt as EventProp,H as useDimension,Hn as isNullOrUndefined,I as makeRoundedProps,Jt as checkPrintable,K as VFadeTransition,L as useRounded,M as useBorder,Mt as makeComponentProps,N as Intersect,Nt as propsFactory,O as useLocation,On as IN_BROWSER,Ot as injectNestedDefaults,P as MaybeTransition,Q as createTheme,R as useBackgroundColor,S as useVariant,Sn as pick$1,St as deepEqual,T as makeDensityProps,Tn as resolveSize,Tt as DefaultsSymbol,U as VDefaultsProvider,Un as isNumber,Ut as toPhysical,V as makeDimensionProps,W as VExpandTransition,Wn as isObject$1,Wt as CircularBuffer,X as useResizeObserver,Xt as clamp$1,Y as makeTagProps,Yn as range,Yt as chunkArray,Z as ThemeSymbol,Zt as convertToUnit,_ as makeGroupProps,_t as useRender,a as useRouter,ar as vShow,at as makeDisplayProps,b as genOverlays,bn as omit,cn as getActiveElement,ct as createLocale,d as VProgressLinear,dt as useProxiedModel,et as provideTheme,fn as isComposingIgnoreKey,ft as useToggleScope,g as makeGroupItemProps,gn as keys,gt as VSvgIcon,h as VIcon,ht as VClassIcon,it as createDisplay,j as makeBorderProps,k as makeElevationProps,kn as PREFERS_REDUCED_MOTION,kt as provideDefaults,lt as useLocale,mn as isPercentage,mt as IconValue,nn as escapeForRegex,nr as createApp,nt as DisplaySymbol,o as makePositionProps,or as withKeys,ot as useDisplay,pt as IconSymbol,qt as camelizeProps,s as usePosition,sr as withModifiers,st as LocaleSymbol,tn as ensureValidVNode,tr as Transition,tt as useTheme,ut as useRtl,v as useGroup,vn as mergeDeep,wn as refElement,wt as genericComponent,x as makeVariantProps,xn as padStart,xt as standardEasing,y as useGroupItem,yn as noop,zn as isBoolean}from"./ripple-EFNA8EBu.js";import{a as normalizeAdditionalActions,c as normalizeNonNegativeInteger,d as createPinia,f as defineStore,i as normalizeAction,l as normalizeSeverity,n as useShellWebErrorRuntime,o as normalizeChannel,p as storeToRefs,r as createDefaultErrorPolicy,s as normalizeErrorIntent,t as useShellErrorPresentationStore,u as normalizeText$2}from"./error-Dug56can.js";import{A as QueryObserver,B as hashKey,C as AUTH_POLICY_AUTHENTICATED,D as useQuery,E as useMutation,F as notifyManager,G as partialMatchKey,H as matchMutation,I as focusManager,J as useQueryClient,K as resolveQueryValue,L as Subscribable,M as hasNextPage,N as hasPreviousPage,O as useBaseQuery,P as onlineManager,R as environmentManager,S as resolveTextRef,T as ROUTE_VISIBILITY_PUBLIC,U as matchQuery,V as hashQueryKeyByOptions,W as noop$1,X as getClientKey,Y as cloneDeepUnref,a as mergeQueryMeta,b as ROUTE_VISIBILITY_WORKSPACE,i as useRealtimeQueryInvalidation,j as Query,k as Mutation,l as asPlainObject,n as resolveOperationRealtimeOptions,o as mergeRequestRecoveryQueryMeta,q as skipToken,s as toQueryErrorMessage,t as useEndpointResource,w as AUTH_POLICY_PUBLIC,x as resolveEnabledRef,y as resolveResourceMessages,z as functionalUpdate}from"./useEndpointResource-Ds8EDBZ2.js";import{_ as useRouter$1,a as isAbsolutePath,c as isNavigationFailure,d as mergeOptions,f as noop$2,g as useRoute,h as routerViewLocationKey,i as createRouterError,l as isRouteComponent$1,m as routerKey,n as applyToParams,o as isArray,p as routeLocationKey,r as assign,s as isESModule,u as matchedRouteKey,v as viewDepthKey}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{a as normalizeSurfaceId$1,c as normalizePathname$1,i as deriveSurfaceRouteBaseFromPagesRoot,o as normalizeSurfacePagesRoot,r as createSurfaceRegistry,s as createSurfacePathHelpers,t as resolveScopedApiBasePath}from"./surface-DY1u73tB.js";import{_ as resolveLinkPath,a as resolveSurfaceNavigationTargetFromPlacementContext,c as useWebPlacementRuntime,d as normalizePlacementDefinition,f as normalizePlacementTarget,g as isExternalLinkTarget,h as normalizePlacementTopologyDefinition,i as resolveSurfaceIdFromPlacementPathname,m as normalizePlacementLayoutClass,n as readPlacementSurfaceConfig,p as normalizeSurface,r as resolveSurfaceDefinitionFromPlacementContext,s as useWebPlacementContext,t as buildSurfaceConfigContext,u as isRenderableComponent,v as splitPathQueryHash}from"./placement-CwTqWLQH.js";import{A as appendQueryString,C as RECORD_ID_PATTERN,D as buildJsonApiFieldsetsToken,E as createSchema,O as normalizeJsonApiFieldsets,S as encodeJsonApiResourceQueryObject,T as createCursorListValidator,_ as createHttpClient,a as projectSlugFromRoute,c as configureHttpWebClient,d as httpWebClient,f as client_exports$12,h as defineProvider,i as projectSlugFromPathname,j as splitPathQueryAndHash,k as resolveFieldErrors,l as createHttpWebClient,m as createCapabilityRuntime,o as vibe64ProjectQueryScope,p as validateOperationSection,r as projectAppPath,s as vibe64ProjectScopedStorageKey,u as getHttpWebClient,v as shouldRetryTransientQueryFailure,w as validateSchemaPayload,y as transientQueryRetryDelay}from"./vibe64ProjectScope.local-B06ABkhI.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{a as useFilter,c as useScrolling,d as VVirtualScroll,i as makeFilterProps,l as useFocusRepair,n as makeSelectProps,o as useFocusGroups,r as useMenuActivator,s as useSelectionMenu,t as VSelect,u as VHighlight}from"./VSelect-D3oLvCcB.js";import{a as useFocusTrap,d as animate,i as makeFocusTrapProps,l as forwardRefs,n as makeVOverlayProps,o as makeDelayProps,r as useScopeId,s as useDelay,t as VOverlay,u as getScrollParent}from"./VOverlay-Cp4rFk6g.js";import{t as createSimpleFunctional}from"./createSimpleFunctional-zlXZooQW.js";import{a as useItems,i as transformItem,n as VList,o as VListSubheader,s as VListItem,t as VMenu}from"./VMenu-CDcBLYWR.js";import{a as GoToSymbol,i as makeVSlideGroupProps,o as createGoTo,r as VSlideGroup,t as VChip}from"./VChip-VVdtjfq-.js";import{a as useLayout,i as makeLayoutProps,n as createLayout,o as useLayoutItem,r as makeLayoutItemProps,t as VuetifyLayoutKey}from"./layout-B2Ap07aa.js";import{h as useInputIcon,n as makeVTextFieldProps,p as useForm,t as VTextField}from"./VTextField-C0b_0cSa.js";import{a as VIBE64_COLLEAGUE_INTEGRATIONS_KEY,c as VIBE64_COLLEAGUE_PLAN_KEY,f as VIBE64_LEARNING_KEY,i as VIBE64_COLLEAGUE_DATABASE_KEY,l as VIBE64_COLLEAGUE_PREVIEW_KEY,m as VIBE64_PAGE_FOCUS_KEY,n as VIBE64_ASSISTANT_VIEWER_KEY,o as VIBE64_COLLEAGUE_LAUNCHER_KEY,p as VIBE64_PAGE_ACTIVITY_KEY,r as VIBE64_BROWSER_NAVIGATION_KEY,s as VIBE64_COLLEAGUE_LAYOUT_KEY,t as VIBE64_ASSISTANT_HOST_KEY,u as VIBE64_COLLEAGUE_VIEW_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{a as normalizeCanonicalRecordIdText,c as normalizeObject$1,d as normalizeText$3,i as normalizeBoolean,l as normalizePositiveInteger$1,n as isRecord$2,o as normalizeInteger,p as normalizeUniqueTextList,s as normalizeMobileConfig,u as normalizeRecordId}from"./normalize-CO2KHj_d.js";import{t as deepFreeze}from"./deepFreeze-BgoYkoTa.js";import{n as resolveWebSocketUrl$1,t as resolveStudioRequestUrl}from"./studioUrls-DpSS-0z1.js";import{C as mdiArrowRight,Cn as mdiLinkVariant,Dn as mdiLogin,Dr as mdiStop,Dt as mdiEyeOutline,En as mdiLockOutline,Gr as mdiVolumeOff,Hr as mdiViewDashboardOutline,Ht as mdiFolderOutline,J as mdiClipboardListOutline,Jt as mdiHeadset,L as mdiCheck,Mn as mdiMicrophone,Nn as mdiMicrophoneOff,On as mdiLogout,Pn as mdiMinus,Qt as mdiHomeVariantOutline,Rr as mdiTuneVariant,S as mdiArrowLeft,T as mdiArrowTopRight,Ur as mdiViewListOutline,Wr as mdiVolumeHigh,X as mdiClose,Zt as mdiHistory,bt as mdiDeleteOutline,dr as mdiSend,ht as mdiCreditCardOutline,i as mdiAccountGroupOutline,it as mdiCogOutline,jn as mdiMessageTextOutline,lt as mdiConsoleNetworkOutline,mr as mdiShieldCrownOutline,n as mdiAccountCircleOutline,p as mdiAlertOutline,pr as mdiShieldCheckOutline,r as mdiAccountCogOutline,rn as mdiInformationOutline,rt as mdiCog,sr as mdiRobotOutline,ur as mdiSchoolOutline,w as mdiArrowRightCircleOutline,z as mdiCheckCircleOutline}from"./mdi-Bt90Ns76.js";import{n as VBadge,r as VImg,t as VAvatar}from"./VAvatar-DvRBcmqv.js";import{t as useSsrBoot}from"./ssrBoot-Rlh6kLbD.js";import{a as VBtnToggleSymbol,n as makeVBtnProps,r as VProgressCircular,t as VBtn}from"./VBtn-BhVEwXLX.js";import{t as VAlert}from"./VAlert-gwuhYlYb.js";import{t as VAutocomplete}from"./VAutocomplete-D7Vk5wq_.js";import{t as VCheckbox}from"./VCheckbox-DyCGSN0H.js";import{t as VCheckboxBtn}from"./VCheckboxBtn-DYcQU2Pn.js";import{t as VDivider}from"./VDivider-Dq25WsKu.js";import{n as useLazy,t as makeLazyProps}from"./lazy-BjyT2XvW.js";import{n as makeVSheetProps,t as VSheet}from"./VSheet-DxYEFfnM.js";import{n as makeVDialogProps,t as VDialog}from"./VDialog-CQDhjRiV.js";import{a as VCardSubtitle,i as VCardTitle,n as VCardText,o as VCardActions,r as VCardItem,t as VCard}from"./VCard-C3Hx769y.js";import{t as VRow}from"./VRow-BskP28jR.js";import{t as VSpacer}from"./VSpacer-CgWOWvBh.js";import{i as VExpansionPanelText,n as VExpansionPanel,t as VExpansionPanels}from"./VExpansionPanels-C1y-myl5.js";import{C as VForm,S as VIBE64_CONNECTIONS_CHANGED_EVENT,a as _sfc_main$64,c as aiOnboardingNeeded,i as AiOnboardingNudge_default,m as registerVibe64ColleagueModel,o as aiOnboardingAvailable,t as client_exports$13,u as requestVibe64AiOnboarding,x as VIBE64_ACCOUNTS_CHANGED_EVENT}from"./client-BxGiylrJ.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-Cync3lZZ.js";import{n as VTooltip}from"./Vibe64CopyCommand-CYiZcy0d.js";import{t as VSwitch}from"./VSwitch-BxGuGypi.js";import{t as VTextarea}from"./VTextarea-B7sZd1JY.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{_ as parseLongTextReviewBlocks,c as AssistantPromptInput_default,d as numberedQuestionSubmissionText,f as parseNumberedQuestionPrompt,g as LongTextPreviewBlocks_default,h as _sfc_main$65,l as AssistantTranscript_default,n as AssistantConversationElement_default,p as parseAnswerChoicePrompt}from"./conversation-DZW4-Wck.js";import{t as normalizeThinkingMessageText}from"./thinkingText-DewCOEcu.js";import{n as useRealtimeEvent,r as useRealtimeSocket,t as EMPTY_REALTIME_SOCKET}from"./useRealtimeEvent-DrOiU8lJ.js";import{c as createAsyncModuleRecoveryState,d as installAsyncModuleRecoveryHandlers,f as isDynamicImportError,i as useShellAsyncModuleRecoveryRuntime,p as notifyAsyncModuleLoadError,r as SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,u as guardedReloadApp}from"./useVibe64Terminal-I7Sf6xMW.js";import{t as resolveRuntimePathname}from"./pathname-Bb895US8.js";import{n as resolveShellLinkPath,r as useSurfaceRouteContext,t as usePaths}from"./usePaths-Db88-HOm.js";import{l as VIBE64_AGENT_PROVIDERS}from"./shared-DZETtWRH.js";import{d as assistantRoutingFromMetadata}from"./assistantRouting-DeE8jvtE.js";import{a as useOperationScope,c as resolveRouteParamsSource,d as toRouteParamValue,f as useAccess,i as useFieldErrorBag,l as resolveRouteTemplateLocation,n as setupOperationErrorReporting,o as normalizeRouteParamName,p as validateOperationInput,r as setupRouteChangeCleanup,s as resolveRouteParamNamesInOrder,t as useCommand,u as resolveScopedRoutePathname}from"./useCommand-nWFczmJy.js";import{t as useUiFeedback}from"./useUiFeedback-CMwE4MLs.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";import{n as vibe64RealtimeOriginPayload}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{t as useVibe64DatabaseTools}from"./useVibe64DatabaseTools-H6H-YJQX.js";import{t as useVibe64SystemGraph}from"./useVibe64SystemGraph-DbSfrYF8.js";(function polyfill(){const relList=document.createElement(`link`).relList;if(relList&&relList.supports&&relList.supports(`modulepreload`))return;for(const link of document.querySelectorAll(`link[rel="modulepreload"]`))processPreload(link);new MutationObserver(mutations=>{for(const mutation of mutations){if(mutation.type!==`childList`)continue;for(const node of mutation.addedNodes)if(node.tagName===`LINK`&&node.rel===`modulepreload`)processPreload(node)}}).observe(document,{childList:true,subtree:true});function getFetchOpts(link){const fetchOpts={};if(link.integrity)fetchOpts.integrity=link.integrity;if(link.referrerPolicy)fetchOpts.referrerPolicy=link.referrerPolicy;if(link.crossOrigin===`use-credentials`)fetchOpts.credentials=`include`;else if(link.crossOrigin===`anonymous`)fetchOpts.credentials=`omit`;else fetchOpts.credentials=`same-origin`;return fetchOpts}function processPreload(link){if(link.ep)return;link.ep=true;const fetchOpts=getFetchOpts(link);fetch(link.href,fetchOpts)}})();var InfiniteQueryObserver=class extends QueryObserver{constructor(client,options){super(client,options)}bindMethods(){super.bindMethods();this.fetchNextPage=this.fetchNextPage.bind(this);this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(options){options._type=`infinite`;super.setOptions(options)}getOptimisticResult(options){options._type=`infinite`;return super.getOptimisticResult(options)}fetchNextPage(options){return this.fetch({...options,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(options){return this.fetch({...options,meta:{fetchMore:{direction:`backward`}}})}createResult(query,options){const{state}=query;const parentResult=super.createResult(query,options);const{isFetching,isRefetching,isError,isRefetchError}=parentResult;const fetchDirection=state.fetchMeta?.fetchMore?.direction;const isFetchNextPageError=isError&&fetchDirection===`forward`;const isFetchingNextPage=isFetching&&fetchDirection===`forward`;const isFetchPreviousPageError=isError&&fetchDirection===`backward`;const isFetchingPreviousPage=isFetching&&fetchDirection===`backward`;return{...parentResult,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:hasNextPage(options,state.data),hasPreviousPage:hasPreviousPage(options,state.data),isFetchNextPageError,isFetchingNextPage,isFetchPreviousPageError,isFetchingPreviousPage,isRefetchError:isRefetchError&&!isFetchNextPageError&&!isFetchPreviousPageError,isRefetching:isRefetching&&!isFetchingNextPage&&!isFetchingPreviousPage}}};var MutationCache$1=class extends Subscribable{#mutations;#scopes;#mutationId;constructor(config={}){super();this.config=config;this.#mutations=new Set;this.#scopes=new Map;this.#mutationId=0}build(client,options,state){const mutation=new Mutation({client,mutationCache:this,mutationId:++this.#mutationId,options:client.defaultMutationOptions(options),state});this.add(mutation);return mutation}add(mutation){this.#mutations.add(mutation);const scope=scopeFor(mutation);if(typeof scope===`string`){const scopedMutations=this.#scopes.get(scope);if(scopedMutations)scopedMutations.push(mutation);else this.#scopes.set(scope,[mutation])}this.notify({type:`added`,mutation})}remove(mutation){if(this.#mutations.delete(mutation)){const scope=scopeFor(mutation);if(typeof scope===`string`){const scopedMutations=this.#scopes.get(scope);if(scopedMutations){if(scopedMutations.length>1){const index=scopedMutations.indexOf(mutation);if(index!==-1)scopedMutations.splice(index,1)}else if(scopedMutations[0]===mutation)this.#scopes.delete(scope)}}}this.notify({type:`removed`,mutation})}canRun(mutation){const scope=scopeFor(mutation);if(typeof scope===`string`){const firstPendingMutation=this.#scopes.get(scope)?.find(m=>m.state.status===`pending`);return!firstPendingMutation||firstPendingMutation===mutation}else return true}runNext(mutation){const scope=scopeFor(mutation);if(typeof scope===`string`)return(this.#scopes.get(scope)?.find(m=>m!==mutation&&m.state.isPaused))?.continue()??Promise.resolve();else return Promise.resolve()}clear(){notifyManager.batch(()=>{this.#mutations.forEach(mutation=>{this.notify({type:`removed`,mutation})});this.#mutations.clear();this.#scopes.clear()})}getAll(){return Array.from(this.#mutations)}find(filters){const defaultedFilters={exact:true,...filters};return this.getAll().find(mutation=>matchMutation(defaultedFilters,mutation))}findAll(filters={}){return this.getAll().filter(mutation=>matchMutation(filters,mutation))}notify(event){notifyManager.batch(()=>{this.listeners.forEach(listener=>{listener(event)})})}resumePausedMutations(){const pausedMutations=this.getAll().filter(x=>x.state.isPaused);return notifyManager.batch(()=>Promise.all(pausedMutations.map(mutation=>mutation.continue().catch(noop$1))))}};function scopeFor(mutation){return mutation.options.scope?.id}var QueryCache$1=class extends Subscribable{#queries;constructor(config={}){super();this.config=config;this.#queries=new Map}build(client,options,state){const queryKey=options.queryKey;const queryHash=options.queryHash??hashQueryKeyByOptions(queryKey,options);let query=this.get(queryHash);if(!query){query=new Query({client,queryKey,queryHash,options:client.defaultQueryOptions(options),state,defaultOptions:client.getQueryDefaults(queryKey)});this.add(query)}return query}add(query){if(!this.#queries.has(query.queryHash)){this.#queries.set(query.queryHash,query);this.notify({type:`added`,query})}}remove(query){const queryInMap=this.#queries.get(query.queryHash);if(queryInMap){query.destroy();if(queryInMap===query)this.#queries.delete(query.queryHash);this.notify({type:`removed`,query})}}clear(){notifyManager.batch(()=>{this.getAll().forEach(query=>{this.remove(query)})})}get(queryHash){return this.#queries.get(queryHash)}getAll(){return[...this.#queries.values()]}find(filters){const defaultedFilters={exact:true,...filters};return this.getAll().find(query=>matchQuery(defaultedFilters,query))}findAll(filters={}){const queries=this.getAll();return Object.keys(filters).length>0?queries.filter(query=>matchQuery(filters,query)):queries}notify(event){notifyManager.batch(()=>{this.listeners.forEach(listener=>{listener(event)})})}onFocus(){notifyManager.batch(()=>{this.getAll().forEach(query=>{query.onFocus()})})}onOnline(){notifyManager.batch(()=>{this.getAll().forEach(query=>{query.onOnline()})})}};var QueryClient$1=class{#queryCache;#mutationCache;#defaultOptions;#queryDefaults;#mutationDefaults;#mountCount;#unsubscribeFocus;#unsubscribeOnline;constructor(config={}){this.#queryCache=config.queryCache||new QueryCache$1;this.#mutationCache=config.mutationCache||new MutationCache$1;this.#defaultOptions=config.defaultOptions||{};this.#queryDefaults=new Map;this.#mutationDefaults=new Map;this.#mountCount=0}mount(){this.#mountCount++;if(this.#mountCount!==1)return;this.#unsubscribeFocus=focusManager.subscribe(async focused=>{if(focused){await this.resumePausedMutations();this.#queryCache.onFocus()}});this.#unsubscribeOnline=onlineManager.subscribe(async online=>{if(online){await this.resumePausedMutations();this.#queryCache.onOnline()}})}unmount(){this.#mountCount--;if(this.#mountCount!==0)return;this.#unsubscribeFocus?.();this.#unsubscribeFocus=void 0;this.#unsubscribeOnline?.();this.#unsubscribeOnline=void 0}isFetching(filters){return this.#queryCache.findAll({...filters,fetchStatus:`fetching`}).length}isMutating(filters){return this.#mutationCache.findAll({...filters,status:`pending`}).length}getQueryData(queryKey){const options=this.defaultQueryOptions({queryKey});return this.#queryCache.get(options.queryHash)?.state.data}ensureQueryData(options){const defaultedOptions=this.defaultQueryOptions(options);const query=this.#queryCache.build(this,defaultedOptions);const cachedData=query.state.data;if(cachedData===void 0)return this.fetchQuery(options);if(options.revalidateIfStale&&query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime,query)))this.prefetchQuery(defaultedOptions);return Promise.resolve(cachedData)}getQueriesData(filters){return this.#queryCache.findAll(filters).map(({queryKey,state})=>{return[queryKey,state.data]})}setQueryData(queryKey,updater,options){const defaultedOptions=this.defaultQueryOptions({queryKey});const prevData=this.#queryCache.get(defaultedOptions.queryHash)?.state.data;const data=functionalUpdate(updater,prevData);if(data===void 0)return;return this.#queryCache.build(this,defaultedOptions).setData(data,{...options,manual:true})}setQueriesData(filters,updater,options){return notifyManager.batch(()=>this.#queryCache.findAll(filters).map(({queryKey})=>[queryKey,this.setQueryData(queryKey,updater,options)]))}getQueryState(queryKey){const options=this.defaultQueryOptions({queryKey});return this.#queryCache.get(options.queryHash)?.state}removeQueries(filters){const queryCache=this.#queryCache;notifyManager.batch(()=>{queryCache.findAll(filters).forEach(query=>{queryCache.remove(query)})})}resetQueries(filters,options){const queryCache=this.#queryCache;return notifyManager.batch(()=>{const matched=queryCache.findAll(filters);const queriesToRefetch=new Set(matched);matched.forEach(query=>{query.reset()});return this.refetchQueries({type:`active`,predicate:query=>queriesToRefetch.has(query)},options)})}cancelQueries(filters,cancelOptions={}){const defaultedCancelOptions={revert:true,...cancelOptions};const promises=notifyManager.batch(()=>this.#queryCache.findAll(filters).map(query=>query.cancel(defaultedCancelOptions)));return Promise.all(promises).then(noop$1).catch(noop$1)}invalidateQueries(filters,options={}){return notifyManager.batch(()=>{this.#queryCache.findAll(filters).forEach(query=>{query.invalidate()});if(filters?.refetchType===`none`)return Promise.resolve();return this.refetchQueries({...filters,type:filters?.refetchType??filters?.type??`active`},options)})}refetchQueries(filters,options={}){const fetchOptions={...options,cancelRefetch:options.cancelRefetch??true};const promises=notifyManager.batch(()=>this.#queryCache.findAll(filters).filter(query=>!query.isDisabled()&&!query.isStatic()).map(query=>{let promise=query.fetch(void 0,fetchOptions);if(!fetchOptions.throwOnError)promise=promise.catch(noop$1);return query.state.fetchStatus===`paused`?Promise.resolve():promise}));return Promise.all(promises).then(noop$1)}async query(options){const defaultedOptions=this.defaultQueryOptions(options);if(defaultedOptions.retry===void 0)defaultedOptions.retry=false;const query=this.#queryCache.build(this,defaultedOptions);const queryData=query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime,query))?await query.fetch(defaultedOptions):query.state.data;const select=defaultedOptions.select;if(select)return select(queryData);return queryData}fetchQuery(options){const defaultedOptions=this.defaultQueryOptions(options);if(defaultedOptions.retry===void 0)defaultedOptions.retry=false;const query=this.#queryCache.build(this,defaultedOptions);return query.isStaleByTime(resolveQueryValue(defaultedOptions.staleTime,query))?query.fetch(defaultedOptions):Promise.resolve(query.state.data)}prefetchQuery(options){return this.fetchQuery(options).then(noop$1).catch(noop$1)}infiniteQuery(options){options._type=`infinite`;return this.query(options)}fetchInfiniteQuery(options){options._type=`infinite`;return this.fetchQuery(options)}prefetchInfiniteQuery(options){return this.fetchInfiniteQuery(options).then(noop$1).catch(noop$1)}ensureInfiniteQueryData(options){options._type=`infinite`;return this.ensureQueryData(options)}resumePausedMutations(){if(onlineManager.isOnline())return this.#mutationCache.resumePausedMutations();return Promise.resolve()}getQueryCache(){return this.#queryCache}getMutationCache(){return this.#mutationCache}getDefaultOptions(){return this.#defaultOptions}setDefaultOptions(options){this.#defaultOptions=options}setQueryDefaults(queryKey,options){this.#queryDefaults.set(hashKey(queryKey),{queryKey,defaultOptions:options})}getQueryDefaults(queryKey){const defaults=[...this.#queryDefaults.values()];const result={};defaults.forEach(queryDefault=>{if(partialMatchKey(queryKey,queryDefault.queryKey))Object.assign(result,queryDefault.defaultOptions)});return result}setMutationDefaults(mutationKey,options){this.#mutationDefaults.set(hashKey(mutationKey),{mutationKey,defaultOptions:options})}getMutationDefaults(mutationKey){const defaults=[...this.#mutationDefaults.values()];const result={};defaults.forEach(queryDefault=>{if(partialMatchKey(mutationKey,queryDefault.mutationKey))Object.assign(result,queryDefault.defaultOptions)});return result}defaultQueryOptions(options){if(options._defaulted)return options;const defaultedOptions={...this.#defaultOptions.queries,...this.getQueryDefaults(options.queryKey),...options,_defaulted:true};if(!defaultedOptions.queryHash)defaultedOptions.queryHash=hashQueryKeyByOptions(defaultedOptions.queryKey,defaultedOptions);if(defaultedOptions.refetchOnReconnect===void 0)defaultedOptions.refetchOnReconnect=defaultedOptions.networkMode!==`always`;if(defaultedOptions.throwOnError===void 0)defaultedOptions.throwOnError=!!defaultedOptions.suspense;if(!defaultedOptions.networkMode&&defaultedOptions.persister)defaultedOptions.networkMode=`offlineFirst`;if(defaultedOptions.queryFn===skipToken)defaultedOptions.enabled=false;return defaultedOptions}defaultMutationOptions(options){if(options?._defaulted)return options;return{...this.#defaultOptions.mutations,...options?.mutationKey&&this.getMutationDefaults(options.mutationKey),...options,_defaulted:true}}clear(){this.#queryCache.clear();this.#mutationCache.clear()}};var QueryCache=class extends QueryCache$1{find(filters){return super.find(cloneDeepUnref(filters))}findAll(filters={}){return super.findAll(cloneDeepUnref(filters))}};var MutationCache=class extends MutationCache$1{find(filters){return super.find(cloneDeepUnref(filters))}findAll(filters={}){return super.findAll(cloneDeepUnref(filters))}};var QueryClient=class extends QueryClient$1{constructor(config={}){const vueQueryConfig={defaultOptions:config.defaultOptions,queryCache:config.queryCache||new QueryCache,mutationCache:config.mutationCache||new MutationCache};super(vueQueryConfig);this.isRestoring=ref(false)}isFetching(filters={}){return super.isFetching(cloneDeepUnref(filters))}isMutating(filters={}){return super.isMutating(cloneDeepUnref(filters))}getQueryData(queryKey){return super.getQueryData(cloneDeepUnref(queryKey))}ensureQueryData(options){return super.ensureQueryData(cloneDeepUnref(options))}getQueriesData(filters){return super.getQueriesData(cloneDeepUnref(filters))}setQueryData(queryKey,updater,options={}){return super.setQueryData(cloneDeepUnref(queryKey),updater,cloneDeepUnref(options))}setQueriesData(filters,updater,options={}){return super.setQueriesData(cloneDeepUnref(filters),updater,cloneDeepUnref(options))}getQueryState(queryKey){return super.getQueryState(cloneDeepUnref(queryKey))}removeQueries(filters={}){return super.removeQueries(cloneDeepUnref(filters))}resetQueries(filters={},options={}){return super.resetQueries(cloneDeepUnref(filters),cloneDeepUnref(options))}cancelQueries(filters={},options={}){return super.cancelQueries(cloneDeepUnref(filters),cloneDeepUnref(options))}invalidateQueries(filters={},options={}){const filtersCloned=cloneDeepUnref(filters);const optionsCloned=cloneDeepUnref(options);super.invalidateQueries({...filtersCloned,refetchType:`none`},optionsCloned);if(filtersCloned.refetchType===`none`)return Promise.resolve();const refetchFilters={...filtersCloned,type:filtersCloned.refetchType??filtersCloned.type??`active`};return nextTick$1().then(()=>{return super.refetchQueries(refetchFilters,optionsCloned)})}refetchQueries(filters={},options={}){return super.refetchQueries(cloneDeepUnref(filters),cloneDeepUnref(options))}query(options){return super.query(cloneDeepUnref(options))}fetchQuery(options){return super.fetchQuery(cloneDeepUnref(options))}prefetchQuery(options){return super.prefetchQuery(cloneDeepUnref(options))}infiniteQuery(options){return super.infiniteQuery(cloneDeepUnref(options))}fetchInfiniteQuery(options){return super.fetchInfiniteQuery(cloneDeepUnref(options))}prefetchInfiniteQuery(options){return super.prefetchInfiniteQuery(cloneDeepUnref(options))}setDefaultOptions(options){super.setDefaultOptions(cloneDeepUnref(options))}setQueryDefaults(queryKey,options){super.setQueryDefaults(cloneDeepUnref(queryKey),cloneDeepUnref(options))}getQueryDefaults(queryKey){return super.getQueryDefaults(cloneDeepUnref(queryKey))}setMutationDefaults(mutationKey,options){super.setMutationDefaults(cloneDeepUnref(mutationKey),cloneDeepUnref(options))}getMutationDefaults(mutationKey){return super.getMutationDefaults(cloneDeepUnref(mutationKey))}};var VueQueryPlugin={install:(app,options={})=>{const clientKey=getClientKey(options.queryClientKey);let client;if(`queryClient`in options&&options.queryClient)client=options.queryClient;else{const clientConfig=`queryClientConfig`in options?options.queryClientConfig:void 0;client=new QueryClient(clientConfig)}if(!environmentManager.isServer())client.mount();let persisterUnmount=()=>{};if(options.clientPersister){if(client.isRestoring)client.isRestoring.value=true;const[unmount,promise]=options.clientPersister(client);persisterUnmount=unmount;promise.then(()=>{if(client.isRestoring)client.isRestoring.value=false;options.clientPersisterOnSuccess?.(client)})}const cleanup=()=>{client.unmount();persisterUnmount()};if(app.onUnmount)app.onUnmount(cleanup);else{const originalUnmount=app.unmount;app.unmount=function vueQueryUnmount(){cleanup();originalUnmount()}}if(false)app.mixin({beforeCreate(){if(!this._provided){const provideCache={};Object.defineProperty(this,"_provided",{get:()=>provideCache,set:v=>Object.assign(provideCache,v)})}this._provided[clientKey]=client}});else app.provide(clientKey,client)}};function useInfiniteQuery(options,queryClient){return useBaseQuery(InfiniteQueryObserver,options,queryClient)}var isBrowser=typeof document!==`undefined`;var HASH_RE=/#/g;var AMPERSAND_RE=/&/g;var SLASH_RE=/\//g;var EQUAL_RE=/=/g;var IM_RE=/\?/g;var PLUS_RE=/\+/g;var ENC_BRACKET_OPEN_RE=/%5B/g;var ENC_BRACKET_CLOSE_RE=/%5D/g;var ENC_CARET_RE=/%5E/g;var ENC_BACKTICK_RE=/%60/g;var ENC_CURLY_OPEN_RE=/%7B/g;var ENC_PIPE_RE=/%7C/g;var ENC_CURLY_CLOSE_RE=/%7D/g;var ENC_SPACE_RE=/%20/g;function commonEncode(text){return text==null?``:encodeURI(``+text).replace(ENC_PIPE_RE,`|`).replace(ENC_BRACKET_OPEN_RE,`[`).replace(ENC_BRACKET_CLOSE_RE,`]`)}function encodeHash(text){return commonEncode(text).replace(ENC_CURLY_OPEN_RE,`{`).replace(ENC_CURLY_CLOSE_RE,`}`).replace(ENC_CARET_RE,`^`)}function encodeQueryValue(text){return commonEncode(text).replace(PLUS_RE,`%2B`).replace(ENC_SPACE_RE,`+`).replace(HASH_RE,`%23`).replace(AMPERSAND_RE,`%26`).replace(ENC_BACKTICK_RE,"`").replace(ENC_CURLY_OPEN_RE,`{`).replace(ENC_CURLY_CLOSE_RE,`}`).replace(ENC_CARET_RE,`^`)}function encodeQueryKey(text){return encodeQueryValue(text).replace(EQUAL_RE,`%3D`)}function encodePath(text){return commonEncode(text).replace(HASH_RE,`%23`).replace(IM_RE,`%3F`)}function encodeParam(text){return encodePath(text).replace(SLASH_RE,`%2F`)}function decode$2(text){if(text==null)return null;try{return decodeURIComponent(``+text)}catch{}return``+text}var TRAILING_SLASH_RE=/\/$/;var removeTrailingSlash=path=>path.replace(TRAILING_SLASH_RE,``);function parseURL(parseQuery,location,currentLocation=`/`){let path,query={},searchString=``,hash=``;const hashPos=location.indexOf(`#`);let searchPos=location.indexOf(`?`);searchPos=hashPos>=0&&searchPos>hashPos?-1:searchPos;if(searchPos>=0){path=location.slice(0,searchPos);searchString=location.slice(searchPos,hashPos>0?hashPos:location.length);query=parseQuery(searchString.slice(1))}if(hashPos>=0){path=path||location.slice(0,hashPos);hash=location.slice(hashPos,location.length)}path=resolveRelativePath(path!=null?path:location,currentLocation);return{fullPath:path+searchString+hash,path,query,hash:decode$2(hash)}}function stringifyURL(stringifyQuery,location){const query=location.query?stringifyQuery(location.query):``;return location.path+(query&&`?`)+query+(location.hash||``)}function stripBase(pathname,base){if(!base||!pathname.toLowerCase().startsWith(base.toLowerCase()))return pathname;return pathname.slice(base.length)||`/`}function isSameRouteLocation(stringifyQuery,a,b){const aLastIndex=a.matched.length-1;const bLastIndex=b.matched.length-1;return aLastIndex>-1&&aLastIndex===bLastIndex&&isSameRouteRecord(a.matched[aLastIndex],b.matched[bLastIndex])&&isSameRouteLocationParams(a.params,b.params)&&stringifyQuery(a.query)===stringifyQuery(b.query)&&a.hash===b.hash}function isSameRouteRecord(a,b){return(a.aliasOf||a)===(b.aliasOf||b)}function isSameRouteLocationParams(a,b){if(Object.keys(a).length!==Object.keys(b).length)return false;for(var key in a)if(!isSameRouteLocationParamsValue(a[key],b[key]))return false;return true}function isSameRouteLocationParamsValue(a,b){return isArray(a)?isEquivalentArray(a,b):isArray(b)?isEquivalentArray(b,a):(a&&a.valueOf())===(b&&b.valueOf())}function isEquivalentArray(a,b){return isArray(b)?a.length===b.length&&a.every((value,i)=>value===b[i]):a.length===1&&a[0]===b}function resolveRelativePath(to,from){if(isAbsolutePath(to))return to;if(!to)return from;const fromSegments=from.split(`/`);const toSegments=to.split(`/`);const lastToSegment=toSegments[toSegments.length-1];if(lastToSegment===`..`||lastToSegment===`.`)toSegments.push(``);let position=fromSegments.length-1;let toPosition;let segment;for(toPosition=0;toPosition<toSegments.length;toPosition++){segment=toSegments[toPosition];if(segment===`.`)continue;if(segment===`..`){if(position>1)position--}else break}return fromSegments.slice(0,position).join(`/`)+`/`+toSegments.slice(toPosition).join(`/`)}var START_LOCATION_NORMALIZED={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0};function normalizeBase(base){if(!base){if(isBrowser){const baseEl=document.querySelector(`base`);base=baseEl&&baseEl.getAttribute(`href`)||`/`;base=base.replace(/^\w+:\/\/[^/]+/,``)}else base=`/`}if(base[0]!==`/`&&base[0]!==`#`)base=`/`+base;return removeTrailingSlash(base)}var BEFORE_HASH_RE=/^[^#]+#/;function createHref(base,location){return base.replace(BEFORE_HASH_RE,`#`)+location}function getElementPosition(el,offset){const docRect=document.documentElement.getBoundingClientRect();const elRect=el.getBoundingClientRect();return{behavior:offset.behavior,left:elRect.left-docRect.left-(offset.left||0),top:elRect.top-docRect.top-(offset.top||0)}}var computeScrollPosition=()=>history.scrollRestoration===`manual`?{left:window.scrollX,top:window.scrollY}:null;function scrollToPosition(position){let scrollToOptions;if(`el`in position){const positionEl=position.el;const isIdSelector=typeof positionEl===`string`&&positionEl.startsWith(`#`);const el=typeof positionEl===`string`?isIdSelector?document.getElementById(positionEl.slice(1)):document.querySelector(positionEl):positionEl;if(!el)return;scrollToOptions=getElementPosition(el,position)}else scrollToOptions=position;if(`scrollBehavior`in document.documentElement.style)window.scrollTo(scrollToOptions);else window.scrollTo(scrollToOptions.left!=null?scrollToOptions.left:window.scrollX,scrollToOptions.top!=null?scrollToOptions.top:window.scrollY)}function getScrollKey(path,delta){return(history.state?history.state.position-delta:-1)+path}var scrollPositions=new Map;function saveScrollPosition(key){scrollPositions.set(key,computeScrollPosition())}function getSavedScrollPosition(key){const scroll=scrollPositions.get(key);scrollPositions.delete(key);return scroll}function isRouteLocation(route){return typeof route===`string`||route&&typeof route===`object`}function isRouteName(name){return typeof name===`string`||typeof name===`symbol`}function parseQuery(search){const query={};if(search===``||search===`?`)return query;const searchParams=(search[0]===`?`?search.slice(1):search).split(`&`);for(let i=0;i<searchParams.length;++i){const searchParam=searchParams[i].replace(PLUS_RE,` `);const eqPos=searchParam.indexOf(`=`);const key=decode$2(eqPos<0?searchParam:searchParam.slice(0,eqPos));const value=eqPos<0?null:decode$2(searchParam.slice(eqPos+1));if(key in query){let currentValue=query[key];if(!isArray(currentValue))currentValue=query[key]=[currentValue];currentValue.push(value)}else query[key]=value}return query}function stringifyQuery(query){let search=``;for(let key in query){const value=query[key];key=encodeQueryKey(key);if(value==null){if(value!==void 0)search+=(search.length?`&`:``)+key;continue}(isArray(value)?value.map(v=>v&&encodeQueryValue(v)):[value&&encodeQueryValue(value)]).forEach(value=>{if(value!==void 0){search+=(search.length?`&`:``)+key;if(value!=null)search+=`=`+value}})}return search}function normalizeQuery(query){const normalizedQuery={};for(const key in query){const value=query[key];if(value!==void 0)normalizedQuery[key]=isArray(value)?value.map(v=>v==null?null:``+v):value==null?value:``+value}return normalizedQuery}function useCallbacks(){let handlers=[];function add(handler){handlers.push(handler);return()=>{const i=handlers.indexOf(handler);if(i>-1)handlers.splice(i,1)}}function reset(){handlers=[]}return{add,list:()=>handlers.slice(),reset}}function guardToPromiseFn(guard,to,from,record,name,runWithContext=fn=>fn()){const enterCallbackArray=record&&(record.enterCallbacks[name]=record.enterCallbacks[name]||[]);return()=>new Promise((resolve,reject)=>{const next=valid=>{if(valid===false)reject(createRouterError(4,{from,to}));else if(valid instanceof Error)reject(valid);else if(isRouteLocation(valid))reject(createRouterError(2,{from:to,to:valid}));else{if(enterCallbackArray&&record.enterCallbacks[name]===enterCallbackArray&&typeof valid===`function`)enterCallbackArray.push(valid);resolve()}};const guardReturn=runWithContext(()=>guard.call(record&&record.instances[name],to,from,next));let guardCall=Promise.resolve(guardReturn);if(guard.length<3)guardCall=guardCall.then(next);guardCall.catch(err=>reject(err))})}function extractComponentsGuards(matched,guardType,to,from,runWithContext=fn=>fn()){const guards=[];for(const record of matched)for(const name in record.components){let rawComponent=record.components[name];if(guardType!==`beforeRouteEnter`&&!record.instances[name])continue;if(isRouteComponent$1(rawComponent)){const guard=(rawComponent.__vccOpts||rawComponent)[guardType];guard&&guards.push(guardToPromiseFn(guard,to,from,record,name,runWithContext))}else{let componentPromise=rawComponent();guards.push(()=>componentPromise.then(resolved=>{if(!resolved)throw new Error(`Couldn't resolve component "${name}" at "${record.path}"`);const resolvedComponent=isESModule(resolved)?resolved.default:resolved;record.mods[name]=resolved;record.components[name]=resolvedComponent;const guard=(resolvedComponent.__vccOpts||resolvedComponent)[guardType];return guard&&guardToPromiseFn(guard,to,from,record,name,runWithContext)()}))}}return guards}function extractChangingRecords(to,from){const leavingRecords=[];const updatingRecords=[];const enteringRecords=[];const len=Math.max(from.matched.length,to.matched.length);for(let i=0;i<len;i++){const recordFrom=from.matched[i];if(recordFrom){if(to.matched.find(record=>isSameRouteRecord(record,recordFrom)))updatingRecords.push(recordFrom);else leavingRecords.push(recordFrom)}const recordTo=to.matched[i];if(recordTo){if(!from.matched.find(record=>isSameRouteRecord(record,recordTo)))enteringRecords.push(recordTo)}}return[leavingRecords,updatingRecords,enteringRecords]}var createBaseLocation=()=>location.protocol+`//`+location.host;function createCurrentLocation(base,location){const{pathname,search,hash}=location;const hashPos=base.indexOf(`#`);if(hashPos>-1){let slicePos=hash.includes(base.slice(hashPos))?base.slice(hashPos).length:1;let pathFromHash=hash.slice(slicePos);if(pathFromHash[0]!==`/`)pathFromHash=`/`+pathFromHash;return stripBase(pathFromHash,``)}return stripBase(pathname,base)+search+hash}function useHistoryListeners(base,historyState,currentLocation,replace){let listeners=[];let teardowns=[];let pauseState=null;const popStateHandler=({state})=>{const to=createCurrentLocation(base,location);const from=currentLocation.value;const fromState=historyState.value;let delta=0;if(state){currentLocation.value=to;historyState.value=state;if(pauseState&&pauseState===from){pauseState=null;return}delta=fromState?state.position-fromState.position:0}else replace(to);listeners.forEach(listener=>{listener(currentLocation.value,from,{delta,type:`pop`,direction:delta?delta>0?`forward`:`back`:``})})};function pauseListeners(){pauseState=currentLocation.value}function listen(callback){listeners.push(callback);const teardown=()=>{const index=listeners.indexOf(callback);if(index>-1)listeners.splice(index,1)};teardowns.push(teardown);return teardown}function beforeUnloadListener(){const{history}=window;if(!history.state)return;history.replaceState(assign({},history.state,{scroll:computeScrollPosition()}),``)}function destroy(){for(const teardown of teardowns)teardown();teardowns=[];window.removeEventListener(`popstate`,popStateHandler);window.removeEventListener(`pagehide`,beforeUnloadListener)}window.addEventListener(`popstate`,popStateHandler);window.addEventListener(`pagehide`,beforeUnloadListener);return{pauseListeners,listen,destroy}}function buildState(back,current,forward,replaced=false){return{back,current,forward,replaced,position:window.history.length,scroll:null}}function useHistoryStateNavigation(base){const{history,location}=window;const currentLocation={value:createCurrentLocation(base,location)};const historyState={value:history.state};if(!historyState.value)changeLocation(currentLocation.value,{back:null,current:currentLocation.value,forward:null,position:history.length-1,replaced:true,scroll:null},true);function changeLocation(to,state,replace){const hashIndex=base.indexOf(`#`);const url=hashIndex>-1?(location.host&&document.querySelector(`base`)?base:base.slice(hashIndex))+to:createBaseLocation()+base+to;try{history[replace?`replaceState`:`pushState`](state,``,url);historyState.value=state}catch(err){console.error(err);location[replace?`replace`:`assign`](url)}}function replace(to,data){changeLocation(to,assign({},history.state,buildState(historyState.value.back,to,historyState.value.forward,true),data,{position:historyState.value.position}),true);currentLocation.value=to}function push(to,data){const currentState=assign({},historyState.value,history.state,{forward:to,scroll:computeScrollPosition()});changeLocation(currentState.current,currentState,true);changeLocation(to,assign({},buildState(currentLocation.value,to,null),{position:currentState.position+1},data),false);currentLocation.value=to}return{location:currentLocation,state:historyState,push,replace}}function createWebHistory(base){base=normalizeBase(base);const historyNavigation=useHistoryStateNavigation(base);const historyListeners=useHistoryListeners(base,historyNavigation.state,historyNavigation.location,historyNavigation.replace);function go(delta,triggerListeners=true){if(!triggerListeners)historyListeners.pauseListeners();history.go(delta)}const routerHistory=assign({location:``,base,go,createHref:createHref.bind(null,base)},historyNavigation,historyListeners);Object.defineProperty(routerHistory,"location",{enumerable:true,get:()=>historyNavigation.location.value});Object.defineProperty(routerHistory,"state",{enumerable:true,get:()=>historyNavigation.state.value});return routerHistory}var ROOT_TOKEN={type:0,value:``};var VALID_PARAM_RE=/[a-zA-Z0-9_]/;function tokenizePath(path){if(!path)return[[]];if(path===`/`)return[[ROOT_TOKEN]];if(!isAbsolutePath(path))throw new Error(`Invalid path "${path}"`);function crash(message){throw new Error(`ERR (${state})/"${buffer}": ${message}`)}let state=0;let previousState=state;const tokens=[];let segment;function finalizeSegment(){if(segment)tokens.push(segment);segment=[]}let i=0;let char;let buffer=``;let customRe=``;function consumeBuffer(){if(!buffer)return;if(state===0)segment.push({type:0,value:buffer});else if(state===1||state===2||state===3){if(segment.length>1&&(char===`*`||char===`+`))crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);segment.push({type:1,value:buffer,regexp:customRe,repeatable:char===`*`||char===`+`,optional:char===`*`||char===`?`})}else crash(`Invalid state to consume buffer`);buffer=``}function addCharToBuffer(){buffer+=char}while(i<path.length){char=path[i++];switch(state){case 0:if(char===`\\`){previousState=state;state=4}else if(char===`/`){if(buffer)consumeBuffer();finalizeSegment()}else if(char===`:`){consumeBuffer();state=1}else addCharToBuffer();break;case 4:addCharToBuffer();state=previousState;break;case 1:if(char===`(`)state=2;else if(VALID_PARAM_RE.test(char))addCharToBuffer();else{consumeBuffer();state=0;if(char!==`*`&&char!==`?`&&char!==`+`)i--}break;case 2:if(char===`)`){if(customRe[customRe.length-1]==`\\`)customRe=customRe.slice(0,-1)+char;else state=3}else customRe+=char;break;case 3:consumeBuffer();state=0;if(char!==`*`&&char!==`?`&&char!==`+`)i--;customRe=``;break;default:crash(`Unknown state`)}}if(state===2)crash(`Unfinished custom RegExp for param "${buffer}"`);consumeBuffer();finalizeSegment();return tokens}var BASE_PARAM_PATTERN=`[^/]+?`;var BASE_PATH_PARSER_OPTIONS={sensitive:false,strict:false,start:true,end:true};var REGEX_CHARS_RE=/[.+*?^${}()[\]/\\]/g;function tokensToParser(segments,extraOptions){const options=assign({},BASE_PATH_PARSER_OPTIONS,extraOptions);const score=[];let pattern=options.start?`^`:``;const keys=[];for(const segment of segments){const segmentScores=segment.length?[]:[90];if(options.strict&&!segment.length)pattern+=`/`;for(let tokenIndex=0;tokenIndex<segment.length;tokenIndex++){const token=segment[tokenIndex];let subSegmentScore=40+(options.sensitive?.25:0);if(token.type===0){if(!tokenIndex)pattern+=`/`;pattern+=token.value.replace(REGEX_CHARS_RE,`\\$&`);subSegmentScore+=40}else if(token.type===1){const{value,repeatable,optional,regexp}=token;keys.push({name:value,repeatable,optional});const re=regexp?regexp:BASE_PARAM_PATTERN;if(re!==BASE_PARAM_PATTERN){subSegmentScore+=10;try{new RegExp(`(${re})`)}catch(err){throw new Error(`Invalid custom RegExp for param "${value}" (${re}): `+err.message)}}let subPattern=repeatable?`((?:${re})(?:/(?:${re}))*)`:`(${re})`;if(!tokenIndex)subPattern=optional&&segment.length<2?`(?:/${subPattern})`:`/`+subPattern;if(optional)subPattern+=`?`;pattern+=subPattern;subSegmentScore+=20;if(optional)subSegmentScore+=-8;if(repeatable)subSegmentScore+=-20;if(re===`.*`)subSegmentScore+=-50}segmentScores.push(subSegmentScore)}score.push(segmentScores)}if(options.strict&&options.end){const i=score.length-1;score[i][score[i].length-1]+=.7000000000000001}if(!options.strict)pattern+=`/?`;if(options.end)pattern+=`$`;else if(options.strict&&!pattern.endsWith(`/`))pattern+=`(?:/|$)`;const re=new RegExp(pattern,options.sensitive?``:`i`);function parse(path){const match=path.match(re);const params={};if(!match)return null;for(let i=1;i<match.length;i++){const value=match[i]||``;const key=keys[i-1];params[key.name]=value&&key.repeatable?value.split(`/`):value}return params}function stringify(params){let path=``;let avoidDuplicatedSlash=false;for(const segment of segments){if(!avoidDuplicatedSlash||!path.endsWith(`/`))path+=`/`;avoidDuplicatedSlash=false;for(const token of segment)if(token.type===0)path+=token.value;else if(token.type===1){const{value,repeatable,optional}=token;const param=value in params?params[value]:``;if(isArray(param)&&!repeatable)throw new Error(`Provided param "${value}" is an array but it is not repeatable (* or + modifiers)`);const text=isArray(param)?param.join(`/`):param;if(!text){if(optional){if(segment.length<2){if(path.endsWith(`/`))path=path.slice(0,-1);else avoidDuplicatedSlash=true}}else throw new Error(`Missing required param "${value}"`)}path+=text}}return path||`/`}return{re,score,keys,parse,stringify}}function compareScoreArray(a,b){let i=0;while(i<a.length&&i<b.length){const diff=b[i]-a[i];if(diff)return diff;i++}if(a.length<b.length)return a.length===1&&a[0]===80?-1:1;else if(a.length>b.length)return b.length===1&&b[0]===80?1:-1;return 0}function comparePathParserScore(a,b){let i=0;const aScore=a.score;const bScore=b.score;while(i<aScore.length&&i<bScore.length){const comp=compareScoreArray(aScore[i],bScore[i]);if(comp)return comp;i++}if(Math.abs(bScore.length-aScore.length)===1){if(isLastScoreNegative(aScore))return 1;if(isLastScoreNegative(bScore))return-1}return bScore.length-aScore.length}function isLastScoreNegative(score){const last=score[score.length-1];return score.length>0&&last[last.length-1]<0}var PATH_PARSER_OPTIONS_DEFAULTS={strict:false,end:true,sensitive:false};function createRouteRecordMatcher(record,parent,options){const parser=tokensToParser(tokenizePath(record.path),options);const matcher=assign(parser,{record,parent,children:[],alias:[]});if(parent){if(!matcher.record.aliasOf===!parent.record.aliasOf)parent.children.push(matcher)}return matcher}function createRouterMatcher(routes,globalOptions){const matchers=[];const matcherMap=new Map;globalOptions=mergeOptions(PATH_PARSER_OPTIONS_DEFAULTS,globalOptions);function getRecordMatcher(name){return matcherMap.get(name)}function addRoute(record,parent,originalRecord){const isRootAdd=!originalRecord;const mainNormalizedRecord=normalizeRouteRecord(record);mainNormalizedRecord.aliasOf=originalRecord&&originalRecord.record;const options=mergeOptions(globalOptions,record);const normalizedRecords=[mainNormalizedRecord];if(`alias`in record){const aliases=typeof record.alias===`string`?[record.alias]:record.alias;for(const alias of aliases)normalizedRecords.push(normalizeRouteRecord(assign({},mainNormalizedRecord,{components:originalRecord?originalRecord.record.components:mainNormalizedRecord.components,path:alias,aliasOf:originalRecord?originalRecord.record:mainNormalizedRecord})))}let matcher;let originalMatcher;for(const normalizedRecord of normalizedRecords){const{path}=normalizedRecord;if(parent&&!isAbsolutePath(path)){const parentPath=parent.record.path;const connectingSlash=parentPath[parentPath.length-1]===`/`?``:`/`;normalizedRecord.path=parent.record.path+(path&&connectingSlash+path)}matcher=createRouteRecordMatcher(normalizedRecord,parent,options);if(originalRecord)originalRecord.alias.push(matcher);else{originalMatcher=originalMatcher||matcher;if(originalMatcher!==matcher)originalMatcher.alias.push(matcher);if(isRootAdd&&record.name&&!isAliasRecord(matcher))removeRoute(record.name)}if(isMatchable(matcher))insertMatcher(matcher);if(mainNormalizedRecord.children){const children=mainNormalizedRecord.children;for(let i=0;i<children.length;i++)addRoute(children[i],matcher,originalRecord&&originalRecord.children[i])}originalRecord=originalRecord||matcher}return originalMatcher?()=>{removeRoute(originalMatcher)}:noop$2}function removeRoute(matcherRef){if(isRouteName(matcherRef)){const matcher=matcherMap.get(matcherRef);if(matcher){matcherMap.delete(matcherRef);matchers.splice(matchers.indexOf(matcher),1);matcher.children.forEach(removeRoute);matcher.alias.forEach(removeRoute)}}else{const index=matchers.indexOf(matcherRef);if(index>-1){matchers.splice(index,1);if(matcherRef.record.name)matcherMap.delete(matcherRef.record.name);matcherRef.children.forEach(removeRoute);matcherRef.alias.forEach(removeRoute)}}}function getRoutes(){return matchers}function insertMatcher(matcher){const index=findInsertionIndex(matcher,matchers);matchers.splice(index,0,matcher);if(matcher.record.name&&!isAliasRecord(matcher))matcherMap.set(matcher.record.name,matcher)}function resolve(location,currentLocation){let matcher;let params={};let path;let name;if(`name`in location&&location.name){matcher=matcherMap.get(location.name);if(!matcher)throw createRouterError(1,{location});name=matcher.record.name;params=assign(pickParams(currentLocation.params,matcher.keys.filter(k=>!k.optional).concat(matcher.parent?matcher.parent.keys.filter(k=>k.optional):[]).map(k=>k.name)),location.params&&pickParams(location.params,matcher.keys.map(k=>k.name)));path=matcher.stringify(params)}else if(location.path!=null){path=location.path;matcher=matchers.find(m=>m.re.test(path));if(matcher){params=matcher.parse(path);name=matcher.record.name;matcher.keys.forEach(key=>{if(key.optional&&!params[key.name])delete params[key.name]})}}else{matcher=currentLocation.name?matcherMap.get(currentLocation.name):matchers.find(m=>m.re.test(currentLocation.path));if(!matcher)throw createRouterError(1,{location,currentLocation});name=matcher.record.name;params=assign({},currentLocation.params,location.params);path=matcher.stringify(params)}const matched=[];let parentMatcher=matcher;while(parentMatcher){matched.unshift(parentMatcher.record);parentMatcher=parentMatcher.parent}return{name,path,params,matched,meta:mergeMetaFields(matched)}}routes.forEach(route=>addRoute(route));function clearRoutes(){matchers.length=0;matcherMap.clear()}return{addRoute,resolve,removeRoute,clearRoutes,getRoutes,getRecordMatcher}}function pickParams(params,keys){const newParams={};for(const key of keys)if(key in params)newParams[key]=params[key];return newParams}function normalizeRouteRecord(record){const normalized={path:record.path,redirect:record.redirect,name:record.name,meta:record.meta||{},aliasOf:record.aliasOf,beforeEnter:record.beforeEnter,props:normalizeRecordProps(record),children:record.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in record?record.components||null:record.component&&{default:record.component}};Object.defineProperty(normalized,"mods",{value:{}});return normalized}function normalizeRecordProps(record){const propsObject={};const props=record.props||false;if(`component`in record)propsObject.default=props;else for(const name in record.components)propsObject[name]=typeof props===`object`?props[name]:props;return propsObject}function isAliasRecord(record){while(record){if(record.record.aliasOf)return true;record=record.parent}return false}function mergeMetaFields(matched){return matched.reduce((meta,record)=>assign(meta,record.meta),{})}function findInsertionIndex(matcher,matchers){let lower=0;let upper=matchers.length;while(lower!==upper){const mid=lower+upper>>1;if(comparePathParserScore(matcher,matchers[mid])<0)upper=mid;else lower=mid+1}const insertionAncestor=getInsertionAncestor(matcher);if(insertionAncestor)upper=matchers.lastIndexOf(insertionAncestor,upper-1);return upper}function getInsertionAncestor(matcher){let ancestor=matcher;while(ancestor=ancestor.parent)if(isMatchable(ancestor)&&comparePathParserScore(matcher,ancestor)===0)return ancestor}function isMatchable({record}){return!!(record.name||record.components&&Object.keys(record.components).length||record.redirect)}function useLink(props){const router=inject$1(routerKey);const currentRoute=inject$1(routeLocationKey);const route=computed(()=>{const to=unref(props.to);return router.resolve(to)});const activeRecordIndex=computed(()=>{const{matched}=route.value;const{length}=matched;const routeMatched=matched[length-1];const currentMatched=currentRoute.matched;if(!routeMatched||!currentMatched.length)return-1;const index=currentMatched.findIndex(isSameRouteRecord.bind(null,routeMatched));if(index>-1)return index;const parentRecordPath=getOriginalPath(matched[length-2]);return length>1&&getOriginalPath(routeMatched)===parentRecordPath&&currentMatched[currentMatched.length-1].path!==parentRecordPath?currentMatched.findIndex(isSameRouteRecord.bind(null,matched[length-2])):index});const isActive=computed(()=>activeRecordIndex.value>-1&&includesParams(currentRoute.params,route.value.params));const isExactActive=computed(()=>activeRecordIndex.value>-1&&activeRecordIndex.value===currentRoute.matched.length-1&&isSameRouteLocationParams(currentRoute.params,route.value.params));function navigate(e={}){if(guardEvent(e)){const p=router[unref(props.replace)?`replace`:`push`](unref(props.to)).catch(noop$2);if(props.viewTransition&&typeof document!==`undefined`&&`startViewTransition`in document)document.startViewTransition(()=>p);return p}return Promise.resolve()}return{route,href:computed(()=>route.value.href),isActive,isExactActive,navigate}}function preferSingleVNode(vnodes){return vnodes.length===1?vnodes[0]:vnodes}var RouterLink=defineComponent({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:true},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink,setup(props,{slots}){const link=reactive(useLink(props));const{options}=inject$1(routerKey);const elClass=computed(()=>({[getLinkClass(props.activeClass,options.linkActiveClass,`router-link-active`)]:link.isActive,[getLinkClass(props.exactActiveClass,options.linkExactActiveClass,`router-link-exact-active`)]:link.isExactActive}));return()=>{const children=slots.default&&preferSingleVNode(slots.default(link));return props.custom?children:h$1(`a`,{"aria-current":link.isExactActive?props.ariaCurrentValue:null,href:link.href,onClick:link.navigate,class:elClass.value},children)}}});function guardEvent(e){if(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)return;if(e.defaultPrevented)return;if(e.button!==void 0&&e.button!==0)return;if(e.currentTarget&&e.currentTarget.getAttribute){const target=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(target))return}if(e.preventDefault)e.preventDefault();return true}function includesParams(outer,inner){for(const key in inner){const innerValue=inner[key];const outerValue=outer[key];if(isArray(innerValue)){if(!isArray(outerValue)||outerValue.length!==innerValue.length||innerValue.some((value,i)=>value.valueOf()!==outerValue[i].valueOf()))return false}else if(innerValue!==outerValue)return false}return true}function getOriginalPath(record){return record?record.aliasOf?record.aliasOf.path:record.path:``}var getLinkClass=(propClass,globalClass,defaultClass)=>propClass!=null?propClass:globalClass!=null?globalClass:defaultClass;var RouterViewImpl=defineComponent({name:`RouterView`,inheritAttrs:false,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(props,{attrs,slots}){const injectedRoute=inject$1(routerViewLocationKey);const routeToDisplay=computed(()=>props.route||injectedRoute.value);const injectedDepth=inject$1(viewDepthKey,0);const depth=computed(()=>{let initialDepth=unref(injectedDepth);const{matched}=routeToDisplay.value;let matchedRoute;while((matchedRoute=matched[initialDepth])&&!matchedRoute.components)initialDepth++;return initialDepth});const matchedRouteRef=computed(()=>routeToDisplay.value.matched[depth.value]);provide(viewDepthKey,computed(()=>depth.value+1));provide(matchedRouteKey,matchedRouteRef);provide(routerViewLocationKey,routeToDisplay);const viewRef=ref();watch(()=>[viewRef.value,matchedRouteRef.value,props.name],([instance,to,name],[oldInstance,from,_oldName])=>{if(to){to.instances[name]=instance;if(from&&from!==to&&instance&&instance===oldInstance){if(!to.leaveGuards.size)to.leaveGuards=from.leaveGuards;if(!to.updateGuards.size)to.updateGuards=from.updateGuards}}if(instance&&to&&(!from||!isSameRouteRecord(to,from)||!oldInstance))(to.enterCallbacks[name]||[]).forEach(callback=>callback(instance))},{flush:`post`});return()=>{const route=routeToDisplay.value;const currentName=props.name;const matchedRoute=matchedRouteRef.value;const ViewComponent=matchedRoute&&matchedRoute.components[currentName];if(!ViewComponent)return normalizeSlot(slots.default,{Component:ViewComponent,route});const routePropsOption=matchedRoute.props[currentName];const routeProps=routePropsOption?routePropsOption===true?route.params:typeof routePropsOption===`function`?routePropsOption(route):routePropsOption:null;const onVnodeUnmounted=vnode=>{if(vnode.component.isUnmounted)matchedRoute.instances[currentName]=null};const component=h$1(ViewComponent,assign({},routeProps,attrs,{onVnodeUnmounted,ref:viewRef}));return normalizeSlot(slots.default,{Component:component,route})||component}}});function normalizeSlot(slot,data){if(!slot)return null;const slotContent=slot(data);return slotContent.length===1?slotContent[0]:slotContent}var RouterView=RouterViewImpl;function createRouter(options){const matcher=createRouterMatcher(options.routes,options);const parseQuery$1=options.parseQuery||parseQuery;const stringifyQuery$1=options.stringifyQuery||stringifyQuery;const routerHistory=options.history;const beforeGuards=useCallbacks();const beforeResolveGuards=useCallbacks();const afterGuards=useCallbacks();const currentRoute=shallowRef(START_LOCATION_NORMALIZED);const routesVersion=shallowRef(0);let pendingLocation=START_LOCATION_NORMALIZED;if(isBrowser&&options.scrollBehavior&&`scrollRestoration`in history)history.scrollRestoration=`manual`;const normalizeParams=applyToParams.bind(null,paramValue=>``+paramValue);const encodeParams=applyToParams.bind(null,encodeParam);const decodeParams=applyToParams.bind(null,decode$2);function addRoute(parentOrRoute,route){let parent;let record;if(isRouteName(parentOrRoute)){parent=matcher.getRecordMatcher(parentOrRoute);record=route}else record=parentOrRoute;const removeRoute=matcher.addRoute(record,parent);routesVersion.value++;return()=>{removeRoute();routesVersion.value++}}function removeRoute(name){const recordMatcher=matcher.getRecordMatcher(name);if(recordMatcher){matcher.removeRoute(recordMatcher);routesVersion.value++}}function clearRoutes(){matcher.clearRoutes();routesVersion.value++}function getRoutes(){return matcher.getRoutes().map(routeMatcher=>routeMatcher.record)}function hasRoute(name){return!!matcher.getRecordMatcher(name)}function resolve(rawLocation,currentLocation){routesVersion.value;if(typeof rawLocation===`string`){currentLocation=currentLocation||(rawLocation.startsWith(`/`)?START_LOCATION_NORMALIZED:currentRoute.value);const locationNormalized=parseURL(parseQuery$1,rawLocation,currentLocation.path);const matchedRoute=matcher.resolve({path:locationNormalized.path},currentLocation);const href=routerHistory.createHref(locationNormalized.fullPath);return assign(locationNormalized,matchedRoute,{params:decodeParams(matchedRoute.params),redirectedFrom:void 0,href})}currentLocation=assign({},currentLocation||(rawLocation.path!=null&&rawLocation.path.startsWith(`/`)&&!(`name`in rawLocation&&rawLocation.name)?START_LOCATION_NORMALIZED:currentRoute.value));let matcherLocation;if(rawLocation.path!=null)matcherLocation=assign({},rawLocation,{path:parseURL(parseQuery$1,rawLocation.path,currentLocation.path).path});else{const targetParams=assign({},rawLocation.params);for(const key in targetParams)if(targetParams[key]==null)delete targetParams[key];matcherLocation=assign({},rawLocation,{params:encodeParams(targetParams)});currentLocation.params=encodeParams(currentLocation.params)}const matchedRoute=matcher.resolve(matcherLocation,currentLocation);const hash=rawLocation.hash||``;matchedRoute.params=normalizeParams(decodeParams(matchedRoute.params));const fullPath=stringifyURL(stringifyQuery$1,assign({},rawLocation,{hash:encodeHash(hash),path:matchedRoute.path}));const href=routerHistory.createHref(fullPath);return assign({fullPath,hash,query:stringifyQuery$1===stringifyQuery?normalizeQuery(rawLocation.query):rawLocation.query||{}},matchedRoute,{redirectedFrom:void 0,href})}function locationAsObject(to){return typeof to===`string`?parseURL(parseQuery$1,to,currentRoute.value.path):assign({},to)}function checkCanceledNavigation(to,from){if(pendingLocation!==to)return createRouterError(8,{from,to})}function push(to){return pushWithRedirect(to)}function replace(to){return push(assign(locationAsObject(to),{replace:true}))}function handleRedirectRecord(to,from){const lastMatched=to.matched[to.matched.length-1];if(lastMatched&&lastMatched.redirect){const{redirect}=lastMatched;let newTargetLocation=typeof redirect===`function`?redirect(to,from):redirect;if(typeof newTargetLocation===`string`){newTargetLocation=newTargetLocation.includes(`?`)||newTargetLocation.includes(`#`)?newTargetLocation=locationAsObject(newTargetLocation):{path:newTargetLocation};newTargetLocation.params={}}return assign({query:to.query,hash:to.hash,params:newTargetLocation.path!=null?{}:to.params},newTargetLocation)}}function pushWithRedirect(to,redirectedFrom){const targetLocation=pendingLocation=resolve(to);const from=currentRoute.value;const data=to.state;const force=to.force;const replace=to.replace===true;const shouldRedirect=handleRedirectRecord(targetLocation,from);if(shouldRedirect)return pushWithRedirect(assign(locationAsObject(shouldRedirect),{state:typeof shouldRedirect===`object`?assign({},data,shouldRedirect.state):data,force,replace}),redirectedFrom||targetLocation);const toLocation=targetLocation;toLocation.redirectedFrom=redirectedFrom;let failure;if(!force&&isSameRouteLocation(stringifyQuery$1,from,targetLocation)){failure=createRouterError(16,{to:toLocation,from});handleScroll(from,from,true,false)}return(failure?Promise.resolve(failure):navigate(toLocation,from)).catch(error=>isNavigationFailure(error)?isNavigationFailure(error,2)?error:markAsReady(error):triggerError(error,toLocation,from)).then(failure=>{if(failure){if(isNavigationFailure(failure,2))return pushWithRedirect(assign({replace},locationAsObject(failure.to),{state:typeof failure.to===`object`?assign({},data,failure.to.state):data,force}),redirectedFrom||toLocation)}else failure=finalizeNavigation(toLocation,from,true,replace,data);triggerAfterEach(toLocation,from,failure);return failure})}function checkCanceledNavigationAndReject(to,from){const error=checkCanceledNavigation(to,from);return error?Promise.reject(error):Promise.resolve()}function runWithContext(fn){const app=installedApps.values().next().value;return app&&typeof app.runWithContext===`function`?app.runWithContext(fn):fn()}function navigate(to,from){let guards;const[leavingRecords,updatingRecords,enteringRecords]=extractChangingRecords(to,from);guards=extractComponentsGuards(leavingRecords.reverse(),`beforeRouteLeave`,to,from);for(const record of leavingRecords)record.leaveGuards.forEach(guard=>{guards.push(guardToPromiseFn(guard,to,from))});const canceledNavigationCheck=checkCanceledNavigationAndReject.bind(null,to,from);guards.push(canceledNavigationCheck);return runGuardQueue(guards).then(()=>{guards=[];for(const guard of beforeGuards.list())guards.push(guardToPromiseFn(guard,to,from));guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{guards=extractComponentsGuards(updatingRecords,`beforeRouteUpdate`,to,from);for(const record of updatingRecords)record.updateGuards.forEach(guard=>{guards.push(guardToPromiseFn(guard,to,from))});guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{guards=[];for(const record of enteringRecords)if(record.beforeEnter){if(isArray(record.beforeEnter))for(const beforeEnter of record.beforeEnter)guards.push(guardToPromiseFn(beforeEnter,to,from));else guards.push(guardToPromiseFn(record.beforeEnter,to,from))}guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{to.matched.forEach(record=>record.enterCallbacks={});guards=extractComponentsGuards(enteringRecords,`beforeRouteEnter`,to,from,runWithContext);guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).then(()=>{guards=[];for(const guard of beforeResolveGuards.list())guards.push(guardToPromiseFn(guard,to,from));guards.push(canceledNavigationCheck);return runGuardQueue(guards)}).catch(err=>isNavigationFailure(err,8)?err:Promise.reject(err))}function triggerAfterEach(to,from,failure){afterGuards.list().forEach(guard=>runWithContext(()=>guard(to,from,failure)))}function finalizeNavigation(toLocation,from,isPush,replace,data){const error=checkCanceledNavigation(toLocation,from);if(error)return error;const isFirstNavigation=from===START_LOCATION_NORMALIZED;const state=!isBrowser?{}:history.state;if(isPush){if(replace||isFirstNavigation)routerHistory.replace(toLocation.fullPath,assign({scroll:isFirstNavigation&&state&&state.scroll},data));else routerHistory.push(toLocation.fullPath,data)}currentRoute.value=toLocation;handleScroll(toLocation,from,isPush,isFirstNavigation);markAsReady()}let removeHistoryListener;function setupListeners(){if(removeHistoryListener)return;removeHistoryListener=routerHistory.listen((to,_from,info)=>{if(!router.listening)return;const toLocation=resolve(to);const shouldRedirect=handleRedirectRecord(toLocation,router.currentRoute.value);if(shouldRedirect){pushWithRedirect(assign(shouldRedirect,{replace:true,force:true}),toLocation).catch(noop$2);return}pendingLocation=toLocation;const from=currentRoute.value;if(isBrowser&&info.delta)saveScrollPosition(getScrollKey(from.fullPath,info.delta));navigate(toLocation,from).catch(error=>{if(isNavigationFailure(error,12))return error;if(isNavigationFailure(error,2)){pushWithRedirect(assign(locationAsObject(error.to),{force:true}),toLocation).then(failure=>{if(isNavigationFailure(failure,20)&&!info.delta&&info.type===`pop`)routerHistory.go(-1,false)}).catch(noop$2);return Promise.reject()}if(info.delta)routerHistory.go(-info.delta,false);return triggerError(error,toLocation,from)}).then(failure=>{failure=failure||finalizeNavigation(toLocation,from,false);if(failure){if(info.delta&&!isNavigationFailure(failure,8))routerHistory.go(-info.delta,false);else if(info.type===`pop`&&isNavigationFailure(failure,20))routerHistory.go(-1,false)}triggerAfterEach(toLocation,from,failure)}).catch(noop$2)})}let readyHandlers=useCallbacks();let errorListeners=useCallbacks();let ready;function triggerError(error,to,from){markAsReady(error);const list=errorListeners.list();if(list.length)list.forEach(handler=>handler(error,to,from));else console.error(error);return Promise.reject(error)}function isReady(){if(ready&&currentRoute.value!==START_LOCATION_NORMALIZED)return Promise.resolve();return new Promise((resolve,reject)=>{readyHandlers.add([resolve,reject])})}function markAsReady(err){if(!ready){ready=!err;setupListeners();readyHandlers.list().forEach(([resolve,reject])=>err?reject(err):resolve());readyHandlers.reset()}return err}function handleScroll(to,from,isPush,isFirstNavigation){const{scrollBehavior}=options;if(!isBrowser||!scrollBehavior)return Promise.resolve();const scrollPosition=!isPush&&getSavedScrollPosition(getScrollKey(to.fullPath,0))||(isFirstNavigation||!isPush)&&history.state&&history.state.scroll||null;return nextTick$1().then(()=>scrollBehavior(to,from,scrollPosition)).then(position=>to===currentRoute.value&&position&&scrollToPosition(position)).catch(err=>to===currentRoute.value&&triggerError(err,to,from))}const go=delta=>routerHistory.go(delta);let started;const installedApps=new Set;const router={currentRoute,listening:true,addRoute,removeRoute,clearRoutes,hasRoute,getRoutes,resolve,options,push,replace,go,back:()=>go(-1),forward:()=>go(1),beforeEach:beforeGuards.add,beforeResolve:beforeResolveGuards.add,afterEach:afterGuards.add,onError:errorListeners.add,isReady,install(app){app.component(`RouterLink`,RouterLink);app.component(`RouterView`,RouterView);app.config.globalProperties.$router=router;Object.defineProperty(app.config.globalProperties,"$route",{enumerable:true,get:()=>unref(currentRoute)});if(isBrowser&&!started&&currentRoute.value===START_LOCATION_NORMALIZED){started=true;push(routerHistory.location).catch(err=>{})}const reactiveRoute={};for(const key in START_LOCATION_NORMALIZED)Object.defineProperty(reactiveRoute,key,{get:()=>currentRoute.value[key],enumerable:true});app.provide(routerKey,router);app.provide(routeLocationKey,shallowReactive(reactiveRoute));app.provide(routerViewLocationKey,currentRoute);const unmountApp=app.unmount;installedApps.add(app);app.unmount=function(){installedApps.delete(app);if(installedApps.size<1){pendingLocation=START_LOCATION_NORMALIZED;removeHistoryListener&&removeHistoryListener();removeHistoryListener=null;currentRoute.value=START_LOCATION_NORMALIZED;started=false;ready=false}unmountApp()}}};function runGuardQueue(guards){return guards.reduce((promise,guard)=>promise.then(()=>runWithContext(guard)),Promise.resolve())}return router}function queryStringToObject(queryString=``){const normalizedQueryString=String(queryString||``).trim().replace(/^\?+/,``);if(!normalizedQueryString)return;const params=new URLSearchParams(normalizedQueryString);const query={};for(const[key,value]of params.entries()){if(!Object.prototype.hasOwnProperty.call(query,key)){query[key]=value;continue}if(Array.isArray(query[key])){query[key].push(value);continue}query[key]=[query[key],value]}return query}function redirectToChild(childTarget=``){const normalizedChildTarget=String(childTarget||``).trim();return function redirectToChildRoute(to={}){const resolvedTarget=resolveLinkPath(String(to?.path||`/`),normalizedChildTarget);const{pathname,queryString,hash}=splitPathQueryAndHash(resolvedTarget);return{path:pathname||`/`,query:queryStringToObject(queryString)??to?.query,hash:hash||String(to?.hash||``)}}}var dashboard_vue_definePage_vue_lang_default={redirect:redirectToChild(`env`)};function _mergeRouteRecord(main,...routeRecords){return routeRecords.reduce((acc,routeRecord)=>{const meta=Object.assign({},acc.meta,routeRecord.meta);const alias=[].concat(acc.alias||[],routeRecord.alias||[]);Object.assign(acc,routeRecord);acc.meta=meta;acc.alias=alias;return acc},main)}var routes=[{path:`/`,name:`/`,component:()=>__vitePreload(()=>import(`./pages-DuMgH61T.js`),__vite__mapDeps([0,1,2,3])),meta:{"jskit":{"scope":`global`}}},{path:`/app`,children:[{path:``,name:`/app/`,component:()=>__vitePreload(()=>import(`./app-D1CGY9Xm.js`),__vite__mapDeps([4,1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,3,88])),meta:{"jskit":{"surface":`app`}}},{path:`learning`,name:`/app/learning`,component:()=>__vitePreload(()=>import(`./learning-CUCuuoHM.js`),__vite__mapDeps([89,1,90,7,6,8,78,45,43,44,46,47,2,72,48,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,35,52,53,18,5,9,54,55,58,59,36,37,91,38,39,40,41,10,11,92,93,12,94,56,57,95,96,80,79,81,75,76,77,82,73,67,83,84,97,98,99,100,101,102,103,104,62,63,42,60,61,64,65,66,68,69,70,71,13,21,74,85,86,105,106,22,87,3,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126])),meta:{"jskit":{"surface":`app`}}},{path:`project`,children:[{path:`:slug`,name:`/app/project/[slug]`,component:()=>__vitePreload(()=>import(`./_slug_-q9prK_gX.js`).then(n=>n.n),__vite__mapDeps([90,7,1,6,8,78,45,43,44,46,47,2,72,48,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,35,52,53,18,5,9,54,55,58,59,36,37,91,38,39,40,41,10,11,92,93,12,94,56,57,95,96,80,79,81,75,76,77,82,73,67,83,84,97,98,99,100,101,102,103,104,62,63,42,60,61,64,65,66,68,69,70,71,13,21,74,85,86,105,106,22,87,3,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126])),children:[_mergeRouteRecord({path:`dashboard`,name:`/app/project/[slug]/dashboard`,component:()=>__vitePreload(()=>import(`./dashboard-BXXgeQ0Q.js`),__vite__mapDeps([127,1,115,43,44,7,45,46,47,2,48,6,8,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,52,53,12,116,79,18,109,117,118])),children:[{path:`:sessionTool`,name:`/app/project/[slug]/dashboard/[sessionTool]`,component:()=>__vitePreload(()=>import(`./_sessionTool_-BV1AwpUx.js`),__vite__mapDeps([128,1,2,12,117,46,18,129]))},{path:`access`,children:[{path:``,name:`/app/project/[slug]/dashboard/access/`,component:()=>__vitePreload(()=>import(`./access-C05Nkq6r.js`),__vite__mapDeps([130,1,43,44,7,45,46,47,48,6,8,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,5,9,12,77,78,53,79,80,2,81,82,85,52,99,112,18,10,11,113,120,131]))}]},{path:`changes`,children:[{path:``,name:`/app/project/[slug]/dashboard/changes/`,component:()=>__vitePreload(()=>import(`./changes-D17XpgGz.js`),__vite__mapDeps([132,1,133,7,6,8,44,45,46,14,15,16,17,18,5,9,54,27,55,30,31,19,20,36,24,25,26,28,37,38,39,40,41,12,47,13,21,73,83,84,105,106,103,125,134,135,136]))}]},{path:`env`,children:[{path:``,name:`/app/project/[slug]/dashboard/env/`,component:()=>__vitePreload(()=>import(`./env-sXAQqKWk.js`),__vite__mapDeps([137,1,6,7,8,43,44,45,46,47,2,14,15,16,17,33,24,25,26,34,18,5,9,54,27,55,58,49,50,59,36,28,37,38,39,40,41,62,63,12,77,78,53,79,80,81,82,85,52,99,112,10,11,113,120,134,135,138,139]))}]},{path:`health`,children:[{path:``,name:`/app/project/[slug]/dashboard/health/`,component:()=>__vitePreload(()=>import(`./health-Cr34pf2p.js`),__vite__mapDeps([140,1,6,7,8,43,44,45,46,47,18,5,9,54,27,55,42,2,48,24,25,26,23,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,35,52,53,56,57,58,59,36,37,38,39,60,61,40,41,62,63,64,65,10,11,66,12,67,68,69,70,71,72,13,21,73,74,75,76,77,78,79,80,81,82,83,84,85,86,134,135,141]))}]},{path:`history`,children:[{path:``,name:`/app/project/[slug]/dashboard/history/`,component:()=>__vitePreload(()=>import(`./history-N1iRZaab.js`),__vite__mapDeps([142,1,6,7,8,14,15,16,17,18,5,9,54,27,55,19,20,38,39,10,11,12,123,62,25,63,82,78,45,43,44,46,47,67,99,2,124,134,135,143,80,53,79,81,101,83,102,121,75,122,144]))},{path:`:sessionId`,name:`/app/project/[slug]/dashboard/history/[sessionId]`,component:()=>__vitePreload(()=>import(`./_sessionId_-Bw0KfJeR.js`),__vite__mapDeps([145,1,6,7,8,18,5,9,54,27,55,19,20,91,43,44,45,46,47,23,24,25,26,28,15,16,29,30,31,32,14,17,33,34,52,53,36,37,38,39,40,41,10,11,92,93,12,94,48,49,50,51,56,57,95,96,80,2,79,81,75,76,77,78,82,73,67,83,84,97,98,99,100,101,102,103,104,143,121,122,146]))}]},{path:`incoming`,children:[{path:``,name:`/app/project/[slug]/dashboard/incoming/`,component:()=>__vitePreload(()=>import(`./incoming-CNwZa_yD.js`),__vite__mapDeps([147,1,43,44,7,45,46,47,2,48,6,8,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,52,53,18,5,9,54,55,36,37,38,39,40,41,10,11,12,82,78,84,105,106,148]))}]},{path:`integrations`,children:[{path:``,name:`/app/project/[slug]/dashboard/integrations/`,component:()=>__vitePreload(()=>import(`./integrations-BmwFvHgZ.js`),__vite__mapDeps([149,7,1,6,8,43,44,45,46,47,2,48,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,35,18,5,9,54,55,58,59,36,37,38,39,60,61,62,63,10,11,92,93,12,77,78,53,79,80,81,82,73,99,97,112,113,122,138,150]))}]},{path:`issues`,children:[{path:``,name:`/app/project/[slug]/dashboard/issues/`,component:()=>__vitePreload(()=>import(`./issues-BbiG7dCV.js`),__vite__mapDeps([151,1,6,7,8,43,44,45,46,47,2,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,52,53,18,5,9,54,55,56,48,49,50,19,20,51,57,36,37,38,39,40,41,10,11,92,93,12,82,78,97,107,108,109,152,153]))}]},{path:`publish`,children:[{path:``,name:`/app/project/[slug]/dashboard/publish/`,component:()=>__vitePreload(()=>import(`./publish-4r_4K5IY.js`),__vite__mapDeps([154,1,6,7,8,44,45,46,48,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,52,53,18,5,9,54,55,58,59,36,37,38,39,40,41,64,65,10,11,92,93,12,134,135,155]))}]},{path:`pull-requests`,children:[{path:``,name:`/app/project/[slug]/dashboard/pull-requests/`,component:()=>__vitePreload(()=>import(`./pull-requests-DY9jg3cE.js`),__vite__mapDeps([156,1,6,7,8,43,44,45,46,47,2,48,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,52,53,18,5,9,54,55,36,37,38,39,40,41,10,11,12,94,56,57,92,93,95,96,82,78,102,107,108,109,110,42,35,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,13,21,73,74,75,76,77,79,80,81,83,84,85,86,111,152,157]))}]},{path:`repository`,children:[{path:``,name:`/app/project/[slug]/dashboard/repository/`,component:()=>__vitePreload(()=>import(`./repository-DhXdoMP6.js`),__vite__mapDeps([158,1,133,7,6,8,44,45,46,14,15,16,17,18,5,9,54,27,55,30,31,19,20,36,24,25,26,28,37,38,39,40,41,12,47,13,21,73,83,84,105,106,103,125,134,135,136]))}]},{path:`session`,children:[{path:``,name:`/app/project/[slug]/dashboard/session/`,component:()=>__vitePreload(()=>import(`./session-BGpiZThC.js`),__vite__mapDeps([159,1,6,7,8,14,15,16,17,18,5,9,19,20,12,114,102,134,135,160]))}]},{path:`settings`,children:[{path:``,name:`/app/project/[slug]/dashboard/settings/`,component:()=>__vitePreload(()=>import(`./settings-Cj4u-76p.js`),__vite__mapDeps([161,1,43,44,7,45,46,47,2,48,6,8,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,52,53,5,9,54,55,58,59,64,65,69,70,92,93,12,77,78,79,80,81,82,85,99,112,18,10,11,113,119,97,101,83,102,120,162]))}]}]},dashboard_vue_definePage_vue_lang_default)],meta:{"jskit":{"surface":`app`}}}]}]}];var aliases$1={collapse:`mdi-chevron-up`,complete:`mdi-check`,cancel:`mdi-close-circle`,close:`mdi-close`,delete:`mdi-close-circle`,clear:`mdi-close-circle`,success:`mdi-check-circle`,info:`mdi-information`,warning:`mdi-alert-circle`,error:`mdi-close-circle`,prev:`mdi-chevron-left`,next:`mdi-chevron-right`,checkboxOn:`mdi-checkbox-marked`,checkboxOff:`mdi-checkbox-blank-outline`,checkboxIndeterminate:`mdi-minus-box`,delimiter:`mdi-circle`,sortAsc:`mdi-arrow-up`,sortDesc:`mdi-arrow-down`,expand:`mdi-chevron-down`,menu:`mdi-menu`,subgroup:`mdi-menu-down`,dropdown:`mdi-menu-down`,radioOn:`mdi-radiobox-marked`,radioOff:`mdi-radiobox-blank`,edit:`mdi-pencil`,ratingEmpty:`mdi-star-outline`,ratingFull:`mdi-star`,ratingHalf:`mdi-star-half-full`,loading:`mdi-cached`,first:`mdi-page-first`,last:`mdi-page-last`,unfold:`mdi-unfold-more-horizontal`,file:`mdi-paperclip`,plus:`mdi-plus`,minus:`mdi-minus`,calendar:`mdi-calendar`,treeviewCollapse:`mdi-menu-down`,treeviewExpand:`mdi-menu-right`,tableGroupCollapse:`mdi-chevron-down`,tableGroupExpand:`mdi-chevron-right`,eyeDropper:`mdi-eyedropper`,upload:`mdi-cloud-upload`,color:`mdi-palette`,command:`mdi-apple-keyboard-command`,ctrl:`mdi-apple-keyboard-control`,space:`mdi-keyboard-space`,shift:`mdi-apple-keyboard-shift`,alt:`mdi-apple-keyboard-option`,enter:`mdi-keyboard-return`,arrowup:`mdi-arrow-up`,arrowdown:`mdi-arrow-down`,arrowleft:`mdi-arrow-left`,arrowright:`mdi-arrow-right`,backspace:`mdi-backspace`,play:`mdi-play`,pause:`mdi-pause`,fullscreen:`mdi-fullscreen`,fullscreenExit:`mdi-fullscreen-exit`,volumeHigh:`mdi-volume-high`,volumeMedium:`mdi-volume-medium`,volumeLow:`mdi-volume-low`,volumeOff:`mdi-volume-variant-off`,search:`mdi-magnify`};var mdi$1={component:props=>h$1(VClassIcon,{...props,class:`mdi`})};function genDefaults(){return{svg:{component:VSvgIcon},class:{component:VClassIcon}}}function createIcons(options){const sets=genDefaults();const defaultSet=options?.defaultSet??`mdi`;if(defaultSet===`mdi`&&!sets.mdi)sets.mdi=mdi$1;return mergeDeep({defaultSet,sets,aliases:{...aliases$1,vuetify:[`M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z`,[`M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z`,.6]],"vuetify-outline":`svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z`,"vuetify-play":[`m6.376 13.184-4.11-7.192C1.505 4.66 2.467 3 4.003 3h8.532l-.953 1.576-.006.01-.396.677c-.429.732-.214 1.507.194 2.015.404.503 1.092.878 1.869.806a3.72 3.72 0 0 1 1.005.022c.276.053.434.143.523.237.138.146.38.635-.25 2.09-.893 1.63-1.553 1.722-1.847 1.677-.213-.033-.468-.158-.756-.406a4.95 4.95 0 0 1-.8-.927c-.39-.564-1.04-.84-1.66-.846-.625-.006-1.316.27-1.693.921l-.478.826-.911 1.506Z`,[`M9.093 11.552c.046-.079.144-.15.32-.148a.53.53 0 0 1 .43.207c.285.414.636.847 1.046 1.2.405.35.914.662 1.516.754 1.334.205 2.502-.698 3.48-2.495l.014-.028.013-.03c.687-1.574.774-2.852-.005-3.675-.37-.391-.861-.586-1.333-.676a5.243 5.243 0 0 0-1.447-.044c-.173.016-.393-.073-.54-.257-.145-.18-.127-.316-.082-.392l.393-.672L14.287 3h5.71c1.536 0 2.499 1.659 1.737 2.992l-7.997 13.996c-.768 1.344-2.706 1.344-3.473 0l-3.037-5.314 1.377-2.278.004-.006.004-.007.481-.831Z`,.6]]}},options)}function weekInfo(locale){const code=locale.slice(-2).toUpperCase();switch(true){case locale===`GB-alt-variant`:return{firstDay:0,firstWeekSize:4};case locale===`001`:return{firstDay:1,firstWeekSize:1};case`AG AS BD BR BS BT BW BZ CA CO DM DO ET GT GU HK HN ID IL IN JM JP KE
3
+ KH KR LA MH MM MO MT MX MZ NI NP PA PE PH PK PR PY SA SG SV TH TT TW UM US
4
+ VE VI WS YE ZA ZW`.includes(code):return{firstDay:0,firstWeekSize:1};case`AI AL AM AR AU AZ BA BM BN BY CL CM CN CR CY EC GE HR KG KZ LB LK LV
5
+ MD ME MK MN MY NZ RO RS SI TJ TM TR UA UY UZ VN XK`.includes(code):return{firstDay:1,firstWeekSize:1};case`AD AN AT AX BE BG CH CZ DE DK EE ES FI FJ FO FR GB GF GP GR HU IE IS
6
+ IT LI LT LU MC MQ NL NO PL RE RU SE SK SM VA`.includes(code):return{firstDay:1,firstWeekSize:4};case`AE AF BH DJ DZ EG IQ IR JO KW LY OM QA SD SY`.includes(code):return{firstDay:6,firstWeekSize:1};case code===`MV`:return{firstDay:5,firstWeekSize:1};case code===`PT`:return{firstDay:0,firstWeekSize:4};default:return null}}function getWeekArray(date,locale,firstDayOfWeek){const weeks=[];let currentWeek=[];const firstDayOfMonth=startOfMonth(date);const lastDayOfMonth=endOfMonth(date);const first=firstDayOfWeek??weekInfo(locale)?.firstDay??0;const firstDayWeekIndex=(firstDayOfMonth.getDay()-first+7)%7;const lastDayWeekIndex=(lastDayOfMonth.getDay()-first+7)%7;for(let i=0;i<firstDayWeekIndex;i++){const adjacentDay=new Date(firstDayOfMonth);adjacentDay.setDate(adjacentDay.getDate()-(firstDayWeekIndex-i));currentWeek.push(adjacentDay)}for(let i=1;i<=lastDayOfMonth.getDate();i++){const day=new Date(date.getFullYear(),date.getMonth(),i);currentWeek.push(day);if(currentWeek.length===7){weeks.push(currentWeek);currentWeek=[]}}for(let i=1;i<7-lastDayWeekIndex;i++){const adjacentDay=new Date(lastDayOfMonth);adjacentDay.setDate(adjacentDay.getDate()+i);currentWeek.push(adjacentDay)}if(currentWeek.length>0)weeks.push(currentWeek);return weeks}function startOfWeek(date,locale,firstDayOfWeek){let day=(firstDayOfWeek??weekInfo(locale)?.firstDay??0)%7;if(![0,1,2,3,4,5,6].includes(day)){consoleWarn(`Invalid firstDayOfWeek, expected discrete number in range [0-6]`);day=0}const d=new Date(date);while(d.getDay()!==day)d.setDate(d.getDate()-1);return d}function endOfWeek(date,locale){const d=new Date(date);const lastDay=((weekInfo(locale)?.firstDay??0)+6)%7;while(d.getDay()!==lastDay)d.setDate(d.getDate()+1);return d}function startOfMonth(date){return new Date(date.getFullYear(),date.getMonth(),1)}function endOfMonth(date){return new Date(date.getFullYear(),date.getMonth()+1,0)}function parseLocalDate(value){const parts=value.split(`-`).map(Number);return new Date(parts[0],parts[1]-1,parts[2])}var _YYYMMDD=/^([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))$/;function date(value){if(value==null)return new Date;if(value instanceof Date)return value;if(typeof value===`string`){let parsed;if(_YYYMMDD.test(value))return parseLocalDate(value);else parsed=Date.parse(value);if(!isNaN(parsed))return new Date(parsed)}return null}var sundayJanuarySecond2000=new Date(2e3,0,2);function getWeekdays(locale,firstDayOfWeek,weekdayFormat){const daysFromSunday=firstDayOfWeek??weekInfo(locale)?.firstDay??0;return range(7).map(i=>{const weekday=new Date(sundayJanuarySecond2000);weekday.setDate(sundayJanuarySecond2000.getDate()+daysFromSunday+i);return new Intl.DateTimeFormat(locale,{weekday:weekdayFormat??`narrow`}).format(weekday)})}function format(value,formatString,locale,formats){const newDate=date(value)??new Date;const customFormat=formats?.[formatString];if(typeof customFormat===`function`)return customFormat(newDate,formatString,locale);let options={};switch(formatString){case`fullDate`:options={year:`numeric`,month:`short`,day:`numeric`};break;case`fullDateWithWeekday`:options={weekday:`long`,year:`numeric`,month:`long`,day:`numeric`};break;case`normalDate`:return`${newDate.getDate()} ${new Intl.DateTimeFormat(locale,{month:`long`}).format(newDate)}`;case`normalDateWithWeekday`:options={weekday:`short`,day:`numeric`,month:`short`};break;case`shortDate`:options={month:`short`,day:`numeric`};break;case`year`:options={year:`numeric`};break;case`month`:options={month:`long`};break;case`monthShort`:options={month:`short`};break;case`monthAndYear`:options={month:`long`,year:`numeric`};break;case`monthAndDate`:options={month:`long`,day:`numeric`};break;case`weekday`:options={weekday:`long`};break;case`weekdayShort`:options={weekday:`short`};break;case`dayOfMonth`:return new Intl.NumberFormat(locale).format(newDate.getDate());case`hours12h`:options={hour:`numeric`,hour12:true};break;case`hours24h`:options={hour:`numeric`,hour12:false};break;case`minutes`:options={minute:`numeric`};break;case`seconds`:options={second:`numeric`};break;case`fullTime`:options={hour:`numeric`,minute:`numeric`};break;case`fullTime12h`:options={hour:`numeric`,minute:`numeric`,hour12:true};break;case`fullTime24h`:options={hour:`numeric`,minute:`numeric`,hour12:false};break;case`fullDateTime`:options={year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`numeric`};break;case`fullDateTime12h`:options={year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`numeric`,hour12:true};break;case`fullDateTime24h`:options={year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`numeric`,hour12:false};break;case`keyboardDate`:options={year:`numeric`,month:`2-digit`,day:`2-digit`};break;case`keyboardDateTime`:options={year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`numeric`,minute:`numeric`};return new Intl.DateTimeFormat(locale,options).format(newDate).replace(/, /g,` `);case`keyboardDateTime12h`:options={year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`numeric`,minute:`numeric`,hour12:true};return new Intl.DateTimeFormat(locale,options).format(newDate).replace(/, /g,` `);case`keyboardDateTime24h`:options={year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`numeric`,minute:`numeric`,hour12:false};return new Intl.DateTimeFormat(locale,options).format(newDate).replace(/, /g,` `);default:options=customFormat??{timeZone:`UTC`,timeZoneName:`short`}}return new Intl.DateTimeFormat(locale,options).format(newDate)}function toISO(adapter,value){const date=adapter.toJsDate(value);return`${date.getFullYear()}-${padStart(String(date.getMonth()+1),2,`0`)}-${padStart(String(date.getDate()),2,`0`)}`}function parseISO(value){const[year,month,day]=value.split(`-`).map(Number);return new Date(year,month-1,day)}function addMinutes(date,amount){const d=new Date(date);d.setMinutes(d.getMinutes()+amount);return d}function addHours(date,amount){const d=new Date(date);d.setHours(d.getHours()+amount);return d}function addDays(date,amount){const d=new Date(date);d.setDate(d.getDate()+amount);return d}function addWeeks(date,amount){const d=new Date(date);d.setDate(d.getDate()+amount*7);return d}function addMonths(date,amount){const d=new Date(date);d.setDate(1);d.setMonth(d.getMonth()+amount);return d}function getYear(date){return date.getFullYear()}function getMonth(date){return date.getMonth()}function getWeek(date,locale,firstDayOfWeek,firstDayOfYear){const weekInfoFromLocale=weekInfo(locale);const weekStart=firstDayOfWeek??weekInfoFromLocale?.firstDay??0;const minWeekSize=weekInfoFromLocale?.firstWeekSize??1;return firstDayOfYear!==void 0?calculateWeekWithFirstDayOfYear(date,locale,weekStart,firstDayOfYear):calculateWeekWithMinWeekSize(date,locale,weekStart,minWeekSize)}function calculateWeekWithFirstDayOfYear(date,locale,weekStart,firstDayOfYear){const firstDayOfYearOffset=(7+firstDayOfYear-weekStart)%7;const currentWeekStart=startOfWeek(date,locale,weekStart);const currentWeekEnd=addDays(currentWeekStart,6);function yearStartWeekdayOffset(year){return(7+new Date(year,0,1).getDay()-weekStart)%7}let year=getYear(currentWeekStart);if(year<getYear(currentWeekEnd)&&yearStartWeekdayOffset(year+1)<=firstDayOfYearOffset)year++;const yearStart=new Date(year,0,1);const offset=yearStartWeekdayOffset(year);const d1w1=offset<=firstDayOfYearOffset?addDays(yearStart,-offset):addDays(yearStart,7-offset);return 1+getDiff(endOfDay(currentWeekStart),startOfDay(d1w1),`weeks`)}function calculateWeekWithMinWeekSize(date,locale,weekStart,minWeekSize){const currentWeekStart=startOfWeek(date,locale,weekStart);const currentWeekEnd=addDays(startOfWeek(date,locale,weekStart),6);function firstWeekSize(year){const yearStart=new Date(year,0,1);return 7-getDiff(yearStart,startOfWeek(yearStart,locale,weekStart),`days`)}let year=getYear(currentWeekStart);if(year<getYear(currentWeekEnd)&&firstWeekSize(year+1)>=minWeekSize)year++;const yearStart=new Date(year,0,1);const size=firstWeekSize(year);const d1w1=size>=minWeekSize?addDays(yearStart,size-7):addDays(yearStart,size);return 1+getDiff(endOfDay(currentWeekStart),startOfDay(d1w1),`weeks`)}function getDate(date){return date.getDate()}function getNextMonth(date){return new Date(date.getFullYear(),date.getMonth()+1,1)}function getPreviousMonth(date){return new Date(date.getFullYear(),date.getMonth()-1,1)}function getHours(date){return date.getHours()}function getMinutes(date){return date.getMinutes()}function startOfYear(date){return new Date(date.getFullYear(),0,1)}function endOfYear(date){return new Date(date.getFullYear(),11,31)}function isWithinRange(date,range){return isEqual(date,range[0])||isEqual(date,range[1])||isAfter(date,range[0])&&isBefore(date,range[1])}function isValid(date){const d=new Date(date);return d instanceof Date&&!isNaN(d.getTime())}function isAfter(date,comparing){return date.getTime()>comparing.getTime()}function isAfterDay(date,comparing){return isAfter(startOfDay(date),startOfDay(comparing))}function isBefore(date,comparing){return date.getTime()<comparing.getTime()}function isEqual(date,comparing){return date.getTime()===comparing.getTime()}function isSameDay(date,comparing){return date.getDate()===comparing.getDate()&&date.getMonth()===comparing.getMonth()&&date.getFullYear()===comparing.getFullYear()}function isSameMonth(date,comparing){return date.getMonth()===comparing.getMonth()&&date.getFullYear()===comparing.getFullYear()}function isSameYear(date,comparing){return date.getFullYear()===comparing.getFullYear()}function getDiff(date,comparing,unit){const d=new Date(date);const c=new Date(comparing);switch(unit){case`years`:return d.getFullYear()-c.getFullYear();case`quarters`:return Math.floor((d.getMonth()-c.getMonth()+(d.getFullYear()-c.getFullYear())*12)/4);case`months`:return d.getMonth()-c.getMonth()+(d.getFullYear()-c.getFullYear())*12;case`weeks`:return Math.floor((d.getTime()-c.getTime())/6048e5);case`days`:return Math.floor((d.getTime()-c.getTime())/864e5);case`hours`:return Math.floor((d.getTime()-c.getTime())/36e5);case`minutes`:return Math.floor((d.getTime()-c.getTime())/6e4);case`seconds`:return Math.floor((d.getTime()-c.getTime())/1e3);default:return d.getTime()-c.getTime()}}function setHours(date,count){const d=new Date(date);d.setHours(count);return d}function setMinutes(date,count){const d=new Date(date);d.setMinutes(count);return d}function setMonth(date,count){const d=new Date(date);d.setMonth(count);return d}function setDate(date,day){const d=new Date(date);d.setDate(day);return d}function setYear(date,year){const d=new Date(date);d.setFullYear(year);return d}function startOfDay(date){return new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0,0,0)}function endOfDay(date){return new Date(date.getFullYear(),date.getMonth(),date.getDate(),23,59,59,999)}var VuetifyDateAdapter=class{constructor(options){this.locale=options.locale;this.formats=options.formats}date(value){return date(value)}toJsDate(date){return date}toISO(date){return toISO(this,date)}parseISO(date){return parseISO(date)}addMinutes(date,amount){return addMinutes(date,amount)}addHours(date,amount){return addHours(date,amount)}addDays(date,amount){return addDays(date,amount)}addWeeks(date,amount){return addWeeks(date,amount)}addMonths(date,amount){return addMonths(date,amount)}getWeekArray(date,firstDayOfWeek){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;return getWeekArray(date,this.locale,firstDay)}startOfWeek(date,firstDayOfWeek){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;return startOfWeek(date,this.locale,firstDay)}endOfWeek(date){return endOfWeek(date,this.locale)}startOfMonth(date){return startOfMonth(date)}endOfMonth(date){return endOfMonth(date)}format(date,formatString){return format(date,formatString,this.locale,this.formats)}isEqual(date,comparing){return isEqual(date,comparing)}isValid(date){return isValid(date)}isWithinRange(date,range){return isWithinRange(date,range)}isAfter(date,comparing){return isAfter(date,comparing)}isAfterDay(date,comparing){return isAfterDay(date,comparing)}isBefore(date,comparing){return!isAfter(date,comparing)&&!isEqual(date,comparing)}isSameDay(date,comparing){return isSameDay(date,comparing)}isSameMonth(date,comparing){return isSameMonth(date,comparing)}isSameYear(date,comparing){return isSameYear(date,comparing)}setMinutes(date,count){return setMinutes(date,count)}setHours(date,count){return setHours(date,count)}setMonth(date,count){return setMonth(date,count)}setDate(date,day){return setDate(date,day)}setYear(date,year){return setYear(date,year)}getDiff(date,comparing,unit){return getDiff(date,comparing,unit)}getWeekdays(firstDayOfWeek,weekdayFormat){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;return getWeekdays(this.locale,firstDay,weekdayFormat)}getYear(date){return getYear(date)}getMonth(date){return getMonth(date)}getWeek(date,firstDayOfWeek,firstDayOfYear){const firstDay=firstDayOfWeek!==void 0?Number(firstDayOfWeek):void 0;const firstWeekStart=firstDayOfYear!==void 0?Number(firstDayOfYear):void 0;return getWeek(date,this.locale,firstDay,firstWeekStart)}getDate(date){return getDate(date)}getNextMonth(date){return getNextMonth(date)}getPreviousMonth(date){return getPreviousMonth(date)}getHours(date){return getHours(date)}getMinutes(date){return getMinutes(date)}startOfDay(date){return startOfDay(date)}endOfDay(date){return endOfDay(date)}startOfYear(date){return startOfYear(date)}endOfYear(date){return endOfYear(date)}};var DateOptionsSymbol=Symbol.for(`vuetify:date-options`);var DateAdapterSymbol=Symbol.for(`vuetify:date-adapter`);function createDate(options,locale){const _options=mergeDeep({adapter:VuetifyDateAdapter,locale:{af:`af-ZA`,bg:`bg-BG`,ca:`ca-ES`,ckb:``,cs:`cs-CZ`,de:`de-DE`,el:`el-GR`,en:`en-US`,et:`et-EE`,fa:`fa-IR`,fi:`fi-FI`,hr:`hr-HR`,hu:`hu-HU`,he:`he-IL`,id:`id-ID`,it:`it-IT`,ja:`ja-JP`,ko:`ko-KR`,lv:`lv-LV`,lt:`lt-LT`,nl:`nl-NL`,no:`no-NO`,pl:`pl-PL`,pt:`pt-PT`,ro:`ro-RO`,ru:`ru-RU`,sk:`sk-SK`,sl:`sl-SI`,srCyrl:`sr-SP`,srLatn:`sr-SP`,sv:`sv-SE`,th:`th-TH`,tr:`tr-TR`,az:`az-AZ`,uk:`uk-UA`,vi:`vi-VN`,zhHans:`zh-CN`,zhHant:`zh-TW`}},options);return{options:_options,instance:createInstance(_options,locale)}}function daysDiff(adapter,start,stop){const iso=[`${adapter.toISO(stop??start).split(`T`)[0]}T00:00:00Z`,`${adapter.toISO(start).split(`T`)[0]}T00:00:00Z`];return isString(adapter.date())?adapter.getDiff(iso[0],iso[1],`days`):adapter.getDiff(adapter.date(iso[0]),adapter.date(iso[1]),`days`)}function createInstance(options,locale){const instance=reactive(isFunction(options.adapter)?new options.adapter({locale:options.locale[locale.current.value]??locale.current.value,formats:options.formats}):options.adapter);watch(locale.current,value=>{instance.locale=options.locale[value]??value??instance.locale});return instance}function useDate(){const options=inject$1(DateOptionsSymbol);if(!options)throw new Error(`[Vuetify] Could not find injected date options`);return createInstance(options,useLocale())}function createVuetify(vuetify={}){const{blueprint,...rest}=vuetify;const options=mergeDeep(blueprint,rest);const{aliases={},components={},directives={}}=options;const scope=effectScope();return scope.run(()=>{const defaults=createDefaults(options.defaults);const display=createDisplay(options.display,options.ssr);const theme=createTheme(options.theme);const icons=createIcons(options.icons);const locale=createLocale(options.locale);const date=createDate(options.date,locale);const goTo=createGoTo(options.goTo,locale);function install(app){for(const key in directives)app.directive(key,directives[key]);for(const key in components)app.component(key,components[key]);for(const key in aliases)app.component(key,defineComponent$1({...aliases[key],name:key,aliasName:aliases[key].name}));const appScope=effectScope();appScope.run(()=>{theme.install(app)});app.onUnmount(()=>appScope.stop());app.provide(DefaultsSymbol,defaults);app.provide(RootDefaultsSymbol,defaults);app.provide(DisplaySymbol,display);app.provide(ThemeSymbol,theme);app.provide(IconSymbol,icons);app.provide(LocaleSymbol,locale);app.provide(DateOptionsSymbol,date.options);app.provide(DateAdapterSymbol,date.instance);app.provide(GoToSymbol,goTo);if(IN_BROWSER&&options.ssr){if(app.$nuxt)app.$nuxt.hook(`app:suspense:resolve`,()=>{display.update()});else{const{mount}=app;app.mount=(...args)=>{const vm=mount(...args);nextTick$1(()=>display.update());app.mount=mount;return vm}}}app.mixin({computed:{$vuetify(){return reactive({defaults:inject.call(this,DefaultsSymbol),display:inject.call(this,DisplaySymbol),theme:inject.call(this,ThemeSymbol),icons:inject.call(this,IconSymbol),locale:inject.call(this,LocaleSymbol),date:inject.call(this,DateAdapterSymbol)})}}})}function unmount(){scope.stop()}return{install,unmount,defaults,display,theme,icons,locale,date,goTo}})}var version=`4.2.1`;createVuetify.version=version;function inject(key){const vm=this.$;const provides=vm.parent?.provides??vm.vnode.appContext?.provides;if(provides&&key in provides)return provides[key]}var aliases={collapse:`svg:M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z`,complete:`svg:M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z`,cancel:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,close:`svg:M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z`,delete:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,clear:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,success:`svg:M12,2C17.52,2 22,6.48 22,12C22,17.52 17.52,22 12,22C6.48,22 2,17.52 2,12C2,6.48 6.48,2 12,2M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z`,info:`svg:M13,9H11V7H13M13,17H11V11H13M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z`,warning:`svg:M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z`,error:`svg:M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z`,prev:`svg:M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z`,next:`svg:M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z`,checkboxOn:`svg:M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z`,checkboxOff:`svg:M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z`,checkboxIndeterminate:`svg:M17,13H7V11H17M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z`,delimiter:`svg:M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z`,sortAsc:`svg:M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z`,sortDesc:`svg:M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z`,expand:`svg:M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z`,menu:`svg:M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z`,subgroup:`svg:M7,10L12,15L17,10H7Z`,dropdown:`svg:M7,10L12,15L17,10H7Z`,radioOn:`svg:M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2M12,7C9.24,7 7,9.24 7,12C7,14.76 9.24,17 12,17C14.76,17 17,14.76 17,12C17,9.24 14.76,7 12,7Z`,radioOff:`svg:M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z`,edit:`svg:M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z`,ratingEmpty:`svg:M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z`,ratingFull:`svg:M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z`,ratingHalf:`svg:M12,15.4V6.1L13.71,10.13L18.09,10.5L14.77,13.39L15.76,17.67M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z`,loading:`svg:M19,8L15,12H18C18,15.31 15.31,18 12,18C11,18 10.03,17.75 9.2,17.3L7.74,18.76C8.97,19.54 10.43,20 12,20C16.42,20 20,16.42 20,12H23M6,12C6,8.69 8.69,6 12,6C13,6 13.97,6.25 14.8,6.7L16.26,5.24C15.03,4.46 13.57,4 12,4C7.58,4 4,7.58 4,12H1L5,16L9,12`,first:`svg:M18.41,16.59L13.82,12L18.41,7.41L17,6L11,12L17,18L18.41,16.59M6,6H8V18H6V6Z`,last:`svg:M5.59,7.41L10.18,12L5.59,16.59L7,18L13,12L7,6L5.59,7.41M16,6H18V18H16V6Z`,unfold:`svg:M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z`,file:`svg:M16.5,6V17.5C16.5,19.71 14.71,21.5 12.5,21.5C10.29,21.5 8.5,19.71 8.5,17.5V5C8.5,3.62 9.62,2.5 11,2.5C12.38,2.5 13.5,3.62 13.5,5V15.5C13.5,16.05 13.05,16.5 12.5,16.5C11.95,16.5 11.5,16.05 11.5,15.5V6H10V15.5C10,16.88 11.12,18 12.5,18C13.88,18 15,16.88 15,15.5V5C15,2.79 13.21,1 11,1C8.79,1 7,2.79 7,5V17.5C7,20.54 9.46,23 12.5,23C15.54,23 18,20.54 18,17.5V6H16.5Z`,plus:`svg:M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z`,minus:`svg:M19,13H5V11H19V13Z`,calendar:`svg:M19,19H5V8H19M16,1V3H8V1H6V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3H18V1M17,12H12V17H17V12Z`,treeviewCollapse:`svg:M7,10L12,15L17,10H7Z`,treeviewExpand:`svg:M10,17L15,12L10,7V17Z`,tableGroupExpand:`svg:M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z`,tableGroupCollapse:`svg:M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z`,eyeDropper:`svg:M19.35,11.72L17.22,13.85L15.81,12.43L8.1,20.14L3.5,22L2,20.5L3.86,15.9L11.57,8.19L10.15,6.78L12.28,4.65L19.35,11.72M16.76,3C17.93,1.83 19.83,1.83 21,3C22.17,4.17 22.17,6.07 21,7.24L19.08,9.16L14.84,4.92L16.76,3M5.56,17.03L4.5,19.5L6.97,18.44L14.4,11L13,9.6L5.56,17.03Z`,upload:`svg:M11 20H6.5q-2.28 0-3.89-1.57Q1 16.85 1 14.58q0-1.95 1.17-3.48q1.18-1.53 3.08-1.95q.63-2.3 2.5-3.72Q9.63 4 12 4q2.93 0 4.96 2.04Q19 8.07 19 11q1.73.2 2.86 1.5q1.14 1.28 1.14 3q0 1.88-1.31 3.19T18.5 20H13v-7.15l1.6 1.55L16 13l-4-4l-4 4l1.4 1.4l1.6-1.55Z`,color:`svg:M17.5 12a1.5 1.5 0 0 1-1.5-1.5A1.5 1.5 0 0 1 17.5 9a1.5 1.5 0 0 1 1.5 1.5a1.5 1.5 0 0 1-1.5 1.5m-3-4A1.5 1.5 0 0 1 13 6.5A1.5 1.5 0 0 1 14.5 5A1.5 1.5 0 0 1 16 6.5A1.5 1.5 0 0 1 14.5 8m-5 0A1.5 1.5 0 0 1 8 6.5A1.5 1.5 0 0 1 9.5 5A1.5 1.5 0 0 1 11 6.5A1.5 1.5 0 0 1 9.5 8m-3 4A1.5 1.5 0 0 1 5 10.5A1.5 1.5 0 0 1 6.5 9A1.5 1.5 0 0 1 8 10.5A1.5 1.5 0 0 1 6.5 12M12 3a9 9 0 0 0-9 9a9 9 0 0 0 9 9a1.5 1.5 0 0 0 1.5-1.5c0-.39-.15-.74-.39-1c-.23-.27-.38-.62-.38-1a1.5 1.5 0 0 1 1.5-1.5H16a5 5 0 0 0 5-5c0-4.42-4.03-8-9-8`,command:`svg:M6,2A4,4 0 0,1 10,6V8H14V6A4,4 0 0,1 18,2A4,4 0 0,1 22,6A4,4 0 0,1 18,10H16V14H18A4,4 0 0,1 22,18A4,4 0 0,1 18,22A4,4 0 0,1 14,18V16H10V18A4,4 0 0,1 6,22A4,4 0 0,1 2,18A4,4 0 0,1 6,14H8V10H6A4,4 0 0,1 2,6A4,4 0 0,1 6,2M16,18A2,2 0 0,0 18,20A2,2 0 0,0 20,18A2,2 0 0,0 18,16H16V18M14,10H10V14H14V10M6,16A2,2 0 0,0 4,18A2,2 0 0,0 6,20A2,2 0 0,0 8,18V16H6M8,6A2,2 0 0,0 6,4A2,2 0 0,0 4,6A2,2 0 0,0 6,8H8V6M18,8A2,2 0 0,0 20,6A2,2 0 0,0 18,4A2,2 0 0,0 16,6V8H18Z`,ctrl:`svg:M19.78,11.78L18.36,13.19L12,6.83L5.64,13.19L4.22,11.78L12,4L19.78,11.78Z`,space:`svg:M3 15H5V19H19V15H21V19C21 20.1 20.1 21 19 21H5C3.9 21 3 20.1 3 19V15Z`,shift:`svg:M15 18v-6h2.17L12 6.83L6.83 12H9v6zM12 4l10 10h-5v6H7v-6H2z`,alt:`svg:M3 4h6.11l7.04 14H21v2h-6.12L7.84 6H3zm11 0h7v2h-7z`,enter:`svg:M19 7v4H5.83l3.58-3.59L8 6l-6 6l6 6l1.41-1.42L5.83 13H21V7z`,arrowup:`svg:M13 20h-2V8l-5.5 5.5l-1.42-1.42L12 4.16l7.92 7.92l-1.42 1.42L13 8z`,arrowdown:`svg:M11 4h2v12l5.5-5.5l1.42 1.42L12 19.84l-7.92-7.92L5.5 10.5L11 16z`,arrowleft:`svg:M20 11v2H8l5.5 5.5l-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5L8 11z`,arrowright:`svg:M4 11v2h12l-5.5 5.5l1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5L16 11z`,backspace:`svg:M19 15.59L17.59 17L14 13.41L10.41 17L9 15.59L12.59 12L9 8.41L10.41 7L14 10.59L17.59 7L19 8.41L15.41 12zM22 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H7c-.69 0-1.23-.36-1.59-.89L0 12l5.41-8.12C5.77 3.35 6.31 3 7 3zm0 2H7l-4.72 7L7 19h15z`,play:`svg:M8,5.14V19.14L19,12.14L8,5.14Z`,pause:`svg:M14,19H18V5H14M6,19H10V5H6V19Z`,fullscreen:`svg:M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z`,fullscreenExit:`svg:M14,14H19V16H16V19H14V14M5,14H10V19H8V16H5V14M8,5H10V10H5V8H8V5M19,8V10H14V5H16V8H19Z`,volumeHigh:`svg:M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z`,volumeMedium:`svg:M5,9V15H9L14,20V4L9,9M18.5,12C18.5,10.23 17.5,8.71 16,7.97V16C17.5,15.29 18.5,13.76 18.5,12Z`,volumeLow:`svg:M7,9V15H11L16,20V4L11,9H7Z`,volumeOff:`svg:M5.64,3.64L21.36,19.36L19.95,20.78L16,16.83V20L11,15H7V9H8.17L4.22,5.05L5.64,3.64M16,4V11.17L12.41,7.58L16,4Z`,search:`svg:M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z`};var mdi={component:VSvgIcon};var TRAINING_GUIDE_DURATION_MS=8e3;var trainingGuide=shallowRef(null);var overlays=0;var sequence=0;function registerTrainingGuideOverlay(){overlays+=1;let registered=true;return()=>{if(!registered)return;registered=false;overlays-=1;if(overlays===0)trainingGuide.value=null}}function cssString(value){return String(value).replace(/["\\]/gu,`\\$&`)}function stepSelectors(step){if(step.id===`file`)return[`[data-vibe64-guide-path="${cssString(step.path)}"]`];const id=cssString(step.id);return[`[data-vibe64-guide="${id}"]`,`[data-vibe64-guide-pane="${id}"]`]}function visibleStepElement(step,root){for(const selector of stepSelectors(step)){const element=[...root.querySelectorAll(selector)].find(guideElementVisible);if(element)return element}return null}function guideElementVisible(element){if(!element?.isConnected||element.closest(`[inert], [aria-hidden='true']`))return false;if(typeof element.checkVisibility===`function`&&!element.checkVisibility({visibilityProperty:true}))return false;const rect=element.getBoundingClientRect();return rect.width>0&&rect.height>0}function findTrainingGuideStep(steps=[],root=globalThis.document){if(!root)return null;for(let index=steps.length-1;index>=0;index-=1){const element=visibleStepElement(steps[index],root);if(element)return{step:steps[index],element,final:index===steps.length-1}}return null}var PANE_SWITCH=`pane-switch`;function findPaneSwitch(root=globalThis.document){if(!root)return null;return[...root.querySelectorAll(`[data-vibe64-guide="${PANE_SWITCH}"]`)].filter(guideElementVisible).at(-1)||null}function currentTrainingGuideElement(guide){const element=guide?.element;if(!element||guideElementVisible(element))return element||null;if(element.isConnected||!guide.target)return null;return guide.target.id===PANE_SWITCH?findPaneSwitch():visibleStepElement(guide.target,globalThis.document)}function clearTrainingGuide(id){if(!id||trainingGuide.value?.id===id)trainingGuide.value=null}async function showTrainingGuide(guide,{settleMs=0,durationMs=TRAINING_GUIDE_DURATION_MS}={}){if(!guide?.highlight)return{shown:false,reason:`highlight-off`};if(overlays===0)return{shown:false,reason:`overlay-unavailable`};const deadline=Date.now()+settleMs;let found=findTrainingGuideStep(guide.steps);while(!found?.final&&Date.now()<deadline){await new Promise(resolve=>setTimeout(resolve,50));found=findTrainingGuideStep(guide.steps)}if(!found){const element=findPaneSwitch();if(element)found={step:{id:PANE_SWITCH},element}}if(!found)return{shown:false,reason:`target-hidden`};if(overlays===0)return{shown:false,reason:`overlay-unavailable`};sequence+=1;trainingGuide.value=Object.freeze({id:`guide-${sequence}`,element:found.element,step:found.step.id,target:found.step,caption:String(guide.caption||``),expiresAt:Date.now()+durationMs});return{shown:true,step:found.step.id}}async function runTrainingGuideCommand(command,{navigateBrowser,view}={}){const{guide,...navigation}=command;let focus=null;if(guide.navigate){if(typeof navigateBrowser!==`function`)throw new Error(`Lesson workspace navigation is unavailable in this installation.`);focus=await navigateBrowser(navigation);if(guide.filePath&&(typeof view?.openFile!==`function`||view.openFile(guide.filePath)!==true))throw new Error(`This lesson's Files view could not open that practice project file.`)}const receipt=await showTrainingGuide(guide,{settleMs:guide.navigate?1500:0});return{...focus?{focus}:{},guide:receipt}}var PRACTICE_SLUG_PATTERN=/^training-[a-f0-9]{32}$/u;function isPracticeProjectSlug(slug=``){return PRACTICE_SLUG_PATTERN.test(String(slug||``))}function practiceProjectName({lessonTitle=``,lessonCode=``}={}){const lesson=String(lessonTitle||``).trim()||String(lessonCode||``).trim();return lesson?`Practice: ${lesson}`:`Practice project`}function projectDisplayName(project=null,{lessonTitle=``}={}){const slug=String(project?.slug||``);return isPracticeProjectSlug(slug)?practiceProjectName({lessonTitle}):slug}function projectSubtitle(project=null){return isPracticeProjectSlug(project?.slug)?`For your current lesson`:String(project?.projectRoot||``)}var ID=/^[a-z][a-z0-9-]{0,63}$/u;var SCOPES=new Set([`studio`,`project`]);var WHO=new Set([`everyone`,`owner`]);var step=(id,label)=>Object.freeze({id,label});var PREVIEW=step(`preview`,`Preview`);var DASHBOARD=step(`dashboard`,`Dashboard`);var DATABASE=step(`database`,`Database`);var ACCOUNT_MENU=step(`account-menu`,`Account menu`);var BUILT_IN_PLACES=[{id:`preview`,label:`Preview`,scope:`project`,open:{pane:`preview`},steps:[PREVIEW]},{id:`dashboard`,label:`Dashboard`,scope:`project`,open:null,steps:[DASHBOARD]},{id:`database-erd`,label:`ERD`,scope:`project`,open:{pane:`database`,databaseView:`erd`},steps:[DASHBOARD,DATABASE,step(`database-erd`,`ERD`)]},{id:`database-data`,label:`Data`,scope:`project`,open:{pane:`database`,databaseView:`data`},steps:[DASHBOARD,DATABASE,step(`database-data`,`Data`)]},{id:`files`,label:`Files`,scope:`project`,open:{pane:`files`},steps:[DASHBOARD,step(`files`,`Files`)]},{id:`changes`,label:`Current changes`,scope:`project`,open:{pane:`changes`},steps:[DASHBOARD,step(`changes`,`Current changes`)]},{id:`git-log`,label:`Git log`,scope:`project`,open:{pane:`repository`},steps:[DASHBOARD,step(`git-log`,`Git log`)]},{id:`session-info`,label:`Session info`,scope:`project`,open:{pane:`session`},steps:[DASHBOARD,step(`session-info`,`Session info`)]},{id:`architecture`,label:`Architecture`,scope:`project`,open:{pane:`system`},steps:[DASHBOARD,step(`architecture`,`Architecture`)]},{id:`chat`,label:`Coding chat`,scope:`project`,open:null,shown:[{pane:`chat`},{chatVisible:true}],steps:[step(`chat`,`Coding chat`)]},{id:`save`,label:`Save`,scope:`project`,open:null,event:`saved`,steps:[step(`save`,`Save`)]},{id:`reload-preview`,label:`Reload preview`,scope:`project`,open:null,event:`preview-reloaded`,steps:[PREVIEW,step(`reload-preview`,`Reload preview`)]},{id:`learning`,label:`Learning`,scope:`studio`,open:{learning:true},shown:[],event:`learn-toggled`,steps:[step(`learning`,`Learning`)]},{id:`lesson`,label:`Lesson`,scope:`studio`,open:null,shown:[{pane:`lesson`}],steps:[step(`lesson`,`Lesson`)]},{id:`lesson-bar`,label:`Lesson step bar`,scope:`studio`,open:null,steps:[step(`lesson-bar`,`Lesson step bar`)]},{id:`courses`,label:`Courses`,scope:`studio`,open:null,shown:[{learningOpen:true}],steps:[step(`courses`,`Courses`)]},{id:`colleague`,label:`Colleague`,scope:`studio`,open:null,event:`colleague-opened`,steps:[step(`colleague`,`Colleague`)]},{id:`account-menu`,label:`Account menu`,scope:`studio`,open:null,steps:[ACCOUNT_MENU]},{id:`account-settings`,label:`Account settings`,scope:`studio`,open:null,steps:[ACCOUNT_MENU,step(`account-settings`,`Account settings`)]},{id:`ai-setup`,label:`AI setup`,scope:`studio`,open:null,steps:[ACCOUNT_MENU,step(`ai-setup`,`AI setup`)]}];var BUILT_IN_ACTIVITIES=[{id:`send-message`,event:`message-sent`,place:`chat`},{id:`agent-finished`,event:`agent-finished`},{id:`file-opened`,event:`file-opened`,place:`files`},{id:`app-pressed`,event:`app-pressed`,place:`preview`},{id:`colleague-minimised`,event:`colleague-minimised`,place:`colleague`}];var BUILT_IN_FACTS=[`ai-ready`];function vocabularyFailure(message){return Object.assign(new Error(message),{code:`VIBE64_TRAINING_VOCABULARY_INVALID`})}var plainObject=value=>Boolean(value)&&typeof value===`object`&&!Array.isArray(value);var label=value=>typeof value===`string`&&value.trim().length>0&&value.length<=64;function definePlace(value){if(!plainObject(value)||!ID.test(value.id||``))throw vocabularyFailure(`A place needs a lowercase id.`);const name=`Place ${value.id}`;if(!label(value.label))throw vocabularyFailure(`${name} needs a label.`);if(!SCOPES.has(value.scope))throw vocabularyFailure(`${name} scope is studio or project.`);const who=value.who??`everyone`;if(!WHO.has(who))throw vocabularyFailure(`${name} who is everyone or owner.`);const open=value.open??null;if(open!==null){const keys=Object.keys(open||{}).sort().join(`,`);if(!(keys===`pane`||keys===`databaseView,pane`?value.scope===`project`&&ID.test(open.pane):keys===`route`?value.scope===`studio`&&typeof open.route===`string`&&/^\/app(?:\/[a-z0-9-]+)*$/u.test(open.route):keys===`learning`&&open.learning===true))throw vocabularyFailure(`${name} opens a project pane, a studio /app route, Courses, or nothing.`)}if(!Array.isArray(value.steps)||!value.steps.length||value.steps.length>6||value.steps.some(item=>!ID.test(item?.id||``)||!label(item.label))||value.steps.at(-1).id!==value.id)throw vocabularyFailure(`${name} needs 1 to 6 labelled steps ending with itself.`);const shown=value.shown??(open?.pane?[{pane:open.pane,...open.databaseView?{databaseView:open.databaseView}:{}}]:open?.route?[{route:open.route}]:[]);if(!Array.isArray(shown)||shown.some(item=>!plainObject(item)||!Object.keys(item).length))throw vocabularyFailure(`${name} shown is a list of page focus matchers.`);if(value.event!==void 0&&!ID.test(value.event))throw vocabularyFailure(`${name} event is a lowercase activity name.`);return Object.freeze({id:value.id,label:value.label,scope:value.scope,who,open:open&&Object.freeze({...open}),steps:Object.freeze(value.steps.map(item=>step(item.id,item.label))),shown:Object.freeze(shown.map(item=>Object.freeze({...item}))),...value.event?{event:value.event}:{}})}function defineActivity(value){if(!plainObject(value)||!ID.test(value.id||``))throw vocabularyFailure(`An activity needs a lowercase id.`);if(!ID.test(value.event||``))throw vocabularyFailure(`Activity ${value.id} needs its page activity event.`);if(value.place!==void 0&&!ID.test(value.place))throw vocabularyFailure(`Activity ${value.id} place is a place id.`);return Object.freeze({id:value.id,event:value.event,...value.place?{place:value.place}:{}})}function createLearningVocabulary({places=BUILT_IN_PLACES,activities=BUILT_IN_ACTIVITIES,facts=BUILT_IN_FACTS}={}){const placeMap=new Map;const activityMap=new Map;const factSet=new Set;const same=(left,right)=>JSON.stringify(left)===JSON.stringify(right);function register({places:newPlaces=[],activities:newActivities=[],facts:newFacts=[]}={}){const placed=newPlaces.map(definePlace);const acted=newActivities.map(defineActivity);for(const value of[...placed,...acted])if(placeMap.has(value.id)&&!same(placeMap.get(value.id),value)||activityMap.has(value.id)&&!same(activityMap.get(value.id),value)||placed.includes(value)&&activityMap.has(value.id)||acted.includes(value)&&placeMap.has(value.id))throw vocabularyFailure(`${value.id} is already registered with another meaning.`);for(const fact of newFacts)if(!ID.test(fact||``))throw vocabularyFailure(`A fact needs a lowercase id.`);for(const value of placed)placeMap.set(value.id,value);for(const value of acted)activityMap.set(value.id,value);for(const fact of newFacts)factSet.add(fact)}register({places,activities,facts});return Object.freeze({register,place:id=>placeMap.get(id)||null,activity:id=>activityMap.get(id)||null,hasFact:id=>factSet.has(id),places:()=>[...placeMap.values()],events:()=>new Set([...[...activityMap.values()].map(value=>value.event),...[...placeMap.values()].filter(value=>value.event).map(value=>value.event)])})}var learningVocabulary=createLearningVocabulary({facts:[]});var filePathExpression=/^(?!\/)(?!.*(?:^|\/)\.\.(?:\/|$))[^\u0000-\u001f\\]{1,512}$/u;var TRAINING_GUIDE_CAPTION_LIMIT=256;function guideFailure(message){return Object.assign(new Error(message),{code:`VIBE64_TRAINING_GUIDE_INVALID`,statusCode:422})}var placeOpens=place=>Boolean(place?.open);function trainingGuideRequest(input={},vocabulary=learningVocabulary){const place=typeof input.target===`string`?vocabulary.place(input.target):null;const declared=!place&&typeof vocabulary.declaredPlace===`function`&&vocabulary.declaredPlace(input.target);if(!place&&!declared)throw guideFailure(`Use one of this installation's guide places: ${vocabulary.places().map(value=>value.id).join(`, `)}.`);const target=input.target;const navigate=input.navigate??false;const highlight=input.highlight??true;if(typeof navigate!==`boolean`||typeof highlight!==`boolean`)throw guideFailure(`navigate and highlight are booleans.`);if(!navigate&&!highlight)throw guideFailure(`Point at the place (highlight) or open it (navigate); this request does neither.`);if(navigate&&target===`dashboard`)throw guideFailure(`Dashboard has no single view to open. Point at it, or open one Dashboard section such as files or database-erd.`);if(navigate&&place&&!placeOpens(place))throw guideFailure(`${place.label} has no view to open; point at it instead.`);const request={target,navigate,highlight};if(input.filePath!==void 0){if(target!==`files`)throw guideFailure(`filePath is only for the files place.`);if(typeof input.filePath!==`string`||!filePathExpression.test(input.filePath))throw guideFailure(`Use a relative practice project file path without '..'.`);request.filePath=input.filePath}if(input.caption!==void 0){if(typeof input.caption!==`string`||!input.caption.trim()||input.caption.length>256)throw guideFailure(`Use a caption of 1 to ${256} characters.`);request.caption=input.caption.trim()}return request}function trainingGuideSteps(request,vocabulary=learningVocabulary){const steps=vocabulary.place(request.target).steps.map(value=>({...value}));if(request.filePath)steps.push({id:`file`,path:request.filePath,label:request.filePath});return steps}function trainingPlaceShown(target,focus={},vocabulary=learningVocabulary){const place=vocabulary.place(target);if(!place?.shown.length)return null;return place.shown.some(matcher=>Object.entries(matcher).every(([key,value])=>key===`route`?typeof focus.route===`string`&&(focus.route===value||focus.route.startsWith(`${value}/`)):focus[key]===value))}var TRAINING_BEAT_CHECKS=Object.freeze({auto:`auto`,review:`review`,done:`self`,fact:`fact`});function beatPlace(beat,vocabulary=learningVocabulary){if(!beat||beat.kind===`check`)return``;const activity=vocabulary.activity(beat.target);return activity?activity.place||``:beat.target}var SHOW_MIN_MS=5e3;var SHOW_MAX_MS=12e3;var SHOW_PER_CHARACTER_MS=50;var TICK_MS=100;var DO_RING_MS=15e3;var POINT_SETTLE_MS=1500;var CONFIRM_MS=1500;var showDuration=text=>Math.min(SHOW_MAX_MS,Math.max(SHOW_MIN_MS,SHOW_MIN_MS+SHOW_PER_CHARACTER_MS*String(text||``).length));function reducedMotion(){try{return Boolean(globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`)?.matches)}catch{return false}}function documentHidden(){return globalThis.document?.visibilityState===`hidden`}var beatIdentity=value=>value?JSON.stringify([value.kind,value.target,value.text,value.path||``]):``;var sameBeat=(a,b)=>Boolean(a&&b)&&beatIdentity(a)===beatIdentity(b);function beatEvent(beat){return learningVocabulary.activity(beat.target)?.event||learningVocabulary.place(beat.target)?.event||``}function createLessonPlayer({state,steps,currentStep,active,selectStep,remember,focus=()=>null,activity=null,practiceSlug=()=>``,allDone=()=>{},passed=()=>false,showGuide=showTrainingGuide,clearGuide=clearTrainingGuide,shownGuide=()=>trainingGuide.value?.id||``,motionReduced=reducedMotion,hidden=documentHidden}={}){const local=reactive({remaining:0,duration:0,held:false,ring:``,confirmed:``});const detected=new Set;const heard={stepId:``,events:[],used:-1};function stepActivity(){const stepId=currentStep.value?.id||``;if(heard.stepId!==stepId)Object.assign(heard,{stepId,events:[],used:-1});return heard}const activityMatches=(value,event)=>value?.kind===`do`&&beatEvent(value)===event.name&&(!value.path||event.path===value.path);const beats=computed(()=>Array.isArray(currentStep.value?.beats)?currentStep.value.beats:[]);const end=computed(()=>beats.value.length?beats.value.length-(beats.value.at(-1).kind===`check`?1:0):0);const index=computed(()=>Math.max(0,Math.min(Number.isSafeInteger(state.beat)?state.beat:0,end.value)));const beat=computed(()=>beats.value[index.value]||null);const stepIndex=computed(()=>steps.value.findIndex(step=>step.id===currentStep.value?.id));const playing=computed(()=>Boolean(active()&&beat.value?.kind===`show`&&!state.beatPaused&&!local.held&&!state.open));function moveTo(value){local.confirmed=``;state.beat=value;remember()}function next(){if(index.value<end.value)return moveTo(index.value+1);const following=steps.value[stepIndex.value+1];if(following)selectStep(following.id,0)}function back(){if(index.value>0)return moveTo(index.value-1);const previous=steps.value[stepIndex.value-1];if(!previous)return;const previousBeats=Array.isArray(previous.beats)?previous.beats:[];selectStep(previous.id,previousBeats.length-(previousBeats.at(-1)?.kind===`check`?1:0))}function start(stepId=currentStep.value?.id){state.beatPaused=false;if(stepId===currentStep.value?.id)moveTo(0);else selectStep(stepId,0)}function togglePause(){state.beatPaused=!state.beatPaused;remember()}function hold(value){local.held=value===true}let timer=null;let confirmTimer=null;function stopTimer(){clearInterval(timer);timer=null}function tick(){if(!playing.value||hidden()||motionReduced())return;local.remaining=Math.max(0,local.remaining-TICK_MS);if(local.remaining>0)return;stopTimer();next()}watch([active,()=>currentStep.value?.id,index,()=>beatIdentity(beat.value)],([shown])=>{const value=beat.value;stopTimer();clearTimeout(confirmTimer);local.confirmed=``;if(local.ring)clearGuide(local.ring);local.ring=``;local.duration=value?.kind===`show`?showDuration(value.text):0;local.remaining=local.duration;if(!shown||!value)return;if(value.kind===`show`)timer=setInterval(tick,TICK_MS);if(value.kind===`do`&&placeShown(value))return confirm(value,`✓ You're already here.`);if(value.kind===`do`&&passed(currentStep.value?.id))return confirm(value,`✓ Done.`);if(value.kind===`do`&&!detected.has(`${currentStep.value?.id}:${index.value}`)){const history=stepActivity();const position=history.events.findIndex((event,at)=>at>history.used&&activityMatches(value,event));if(position>=0)return confirm(value,`✓ Done.`,position)}point(value)},{immediate:true});function placeShown(value){const current=focus();return Boolean(current&&!learningVocabulary.activity(value.target)&&trainingPlaceShown(value.target,{...current,learningOpen:state.open})===true)}function confirm(value,line=`✓ Done.`,position=-1){const stepId=currentStep.value?.id;const at=index.value;detected.add(`${stepId}:${at}`);if(position>=0)stepActivity().used=position;if(local.ring)clearGuide(local.ring);local.ring=``;local.confirmed=line;clearTimeout(confirmTimer);if(beats.value.map((item,position)=>[item,position]).filter(([item])=>item.kind===`do`).every(([,position])=>detected.has(`${stepId}:${position}`)))allDone(stepId);confirmTimer=setTimeout(()=>{local.confirmed=``;if(currentStep.value?.id===stepId&&index.value===at&&sameBeat(beat.value,value))next()},CONFIRM_MS)}watch(()=>beat.value?.kind===`do`&&active()&&!local.confirmed&&placeShown(beat.value),shown=>{if(shown)confirm(beat.value)});activity?.subscribe(event=>{if(practiceSlug()&&event.projectSlug&&event.projectSlug!==practiceSlug())return;const history=stepActivity();history.events.push(event);const value=beat.value;if(local.confirmed||!active()||!activityMatches(value,event))return;confirm(value,`✓ Done.`,history.events.length-1)});watch(()=>state.open,covered=>{if(covered&&local.ring)clearGuide(local.ring)});async function point(value){const place=beatPlace(value);if(!place||!learningVocabulary.place(place)||state.open)return null;const request={target:place,...value.path?{filePath:value.path}:{}};const guideSteps=trainingGuideSteps(request);const receipt=await showGuide({...request,highlight:true,navigate:false,steps:guideSteps,caption:guideSteps.map(item=>item.label).join(` → `)},{settleMs:POINT_SETTLE_MS,durationMs:value.kind===`show`?local.duration:DO_RING_MS});if(receipt?.shown){if(sameBeat(beat.value,value)&&!state.open)local.ring=shownGuide();else clearGuide(shownGuide())}return receipt}return Object.freeze({beats,beat,index,end,get final(){return Boolean(beats.value.length)&&index.value===end.value},get paused(){return Boolean(state.beatPaused)},get playing(){return playing.value&&!motionReduced()},get progress(){return local.duration?1-local.remaining/local.duration:0},get atStart(){return index.value===0&&stepIndex.value<=0},get atEnd(){return index.value>=end.value&&stepIndex.value>=steps.value.length-1},get confirmed(){return local.confirmed},next,back,start,togglePause,hold,point:()=>beat.value&&point(beat.value)})}var TRAINING_PATH$1=`/api/vibe64/training`;var attemptPath=(attemptId,suffix=``)=>`${TRAINING_PATH$1}/attempts/${encodeURIComponent(attemptId)}${suffix}`;var VIBE64_LEARNING_ROUTES=Object.freeze({lessonRead:attemptId=>attemptPath(attemptId,`/lesson`),stepObserve:attemptId=>attemptPath(attemptId,`/steps/observe`),stepCheck:attemptId=>attemptPath(attemptId,`/steps/check`),stepAnswer:attemptId=>attemptPath(attemptId,`/steps/answer`),stepDone:attemptId=>attemptPath(attemptId,`/steps/done`),stepReview:attemptId=>attemptPath(attemptId,`/steps/review`),readerSave:attemptId=>attemptPath(attemptId,`/reader`),visual:(attemptId,visualId)=>attemptPath(attemptId,`/visuals/${encodeURIComponent(visualId)}`),lessonRestart:attemptId=>attemptPath(attemptId,`/restart`),lessonFinish:attemptId=>attemptPath(attemptId,`/finish`),lessonDelete:attemptId=>attemptPath(attemptId,`/delete`),learning:`${TRAINING_PATH$1}/learning`,notes:`${TRAINING_PATH$1}/teacher-notes`,notesClear:`${TRAINING_PATH$1}/teacher-notes/clear`,learningMode:`${TRAINING_PATH$1}/learning-mode`,practice:`${TRAINING_PATH$1}/practice`,archiveDelete:attemptId=>`${TRAINING_PATH$1}/archives/${encodeURIComponent(attemptId)}/delete`});var VIBE64_LEARNING_PAGE_PATH=`/app/learning`;var DEVELOP_HOME_PATH=`/app`;var VIBE64_LEARNING_MODE_NOTE=`You're in Learn mode. Press L to go back to your projects.`;var VIBE64_DEVELOP_MODE_NOTE=`This is a practice project. Press L to switch to Learn.`;var VIBE64_LEARNING_MODE_PROJECT_CODE=`vibe64_learning_mode_project`;var VIBE64_LESSON_IN_PROGRESS_CODE=`VIBE64_TRAINING_LESSON_IN_PROGRESS`;var VIBE64_LEARNING_AI_REQUIRED_CODE=`VIBE64_TRAINING_PRACTICE_AI_REQUIRED`;var VIBE64_LEARNING_NOTES_MAX=4e3;var SURFACES=Object.freeze([`courses`,`progress`,`archived`]);var STORAGE_PREFIX=`vibe64:learning-environment:v2:`;var MODE_PLACE_PREFIX=`vibe64:mode-place:v1:`;var READER_SAVE_DELAY_MS=800;var PROJECT_VIEW_WAIT_MS=5e3;var MAX_EXERCISE_OBSERVATIONS=8;var VIBE64_LEARNING_TEACH_MESSAGE=`Teach me this step.`;var VIBE64_LEARNING_STUCK_MESSAGE=`I'm stuck on this step.`;var EMPTY_PRACTICE=Object.freeze({current:null,archived:Object.freeze([]),loaded:false});var text$2=value=>typeof value===`string`&&value.length>0;function storage(kind){try{return globalThis.window?.[kind]||null}catch{return null}}function readJson(kind,key){try{const value=JSON.parse(storage(kind)?.getItem(key)||`null`);return value&&typeof value===`object`?value:null}catch{return null}}function writeJson(kind,key,value){try{storage(kind)?.setItem(key,JSON.stringify(value))}catch{}}function readPlace(actorKey){const value=readJson(`sessionStorage`,`${STORAGE_PREFIX}${actorKey}`);if(!value)return null;return{surface:SURFACES.includes(value.surface)?value.surface:`courses`,attemptId:text$2(value.attemptId)?value.attemptId:``,stepId:text$2(value.stepId)?value.stepId:``,trialAttemptId:text$2(value.trialAttemptId)&&value.trialAttemptId===value.attemptId?value.trialAttemptId:``,scroll:Number.isSafeInteger(value.scroll)&&value.scroll>=0?value.scroll:0,beat:Number.isSafeInteger(value.beat)&&value.beat>=0?value.beat:0,beatPaused:value.beatPaused===true}}var lessonShownIn=query=>query?.lesson===`1`;var withLesson=path=>`${path}?lesson=1`;function withoutLesson(query={}){const{lesson:_lesson,...rest}=query||{};return rest}var modePlaceKey=(actorKey,side)=>`${MODE_PLACE_PREFIX}${actorKey}:${side}`;var modeSide=on=>on?`learn`:`develop`;function normalizeLesson(result){if(!result||result.ok===false||result.available===false)return null;const lesson=result.lesson||{};const steps=Array.isArray(lesson.steps)?lesson.steps.filter(step=>text$2(step?.id)):[];const attempt=result.attempt||null;return Object.freeze({schemaVersion:lesson.schemaVersion??(steps.length?2:1),stage:lesson.stage===`studio`||lesson.stage===`project`?lesson.stage:``,code:lesson.code||attempt?.pin?.lesson?.code||``,title:lesson.title||``,notesText:text$2(lesson.notesText)?lesson.notesText:``,visuals:Array.isArray(lesson.visuals)?lesson.visuals:[],steps,attempt,practiceProjectSlug:attempt?.practiceSlug||``,reader:result.reader&&text$2(result.reader.stepId)?result.reader:null,results:Array.isArray(result.results)?result.results:[],passedStepIds:Array.isArray(result.passedStepIds)?result.passedStepIds.filter(text$2):[]})}function normalizeLearningMode(result){const mode=result?.ok===true&&result.available!==false?result.learningMode:null;if(!mode||typeof mode!==`object`)return null;const value=key=>text$2(mode[key])?mode[key]:``;return Object.freeze({on:mode.on===true,currentAttemptId:value(`currentAttemptId`),lessonCode:value(`lessonCode`),lessonTitle:value(`lessonTitle`),practiceSlug:value(`practiceSlug`),lessonStage:[`studio`,`project`].includes(mode.lessonStage)?mode.lessonStage:``})}function normalizePractice(result){if(result?.ok!==true)return EMPTY_PRACTICE;const lessonName=lesson=>String(lesson?.title||lesson?.code||``)||`Lesson`;const current=result.current&&text$2(result.current.attemptId)?Object.freeze({attemptId:result.current.attemptId,name:lessonName(result.current.lesson),projectName:text$2(result.current.slug)?practiceProjectName({lessonTitle:result.current.lesson?.title,lessonCode:result.current.lesson?.code}):``,slug:text$2(result.current.slug)?result.current.slug:``,status:result.current.status===`deleting`?`deleting`:`in-progress`}):null;const archived=(Array.isArray(result.archived)?result.archived:[]).filter(entry=>text$2(entry?.attemptId)).map(entry=>Object.freeze({attemptId:entry.attemptId,name:lessonName(entry.lesson),reason:entry.reason===`finished`?`finished`:`archived`,archivedAt:String(entry.archivedAt||``),hasProject:entry.hasProject===true}));return Object.freeze({current,archived:Object.freeze(archived),loaded:true})}var studioHome=VIBE64_LEARNING_PAGE_PATH;function learnHomePath(mode){return mode?.lessonStage===`project`&&mode.practiceSlug?projectAppPath(mode.practiceSlug):studioHome}function modeRedirect({mode=null,slug=``,path=``}={}){if(!mode)return null;const projectSlug=String(slug||``).trim();const atLearnPage=String(path||``).replace(/\/+$/u,``)===VIBE64_LEARNING_PAGE_PATH;if(mode.on){if(projectSlug?projectSlug===mode.practiceSlug:!(atLearnPage&&learnHomePath(mode)!==`/app/learning`))return null;return Object.freeze({path:learnHomePath(mode),note:projectSlug?VIBE64_LEARNING_MODE_NOTE:``})}if(atLearnPage)return Object.freeze({path:DEVELOP_HOME_PATH,note:``});if(projectSlug&&projectSlug===mode.practiceSlug)return Object.freeze({path:DEVELOP_HOME_PATH,note:VIBE64_DEVELOP_MODE_NOTE});return null}function reviewNote(result){if(!result)return``;if(result.alreadyPassed)return`You already passed this step, so your work was not reviewed again. Your earlier pass counts.`;const comment=String(result.review?.comment||``).trim();const hint=String(result.review?.hint||``).trim();if(result.outcome===`passed`)return comment?`Passed ✓ ${comment}`:`Passed ✓`;if(!comment)return String(result.reason||``).trim();return`Not yet: ${comment}${hint?` Hint: ${hint}`:``}`}function stepStatus(results,stepId,passedStepIds=[]){const own=results.filter(result=>result?.stepId===stepId);if(passedStepIds.includes(stepId)||own.some(result=>result.outcome===`passed`))return`passed`;return own.length?own.at(-1).outcome||`not-yet-passed`:`not-started`}function showMeCommand(guide,{projectSlug=``,sessionId=``}={}){const request=trainingGuideRequest({target:guide?.target,...guide?.navigate!==void 0?{navigate:guide.navigate}:{},...guide?.filePath!==void 0?{filePath:guide.filePath}:{}});const steps=trainingGuideSteps(request);const caption=text$2(guide?.caption)?guide.caption.slice(0,256):steps.map(value=>value.label).join(` → `);const open=learningVocabulary.place(request.target).open;const navigate=request.navigate&&Boolean(open?.route||open?.pane&&projectSlug);const command={guide:{...request,navigate,highlight:true,steps,caption}};if(!navigate)return command;if(open.route)return{...command,route:open.route};return{...command,projectSlug,...text$2(sessionId)?{sessionId}:{},pane:open.pane,...open.databaseView?{databaseView:open.databaseView}:{}}}function createVibe64Learning({request:requestOverride=null,browserNavigation=null,colleagueView=null,layout=null,pageFocus=null,pageActivity=null,router=null,runGuide=null,now=()=>Date.now()}={}){const state=reactive({open:false,minimised:false,surface:`courses`,attemptId:``,stepId:``,scroll:0,loading:false,error:``,actorKey:``,busy:``,hiddenBy:``,finished:false,notice:``,modeBusy:``,modeRead:false,trialAttemptId:``,beat:0,beatPaused:false,orientationRequested:false});const lesson=shallowRef(null);const mode=shallowRef(null);const practice=shallowRef(EMPTY_PRACTICE);const confirmArchive=shallowRef(null);const colleagueRequest=shallowRef(null);const notes=shallowRef(null);const notesState=reactive({loading:false,saving:false,error:``});const pending=new Map;const exerciseObservations=new Set;let viewer=0;let reads=0;let modeReads=0;let modeLoad=null;let practiceReads=0;let saveTimer=null;let lastSaved=``;let finishRun=null;let lessonLoad=null;function pendingRequestId(key){const requestId=pending.get(key)||globalThis.crypto.randomUUID();pending.set(key,requestId);return requestId}async function request(url,options={}){if(requestOverride)return requestOverride(url,options);return getHttpWebClient().request(resolveStudioRequestUrl(url),options)}const learnMode=computed(()=>Boolean(state.actorKey&&mode.value?.on));const results=computed(()=>lesson.value?.results||[]);const steps=computed(()=>lesson.value?.steps||[]);const currentStep=computed(()=>steps.value.find(step=>step.id===state.stepId)||steps.value[0]||null);const focus=computed(()=>({learningOpen:state.open,learningSurface:state.surface,...state.attemptId?{learningAttemptId:state.attemptId}:{},...state.attemptId&&currentStep.value?{learningStepId:currentStep.value.id}:{}}));const complete=computed(()=>Boolean(lesson.value?.schemaVersion>=2&&steps.value.length&&steps.value.filter(step=>step.required).every(step=>stepStatus(results.value,step.id,lesson.value.passedStepIds)===`passed`)));const lessonAttemptId=computed(()=>state.finished?state.attemptId:state.trialAttemptId||mode.value?.currentAttemptId||``);const stepBarVisible=computed(()=>Boolean(learnMode.value&&!state.finished&&lessonAttemptId.value&&state.attemptId===lessonAttemptId.value&&currentStep.value));const aiRequired=computed(()=>!lesson.value?.attempt?.ended&&lesson.value?.attempt?.preparation?.failure?.code===`VIBE64_TRAINING_PRACTICE_AI_REQUIRED`);const player=createLessonPlayer({state,steps,currentStep,selectStep:(...value)=>selectStep(...value),remember:()=>remember(),active:()=>stepBarVisible.value&&!lesson.value?.attempt?.ended&&!aiRequired.value,activity:pageActivity,focus:()=>pageFocus?.value?{...pageFocus.value,chatVisible:Boolean(layout?.value?.chatVisible)}:null,practiceSlug:()=>lesson.value?.practiceProjectSlug||``,passed:stepId=>stepStatus(results.value,stepId,lesson.value?.passedStepIds)===`passed`,allDone:stepId=>{if(steps.value.find(value=>value.id===stepId)?.check?.kind===`self`&&stepStatus(results.value,stepId,lesson.value?.passedStepIds)!==`passed`)done(stepId)}});function remember(){if(!state.actorKey)return;writeJson(`sessionStorage`,`${STORAGE_PREFIX}${state.actorKey}`,{surface:state.surface,attemptId:state.attemptId,stepId:state.stepId,scroll:state.scroll,trialAttemptId:state.trialAttemptId,beat:state.beat,beatPaused:state.beatPaused})}function setViewer(actorKey){const next=String(actorKey||``);if(next===state.actorKey)return;viewer+=1;reads+=1;modeReads+=1;practiceReads+=1;clearTimeout(saveTimer);pending.clear();exerciseObservations.clear();lesson.value=null;mode.value=null;practice.value=EMPTY_PRACTICE;confirmArchive.value=null;colleagueRequest.value=null;notes.value=null;Object.assign(notesState,{loading:false,saving:false,error:``});Object.assign(state,{open:false,minimised:false,surface:`courses`,attemptId:``,stepId:``,scroll:0,loading:false,error:``,busy:``,hiddenBy:``,finished:false,notice:``,modeBusy:``,modeRead:false,trialAttemptId:``,beat:0,beatPaused:false,orientationRequested:false,actorKey:next});finishRun=null;const place=next?readPlace(next):null;if(place)Object.assign(state,place);if(state.attemptId)loadLesson();if(next)readLearningMode()}function acceptMode(value){mode.value=value;state.modeRead=true;const current=state.trialAttemptId||value?.currentAttemptId||``;if(!value||state.finished||current===state.attemptId)return;selectAttempt(current);remember();if(current)loadLesson()}async function readLearningMode(){if(!state.actorKey)return null;const expected=++modeReads;let value=null;const load=request(VIBE64_LEARNING_ROUTES.learningMode,{method:`GET`});modeLoad=load;try{value=normalizeLearningMode(await load)}catch{value=null}finally{if(modeLoad===load)modeLoad=null}if(expected!==modeReads)return mode.value;acceptMode(value);return value}async function modeWith(attemptId){if(modeLoad)await modeLoad.catch(()=>null);await Promise.resolve();return mode.value?.on&&mode.value.currentAttemptId===attemptId?mode.value:readLearningMode()}function currentPath(){return String(router?.currentRoute?.value?.fullPath||``)}function readModePlace(side){const path=readJson(`localStorage`,modePlaceKey(state.actorKey,side))?.path;return text$2(path)&&path.startsWith(`/app`)?path:``}function modePlace(value=mode.value){const saved=readModePlace(modeSide(value?.on));const pathname=saved.split(/[?#]/u)[0];if(saved&&!modeRedirect({mode:value,slug:projectSlugFromPathname(pathname),path:pathname}))return saved;return value?.on?learnHomePath(value):DEVELOP_HOME_PATH}async function setMode(on){if(!state.actorKey||state.modeBusy)return null;const expected=viewer;const path=currentPath();if(path.startsWith(`/app`))writeJson(`localStorage`,modePlaceKey(state.actorKey,modeSide(learnMode.value)),{path});state.modeBusy=`set`;state.error=``;try{const value=normalizeLearningMode(await request(VIBE64_LEARNING_ROUTES.learningMode,{method:`POST`,body:{on:on===true}}));if(!value)throw new Error(`The switch was not confirmed. Press L again.`);if(expected!==viewer)return null;modeReads+=1;acceptMode(value);if(!value.on)minimise();const target=modePlace(value);if(router&&target!==path)await router.push(target);if(value.on&&!value.currentAttemptId)openCourses(`courses`);pageActivity?.report(`learn-toggled`,{projectSlug:projectSlugFromPathname(currentPath())});return value}catch(cause){if(expected===viewer)state.error=String(cause?.message||`The switch was not confirmed. Press L again.`);return null}finally{if(state.modeBusy===`set`)state.modeBusy=``}}const toggleMode=()=>setMode(!learnMode.value);function selectAttempt(attemptId,stepId=``){lesson.value=null;state.attemptId=attemptId;state.stepId=text$2(stepId)?stepId:``;state.scroll=0;state.beat=0;lastSaved=``}function showNotice(value){state.notice=String(value||``)}function clearNotice(){state.notice=``}async function readAllPages(attemptId){const first=await request(VIBE64_LEARNING_ROUTES.lessonRead(attemptId),{method:`GET`});const count=Number.isSafeInteger(first?.page?.count)?Math.min(first.page.count,32):1;const steps=Array.isArray(first?.lesson?.steps)?first.lesson.steps:null;if(count<=1||!steps)return first;const bodies=new Map;for(let index=1;index<count;index++){const page=await request(`${VIBE64_LEARNING_ROUTES.lessonRead(attemptId)}?page=${index}`,{method:`GET`});for(const step of page?.lesson?.steps||[])if(typeof step?.bodyText===`string`)bodies.set(step.id,step.bodyText)}return{...first,lesson:{...first.lesson,steps:steps.map(step=>typeof step?.bodyText===`string`||!bodies.has(step?.id)?step:{...step,bodyText:bodies.get(step.id)})}}}function loadLesson(attemptId=state.attemptId){lessonLoad=readLesson(attemptId);return lessonLoad}async function readLesson(attemptId){if(!attemptId||!state.actorKey)return null;const expected=++reads;state.loading=true;state.error=``;try{const result=await readAllPages(attemptId);if(expected!==reads||attemptId!==state.attemptId)return null;const value=normalizeLesson(result);if(!value)throw new Error(result?.error||`This lesson could not be read. Refresh and try again.`);lesson.value=value;const known=id=>value.steps.some(step=>step.id===id);if(!known(state.stepId)){const saved=value.reader?.attemptId===void 0||value.reader?.attemptId===attemptId?value.reader:null;const passed=step=>stepStatus(value.results,step.id,value.passedStepIds)===`passed`;const unpassed=value.steps.some(passed)?value.steps.find(step=>step.required&&!passed(step)):null;state.stepId=saved&&known(saved.stepId)?saved.stepId:(unpassed||value.steps[0])?.id||``;state.scroll=saved&&known(saved.stepId)&&Number.isSafeInteger(saved.scroll)?saved.scroll:0;state.beat=0}remember();return value}catch(cause){if(expected===reads)state.error=String(cause?.message||`This lesson could not be read.`);return null}finally{if(expected===reads)state.loading=false}}async function show({surface,attemptId,stepId}={}){if(!state.actorKey)throw new Error(`Sign in before opening Courses.`);if(text$2(attemptId)||text$2(stepId))return openLesson({attemptId,stepId});state.open=true;state.minimised=false;state.hiddenBy=``;if(SURFACES.includes(surface))state.surface=surface;if(state.finished){state.finished=false;if(mode.value)acceptMode(mode.value)}remember();if(state.surface===`progress`||state.surface===`archived`)readPractice();return focus.value}const openCourses=surface=>show({surface});async function openLesson({attemptId,stepId}={}){if(!state.actorKey)throw new Error(`Sign in before opening a lesson.`);let value=state.modeRead?mode.value:await readLearningMode();if(!value?.on)value=await setMode(true);if(!value?.on)return null;minimise();const changed=text$2(attemptId)&&attemptId!==state.attemptId;if(text$2(attemptId)&&attemptId!==state.trialAttemptId)state.trialAttemptId=``;if(changed){state.finished=false;selectAttempt(attemptId,stepId)}else if(text$2(stepId)&&stepId!==state.stepId){if(steps.value.length)selectStep(stepId);else Object.assign(state,{stepId,beat:0})}remember();const here=String(router?.currentRoute?.value?.path||``);const home=!state.finished&&Boolean(value.practiceSlug)&&projectSlugFromPathname(here)===value.practiceSlug?here:value.lessonStage===`project`?learnHomePath(value):layout?.value?.studio&&here?here:learnHomePath(value);const target=withLesson(home);if(router&&currentPath()!==target)await router.push(target);await nextTick$1();layout?.value?.showProject?.();if(changed||!lesson.value&&!state.loading)await loadLesson();else if(!lesson.value)await lessonLoad;return focus.value}function minimise(by=``){if(!state.open)return;state.hiddenBy=by===`learner`?`learner`:``;state.open=false;state.minimised=true;flushReader()}const closeCourses=()=>minimise(`learner`);function hideLesson(){layout?.value?.hideLesson?.()}const toggleLesson=()=>layout?.value?.lessonShown?hideLesson():openLesson();async function showFinished(){if(!state.attemptId)return null;state.finished=Boolean(complete.value);return openLesson()}function finishedBy(before,attemptId){if(!before&&complete.value&&attemptId===state.attemptId)showFinished().catch(()=>{})}function selectStep(stepId,beat=0){if(!steps.value.some(step=>step.id===stepId)||stepId===state.stepId)return;state.stepId=stepId;state.scroll=0;state.beat=beat;remember();scheduleReaderSave()}function setScroll(scroll){const value=Math.max(0,Math.round(Number(scroll)||0));if(value===state.scroll)return;state.scroll=value;remember();scheduleReaderSave()}function scheduleReaderSave(){clearTimeout(saveTimer);saveTimer=setTimeout(flushReader,READER_SAVE_DELAY_MS)}function flushReader(){clearTimeout(saveTimer);saveTimer=null;if(!state.actorKey||!state.attemptId||!state.stepId||lesson.value?.attempt?.ended)return null;const body={stepId:state.stepId,scroll:state.scroll};const key=JSON.stringify([state.attemptId,body]);if(key===lastSaved)return null;lastSaved=key;return Promise.resolve(request(VIBE64_LEARNING_ROUTES.readerSave(state.attemptId),{method:`POST`,body})).catch(()=>{if(lastSaved===key)lastSaved=``})}async function stepAction(kind,route,stepId,extra={}){if(!state.attemptId||state.busy)return null;const attemptId=state.attemptId;const key=JSON.stringify([attemptId,kind,stepId,extra]);const requestId=pendingRequestId(key);const expected=viewer;const before=complete.value;state.busy=`${kind}:${stepId}`;state.error=``;try{const result=await request(route(attemptId),{method:`POST`,body:{stepId,...extra,requestId}});if(result?.ok===false)throw new Error(result.error||`The step result was not confirmed. Try again.`);pending.delete(key);if(expected===viewer&&attemptId===state.attemptId){await loadLesson(attemptId);finishedBy(before,attemptId)}return result}catch(cause){if(expected===viewer)state.error=String(cause?.message||`The step result was not confirmed. Try again.`);return null}finally{if(state.busy===`${kind}:${stepId}`)state.busy=``}}function exerciseStep(projectSlug){const value=lesson.value;const step=currentStep.value;const attempt=value?.attempt;if(!state.actorKey||!state.attemptId||state.open||!text$2(projectSlug)||!(value?.schemaVersion>=2)||attempt?.attemptId!==state.attemptId||attempt.ended||attempt.preparation?.phase!==`ready`||value.practiceProjectSlug!==projectSlug||step?.check?.kind!==`auto`||step.check.files?.length)return null;return{attemptId:state.attemptId,stepId:step.id}}function beginExercise(projectSlug){const target=exerciseStep(projectSlug);if(!target||exerciseObservations.size>=MAX_EXERCISE_OBSERVATIONS)return null;return Object.freeze({...target,projectSlug,actorKey:state.actorKey,viewer})}function exerciseCurrent(ticket){const target=ticket&&ticket.viewer===viewer&&ticket.actorKey===state.actorKey?exerciseStep(ticket.projectSlug):null;return Boolean(target&&target.attemptId===ticket.attemptId&&target.stepId===ticket.stepId)}async function finishExercise(ticket,{sessionId,instanceId,interactionId,requestId}={}){if(!exerciseCurrent(ticket)||!text$2(sessionId)||exerciseObservations.has(requestId))return null;exerciseObservations.add(requestId);const expected=viewer;const before=complete.value;try{const result=await request(VIBE64_LEARNING_ROUTES.stepObserve(ticket.attemptId),{method:`POST`,body:{stepId:ticket.stepId,observation:{control:`exercise-response`,exercise:{instanceId,interactionId,requestId},workspace:{projectSlug:ticket.projectSlug,sessionId,projectVisible:true,pane:`preview`,ready:true}}}});if(result?.ok===false)throw new Error(result.error||`The App press was not recorded. Press the App's button again.`);if(expected===viewer&&ticket.attemptId===state.attemptId){await loadLesson(ticket.attemptId);finishedBy(before,ticket.attemptId)}return result}catch(cause){if(expected===viewer)state.error=String(cause?.message||`The App press was not recorded. Press the App's button again.`);return null}finally{exerciseObservations.delete(requestId)}}function prepareExercise(projectSlug){if(!text$2(projectSlug)||!state.actorKey||!state.attemptId||lesson.value||state.loading)return null;return loadLesson(state.attemptId)}const runCheck=stepId=>stepAction(`check`,VIBE64_LEARNING_ROUTES.stepCheck,stepId);const answer=(stepId,selected)=>stepAction(`answer`,VIBE64_LEARNING_ROUTES.stepAnswer,stepId,{selected:[...selected].map(Number).sort((left,right)=>left-right)});const done=stepId=>stepAction(`done`,VIBE64_LEARNING_ROUTES.stepDone,stepId);const review=stepId=>stepAction(`review`,VIBE64_LEARNING_ROUTES.stepReview,stepId);const savedReview=stepId=>results.value.filter(result=>result?.stepId===stepId&&result.review).at(-1)||null;async function showMe(stepId=currentStep.value?.id){const step=steps.value.find(value=>value.id===stepId);if(step?.beats?.length){minimise();player.start(stepId);return{beats:true}}if(!step?.guide)throw new Error(`This step has nothing to show.`);minimise();return goTo(step.guide)}async function goTo(guide){let command=showMeCommand(guide,{projectSlug:lesson.value?.practiceProjectSlug||``});const navigator=browserNavigation?.value||null;if(navigator&&command.databaseView){if(!selectedSession(command.projectSlug)){await navigator({projectSlug:command.projectSlug});await waitForProjectView(command.projectSlug,selectedSession)}const sessionId=selectedSession(command.projectSlug);if(sessionId)command={...command,sessionId}}const navigateBrowser=navigator&&command.guide.filePath?async navigation=>{const focus=await navigator(navigation);await waitForProjectView(command.projectSlug);return focus}:navigator;return(runGuide||runTrainingGuideCommand)(command,{navigateBrowser,view:{openFile(path){const handle=projectView(command.projectSlug);return handle?handle.openFile(path)===true:false}}})}function projectView(projectSlug){const handle=colleagueView?.value;return projectSlug&&handle?.projectSlug===projectSlug&&handle.ready!==false&&typeof handle.openFile===`function`?handle:null}function selectedSession(projectSlug){const handle=colleagueView?.value;return projectSlug&&handle?.projectSlug===projectSlug&&text$2(handle.sessionId)?handle.sessionId:``}async function waitForProjectView(projectSlug,published=projectView){const deadline=now()+PROJECT_VIEW_WAIT_MS;while(!published(projectSlug)&&now()<deadline)await new Promise(resolve=>setTimeout(resolve,50))}function teachMe(stepId=currentStep.value?.id){if(!state.attemptId||!stepId)throw new Error(`Open a lesson step before asking Colleague to teach it.`);selectStep(stepId);colleagueRequest.value=Object.freeze({id:`teach-${now()}-${Math.random().toString(36).slice(2,8)}`,kind:`teach`,message:VIBE64_LEARNING_TEACH_MESSAGE,actorKey:state.actorKey,attemptId:state.attemptId,stepId});return colleagueRequest.value}function doItForMeKind(beat=player.beat.value){if(beat?.kind!==`do`)return``;if(beat.target===`send-message`)return`send`;if(beat.target===`file-opened`)return beat.path?`navigate`:``;if([`agent-finished`,`app-pressed`,`colleague-minimised`].includes(beat.target))return``;if(beat.target===`learning`)return`point`;if([`chat`,`courses`,`colleague`,`lesson`,`reload-preview`].includes(beat.target))return beat.target;const open=learningVocabulary.place(beat.target)?.open;return open?.pane||open?.route?`navigate`:`point`}async function doItForMe(){const beat=player.beat.value;const kind=doItForMeKind(beat);const projectSlug=lesson.value?.practiceProjectSlug||``;if(kind===`send`){const view=colleagueView?.value;if(!projectSlug||view?.projectSlug!==projectSlug||typeof view.sendLessonMessage!==`function`)return false;return await view.sendLessonMessage(beat.prompt)===true}if(kind===`navigate`)return goTo({target:beat.target===`file-opened`?`files`:beat.target,navigate:true,...beat.path?{filePath:beat.path}:{}});if(kind===`chat`){layout?.value?.showChat?.();await nextTick$1();globalThis.document?.querySelector?.(`[data-vibe64-guide="chat"] textarea`)?.focus();return true}if(kind===`courses`)return show();if(kind===`lesson`)return openLesson({stepId:currentStep.value?.id});if(kind===`colleague`){colleagueRequest.value=Object.freeze({id:`open-${now()}-${Math.random().toString(36).slice(2,8)}`,kind:`open`,actorKey:state.actorKey,attemptId:state.attemptId,stepId:currentStep.value?.id||``});return true}if(kind===`reload-preview`){await goTo({target:`preview`,navigate:true});await nextTick$1();const reload=globalThis.document?.querySelector?.(`[data-vibe64-guide="reload-preview"]`);if(!reload)return false;reload.click();return true}if(kind===`point`)return player.point();return false}function stuck(stepId=currentStep.value?.id){if(!state.attemptId||!stepId)throw new Error(`Open a lesson step before asking Colleague for help.`);colleagueRequest.value=Object.freeze({id:`stuck-${now()}-${Math.random().toString(36).slice(2,8)}`,kind:`stuck`,message:VIBE64_LEARNING_STUCK_MESSAGE,actorKey:state.actorKey,attemptId:state.attemptId,stepId});return colleagueRequest.value}function consumeColleagueRequest(id){if(colleagueRequest.value?.id!==id)return null;const value=colleagueRequest.value;colleagueRequest.value=null;return value}const openCurrent=()=>openLesson();async function opened(outcome){if(!outcome?.attemptId||outcome.current===false)return outcome;const value=await modeWith(outcome.attemptId);state.trialAttemptId=value&&value.currentAttemptId!==outcome.attemptId?outcome.attemptId:``;await openLesson({attemptId:outcome.attemptId});readPractice();return outcome}function admitted(attemptId){minimise();(async()=>{if(modeLoad)await modeLoad.catch(()=>null);await Promise.resolve();if(mode.value?.on&&mode.value.currentAttemptId===attemptId)await openLesson({attemptId})})().catch(()=>{})}async function startLesson(selection,start){confirmArchive.value=null;try{return await opened(await start(selection,{onAdmitted:admitted}))}catch(cause){if(cause?.code!==`VIBE64_TRAINING_LESSON_IN_PROGRESS`)throw cause;confirmArchive.value=Object.freeze({next:selection,start,current:Object.freeze({attemptId:String(cause.details?.attemptId||mode.value?.currentAttemptId||``),lessonTitle:String(cause.details?.lessonTitle||mode.value?.lessonTitle||mode.value?.lessonCode||``)})});return null}}function openOrientation(){if(state.actorKey)state.orientationRequested=true}function orientationAnswered(){state.orientationRequested=false}async function confirmArchiveAndStart(){const value=confirmArchive.value;if(!value)return null;confirmArchive.value=null;return opened(await value.start({...value.next,archiveCurrent:true},{onAdmitted:admitted}))}function cancelArchive(){confirmArchive.value=null}async function readRevision(){const result=await request(VIBE64_LEARNING_ROUTES.learning,{method:`GET`});if(result?.ok!==true||!Number.isSafeInteger(result.revision))throw new Error(result?.error||`Your saved lessons could not be read. Try again.`);return result.revision}async function attemptAction(kind,url,body=()=>({}),fallback=`The change was not confirmed. Try again.`){if(!state.actorKey||state.busy)return null;const expected=viewer;state.busy=kind;state.error=``;try{const result=await request(url,{method:`POST`,body:await body()});if(result?.ok!==true)throw new Error(result?.error||fallback);if(expected===viewer)await Promise.all([readLearningMode(),readPractice()]);return result}catch(cause){if(expected===viewer)state.error=String(cause?.message||fallback);return null}finally{if(state.busy===kind)state.busy=``}}const currentAttemptId=()=>mode.value?.currentAttemptId||``;function finish(summary=null){const attemptId=state.attemptId;if(!attemptId)return Promise.resolve(null);if(finishRun?.attemptId===attemptId)return finishRun.promise;const run={attemptId,summary,promise:attemptAction(`finish`,VIBE64_LEARNING_ROUTES.lessonFinish(attemptId),async()=>({expectedRevision:await readRevision()}),`Finishing the lesson was not confirmed. Try again.`).then(result=>{if(finishRun===run&&!result)finishRun=null;if(result&&state.trialAttemptId===attemptId)state.trialAttemptId=``;return result})};finishRun=run;return run.promise}const finishSummary=()=>finishRun?.attemptId&&finishRun.attemptId===state.attemptId?finishRun.summary:null;async function restart(){const attemptId=currentAttemptId();if(!attemptId)return null;const key=JSON.stringify([attemptId,`restart`]);const result=await attemptAction(`restart`,VIBE64_LEARNING_ROUTES.lessonRestart(attemptId),async()=>({requestId:pendingRequestId(key),expectedRevision:await readRevision()}),`Restarting the lesson was not confirmed. Try again.`);if(!result)return null;pending.delete(key);await opened({attemptId:mode.value?.currentAttemptId||result.active?.attemptId||``});return result}async function deleteAttempt(){const attemptId=currentAttemptId();if(!attemptId)return null;return attemptAction(`delete`,VIBE64_LEARNING_ROUTES.lessonDelete(attemptId),()=>({confirmed:true}),`Deleting the lesson was not confirmed. Try again.`)}const deleteArchived=attemptId=>attemptAction(`archive-delete:${attemptId}`,VIBE64_LEARNING_ROUTES.archiveDelete(attemptId),()=>({confirmed:true}),`Deleting the archived lesson was not confirmed. Try again.`);async function readPractice(){if(!state.actorKey)return null;const expected=++practiceReads;try{const value=normalizePractice(await request(VIBE64_LEARNING_ROUTES.practice,{method:`GET`}));if(expected===practiceReads)practice.value=value}catch(cause){if(expected===practiceReads)state.error=String(cause?.message||`Your lessons could not be read. Try again.`)}return practice.value}async function readNotes(){if(!state.actorKey)return null;const expected=viewer;notesState.loading=true;notesState.error=``;try{const result=await request(VIBE64_LEARNING_ROUTES.notes,{method:`GET`});if(result?.ok!==true||!result.notes)throw new Error(result?.error||`The notes could not be read.`);if(expected===viewer&&!(result.notes.revision<(notes.value?.revision??0)))notes.value=Object.freeze({...result.notes});return expected===viewer?notes.value:null}catch(cause){if(expected===viewer)notesState.error=String(cause?.message||`The notes could not be read.`);return null}finally{if(expected===viewer)notesState.loading=false}}async function writeNotes(kind,route,body){if(!state.actorKey||notesState.saving)return null;const expected=viewer;const expectedRevision=notes.value?.revision??0;const key=JSON.stringify([`notes`,kind,body.text??``,expectedRevision]);const requestId=pendingRequestId(key);notesState.saving=true;notesState.error=``;try{const result=await request(route,{method:`POST`,body:{...body,requestId,expectedRevision}});if(result?.ok!==true||!result.notes)throw new Error(result?.error||`The notes save was not confirmed. Try again.`);pending.delete(key);if(expected===viewer)notes.value=Object.freeze({...result.notes});return result}catch(cause){if(expected===viewer){notesState.error=String(cause?.message||`The notes save was not confirmed. Try again.`);if(cause?.code===`VIBE64_TRAINING_NOTES_CHANGED`){pending.delete(key);const message=notesState.error;await readNotes();notesState.error=message}}return null}finally{if(expected===viewer)notesState.saving=false}}function saveNotes(text){const value=String(text??``);if(!value||value.length>4e3){notesState.error=`Write between 1 and ${VIBE64_LEARNING_NOTES_MAX} characters, or clear the notes.`;return Promise.resolve(null)}return writeNotes(`update`,VIBE64_LEARNING_ROUTES.notes,{text:value})}const clearNotes=()=>writeNotes(`clear`,VIBE64_LEARNING_ROUTES.notesClear,{});function learnerChanged(payload={}){if(payload.reason===`notes`)return notes.value?readNotes():null;if(!state.actorKey)return null;if(payload.reason!==`steps`){readLearningMode();if(practice.value.loaded)readPractice()}if(state.attemptId&&(!payload.attemptId||payload.attemptId===state.attemptId)&&lesson.value)return loadLesson(state.attemptId);return null}return Object.freeze({state:readonly(state),get open(){return state.open},get coursesOpen(){return state.open},get minimised(){return state.minimised},get hiddenBy(){return state.hiddenBy},get surface(){return state.surface},get attemptId(){return state.attemptId},get stepId(){return currentStep.value?.id||``},get scroll(){return state.scroll},get complete(){return complete.value},get finished(){return state.finished},get mode(){return mode.value},get learnMode(){return learnMode.value},get lessonAttemptId(){return lessonAttemptId.value},get stepBarVisible(){return stepBarVisible.value},get aiRequired(){return aiRequired.value},get lessonTitle(){return mode.value?.currentAttemptId?mode.value.lessonTitle||mode.value.lessonCode||``:``},get practice(){return practice.value},get confirmArchive(){return confirmArchive.value},get lessonSwitchable(){return Boolean(layout?.value?.studio)},get lessonShown(){return Boolean(layout?.value?.lessonShown)},get notice(){return state.notice},get orientationRequested(){return state.orientationRequested},lesson,results,steps,currentStep,focus,colleagueRequest,notes,notesState:readonly(notesState),player,stepStatus:stepId=>stepStatus(results.value,stepId,lesson.value?.passedStepIds||[]),setViewer,show,openCourses,openLesson,hideLesson,toggleLesson,closeCourses,showFinished,finishSummary,minimise,selectStep,setScroll,flushReader,loadLesson,runCheck,answer,done,review,savedReview,reviewNote,showMe,teachMe,stuck,doItForMe,doItForMeKind,consumeColleagueRequest,learnerChanged,exerciseStep,beginExercise,exerciseCurrent,finishExercise,prepareExercise,readNotes,saveNotes,clearNotes,readLearningMode,setMode,toggleMode,modePlace,openCurrent,showNotice,clearNotice,startLesson,openOrientation,orientationAnswered,admitted,opened,confirmArchiveAndStart,cancelArchive,restart,finish,deleteAttempt,readPractice,deleteArchived})}function orientationSelection(catalogue,saved){if(catalogue?.ok!==true||!Array.isArray(catalogue.courses)||saved?.ok!==true||saved.available!==true||!Number.isSafeInteger(saved.revision))return null;const startable=catalogue.courses.filter(course=>course?.enabled===true&&text$2(course.orientation)&&(course.status===`released`||catalogue.canTryPreviews===true)&&course.lessons?.some(lesson=>lesson?.code===course.orientation&&lesson.status===`published`));const course=startable.find(value=>value.status===`released`)||startable[0];return course?Object.freeze({courseId:course.courseId,release:course.release,lessonCode:course.orientation,expectedRevision:saved.revision}):null}function openLessonLink(event,browser=globalThis){const link=event?.target?.closest?.(`a[href]`);if(!link||event.defaultPrevented||event.button>0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return false;let url;try{url=new URL(link.getAttribute(`href`),browser.location?.href)}catch{return false}if(!/^https?:$/u.test(url.protocol)||url.origin===browser.location?.origin)return false;event.preventDefault();browser.open?.(url.href,`_blank`,`noopener,noreferrer`);return true}function revealCurrentStep(list){const current=list?.querySelector?.(`[aria-current="step"]`);if(!current||!(list.scrollWidth>list.clientWidth))return false;const row=list.getBoundingClientRect();const item=current.getBoundingClientRect();if(item.left<row.left)list.scrollLeft-=row.left-item.left;else if(item.right>row.right)list.scrollLeft+=item.right-row.right;else return false;return true}function createPageActivity(){const listeners=new Set;return Object.freeze({report(name,detail={}){if(!learningVocabulary.events().has(name))throw new TypeError(`Unknown page activity: ${name}`);const event=Object.freeze({name,projectSlug:String(detail.projectSlug||``),sessionId:String(detail.sessionId||``),path:String(detail.path||``)});for(const listener of[...listeners])listener(event)},subscribe(listener){listeners.add(listener);return()=>listeners.delete(listener)}})}function usePageActivity(){const activity=inject$1(VIBE64_PAGE_ACTIVITY_KEY,null);return(name,detail)=>activity?.report(name,detail)}var _sfc_main$63={__name:`Vibe64AssistantShellContext`,props:{local:Boolean},setup(__props){if(__props.local)provide(VIBE64_ASSISTANT_VIEWER_KEY,Object.freeze({actorKey:`local`}));provide(VIBE64_ASSISTANT_HOST_KEY,shallowRef(null));const colleagueView=shallowRef(null);provide(VIBE64_COLLEAGUE_VIEW_KEY,colleagueView);provide(VIBE64_COLLEAGUE_PREVIEW_KEY,shallowRef(null));provide(VIBE64_COLLEAGUE_INTEGRATIONS_KEY,shallowRef(null));provide(VIBE64_COLLEAGUE_DATABASE_KEY,shallowRef(null));provide(VIBE64_COLLEAGUE_PLAN_KEY,shallowRef(null));const layout=shallowRef(null);provide(VIBE64_COLLEAGUE_LAYOUT_KEY,layout);const browserNavigation=shallowRef(null);provide(VIBE64_BROWSER_NAVIGATION_KEY,browserNavigation);const pageFocus=shallowRef(null);provide(VIBE64_PAGE_FOCUS_KEY,pageFocus);const pageActivity=createPageActivity();provide(VIBE64_PAGE_ACTIVITY_KEY,pageActivity);provide(VIBE64_LEARNING_KEY,createVibe64Learning({browserNavigation,colleagueView,layout,pageFocus,pageActivity,router:useRouter$1()}));provide(VIBE64_COLLEAGUE_LAUNCHER_KEY,shallowRef(null));return(_ctx,_cache)=>{return renderSlot(_ctx.$slots,`default`)}}};function projectConversationVoiceState({turns=[],status=`ready`,interimReply=null}={}){const messages=[];let streamingReply=null;for(const turn of turns){if(turn.user)messages.push({...turn.user,role:`user`,id:turn.user.messageId||`${turn.turnId}:user`});if(turn.assistant?.text){const reply={...turn.assistant,role:`assistant`,id:turn.assistant.outputId||`${turn.turnId}:assistant`};if(turn.pending||[`starting`,`inProgress`].includes(reply.status)){if(reply.origin===`application`)Object.assign(reply,{id:`${reply.id}:stream`,autonomous:true});streamingReply=reply}else messages.push(reply)}}return{messages,streamingReply:interimReply?{...interimReply,id:interimReply.outputId||interimReply.id}:streamingReply,status}}var VOICE_MAX_SYNTHESIS_TIMEOUT_MS=12e4;var VOICE_MAX_SPEECH_TEXT_CHARACTERS=4e3;var VOICE_MAX_SPEECH_CHUNK_CHARACTERS=280;var VOICE_SPEECH_EM_DASH_PAUSE_MS=140;var VOICE_SPEECH_SENTENCE_PAUSE_MS=220;var VOICE_SPEECH_LINE_PAUSE_MS=350;var VOICE_SPEECH_PARAGRAPH_PAUSE_MS=650;function speechTextFromAssistant(value=``,maximumCharacters=VOICE_MAX_SPEECH_TEXT_CHARACTERS){let omittedCode=false;let omittedTable=false;let text=String(value||``).slice(0,maximumCharacters*2);text=text.replace(/```([a-z0-9_-]*)[^\n]*\n[\s\S]*?```/giu,(_match,language)=>{omittedCode=true;return String(language||``).toLowerCase()===`sql`?` I put the SQL on screen. `:` I put the code on screen. `});text=text.replace(/(?:^|\n)\s*\|[^\n]+\|\s*(?=\n|$)/gu,()=>{omittedTable=true;return`
7
+ `});text=text.replace(/!\[[^\]]*\]\([^)]*\)/gu,` an image `).replace(/\[([^\]]+)\]\([^)]*\)/gu,`$1`).replace(/https?:\/\/\S+/giu,` a link `).replace(/`([^`\n]+)`/gu,`$1`).replace(/^[\t ]{0,3}#{1,6}[\t ]+/gmu,``);text=text.split(/\r?\n/u).map((line,index)=>{const marker=line.match(/^[\t ]*(?:[-*+]|\d+[.)])[\t ]+/u);return(index?marker?`
8
+
9
+ `:`
10
+ `:``)+line.slice(marker?.[0].length||0).replace(/_+/gu,` `).replace(/[*~>]/gu,``).replace(/[^\S\r\n]+/gu,` `).trim()}).join(``).replace(/\n{3,}/gu,`
11
+
12
+ `);if(omittedTable&&!/details (?:are|remain) in (?:the )?chat/iu.test(text))text=`${text}${text?` `:``}The details are in the chat.`;if(omittedCode&&!text)text=`I put the code on screen.`;return text.slice(0,maximumCharacters)}function speechPhrases(value=``){const text=String(value||``);const phrases=[];let start=0;const appendThrough=end=>{const phrase=text.slice(start,end).replace(/^[\t ]+|[\t ]+$/gu,``);if(phrase)phrases.push(phrase);start=end};for(let index=0;index<text.length;index+=1){const character=text[index];if(character===`
13
+ `){let end=index+1;while(/\s/u.test(text[end]||``))end+=1;appendThrough(end);index=end-1;continue}if([`—`,`–`].includes(character)){let end=index+1;while(/\s/u.test(text[end]||``))end+=1;if(!text.slice(index+1,end).includes(`
14
+ `))end=index+1;appendThrough(end);index=end-1;continue}if(![`.`,`!`,`?`].includes(character))continue;let end=index+1;while([`.`,`!`,`?`].includes(text[end]))end+=1;while([`"`,`'`,`”`,`’`,`»`,`)`,`]`].includes(text[end]))end+=1;if(end===text.length||/\s/u.test(text[end])){let whitespaceEnd=end;while(/\s/u.test(text[whitespaceEnd]||``))whitespaceEnd+=1;if(text.slice(end,whitespaceEnd).includes(`
15
+ `))end=whitespaceEnd;appendThrough(end);index=end-1}}appendThrough(text.length);return phrases}function speechPauseDurationMs(value=``){const raw=String(value||``).replace(/[\t ]+$/u,``);if(/\n\s*\n$/u.test(raw))return VOICE_SPEECH_PARAGRAPH_PAUSE_MS;if(raw.endsWith(`
16
+ `))return VOICE_SPEECH_LINE_PAUSE_MS;const text=raw.trim();if(/[.!?]+["'”’»)\]]*$/u.test(text))return VOICE_SPEECH_SENTENCE_PAUSE_MS;if(/[—–]+$/u.test(text))return VOICE_SPEECH_EM_DASH_PAUSE_MS;return 0}function splitSpeechText(value=``,maximumCharacters=280){const text=speechTextFromAssistant(value);const maximum=Number.isInteger(maximumCharacters)&&maximumCharacters>=80?maximumCharacters:280;if(!text)return[];const chunks=[];for(const phraseValue of speechPhrases(text)){let phrase=phraseValue;while(phrase.length>maximum){const boundary=Math.max(phrase.lastIndexOf(` `,maximum),phrase.lastIndexOf(`,`,maximum),phrase.lastIndexOf(`;`,maximum));const splitAt=boundary>=Math.floor(maximum*.55)?boundary:maximum;chunks.push(phrase.slice(0,splitAt).trim());phrase=phrase.slice(splitAt).replace(/^[\t ]+/u,``)}if(phrase)chunks.push(phrase)}return chunks}function takeStreamingSpeech(text=``,final=false,maximumCharacters=140){const source=String(text);if(/^\s*\|/u.test(source)){const lines=source.split(`
17
+ `);let consumed=0;for(const[index,line]of lines.entries()){if(line.trim()&&!/^\s*\|/u.test(line))break;if(index===lines.length-1&&!final)return null;consumed+=line.length+(index<lines.length-1?1:0)}if(consumed)return{text:speechTextFromAssistant(`The details are in the chat.${source.slice(0,consumed).match(/(?:\r?\n[\t ]*)+$/u)?.[0]||``}`),consumed}}let fence=false;let inline=false;let link=0;let target=false;let end=0;for(let index=0;index<source.length;index+=1){const character=source[index];if(source.slice(index,index+3)==="```"){fence=!fence;index+=2;continue}if(fence)continue;if(character==="`"){inline=!inline;continue}if(inline)continue;if(character===`[`)link+=1;if(character===`]`&&link){link-=1;if(source[index+1]===`(`)target=true;else if(index===source.length-1&&!final)break}if(target&&character===`)`)target=false;if(link||target)continue;if(!/\s/u.test(character))continue;let whitespaceEnd=index+1;while(/\s/u.test(source[whitespaceEnd]||``))whitespaceEnd+=1;const hasLineBreak=source.slice(index,whitespaceEnd).includes(`
18
+ `);if(!final&&hasLineBreak&&(whitespaceEnd===source.length||/^(?:[-*+]|\d+[.)]?)$/u.test(source.slice(whitespaceEnd))))break;const prefix=source.slice(0,index).trimEnd();if(/[.!?]["'”’»)\]]*$/u.test(prefix)||prefix.length>=Math.min(40,maximumCharacters/2)&&/[,;:—–]$/u.test(prefix)||prefix.length>=maximumCharacters||hasLineBreak){end=whitespaceEnd;break}index=whitespaceEnd-1}if(!end&&final)end=source.length;if(!end)return null;let raw=source.slice(0,end);if(/\n[\t ]*$/u.test(raw)&&/^(?:[-*+]|\d+[.)])[\t ]+/u.test(source.slice(end)))raw=`${raw.trimEnd()}\n\n`;if(final&&fence)raw=raw.replace(/```[\s\S]*$/u,` I put the code on screen. `);return{text:speechTextFromAssistant(raw),consumed:end}}var CAPTURE_WORKLET_NAME=`jskit-voice-capture`;var CAPTURE_FLUSH_TIMEOUT_MS=500;var CAPTURE_WORKLET_SOURCE=`
19
+ class AssistantVoiceCapture extends AudioWorkletProcessor {
20
+ constructor() {
21
+ super();
22
+ this.accepting = true;
23
+ this.muted = false;
24
+ this.frames = [];
25
+ this.length = 0;
26
+ this.port.onmessage = (event) => {
27
+ if (event.data?.type === "mute") {
28
+ this.muted = event.data.muted;
29
+ if (!event.data.preserveBuffered) {
30
+ this.frames = [];
31
+ this.length = 0;
32
+ }
33
+ return;
34
+ }
35
+ if (event.data?.type !== "flush") return;
36
+ this.accepting = false;
37
+ this.emit();
38
+ this.port.postMessage({ type: "flushed" });
39
+ };
40
+ }
41
+
42
+ emit() {
43
+ if (!this.length) return;
44
+ const samples = new Float32Array(this.length);
45
+ let offset = 0;
46
+ for (const frame of this.frames) {
47
+ samples.set(frame, offset);
48
+ offset += frame.length;
49
+ }
50
+ this.frames = [];
51
+ this.length = 0;
52
+ this.port.postMessage(samples, [samples.buffer]);
53
+ }
54
+
55
+ process(inputs) {
56
+ if (!this.accepting || this.muted) return true;
57
+ const input = inputs[0]?.[0];
58
+ if (!input?.length) return true;
59
+ this.frames.push(Float32Array.from(input));
60
+ this.length += input.length;
61
+ if (this.length >= 1024) this.emit();
62
+ return true;
63
+ }
64
+ }
65
+ registerProcessor("${CAPTURE_WORKLET_NAME}", AssistantVoiceCapture);
66
+ `;function float32ToPcm16ArrayBuffer(samples){const output=new ArrayBuffer(samples.length*2);const view=new DataView(output);for(let index=0;index<samples.length;index+=1){const sample=Math.max(-1,Math.min(1,Number(samples[index])||0));view.setInt16(index*2,sample<0?sample*32768:sample*32767,true)}return output}async function createMicrophoneCapture({onLevel,onPcm,targetSampleRate=16e3}={}){const AudioContextCtor=window.AudioContext||window.webkitAudioContext;if(!AudioContextCtor)throw new Error(`This browser does not support microphone audio processing.`);const stream=await navigator.mediaDevices.getUserMedia({audio:{autoGainControl:true,channelCount:1,echoCancellation:true,noiseSuppression:true,sampleRate:{ideal:targetSampleRate}},video:false});const stopTracks=()=>{for(const track of stream.getTracks())track.stop()};let context=null;try{context=new AudioContextCtor({latencyHint:`interactive`,sampleRate:targetSampleRate});await context.resume();if(Number(context.sampleRate)!==targetSampleRate)throw new Error(`This browser could not capture ${targetSampleRate} Hz microphone audio.`);const workletUrl=URL.createObjectURL(new Blob([CAPTURE_WORKLET_SOURCE],{type:`text/javascript`}));try{await context.audioWorklet.addModule(workletUrl)}finally{URL.revokeObjectURL(workletUrl)}const source=context.createMediaStreamSource(stream);const capture=new AudioWorkletNode(context,CAPTURE_WORKLET_NAME,{channelCount:1,numberOfInputs:1,numberOfOutputs:1,outputChannelCount:[1]});const silence=context.createGain();silence.gain.value=0;let finishFlush=null;let muted=false;let preserveBuffered=false;capture.port.onmessage=event=>{if(event.data?.type===`flushed`){finishFlush?.();return}if(muted&&!preserveBuffered)return;const samples=event.data instanceof Float32Array?event.data:new Float32Array(event.data);let squaredTotal=0;for(const sample of samples)squaredTotal+=sample*sample;onLevel?.(samples.length?Math.min(1,Math.sqrt(squaredTotal/samples.length)*7):0);onPcm?.(float32ToPcm16ArrayBuffer(samples))};source.connect(capture);capture.connect(silence);silence.connect(context.destination);let closePromise=null;const flush=()=>new Promise(resolve=>{let finished=false;const timeout=globalThis.setTimeout(()=>{if(!finished){finished=true;finishFlush=null;resolve()}},CAPTURE_FLUSH_TIMEOUT_MS);finishFlush=()=>{if(finished)return;finished=true;globalThis.clearTimeout(timeout);finishFlush=null;resolve()};try{capture.port.postMessage({type:`flush`})}catch{finishFlush()}});return Object.freeze({setMuted(value,{preserveBuffered:retainTail=false}={}){const nextPreserveBuffered=Boolean(value)&&retainTail;if(muted===Boolean(value)&&preserveBuffered===nextPreserveBuffered)return;const keepBuffered=nextPreserveBuffered||!value&&preserveBuffered;muted=Boolean(value);preserveBuffered=nextPreserveBuffered;for(const track of stream.getTracks())track.enabled=!muted;capture.port.postMessage({type:`mute`,muted,...keepBuffered?{preserveBuffered:true}:{}});if(muted)onLevel?.(0)},close(){if(!closePromise)closePromise=(async()=>{try{await flush()}finally{onLevel?.(0);capture.port.onmessage=null;try{source.disconnect();capture.disconnect();silence.disconnect()}finally{stopTracks();await context.close()}}})();return closePromise}})}catch(error){stopTracks();if(context&&context.state!==`closed`)await context.close().catch(()=>null);throw error}}var MOUTH_POSES=new Set([`closed`,`open`,`round`,`small`,`wide`]);function pcm16ArrayBufferToFloat32(buffer){const source=new DataView(buffer);const samples=new Float32Array(Math.floor(source.byteLength/2));for(let index=0;index<samples.length;index+=1)samples[index]=source.getInt16(index*2,true)/32768;return samples}function normalizeSpeechSegment(message={},sampleRate=22050){const sampleCount=Math.max(0,Math.floor(Number(message.sampleCount)||0));const durationMs=sampleCount?sampleCount/Math.max(1,Number(sampleRate)||22050)*1e3:Math.max(0,Number(message.durationMs)||0);return{cues:(Array.isArray(message.cues)?message.cues:[]).map(cue=>({atMs:Math.min(durationMs,Math.max(0,Number(cue?.atMs)||0)),level:Math.min(1,Math.max(0,Number(cue?.level)||0)),pose:MOUTH_POSES.has(String(cue?.pose||``))?String(cue.pose):`closed`})).sort((left,right)=>left.atMs-right.atMs),durationMs,remainingSamples:sampleCount,sampleCount,startedAt:null}}function visemeCueAtTime(segments=[],currentTime=0){const segment=segments.find(entry=>Number.isFinite(entry?.startedAt)&&currentTime>=entry.startedAt&&currentTime<=entry.startedAt+entry.durationMs/1e3);if(!segment)return null;const elapsedMs=Math.max(0,(currentTime-segment.startedAt)*1e3);let active=null;for(const cue of segment.cues){if(cue.atMs>elapsedMs)break;active=cue}return active}var INPUT_SAMPLE_RATE=16e3;var WEBSOCKET_OPEN=1;var microphoneOwner=null;var speechOwner=ref(null);function voiceTurnId(prefix=`turn`){return`${prefix}-${globalThis.crypto?.randomUUID?.()||`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}`}function resolveWebSocketUrl(value){const url=new URL(value,globalThis.location?.href);if(url.protocol===`http:`)url.protocol=`ws:`;if(url.protocol===`https:`)url.protocol=`wss:`;if(![`ws:`,`wss:`].includes(url.protocol)||url.username||url.password||url.hash)throw new TypeError(`Voice requires a ws:// or wss:// endpoint without embedded credentials.`);return url.toString()}function useVoiceTransport({socketUrl,speechEnabled=true,interruptSpeechOnListen=false,autoReconnect=false,voiceId=``,onPlayback}={}){const availableVoices=ref([]);const selectedVoice=ref(voiceId);const connectionState=ref(`idle`);const captureState=ref(`idle`);const speechState=ref(`idle`);const error=ref(``);const playbackBlocked=ref(false);const transcript=ref(``);const endpoint=ref(null);const completedUtterance=ref(null);const utteranceReset=ref(null);const utteranceStale=ref(null);const partialTranscript=ref(``);const muted=ref(false);const microphoneMuted=ref(false);const inputLevel=ref(0);const mouthLevel=ref(0);const mouthPose=ref(`closed`);const ready=ref(false);const reconnecting=ref(false);const bufferedSeconds=ref(0);const synthesisPending=ref(0);const activeListenTurnId=ref(``);const activeSpeechTurnId=ref(``);let socket=null;let connectedSocketPath=``;let connectPromise=null;let recoveryTimer;let recoveryAttempt=0;let recoveryWanted=false;let heartbeatTimer;let lastPongAt=0;let lastSpeechProgressAt=0;let synthesisTimeoutMs=2e4;let lastStartedSegmentIndex=-1;let microphone=null;let preserveBufferedMicrophone=false;const openingMicrophones=new Set;let microphoneClaim=null;const speechClaim=Symbol(`voice playback`);let pendingListenTurnId=``;let unmounted=false;let playbackContext=null;let playbackGain=null;let playbackAnalyser=null;let playbackFrame=0;let playbackPreparation=0;let nextPlaybackTime=0;let playbackEpoch=0;let playbackReceipt=null;let playbackQueue=Promise.resolve();let queuedPlaybackFrames=0;let speechStreamEnded=false;let speechSampleRate=22050;let receivingTurnId=``;let receivingSegment=null;const speechInputEnded=ref(true);let stopAfterSegment=Infinity;const streamedSegments=new Map;let pendingVisemeSegments=[];let scheduledVisemeSegments=[];const playbackSources=new Set;const speechOutputEnabled=computed(()=>{return(typeof speechEnabled===`function`?speechEnabled():speechEnabled?.value??speechEnabled)!==false&&!muted.value});const selectedSocketPath=computed(()=>typeof socketUrl===`function`?socketUrl():socketUrl?.value||socketUrl||``);const state=computed(()=>error.value?`error`:captureState.value!==`idle`?captureState.value:speechState.value!==`idle`?speechState.value:connectionState.value);const listening=computed(()=>captureState.value===`listening`);const speaking=computed(()=>speechState.value===`speaking`);const busy=computed(()=>captureState.value!==`idle`||connectionState.value===`connecting`||speechState.value===`thinking`);const canAppendSpeech=computed(()=>Boolean(activeSpeechTurnId.value)&&!speechInputEnded.value&&synthesisPending.value<2&&bufferedSeconds.value<4);function emitPlayback(phase,reason){const receipt=playbackReceipt;if(!receipt||receipt.terminal||phase===`started`&&receipt.started)return;if(phase===`started`)receipt.started=true;else receipt.terminal=true;try{Promise.resolve(onPlayback?.({turnId:receipt.turnId,phase,...reason?{reason}:{}})).catch(()=>{})}catch{}}function observePlaybackStart(source){if(!source.voiceCancelled&&playbackContext.state===`running`&&playbackContext.currentTime>=source.voiceStartsAt)emitPlayback(`started`)}function setError(message=``,reason=`playback-error`){pendingListenTurnId=``;endpoint.value=null;activeListenTurnId.value=``;closeMicrophone().catch(()=>null);stopPlayback(`failed`,reason);error.value=String(message||`Voice could not continue.`);captureState.value=`idle`;connectionState.value=`idle`}function scheduleRecovery(){if(!autoReconnect||unmounted||!recoveryWanted||recoveryTimer)return;if(recoveryAttempt>=5){reconnecting.value=false;return}reconnecting.value=true;recoveryTimer=setTimeout(()=>{recoveryTimer=null;recoveryAttempt+=1;connect({recovery:true}).catch(()=>scheduleRecovery())},Math.min(8e3,750*2**recoveryAttempt)+Math.floor(Math.random()*250))}function connectionLost(message){message||=activeListenTurnId.value||pendingListenTurnId?`Voice connection was interrupted. Your unfinished recording needs review; use Talk to resume.`:`Voice connection was interrupted. The answer remains in chat; use Talk to resume.`;const wasActive=Boolean(activeListenTurnId.value||pendingListenTurnId||activeSpeechTurnId.value||reconnecting.value);setError(message,`disconnected`);disconnect({preserveError:true});recoveryWanted=autoReconnect&&wasActive;scheduleRecovery()}function heartbeat(){if(!activeListenTurnId.value&&!activeSpeechTurnId.value){lastPongAt=Date.now();return}if(Date.now()-lastPongAt>12e3){connectionLost();return}if(activeSpeechTurnId.value&&synthesisPending.value&&Date.now()-lastSpeechProgressAt>synthesisTimeoutMs){connectionLost(`Speech generation stalled. The answer remains in chat; use Talk to resume.`);return}if(socket?.readyState===WEBSOCKET_OPEN)sendControl({type:`ping`,turnId:`heartbeat`})}function sendControl(payload){if(socket?.readyState!==WEBSOCKET_OPEN)throw new Error(`Voice is not connected.`);socket.send(JSON.stringify(payload))}async function closeMicrophone(){const current=microphone;const claim=microphoneClaim;microphone=null;inputLevel.value=0;try{await current?.close?.()}finally{if(microphoneOwner===claim)microphoneOwner=null}}function stopMouthMeter(){if(playbackFrame){cancelAnimationFrame(playbackFrame);playbackFrame=0}mouthLevel.value=0;mouthPose.value=`closed`}function startMouthMeter(){if(playbackFrame||!playbackAnalyser)return;const samples=new Float32Array(playbackAnalyser.fftSize);const spectrum=new Uint8Array(playbackAnalyser.frequencyBinCount);const averageBand=(fromHz,toHz)=>{const binWidth=playbackContext.sampleRate/playbackAnalyser.fftSize;const start=Math.max(0,Math.floor(fromHz/binWidth));const end=Math.min(spectrum.length,Math.ceil(toHz/binWidth));let total=0;for(let index=start;index<end;index+=1)total+=spectrum[index];return total/Math.max(1,end-start)};const update=()=>{for(const source of playbackSources)observePlaybackStart(source);bufferedSeconds.value=Math.max(0,nextPlaybackTime-playbackContext.currentTime);playbackAnalyser.getFloatTimeDomainData(samples);playbackAnalyser.getByteFrequencyData(spectrum);let sum=0;for(const sample of samples)sum+=sample*sample;const level=Math.min(1,Math.sqrt(sum/samples.length)*7);scheduledVisemeSegments=scheduledVisemeSegments.filter(segment=>playbackContext.currentTime<=segment.startedAt+segment.durationMs/1e3+.5);const viseme=visemeCueAtTime(scheduledVisemeSegments,playbackContext.currentTime);mouthLevel.value=viseme?Math.max(level,viseme.level):level;if(viseme?.pose===`closed`||!viseme&&level<.035)mouthPose.value=`closed`;else if(viseme)mouthPose.value=viseme.pose;else{const low=averageBand(120,700);const middle=averageBand(700,2100);const high=averageBand(2100,4800);if(level>.63)mouthPose.value=`open`;else if(low>(middle+high)*.72)mouthPose.value=`round`;else if(middle+high>low*1.55)mouthPose.value=`wide`;else mouthPose.value=`small`}if(speaking.value||playbackSources.size)playbackFrame=requestAnimationFrame(update);else stopMouthMeter()};playbackFrame=requestAnimationFrame(update)}async function preparePlayback(){const AudioContextCtor=window.AudioContext||window.webkitAudioContext;if(!AudioContextCtor){playbackBlocked.value=true;throw new Error(`This browser does not support streamed audio playback.`)}if(!playbackContext||playbackContext.state===`closed`){playbackContext=new AudioContextCtor({latencyHint:`interactive`});playbackGain=playbackContext.createGain();playbackAnalyser=playbackContext.createAnalyser();playbackAnalyser.fftSize=1024;playbackAnalyser.smoothingTimeConstant=.58;playbackGain.connect(playbackAnalyser);playbackAnalyser.connect(playbackContext.destination)}playbackGain.gain.value=speechOutputEnabled.value?1:0;const context=playbackContext;const preparation=++playbackPreparation;try{const resumed=context.resume();if(preparation===playbackPreparation&&context.state!==`running`)playbackBlocked.value=true;await resumed;if(context.state!==`running`)throw new Error(`Sound is blocked by this browser.`);if(preparation===playbackPreparation&&!unmounted)playbackBlocked.value=false}catch(cause){if(preparation!==playbackPreparation&&context===playbackContext&&context.state===`running`&&!unmounted)return;if(preparation===playbackPreparation&&!unmounted)playbackBlocked.value=true;throw cause}}function finishPlaybackWhenDrained(){if(!activeSpeechTurnId.value||!speechStreamEnded||playbackSources.size||queuedPlaybackFrames)return;if(playbackReceipt?.started)emitPlayback(`completed`);else emitPlayback(`failed`,`playback-error`);activeSpeechTurnId.value=``;speechState.value=`idle`;if(speechOwner.value===speechClaim)speechOwner.value=null;stopMouthMeter()}function claimVisemeTiming(sampleCount,startsAt){let remaining=sampleCount;let offsetSamples=0;while(remaining>0&&pendingVisemeSegments.length){const segment=pendingVisemeSegments[0];if(!Number.isFinite(segment.startedAt)){segment.startedAt=startsAt+offsetSamples/speechSampleRate;scheduledVisemeSegments.push(segment)}const consumed=Math.min(remaining,segment.remainingSamples);segment.remainingSamples-=consumed;remaining-=consumed;offsetSamples+=consumed;if(segment.remainingSamples<=0)pendingVisemeSegments.shift()}}async function schedulePcm(buffer,epoch=playbackEpoch,segment=null){if(epoch!==playbackEpoch||segment&&segment.index>stopAfterSegment)return;await preparePlayback();if(epoch!==playbackEpoch)return;if(segment&&segment.index>stopAfterSegment)return;const samples=pcm16ArrayBufferToFloat32(buffer);if(!samples.length)return;const audioBuffer=playbackContext.createBuffer(1,samples.length,speechSampleRate);audioBuffer.copyToChannel(samples,0);const source=playbackContext.createBufferSource();source.buffer=audioBuffer;source.voiceSegment=segment;source.connect(playbackGain);const startsAt=Math.max(playbackContext.currentTime+.025,nextPlaybackTime);nextPlaybackTime=startsAt+audioBuffer.duration;source.voiceStartsAt=startsAt;source.voiceEndsAt=nextPlaybackTime;if(segment){if(!Number.isFinite(segment.startedAt)){segment.startedAt=startsAt;if(segment.metadata)scheduledVisemeSegments.push({...segment.metadata,startedAt:startsAt})}}else claimVisemeTiming(samples.length,startsAt);bufferedSeconds.value=Math.max(0,nextPlaybackTime-playbackContext.currentTime);playbackSources.add(source);speechState.value=`speaking`;source.onended=()=>{source.disconnect();if(epoch!==playbackEpoch)return;if(!source.voiceCancelled&&playbackContext.state===`running`)emitPlayback(`started`);playbackSources.delete(source);bufferedSeconds.value=playbackSources.size?Math.max(0,nextPlaybackTime-playbackContext.currentTime):0;if(!playbackSources.size)speechState.value=`thinking`;finishPlaybackWhenDrained()};source.start(startsAt);startMouthMeter()}function enqueuePcm(buffer){const epoch=playbackEpoch;const segment=receivingSegment;queuedPlaybackFrames+=1;playbackQueue=playbackQueue.then(()=>schedulePcm(buffer,epoch,segment)).catch(playbackError=>{if(epoch===playbackEpoch)setError(playbackError?.message||playbackError)}).finally(()=>{if(epoch!==playbackEpoch)return;queuedPlaybackFrames-=1;finishPlaybackWhenDrained()})}function stopPlayback(phase=`interrupted`,reason=`cancelled`){emitPlayback(phase,reason);playbackEpoch+=1;activeSpeechTurnId.value=``;speechState.value=`idle`;if(speechOwner.value===speechClaim)speechOwner.value=null;playbackQueue=Promise.resolve();queuedPlaybackFrames=0;for(const source of playbackSources)try{source.voiceCancelled=true;source.stop()}catch{}playbackSources.clear();nextPlaybackTime=0;speechStreamEnded=true;speechInputEnded.value=true;stopAfterSegment=Infinity;bufferedSeconds.value=0;synthesisPending.value=0;synthesisTimeoutMs=2e4;lastStartedSegmentIndex=-1;receivingTurnId=``;receivingSegment=null;streamedSegments.clear();pendingVisemeSegments=[];scheduledVisemeSegments=[];stopMouthMeter()}function handleControlMessage(message={}){const type=String(message.type||``);if(type===`pong`){lastPongAt=Date.now();return}if(type===`voice.ready`){availableVoices.value=Array.isArray(message.voices)?message.voices:[];if(!availableVoices.value.some(voice=>voice.id===selectedVoice.value))selectedVoice.value=message.defaultVoice||``;lastPongAt=Date.now();clearInterval(heartbeatTimer);heartbeatTimer=setInterval(heartbeat,4e3);reconnecting.value=false;recoveryWanted=false;recoveryAttempt=0;ready.value=true;error.value=``;connectionState.value=`idle`;return}if(type===`transcript.partial`&&message.turnId===activeListenTurnId.value){endpoint.value=null;partialTranscript.value=String(message.text||``);transcript.value=partialTranscript.value;return}if(type===`transcript.endpoint`&&message.turnId===activeListenTurnId.value){endpoint.value={turnId:message.turnId,revision:message.revision,text:String(message.text||``)};return}if([`transcript.reset`,`transcript.stale`].includes(type)&&message.turnId===activeListenTurnId.value){endpoint.value=null;if(type===`transcript.reset`){utteranceReset.value={turnId:message.turnId,revision:message.revision};transcript.value=``;partialTranscript.value=``}else utteranceStale.value={turnId:message.turnId,revision:message.revision};return}if(type===`transcript.final`&&message.turnId===activeListenTurnId.value){inputLevel.value=0;transcript.value=String(message.text||``);partialTranscript.value=``;endpoint.value=null;if(message.continuous)completedUtterance.value={text:transcript.value,turnId:message.turnId,revision:message.revision};else{activeListenTurnId.value=``;captureState.value=`idle`}return}if(type===`speech.start`){receivingTurnId=String(message.turnId||``);receivingSegment=null;if(!message.turnId||message.turnId!==activeSpeechTurnId.value)return;speechSampleRate=Number(message.sampleRate)||22050;speechStreamEnded=false;speechState.value=`thinking`;nextPlaybackTime=0;return}if(type===`speech.segment.start`&&message.turnId===activeSpeechTurnId.value){if(!speechStreamEnded&&Number.isSafeInteger(message.segmentIndex)&&message.segmentIndex>lastStartedSegmentIndex){lastStartedSegmentIndex=message.segmentIndex;synthesisTimeoutMs=2e4;if(Number.isSafeInteger(message.synthesisTimeoutMs)&&message.synthesisTimeoutMs>2e4&&message.synthesisTimeoutMs<=12e4){synthesisTimeoutMs=message.synthesisTimeoutMs;lastSpeechProgressAt=Date.now()}}receivingSegment={index:message.segmentIndex};streamedSegments.set(message.segmentIndex,receivingSegment);return}if(type===`speech.chunk.end`&&message.turnId===activeSpeechTurnId.value){synthesisTimeoutMs=2e4;lastSpeechProgressAt=Date.now();synthesisPending.value=Math.max(0,synthesisPending.value-1);return}if(type===`speech.segment`&&message.turnId===activeSpeechTurnId.value&&!speechStreamEnded){const segment=normalizeSpeechSegment(message,speechSampleRate);const streamed=streamedSegments.get(message.segmentIndex);if(streamed){streamed.metadata=segment;if(Number.isFinite(streamed.startedAt))scheduledVisemeSegments.push({...segment,startedAt:streamed.startedAt});streamedSegments.delete(message.segmentIndex)}else if(segment.sampleCount)pendingVisemeSegments.push(segment);return}if(type===`speech.end`&&message.turnId===activeSpeechTurnId.value){speechStreamEnded=true;finishPlaybackWhenDrained();return}if(type===`busy`||type===`error`){const turnId=String(message.turnId||``);if(turnId&&turnId!==activeListenTurnId.value&&turnId!==activeSpeechTurnId.value)return;setError(String(message.message||(type===`busy`?`Voice is busy. Try again shortly.`:`Voice service could not continue.`)))}}function handleSocketMessage(event){if(event.data instanceof ArrayBuffer){if(speechOutputEnabled.value&&activeSpeechTurnId.value&&receivingTurnId===activeSpeechTurnId.value&&!speechStreamEnded){synthesisTimeoutMs=2e4;lastSpeechProgressAt=Date.now();enqueuePcm(event.data)}return}let message;try{message=JSON.parse(String(event.data||``))}catch{setError(`Voice service sent an invalid response.`);return}handleControlMessage(message)}function disconnect({preserveError=false}={}){clearInterval(heartbeatTimer);const current=socket;socket=null;connectedSocketPath=``;connectPromise=null;ready.value=false;current?.close?.(1e3,`Voice client closed`);connectionState.value=`idle`;if(!preserveError)error.value=``}async function connect({recovery=false}={}){if(!recovery){clearTimeout(recoveryTimer);recoveryTimer=null;recoveryAttempt=0;recoveryWanted=false;reconnecting.value=false}const path=selectedSocketPath.value;if(!path)throw new Error(`Voice requires an available conversation.`);if(connectedSocketPath===path&&socket?.readyState===WEBSOCKET_OPEN&&ready.value)return true;if(connectedSocketPath===path&&connectPromise)return connectPromise;disconnect({preserveError:recovery});connectionState.value=`connecting`;if(!recovery)error.value=``;ready.value=false;connectedSocketPath=path;const nextSocket=new WebSocket(resolveWebSocketUrl(path));socket=nextSocket;nextSocket.binaryType=`arraybuffer`;connectPromise=new Promise((resolve,reject)=>{const timeout=setTimeout(()=>{reject(new Error(`Voice service took too long to connect.`));nextSocket.close()},8e3);const onReady=event=>{if(event.data instanceof ArrayBuffer)return;try{const message=JSON.parse(String(event.data||``));if(![`voice.ready`,`error`,`busy`].includes(message.type))return;clearTimeout(timeout);nextSocket.removeEventListener(`message`,onReady);if(message.type===`voice.ready`)resolve(true);else reject(new Error(message.message||`Voice could not connect. Try again.`))}catch{}};nextSocket.addEventListener(`message`,onReady);nextSocket.addEventListener(`error`,()=>{clearTimeout(timeout);reject(new Error(`Voice service could not be reached.`))},{once:true});nextSocket.addEventListener(`close`,()=>{clearTimeout(timeout);reject(new Error(`Voice service closed while connecting.`))},{once:true})});nextSocket.addEventListener(`message`,event=>{if(socket===nextSocket)handleSocketMessage(event)});nextSocket.addEventListener(`close`,()=>{if(socket!==nextSocket)return;socket=null;connectPromise=null;ready.value=false;clearInterval(heartbeatTimer);if(pendingListenTurnId||![`idle`,`error`].includes(state.value))connectionLost()});try{return await connectPromise}catch(connectionError){if(socket===nextSocket){if(!recovery)setError(connectionError?.message||connectionError);disconnect({preserveError:true})}throw connectionError}}async function startListening({continuous=false}={}){if(unmounted||pendingListenTurnId||activeListenTurnId.value)return false;if(microphoneOwner&&microphoneOwner!==microphoneClaim){error.value=`Finish the recording in the other conversation before starting this microphone.`;return false}microphoneClaim=Symbol(`voice microphone`);microphoneOwner=microphoneClaim;preserveBufferedMicrophone=false;const turnId=voiceTurnId(`listen`);pendingListenTurnId=turnId;if(interruptSpeechOnListen)stopSpeaking();captureState.value=`connecting`;error.value=``;try{await connect();if(pendingListenTurnId!==turnId)return false;captureState.value=`opening`;let capture;try{const opening=createMicrophoneCapture({onLevel(level){if(activeListenTurnId.value===turnId&&!microphoneMuted.value)inputLevel.value=Number(level)||0},onPcm(frame){if((!microphoneMuted.value||preserveBufferedMicrophone)&&socket?.readyState===WEBSOCKET_OPEN&&activeListenTurnId.value===turnId){if(socket.bufferedAmount>32768){connectionLost(`The microphone connection fell behind. Review the unfinished recording before sending.`);return}socket.send(frame)}},targetSampleRate:INPUT_SAMPLE_RATE});openingMicrophones.add(opening);try{capture=await opening}finally{openingMicrophones.delete(opening)}}catch(microphoneError){if(pendingListenTurnId!==turnId)return false;setError([`NotAllowedError`,`PermissionDeniedError`].includes(microphoneError?.name)?`Microphone access was denied. Allow it in your browser to talk to the assistant.`:`The microphone could not be opened on this device.`);return false}if(pendingListenTurnId!==turnId){await capture.close();return false}microphone=capture;microphone.setMuted(microphoneMuted.value);activeListenTurnId.value=turnId;transcript.value=``;partialTranscript.value=``;try{endpoint.value=null;completedUtterance.value=null;sendControl({sampleRate:INPUT_SAMPLE_RATE,turnId,type:`listen.start`,...continuous?{continuous:true}:{}});captureState.value=`listening`}catch(controlError){activeListenTurnId.value=``;await closeMicrophone();throw controlError}return true}catch(startError){if(pendingListenTurnId!==turnId)return false;setError(startError?.message||startError);throw startError}finally{if(pendingListenTurnId===turnId)pendingListenTurnId=``}}function finishUtterance(candidate,{discard=false}={}){if(candidate!==endpoint.value||candidate?.turnId!==activeListenTurnId.value)return false;sendControl({turnId:candidate.turnId,revision:candidate.revision,type:discard?`listen.discard`:`listen.commit`});endpoint.value=null;return true}async function stopListening(){if(!activeListenTurnId.value||!microphone)return;const turnId=activeListenTurnId.value;captureState.value=`transcribing`;await closeMicrophone();if(activeListenTurnId.value!==turnId)return;sendControl({turnId,type:`listen.stop`})}async function speak(text,turnId=voiceTurnId(`speak`),{stream=false}={}){const speechText=speechTextFromAssistant(text);if(unmounted||!speechOutputEnabled.value||!speechText)return false;if(activeSpeechTurnId.value&&socket?.readyState===WEBSOCKET_OPEN)sendControl({turnId:activeSpeechTurnId.value,type:`cancel`});stopPlayback();const epoch=playbackEpoch;playbackReceipt={turnId,started:false,terminal:false};activeSpeechTurnId.value=turnId;speechState.value=`thinking`;try{await preparePlayback();if(epoch!==playbackEpoch)return false;await connect();if(epoch!==playbackEpoch)return false;if(speechOwner.value)await new Promise(resolve=>{const unwatch=watch([speechOwner,activeSpeechTurnId],()=>{if(epoch!==playbackEpoch||!speechOwner.value){if(epoch===playbackEpoch)speechOwner.value=speechClaim;unwatch();resolve()}},{flush:`sync`})});else speechOwner.value=speechClaim;if(epoch!==playbackEpoch)return false;speechState.value=`thinking`;speechInputEnded.value=!stream;synthesisPending.value=1;lastSpeechProgressAt=Date.now();sendControl({text:speechText,turnId,type:`speak.start`,...stream?{stream:true}:{},...selectedVoice.value?{voiceId:selectedVoice.value}:{}});return true}catch(speechError){if(epoch!==playbackEpoch)return false;stopPlayback(`failed`,`playback-error`);speechState.value=`idle`;throw speechError}}function appendSpeech(text){if(!canAppendSpeech.value)return false;const speechText=speechTextFromAssistant(text);if(!speechText)return false;if(!synthesisPending.value)lastSpeechProgressAt=Date.now();synthesisPending.value+=1;sendControl({text:speechText,turnId:activeSpeechTurnId.value,type:`speak.append`});return true}function endSpeech(){if(!activeSpeechTurnId.value||speechInputEnded.value)return;speechInputEnded.value=true;sendControl({turnId:activeSpeechTurnId.value,type:`speak.end`})}function finishCurrentPhrase(){if(!activeSpeechTurnId.value)return;emitPlayback(`interrupted`,`cancelled`);const now=playbackContext?.currentTime||0;const current=[...playbackSources].find(source=>source.voiceEndsAt>now);if(!current?.voiceSegment){stopSpeaking();return}stopAfterSegment=current.voiceSegment.index;speechInputEnded.value=true;for(const source of[...playbackSources]){if(source.voiceSegment?.index<=stopAfterSegment)continue;source.voiceCancelled=true;source.stop();playbackSources.delete(source)}nextPlaybackTime=Math.max(now,...[...playbackSources].map(source=>source.voiceEndsAt));bufferedSeconds.value=Math.max(0,nextPlaybackTime-now);sendControl({type:`speak.stop-after`,turnId:activeSpeechTurnId.value,segmentIndex:stopAfterSegment})}function stopSpeaking(reason=`cancelled`){const turnId=activeSpeechTurnId.value;const pending=turnId&&!ready.value&&!activeListenTurnId.value&&!pendingListenTurnId;stopPlayback(`interrupted`,reason);if(turnId&&socket?.readyState===WEBSOCKET_OPEN)sendControl({turnId,type:`cancel`});if(pending)disconnect()}async function cancelListening(){const pending=pendingListenTurnId&&!activeSpeechTurnId.value&&!ready.value;pendingListenTurnId=``;const turnId=activeListenTurnId.value;endpoint.value=null;activeListenTurnId.value=``;captureState.value=`idle`;partialTranscript.value=``;transcript.value=``;try{if(turnId&&socket?.readyState===WEBSOCKET_OPEN)sendControl({turnId,type:`cancel`})}finally{const closing=closeMicrophone();if(pending)disconnect();await closing}}async function cancel(){const closing=cancelListening();stopSpeaking();await closing}async function close(){recoveryWanted=false;reconnecting.value=false;clearTimeout(recoveryTimer);recoveryTimer=null;const closing=cancel();disconnect();await Promise.all([closing,...[...openingMicrophones].map(opening=>opening.then(capture=>capture.close(),()=>{}))])}function toggleMuted(){muted.value=!muted.value}function setMicrophoneMuted(value,{preserveBuffered=false}={}){microphoneMuted.value=Boolean(value);preserveBufferedMicrophone=microphoneMuted.value&&preserveBuffered;microphone?.setMuted(microphoneMuted.value,{preserveBuffered});if(microphoneMuted.value)inputLevel.value=0}watch(speechOutputEnabled,enabled=>{if(playbackGain)playbackGain.gain.value=enabled?1:0;if(!enabled&&activeSpeechTurnId.value)stopSpeaking(`muted`)},{flush:`sync`});watch(selectedSocketPath,()=>{transcript.value=``;partialTranscript.value=``;close().catch(()=>null)},{flush:`sync`});function pauseForPageExit(){if(activeListenTurnId.value||pendingListenTurnId||activeSpeechTurnId.value)setError(`Voice paused when this page was suspended. Review any unfinished words and use Talk to resume.`);recoveryWanted=false;reconnecting.value=false;clearTimeout(recoveryTimer);recoveryTimer=null;disconnect({preserveError:true})}const page=globalThis.window||globalThis;page.addEventListener?.(`pagehide`,pauseForPageExit);onScopeDispose(()=>{page.removeEventListener?.(`pagehide`,pauseForPageExit);unmounted=true;clearTimeout(recoveryTimer);clearInterval(heartbeatTimer);pendingListenTurnId=``;activeListenTurnId.value=``;closeMicrophone().catch(()=>null);stopPlayback();disconnect();playbackContext?.close?.().catch(()=>null);playbackContext=null});return{availableVoices,selectedVoice,activeListenTurnId,activeSpeechTurnId,appendSpeech,bufferedSeconds,canAppendSpeech,endSpeech,captureState,completedUtterance,utteranceReset,utteranceStale,endpoint,finishUtterance,finishCurrentPhrase,busy,cancel,cancelListening,close,connect,error,inputLevel,listening,mouthLevel,mouthPose,microphoneMuted,muted,partialTranscript,playbackBlocked,preparePlayback,ready,reconnecting,speak,speaking,startListening,setMicrophoneMuted,state,stopListening,stopSpeaking,toggleMuted,transcript}}var ACTIVITY_SPEECH_CHARACTERS=300;function latestConversationFinalNarrationEntry(turns=[]){const conversationTurns=Array.isArray(turns)?turns:[];for(let turnIndex=conversationTurns.length-1;turnIndex>=0;turnIndex-=1){const turn=conversationTurns[turnIndex];const turnId=String(turn?.turnId||turnIndex+1).trim();const finalText=String(turn?.assistant?.text||``).trim();if(finalText&&turn.assistant.status!==`inProgress`)return{key:`final:${turnId}`,kind:`final`,text:finalText}}return null}function createConversationNarrationTracker(){let primed=false;let activityTurnId=``;const finalKeys=new Set;const activityText=new Map;function reset(){primed=false;activityTurnId=``;finalKeys.clear();activityText.clear()}function observe(turns=[],{includeFinals=false,settled=false,enabled=true,vocalizeThinking=false,vocalizeInterimTurns=false}={}){const conversationTurns=Array.isArray(turns)?turns:[];const turn=conversationTurns.at(-1);const turnId=String(turn?.turnId||conversationTurns.length).trim();if(turnId!==activityTurnId){activityTurnId=turnId;activityText.clear()}const activity=(Array.isArray(turn?.messages)?turn.messages:[]).filter(message=>[`thinking`,`commentary`].includes(message?.role));if(!activity.length)activity.push(...[...Array.isArray(turn?.thinking)?turn.thinking:[],...Array.isArray(turn?.commentary)?turn.commentary:[]].sort((left,right)=>String(left?.at||``).localeCompare(String(right?.at||``))));const entries=[];for(const[index,message]of activity.entries()){const kind=message?.role;if(![`thinking`,`commentary`].includes(kind)||message.status===`inProgress`)continue;const key=`${turnId}:${kind}:${message.messageId||index}`;const rawText=String(message.text||``);const phrases=speechPhrases(speechTextFromAssistant(rawText,Math.max(rawText.length,VOICE_MAX_SPEECH_TEXT_CHARACTERS)));const fullText=phrases.join(` `);if(!(settled||index<activity.length-1||Boolean(turn?.assistant))&&!speechPauseDurationMs(phrases.at(-1)))phrases.pop();const text=phrases.join(` `);const previous=activityText.get(key)||``;if(text.length<previous.length&&fullText.startsWith(previous))continue;activityText.set(key,text);if(!primed||!enabled||!(kind===`thinking`?vocalizeThinking:vocalizeInterimTurns)||!text.startsWith(previous))continue;for(const chunk of splitSpeechText(text.slice(previous.length),ACTIVITY_SPEECH_CHARACTERS))entries.push({kind,text:chunk})}const final=latestConversationFinalNarrationEntry(conversationTurns);if(!primed){if(final)finalKeys.add(final.key);primed=true;return[]}if(includeFinals&&final&&!finalKeys.has(final.key)){finalKeys.add(final.key);return enabled?[final]:[]}return entries}return{observe,reset}}function useVoiceConversation(binding,{socketUrl,createTransport=useVoiceTransport}={}){const oneOffTalkMode=computed(()=>binding.defaults?.talkMode===`hold`?`hold`:`tap`);const targetLabel=computed(()=>binding.label||`Assistant`);const readAloud=ref(binding.defaults?.readAloud===true);const readAloudChangePending=computed(()=>binding.readAloudChangePending===true);const soundPreparing=ref(false);let soundRevision=0;const conversationId=binding.conversationId||binding.id;const error=ref(``);const pendingTranscript=ref(null);const heldReview=ref(false);const holding=ref(false);const sending=ref(false);const takingTranscript=ref(false);const live=ref(false);const starting=ref(false);const callMode=ref(binding.defaults?.mode===`hands-free`?`hands-free`:`push-to-talk`);const changingCallMode=ref(false);const pushHolding=ref(false);let pushInput=null;let startupAbort=null;let decidedCandidate=``;let stopTimer;let committing=null;const voice=createTransport({socketUrl,voiceId:binding.defaults?.voiceId||``,speechEnabled:readAloud,interruptSpeechOnListen:false,autoReconnect:true,onPlayback:receivePlayback});watch([()=>binding.defaults?.voiceId,voice.availableVoices],([voiceId,voices])=>{if(voiceId===void 0)return;voice.selectedVoice.value=!voices.length||voices.some(voice=>voice.id===voiceId)?voiceId:``});const microphoneMuted=voice.microphoneMuted;const capturing=computed(()=>voice.captureState.value!==`idle`);const speechActive=computed(()=>Boolean(voice.activeSpeechTurnId.value));const talkLabel=computed(()=>voice.listening.value?`Send recording`:capturing.value?`Cancel recording`:`Talk to ${targetLabel.value}`);const liveLabel=computed(()=>starting.value?`Cancel voice startup`:live.value?`End voice`:`Start voice`);const callConnection=computed(()=>{if(voice.reconnecting.value)return`Voice interrupted`;if(error.value||voice.error.value)return`Voice needs attention`;if(starting.value)return`Starting voice…`;if(live.value)return`Voice active`;return`Voice off`});const callStatus=computed(()=>{if(voice.reconnecting.value)return`Reconnecting…`;if(starting.value)return`Starting voice…`;if(live.value&&voice.captureState.value===`connecting`)return`Connecting…`;if(live.value&&voice.captureState.value===`opening`)return`Opening microphone…`;if(error.value||voice.error.value)return`Voice needs attention`;if(!live.value)return``;if(pushHolding.value&&voice.listening.value)return`Listening to you`;if(voice.speaking.value)return`${targetLabel.value} is speaking`;if(speechActive.value)return`Preparing speech…`;if(binding.state.status===`working`)return`Thinking`;if(sending.value)return`Sending your message…`;if(pendingTranscript.value)return`Review your message below`;if(microphoneMuted.value)return`Microphone muted`;if(voice.captureState.value===`transcribing`)return`Transcribing…`;if(voice.listening.value)return`Listening to you`;return callMode.value===`push-to-talk`?`Hold to speak`:`Preparing microphone…`});const callDetail=computed(()=>{if(voice.reconnecting.value)return`Waiting for the voice connection. Your unfinished words remain available for review.`;if(error.value||voice.error.value)return`Review your message below or try voice again.`;if(starting.value||live.value&&[`connecting`,`opening`].includes(voice.captureState.value))return`Allow microphone access if your browser asks.`;if(!live.value)return``;if(microphoneMuted.value)return`Unmute when you want to speak. You can still listen.`;if(!readAloud.value)return`Sound is off. Answers still appear in chat.`;if(callMode.value===`push-to-talk`)return`Hold to speak. Release to send. The conversation stays open.`;return`You can speak naturally, including while I reply.`});const callModeBusy=computed(()=>starting.value||changingCallMode.value||pushHolding.value||sending.value||Boolean(pendingTranscript.value)||capturing.value&&Boolean(voice.partialTranscript.value.trim())||capturing.value&&!voice.listening.value);const microphoneStatus=computed(()=>microphoneMuted.value?`Microphone muted`:voice.listening.value?`Microphone on`:`Microphone off`);const avatarVisual=computed(()=>({avatar:binding.avatar,state:voice.speaking.value?`speaking`:pushHolding.value&&voice.listening.value?`listening`:binding.state.status===`working`?`thinking`:voice.listening.value&&!microphoneMuted.value?`listening`:`idle`,mouthLevel:voice.mouthLevel.value,mouthPose:voice.mouthPose.value}));const callAudioLevel=computed(()=>Math.max(0,Math.min(1,voice.speaking.value?voice.mouthLevel.value:voice.listening.value&&!microphoneMuted.value?voice.inputLevel.value:0)));const status=computed(()=>{const capture={connecting:`Connecting…`,opening:`Opening mic…`,listening:`Listening`,transcribing:`Transcribing…`}[voice.captureState.value];return[starting.value?`Starting voice…`:``,voice.reconnecting.value?`Reconnecting…`:``,live.value?`Live conversation`:``,microphoneMuted.value?`Microphone muted`:capture,voice.speaking.value?`Speaking`:speechActive.value?`Preparing speech…`:``].filter(Boolean).join(` · `)});const heldTranscript=computed(()=>pendingTranscript.value?.text||([`listening`,`transcribing`].includes(voice.captureState.value)?voice.partialTranscript.value:``));const voiceWords=computed(()=>heldTranscript.value||binding.state.messages?.findLast(message=>message.role===`user`)?.text||``);const voiceAnswer=computed(()=>binding.state.streamingReply?.text||binding.state.messages?.findLast(message=>message.role===`assistant`)?.text||``);let recording=null;let primed=false;let draining=false;let disposed=false;const seen=new Set;const speechQueue=[];const replies=new Map;let speechSuppressed=false;let requestedMessageId=``;let speechInvitation=``;let lastStreamingId=``;const narrationTracker=createConversationNarrationTracker();const narrationPageVisible=ref(globalThis.document?.visibilityState!==`hidden`);const hiddenNarrationPage=computed(()=>Boolean(binding.narration)&&!narrationPageVisible.value);let narrationSettleTimer;let thinkingMurmurTimer;let narrationEpoch=0;function clearNarrationTimers(){++narrationEpoch;clearTimeout(narrationSettleTimer);clearTimeout(thinkingMurmurTimer)}function retireNarration(selected=()=>true){for(let index=speechQueue.length-1;index>=0;--index){const reply=speechQueue[index];if(!reply.narrationKind||!selected(reply.narrationKind))continue;cancelReply(reply,`narration-retired`);speechQueue.splice(index,1);if(reply.turnId&&voice.activeSpeechTurnId.value===reply.turnId)voice.stopSpeaking(`narration-retired`)}}function narrationEnabled(){const narration=binding.narration;return Boolean(narration&&narration.eligible&&!narration.loading&&readAloud.value&&binding.state.available!==false&&narrationPageVisible.value&&!capturing.value&&!starting.value&&!speechSuppressed&&!disposed)}function queueNarration(kind,text){if(!narrationEnabled())return;if(kind===`murmur`&&(speechQueue.length||speechActive.value))return;speechQueue.push({narrationKind:kind,raw:text,consumed:0,final:true,started:false});drainSpeech()}function observeNarration(settled=false,enabled=narrationEnabled()){const narration=binding.narration;if(!narration)return;const entries=narrationTracker.observe(narration.turns,{includeFinals:false,settled,enabled,vocalizeThinking:narration.vocalizeThinking,vocalizeInterimTurns:narration.vocalizeInterimTurns});for(const entry of entries)queueNarration(entry.kind,entry.text)}function scheduleThinkingMurmur(epoch){const narration=binding.narration;if(!narrationEnabled()||!narration.working||!narration.thinkingSounds)return;thinkingMurmurTimer=setTimeout(()=>{if(epoch!==narrationEpoch||!narrationEnabled()||!binding.narration?.working||!binding.narration.thinkingSounds)return;if(!speechQueue.length&&!draining&&!speechActive.value&&voice.state.value===`idle`)queueNarration(`murmur`,`Hmm...`);scheduleThinkingMurmur(epoch)},2e4)}function refreshNarration(settled=false){clearNarrationTimers();observeNarration(settled);const narration=binding.narration;if(!narrationEnabled()||!narration.working)return;const epoch=narrationEpoch;if(narration.vocalizeThinking||narration.vocalizeInterimTurns)narrationSettleTimer=setTimeout(()=>{if(epoch===narrationEpoch&&narrationEnabled())observeNarration(true)},700);scheduleThinkingMurmur(epoch)}function observe(callback,value){try{Promise.resolve(callback?.(value)).catch(()=>{})}catch{}}function emitReply(reply,phase,reason){if(reply.terminal||phase===`started`&&reply.audible)return;if(phase===`started`)reply.audible=true;else reply.terminal=true;if(reply.narrationKind)return;observe(binding.onPlayback,{conversationId,outputId:reply.outputId,phase,...reason?{reason}:{}})}function receivePlayback(event){const reply=[...replies.values()].find(reply=>reply.turnId===event.turnId)||speechQueue.find(reply=>reply.narrationKind&&reply.turnId===event.turnId);if(!reply)return;if(event.phase===`completed`){reply.drained=true;if(reply.canonicalFinal||reply.narrationKind)emitReply(reply,`completed`)}else emitReply(reply,event.phase,event.reason)}function cancelReply(reply,reason=`cancelled`,phase=`interrupted`){reply.cancelled=true;emitReply(reply,phase,reason)}function stopSpeech(){cancelSpeech()}function cancelSpeech(reason=`cancelled`,phase=`interrupted`){clearNarrationTimers();retireNarration();for(const reply of replies.values())if(!reply.terminal)cancelReply(reply,reason,phase);speechQueue.length=0;speechSuppressed=true;speechInvitation=``;voice.stopSpeaking(reason)}function inviteSpeech(messageId){if(!messageId||messageId===requestedMessageId||seen.has(messageId))return;requestedMessageId=messageId;speechInvitation=messageId}async function drainSpeech(){if(draining||disposed||!readAloud.value||speechSuppressed||soundPreparing.value||voice.playbackBlocked?.value)return;draining=true;try{while(speechQueue.length){const reply=speechQueue[0];if(reply.cancelled){speechQueue.shift();continue}if(reply.started&&!speechActive.value){speechQueue.shift();continue}if(speechActive.value&&!reply.started)return;if(reply.started&&!voice.canAppendSpeech.value)return;const previousSpeech=reply.narrationKind?``:speechTextFromAssistant(reply.raw.slice(0,reply.consumed));const maximumCharacters=reply.narrationKind?reply.started?140:64:Math.max(1,Math.min(reply.started?140:64,VOICE_MAX_SPEECH_TEXT_CHARACTERS-previousSpeech.length,VOICE_MAX_SPEECH_TEXT_CHARACTERS-reply.spokenCharacters));const chunk=reply.speechCapped?null:takeStreamingSpeech(reply.raw.slice(reply.consumed),reply.final,maximumCharacters);if(!chunk){if(reply.final&&reply.started)voice.endSpeech();else if(reply.final){cancelReply(reply,`no-audio`);speechQueue.shift();continue}return}reply.consumed+=chunk.consumed;let text=chunk.text;if(!reply.narrationKind){const speech=speechTextFromAssistant(reply.raw.slice(0,reply.consumed));const boundary=speech.startsWith(previousSpeech)?speech.slice(previousSpeech.length).match(/^\s*/u)[0].length:0;text=text.slice(0,Math.max(0,Math.min(VOICE_MAX_SPEECH_TEXT_CHARACTERS-previousSpeech.length-boundary,VOICE_MAX_SPEECH_TEXT_CHARACTERS-reply.spokenCharacters)));reply.spokenCharacters+=text.length;reply.speechCapped=speech.length>=4e3||reply.spokenCharacters>=4e3;reply.final||=reply.speechCapped}if(!text)continue;if(!reply.started){reply.started=true;reply.turnId=crypto.randomUUID();const accepted=await voice.speak(text,reply.turnId,{stream:true});if(disposed)return;if(reply.cancelled){if(reply.narrationKind)continue;return}if(accepted===false){cancelReply(reply,`no-audio`);continue}}else if(!voice.appendSpeech(text))return;if(reply.speechCapped||reply.final&&reply.consumed>=reply.raw.length){voice.endSpeech();return}}}catch(cause){error.value=cause.message;stopSpeech()}finally{draining=false}}function queueReply(message,final){let reply=replies.get(message.id);if(!reply){if(!primed||!readAloud.value||speechSuppressed||seen.has(message.id)||!final&&message.autonomous)return;retireNarration(kind=>kind===`murmur`);reply={id:message.id,outputId:message.outputId||message.id,streamId:message.streamId,raw:``,consumed:0,spokenCharacters:0,speechCapped:false,final:false,canonicalFinal:false,started:false};replies.set(message.id,reply);speechQueue.push(reply)}if(reply.cancelled)return;if(hiddenNarrationPage.value&&!reply.canonicalFinal&&(final||!reply.raw)){cancelReply(reply,`page-hidden`);if(reply.turnId&&voice.activeSpeechTurnId.value===reply.turnId)voice.stopSpeaking(`page-hidden`);return}if(final)retireNarration(kind=>kind===`murmur`);const text=String(message.text||``).slice(0,VOICE_MAX_SPEECH_TEXT_CHARACTERS*2);const spokenPrefix=reply.raw.slice(0,reply.consumed);if(!text.startsWith(spokenPrefix)&&!(final&&text.trimEnd()===spokenPrefix.trimEnd())){cancelReply(reply);if(speechQueue[0]===reply)voice.stopSpeaking();return}reply.consumed=Math.min(reply.consumed,text.length);reply.raw=text;reply.canonicalFinal||=final;reply.final=final||reply.speechCapped||text.length>=4e3*2;if(reply.canonicalFinal&&reply.drained)emitReply(reply,`completed`)}async function enableSound(){const revision=++soundRevision;soundPreparing.value=true;try{await voice.preparePlayback()}catch{}finally{if(revision===soundRevision&&!disposed){soundPreparing.value=false;drainSpeech()}}}async function toggleReadAloud(){if(readAloudChangePending.value)return;error.value=``;readAloud.value=!readAloud.value;observe(binding.onReadAloudChange,readAloud.value);await applyReadAloud()}async function applyReadAloud(){if(!readAloud.value){++soundRevision;soundPreparing.value=false;cancelSpeech(`muted`);return}speechSuppressed=false;speechInvitation=``;await enableSound();if(!disposed)refreshNarration()}watch(()=>binding.defaults?.readAloud,value=>{if(disposed||typeof value!==`boolean`||value===readAloud.value)return;readAloud.value=value;applyReadAloud()});async function deliverTranscript(){const pending=pendingTranscript.value;if(!pending||sending.value)return;sending.value=true;error.value=``;try{inviteSpeech(pending.messageId);const receipt=await binding.submitText(pending.text,{messageId:pending.messageId,context:pending.focus});if(receipt===false||receipt?.ok===false)throw new Error(receipt?.message||`The conversation did not accept this message. Review it before retrying.`);if(pendingTranscript.value===pending)dismissTranscript()}catch(cause){if(pendingTranscript.value===pending)error.value=cause.message}finally{sending.value=false}}async function cancelRecording(){startupAbort?.abort();startupAbort=null;starting.value=false;releaseEditCapturePause();recording=null;await voice.cancelListening()}async function discardRecording(){live.value=false;committing=null;clearTimeout(stopTimer);await cancelRecording()}function dismissTranscript(){releaseEditCapturePause();pendingTranscript.value=null;heldReview.value=false;holding.value=false;error.value=``}function releaseEditCapturePause(){const pending=pendingTranscript.value;const captureId=pending?.editPausedCaptureId;if(!captureId)return;delete pending.editPausedCaptureId;if(recording?.messageId===captureId&&!disposed&&live.value&&callMode.value===`hands-free`)voice.setMicrophoneMuted(false)}async function talk(){error.value=``;try{if(voice.listening.value){await voice.stopListening();return}if(capturing.value){await discardRecording();return}if(pendingTranscript.value)return;await startRecording(false)}catch(cause){recording=null;error.value=cause.message}}async function startRecording(reviewBeforeSend,continuous=false){if(disposed||hiddenNarrationPage.value||starting.value||microphoneMuted.value||capturing.value||committing||(pendingTranscript.value||sending.value)&&!(continuous&&live.value&&(callMode.value===`hands-free`||pushHolding.value)))return;error.value=``;reviewBeforeSend||=binding.defaults?.reviewBeforeSend===true;heldReview.value=reviewBeforeSend;holding.value=reviewBeforeSend;const next={focus:{...binding.captureContext?.()||{}},messageId:crypto.randomUUID(),started:false,reviewBeforeSend,continuous};recording=next;try{const started=await voice.startListening({continuous});if(recording===next){next.started=started;if(!started)recording=null}}catch(cause){if(recording===next){recording=null;error.value=cause.message}}}async function toggleMicrophoneMuted({preserveBuffered=false}={}){if(pendingTranscript.value)delete pendingTranscript.value.editPausedCaptureId;voice.setMicrophoneMuted(!microphoneMuted.value,{preserveBuffered});if(!microphoneMuted.value&&recording)delete recording.finishAfterPending;clearTimeout(stopTimer);if(microphoneMuted.value&&starting.value)await cancelRecording();else if(!microphoneMuted.value&&live.value&&callMode.value===`hands-free`&&!capturing.value)await startRecording(false,true)}async function changeCallMode(mode){if(![`push-to-talk`,`hands-free`].includes(mode)||mode===callMode.value||callModeBusy.value||committing)return;changingCallMode.value=true;callMode.value=mode;try{if(capturing.value)await cancelRecording();if(live.value&&mode===`hands-free`&&!microphoneMuted.value)await startRecording(false,true)}finally{changingCallMode.value=false}}async function startPushToTalk(event){if(event?.repeat||event?.isPrimary===false||event?.button!==void 0&&event.button!==0||pushHolding.value||disposed||hiddenNarrationPage.value||starting.value||capturing.value&&!voice.listening.value||committing)return;if(event?.pointerId!==void 0)event.currentTarget.setPointerCapture(event.pointerId);pushInput=event?.pointerId??event?.key??null;pushHolding.value=true;callMode.value=`push-to-talk`;voice.setMicrophoneMuted(false);if(recording)delete recording.finishAfterPending;if(!live.value)await toggleLive();if(!pushHolding.value||!live.value||disposed)return;if(recording&&voice.listening.value){recording.continuous=false;return}await startRecording(false,Boolean(pendingTranscript.value||sending.value));if(!recording)pushHolding.value=false}async function finishPushToTalk(event){if(!pushHolding.value||event&&(event.pointerId??event.key??null)!==pushInput)return;pushHolding.value=false;pushInput=null;try{if(voice.listening.value&&(pendingTranscript.value||sending.value||committing)){if(recording)recording.finishAfterPending=true;voice.setMicrophoneMuted(true,{preserveBuffered:true});return}if(voice.listening.value)await voice.stopListening();else await cancelRecording()}catch(cause){await cancelRecording();error.value=cause.message}}async function cancelPushToTalk(event){if(!pushHolding.value||event?.pointerId!==void 0&&event.pointerId!==pushInput)return;pushHolding.value=false;pushInput=null;await cancelRecording()}async function toggleHandsFree(){if(disposed||hiddenNarrationPage.value||pushHolding.value)return;if(live.value&&callMode.value===`hands-free`&&voice.listening.value&&(pendingTranscript.value||sending.value||committing)){if(!microphoneMuted.value&&recording)recording.finishAfterPending=true;await toggleMicrophoneMuted({preserveBuffered:true});return}if(committing)return;if(starting.value){await cancelRecording();return}if(capturing.value&&!voice.listening.value)return;if(live.value&&callMode.value===`hands-free`){if(!microphoneMuted.value&&voice.listening.value){voice.setMicrophoneMuted(true,{preserveBuffered:true});await voice.stopListening()}else if(microphoneMuted.value)await toggleMicrophoneMuted();else await startRecording(false,true);return}if(callMode.value===`hands-free`&&(pendingTranscript.value||sending.value)){voice.setMicrophoneMuted(false);await toggleLive();return}if(pendingTranscript.value||sending.value||callModeBusy.value)return;voice.setMicrophoneMuted(false);await changeCallMode(`hands-free`);if(!live.value)await toggleLive()}async function toggleLive(){error.value=``;if(starting.value){await cancelRecording();return}if(live.value){live.value=false;pushHolding.value=false;committing=null;clearTimeout(stopTimer);await cancelRecording();return}if(disposed||hiddenNarrationPage.value||microphoneMuted.value||capturing.value||committing||(pendingTranscript.value||sending.value)&&callMode.value!==`hands-free`&&!pushHolding.value)return;const controller=new AbortController;startupAbort=controller;starting.value=true;const signal=AbortSignal.any([controller.signal,AbortSignal.timeout(1e4)]);try{if(readAloud.value)enableSound();signal.throwIfAborted();await voice.connect();signal.throwIfAborted();if(disposed)return;starting.value=false;live.value=true;if(callMode.value===`hands-free`){await startRecording(false,true);if(startupAbort===controller&&!recording?.started)live.value=false}}catch(cause){if(startupAbort===controller&&!controller.signal.aborted){live.value=false;error.value=signal.aborted?`Voice setup took too long. Try Talk again.`:cause.message}}finally{if(startupAbort===controller){startupAbort=null;starting.value=false}}}function currentSpokenText(){const reply=speechQueue[0];return reply?reply.raw.slice(0,reply.consumed).slice(-2e3):``}function explicitSilence(text){return/^(?:please )?(?:st[oa]p (?:talking|speaking)|be quiet|wait[, ]+let me (?:explain|finish)|let me finish)[.!]?$/iu.test(text.trim())}function decideTurn(){const candidate=voice.endpoint.value;if(takingTranscript.value||!live.value||callMode.value!==`hands-free`||!voice.listening.value||microphoneMuted.value||pendingTranscript.value||sending.value||!candidate)return;const key=`${candidate.turnId}:${candidate.revision}`;if(decidedCandidate===key)return;decidedCandidate=key;const captured={focus:{...recording?.focus||binding.captureContext?.()||{}},messageId:recording?.messageId||crypto.randomUUID(),text:candidate.text,...recording?.reviewBeforeSend?{reviewBeforeSend:true}:{}};try{const text=candidate.text.trim();const spoken=currentSpokenText();if(explicitSilence(text)){if(!spoken.toLowerCase().includes(text.toLowerCase()))stopSpeech();voice.finishUtterance(candidate,{discard:true});return}if(/(?:^|\s)(?:u+m+|u+h+|e+r+|h+m+)[.!?,…]*$/iu.test(text))return;const acknowledgement=speechActive.value&&!spoken.includes(`?`)&&/^(?:m+[- ]?h*m+|u+h[- ]?huh)[.!?,]*$/iu.test(text);const words=text.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,` `).trim();const spokenWords=spoken.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,` `).trim();const echo=speechActive.value&&words.split(` `).length>=4&&` ${spokenWords} `.includes(` ${words} `);if(!words||/^\[(?:cough|sneeze|noise|silence)\]$/iu.test(text)||acknowledgement||echo){voice.finishUtterance(candidate,{discard:true});return}committing={...captured,turnId:candidate.turnId,revision:candidate.revision};if(!voice.finishUtterance(candidate)){committing=null;return}publishTranscript()}catch(cause){if(live.value&&candidate===voice.endpoint.value){live.value=false;if(recording)recording.reviewBeforeSend=true;error.value=`${cause.message} Tap the microphone to finish and review this recording.`}}}watch([voice.endpoint,pendingTranscript,sending,takingTranscript],decideTurn);watch(voice.completedUtterance,utterance=>{if(!utterance||!live.value||!committing||committing.turnId!==utterance.turnId||committing.revision!==utterance.revision)return;pendingTranscript.value={...committing,text:utterance.text};committing=null;if(!pendingTranscript.value.reviewBeforeSend)deliverTranscript();else holding.value=false});watch(voice.utteranceReset,reset=>{if(reset?.turnId!==voice.activeListenTurnId.value||!live.value||!recording)return;recording={focus:{...binding.captureContext?.()||{}},messageId:crypto.randomUUID(),started:true,continuous:true,...recording.reviewBeforeSend?{reviewBeforeSend:true}:{},...recording.finishAfterPending?{finishAfterPending:true}:{}}});watch(voice.partialTranscript,(text,previous)=>{clearTimeout(stopTimer);if(!live.value||microphoneMuted.value)return;if(text&&!previous&&recording)recording.focus={...binding.captureContext?.()||{}};if(!explicitSilence(text)||currentSpokenText().toLowerCase().includes(text.toLowerCase()))return;stopTimer=setTimeout(()=>{if(live.value&&!microphoneMuted.value&&voice.partialTranscript.value===text)stopSpeech()},120)});watch([pendingTranscript,sending,voice.utteranceReset,voice.utteranceStale],()=>{const stale=voice.utteranceStale.value;if(committing&&stale?.turnId===committing.turnId&&stale.revision===committing.revision)committing=null;if(!disposed&&live.value&&!pushHolding.value&&!changingCallMode.value&&!pendingTranscript.value&&!sending.value&&!committing&&microphoneMuted.value&&recording?.finishAfterPending&&voice.listening.value){delete recording.finishAfterPending;voice.stopListening().catch(cause=>{error.value=cause.message});return}if(live.value&&callMode.value===`hands-free`&&!changingCallMode.value&&!microphoneMuted.value&&!capturing.value&&!pendingTranscript.value&&!sending.value&&!voice.error.value)startRecording(false,true)});async function startHeldRecording(){await startRecording(true)}async function finishHeldRecording(){holding.value=false;if(!recording?.reviewBeforeSend)return;try{if(voice.listening.value)await voice.stopListening();else{await cancelRecording();error.value=`The microphone was not ready. Hold the avatar again to record.`}}catch(cause){await cancelRecording();error.value=cause.message}}async function discardHeldRecording(){if(sending.value)return;await cancelRecording();dismissTranscript()}watch([voice.captureState,voice.transcript,voice.error],()=>{if(!recording?.started||capturing.value)return;const finished=recording;recording=null;if(voice.error.value){if(committing?.messageId===finished.messageId)committing=null;live.value=false;const text=voice.partialTranscript.value.trim()||voice.transcript.value.trim();if(text){pendingTranscript.value={...finished,text,reviewBeforeSend:true};holding.value=false;error.value=`The connection interrupted this recording. These words may be incomplete. Review before sending, or discard and record again.`}return}const text=voice.transcript.value.trim();if(!text){if(!finished.continuous)error.value=`No speech was recognized. Try again.`;return}if(live.value&&!finished.reviewBeforeSend&&explicitSilence(text)){stopSpeech();return}pendingTranscript.value={...finished,text};if(!finished.reviewBeforeSend)deliverTranscript();else holding.value=false});watch(()=>({messages:binding.state.messages,reply:binding.state.streamingReply,text:binding.state.streamingReply?.text}),({messages=[],reply})=>{if(!binding.id)return;if(pendingTranscript.value&&messages.some(message=>message.role===`user`&&message.id===pendingTranscript.value.messageId&&message.receipt!==false))dismissTranscript();let invited=false;for(const message of messages){if(message.role===`user`&&message.receipt===false)continue;if(seen.has(message.id))continue;if(message.role===`user`&&message.id===speechInvitation){speechSuppressed=false;speechInvitation=``;invited=true}if(message.role===`assistant`)queueReply(message,true);seen.add(message.id)}if(lastStreamingId&&lastStreamingId!==reply?.id&&!messages.some(message=>message.id===lastStreamingId)){const retired=replies.get(lastStreamingId);if(retired&&!retired.canonicalFinal&&!retired.cancelled){cancelReply(retired);if(speechQueue[0]===retired)voice.finishCurrentPhrase()}}lastStreamingId=reply?.id||``;if(reply?.text){queueReply(reply,reply.status===`completed`);if(!readAloud.value||!primed||reply.autonomous||hiddenNarrationPage.value)seen.add(reply.id)}const retained=new Set([...messages.map(message=>message.id),reply?.id,...speechQueue.map(item=>item.id),...[...replies.values()].filter(item=>!item.terminal).map(item=>item.id)]);for(const id of seen)if(!retained.has(id))seen.delete(id);for(const id of replies.keys())if(!retained.has(id))replies.delete(id);primed=true;if(invited)refreshNarration();drainSpeech()},{immediate:true});watch(()=>{const narration=binding.narration;return{id:binding.id,conversationId:binding.conversationId,narration,loading:narration?.loading,eligible:narration?.eligible,working:narration?.working,thinking:narration?.vocalizeThinking,interim:narration?.vocalizeInterimTurns,sounds:narration?.thinkingSounds,turns:narration?.turns,enabled:narrationEnabled()}},(current,previous)=>{clearNarrationTimers();if(!current.narration||current.loading||current.id!==previous?.id||current.conversationId!==previous?.conversationId){narrationTracker.reset();retireNarration();if(!current.narration||current.loading)return}if(!current.enabled)retireNarration();else retireNarration(kind=>kind===`thinking`?!current.thinking:kind===`commentary`?!current.interim:!current.sounds||!current.working);if(previous&&(current.enabled!==previous.enabled||current.thinking!==previous.thinking||current.interim!==previous.interim))observeNarration(true,false);refreshNarration(!current.enabled)},{immediate:true,deep:true});watch(voice.error,message=>{if(message)cancelSpeech(`playback-error`,`failed`)});watch(()=>error.value||voice.error.value,message=>{if(message)binding.onError?.(message)});watch([voice.activeSpeechTurnId,voice.canAppendSpeech],()=>{drainSpeech()});function currentTranscript(){const pending=pendingTranscript.value;return recording&&[`listening`,`transcribing`].includes(voice.captureState.value)&&voice.partialTranscript.value&&recording.messageId!==pending?.messageId?{id:recording.messageId,text:voice.partialTranscript.value}:pending?{id:pending.messageId,text:pending.text}:null}function canTakeTranscript(messageId){return!disposed&&!starting.value&&!sending.value&&!committing&&!takingTranscript.value&&(pendingTranscript.value?.messageId===messageId||currentTranscript()?.id===messageId)&&!binding.state.messages?.some(message=>message.role===`user`&&message.id===messageId&&message.receipt!==false)}async function beginTranscriptEdit(messageId){if(!canTakeTranscript(messageId))return false;const pending=pendingTranscript.value;if(pending&&pending.messageId!==messageId)return false;const selected=pending?{id:pending.messageId,text:pending.text}:currentTranscript();const capture=recording;takingTranscript.value=true;try{pendingTranscript.value={...pending?.messageId===messageId?pending:capture,messageId,text:selected.text,reviewBeforeSend:true,editing:true};if(capture){if(capture.messageId!==messageId&&live.value&&callMode.value===`hands-free`){if(!microphoneMuted.value){pendingTranscript.value.editPausedCaptureId=capture.messageId;voice.setMicrophoneMuted(true)}}else if(pushHolding.value)await cancelPushToTalk();else await cancelRecording()}return true}finally{takingTranscript.value=false}}async function takeTranscript(messageId,transfer){if(!canTakeTranscript(messageId))return false;const pending=pendingTranscript.value;const selected=pending?.messageId===messageId?{id:messageId,text:pending.text}:currentTranscript();takingTranscript.value=true;try{if(transfer&&transfer(selected.text)!==true)return false;if(pendingTranscript.value?.messageId===messageId)dismissTranscript();else if(recording?.messageId===messageId){if(pushHolding.value)await cancelPushToTalk();else await cancelRecording();if(!disposed&&live.value&&callMode.value===`hands-free`&&!microphoneMuted.value)await startRecording(false,true)}return true}finally{takingTranscript.value=false}}function publishTranscript(){const transcript=currentTranscript();binding.onTranscript?.(transcript,{canTake:Boolean(transcript&&canTakeTranscript(transcript.id))})}watch([pendingTranscript,voice.captureState,voice.partialTranscript,voice.endpoint,sending,starting,takingTranscript],publishTranscript,{immediate:true});watch(avatarVisual,visual=>binding.onVisual?.(visual),{immediate:true});const page=globalThis.window||globalThis;const updateNarrationVisibility=()=>{narrationPageVisible.value=globalThis.document?.visibilityState!==`hidden`;if(disposed||!hiddenNarrationPage.value||!(recording||starting.value||committing||capturing.value))return;pushHolding.value=false;pushInput=null;if(!pendingTranscript.value){holding.value=false;heldReview.value=false}discardRecording();voice.stopSpeaking(`page-hidden`)};globalThis.document?.addEventListener?.(`visibilitychange`,updateNarrationVisibility);const cancelStartup=()=>{if(starting.value)discardRecording();else cancelPushToTalk()};page.addEventListener?.(`pagehide`,cancelStartup);page.addEventListener?.(`blur`,cancelPushToTalk);onScopeDispose(()=>{globalThis.document?.removeEventListener?.(`visibilitychange`,updateNarrationVisibility);page.removeEventListener?.(`pagehide`,cancelStartup);page.removeEventListener?.(`blur`,cancelPushToTalk);startupAbort?.abort();startupAbort=null;stopSpeech();binding.onTranscript?.(null);binding.onVisual?.(null);disposed=true;live.value=false;clearTimeout(stopTimer);recording=null;speechQueue.length=0});async function close(){startupAbort?.abort();disposed=true;live.value=false;clearTimeout(stopTimer);recording=null;committing=null;stopSpeech();await voice.close()}function editTranscript(text,messageId=pendingTranscript.value?.messageId){if(pendingTranscript.value&&pendingTranscript.value.messageId===messageId&&!sending.value)pendingTranscript.value={...pendingTranscript.value,text:String(text)}}const composerBlocked=computed(()=>starting.value||(!live.value||callMode.value!==`hands-free`)&&(sending.value||Boolean(pendingTranscript.value)||capturing.value));return{oneOffTalkMode,targetLabel,voice,readAloud,readAloudChangePending,error,pendingTranscript,heldReview,holding,sending,live,starting,callMode,changingCallMode,pushHolding,microphoneMuted,capturing,speechActive,talkLabel,liveLabel,callConnection,callStatus,callDetail,callModeBusy,microphoneStatus,avatarVisual,callAudioLevel,status,heldTranscript,voiceWords,voiceAnswer,stopSpeech,inviteSpeech,toggleReadAloud,enableSound,soundPreparing,deliverTranscript,cancelRecording,discardRecording,dismissTranscript,talk,toggleMicrophoneMuted,changeCallMode,startPushToTalk,finishPushToTalk,cancelPushToTalk,toggleLive,toggleHandsFree,startHeldRecording,finishHeldRecording,discardHeldRecording,close,editTranscript,canTakeTranscript,beginTranscriptEdit,takeTranscript,hasUnsentSpeech:computed(()=>capturing.value||starting.value||sending.value||Boolean(pendingTranscript.value)),composerBlocked}}function createVoiceConversationController({connectSpeech,createSession=useVoiceConversation}={}){if(typeof connectSpeech!==`function`)throw new TypeError(`Voice requires an application speech connection.`);const state=shallowReactive({binding:null,session:null,visible:false,nextTarget:null,busy:false,error:``});let scope;let revision=0;let operations=Promise.resolve();let disposed=false;function serialize(operation){const result=operations.then(operation);operations=result.catch(()=>{});return result}async function release(){const session=state.session;if(session)await session.close();scope?.stop();scope=null;await state.binding?.release?.();state.binding=null;state.session=null}async function activate(binding,requestRevision){const socketUrl=await connectSpeech(binding);if(disposed||requestRevision!==revision)return false;if(!socketUrl)throw new Error(`A speech service is not configured for this conversation.`);await release();if(disposed||requestRevision!==revision)return false;const nextScope=effectScope(true);try{binding.retain?.();const session=nextScope.run(()=>createSession(binding,{socketUrl}));scope=nextScope;state.binding=binding;state.session=session;state.visible=true;state.nextTarget=null;nextScope.run(()=>watch(()=>binding.available,available=>{if(available!==false)return;state.error=`This conversation is no longer available for voice.`;end({discard:true})},{immediate:true}));return true}catch(error){nextScope.stop();binding.release?.();throw error}}function open({conversation}={}){if(!conversation?.id||!conversation.state||typeof conversation.submitText!==`function`)return Promise.reject(new TypeError(`Voice requires a conversation identity, state and text submission.`));if(disposed)return Promise.reject(new Error(`The voice host has been disposed.`));const requestRevision=++revision;return serialize(async()=>{if(requestRevision!==revision||disposed)return false;state.error=``;if(state.binding?.id===conversation.id){state.visible=true;state.nextTarget=null;return true}if(conversation.available===false)throw new Error(`This conversation is not available for voice.`);if(state.session?.hasUnsentSpeech.value){state.nextTarget=conversation;state.visible=true;return false}state.busy=true;try{return await activate(conversation,requestRevision)}catch(error){state.error=error.message;throw error}finally{state.busy=false}})}function switchTarget({discard=false}={}){const target=state.nextTarget;if(!target)return Promise.resolve(false);if(!discard&&state.session?.hasUnsentSpeech.value)return Promise.resolve(false);if(state.session?.sending.value)return Promise.resolve(false);const requestRevision=++revision;return serialize(async()=>{state.busy=true;try{return await activate(target,requestRevision)}catch(error){state.error=error.message;throw error}finally{state.busy=false}})}function end({discard=false}={}){if(!discard&&state.session?.hasUnsentSpeech.value){state.visible=true;state.error=`Finish or discard your recording before ending voice.`;return Promise.resolve(false)}++revision;return serialize(async()=>{state.busy=true;try{await release();state.visible=false;state.nextTarget=null;return true}finally{state.busy=false}})}return{state,open,switchTarget,end,minimize(){state.visible=false},reveal(){if(state.session)state.visible=true},cancelSwitch(){state.nextTarget=null},async dispose(){disposed=true;await end({discard:true})}}}var makeVAppProps=propsFactory({...makeComponentProps(),...omit(makeLayoutProps(),[`fullHeight`]),...makeThemeProps()},`VApp`);var VApp=genericComponent()({name:`VApp`,props:makeVAppProps(),setup(props,{slots}){const theme=provideTheme(props);const{layoutClasses,getLayoutItem,items,layoutRef}=createLayout({...props,fullHeight:true});const{rtlClasses}=useRtl();useRender(()=>createBaseVNode(`div`,{"ref":layoutRef,"class":normalizeClass([`v-application`,theme.themeClasses.value,layoutClasses.value,rtlClasses.value,props.class]),"style":normalizeStyle([props.style])},[createBaseVNode(`div`,{"class":`v-application__wrap`},[slots.default?.()])]));return{getLayoutItem,items,theme}}});var makeVToolbarTitleProps=propsFactory({text:String,...makeComponentProps(),...makeTagProps()},`VToolbarTitle`);var VToolbarTitle=genericComponent()({name:`VToolbarTitle`,props:makeVToolbarTitleProps(),setup(props,{slots}){useRender(()=>{const hasText=!!(slots.default||slots.text||props.text);return createVNode(props.tag,{"class":normalizeClass([`v-toolbar-title`,props.class]),"style":normalizeStyle(props.style)},{default:()=>[hasText&&createBaseVNode(`div`,{"class":`v-toolbar-title__placeholder`},[slots.text?slots.text():props.text,slots.default?.()])]})});return{}}});var allowedDensities=[null,`prominent`,`default`,`comfortable`,`compact`];var makeVToolbarProps=propsFactory({absolute:Boolean,collapse:Boolean,collapsePosition:{type:String,default:`start`},color:String,density:{type:String,default:`default`,validator:v=>allowedDensities.includes(v)},extended:{type:Boolean,default:null},extensionHeight:{type:[Number,String],default:48},flat:Boolean,floating:Boolean,height:{type:[Number,String],default:64},image:String,title:String,...makeBorderProps(),...makeComponentProps(),...makeElevationProps(),...makeLocationProps(),...makeRoundedProps(),...makeTagProps({tag:`header`}),...makeThemeProps()},`VToolbar`);var VToolbar=genericComponent()({name:`VToolbar`,props:makeVToolbarProps(),setup(props,{slots}){const{backgroundColorClasses,backgroundColorStyles}=useBackgroundColor(()=>props.color);const{borderClasses}=useBorder(props);const{elevationClasses}=useElevation(props);const{locationStyles}=useLocation(props);const{roundedClasses,roundedStyles}=useRounded(props);const{themeClasses}=provideTheme(props);const{rtlClasses}=useRtl();const isExtended=shallowRef(props.extended===null?!!slots.extension?.():props.extended);const contentHeight=computed(()=>parseInt(Number(props.height)+(props.density===`prominent`?Number(props.height):0)-(props.density===`comfortable`?8:0)-(props.density===`compact`?16:0),10));const extensionHeight=computed(()=>isExtended.value?parseInt(Number(props.extensionHeight)+(props.density===`prominent`?Number(props.extensionHeight):0)-(props.density===`comfortable`?4:0)-(props.density===`compact`?8:0),10):0);provideDefaults({VBtn:{variant:`text`}});useRender(()=>{const hasTitle=!!(props.title||slots.title);const hasImage=!!(slots.image||props.image);const extension=slots.extension?.();isExtended.value=props.extended===null?!!extension:props.extended;return createVNode(props.tag,{"class":normalizeClass([`v-toolbar`,`v-toolbar--collapse-${props.collapsePosition}`,{"v-toolbar--absolute":props.absolute,"v-toolbar--collapse":props.collapse,"v-toolbar--flat":props.flat,"v-toolbar--floating":props.floating,[`v-toolbar--density-${props.density}`]:true},backgroundColorClasses.value,borderClasses.value,elevationClasses.value,roundedClasses.value,themeClasses.value,rtlClasses.value,props.class]),"style":normalizeStyle([backgroundColorStyles.value,locationStyles.value,roundedStyles.value,props.style])},{default:()=>[hasImage&&createBaseVNode(`div`,{"key":`image`,"class":`v-toolbar__image`},[!slots.image?createVNode(VImg,{"key":`image-img`,"cover":true,"src":props.image},null):createVNode(VDefaultsProvider,{"key":`image-defaults`,"disabled":!props.image,"defaults":{VImg:{cover:true,src:props.image}}},slots.image)]),createVNode(VDefaultsProvider,{"defaults":{VTabs:{height:convertToUnit(contentHeight.value)}}},{default:()=>[createBaseVNode(`div`,{"class":`v-toolbar__content`,"style":{height:convertToUnit(contentHeight.value)}},[slots.prepend&&createBaseVNode(`div`,{"class":`v-toolbar__prepend`},[slots.prepend?.()]),hasTitle&&createVNode(VToolbarTitle,{"key":`title`,"text":props.title},{text:slots.title}),slots.default?.(),slots.append&&createBaseVNode(`div`,{"class":`v-toolbar__append`},[slots.append?.()])])]}),createVNode(VDefaultsProvider,{"defaults":{VTabs:{height:convertToUnit(extensionHeight.value)}}},{default:()=>[createVNode(VExpandTransition,null,{default:()=>[isExtended.value&&createBaseVNode(`div`,{"class":`v-toolbar__extension`,"style":{height:convertToUnit(extensionHeight.value)}},[extension])]})]})]})});return{contentHeight,extensionHeight}}});var makeScrollProps=propsFactory({scrollTarget:{type:String},scrollThreshold:{type:[String,Number],default:300}},`scroll`);function useScroll(props,args={}){const{canScroll,layoutSize}=args;let previousScroll=0;let previousScrollHeight=0;const target=ref(null);const currentScroll=shallowRef(0);const savedScroll=shallowRef(0);const currentThreshold=shallowRef(0);const isScrollActive=shallowRef(false);const isScrollingUp=shallowRef(false);const isAtBottom=shallowRef(false);const reachedBottomWhileScrollingDown=shallowRef(false);const hasEnoughScrollableSpace=shallowRef(true);const scrollThreshold=computed(()=>{return Number(props.scrollThreshold)});const scrollRatio=computed(()=>{return clamp$1((scrollThreshold.value-currentScroll.value)/scrollThreshold.value||0)});function getScrollMetrics(targetEl){return{clientHeight:`window`in targetEl?window.innerHeight:targetEl.clientHeight,scrollHeight:`window`in targetEl?document.documentElement.scrollHeight:targetEl.scrollHeight}}function checkScrollableSpace(){const targetEl=target.value;if(!targetEl)return;const{clientHeight,scrollHeight}=getScrollMetrics(targetEl);const maxScrollableDistance=scrollHeight-clientHeight;const elementHeight=layoutSize?.value||0;const minRequiredDistance=scrollThreshold.value+elementHeight;hasEnoughScrollableSpace.value=maxScrollableDistance>minRequiredDistance}function onResize(){checkScrollableSpace()}function onScroll(){const targetEl=target.value;if(!targetEl||canScroll&&!canScroll.value)return;previousScroll=currentScroll.value;currentScroll.value=`window`in targetEl?targetEl.pageYOffset:targetEl.scrollTop;const currentScrollHeight=targetEl instanceof Window?document.documentElement.scrollHeight:targetEl.scrollHeight;if(previousScrollHeight!==currentScrollHeight){if(currentScrollHeight>previousScrollHeight)checkScrollableSpace();previousScrollHeight=currentScrollHeight}isScrollingUp.value=currentScroll.value<previousScroll;currentThreshold.value=Math.abs(currentScroll.value-scrollThreshold.value);const{clientHeight,scrollHeight}=getScrollMetrics(targetEl);const atBottom=currentScroll.value+clientHeight>=scrollHeight-5;if(!isScrollingUp.value&&atBottom&&currentScroll.value>=scrollThreshold.value&&hasEnoughScrollableSpace.value)reachedBottomWhileScrollingDown.value=true;const scrollJumped=Math.abs(currentScroll.value-previousScroll)>100;const atTop=currentScroll.value<=5;if(isScrollingUp.value&&previousScroll-currentScroll.value>1&&!atBottom||scrollJumped&&currentScroll.value<scrollThreshold.value||atTop)reachedBottomWhileScrollingDown.value=false;isAtBottom.value=atBottom}watch(isScrollingUp,()=>{savedScroll.value=savedScroll.value||currentScroll.value});watch(isScrollActive,()=>{savedScroll.value=0});onMounted(()=>{watch(()=>props.scrollTarget,scrollTarget=>{const newTarget=scrollTarget?document.querySelector(scrollTarget):window;if(!newTarget){consoleWarn(`Unable to locate element with identifier ${scrollTarget}`);return}if(newTarget===target.value)return;target.value?.removeEventListener(`scroll`,onScroll);target.value=newTarget;target.value.addEventListener(`scroll`,onScroll,{passive:true});Promise.resolve().then(()=>{checkScrollableSpace()})},{immediate:true});window.addEventListener(`resize`,onResize,{passive:true})});onBeforeUnmount(()=>{target.value?.removeEventListener(`scroll`,onScroll);window.removeEventListener(`resize`,onResize)});canScroll&&watch(canScroll,onScroll,{immediate:true});return{scrollThreshold,currentScroll,currentThreshold,isScrollActive,scrollRatio,isScrollingUp,savedScroll,isAtBottom,reachedBottomWhileScrollingDown,hasEnoughScrollableSpace}}var makeVAppBarProps=propsFactory({scrollBehavior:String,modelValue:{type:Boolean,default:true},location:{type:String,default:`top`,validator:value=>[`top`,`bottom`].includes(value)},...omit(makeVToolbarProps(),[`location`]),...makeLayoutItemProps(),...makeScrollProps(),height:{type:[Number,String],default:64}},`VAppBar`);var VAppBar=genericComponent()({name:`VAppBar`,props:makeVAppBarProps(),emits:{"update:modelValue":value=>true},setup(props,{slots}){const vToolbarRef=ref();const isActive=useProxiedModel(props,`modelValue`);const scrollBehavior=computed(()=>{const behavior=new Set(props.scrollBehavior?.split(` `)??[]);return{hide:behavior.has(`hide`),fullyHide:behavior.has(`fully-hide`),inverted:behavior.has(`inverted`),collapse:behavior.has(`collapse`),elevate:behavior.has(`elevate`),fadeImage:behavior.has(`fade-image`)}});const canScroll=computed(()=>{const behavior=scrollBehavior.value;return behavior.hide||behavior.fullyHide||behavior.inverted||behavior.collapse||behavior.elevate||behavior.fadeImage||!isActive.value});const appBarHeight=computed(()=>{return(vToolbarRef.value?.contentHeight??0)+(vToolbarRef.value?.extensionHeight??0)});const{currentScroll,scrollThreshold,isScrollingUp,scrollRatio,isAtBottom,reachedBottomWhileScrollingDown,hasEnoughScrollableSpace}=useScroll(props,{canScroll,layoutSize:appBarHeight});const canHide=toRef(()=>scrollBehavior.value.hide||scrollBehavior.value.fullyHide);const isCollapsed=computed(()=>props.collapse||scrollBehavior.value.collapse&&(scrollBehavior.value.inverted?scrollRatio.value>0:scrollRatio.value===0));const isFlat=computed(()=>props.flat||scrollBehavior.value.fullyHide&&!isActive.value||scrollBehavior.value.elevate&&(scrollBehavior.value.inverted?currentScroll.value>0:currentScroll.value===0));const opacity=computed(()=>scrollBehavior.value.fadeImage?scrollBehavior.value.inverted?1-scrollRatio.value:scrollRatio.value:void 0);const height=computed(()=>{if(scrollBehavior.value.hide&&scrollBehavior.value.inverted)return 0;const height=vToolbarRef.value?.contentHeight??0;const extensionHeight=vToolbarRef.value?.extensionHeight??0;if(!canHide.value)return height+extensionHeight;return currentScroll.value<scrollThreshold.value||scrollBehavior.value.fullyHide?height+extensionHeight:height});useToggleScope(()=>!!props.scrollBehavior,()=>{watchEffect(()=>{if(!canHide.value){isActive.value=true;return}if(scrollBehavior.value.inverted){isActive.value=currentScroll.value>scrollThreshold.value;return}if(!hasEnoughScrollableSpace.value){isActive.value=true;return}if(reachedBottomWhileScrollingDown.value){isActive.value=false;return}isActive.value=isScrollingUp.value&&!isAtBottom.value||currentScroll.value<scrollThreshold.value})});const{ssrBootStyles}=useSsrBoot();const{layoutItemStyles}=useLayoutItem({id:props.name,order:computed(()=>parseInt(props.order,10)),position:toRef(()=>props.location),layoutSize:height,elementSize:shallowRef(void 0),active:isActive,absolute:toRef(()=>props.absolute)});useRender(()=>{const toolbarProps=omit(VToolbar.filterProps(props),[`location`]);return createVNode(VToolbar,mergeProps({"ref":vToolbarRef,"class":[`v-app-bar`,{"v-app-bar--bottom":props.location===`bottom`},props.class],"style":[{...layoutItemStyles.value,"--v-toolbar-image-opacity":opacity.value,height:void 0,...ssrBootStyles.value},props.style]},toolbarProps,{"collapse":isCollapsed.value,"flat":isFlat.value}),slots)});return{}}});var makeVAppBarNavIconProps=propsFactory({...omit(makeVBtnProps({icon:`$menu`,variant:`text`}),[`spaced`])},`VAppBarNavIcon`);var VAppBarNavIcon=genericComponent()({name:`VAppBarNavIcon`,props:makeVAppBarNavIconProps(),setup(props,{slots}){useRender(()=>createVNode(VBtn,mergeProps(props,{"class":[`v-app-bar-nav-icon`]}),slots));return{}}});var makeVBottomNavigationProps=propsFactory({baseColor:String,bgColor:String,color:String,grow:Boolean,mode:{type:String,validator:v=>!v||[`horizontal`,`shift`].includes(v)},height:{type:[Number,String],default:56},active:{type:Boolean,default:true},...makeBorderProps(),...makeComponentProps(),...makeDensityProps(),...makeElevationProps(),...makeRoundedProps(),...makeLayoutItemProps({name:`bottom-navigation`}),...makeTagProps({tag:`header`}),...makeGroupProps({selectedClass:`v-btn--selected`}),...makeThemeProps()},`VBottomNavigation`);var VBottomNavigation=genericComponent()({name:`VBottomNavigation`,props:makeVBottomNavigationProps(),emits:{"update:active":value=>true,"update:modelValue":value=>true},setup(props,{slots}){const{themeClasses}=useTheme();const{borderClasses}=useBorder(props);const{backgroundColorClasses,backgroundColorStyles}=useBackgroundColor(()=>props.bgColor);const{densityClasses}=useDensity(props);const{elevationClasses}=useElevation(props);const{roundedClasses,roundedStyles}=useRounded(props);const{ssrBootStyles}=useSsrBoot();const height=computed(()=>{if(isPercentage(props.height))return props.height;return Number(props.height)-(props.density===`comfortable`?8:0)-(props.density===`compact`?16:0)});const isActive=useProxiedModel(props,`active`,props.active);const{layoutItemStyles}=useLayoutItem({id:props.name,order:computed(()=>parseInt(props.order,10)),position:toRef(()=>`bottom`),layoutSize:toRef(()=>isActive.value?height.value:0),elementSize:height,active:isActive,absolute:toRef(()=>props.absolute)});useGroup(props,VBtnToggleSymbol);provideDefaults({VBtn:{baseColor:toRef(()=>props.baseColor),color:toRef(()=>props.color),density:toRef(()=>props.density),stacked:toRef(()=>props.mode!==`horizontal`),variant:`text`}},{scoped:true});useRender(()=>{return createVNode(props.tag,{"class":normalizeClass([`v-bottom-navigation`,{"v-bottom-navigation--active":isActive.value,"v-bottom-navigation--grow":props.grow,"v-bottom-navigation--shift":props.mode===`shift`},themeClasses.value,backgroundColorClasses.value,borderClasses.value,densityClasses.value,elevationClasses.value,roundedClasses.value,props.class]),"style":normalizeStyle([backgroundColorStyles.value,layoutItemStyles.value,{height:convertToUnit(height.value)},ssrBootStyles.value,roundedStyles.value,props.style])},{default:()=>[slots.default&&createBaseVNode(`div`,{"class":`v-bottom-navigation__content`},[slots.default()])]})});return{}}});var makeVBottomSheetProps=propsFactory({inset:Boolean,...makeVDialogProps({transition:`bottom-sheet-transition`,location:`bottom center`,origin:`bottom center`,viewportMargin:0})},`VBottomSheet`);var VBottomSheet=genericComponent()({name:`VBottomSheet`,props:makeVBottomSheetProps(),emits:{"update:modelValue":value=>true},setup(props,{slots}){const isActive=useProxiedModel(props,`modelValue`);useRender(()=>{const dialogProps=VDialog.filterProps(props);return createVNode(VDialog,mergeProps(dialogProps,{"contentClass":[`v-bottom-sheet__content`,props.contentClass],"modelValue":isActive.value,"onUpdate:modelValue":$event=>isActive.value=$event,"class":[`v-bottom-sheet`,{"v-bottom-sheet--inset":props.inset},props.class],"style":props.style}),slots)});return{}}});var handleGesture=(wrapper,scrolled)=>{const{touchstartX,touchendX,touchstartY,touchendY}=wrapper;const dirRatio=.5;const minDistance=16;wrapper.offsetX=touchendX-touchstartX;wrapper.offsetY=touchendY-touchstartY;if(!scrolled.x&&Math.abs(wrapper.offsetY)<dirRatio*Math.abs(wrapper.offsetX)){wrapper.left&&touchendX<touchstartX-minDistance&&wrapper.left(wrapper);wrapper.right&&touchendX>touchstartX+minDistance&&wrapper.right(wrapper)}if(!scrolled.y&&Math.abs(wrapper.offsetX)<dirRatio*Math.abs(wrapper.offsetY)){wrapper.up&&touchendY<touchstartY-minDistance&&wrapper.up(wrapper);wrapper.down&&touchendY>touchstartY+minDistance&&wrapper.down(wrapper)}};function trackScroll(target){const origins=[];for(let el=target instanceof Element?target:null;el;el=el.parentElement)origins.push([el,el.scrollLeft,el.scrollTop]);return()=>({x:origins.some(([el,left])=>el.scrollLeft!==left),y:origins.some(([el,,top])=>el.scrollTop!==top)})}function touchstart(event,wrapper){const touch=event.changedTouches[0];wrapper.touchstartX=touch.clientX;wrapper.touchstartY=touch.clientY;wrapper.start?.({originalEvent:event,...wrapper})}function touchend(event,wrapper,scrolled){const touch=event.changedTouches[0];wrapper.touchendX=touch.clientX;wrapper.touchendY=touch.clientY;wrapper.end?.({originalEvent:event,...wrapper});handleGesture(wrapper,scrolled)}function touchmove(event,wrapper){const touch=event.changedTouches[0];wrapper.touchmoveX=touch.clientX;wrapper.touchmoveY=touch.clientY;wrapper.move?.({originalEvent:event,...wrapper})}function createHandlers(value={}){const wrapper={touchstartX:0,touchstartY:0,touchendX:0,touchendY:0,touchmoveX:0,touchmoveY:0,offsetX:0,offsetY:0,left:value.left,right:value.right,up:value.up,down:value.down,start:value.start,move:value.move,end:value.end};let getScrolled=()=>({x:false,y:false});return{touchstart:e=>{getScrolled=trackScroll(e.target);touchstart(e,wrapper)},touchend:e=>touchend(e,wrapper,getScrolled()),touchmove:e=>touchmove(e,wrapper)}}function mounted(el,binding){const value=binding.value;const target=value?.parent?el.parentElement:el;const options=value?.options??{passive:true};const uid=binding.instance?.$.uid;if(!value||!target||uid===void 0)return;const handlers=createHandlers(binding.value);target._touchHandlers=target._touchHandlers??Object.create(null);target._touchHandlers[uid]=handlers;keys(handlers).forEach(eventName=>{target.addEventListener(eventName,handlers[eventName],options)})}function unmounted(el,binding){const target=binding.value?.parent?el.parentElement:el;const uid=binding.instance?.$.uid;if(!target?._touchHandlers||uid===void 0)return;const handlers=target._touchHandlers[uid];if(!handlers)return;keys(handlers).forEach(eventName=>{target.removeEventListener(eventName,handlers[eventName])});delete target._touchHandlers[uid];if(!keys(target._touchHandlers).length)delete target._touchHandlers}function updated(el,binding){if(binding.value===binding.oldValue)return;unmounted(el,{...binding,value:binding.oldValue});mounted(el,binding)}var Touch={mounted,unmounted,updated};var VWindowSymbol=Symbol.for(`vuetify:v-window`);var VWindowGroupSymbol=Symbol.for(`vuetify:v-window-group`);var makeVWindowProps=propsFactory({continuous:Boolean,nextIcon:{type:[Boolean,String,Function,Object],default:`$next`},prevIcon:{type:[Boolean,String,Function,Object],default:`$prev`},reverse:Boolean,showArrows:{type:[Boolean,String],validator:v=>isBoolean(v)||v===`hover`},verticalArrows:[Boolean,String],touch:{type:[Object,Boolean],default:void 0},direction:{type:String,default:`horizontal`},modelValue:null,disabled:Boolean,selectedClass:{type:String,default:`v-window-item--active`},mandatory:{type:[Boolean,String],default:`force`},crossfade:Boolean,transitionDuration:Number,...makeComponentProps(),...makeTagProps(),...makeThemeProps()},`VWindow`);var VWindow=genericComponent()({name:`VWindow`,directives:{vTouch:Touch},props:makeVWindowProps(),emits:{"update:modelValue":value=>true},setup(props,{slots}){const{themeClasses}=provideTheme(props);const{isRtl}=useRtl();const{t}=useLocale();const group=useGroup(props,VWindowGroupSymbol);const rootRef=ref();const isRtlReverse=computed(()=>isRtl.value?!props.reverse:props.reverse);const isReversed=shallowRef(false);const transition=computed(()=>{if(props.crossfade)return`v-window-crossfade-transition`;return`v-window-${props.direction===`vertical`?`y`:`x`}${(isRtlReverse.value?!isReversed.value:isReversed.value)?`-reverse`:``}-transition`});const transitionCount=shallowRef(0);const transitionHeight=ref(void 0);const activeIndex=computed(()=>{return group.items.value.findIndex(item=>group.selected.value.includes(item.id))});watch(activeIndex,(newVal,oldVal)=>{let scrollableParent;const savedScrollPosition={left:0,top:0};if(IN_BROWSER&&oldVal>=0){scrollableParent=getScrollParent(rootRef.value);savedScrollPosition.left=scrollableParent?.scrollLeft;savedScrollPosition.top=scrollableParent?.scrollTop}const itemsLength=group.items.value.length;const lastIndex=itemsLength-1;if(itemsLength<=2)isReversed.value=newVal<oldVal;else if(newVal===lastIndex&&oldVal===0)isReversed.value=false;else if(newVal===0&&oldVal===lastIndex)isReversed.value=true;else isReversed.value=newVal<oldVal;nextTick$1(()=>{if(!IN_BROWSER||!scrollableParent)return;if(scrollableParent.scrollTop!==savedScrollPosition.top)scrollableParent.scrollTo({...savedScrollPosition,behavior:`instant`});requestAnimationFrame(()=>{if(!scrollableParent)return;if(scrollableParent.scrollTop!==savedScrollPosition.top)scrollableParent.scrollTo({...savedScrollPosition,behavior:`instant`})})})},{flush:`sync`});provide(VWindowSymbol,{transition,isReversed,transitionCount,transitionHeight,rootRef});const canMoveBack=toRef(()=>props.continuous||activeIndex.value!==0);const canMoveForward=toRef(()=>props.continuous||activeIndex.value!==group.items.value.length-1);function prev(){canMoveBack.value&&group.prev()}function next(){canMoveForward.value&&group.next()}const arrows=computed(()=>{const arrows=[];const prevProps={icon:isRtl.value?props.nextIcon:props.prevIcon,class:`v-window__${isRtlReverse.value?`right`:`left`}`,onClick:group.prev,"aria-label":t(`$vuetify.carousel.prev`)};arrows.push(canMoveBack.value?slots.prev?slots.prev({props:prevProps}):createVNode(VBtn,prevProps,null):createBaseVNode(`div`,null,null));const nextProps={icon:isRtl.value?props.prevIcon:props.nextIcon,class:`v-window__${isRtlReverse.value?`left`:`right`}`,onClick:group.next,"aria-label":t(`$vuetify.carousel.next`)};arrows.push(canMoveForward.value?slots.next?slots.next({props:nextProps}):createVNode(VBtn,nextProps,null):createBaseVNode(`div`,null,null));return arrows});const touchOptions=computed(()=>{if(props.touch===false)return props.touch;return{left:()=>{isRtlReverse.value?prev():next()},right:()=>{isRtlReverse.value?next():prev()},start:({originalEvent})=>{originalEvent.stopPropagation()},...props.touch===true?{}:props.touch}});function onKeyDown(e){if(props.direction===`horizontal`&&e.key===`ArrowLeft`||props.direction===`vertical`&&e.key===`ArrowUp`){e.preventDefault();prev();nextTick$1(()=>{canMoveBack.value?focusArrow(0):focusArrow(1)})}if(props.direction===`horizontal`&&e.key===`ArrowRight`||props.direction===`vertical`&&e.key===`ArrowDown`){e.preventDefault();next();nextTick$1(()=>{canMoveForward.value?focusArrow(1):focusArrow(0)})}}function focusArrow(index){const arrow=arrows.value[index];if(!arrow)return;(Array.isArray(arrow)?arrow[0]:arrow).el?.focus()}useRender(()=>withDirectives(createVNode(props.tag,{"ref":rootRef,"class":normalizeClass([`v-window`,{"v-window--show-arrows-on-hover":props.showArrows===`hover`,"v-window--vertical-arrows":!!props.verticalArrows,"v-window--crossfade":!!props.crossfade},themeClasses.value,props.class]),"style":normalizeStyle([props.style,{"--v-window-transition-duration":!PREFERS_REDUCED_MOTION()?convertToUnit(props.transitionDuration,`ms`):null}])},{default:()=>[createBaseVNode(`div`,{"class":`v-window__container`,"style":{height:transitionHeight.value}},[slots.default?.({group}),props.showArrows!==false&&createBaseVNode(`div`,{"class":normalizeClass([`v-window__controls`,{"v-window__controls--left":props.verticalArrows===`left`||props.verticalArrows===true},{"v-window__controls--right":props.verticalArrows===`right`}]),"onKeydown":onKeyDown},[arrows.value])]),slots.additional?.({group})]}),[[Touch,touchOptions.value]]));return{group}}});var makeVWindowItemProps=propsFactory({reverseTransition:{type:[Boolean,String],default:void 0},transition:{type:[Boolean,String],default:void 0},...makeComponentProps(),...makeGroupItemProps(),...makeLazyProps()},`VWindowItem`);var VWindowItem=genericComponent()({name:`VWindowItem`,directives:{vTouch:Touch},props:makeVWindowItemProps(),emits:{"group:selected":val=>true},setup(props,{slots}){const window=inject$1(VWindowSymbol);const groupItem=useGroupItem(props,VWindowGroupSymbol);const{isBooted}=useSsrBoot();if(!window||!groupItem)throw new Error(`[Vuetify] VWindowItem must be used inside VWindow`);const isTransitioning=shallowRef(false);const hasTransition=computed(()=>isBooted.value&&(window.isReversed.value?props.reverseTransition!==false:props.transition!==false));function onAfterTransition(){if(!isTransitioning.value||!window)return;isTransitioning.value=false;if(window.transitionCount.value>0){window.transitionCount.value-=1;if(window.transitionCount.value===0)window.transitionHeight.value=void 0}}function onBeforeTransition(){if(isTransitioning.value||!window)return;isTransitioning.value=true;if(window.transitionCount.value===0)window.transitionHeight.value=convertToUnit(window.rootRef.value?.clientHeight);window.transitionCount.value+=1}function onTransitionCancelled(){onAfterTransition()}function onEnterTransition(el){if(!isTransitioning.value)return;nextTick$1(()=>{if(!hasTransition.value||!isTransitioning.value||!window)return;window.transitionHeight.value=convertToUnit(el.clientHeight)})}const transition=computed(()=>{const name=window.isReversed.value?props.reverseTransition:props.transition;return!hasTransition.value?false:{name:!isString(name)?window.transition.value:name,onBeforeEnter:onBeforeTransition,onAfterEnter:onAfterTransition,onEnterCancelled:onTransitionCancelled,onBeforeLeave:onBeforeTransition,onAfterLeave:onAfterTransition,onLeaveCancelled:onTransitionCancelled,onEnter:onEnterTransition}});const{hasContent}=useLazy(props,groupItem.isSelected);useRender(()=>createVNode(MaybeTransition,{"transition":transition.value,"disabled":!isBooted.value},{default:()=>[withDirectives(createBaseVNode(`div`,{"class":normalizeClass([`v-window-item`,groupItem.selectedClass.value,props.class]),"style":normalizeStyle(props.style)},[hasContent.value&&slots.default?.()]),[[vShow,groupItem.isSelected.value]])]}));return{groupItem}}});var VPickerTitle=createSimpleFunctional(`v-picker-title`);var makeVPickerProps=propsFactory({bgColor:String,divided:Boolean,landscape:Boolean,title:String,hideHeader:Boolean,hideTitle:Boolean,...makeVSheetProps()},`VPicker`);var VPicker=genericComponent()({name:`VPicker`,props:makeVPickerProps(),setup(props,{slots}){const{backgroundColorClasses,backgroundColorStyles}=useBackgroundColor(()=>props.color);useRender(()=>{const sheetProps=VSheet.filterProps(props);const hasTitle=!props.hideTitle&&!!(props.title||slots.title);return createVNode(VSheet,mergeProps(sheetProps,{"color":props.bgColor,"class":[`v-picker`,{"v-picker--divided":props.divided,"v-picker--landscape":props.landscape,"v-picker--with-actions":!!slots.actions},props.class],"style":props.style}),{default:()=>[!props.hideHeader&&createBaseVNode(`div`,{"key":`header`,"class":normalizeClass([`v-picker__header-wrapper`,backgroundColorClasses.value]),"style":normalizeStyle([backgroundColorStyles.value])},[hasTitle&&createVNode(VPickerTitle,{"key":`picker-title`},{default:()=>[slots.title?.()??props.title]}),slots.header&&createBaseVNode(`div`,{"class":`v-picker__header`},[slots.header()])]),createBaseVNode(`div`,{"class":`v-picker__body`},[slots.default?.()]),slots.actions&&createVNode(VDefaultsProvider,{"defaults":{VBtn:{slim:true,variant:`text`}}},{default:()=>[createBaseVNode(`div`,{"class":`v-picker__actions`},[slots.actions()])]})]})});return{}}});var makeVComboboxProps=propsFactory({alwaysFilter:Boolean,autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:true},delimiters:Array,closeOnInputClick:Boolean,trimValues:Boolean,...makeFilterProps({filterKeys:[`title`]}),...makeSelectProps({hideNoData:true,returnObject:true}),...omit(makeVTextFieldProps({modelValue:null,role:`combobox`}),[`validationValue`,`dirty`])},`VCombobox`);var VCombobox=genericComponent()({name:`VCombobox`,props:makeVComboboxProps(),emits:{"update:focused":focused=>true,"update:modelValue":value=>true,"update:search":value=>true,"update:menu":value=>true,"item:added":item=>true,"item:removed":item=>true,"item:created":item=>true},setup(props,{emit,slots}){const{t}=useLocale();const vTextFieldRef=ref();const vMenuRef=ref();const listRef=ref();const headerRef=ref();const footerRef=ref();const vVirtualScrollRef=ref();const isFocused=shallowRef(false);const isPristine=shallowRef(true);const listHasFocus=shallowRef(false);const selectionIndex=shallowRef(-1);let cleared=false;const{items,transformIn,transformOut}=useItems(props);const{textColorClasses,textColorStyles}=useTextColor(()=>vTextFieldRef.value?.color);const{InputIcon}=useInputIcon(props);const model=useProxiedModel(props,`modelValue`,[],v=>transformIn(wrapInArray(v)),v=>{const transformed=transformOut(v);return props.multiple?transformed:transformed[0]??null});const form=useForm(props);const closableChips=toRef(()=>props.closableChips&&!form.isReadonly.value&&!form.isDisabled.value);const chipDefaults=injectNestedDefaults(`VChip`);const hasChips=computed(()=>!!(props.chips||slots.chip));const hasSelectionSlot=computed(()=>hasChips.value||!!slots.selection);const _search=shallowRef(!props.multiple&&!hasSelectionSlot.value?model.value[0]?.title??``:``);const _searchLock=shallowRef(null);const search=computed({get:()=>{return _search.value},set:async val=>{_search.value=val??``;if(val===null||val===``&&!props.multiple&&!hasSelectionSlot.value){for(const item of model.value)emit(`item:removed`,item);model.value=[]}else if(!props.multiple&&!hasSelectionSlot.value){model.value=[transformItem(props,val)];nextTick$1(()=>vVirtualScrollRef.value?.scrollToIndex(0))}if(val&&props.multiple&&props.delimiters?.length){const values=splitByDelimiters(val);if(values.length>1){selectMultiple(values);_search.value=``}}if(!val)selectionIndex.value=-1;isPristine.value=!val}});const counterValue=computed(()=>{return isFunction(props.counterValue)?props.counterValue(model.value):isNumber(props.counterValue)?props.counterValue:props.multiple?model.value.length:search.value.length});const{filteredItems,getMatches}=useFilter(props,items,()=>_searchLock.value??(props.alwaysFilter||!isPristine.value?search.value:``));const displayItems=computed(()=>{if(props.hideSelected&&_searchLock.value===null)return filteredItems.value.filter(filteredItem=>!model.value.some(s=>s.value===filteredItem.value));return filteredItems.value});const menuDisabled=computed(()=>props.hideNoData&&!displayItems.value.length||form.isReadonly.value||form.isDisabled.value);const{menu,closeOnSelect}=useSelectionMenu(props,{vMenuRef,menuDisabled,isFocused});const{menuId,ariaExpanded,ariaControls}=useMenuActivator(props,menu);const{listEvents,onActivatorKeydown,setPendingFocus,flushPendingFocus}=useScrolling(listRef,vTextFieldRef,vVirtualScrollRef,displayItems,{selectedIndex:()=>isPristine.value?getSelectedIndex():-1,headerEl:()=>headerRef.value,menuContentEl:()=>vMenuRef.value?.contentEl,noAutoScroll:()=>props.noAutoScroll});watch(_search,value=>{if(cleared)nextTick$1(()=>cleared=false);else if(isFocused.value&&!menu.value)menu.value=true;if(menu.value&&isFocused.value)nextTick$1(()=>{vVirtualScrollRef.value?.scrollToIndex(0);if(listRef.value?.$el?.contains(getActiveElement()))vTextFieldRef.value?.focus()});emit(`update:search`,value)});watch(model,value=>{if(!props.multiple&&!hasSelectionSlot.value)_search.value=value[0]?.title??``});const selectedValues=computed(()=>model.value.map(selection=>selection.value));const firstSelectableItem=computed(()=>displayItems.value.find(x=>x.type===`item`&&!x.props.disabled));const highlightFirst=computed(()=>{return(props.autoSelectFirst===true||props.autoSelectFirst===`exact`&&search.value===firstSelectableItem.value?.title)&&displayItems.value.length>0&&!isPristine.value&&!listHasFocus.value});const repairOrphanedFocus=useFocusRepair(menu,()=>vMenuRef.value?.contentEl,()=>vTextFieldRef.value?.controlRef);const{onTabKeydown}=useFocusGroups({groups:[{type:`element`,contentRef:headerRef},{type:`list`,contentRef:listRef,displayItemsCount:()=>displayItems.value.length},{type:`element`,contentRef:footerRef}],onLeave:()=>{menu.value=false;vTextFieldRef.value?.focus()}});function onClear(e){cleared=true;nextTick$1(()=>cleared=false);if(props.openOnClear)menu.value=true}function onMousedownControl(){if(menuDisabled.value)return;menu.value=props.closeOnInputClick?!menu.value:true}function onMousedownMenuIcon(e){if(menuDisabled.value)return;if(isFocused.value){e.preventDefault();e.stopPropagation()}menu.value=!menu.value}function onMenuKeydown(e){if(e.key===`Tab`)onTabKeydown(e);if(listRef.value?.$el.contains(e.target)&&(checkPrintable(e)||e.key===`Backspace`))vTextFieldRef.value?.focus()}function onKeydown(e){if(isComposingIgnoreKey(e)||form.isReadonly.value)return;switch(e.key){case`Escape`:menu.value=false;break;case`ArrowDown`:case`ArrowUp`:e.preventDefault();if(onActivatorKeydown(e,menu))break;if(e.key===`ArrowDown`&&highlightFirst.value)listRef.value?.focus(`next`);break;case`Enter`:e.preventDefault();menu.value=true;selectHighlighted();if(search.value)selectFreeText();break;case`Tab`:selectHighlighted();menu.value=false;break;default:onSelectionKeydown(e)}}function selectHighlighted(){const item=firstSelectableItem.value;if(!highlightFirst.value||!item)return;if(model.value.some(({value})=>value===item.value))return;select(item)}function selectFreeText(){const value=props.trimValues?search.value.trim():search.value;if(!value){search.value=``;return}select(transformItem(props,value),true,true);if(hasSelectionSlot.value)_search.value=``}function onSelectionKeydown(e){const length=model.value.length;if([`Backspace`,`Delete`].includes(e.key)){if(!props.multiple&&hasSelectionSlot.value&&length>0&&!search.value)return select(model.value[0],false);if(~selectionIndex.value){e.preventDefault();const originalSelectionIndex=selectionIndex.value;select(model.value[selectionIndex.value],false);selectionIndex.value=originalSelectionIndex>=length-1?length-2:originalSelectionIndex}else if(e.key===`Backspace`&&!search.value)selectionIndex.value=length-1;return}if(!props.multiple)return;if(e.key===`ArrowLeft`){if(selectionIndex.value<0&&(vTextFieldRef.value?.selectionStart??0)>0)return;const prev=selectionIndex.value>-1?selectionIndex.value-1:length-1;if(model.value[prev])selectionIndex.value=prev;else{selectionIndex.value=-1;vTextFieldRef.value?.setSelectionRange(search.value.length,search.value.length)}}else if(e.key===`ArrowRight`){if(selectionIndex.value<0)return;const next=selectionIndex.value+1;if(model.value[next])selectionIndex.value=next;else{selectionIndex.value=-1;vTextFieldRef.value?.setSelectionRange(0,0)}}else if(~selectionIndex.value&&checkPrintable(e))selectionIndex.value=-1}function onPaste(e){const values=splitByDelimiters(e?.clipboardData?.getData(`Text`)??``);if(values.length>1&&props.multiple){e.preventDefault();selectMultiple(values)}}function getSelectedIndex(){return displayItems.value.findIndex(item=>model.value.some(s=>(props.valueComparator||deepEqual)(s.value,item.value)))}function onAfterEnter(){if(props.eager)vVirtualScrollRef.value?.calculateVisibleItems();flushPendingFocus()}function onAfterLeave(){if(isFocused.value){if(vMenuRef.value?.contentEl?._clickOutside?.lastMousedownWasOutside)isFocused.value=false;else vTextFieldRef.value?.focus()}isPristine.value=true;_searchLock.value=null}function isExistingItem(item){const comparator=props.valueComparator||deepEqual;return items.value.some(i=>comparator(i.value,item.value))}function select(item,set=true,keepMenu=false){if(!item||item.props.disabled)return;const comparator=props.valueComparator||deepEqual;if(props.multiple){const index=model.value.findIndex(selection=>comparator(selection.value,item.value));const add=set==null?!~index:set;if(~index){const value=add?[...model.value,item]:[...model.value];const[removed]=value.splice(index,1);if(!add)emit(`item:removed`,removed);model.value=value}else if(add){emit(`item:added`,item);if(!isExistingItem(item))emit(`item:created`,item);model.value=[...model.value,item]}if(props.clearOnSelect)search.value=``}else{const add=set!==false;const old=model.value[0];if(add){if(old&&!comparator(old.value,item.value)){emit(`item:removed`,old);emit(`item:added`,item);if(!isExistingItem(item))emit(`item:created`,item)}else if(!old){emit(`item:added`,item);if(!isExistingItem(item))emit(`item:created`,item)}model.value=[item]}else{if(old)emit(`item:removed`,old);model.value=[]}if((!isPristine.value||props.alwaysFilter)&&_search.value)_searchLock.value=_search.value;_search.value=add&&!hasSelectionSlot.value?item.title:``;nextTick$1(()=>{if(!keepMenu)closeOnSelect();isPristine.value=true})}}function splitByDelimiters(val){const signsToMatch=[`
67
+ `,...props.delimiters??[]].map(escapeForRegex).join(`|`);return val.split(new RegExp(`(?:${signsToMatch})+`))}async function selectMultiple(values){for(let value of values){value=value.trim();if(value){select(transformItem(props,value));await nextTick$1()}}}function onFocusin(e){isFocused.value=true;setTimeout(()=>{listHasFocus.value=true})}function onFocusout(e){listHasFocus.value=false;if(!vTextFieldRef.value?.$el.contains(e.relatedTarget)){if(repairOrphanedFocus(e))return;isFocused.value=false}}let mousedownInsideContentAt=0;function onMousedownContent(){mousedownInsideContentAt=performance.now()}function onBlur(e){const next=e.relatedTarget;if((vMenuRef.value?.contentEl)?.contains(next)||!next&&performance.now()-mousedownInsideContentAt<10)isFocused.value=true}watch(isFocused,(val,oldVal)=>{if(val||val===oldVal)return;selectionIndex.value=-1;menu.value=false;if(search.value){const value=props.trimValues?search.value.trim():search.value;if(!value){search.value=``;return}if(props.multiple){select(transformItem(props,value));return}if(!hasSelectionSlot.value){if(value!==search.value)select(transformItem(props,value));return}if(model.value.some(({title})=>title===value))_search.value=``;else select(transformItem(props,value))}});watch(menu,val=>{if(!val)setPendingFocus(null);if(!props.hideSelected&&val&&model.value.length&&isPristine.value){const index=getSelectedIndex();IN_BROWSER&&!props.noAutoScroll&&window.requestAnimationFrame(()=>{index>=0&&vVirtualScrollRef.value?.scrollToIndex(index,`center`)})}if(val)_searchLock.value=null});watch(items,(newVal,oldVal)=>{if(menu.value)return;if(isFocused.value&&!oldVal.length&&newVal.length)menu.value=true});useRender(()=>{const hasList=!!(!props.hideNoData||displayItems.value.length||slots[`prepend-item`]||slots[`append-item`]||slots[`no-data`]);const isDirty=model.value.length>0;const textFieldProps=VTextField.filterProps(props);const menuSlotProps={search,filteredItems:filteredItems.value};return createVNode(VTextField,mergeProps({"ref":vTextFieldRef},textFieldProps,{"form":``,"modelValue":search.value,"onUpdate:modelValue":$event=>search.value=$event,"focused":isFocused.value,"onUpdate:focused":$event=>isFocused.value=$event,"validationValue":model.externalValue,"counterValue":counterValue.value,"dirty":isDirty,"class":[`v-combobox`,{"v-combobox--active-menu":menu.value,"v-combobox--chips":!!props.chips,"v-combobox--selection-slot":!!hasSelectionSlot.value,"v-combobox--selecting-index":selectionIndex.value>-1,[`v-combobox--${props.multiple?`multiple`:`single`}`]:true},props.class],"style":props.style,"readonly":form.isReadonly.value,"placeholder":isDirty?void 0:props.placeholder,"onClick:clear":onClear,"onMousedown:control":onMousedownControl,"onKeydown":onKeydown,"onPaste":onPaste,"onBlur":onBlur,"aria-expanded":ariaExpanded.value,"aria-controls":ariaControls.value}),{...slots,default:({id})=>createBaseVNode(Fragment,null,[selectedValues.value.map((value,i)=>createBaseVNode(`input`,{"key":i,"type":`hidden`,"name":props.name,"value":value,"form":props.form},null)),createVNode(VMenu,mergeProps({"id":menuId.value,"ref":vMenuRef,"modelValue":menu.value,"onUpdate:modelValue":$event=>menu.value=$event,"activator":`parent`,"captureFocus":false,"openOnArrow":false,"disabled":menuDisabled.value,"_disableKeys":true,"eager":props.eager,"maxHeight":310,"openOnClick":false,"closeOnContentClick":false,"onAfterEnter":onAfterEnter,"onAfterLeave":onAfterLeave},props.menuProps,{"contentClass":[`v-combobox__content`,props.menuProps?.contentClass]}),{default:()=>[createVNode(VSheet,{"elevation":props.menuElevation,"onFocusin":onFocusin,"onKeydown":onMenuKeydown,"onMousedown":onMousedownContent},{default:()=>[slots[`menu-header`]&&createBaseVNode(`header`,{"ref":headerRef},[slots[`menu-header`](menuSlotProps)]),hasList&&createVNode(VList,mergeProps({"key":`combobox-list`,"ref":listRef,"class":`v-list--navigable`,"filterable":true,"selected":selectedValues.value,"selectStrategy":props.multiple?`independent`:`single-independent`,"onMousedown":e=>e.preventDefault(),"selectable":!!displayItems.value.length,"onFocusout":onFocusout,"tabindex":`-1`,"aria-live":`polite`,"aria-labelledby":`${id.value}-label`,"aria-multiselectable":props.multiple,"color":props.itemColor??props.color},listEvents,props.listProps),{default:()=>[slots[`prepend-item`]?.(),!displayItems.value.length&&!props.hideNoData&&(slots[`no-data`]?.()??createVNode(VListItem,{"key":`no-data`,"title":t(props.noDataText)},null)),createVNode(VVirtualScroll,{"ref":vVirtualScrollRef,"renderless":true,"items":displayItems.value,"itemKey":`value`},{default:({item,index,itemRef})=>{const camelizedProps=camelizeProps(item.props);const itemProps=mergeProps(item.props,{ref:itemRef,key:item.value,active:highlightFirst.value&&item===firstSelectableItem.value?true:void 0,onClick:()=>select(item,null),"aria-posinset":index+1,"aria-setsize":displayItems.value.length});if(item.type===`divider`)return slots.divider?.({props:item.raw,index})??createVNode(VDivider,mergeProps(item.props,{"ref":itemRef,"key":`divider-${index}`}),null);if(item.type===`subheader`)return slots.subheader?.({props:item.raw,index})??createVNode(VListSubheader,mergeProps(item.props,{"ref":itemRef,"key":`subheader-${index}`}),null);return slots.item?.({item:item.raw,internalItem:item,index,props:itemProps})??createVNode(VListItem,mergeProps(itemProps,{"role":`option`}),{prepend:({isSelected})=>createBaseVNode(Fragment,null,[props.multiple&&!props.hideSelected?createVNode(VCheckboxBtn,{"key":item.value,"modelValue":isSelected,"ripple":false,"tabindex":`-1`,"aria-hidden":true,"onClick":event=>event.preventDefault()},null):void 0,camelizedProps.prependAvatar&&createVNode(VAvatar,{"image":camelizedProps.prependAvatar},null),camelizedProps.prependIcon&&createVNode(VIcon,{"icon":camelizedProps.prependIcon},null)]),title:()=>{return isPristine.value?item.title:createVNode(VHighlight,{"text":item.title,"matches":getMatches(item)?.title,"markClass":`v-combobox__mask`,"matchAll":true,"ignoreCase":true},null)}})}}),slots[`append-item`]?.()]}),slots[`menu-footer`]&&createBaseVNode(`footer`,{"ref":footerRef},[slots[`menu-footer`](menuSlotProps)])]})]}),model.value.map((item,index)=>{function onChipClose(e){e.stopPropagation();e.preventDefault();select(item,false)}const slotProps=mergeProps(VChip.filterProps(item.props),{"onClick:close":onChipClose,onKeydown(e){if(e.key!==`Enter`&&e.key!==` `)return;e.preventDefault();e.stopPropagation();onChipClose(e)},onMousedown(e){e.preventDefault();e.stopPropagation()},modelValue:true,"onUpdate:modelValue":void 0});const hasSlot=hasChips.value?!!slots.chip:!!slots.selection;const slotContent=hasSlot?ensureValidVNode(hasChips.value?slots.chip({item:item.raw,internalItem:item,index,props:slotProps}):slots.selection({item:item.raw,internalItem:item,index})):void 0;if(hasSlot&&!slotContent)return void 0;return createBaseVNode(`div`,{"key":item.value,"class":normalizeClass([`v-combobox__selection`,index===selectionIndex.value&&[`v-combobox__selection--selected`,textColorClasses.value]]),"style":normalizeStyle(index===selectionIndex.value?textColorStyles.value:{})},[hasChips.value?!slots.chip?createVNode(VChip,mergeProps({"key":`chip`,"closable":closableChips.value,"size":chipDefaults.value?.size??`small`,"text":item.title,"disabled":item.props.disabled},slotProps),null):createVNode(VDefaultsProvider,{"key":`chip-defaults`,"defaults":{VChip:{closable:closableChips.value,size:chipDefaults.value?.size??`small`,text:item.title}}},{default:()=>[slotContent]}):slotContent??createBaseVNode(`span`,{"class":`v-combobox__selection-text`},[item.title,props.multiple&&index<model.value.length-1&&createBaseVNode(`span`,{"class":`v-combobox__selection-comma`},[createTextVNode(`,`)])])])})]),"append-inner":(...args)=>createBaseVNode(Fragment,null,[slots[`append-inner`]?.(...args),(!props.hideNoData||props.items.length)&&props.menuIcon?createVNode(VIcon,{"class":`v-combobox__menu-icon`,"color":vTextFieldRef.value?.fieldIconColor,"icon":props.menuIcon,"onMousedown":onMousedownMenuIcon,"onClick":noop,"aria-hidden":true,"tabindex":`-1`},null):void 0,props.appendInnerIcon&&createVNode(InputIcon,{"key":`append-icon`,"name":`appendInner`,"color":args[0].iconColor.value},null)])})});return forwardRefs({isFocused,isPristine,menu,search,selectionIndex,filteredItems,select},vTextFieldRef)}});var makeVTableProps=propsFactory({gridlines:{type:[Boolean,String],default:`horizontal`,validator:v=>isBoolean(v)||[`horizontal`,`vertical`,`all`].includes(v)},fixedHeader:Boolean,fixedFooter:Boolean,height:[Number,String],hover:Boolean,striped:{type:String,default:null,validator:v=>[`even`,`odd`].includes(v)},...makeComponentProps(),...makeDensityProps(),...makeTagProps(),...makeThemeProps()},`VTable`);var VTable=genericComponent()({name:`VTable`,inheritAttrs:false,props:makeVTableProps(),setup(props,{attrs,slots,emit}){const{themeClasses}=provideTheme(props);const{densityClasses}=useDensity(props);const gridlinesVariant=computed(()=>{if(props.gridlines===false)return`none`;if(props.gridlines===true)return`all`;return props.gridlines});useRender(()=>{const[tableAttrs,rootAttrs]=pickWithRest(attrs,[/^aria-label/]);return createVNode(props.tag,mergeProps(rootAttrs,{"class":[`v-table`,`v-table--gridlines-${gridlinesVariant.value}`,{"v-table--fixed-height":!!props.height,"v-table--fixed-header":props.fixedHeader,"v-table--fixed-footer":props.fixedFooter,"v-table--has-top":!!slots.top,"v-table--has-bottom":!!slots.bottom,"v-table--hover":props.hover,"v-table--striped-even":props.striped===`even`,"v-table--striped-odd":props.striped===`odd`},themeClasses.value,densityClasses.value,props.class],"style":props.style}),{default:()=>[slots.top?.(),slots.default?createBaseVNode(`div`,{"class":`v-table__wrapper`,"style":{height:convertToUnit(props.height)}},[createBaseVNode(`table`,normalizeProps(guardReactiveProps(tableAttrs)),[slots.caption?.(),slots.default()])]):slots.wrapper?.(),slots.bottom?.()]})});return{}}});var makeVContainerProps=propsFactory({fluid:{type:Boolean,default:false},...makeComponentProps(),...makeDimensionProps(),...makeTagProps()},`VContainer`);var VContainer=genericComponent()({name:`VContainer`,props:makeVContainerProps(),setup(props,{slots}){const{rtlClasses}=useRtl();const{dimensionStyles}=useDimension(props);useRender(()=>createVNode(props.tag,{"class":normalizeClass([`v-container`,{"v-container--fluid":props.fluid},rtlClasses.value,props.class]),"style":normalizeStyle([dimensionStyles.value,props.style])},slots));return{}}});var makeVDatePickerControlsProps=propsFactory({active:{type:[String,Array],default:void 0},controlHeight:[Number,String],controlVariant:{type:String,default:`docked`},noMonthPicker:Boolean,disabled:{type:[Boolean,String,Array],default:null},nextIcon:{type:IconValue,default:`$next`},prevIcon:{type:IconValue,default:`$prev`},modeIcon:{type:IconValue,default:`$subgroup`},text:String,monthText:String,yearText:String,viewMode:{type:String,default:`month`}},`VDatePickerControls`);var VDatePickerControls=genericComponent()({name:`VDatePickerControls`,props:makeVDatePickerControlsProps(),emits:{"click:year":()=>true,"click:month":()=>true,"click:prev":()=>true,"click:next":()=>true,"click:prev-year":()=>true,"click:next-year":()=>true},setup(props,{emit,slots}){const{t}=useLocale();const disableMonth=computed(()=>{return Array.isArray(props.disabled)?props.disabled.includes(`text`):!!props.disabled});const disableYear=computed(()=>{return Array.isArray(props.disabled)?props.disabled.includes(`mode`):!!props.disabled});const disablePrevMonth=computed(()=>{return Array.isArray(props.disabled)?props.disabled.includes(`prev-month`):!!props.disabled});const disableNextMonth=computed(()=>{return Array.isArray(props.disabled)?props.disabled.includes(`next-month`):!!props.disabled});const disablePrevYear=computed(()=>{return Array.isArray(props.disabled)?props.disabled.includes(`prev-year`):!!props.disabled});const disableNextYear=computed(()=>{return Array.isArray(props.disabled)?props.disabled.includes(`next-year`):!!props.disabled});function onClickPrevMonth(){emit(`click:prev`)}function onClickNextMonth(){emit(`click:next`)}function onClickPrevYear(){emit(`click:prev-year`)}function onClickNextYear(){emit(`click:next-year`)}function onClickYear(){emit(`click:year`)}function onClickMonth(){emit(`click:month`)}useRender(()=>{const innerDefaults={VBtn:{density:`comfortable`,variant:`text`}};const prevMonth=createVNode(VBtn,{"data-testid":`prev-month`,"disabled":disablePrevMonth.value,"icon":props.prevIcon,"aria-label":t(`$vuetify.datePicker.ariaLabel.previousMonth`),"onClick":onClickPrevMonth},null);const nextMonth=createVNode(VBtn,{"data-testid":`next-month`,"disabled":disableNextMonth.value,"icon":props.nextIcon,"aria-label":t(`$vuetify.datePicker.ariaLabel.nextMonth`),"onClick":onClickNextMonth},null);const prevYear=createVNode(VBtn,{"data-testid":`prev-year`,"disabled":disablePrevYear.value,"icon":props.prevIcon,"aria-label":t(`$vuetify.datePicker.ariaLabel.previousYear`),"onClick":onClickPrevYear},null);const nextYear=createVNode(VBtn,{"data-testid":`next-year`,"disabled":disableNextYear.value,"icon":props.nextIcon,"aria-label":t(`$vuetify.datePicker.ariaLabel.nextYear`),"onClick":onClickNextYear},null);const onlyMonthBtn=createVNode(VBtn,{"class":`v-date-picker-controls__only-month-btn`,"data-testid":`month-btn`,"density":`default`,"disabled":disableMonth.value,"text":props.monthText,"appendIcon":props.modeIcon,"rounded":true,"aria-label":t(`$vuetify.datePicker.ariaLabel.selectMonth`),"onClick":onClickMonth},null);const onlyYearBtn=createVNode(VBtn,{"class":`v-date-picker-controls__only-year-btn`,"data-testid":`year-btn`,"density":`default`,"disabled":disableYear.value,"text":props.yearText,"appendIcon":props.modeIcon,"rounded":true,"aria-label":t(`$vuetify.datePicker.ariaLabel.selectYear`),"onClick":onClickYear},null);const monthYearBtn=createVNode(VBtn,{"class":`v-date-picker-controls__year-btn`,"data-testid":`year-btn`,"density":`default`,"disabled":disableYear.value,"text":props.text,"appendIcon":props.modeIcon,"rounded":true,"aria-label":t(`$vuetify.datePicker.ariaLabel.selectYear`),"onClick":onClickYear},null);const monthYearSplit=createBaseVNode(Fragment,null,[createVNode(VBtn,{"class":`v-date-picker-controls__month-btn`,"data-testid":`month-btn`,"height":`36`,"disabled":disableMonth.value,"text":props.text,"rounded":true,"aria-label":t(`$vuetify.datePicker.ariaLabel.selectMonth`),"onClick":onClickMonth},null),createVNode(VBtn,{"class":`v-date-picker-controls__mode-btn`,"data-testid":`year-btn`,"disabled":disableYear.value,"icon":props.modeIcon,"aria-label":t(`$vuetify.datePicker.ariaLabel.selectYear`),"onClick":onClickYear},null)]);const slotProps={viewMode:props.viewMode,disabled:Array.isArray(props.disabled)?props.disabled:[],monthYearText:props.text??``,monthText:props.monthText??``,yearText:props.yearText??``,openMonths:onClickMonth,openYears:onClickYear,prevMonth:onClickPrevMonth,nextMonth:onClickNextMonth,prevYear:onClickPrevYear,nextYear:onClickNextYear};const modalControls=createBaseVNode(Fragment,null,[props.noMonthPicker?monthYearBtn:monthYearSplit,createVNode(VSpacer,null,null),createBaseVNode(`div`,{"class":`v-date-picker-controls__month`},[prevMonth,nextMonth])]);const dockedControls=createBaseVNode(Fragment,null,[createBaseVNode(`div`,{"class":`v-date-picker-controls__month`},[prevMonth,onlyMonthBtn,nextMonth]),createVNode(VSpacer,null,null),createBaseVNode(`div`,{"class":`v-date-picker-controls__year`},[prevYear,onlyYearBtn,nextYear])]);return createVNode(VDefaultsProvider,{"defaults":innerDefaults},{default:()=>[createBaseVNode(`div`,{"class":normalizeClass([`v-date-picker-controls`,`v-date-picker-controls--variant-${props.controlVariant}`]),"style":{"--v-date-picker-controls-height":convertToUnit(props.controlHeight)}},[slots.default?.(slotProps)??createBaseVNode(Fragment,null,[props.controlVariant===`modal`&&modalControls,props.controlVariant===`docked`&&dockedControls])])]})});return{}}});var makeVDatePickerHeaderProps=propsFactory({appendIcon:IconValue,color:String,header:String,transition:String,onClick:EventProp(),onClickOnce:EventProp()},`VDatePickerHeader`);var VDatePickerHeader=genericComponent()({name:`VDatePickerHeader`,props:makeVDatePickerHeaderProps(),emits:{click:()=>true,"click:append":()=>true},setup(props,{emit,slots}){const{backgroundColorClasses,backgroundColorStyles}=useBackgroundColor(()=>props.color);function onClick(){emit(`click`)}function onClickAppend(){emit(`click:append`)}useRender(()=>{const hasContent=!!(slots.default||props.header);const hasAppend=!!(slots.append||props.appendIcon);return createBaseVNode(`div`,{"class":normalizeClass([`v-date-picker-header`,{"v-date-picker-header--clickable":!!(props.onClick||props.onClickOnce)},backgroundColorClasses.value]),"style":normalizeStyle(backgroundColorStyles.value),"onClick":(props.onClick||props.onClickOnce)&&onClick},[slots.prepend&&createBaseVNode(`div`,{"key":`prepend`,"class":`v-date-picker-header__prepend`},[slots.prepend()]),hasContent&&createVNode(MaybeTransition,{"key":`content`,"name":props.transition},{default:()=>[createBaseVNode(`div`,{"key":props.header,"class":`v-date-picker-header__content`},[slots.default?.()??props.header])]}),hasAppend&&createBaseVNode(`div`,{"class":`v-date-picker-header__append`},[!slots.append?createVNode(VBtn,{"key":`append-btn`,"icon":props.appendIcon,"variant":`text`,"onClick":onClickAppend},null):createVNode(VDefaultsProvider,{"key":`append-defaults`,"disabled":!props.appendIcon,"defaults":{VBtn:{icon:props.appendIcon,variant:`text`}}},{default:()=>[slots.append?.()]})])])});return{}}});var makeCalendarProps=propsFactory({allowedDates:[Array,Function],disabled:{type:Boolean,default:null},displayValue:null,modelValue:Array,month:[Number,String],max:null,min:null,showAdjacentMonths:Boolean,year:[Number,String],weekdays:{type:Array,default:()=>[0,1,2,3,4,5,6]},weeksInMonth:{type:String,default:`dynamic`},firstDayOfWeek:{type:[Number,String],default:void 0},firstDayOfYear:{type:[Number,String],default:void 0},weekdayFormat:String},`calendar`);function useCalendar(props){const adapter=useDate();const model=useProxiedModel(props,`modelValue`,[],v=>wrapInArray(v).map(i=>adapter.date(i)));const displayValue=computed(()=>{if(props.displayValue)return adapter.date(props.displayValue);if(model.value.length>0)return adapter.date(model.value[0]);if(props.min)return adapter.date(props.min);if(Array.isArray(props.allowedDates))return adapter.date(props.allowedDates[0]);return adapter.date()});const year=useProxiedModel(props,`year`,void 0,v=>{const value=!isNullOrUndefined(v)?Number(v):adapter.getYear(displayValue.value);return adapter.startOfYear(adapter.setYear(adapter.date(),value))},v=>adapter.getYear(v));const month=useProxiedModel(props,`month`,void 0,v=>{const value=!isNullOrUndefined(v)?Number(v):adapter.getMonth(displayValue.value);const date=adapter.setYear(adapter.startOfMonth(adapter.date()),adapter.getYear(year.value));return adapter.setMonth(date,value)},v=>adapter.getMonth(v));const weekdayLabels=computed(()=>{const firstDayOfWeek=adapter.toJsDate(adapter.startOfWeek(adapter.date(),props.firstDayOfWeek)).getDay();return adapter.getWeekdays(props.firstDayOfWeek,props.weekdayFormat).filter((_,i)=>props.weekdays.includes((i+firstDayOfWeek)%7))});const weeksInMonth=computed(()=>{const weeks=adapter.getWeekArray(month.value,props.firstDayOfWeek);const days=weeks.flat();const daysInMonth=42;if(props.weeksInMonth===`static`&&days.length<daysInMonth){const lastDay=days[days.length-1];let week=[];for(let day=1;day<=daysInMonth-days.length;day++){week.push(adapter.addDays(lastDay,day));if(day%7===0){weeks.push(week);week=[]}}}return weeks});function genDays(days,today){return days.filter(date=>{return props.weekdays.includes(adapter.toJsDate(date).getDay())}).map((date,index)=>{const isoDate=adapter.toISO(date);const isAdjacent=!adapter.isSameMonth(date,month.value);const isStart=adapter.isSameDay(date,adapter.startOfMonth(month.value));const isEnd=adapter.isSameDay(date,adapter.endOfMonth(month.value));const isSame=adapter.isSameDay(date,month.value);const weekdaysCount=props.weekdays.length;return{date,formatted:adapter.format(date,`keyboardDate`),isAdjacent,isDisabled:isDisabled(date),isEnd,isHidden:isAdjacent&&!props.showAdjacentMonths,isSame,isSelected:model.value.some(value=>adapter.isSameDay(date,value)),isStart,isToday:adapter.isSameDay(date,today),isWeekEnd:index%weekdaysCount===weekdaysCount-1,isWeekStart:index%weekdaysCount===0,isoDate,localized:adapter.format(date,`dayOfMonth`),month:adapter.getMonth(date),year:adapter.getYear(date)}})}const daysInWeek=computed(()=>{const lastDay=adapter.startOfWeek(displayValue.value,props.firstDayOfWeek);const week=[];for(let day=0;day<=6;day++)week.push(adapter.addDays(lastDay,day));return genDays(week,adapter.date())});const daysInMonth=computed(()=>{return genDays(weeksInMonth.value.flat(),adapter.date())});const weekNumbers=computed(()=>{return weeksInMonth.value.map(week=>{return week.length?adapter.getWeek(week[0],props.firstDayOfWeek,props.firstDayOfYear):null})});const{minDate,maxDate}=useCalendarRange(props);function isDisabled(value){if(props.disabled)return true;const date=adapter.date(value);if(minDate.value&&adapter.isBefore(adapter.endOfDay(date),minDate.value))return true;if(maxDate.value&&adapter.isAfter(date,maxDate.value))return true;if(Array.isArray(props.allowedDates)&&props.allowedDates.length>0)return!props.allowedDates.some(d=>adapter.isSameDay(adapter.date(d),date));if(isFunction(props.allowedDates))return!props.allowedDates(date);return false}return{displayValue,daysInMonth,daysInWeek,genDays,model,weeksInMonth,weekdayLabels,weekNumbers}}function useCalendarRange(props){const adapter=useDate();const minDate=computed(()=>{if(!props.min)return null;const date=adapter.date(props.min);return adapter.isValid(date)?date:null});const maxDate=computed(()=>{if(!props.max)return null;const date=adapter.date(props.max);return adapter.isValid(date)?date:null});function clampDate(date){if(minDate.value&&adapter.isBefore(date,minDate.value))return minDate.value;if(maxDate.value&&adapter.isAfter(date,maxDate.value))return maxDate.value;return date}function isInAllowedRange(date){return(!minDate.value||adapter.isAfter(date,minDate.value))&&(!maxDate.value||adapter.isBefore(date,maxDate.value))}return{minDate,maxDate,clampDate,isInAllowedRange}}function useVirtualFocus(items,options){const{control,orientation=`vertical`,circular=false,columns:_columns,onHighlight}=options;const highlightedId=shallowRef();let previousEl=null;function applyHighlight(id){const item=items().find(i=>i.id===id);if(!item?.el)return false;const el=toValue(item.el);if(!el)return false;const controlEl=toValue(control);if(controlEl){const itemId=el.getAttribute(`id`);if(itemId)controlEl.setAttribute(`aria-activedescendant`,itemId)}if(previousEl)delete previousEl.dataset.highlighted;el.dataset.highlighted=``;previousEl=el;el.scrollIntoView?.({block:`nearest`});onHighlight?.(id);return true}function mod(n,i){return(i%n+n)%n}function indexOf(id){return items().findIndex(item=>item.id===id)}function go(id){highlightedId.value=id;applyHighlight(id)}function step(stride){const all=items();if(!all.length)return;const current=isNullOrUndefined(highlightedId.value)?-1:indexOf(highlightedId.value);const dir=stride>0?1:-1;const abs=Math.abs(stride);const maxHops=Math.ceil(all.length/abs);let index=current+stride;let hops=0;if(circular)index=mod(all.length,index);else if(index<0||index>=all.length)return;while(hops<maxHops){const item=all[index];if(item&&!toValue(item.disabled)){go(item.id);return}hops++;index=circular?mod(all.length,index+stride):index+dir*abs;if(!circular&&(index<0||index>=all.length))return}}function first(){const item=items().find(i=>!toValue(i.disabled));if(item)go(item.id)}function last(){const item=[...items()].reverse().find(i=>!toValue(i.disabled));if(item)go(item.id)}function rowFirst(){const cols=toValue(_columns)??0;if(!cols)return first();const all=items();const cur=isNullOrUndefined(highlightedId.value)?0:Math.max(0,indexOf(highlightedId.value));const start=cur-cur%cols;for(let i=start;i<Math.min(start+cols,all.length);i++)if(!toValue(all[i]?.disabled)){go(all[i].id);return}}function rowLast(){const cols=toValue(_columns)??0;if(!cols)return last();const all=items();const cur=isNullOrUndefined(highlightedId.value)?0:Math.max(0,indexOf(highlightedId.value));const start=cur-cur%cols;const end=Math.min(start+cols,all.length);for(let i=end-1;i>=start;i--)if(!toValue(all[i]?.disabled)){go(all[i].id);return}}function highlight(id){const prev=highlightedId.value;highlightedId.value=id;if(!applyHighlight(id))highlightedId.value=prev}function focusHighlighted(){if(isNullOrUndefined(highlightedId.value))return;const item=items().find(i=>i.id===highlightedId.value);if(!item?.el)return;toValue(item.el)?.focus()}function clear(){highlightedId.value=void 0;toValue(control)?.removeAttribute(`aria-activedescendant`);if(previousEl){delete previousEl.dataset.highlighted;previousEl=null}}function isRtl(e){const el=e.currentTarget;return el?getComputedStyle(el).direction===`rtl`:false}function onKeydown(e){const cols=toValue(_columns);const rtl=isRtl(e);if(cols){switch(e.key){case`ArrowRight`:e.preventDefault();step(rtl?-1:1);break;case`ArrowLeft`:e.preventDefault();step(rtl?1:-1);break;case`ArrowDown`:e.preventDefault();step(cols);break;case`ArrowUp`:e.preventDefault();step(-cols);break;case`Home`:e.preventDefault();e.ctrlKey?first():rowFirst();break;case`End`:e.preventDefault();e.ctrlKey?last():rowLast()}return}const prevKeys=[];const nextKeys=[];if(orientation===`vertical`||orientation===`both`){prevKeys.push(`ArrowUp`);nextKeys.push(`ArrowDown`)}if(orientation===`horizontal`||orientation===`both`){prevKeys.push(rtl?`ArrowRight`:`ArrowLeft`);nextKeys.push(rtl?`ArrowLeft`:`ArrowRight`)}if(prevKeys.includes(e.key)){e.preventDefault();step(-1)}else if(nextKeys.includes(e.key)){e.preventDefault();step(1)}else if(e.key===`Home`){e.preventDefault();first()}else if(e.key===`End`){e.preventDefault();last()}}onScopeDispose(clear);return{highlightedId,highlight,focusHighlighted,clear,next:()=>step(1),prev:()=>step(-1),first,last,onKeydown}}function keyToDirection(key){switch(key){case`ArrowUp`:return`up`;case`ArrowDown`:return`down`;case`ArrowLeft`:return`left`;case`ArrowRight`:return`right`;default:return null}}function useGridSelection({items,columns,initialValue,itemAttribute,onSelect,onNavigation,onHighlight,onEscape}){const hasFocusIn=shallowRef(false);const containerEl=shallowRef();const virtualFocus=useVirtualFocus(()=>items().map(item=>({id:item.value,disabled:item.isDisabled,el:()=>containerEl.value?.querySelector(`[${itemAttribute}="${item.value}"]`)})),{control:containerEl,columns});if(onHighlight)watch(virtualFocus.highlightedId,id=>onHighlight(id));function onFocusin(e){const grid=containerEl.value;if(!grid||grid.contains(e.relatedTarget))return;hasFocusIn.value=true;const targetId=e.target?.getAttribute?.(itemAttribute);if(!isNullOrUndefined(targetId)&&items().some(item=>String(item.value)===targetId)){virtualFocus.highlight(targetId);return}const initial=initialValue(virtualFocus.highlightedId.value);if(!isNullOrUndefined(initial))virtualFocus.highlight(initial);virtualFocus.focusHighlighted()}function onFocusout(e){if(containerEl.value?.contains(e.relatedTarget))return;hasFocusIn.value=false;virtualFocus.clear()}function onActivate(){const id=virtualFocus.highlightedId.value;if(isNullOrUndefined(id))return;const item=items().find(x=>x.value===id);if(item&&!item.isDisabled)onSelect(id)}function selectItem(value){virtualFocus.highlight(value);virtualFocus.focusHighlighted();onSelect(value)}function focusItem(value){virtualFocus.highlight(value);if(isNullOrUndefined(virtualFocus.highlightedId.value))virtualFocus.first();virtualFocus.focusHighlighted()}function onContainerKeydown(e){if(e.key===`Escape`){e.preventDefault();onEscape?.();return}if((e.key===`Enter`||e.key===` `)&&!isNullOrUndefined(virtualFocus.highlightedId.value)){e.preventDefault();onActivate();return}const direction=keyToDirection(e.key);if(direction&&onNavigation?.(direction,e,virtualFocus.highlightedId.value))return;virtualFocus.onKeydown(e);virtualFocus.focusHighlighted()}return{containerProps:computed(()=>({ref:el=>containerEl.value=el??void 0,tabindex:hasFocusIn.value?-1:0,onKeydown:onContainerKeydown,onFocusin,onFocusout})),containerEl,selectItem,focusItem,clear:virtualFocus.clear}}function useRangePicker({multiple,model,compare,normalizeEnd=v=>v,previewValue:externalPreview}){const rangeStart=computed(()=>model.value.length>=1?model.value[0]:void 0);const rangeEnd=computed(()=>model.value.length>=2?model.value[model.value.length-1]:void 0);const previewValue=externalPreview??shallowRef();const previewRange=computed(()=>{if(multiple.value!==`range`)return null;if(!rangeStart.value||rangeEnd.value)return null;if(!previewValue.value)return null;const start=rangeStart.value;const preview=previewValue.value;if(compare(start,preview)===0)return null;return compare(start,preview)<0?[start,preview]:[preview,start]});function isSelected(value){if(multiple.value===`range`&&model.value.length===2)return isWithinRange(value);for(const v of model.value)if(compare(v,value)===0)return true;return false}function isWithinRange(value){if(multiple.value!==`range`||model.value.length<2)return false;const[start,end]=[model.value[0],model.value[model.value.length-1]];return compare(value,start)>=0&&compare(value,end)<=0}function isRangeStart(value){if(multiple.value!==`range`||model.value.length<2)return false;return compare(value,model.value[0])===0}function isRangeEnd(value){if(multiple.value!==`range`||model.value.length<2)return false;return compare(value,model.value[model.value.length-1])===0}function isRangeMiddle(value){return isWithinRange(value)&&!isRangeStart(value)&&!isRangeEnd(value)}function select(value){if(multiple.value===`range`)onRangeSelect(value);else if(multiple.value)onMultipleSelect(value);else model.value=[value]}function onRangeSelect(value){if(model.value.length===0)model.value=[value];else if(model.value.length===1){const start=model.value[0];if(compare(value,start)===0)model.value=[];else if(compare(value,start)<0)model.value=[value,normalizeEnd(start)];else model.value=[start,normalizeEnd(value)]}else model.value=[value]}function setPreview(value){previewValue.value=value}function clearPreview(){previewValue.value=void 0}function isPreviewStart(value){const range=previewRange.value;if(!range)return false;return compare(value,range[0])===0}function isPreviewEnd(value){const range=previewRange.value;if(!range)return false;return compare(value,range[1])===0}function isPreviewMiddle(value){const range=previewRange.value;if(!range)return false;return compare(value,range[0])>0&&compare(value,range[1])<0}function isInPreviewRange(value){return isPreviewStart(value)||isPreviewEnd(value)||isPreviewMiddle(value)}function onMultipleSelect(value){const index=model.value.findIndex(v=>compare(v,value)===0);if(index===-1)model.value=[...model.value,value];else{const copy=[...model.value];copy.splice(index,1);model.value=copy}}return{isSelected,isRangeStart,isRangeEnd,isRangeMiddle,select,setPreview,clearPreview,isPreviewStart,isPreviewEnd,isPreviewMiddle,isInPreviewRange}}var makeVDatePickerMonthProps=propsFactory({color:String,hideWeekdays:Boolean,multiple:[Boolean,Number,String],showWeek:Boolean,readonly:Boolean,transition:{type:String,default:`picker-transition`},reverseTransition:{type:String,default:`picker-reverse-transition`},events:{type:[Array,Function,Object],default:()=>null},eventColor:{type:[Array,Function,Object,String],default:()=>null},noAutoNavigation:Boolean,previewValue:null,...omit(makeCalendarProps(),[`displayValue`])},`VDatePickerMonth`);var VDatePickerMonth=genericComponent()({name:`VDatePickerMonth`,props:makeVDatePickerMonthProps(),emits:{"update:modelValue":date=>true,"update:month":date=>true,"update:year":date=>true,"update:previewValue":_value=>true,"boundary-navigate":_payload=>true},setup(props,{emit,slots}){const uid=useId();const{t}=useLocale();const{daysInMonth,model,weekNumbers,weekdayLabels}=useCalendar(props);const adapter=useDate();const isReverse=shallowRef(false);const transition=toRef(()=>{return!isReverse.value?props.transition:props.reverseTransition});function compareDays(a,b){if(adapter.isSameDay(a,b))return 0;return adapter.isBefore(a,b)?-1:1}const previewValue=useProxiedModel(props,`previewValue`);const range=useRangePicker({multiple:computed(()=>{if(props.multiple===`range`)return`range`;return!!props.multiple}),model,compare:compareDays,normalizeEnd:value=>adapter.endOfDay(value),previewValue});const selectionColor=toRef(()=>props.color||`surface-variant`);const{backgroundColorClasses:rangeColorClasses,backgroundColorStyles:rangeColorStyles}=useBackgroundColor(selectionColor);const atMax=computed(()=>{const max=[`number`,`string`].includes(typeof props.multiple)?Number(props.multiple):Infinity;return model.value.length>=max});const dayRows=computed(()=>{return chunkArray(daysInMonth.value,props.weekdays.length)});function isSelectedDay(item){return range.isSelected(item.date)}function isDayDisabled(item){return item.isDisabled||item.isHidden||atMax.value&&!isSelectedDay(item)}function getDateAriaLabel(item){const fullDate=adapter.format(item.date,`fullDateWithWeekday`);const localeKey=item.isToday?`currentDate`:`selectDate`;return t(`$vuetify.datePicker.ariaLabel.${localeKey}`,fullDate)}function onClick(value){range.select(adapter.startOfDay(value))}function initialFocusDate(current){const isVisible=d=>!d.isAdjacent&&!d.isDisabled;if(current!=null){const cur=daysInMonth.value.find(d=>d.isoDate===current);if(cur&&!cur.isAdjacent)return current}return(daysInMonth.value.find(d=>isVisible(d)&&model.value.some(m=>adapter.isSameDay(m,d.date)))??daysInMonth.value.find(isVisible))?.isoDate}const{containerProps,containerEl,selectItem,focusItem,clear}=useGridSelection({items:()=>daysInMonth.value.map(d=>({value:d.isoDate,isDisabled:isDayDisabled(d)})),columns:()=>props.weekdays.length,initialValue:initialFocusDate,itemAttribute:`data-v-date`,onSelect:onDaySelect,onNavigation:onNavigationBoundary,onEscape});function onDaySelect(isoDate){const item=daysInMonth.value.find(d=>d.isoDate===isoDate);if(!item||isDayDisabled(item))return;onClick(item.date);if(item.isAdjacent){emit(`update:month`,adapter.getMonth(item.date));emit(`update:year`,adapter.getYear(item.date));nextTick$1(()=>focusItem(isoDate))}}function onNavigationBoundary(direction,e,curId){if(curId==null)return false;const cols=props.weekdays.length;const rtl=getComputedStyle(e.currentTarget).direction===`rtl`;let stride;let calendarDays;if(direction===`left`){stride=rtl?1:-1;calendarDays=stride}else if(direction===`right`){stride=rtl?-1:1;calendarDays=stride}else if(direction===`up`){stride=-cols;calendarDays=-7}else{stride=cols;calendarDays=7}const all=daysInMonth.value;const curIndex=all.findIndex(d=>d.isoDate===curId);if(curIndex<0)return false;const targetItem=all[curIndex+stride];if(targetItem&&!targetItem.isHidden)return false;e.preventDefault();let targetIsoDate;if(targetItem)targetIsoDate=targetItem.isoDate;else{const step=calendarDays<0?-1:1;let candidate=adapter.addDays(adapter.date(curId),calendarDays);while(!props.weekdays.includes(adapter.toJsDate(candidate).getDay()))candidate=adapter.addDays(candidate,step);targetIsoDate=adapter.toISO(candidate)}if(props.noAutoNavigation){emit(`boundary-navigate`,{direction,targetIsoDate});return true}const targetDate=adapter.date(targetIsoDate);emit(`update:month`,adapter.getMonth(targetDate));emit(`update:year`,adapter.getYear(targetDate));nextTick$1(()=>focusItem(targetIsoDate));return true}function onEscape(){const rawTarget=model.value[0]??adapter.date();const targetIso=adapter.toISO(adapter.date(rawTarget));if(daysInMonth.value.find(d=>d.isoDate===targetIso&&!d.isAdjacent)){focusItem(targetIso);return}const targetDate=adapter.date(rawTarget);emit(`update:month`,adapter.getMonth(targetDate));emit(`update:year`,adapter.getYear(targetDate));nextTick$1(()=>focusItem(targetIso))}function onDayClick(item){if(item.isAdjacent)onDaySelect(item.isoDate);else selectItem(item.isoDate)}function focusGrid(){containerEl.value?.focus()}watch(daysInMonth,(val,oldVal)=>{if(!oldVal||val[0].isoDate===oldVal[0].isoDate)return;isReverse.value=adapter.isBefore(val[0].date,oldVal[0].date);clear()});function getEventColors(date){const{events,eventColor}=props;let eventData;let eventColors=[];if(Array.isArray(events))eventData=events.includes(date);else if(events instanceof Function)eventData=events(date)||false;else if(events)eventData=events[date]||false;else eventData=false;if(!eventData)return[];else if(eventData!==true)eventColors=wrapInArray(eventData);else if(isString(eventColor))eventColors=[eventColor];else if(isFunction(eventColor))eventColors=wrapInArray(eventColor(date));else if(Array.isArray(eventColor))eventColors=eventColor;else if(isObject$1(eventColor))eventColors=wrapInArray(eventColor[date]);return!eventColors.length?[`surface-variant`]:eventColors.filter(Boolean).map(color=>isString(color)?color:`surface-variant`)}function genEvents(date){const eventColors=getEventColors(date);if(!eventColors.length)return null;return createBaseVNode(`div`,{"class":`v-date-picker-month__events`},[eventColors.map(color=>createVNode(VBadge,{"dot":true,"color":color},null))])}useRender(()=>createBaseVNode(`div`,{"class":`v-date-picker-month`,"style":{"--v-date-picker-days-in-week":props.weekdays.length}},[props.showWeek&&createBaseVNode(`div`,{"key":`weeks`,"class":`v-date-picker-month__weeks`},[!props.hideWeekdays&&createBaseVNode(`div`,{"key":`hide-week-days`,"class":`v-date-picker-month__day`},[createTextVNode(`\xA0`)]),weekNumbers.value.map(week=>createBaseVNode(`div`,{"class":normalizeClass([`v-date-picker-month__day`,`v-date-picker-month__day--adjacent`])},[week]))]),createVNode(MaybeTransition,{"name":transition.value},{default:()=>[createBaseVNode(`div`,mergeProps({"key":daysInMonth.value[0].date?.toString(),"class":`v-date-picker-month__days`,"role":`grid`,"onMouseleave":range.clearPreview},containerProps.value),[!props.hideWeekdays&&createBaseVNode(`div`,{"key":`weekday-labels`,"class":`v-date-picker-month__days-row`},[weekdayLabels.value.map(weekDay=>createBaseVNode(`div`,{"class":normalizeClass([`v-date-picker-month__day`,`v-date-picker-month__weekday`])},[weekDay]))]),dayRows.value.map((row,rowIndex)=>createBaseVNode(`div`,{"class":`v-date-picker-month__days-row`,"role":`row`},[row.map((item,colIndex)=>{const i=rowIndex*props.weekdays.length+colIndex;const isSelected=isSelectedDay(item);const disabled=isDayDisabled(item);const rangeStart=range.isRangeStart(item.date);const rangeEnd=range.isRangeEnd(item.date);const rangeMiddle=range.isRangeMiddle(item.date);const previewStart=range.isPreviewStart(item.date);const previewEnd=range.isPreviewEnd(item.date);const previewMiddle=range.isPreviewMiddle(item.date);const slotProps={props:{class:`v-date-picker-month__day-btn`,color:isSelected&&!rangeMiddle||item.isToday?props.color:void 0,disabled,readonly:props.readonly,icon:true,ripple:false,tabindex:-1,variant:isSelected&&!rangeMiddle?`flat`:item.isToday?`outlined`:`text`,"aria-label":getDateAriaLabel(item),"aria-current":item.isToday?`date`:void 0,id:`${uid}-day-${item.isoDate}`,"data-v-date":!disabled?item.isoDate:void 0,onMousedown:e=>e.preventDefault(),onClick:()=>onDayClick(item),onMouseenter:()=>range.setPreview(item.date),onFocus:()=>range.setPreview(item.date),onBlur:range.clearPreview},item,i};const hasRangeBg=rangeStart||rangeEnd||rangeMiddle;const hasPreviewBg=previewStart||previewEnd||previewMiddle;return createBaseVNode(`div`,{"class":normalizeClass([`v-date-picker-month__day`,{"v-date-picker-month__day--adjacent":item.isAdjacent,"v-date-picker-month__day--hide-adjacent":item.isHidden,"v-date-picker-month__day--selected":isSelected,"v-date-picker-month__day--week-end":item.isWeekEnd,"v-date-picker-month__day--week-start":item.isWeekStart,"v-date-picker-month__day--range-start":rangeStart,"v-date-picker-month__day--range-end":rangeEnd,"v-date-picker-month__day--range-middle":rangeMiddle,"v-date-picker-month__day--preview-start":previewStart,"v-date-picker-month__day--preview-end":previewEnd,"v-date-picker-month__day--preview-middle":previewMiddle}]),"role":`gridcell`},[(hasRangeBg||hasPreviewBg)&&createBaseVNode(`div`,{"key":`range-bg`,"class":normalizeClass([`v-date-picker-month__range-bg`,hasRangeBg?`v-date-picker-month__range-bg--range`:`v-date-picker-month__range-bg--preview`,rangeColorClasses.value]),"style":normalizeStyle(rangeColorStyles.value)},null),(props.showAdjacentMonths||!item.isAdjacent)&&(slots.day?.(slotProps)??createVNode(VBtn,slotProps.props,{default:()=>[item.localized,genEvents(item.isoDate)]}))])})]))])]})]));return{focusGrid,focusItem}}});var makeVDatePickerMonthsProps=propsFactory({color:String,columns:{type:Number,default:2},height:[String,Number],min:null,max:null,modelValue:Number,year:Number,allowedMonths:[Array,Function]},`VDatePickerMonths`);var VDatePickerMonths=genericComponent()({name:`VDatePickerMonths`,props:makeVDatePickerMonthsProps(),emits:{"update:modelValue":date=>true,escape:()=>true},setup(props,{emit,slots}){const adapter=useDate();const model=useProxiedModel(props,`modelValue`);const uid=useId();const months=computed(()=>{let date=adapter.startOfYear(adapter.date());if(props.year)date=adapter.setYear(date,props.year);return range(12).map(i=>{const text=adapter.format(date,`monthShort`);const label=adapter.format(date,`month`);const isDisabled=!!(!isMonthAllowed(i)||props.min&&adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)),date)||props.max&&adapter.isAfter(date,adapter.startOfMonth(adapter.date(props.max))));date=adapter.getNextMonth(date);return{isDisabled,text,label,value:i}})});watchEffect(()=>{model.value=model.value??adapter.getMonth(adapter.date())});function isMonthAllowed(month){if(Array.isArray(props.allowedMonths)&&props.allowedMonths.length)return props.allowedMonths.includes(month);if(isFunction(props.allowedMonths))return props.allowedMonths(month);return true}function onMonthSelect(value){if(model.value===value)emit(`update:modelValue`,value);else model.value=value}const{containerProps,selectItem}=useGridSelection({items:()=>months.value,columns:()=>props.columns,initialValue:current=>current??model.value??adapter.getMonth(adapter.date()),itemAttribute:`data-v-month`,onSelect:onMonthSelect,onEscape:()=>emit(`escape`)});useRender(()=>createBaseVNode(`div`,{"class":`v-date-picker-months`,"style":{height:convertToUnit(props.height)}},[createBaseVNode(`div`,mergeProps({"class":`v-date-picker-months__content`,"style":{"--v-date-picker-months-columns":props.columns}},containerProps.value),[months.value.map((month,i)=>{const btnProps={id:`${uid}-month-${i}`,active:model.value===i,ariaLabel:month.label,color:model.value===i?props.color:void 0,disabled:month.isDisabled,rounded:true,tabindex:-1,text:month.text,variant:model.value===month.value?`flat`:`text`,"data-v-month":month.value,onMousedown:e=>e.preventDefault(),onClick:()=>selectItem(i)};return slots.month?.({month,i,props:btnProps})??createVNode(VBtn,mergeProps({"key":`month`},btnProps),null)})])]));return{}}});var makeVDatePickerYearsProps=propsFactory({color:String,columns:{type:Number,default:3},height:[String,Number],min:null,max:null,modelValue:Number,allowedYears:[Array,Function]},`VDatePickerYears`);var VDatePickerYears=genericComponent()({name:`VDatePickerYears`,props:makeVDatePickerYearsProps(),directives:{vIntersect:Intersect},emits:{"update:modelValue":year=>true,escape:()=>true},setup(props,{emit,slots}){const adapter=useDate();const model=useProxiedModel(props,`modelValue`);const containerRef=templateRef();const uid=useId();const years=computed(()=>{const year=adapter.getYear(adapter.date());let min=year-100;let max=year+52;if(props.min)min=adapter.getYear(adapter.date(props.min));if(props.max)max=adapter.getYear(adapter.date(props.max));let date=adapter.startOfYear(adapter.date());date=adapter.setYear(date,min);return range(max-min+1,min).map(i=>{const text=adapter.format(date,`year`);date=adapter.setYear(date,adapter.getYear(date)+1);return{text,value:i,isDisabled:!isYearAllowed(i)}})});watchEffect(()=>{model.value=model.value??adapter.getYear(adapter.date())});function isYearAllowed(year){if(Array.isArray(props.allowedYears)&&props.allowedYears.length)return props.allowedYears.includes(year);if(isFunction(props.allowedYears))return props.allowedYears(year);return true}function onYearSelect(value){if(model.value===value)emit(`update:modelValue`,value);else model.value=value}const{containerProps,containerEl,selectItem}=useGridSelection({items:()=>years.value,columns:()=>props.columns,initialValue:current=>current??model.value??adapter.getYear(adapter.date()),itemAttribute:`data-v-year`,onSelect:onYearSelect,onEscape:()=>emit(`escape`)});function scrollToSelected(){const container=containerRef.el;const target=containerEl.value?.querySelector(`[data-v-year="${model.value}"]`);if(!container||!target)return;const containerRect=container.getBoundingClientRect();const targetRect=target.getBoundingClientRect();container.scrollTop+=targetRect.top-containerRect.top-container.clientHeight/2+targetRect.height/2}useRender(()=>withDirectives(createBaseVNode(`div`,{"class":`v-date-picker-years`,"ref":containerRef,"tabindex":-1,"style":{height:convertToUnit(props.height)}},[createBaseVNode(`div`,mergeProps({"class":`v-date-picker-years__content`,"style":{"--v-date-picker-years-columns":props.columns}},containerProps.value),[years.value.map((year,i)=>{const btnProps={id:`${uid}-year-${year.value}`,active:model.value===year.value,color:model.value===year.value?props.color:void 0,rounded:true,tabindex:-1,text:year.text,disabled:year.isDisabled,variant:model.value===year.value?`flat`:`text`,"data-v-year":year.value,onMousedown:e=>e.preventDefault(),onClick:()=>selectItem(year.value)};return slots.year?.({year,i,props:btnProps})??createVNode(VBtn,mergeProps({"key":`month`},btnProps),null)})])]),[[Intersect,{handler:scrollToSelected},null,{once:true}]]));return{}}});var makeVDatePickerProps=propsFactory({header:{type:String,default:`$vuetify.datePicker.header`},headerColor:String,headerDateFormat:{type:String,default:`normalDateWithWeekday`},landscapeHeaderWidth:[Number,String],...omit(makeVDatePickerControlsProps(),[`active`,`monthText`,`yearText`]),...makeVDatePickerMonthProps({weeksInMonth:`static`}),...omit(makeVDatePickerMonthsProps(),[`modelValue`,`columns`]),...omit(makeVDatePickerYearsProps(),[`modelValue`,`columns`]),...makeVPickerProps({title:`$vuetify.datePicker.title`}),modelValue:null},`VDatePicker`);var VDatePicker=genericComponent()({name:`VDatePicker`,props:makeVDatePickerProps(),emits:{"update:modelValue":date=>true,"update:month":date=>true,"update:year":date=>true,"update:previewValue":_value=>true,"update:viewMode":date=>true,"boundary-navigate":_payload=>true},setup(props,{emit,slots}){const adapter=useDate();const{t}=useLocale();const{rtlClasses}=useRtl();const model=useProxiedModel(props,`modelValue`,void 0,v=>wrapInArray(v).map(i=>adapter.date(i)),v=>props.multiple?v:v[0]);const viewMode=useProxiedModel(props,`viewMode`);const previewValue=useProxiedModel(props,`previewValue`);const{minDate,maxDate,clampDate}=useCalendarRange(props);const internal=computed(()=>{const today=adapter.date();const value=model.value?.[0]?adapter.date(model.value[0]):clampDate(today);return value&&adapter.isValid(value)?value:today});const headerColor=toRef(()=>props.headerColor??props.color);const _month=useProxiedModel(props,`month`);const month=computed({get:()=>Number(_month.value??adapter.getMonth(adapter.startOfMonth(internal.value))),set:v=>_month.value=v});const _year=useProxiedModel(props,`year`);const year=computed({get:()=>Number(_year.value??adapter.getYear(adapter.startOfYear(adapter.setMonth(internal.value,month.value)))),set:v=>_year.value=v});const isReversing=shallowRef(false);const header=computed(()=>{if(props.multiple===`range`&&model.value.length===2){const[startDate,endDate]=model.value;const daysBetween=adapter.getDiff(endDate,startDate,`days`)+1;return t(`$vuetify.datePicker.itemsSelected`,daysBetween)}if(props.multiple&&model.value.length>1)return t(`$vuetify.datePicker.itemsSelected`,model.value.length);const formattedDate=model.value[0]&&adapter.isValid(model.value[0])?adapter.format(adapter.date(model.value[0]),props.headerDateFormat):t(props.header);return props.landscape&&formattedDate.split(` `).length===3?formattedDate.replace(` `,`
68
+ `):formattedDate});const monthStart=toRef(()=>{let date=adapter.date();date=adapter.setDate(date,1);date=adapter.setMonth(date,month.value);date=adapter.setYear(date,year.value);return date});const monthYearText=toRef(()=>adapter.format(monthStart.value,`monthAndYear`));const monthText=toRef(()=>adapter.format(monthStart.value,`monthShort`));const yearText=toRef(()=>adapter.format(monthStart.value,`year`));const headerTransition=toRef(()=>`date-picker-header${isReversing.value?`-reverse`:``}-transition`);const disabled=computed(()=>{if(props.disabled)return true;const targets=[];if(viewMode.value!==`month`)targets.push(...[`prev-month`,`next-month`,`prev-year`,`next-year`]);else{let _date=adapter.date();_date=adapter.startOfMonth(_date);_date=adapter.setMonth(_date,month.value);_date=adapter.setYear(_date,year.value);if(minDate.value){const prevMonthEnd=adapter.addDays(adapter.startOfMonth(_date),-1);const prevYearEnd=adapter.addDays(adapter.startOfYear(_date),-1);adapter.isAfter(minDate.value,prevMonthEnd)&&targets.push(`prev-month`);adapter.isAfter(minDate.value,prevYearEnd)&&targets.push(`prev-year`)}if(maxDate.value){const nextMonthStart=adapter.addDays(adapter.endOfMonth(_date),1);const nextYearStart=adapter.addDays(adapter.endOfYear(_date),1);adapter.isAfter(nextMonthStart,maxDate.value)&&targets.push(`next-month`);adapter.isAfter(nextYearStart,maxDate.value)&&targets.push(`next-year`)}}return targets});const allowedYears=computed(()=>{return props.allowedYears||isYearAllowed});const allowedMonths=computed(()=>{return props.allowedMonths||isMonthAllowed});function isAllowedInRange(start,end){const allowedDates=props.allowedDates;if(!isFunction(allowedDates))return true;const days=1+daysDiff(adapter,start,end);for(let i=0;i<days;i++)if(allowedDates(adapter.addDays(start,i)))return true;return false}function isYearAllowed(year){if(isFunction(props.allowedDates)){const startOfYear=adapter.parseISO(`${year}-01-01`);return isAllowedInRange(startOfYear,adapter.endOfYear(startOfYear))}if(Array.isArray(props.allowedDates)&&props.allowedDates.length){for(const date of props.allowedDates)if(adapter.getYear(adapter.date(date))===year)return true;return false}return true}function isMonthAllowed(month){if(isFunction(props.allowedDates)){const monthTwoDigits=String(month+1).padStart(2,`0`);const startOfMonth=adapter.parseISO(`${year.value}-${monthTwoDigits}-01`);return isAllowedInRange(startOfMonth,adapter.endOfMonth(startOfMonth))}if(Array.isArray(props.allowedDates)&&props.allowedDates.length){for(const date of props.allowedDates)if(adapter.getYear(adapter.date(date))===year.value&&adapter.getMonth(adapter.date(date))===month)return true;return false}return true}function onClickNextMonth(){if(month.value<11)month.value++;else{year.value++;month.value=0;onUpdateYear()}onUpdateMonth()}function onClickPrevMonth(){if(month.value>0)month.value--;else{year.value--;month.value=11;onUpdateYear()}onUpdateMonth()}function onClickNextYear(){year.value++;if(maxDate.value){const monthTwoDigits=String(month.value+1).padStart(2,`0`);const monthStart=adapter.parseISO(`${year.value}-${monthTwoDigits}-01`);if(adapter.isAfter(monthStart,maxDate.value))month.value=adapter.getMonth(maxDate.value)}onUpdateYear()}function onClickPrevYear(){year.value--;if(minDate.value){const monthTwoDigits=String(month.value+1).padStart(2,`0`);const monthStart=adapter.endOfMonth(adapter.parseISO(`${year.value}-${monthTwoDigits}-01`));if(adapter.isAfter(minDate.value,monthStart))month.value=adapter.getMonth(minDate.value)}onUpdateYear()}const monthGridRef=shallowRef();function focusDate(isoDate){monthGridRef.value?.focusItem(isoDate)}function onClickDate(){viewMode.value=`month`}function onEscape(){viewMode.value=`month`;nextTick$1(()=>monthGridRef.value?.focusGrid())}function onClickMonth(){viewMode.value=viewMode.value===`months`?`month`:`months`}function onClickYear(){viewMode.value=viewMode.value===`year`?`month`:`year`}function onUpdateMonth(){if(viewMode.value===`months`)onClickMonth()}function onUpdateYear(){if(viewMode.value===`year`)onClickYear()}watch(model,(val,oldVal)=>{if(props.noAutoNavigation)return;const arrBefore=wrapInArray(oldVal);const arrAfter=wrapInArray(val);if(!arrAfter.length)return;const before=adapter.date(arrBefore[arrBefore.length-1]);const after=adapter.date(arrAfter[arrAfter.length-1]);if(adapter.isSameDay(before,after))return;const newMonth=adapter.getMonth(after);const newYear=adapter.getYear(after);if(newMonth!==month.value){month.value=newMonth;onUpdateMonth()}if(newYear!==year.value){year.value=newYear;onUpdateYear()}isReversing.value=adapter.isBefore(before,after)});useRender(()=>{const pickerProps=VPicker.filterProps(props);const datePickerControlsProps=omit(VDatePickerControls.filterProps(props),[`viewMode`]);const datePickerHeaderProps=VDatePickerHeader.filterProps(props);const datePickerMonthProps=VDatePickerMonth.filterProps(props);const datePickerMonthsProps=omit(VDatePickerMonths.filterProps(props),[`modelValue`]);const datePickerYearsProps=omit(VDatePickerYears.filterProps(props),[`modelValue`]);const headerProps={color:headerColor.value,header:header.value,transition:headerTransition.value};return createVNode(VPicker,mergeProps(pickerProps,{"color":headerColor.value,"class":[`v-date-picker`,`v-date-picker--${viewMode.value}`,{"v-date-picker--show-week":props.showWeek},rtlClasses.value,props.class],"style":[{"--v-date-picker-landscape-header-width":convertToUnit(props.landscapeHeaderWidth)},props.style]}),{title:()=>slots.title?.()??createBaseVNode(`div`,{"class":`v-date-picker__title`},[t(props.title)]),header:()=>slots.header?createVNode(VDefaultsProvider,{"defaults":{VDatePickerHeader:{...headerProps}}},{default:()=>[slots.header?.(headerProps)]}):createVNode(VDatePickerHeader,mergeProps({"key":`header`},datePickerHeaderProps,headerProps,{"onClick":viewMode.value!==`month`?onClickDate:void 0}),{prepend:slots.prepend,append:slots.append}),default:()=>createBaseVNode(Fragment,null,[createVNode(VDatePickerControls,mergeProps(datePickerControlsProps,{"disabled":disabled.value,"viewMode":viewMode.value,"text":monthYearText.value,"monthText":monthText.value,"yearText":yearText.value,"onClick:next":onClickNextMonth,"onClick:prev":onClickPrevMonth,"onClick:nextYear":onClickNextYear,"onClick:prevYear":onClickPrevYear,"onClick:month":onClickMonth,"onClick:year":onClickYear}),{default:slots.controls}),createVNode(VFadeTransition,{"hideOnLeave":true},{default:()=>[viewMode.value===`months`?createVNode(VDatePickerMonths,mergeProps({"key":`date-picker-months`},datePickerMonthsProps,{"modelValue":month.value,"onUpdate:modelValue":[$event=>month.value=$event,onUpdateMonth],"min":minDate.value,"max":maxDate.value,"year":year.value,"allowedMonths":allowedMonths.value,"onEscape":onEscape}),{month:slots.month}):viewMode.value===`year`?createVNode(VDatePickerYears,mergeProps({"key":`date-picker-years`},datePickerYearsProps,{"modelValue":year.value,"onUpdate:modelValue":[$event=>year.value=$event,onUpdateYear],"min":minDate.value,"max":maxDate.value,"allowedYears":allowedYears.value,"onEscape":onEscape}),{year:slots.year}):createVNode(VDatePickerMonth,mergeProps({"ref":monthGridRef,"key":`date-picker-month`},datePickerMonthProps,{"modelValue":model.value,"onUpdate:modelValue":$event=>model.value=$event,"month":month.value,"onUpdate:month":[$event=>month.value=$event,onUpdateMonth],"year":year.value,"onUpdate:year":[$event=>year.value=$event,onUpdateYear],"previewValue":previewValue.value,"onUpdate:previewValue":$event=>previewValue.value=$event,"onBoundaryNavigate":payload=>emit(`boundary-navigate`,payload),"min":minDate.value,"max":maxDate.value}),{day:slots.day})]})]),actions:slots.actions})});return{focusDate}}});var makeVMainProps=propsFactory({scrollable:Boolean,...makeComponentProps(),...makeDimensionProps(),...makeTagProps({tag:`main`})},`VMain`);var VMain=genericComponent()({name:`VMain`,props:makeVMainProps(),setup(props,{slots}){const{dimensionStyles}=useDimension(props);const{mainStyles}=useLayout();const{ssrBootStyles}=useSsrBoot();useRender(()=>createVNode(props.tag,{"class":normalizeClass([`v-main`,{"v-main--scrollable":props.scrollable},props.class]),"style":normalizeStyle([mainStyles.value,ssrBootStyles.value,dimensionStyles.value,props.style])},{default:()=>[props.scrollable?createBaseVNode(`div`,{"class":`v-main__scroller`},[slots.default?.()]):slots.default?.()]}));return{}}});function useSticky({rootEl,isSticky,layoutItemStyles}){const isStuck=shallowRef(false);const stuckPosition=shallowRef(0);const stickyStyles=computed(()=>{const side=isBoolean(isStuck.value)?`top`:isStuck.value;return[isSticky.value?{top:`auto`,bottom:`auto`,height:void 0}:void 0,isStuck.value?{[side]:convertToUnit(stuckPosition.value)}:{top:layoutItemStyles.value.top}]});onMounted(()=>{watch(isSticky,val=>{if(val)window.addEventListener(`scroll`,onScroll,{passive:true});else window.removeEventListener(`scroll`,onScroll)},{immediate:true})});onBeforeUnmount(()=>{window.removeEventListener(`scroll`,onScroll)});let lastScrollTop=0;function onScroll(){const direction=lastScrollTop>window.scrollY?`up`:`down`;const rect=rootEl.value.getBoundingClientRect();const layoutTop=parseFloat(layoutItemStyles.value.top??0);const top=window.scrollY-Math.max(0,stuckPosition.value-layoutTop);const bottom=rect.height+Math.max(stuckPosition.value,layoutTop)-window.scrollY-window.innerHeight;const bodyScroll=parseFloat(getComputedStyle(rootEl.value).getPropertyValue(`--v-body-scroll-y`))||0;if(rect.height<window.innerHeight-layoutTop){isStuck.value=`top`;stuckPosition.value=layoutTop}else if(direction===`up`&&isStuck.value===`bottom`||direction===`down`&&isStuck.value===`top`){stuckPosition.value=window.scrollY+rect.top-bodyScroll;isStuck.value=true}else if(direction===`down`&&bottom<=0){stuckPosition.value=0;isStuck.value=`bottom`}else if(direction===`up`&&top<=0){if(!bodyScroll){stuckPosition.value=rect.top+top;isStuck.value=`top`}else if(isStuck.value!==`top`){stuckPosition.value=-top+bodyScroll+layoutTop;isStuck.value=`top`}}lastScrollTop=window.scrollY}return{isStuck,stickyStyles}}var HORIZON=100;var HISTORY=20;function kineticEnergyToVelocity(work){return(work<0?-1:1)*Math.sqrt(Math.abs(work))*1.41421356237}function calculateImpulseVelocity(samples){if(samples.length<2)return 0;if(samples.length===2){if(samples[1].t===samples[0].t)return 0;return(samples[1].d-samples[0].d)/(samples[1].t-samples[0].t)}let work=0;for(let i=samples.length-1;i>0;i--){if(samples[i].t===samples[i-1].t)continue;const vprev=kineticEnergyToVelocity(work);const vcurr=(samples[i].d-samples[i-1].d)/(samples[i].t-samples[i-1].t);work+=(vcurr-vprev)*Math.abs(vcurr);if(i===samples.length-1)work*=.5}return kineticEnergyToVelocity(work)*1e3}function useVelocity(){const touches={};function addMovement(e){Array.from(e.changedTouches).forEach(touch=>{(touches[touch.identifier]??(touches[touch.identifier]=new CircularBuffer(HISTORY))).push([e.timeStamp,touch])})}function endTouch(e){Array.from(e.changedTouches).forEach(touch=>{delete touches[touch.identifier]})}function getVelocity(id){const samples=touches[id]?.values().reverse();if(!samples)throw new Error(`No samples for touch id ${id}`);const newest=samples[0];const x=[];const y=[];for(const val of samples){if(newest[0]-val[0]>HORIZON)break;x.push({t:val[0],d:val[1].clientX});y.push({t:val[0],d:val[1].clientY})}return{x:calculateImpulseVelocity(x),y:calculateImpulseVelocity(y),get direction(){const{x,y}=this;const[absX,absY]=[Math.abs(x),Math.abs(y)];return absX>absY&&x>=0?`right`:absX>absY&&x<=0?`left`:absY>absX&&y>=0?`down`:absY>absX&&y<=0?`up`:oops$1()}}}return{addMovement,endTouch,getVelocity}}function oops$1(){throw new Error}function useTouch({el,isActive,isTemporary,width,touchless,position}){onMounted(()=>{window.addEventListener(`touchstart`,onTouchstart,{passive:true});window.addEventListener(`touchmove`,onTouchmove,{passive:false});window.addEventListener(`touchend`,onTouchend,{passive:true})});onBeforeUnmount(()=>{window.removeEventListener(`touchstart`,onTouchstart);window.removeEventListener(`touchmove`,onTouchmove);window.removeEventListener(`touchend`,onTouchend)});const isHorizontal=computed(()=>[`left`,`right`].includes(position.value));const{addMovement,endTouch,getVelocity}=useVelocity();let maybeDragging=false;const isDragging=shallowRef(false);const dragProgress=shallowRef(0);const offset=shallowRef(0);let start;function getOffset(pos,active){return(position.value===`left`?pos:position.value===`right`?document.documentElement.clientWidth-pos:position.value===`top`?pos:position.value===`bottom`?document.documentElement.clientHeight-pos:oops())-(active?width.value:0)}function getProgress(pos,limit=true){const progress=position.value===`left`?(pos-offset.value)/width.value:position.value===`right`?(document.documentElement.clientWidth-pos-offset.value)/width.value:position.value===`top`?(pos-offset.value)/width.value:position.value===`bottom`?(document.documentElement.clientHeight-pos-offset.value)/width.value:oops();return limit?clamp$1(progress):progress}function onTouchstart(e){if(touchless.value)return;const touchX=e.changedTouches[0].clientX;const touchY=e.changedTouches[0].clientY;const touchZone=25;const inTouchZone=position.value===`left`?touchX<touchZone:position.value===`right`?touchX>document.documentElement.clientWidth-touchZone:position.value===`top`?touchY<touchZone:position.value===`bottom`?touchY>document.documentElement.clientHeight-touchZone:oops();const inElement=isActive.value&&(position.value===`left`?touchX<width.value:position.value===`right`?touchX>document.documentElement.clientWidth-width.value:position.value===`top`?touchY<width.value:position.value===`bottom`?touchY>document.documentElement.clientHeight-width.value:oops());if(inTouchZone||inElement||isActive.value&&isTemporary.value){start=[touchX,touchY];offset.value=getOffset(isHorizontal.value?touchX:touchY,isActive.value);dragProgress.value=getProgress(isHorizontal.value?touchX:touchY);maybeDragging=offset.value>-20&&offset.value<80;endTouch(e);addMovement(e)}}function onTouchmove(e){const touchX=e.changedTouches[0].clientX;const touchY=e.changedTouches[0].clientY;if(maybeDragging){if(!e.cancelable){maybeDragging=false;return}const dx=Math.abs(touchX-start[0]);const dy=Math.abs(touchY-start[1]);if(isHorizontal.value?dx>dy&&dx>3:dy>dx&&dy>3){isDragging.value=true;maybeDragging=false}else if((isHorizontal.value?dy:dx)>3)maybeDragging=false}if(!isDragging.value)return;e.preventDefault();addMovement(e);const progress=getProgress(isHorizontal.value?touchX:touchY,false);dragProgress.value=Math.max(0,Math.min(1,progress));if(progress>1)offset.value=getOffset(isHorizontal.value?touchX:touchY,true);else if(progress<0)offset.value=getOffset(isHorizontal.value?touchX:touchY,false)}function onTouchend(e){maybeDragging=false;if(!isDragging.value)return;addMovement(e);isDragging.value=false;const velocity=getVelocity(e.changedTouches[0].identifier);const vx=Math.abs(velocity.x);const vy=Math.abs(velocity.y);if(isHorizontal.value?vx>vy&&vx>400:vy>vx&&vy>3)isActive.value=velocity.direction===({left:`right`,right:`left`,top:`down`,bottom:`up`}[position.value]||oops());else isActive.value=dragProgress.value>.5}const dragStyles=computed(()=>{return isDragging.value?{transform:position.value===`left`?`translateX(calc(-100% + ${dragProgress.value*width.value}px))`:position.value===`right`?`translateX(calc(100% - ${dragProgress.value*width.value}px))`:position.value===`top`?`translateY(calc(-100% + ${dragProgress.value*width.value}px))`:position.value===`bottom`?`translateY(calc(100% - ${dragProgress.value*width.value}px))`:oops(),transition:`none`}:void 0});useToggleScope(isDragging,()=>{const transform=el.value?.style.transform??null;const transition=el.value?.style.transition??null;watchEffect(()=>{el.value?.style.setProperty(`transform`,dragStyles.value?.transform||`none`);el.value?.style.setProperty(`transition`,dragStyles.value?.transition||null)});onScopeDispose(()=>{el.value?.style.setProperty(`transform`,transform);el.value?.style.setProperty(`transition`,transition)})});return{isDragging,dragProgress,dragStyles}}function oops(){throw new Error}var locations=[`start`,`end`,`left`,`right`,`top`,`bottom`];var makeVNavigationDrawerProps=propsFactory({color:String,disableResizeWatcher:Boolean,disableRouteWatcher:Boolean,expandOnHover:Boolean,floating:Boolean,modelValue:{type:Boolean,default:null},permanent:Boolean,rail:{type:Boolean,default:null},railWidth:{type:[Number,String],default:56},scrim:{type:[Boolean,String],default:true},image:String,temporary:Boolean,persistent:Boolean,touchless:Boolean,width:{type:[Number,String],default:256},location:{type:String,default:`start`,validator:value=>locations.includes(value)},sticky:Boolean,...makeBorderProps(),...makeComponentProps(),...makeDelayProps(),...makeDisplayProps({mobile:null}),...makeElevationProps(),...makeLayoutItemProps(),...makeRoundedProps(),...omit(makeFocusTrapProps(),[`disableInitialFocus`]),...makeTagProps({tag:`nav`}),...makeThemeProps()},`VNavigationDrawer`);var VNavigationDrawer=genericComponent()({name:`VNavigationDrawer`,props:makeVNavigationDrawerProps(),emits:{"update:modelValue":val=>true,"update:rail":val=>true},setup(props,{attrs,emit,slots}){const{isRtl}=useRtl();const{themeClasses}=provideTheme(props);const{borderClasses}=useBorder(props);const{backgroundColorClasses,backgroundColorStyles}=useBackgroundColor(()=>props.color);const{elevationClasses}=useElevation(props);const{displayClasses,mobile}=useDisplay(props);const{roundedClasses,roundedStyles}=useRounded(props);const router=useRouter();const isActive=useProxiedModel(props,`modelValue`,null,v=>!!v);const{ssrBootStyles}=useSsrBoot();const{scopeId}=useScopeId();const rootEl=ref();const isHovering=shallowRef(false);const{runOpenDelay,runCloseDelay}=useDelay(props,value=>{isHovering.value=value});const{layoutRect}=useLayout();const location=computed(()=>toPhysical(props.location,isRtl.value));const isVertical=computed(()=>location.value===`top`||location.value===`bottom`);const layoutSpan=computed(()=>(isVertical.value?layoutRect.value?.height:layoutRect.value?.width)??0);const width=computed(()=>{return props.rail&&props.expandOnHover&&isHovering.value?props.width:props.rail?props.railWidth:props.width});const widthPx=computed(()=>resolveSize(width.value,layoutSpan.value));const isPersistent=toRef(()=>props.persistent);const isTemporary=computed(()=>!props.permanent&&(mobile.value||props.temporary));const isSticky=computed(()=>props.sticky&&!isTemporary.value&&location.value!==`bottom`);useFocusTrap(props,{isActive,localTop:isTemporary,contentEl:rootEl});useToggleScope(()=>props.expandOnHover&&props.rail!=null,()=>{watch(isHovering,val=>emit(`update:rail`,!val))});useToggleScope(()=>!props.disableResizeWatcher,()=>{watch(isTemporary,val=>!props.permanent&&nextTick$1(()=>isActive.value=!val))});useToggleScope(()=>!props.disableRouteWatcher&&!!router,()=>{watch(router.currentRoute,()=>isTemporary.value&&(isActive.value=false))});watch(()=>props.permanent,val=>{if(val)isActive.value=true});if(props.modelValue==null&&!isTemporary.value)isActive.value=props.permanent||!mobile.value;const{isDragging,dragProgress}=useTouch({el:rootEl,isActive,isTemporary,width:widthPx,touchless:toRef(()=>props.touchless),position:location});const layoutSize=computed(()=>{const size=isTemporary.value?0:props.rail&&props.expandOnHover?props.railWidth:width.value;return isDragging.value?resolveSize(size,layoutSpan.value)*dragProgress.value:size});const{layoutItemStyles,layoutItemScrimStyles}=useLayoutItem({id:props.name,order:computed(()=>parseInt(props.order,10)),position:location,layoutSize,elementSize:width,active:readonly(isActive),disableTransitions:toRef(()=>isDragging.value),absolute:computed(()=>props.absolute||isSticky.value&&!isString(isStuck.value))});const{isStuck,stickyStyles}=useSticky({rootEl,isSticky,layoutItemStyles});const scrimColor=useBackgroundColor(()=>{return isString(props.scrim)?props.scrim:null});const scrimStyles=computed(()=>({...isDragging.value?{opacity:dragProgress.value*.2,transition:`none`}:void 0,...layoutItemScrimStyles.value}));provideDefaults({VList:{bgColor:`transparent`}});useRender(()=>{const hasImage=slots.image||props.image;return createBaseVNode(Fragment,null,[createVNode(props.tag,mergeProps({"ref":rootEl,"onMouseenter":runOpenDelay,"onMouseleave":runCloseDelay,"class":[`v-navigation-drawer`,`v-navigation-drawer--${location.value}`,{"v-navigation-drawer--expand-on-hover":props.expandOnHover,"v-navigation-drawer--floating":props.floating,"v-navigation-drawer--is-hovering":isHovering.value,"v-navigation-drawer--rail":props.rail,"v-navigation-drawer--temporary":isTemporary.value,"v-navigation-drawer--persistent":isPersistent.value,"v-navigation-drawer--active":isActive.value,"v-navigation-drawer--sticky":isSticky.value},themeClasses.value,backgroundColorClasses.value,borderClasses.value,displayClasses.value,elevationClasses.value,roundedClasses.value,props.class],"style":[backgroundColorStyles.value,layoutItemStyles.value,ssrBootStyles.value,stickyStyles.value,roundedStyles.value,props.style],"inert":!isActive.value},scopeId,attrs),{default:()=>[hasImage&&createBaseVNode(`div`,{"key":`image`,"class":`v-navigation-drawer__img`},[!slots.image?createVNode(VImg,{"key":`image-img`,"alt":``,"cover":true,"height":`inherit`,"src":props.image},null):createVNode(VDefaultsProvider,{"key":`image-defaults`,"disabled":!props.image,"defaults":{VImg:{alt:``,cover:true,height:`inherit`,src:props.image}}},slots.image)]),slots.prepend&&createBaseVNode(`div`,{"class":`v-navigation-drawer__prepend`},[slots.prepend?.()]),createBaseVNode(`div`,{"class":`v-navigation-drawer__content`},[slots.default?.()]),slots.append&&createBaseVNode(`div`,{"class":`v-navigation-drawer__append`},[slots.append?.()])]}),createVNode(Transition,{"name":`fade-transition`},{default:()=>[isTemporary.value&&(isDragging.value||isActive.value)&&!!props.scrim&&createBaseVNode(`div`,mergeProps({"class":[`v-navigation-drawer__scrim`,scrimColor.backgroundColorClasses.value],"style":[scrimStyles.value,scrimColor.backgroundColorStyles.value],"onClick":()=>{if(isPersistent.value)return;isActive.value=false}},scopeId),null)]})])});return{isStuck}}});var VSnackbarQueueSymbol=Symbol.for(`vuetify:v-snackbar-queue`);function useSnackbarItem(isActive,contentEl){const queue=inject$1(VSnackbarQueueSymbol,null);if(!queue)return null;const id=useId();queue.register(id);onBeforeUnmount(()=>queue.unregister(id));watch(isActive,val=>!val&&queue.unregister(id),{flush:`sync`});const{resizeRef,contentRect}=useResizeObserver();watch(contentEl,el=>{resizeRef.value=el??null});watch(contentRect,rect=>{if(rect?.width)queue.setSize(id,rect.height,rect.width)});return{id,offset:computed(()=>queue.getOffset(id))}}function useCountdown(milliseconds){const time=shallowRef(milliseconds());let timer=-1;function clear(){clearInterval(timer)}function reset(){clear();nextTick$1(()=>time.value=milliseconds())}function start(el){const style=el?getComputedStyle(el):{transitionDuration:.2};const interval=parseFloat(style.transitionDuration)*1e3||200;clear();if(time.value<=0)return;const startTime=performance.now();timer=window.setInterval(()=>{const elapsed=performance.now()-startTime+interval;time.value=Math.max(milliseconds()-elapsed,0);if(time.value<=0)clear()},interval)}onScopeDispose(clear);return{clear,time,start,reset}}var makeVSnackbarProps=propsFactory({collapsed:Object,loading:Boolean,prependAvatar:String,prependIcon:IconValue,queueGap:Number,queueIndex:Number,title:String,text:String,reverseTimer:Boolean,timer:{type:[Boolean,String],default:false},timerColor:String,timeout:{type:[Number,String],default:5e3},vertical:Boolean,...makeLocationProps({location:`bottom center`}),...makePositionProps(),...makeRoundedProps(),...makeVariantProps(),...makeThemeProps(),...omit(makeVOverlayProps({closeOnBack:false,locationStrategy:null,transition:`v-snackbar-transition`}),[`persistent`,`noClickAnimation`,`offset`,`retainFocus`,`captureFocus`,`disableInitialFocus`,`location`,`scrim`,`scrollStrategy`,`stickToTarget`,`viewportMargin`])},`VSnackbar`);var VSnackbar=genericComponent()({name:`VSnackbar`,props:makeVSnackbarProps(),emits:{"update:modelValue":v=>true},setup(props,{slots}){const isActive=useProxiedModel(props,`modelValue`);const{positionClasses}=usePosition(props);const{scopeId}=useScopeId();const{themeClasses}=provideTheme(props);const{colorClasses,colorStyles,variantClasses}=useVariant(props);const{roundedClasses,roundedStyles}=useRounded(props);const countdown=useCountdown(()=>Number(props.timeout));const overlay=ref();const queueItem=useSnackbarItem(isActive,()=>overlay.value?.contentEl);let _lastOffset;const timerRef=ref();const isHovering=shallowRef(false);const isFocused=shallowRef(false);const startY=shallowRef(0);const mainStyles=ref();const hasLayout=inject$1(VuetifyLayoutKey,void 0);useToggleScope(()=>!!hasLayout,()=>{const layout=useLayout();watchEffect(()=>{mainStyles.value=layout.mainStyles.value})});watch(isActive,startTimeout);watch(()=>props.timeout,startTimeout);onMounted(()=>{if(isActive.value)startTimeout()});let activeTimeout=-1;function startTimeout(){countdown.clear();window.clearTimeout(activeTimeout);const timeout=Number(props.timeout);if(!isActive.value||timeout===-1)return;countdown.reset();const element=refElement(timerRef.value);nextTick$1(()=>countdown.start(element));activeTimeout=window.setTimeout(()=>{isActive.value=false},timeout)}function clearTimeout(){countdown.reset();window.clearTimeout(activeTimeout)}function onPointerenter(){isHovering.value=true;clearTimeout()}function onPointerleave(){isHovering.value=false;if(!isFocused.value)startTimeout()}function onFocusin(){isFocused.value=true;clearTimeout()}function onFocusout(event){if((overlay.value?.contentEl)?.contains(event.relatedTarget))return;isFocused.value=false;if(!isHovering.value)startTimeout()}function onTouchstart(event){startY.value=event.touches[0].clientY}function onTouchend(event){if(Math.abs(startY.value-event.changedTouches[0].clientY)>50)isActive.value=false}function onAfterLeave(){if(isHovering.value)onPointerleave();isFocused.value=false}const locationClasses=computed(()=>{return props.location.split(` `).reduce((acc,loc)=>{acc[`v-snackbar--${loc}`]=true;return acc},{})});const queueDirection=computed(()=>{const[side,align]=props.location.split(` `);return side===`bottom`||[`left`,`right`].includes(side)&&align===`end`?-1:1});const collapsedStyles=computed(()=>{if(!props.collapsed)return null;return{"--v-snackbar-collapsed-height":convertToUnit(props.collapsed.height),"--v-snackbar-collapsed-width":convertToUnit(props.collapsed.width)}});const offset=computed(()=>{if(!queueItem)return void 0;if(queueItem.offset.value===null)return _lastOffset;return _lastOffset=convertToUnit(queueItem.offset.value)});const transition=computed(()=>{if(!isString(props.transition)||!props.transition.endsWith(`-auto`))return props.transition;const prefix=props.transition.replace(`-auto`,``);const[side,align]=props.location.split(` `);return`${prefix}-${[`start`,`end`,`left`,`right`].includes(align)||[`left`,`right`].includes(side)?`x`:`y`}${[`end`,`right`].includes(align)||![`start`,`left`].includes(align)&&[`bottom`,`right`].includes(side)?`-reverse`:``}-transition`});useRender(()=>{const overlayProps=VOverlay.filterProps({...props,location:props.location,locationStrategy:props.locationStrategy??noop});const hasPrependMedia=!!(props.prependAvatar||props.prependIcon);const hasPrepend=!!(hasPrependMedia||props.loading||slots.prepend);const hasContent=!!(slots.default||slots.text||slots.title||props.text||props.title);return createVNode(VOverlay,mergeProps({"ref":overlay,"class":[`v-snackbar`,{"v-snackbar--active":isActive.value,"v-snackbar--collapsed":!!props.collapsed,"v-snackbar--timer":!!props.timer,"v-snackbar--vertical":props.vertical},locationClasses.value,positionClasses.value,props.class],"style":[mainStyles.value,{"--v-snackbar-offset":offset.value,"--v-snackbar-gap":convertToUnit(props.queueGap),"--v-snackbar-index":props.queueIndex,"--v-snackbar-direction":queueDirection.value},collapsedStyles.value,props.style]},overlayProps,{"transition":transition.value,"modelValue":isActive.value,"onUpdate:modelValue":$event=>isActive.value=$event,"contentProps":mergeProps({class:[`v-snackbar__wrapper`,themeClasses.value,colorClasses.value,roundedClasses.value,variantClasses.value],style:[colorStyles.value,roundedStyles.value],onPointerenter,onPointerleave,onFocusin,onFocusout},overlayProps.contentProps),"persistent":true,"noClickAnimation":true,"scrim":false,"scrollStrategy":`none`,"onTouchstartPassive":onTouchstart,"onTouchend":onTouchend,"onAfterLeave":onAfterLeave},scopeId),{default:()=>[genOverlays(false,`v-snackbar`),slots.header&&createBaseVNode(`div`,{"class":`v-snackbar__header`},[slots.header?.()]),props.timer&&Number(props.timeout)>0&&!isHovering.value&&createBaseVNode(`div`,{"key":`timer`,"class":normalizeClass([`v-snackbar__timer`,`v-snackbar__timer--${props.timer===`bottom`?`bottom`:`top`}`])},[createVNode(VProgressLinear,{"ref":timerRef,"color":props.timerColor??`info`,"max":props.timeout,"modelValue":props.reverseTimer?Number(props.timeout)-countdown.time.value:countdown.time.value},null)]),hasPrepend&&createVNode(VDefaultsProvider,{"key":`prepend-defaults`,"disabled":!hasPrependMedia&&!props.loading,"defaults":{VAvatar:{image:props.prependAvatar},VIcon:{icon:props.prependIcon},VProgressCircular:{indeterminate:true,size:24,width:3}}},{default:()=>[createBaseVNode(`div`,{"class":`v-snackbar__prepend`},[slots.prepend?slots.prepend():createBaseVNode(Fragment,null,[props.loading&&createVNode(VProgressCircular,null,null),!props.loading&&props.prependAvatar&&createVNode(VAvatar,null,null),!props.loading&&props.prependIcon&&createVNode(VIcon,null,null)])])]}),hasContent&&createBaseVNode(`div`,{"key":`content`,"class":`v-snackbar__content`,"role":`status`,"aria-live":`polite`},[slots.title?.()??(props.title?createBaseVNode(`div`,{"class":`v-snackbar__title`,"key":`title`},[props.title]):``),slots.text?.()??props.text,slots.default?.()]),slots.actions&&createVNode(VDefaultsProvider,{"defaults":{VBtn:{variant:`text`,ripple:false,slim:true}}},{default:()=>[createBaseVNode(`div`,{"class":`v-snackbar__actions`},[slots.actions({isActive})])]})],activator:slots.activator})});return forwardRefs({},overlay)}});var VTabsSymbol=Symbol.for(`vuetify:v-tabs`);var makeVTabProps=propsFactory({fixed:Boolean,sliderColor:String,sliderTransition:String,sliderTransitionDuration:[String,Number],hideSlider:Boolean,inset:Boolean,direction:{type:String,default:`horizontal`},...omit(makeVBtnProps({selectedClass:`v-tab--selected`,variant:`text`}),[`active`,`block`,`flat`,`location`,`position`,`symbol`])},`VTab`);var VTab=genericComponent()({name:`VTab`,props:makeVTabProps(),setup(props,{slots,attrs}){const{textColorClasses:sliderColorClasses,textColorStyles:sliderColorStyles}=useTextColor(()=>props.sliderColor);const{backgroundColorClasses:insetColorClasses,backgroundColorStyles:insetColorStyles}=useBackgroundColor(()=>props.sliderColor);const rootEl=ref();const sliderEl=ref();const isHorizontal=computed(()=>props.direction===`horizontal`);const isSelected=computed(()=>rootEl.value?.group?.isSelected.value??false);function fade(nextEl,prevEl){return{opacity:[0,1]}}function grow(nextEl,prevEl){return props.direction===`vertical`?{transform:[`scaleY(0)`,`scaleY(1)`]}:{transform:[`scaleX(0)`,`scaleX(1)`]}}function shift(nextEl,prevEl){const prevBox=prevEl.getBoundingClientRect();const nextBox=nextEl.getBoundingClientRect();const xy=isHorizontal.value?`x`:`y`;const XY=isHorizontal.value?`X`:`Y`;const rightBottom=isHorizontal.value?`right`:`bottom`;const widthHeight=isHorizontal.value?`width`:`height`;const delta=prevBox[xy]>nextBox[xy]?prevBox[rightBottom]-nextBox[rightBottom]:prevBox[xy]-nextBox[xy];const origin=Math.sign(delta)>0?isHorizontal.value?`right`:`bottom`:Math.sign(delta)<0?isHorizontal.value?`left`:`top`:`center`;const scale=(Math.abs(delta)+(Math.sign(delta)<0?prevBox[widthHeight]:nextBox[widthHeight]))/Math.max(prevBox[widthHeight],nextBox[widthHeight])||0;const initialScale=prevBox[widthHeight]/nextBox[widthHeight]||0;const sigma=1.5;return{transform:[`translate${XY}(${delta}px) scale${XY}(${initialScale})`,`translate${XY}(${delta/sigma}px) scale${XY}(${(scale-1)/sigma+1})`,`none`],transformOrigin:Array(3).fill(origin)}}function updateSlider({value}){if(value){const prevEl=rootEl.value?.$el.parentElement?.querySelector(`.v-tab--selected .v-tab__slider`);const nextEl=sliderEl.value;if(!prevEl||!nextEl)return;const color=getComputedStyle(prevEl).backgroundColor;const keyframes={fade,grow,shift}[props.sliderTransition??`shift`]??shift;const duration=Number(props.sliderTransitionDuration)||({fade:400,grow:350,shift:225}[props.sliderTransition??`shift`]??225);animate(nextEl,{backgroundColor:[color,color],...keyframes(nextEl,prevEl)},{duration,easing:standardEasing})}}useRender(()=>{const btnProps=VBtn.filterProps(props);return createVNode(VBtn,mergeProps({"symbol":VTabsSymbol,"ref":rootEl,"class":[`v-tab`,props.class,isSelected.value&&props.inset?insetColorClasses.value:[]],"style":[props.style,isSelected.value&&props.inset?insetColorStyles.value:[],{backgroundColor:isSelected.value&&props.inset?`transparent !important`:void 0}],"tabindex":isSelected.value?0:-1,"role":`tab`,"aria-selected":String(isSelected.value),"active":false},btnProps,attrs,{"block":props.fixed,"maxWidth":props.fixed?300:void 0,"onGroup:selected":updateSlider}),{...slots,default:()=>createBaseVNode(Fragment,null,[slots.default?.()??props.text,!props.hideSlider&&createBaseVNode(`div`,{"ref":sliderEl,"class":normalizeClass([`v-tab__slider`,props.inset?insetColorClasses.value:sliderColorClasses.value]),"style":normalizeStyle([sliderColorStyles.value,props.inset?insetColorStyles.value:sliderColorClasses.value])},null)])})});return forwardRefs({},rootEl)}});var makeVTabsWindowProps=propsFactory({...omit(makeVWindowProps(),[`continuous`,`nextIcon`,`prevIcon`,`showArrows`,`touch`,`mandatory`])},`VTabsWindow`);var VTabsWindow=genericComponent()({name:`VTabsWindow`,props:makeVTabsWindowProps(),emits:{"update:modelValue":v=>true},setup(props,{slots}){const group=inject$1(VTabsSymbol,null);const _model=useProxiedModel(props,`modelValue`);const model=computed({get(){if(_model.value!=null||!group)return _model.value;return group.items.value.find(item=>group.selected.value.includes(item.id))?.value},set(val){_model.value=val}});useRender(()=>{const windowProps=VWindow.filterProps(props);return createVNode(VWindow,mergeProps({"_as":`VTabsWindow`},windowProps,{"modelValue":model.value,"onUpdate:modelValue":$event=>model.value=$event,"class":[`v-tabs-window`,props.class],"style":props.style,"mandatory":false,"touch":false}),slots)});return{}}});var makeVTabsWindowItemProps=propsFactory({...makeVWindowItemProps()},`VTabsWindowItem`);var VTabsWindowItem=genericComponent()({name:`VTabsWindowItem`,props:makeVTabsWindowItemProps(),setup(props,{slots}){useRender(()=>{const windowItemProps=VWindowItem.filterProps(props);return createVNode(VWindowItem,mergeProps({"_as":`VTabsWindowItem`},windowItemProps,{"class":[`v-tabs-window-item`,props.class],"style":props.style}),slots)});return{}}});function parseItems(items){if(!items)return[];return items.map(item=>{if(!isObject$1(item))return{text:item,value:item};return item})}var makeVTabsProps=propsFactory({alignTabs:{type:String,default:`start`},color:String,fixedTabs:Boolean,items:{type:Array,default:()=>[]},stacked:Boolean,bgColor:String,grow:Boolean,height:{type:[Number,String],default:void 0},hideSlider:Boolean,inset:Boolean,insetPadding:[String,Number],insetRadius:[String,Number],sliderColor:String,...pick$1(makeVTabProps(),[`spaced`,`sliderTransition`,`sliderTransitionDuration`]),...makeVSlideGroupProps({mandatory:`force`,selectedClass:`v-tab-item--selected`}),...makeDensityProps(),...makeTagProps()},`VTabs`);var VTabs=genericComponent()({name:`VTabs`,props:makeVTabsProps(),emits:{"update:modelValue":v=>true},setup(props,{attrs,slots}){const model=useProxiedModel(props,`modelValue`);const items=computed(()=>parseItems(props.items));const{densityClasses}=useDensity(props);const{backgroundColorClasses,backgroundColorStyles}=useBackgroundColor(()=>props.bgColor);const{scopeId}=useScopeId();provideDefaults({VTab:{color:toRef(props,`color`),direction:toRef(props,`direction`),stacked:toRef(props,`stacked`),fixed:toRef(props,`fixedTabs`),inset:toRef(props,`inset`),sliderColor:toRef(props,`sliderColor`),sliderTransition:toRef(props,`sliderTransition`),sliderTransitionDuration:toRef(props,`sliderTransitionDuration`),hideSlider:toRef(props,`hideSlider`)}});useRender(()=>{const slideGroupProps=VSlideGroup.filterProps(props);const hasWindow=!!(slots.window||props.items.length>0);return createBaseVNode(Fragment,null,[createVNode(VSlideGroup,mergeProps(slideGroupProps,{"modelValue":model.value,"onUpdate:modelValue":$event=>model.value=$event,"class":[`v-tabs`,`v-tabs--${props.direction}`,`v-tabs--align-tabs-${props.alignTabs}`,{"v-tabs--fixed-tabs":props.fixedTabs,"v-tabs--grow":props.grow,"v-tabs--inset":props.inset,"v-tabs--stacked":props.stacked},densityClasses.value,backgroundColorClasses.value,props.class],"style":[{"--v-tabs-height":convertToUnit(props.height),"--v-tabs-inset-padding":props.inset?convertToUnit(props.insetPadding):void 0,"--v-tabs-inset-radius":props.inset?convertToUnit(props.insetRadius):void 0},backgroundColorStyles.value,props.style],"role":`tablist`,"symbol":VTabsSymbol},scopeId,attrs),{default:slots.default??(()=>items.value.map(item=>slots.tab?.({item})??createVNode(VTab,mergeProps(item,{"key":item.text,"value":item.value,"spaced":props.spaced}),{default:slots[`tab.${item.value}`]?()=>slots[`tab.${item.value}`]?.({item}):void 0}))),prev:slots.prev,next:slots.next}),hasWindow&&createVNode(VTabsWindow,mergeProps({"modelValue":model.value,"onUpdate:modelValue":$event=>model.value=$event,"key":`tabs-window`},scopeId),{default:()=>[items.value.map(item=>slots.item?.({item})??createVNode(VTabsWindowItem,{"value":item.value},{default:()=>slots[`item.${item.value}`]?.({item})})),slots.window?.()]})])});return{}}});var _hoisted_1$37=[`title`];var _hoisted_2$31={class:`conversation-dialog__body`};var _sfc_main$62={__name:`ConversationDialog`,props:{modelValue:Boolean,activator:{type:Object,default:null},title:{type:String,default:`Assistant`},mode:{type:String,default:`talk`},showModes:Boolean,minimizable:Boolean,closeLabel:{type:String,default:`Close conversation`},presentation:{type:String,default:`dialog`,validator:value=>[`dialog`,`inline`].includes(value)}},emits:[`update:modelValue`,`update:mode`,`minimize`],setup(__props,{emit:__emit}){const{xs}=useDisplay();const props=__props;const dialogProps=computed(()=>props.presentation===`inline`?{}:{activator:props.activator,openOnClick:false,modelValue:props.modelValue,transition:false,fullscreen:xs.value,width:xs.value?`100%`:620,maxWidth:xs.value?`100%`:`calc(100% - 32px)`,height:xs.value?`100%`:860,maxHeight:xs.value?`100%`:`calc(100% - 32px)`,contentProps:{style:{margin:xs.value?0:`16px`}},"aria-hidden":!props.modelValue});const emit=__emit;let dismissedFromActivator=false;function outsideClick(event){const bounds=props.minimizable&&props.activator?.getBoundingClientRect();dismissedFromActivator=Boolean(bounds&&event.clientX>=bounds.left&&event.clientX<=bounds.right&&event.clientY>=bounds.top&&event.clientY<=bounds.bottom)}function updateOpen(value){if(!value&&dismissedFromActivator)emit(`minimize`);else emit(`update:modelValue`,value);dismissedFromActivator=false}return(_ctx,_cache)=>{return openBlock(),createBlock(resolveDynamicComponent(__props.presentation===`inline`?`section`:unref(VDialog)),mergeProps(dialogProps.value,{class:[`conversation-dialog`,{"conversation-dialog--inline":__props.presentation===`inline`}],"aria-label":`${__props.title} conversation`,"onClick:outside":outsideClick,"onUpdate:modelValue":updateOpen}),{default:withCtx(()=>[(openBlock(),createBlock(resolveDynamicComponent(__props.presentation===`inline`?`div`:unref(VCard)),{class:`conversation-dialog__surface`,rounded:__props.presentation===`inline`?void 0:unref(xs)?0:`lg`},{default:withCtx(()=>[__props.presentation!==`inline`?(openBlock(),createBlock(VCardTitle,{key:0,class:`conversation-dialog__title text-title-large`},{default:withCtx(()=>[createBaseVNode(`span`,{title:__props.title},toDisplayString(__props.title),9,_hoisted_1$37),renderSlot(_ctx.$slots,`header-actions`,{},void 0,true),__props.minimizable?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiMinus),variant:`text`,"aria-label":`Minimize conversation`,title:`Minimize conversation`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`minimize`,$event))},null,8,[`icon`])):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":__props.closeLabel,title:__props.closeLabel,onClick:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`update:modelValue`,false))},null,8,[`icon`,`aria-label`,`title`])]),_:3})):createCommentVNode(``,true),__props.showModes?(openBlock(),createBlock(VTabs,{key:1,"model-value":__props.mode,class:`conversation-dialog__tabs`,grow:``,"aria-label":`Conversation mode`,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>_ctx.$emit(`update:mode`,$event))},{default:withCtx(()=>[createVNode(VTab,{value:`talk`,"prepend-icon":unref(mdiMicrophone)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Talk`,-1)])]),_:1},8,[`prepend-icon`]),createVNode(VTab,{value:`text`,"prepend-icon":unref(mdiMessageTextOutline)},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Text`,-1)])]),_:1},8,[`prepend-icon`])]),_:1},8,[`model-value`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_2$31,[renderSlot(_ctx.$slots,`default`,{},void 0,true)])]),_:3},8,[`rounded`]))]),_:3},16,[`class`,`aria-label`])}}};var ConversationDialog_default=_plugin_vue_export_helper_default(_sfc_main$62,[[`__scopeId`,`data-v-765b57ee`]]);function useAssistantQuestions({message=``,extraChoice=null}={}){const questionText=computed(()=>String(toValue(message)||``));const answers=ref({});const choice=ref(``);const dismissedText=ref(``);const submittedText=ref(``);const numberedInput=computed(()=>parseNumberedQuestionPrompt(questionText.value));const questions=computed(()=>[dismissedText.value,submittedText.value].includes(questionText.value)?[]:numberedInput.value.questions||[]);const selectItems=computed(()=>Object.fromEntries(questions.value.map(question=>{const choices=Array.isArray(question.choices)?question.choices:[];const extra=toValue(extraChoice);const includesExtra=extra&&choices.some(item=>String(item?.value||``).trim().toLowerCase()===String(extra.value||``).trim().toLowerCase());return[question.name,!extra||includesExtra?choices:[...choices,extra]]})));const choices=computed(()=>questions.value.length||submittedText.value===questionText.value?[]:parseAnswerChoicePrompt(questionText.value).choices||[]);const active=computed(()=>Boolean(questions.value.length||choices.value.length));function capture(draft=``){const additionalContext=String(draft||``).trim();return{message:questions.value.length?[numberedQuestionSubmissionText(questions.value,answers.value),additionalContext].filter(Boolean).join(`
69
+
70
+ `):choice.value||additionalContext,questionText:active.value?questionText.value:``}}function markSubmitted(text=``){submittedText.value=text;answers.value={};choice.value=``}function dismiss(){if(!questions.value.length)return false;dismissedText.value=questionText.value;answers.value={};return true}function reset(){answers.value={};dismissedText.value=``;submittedText.value=``;choice.value=``}watch(questionText,text=>{answers.value={};if(text!==dismissedText.value)dismissedText.value=``;if(text!==submittedText.value)submittedText.value=``;choice.value=``});return{questions,selectItems,choices,answers,choice,active,capture,markSubmitted,dismiss,reset,setAnswers(value){answers.value=value},setChoice(value){choice.value=value}}}function createAssistantTextSubmission({getState,setDraft,submit,afterDraftChange=async()=>{}}){let revision=0;return async function submitText(text,{sendImmediately=true,signal,timeoutMs=2e3}={}){const request=++revision;const value=String(text||``).trim();const initial=getState();if(!value||!initial.active||signal?.aborted)throw new Error(`The chat composer is not ready yet.`);const hasDraft=Boolean(initial.draft?.trim());const writtenValue=hasDraft?`${initial.draft}\n${value}`:value;setDraft(writtenValue);if(!sendImmediately||hasDraft)return`draft`;await afterDraftChange();const deadline=Date.now()+timeoutMs;while(true){const state=getState();if(signal?.aborted||request!==revision||!state.active||state.id!==initial.id||state.draft!==writtenValue)throw new Error(`The chat changed before sending. Review the draft before sending.`);if(state.canSend){if(await submit()===false)throw new Error(`Your words are in the chat box, but this conversation cannot send yet.`);return state.turnActive?`steer`:`send`}if(Date.now()>=deadline)throw new Error(`Your words are in the chat box, but this conversation cannot send yet.`);await new Promise(resolve=>setTimeout(resolve,16))}}}var applicationConversations=new WeakMap;function retainAssistantConversation(app,key,createRuntime,reader={active:true}){let conversations=applicationConversations.get(app);if(!conversations){conversations=new Map;applicationConversations.set(app,conversations)}let entry=conversations.get(key);if(!entry){const scope=effectScope(true);const readers=shallowReactive(new Map);try{const runtime=app.runWithContext(()=>scope.run(()=>createRuntime(readers)));entry={scope,readers,runtime};runtime.retain=()=>retainAssistantConversation(app,key,createRuntime);conversations.set(key,entry)}catch(error){scope.stop();throw error}}const token=Symbol(`conversation reader`);entry.readers.set(token,reader);return{runtime:entry.runtime,release(){if(!entry.readers.delete(token)||entry.readers.size)return;entry.scope.stop();conversations.delete(key)}}}var messageText$1=value=>String(value||``).trim();function turnMatchesOptimisticMessage(turn={},optimistic={}){const authored=optimistic.origin===`application`?turn.system:turn.user;const canonicalMessageId=messageText$1(authored?.messageId);const optimisticMessageId=messageText$1(optimistic.id);if(canonicalMessageId&&optimisticMessageId)return canonicalMessageId===optimisticMessageId;if(messageText$1(authored?.text)!==optimistic.text)return false;const userAtMs=Date.parse(String(authored?.at||``));return Number.isFinite(userAtMs)&&userAtMs>=optimistic.createdAtMs-5e3}function unmatchedOptimisticMessages(turns=[],optimisticMessages=[],{receiptsOnly=false}={}){const conversationTurns=Array.isArray(turns)?turns:[];const matchedTurnIndexes=new Set;return(Array.isArray(optimisticMessages)?optimisticMessages:[]).filter(message=>{const turnIndex=conversationTurns.findIndex((turn,index)=>!matchedTurnIndexes.has(index)&&turnMatchesOptimisticMessage(turn,message)&&(!receiptsOnly||message.status===`accepted`||(message.origin===`application`?turn.system:turn.user)?.receipt!==false));if(turnIndex<0)return true;matchedTurnIndexes.add(turnIndex);return false})}function createAssistantMessageDelivery({deliver:defaultDeliver}={}){const state=reactive({messages:[],sending:false});const acceptanceCallbacks=new WeakMap;let deliveryTail=null;let pendingSends=new Map;function find(messageId){return state.messages.find(message=>message.id===messageId)||null}function remove(messageId){state.messages=state.messages.filter(message=>message.id!==messageId)}function reconcile(turns){const unmatched=unmatchedOptimisticMessages(turns,state.messages,{receiptsOnly:true});const retained=new Set(unmatched.map(message=>message.id));for(const message of state.messages)if(!retained.has(message.id))accept(message.id);state.messages=unmatched}function turns(savedTurns=[]){const shown=[...savedTurns.map(turn=>{const message=state.messages.find(message=>message.status!==`accepted`&&turnMatchesOptimisticMessage(turn,message)&&(message.origin===`application`?turn.system:turn.user)?.receipt===false);if(!message)return turn;const pending=optimisticTurn(message);return{...turn,optimistic:pending.optimistic,...pending.system?{system:pending.system}:{}}})];for(const message of unmatchedOptimisticMessages(savedTurns,state.messages)){const turn=optimisticTurn(message);const later=message.status!==`failed`?-1:shown.findIndex(saved=>!saved.optimistic&&Date.parse((saved.user||saved.system)?.at||``)>message.createdAtMs);if(later<0)shown.push(turn);else shown.splice(later,0,turn)}return shown}function optimisticTurn(message){const role=message.origin===`application`?`system`:`user`;const authored={attachments:message.attachments,at:message.createdAt,messageId:message.id,role,text:message.text};const status=message.status===`uncertain`?{role:`system`,text:`Message delivery is not confirmed.`,delivery:{messageId:message.id,error:message.error,checking:message.checking===true}}:null;return{optimistic:{error:message.error,id:message.id,status:message.status,...message.status===`pending`&&message.waiting?{waiting:message.waiting}:{}},turnId:message.id,[role]:authored,...status?{system:role===`system`?{...authored,...status,text:`${authored.text}\n\n${status.text}`}:status}:{}}}async function send(payload,{messageId=crypto.randomUUID(),deliver=defaultDeliver,isCurrent=()=>true,receiptTurns=null,onAccepted,uncertainOnError=false,queue=false}={}){if(state.sending&&!queue||pendingSends.has(messageId)||find(messageId)?.status===`uncertain`||!messageText$1(payload?.message)&&!payload?.displayAttachments?.length)return false;if(typeof deliver!==`function`)throw new TypeError(`Message delivery requires a deliver function.`);const snapshot=JSON.parse(JSON.stringify(payload));const previous=find(messageId);const acknowledge=previous&&acceptanceCallbacks.get(toRaw(previous))||onAccepted;const ownerPendingSends=pendingSends;const current=()=>pendingSends===ownerPendingSends&&isCurrent();const predecessor=deliveryTail;const knownUncertain=new Set(state.messages.filter(entry=>entry.status===`uncertain`).map(entry=>entry.id));const settled=Promise.withResolvers();deliveryTail=settled.promise;ownerPendingSends.set(messageId,settled);const now=new Date;const message={attachments:snapshot.displayAttachments||[],createdAt:now.toISOString(),createdAtMs:now.getTime(),error:``,id:messageId,payload:snapshot,status:`pending`,text:String(snapshot.displayMessage||snapshot.message||``).trim()};if(typeof acknowledge===`function`)acceptanceCallbacks.set(message,acknowledge);state.messages=[...state.messages.filter(entry=>entry.id!==messageId),message];state.sending=true;let stopReceipt;try{if(predecessor)await predecessor;if(!current())return false;if(uncertainOnError&&state.messages.some(entry=>entry.id!==messageId&&entry.status===`uncertain`&&!knownUncertain.has(entry.id))){fail(messageId,`Check the previous message's delivery before sending again.`);return false}let receipt;if(receiptTurns!==null){receipt=Promise.withResolvers();settled.receipt=receipt;stopReceipt=watch([current,()=>toValue(receiptTurns)],([isCurrent,turns])=>{if(!isCurrent)receipt.resolve(false);else if(turns?.some(turn=>turn.user?.messageId===messageId&&turn.user.receipt!==false))receipt.resolve({ok:true})},{immediate:true})}const submitted=deliver({...snapshot,messageId});const response=await(receipt?Promise.race([submitted,receipt.promise]):submitted);if(!current())return false;if(response===false||response?.ok===false)fail(messageId,response?.error||`Message could not be sent.`,response?.status===`uncertain`?`uncertain`:`failed`);else accept(messageId);return response}catch(error){if(!current())return false;if(find(messageId)?.status===`accepted`)return{ok:true};fail(messageId,error,uncertainOnError||error?.status===`uncertain`?`uncertain`:`failed`);throw error}finally{stopReceipt?.();ownerPendingSends.delete(messageId);if(pendingSends===ownerPendingSends){state.sending=ownerPendingSends.size>0;if(!state.sending)deliveryTail=null}settled.resolve()}}function fail(messageId,error,status=`failed`){const message=find(messageId);if(message&&message.status!==`accepted`){message.error=String(error?.message||error||`Message could not be sent.`).trim();message.status=status}}function accept(messageId){const message=find(messageId);if(message){message.status=`accepted`;message.error=``}pendingSends.get(messageId)?.receipt?.resolve({ok:true});if(message){const entry=toRaw(message);const acknowledge=acceptanceCallbacks.get(entry);acceptanceCallbacks.delete(entry);acknowledge?.()}}function wait(messageId,reason=``){const message=find(messageId);if(message?.status===`pending`)message.waiting=String(reason||``).trim()}function rejectUnsent(messageId,error){if(find(messageId)?.status!==`uncertain`)return false;fail(messageId,error);return true}function restoreUncertain(request,savedTurns=[]){const messageId=messageText$1(request?.messageId);if(!messageId||savedTurns.some(turn=>(turn.user||turn.system)?.messageId===messageId&&(turn.user||turn.system).receipt!==false)||find(messageId)?.status===`accepted`)return false;if(!find(messageId)){const payload=JSON.parse(JSON.stringify({message:request.text||``,displayAttachments:request.attachments||[]}));const createdAt=request.at||new Date().toISOString();state.messages=[...state.messages,{id:messageId,payload,text:payload.message,origin:request.origin,attachments:payload.displayAttachments,createdAt,createdAtMs:Date.parse(createdAt),status:`uncertain`,error:``}]}fail(messageId,request.error||`Delivery could not be confirmed.`,`uncertain`);pendingSends.get(messageId)?.receipt?.resolve({ok:false,status:`uncertain`,error:request.error});return true}function cancel(messageId){if(find(messageId)?.status!==`failed`)return false;remove(messageId);return true}function edit(messageId,draft=``){const message=find(messageId);if(!message||!cancel(messageId))return null;return!draft||draft.startsWith(message.text)?draft||message.text:`${message.text}\n\n${draft}`}function resend(messageId,{queue=false}={}){const message=find(messageId);if(message?.status!==`failed`)return false;return send(message.payload,{messageId,queue})}function reset(){deliveryTail=null;for(const pending of pendingSends.values()){pending.receipt?.resolve(false);pending.resolve()}pendingSends=new Map;state.messages=[];state.sending=false}return{accept,cancel,edit,find,reconcile,remove,resend,reset,restoreUncertain,rejectUnsent,send,state,turns,wait}}var IDLE_GESTURES=Object.freeze([`glance-left`,`tiny-nod`,`glance-right`,`brow-lift`,`glance-up`,`curious-tilt`,`smile-brighten`,`friendly-lean`,`shoulder-lift`,`earring-sway`]);var IDLE_MOUTH_POSES=Object.freeze({"tiny-nod":`warm-smile`,"curious-tilt":`warm-smile`,"smile-brighten":`smile`,"friendly-lean":`warm-smile`});var IDLE_GESTURE_DURATION_MS=1100;var LISTENING_EXPRESSIONS=Object.freeze([`attentive`,`tiny-nod`,`follow-left`,`tilt-left`,`follow-right`,`tilt-right`]);var LISTENING_MOUTH_POSES=Object.freeze({"attentive":`soft-smile`,"tiny-nod":`soft-smile`});var PRE_THINKING_EXPRESSIONS=Object.freeze([`settle`,`glance-left`,`center`,`glance-right`,`tiny-tilt`,`ready`]);var PRE_THINKING_MOUTH_POSES=Object.freeze({"ready":`soft-smile`,"tiny-tilt":`thoughtful`});var THINKING_EXPRESSIONS=Object.freeze([`look-up-left`,`focus`,`look-up-right`,`weigh-left`,`weigh-right`,`idea`]);var THINKING_MOUTH_POSES=Object.freeze({"idea":`soft-smile`,"weigh-left":`closed`,"weigh-right":`closed`});var ACTIVE_EXPRESSION_DURATION_MS=Object.freeze({listening:1350,"pre-thinking":1450,thinking:1700});var ACTIVE_EXPRESSION_SEQUENCES=Object.freeze({listening:LISTENING_EXPRESSIONS,"pre-thinking":PRE_THINKING_EXPRESSIONS,thinking:THINKING_EXPRESSIONS});function useVoiceAvatar(props){const blinking=ref(false);const activeExpression=ref(``);const idleGesture=ref(``);const reducedMotion=ref(false);let blinkTimer=0;let activeExpressionTimer=0;const activeExpressionIndexes={listening:Math.floor(Math.random()*LISTENING_EXPRESSIONS.length),"pre-thinking":Math.floor(Math.random()*PRE_THINKING_EXPRESSIONS.length),thinking:Math.floor(Math.random()*THINKING_EXPRESSIONS.length)};let idleGestureIndex=Math.floor(Math.random()*IDLE_GESTURES.length);let idleGestureTimer=0;let reopenTimer=0;let reducedMotionQuery=null;const expression=computed(()=>String(props.state||`idle`));const visibleMouthPose=computed(()=>{if(expression.value===`idle`)return IDLE_MOUTH_POSES[idleGesture.value]||`soft-smile`;if(expression.value===`thinking`)return THINKING_MOUTH_POSES[activeExpression.value]||`thoughtful`;if(expression.value===`pre-thinking`)return PRE_THINKING_MOUTH_POSES[activeExpression.value]||`closed`;if(expression.value===`listening`)return LISTENING_MOUTH_POSES[activeExpression.value]||`closed`;if(expression.value!==`speaking`)return`closed`;const pose=String(props.mouthPose||`closed`);if(props.mouthLevel<.045||![`open`,`round`,`small`,`wide`].includes(pose))return`closed`;return pose});function clearBlinkTimers(){window.clearTimeout(blinkTimer);window.clearTimeout(reopenTimer);blinkTimer=0;reopenTimer=0}function clearIdleGesture(){window.clearTimeout(idleGestureTimer);idleGestureTimer=0;idleGesture.value=``}function clearActiveExpression(){window.clearTimeout(activeExpressionTimer);activeExpressionTimer=0;activeExpression.value=``}function scheduleBlink(delay=2800+Math.random()*3400){window.clearTimeout(blinkTimer);if(reducedMotion.value)return;blinkTimer=window.setTimeout(()=>{const doubleBlink=Math.random()<.16;blinking.value=true;reopenTimer=window.setTimeout(()=>{blinking.value=false;if(!doubleBlink){scheduleBlink();return}blinkTimer=window.setTimeout(()=>{blinking.value=true;reopenTimer=window.setTimeout(()=>{blinking.value=false;scheduleBlink()},115)},155)},135)},delay)}function scheduleIdleGesture(delay=2400+Math.random()*2800){window.clearTimeout(idleGestureTimer);if(reducedMotion.value||expression.value!==`idle`)return;idleGestureTimer=window.setTimeout(()=>{idleGesture.value=IDLE_GESTURES[idleGestureIndex];idleGestureIndex=(idleGestureIndex+1)%IDLE_GESTURES.length;idleGestureTimer=window.setTimeout(()=>{idleGesture.value=``;scheduleIdleGesture()},IDLE_GESTURE_DURATION_MS)},delay)}function showNextActiveExpression(){const state=expression.value;const sequence=ACTIVE_EXPRESSION_SEQUENCES[state]||[];if(!sequence.length){clearActiveExpression();return}const index=activeExpressionIndexes[state]||0;activeExpression.value=sequence[index];activeExpressionIndexes[state]=(index+1)%sequence.length;if(!reducedMotion.value)activeExpressionTimer=window.setTimeout(showNextActiveExpression,ACTIVE_EXPRESSION_DURATION_MS[state])}function updateReducedMotion(event){reducedMotion.value=Boolean(event.matches);clearBlinkTimers();clearActiveExpression();clearIdleGesture();blinking.value=false;if(ACTIVE_EXPRESSION_SEQUENCES[expression.value])showNextActiveExpression();if(!reducedMotion.value){scheduleBlink();scheduleIdleGesture()}}watch(expression,()=>{clearActiveExpression();clearIdleGesture();if(ACTIVE_EXPRESSION_SEQUENCES[expression.value])showNextActiveExpression();else if(!reducedMotion.value)scheduleIdleGesture(900+Math.random()*1200)});onMounted(()=>{reducedMotionQuery=window.matchMedia(`(prefers-reduced-motion: reduce)`);reducedMotion.value=reducedMotionQuery.matches;reducedMotionQuery.addEventListener?.(`change`,updateReducedMotion);if(!reducedMotion.value){scheduleBlink(1800+Math.random()*1800);scheduleIdleGesture(900+Math.random()*1500)}if(ACTIVE_EXPRESSION_SEQUENCES[expression.value])showNextActiveExpression()});onBeforeUnmount(()=>{clearBlinkTimers();clearActiveExpression();clearIdleGesture();reducedMotionQuery?.removeEventListener?.(`change`,updateReducedMotion);reducedMotionQuery=null});return{blinking,activeExpression,idleGesture,expression,visibleMouthPose,reducedMotion}}var _hoisted_1$36={viewBox:`0 0 128 128`,"aria-label":`Assistant avatar`,role:`img`,class:`voice-avatar`};var _hoisted_2$30=[`cx`,`ry`];var _hoisted_3$28=[`rx`,`ry`];var _sfc_main$61={__name:`VoiceAvatar`,props:{state:{type:String,default:`idle`},mouthPose:{type:String,default:`closed`},mouthLevel:{type:Number,default:0}},setup(__props){const props=__props;const{blinking,visibleMouthPose,reducedMotion}=useVoiceAvatar(props);const mouthHeight=computed(()=>reducedMotion.value||visibleMouthPose.value===`closed`?3:Math.max(4,Math.min(18,props.mouthLevel*28)));return(_ctx,_cache)=>{return openBlock(),createElementBlock(`svg`,_hoisted_1$36,[_cache[0]||(_cache[0]=createBaseVNode(`circle`,{cx:`64`,cy:`64`,r:`59`,fill:`currentColor`,opacity:`.1`},null,-1)),_cache[1]||(_cache[1]=createBaseVNode(`rect`,{x:`25`,y:`31`,width:`78`,height:`66`,rx:`24`,fill:`none`,stroke:`currentColor`,"stroke-width":`3`},null,-1)),_cache[2]||(_cache[2]=createBaseVNode(`path`,{d:`M64 31V21`,stroke:`currentColor`,"stroke-width":`3`},null,-1)),_cache[3]||(_cache[3]=createBaseVNode(`circle`,{cx:`64`,cy:`18`,r:`4`,fill:`currentColor`},null,-1)),(openBlock(),createElementBlock(Fragment,null,renderList([47,81],x=>{return createBaseVNode(`ellipse`,{key:x,cx:x,cy:`55`,rx:`5`,ry:unref(blinking)?1:7,fill:`currentColor`},null,8,_hoisted_2$30)}),64)),createBaseVNode(`ellipse`,{cx:`64`,cy:`77`,rx:unref(visibleMouthPose)===`round`?6:15,ry:mouthHeight.value,fill:`currentColor`},null,8,_hoisted_3$28)])}}};var VoiceAvatar_default=_plugin_vue_export_helper_default(_sfc_main$61,[[`__scopeId`,`data-v-adfb3084`]]);function useVoiceLauncher({open,enabled=true,onTap=null,onError=()=>{}}){const holding=ref(false);let input=null;let timer;let suppressClick=false;let revision=0;let session;function report(operation){Promise.resolve(operation).catch(onError)}function begin(identity,delay){suppressClick=false;input=identity;const expected=++revision;timer=setTimeout(()=>{holding.value=true;report((async()=>{const opened=await open();if(expected!==revision||!holding.value||!opened)return;session=opened;await session.startHeldRecording()})())},delay)}function pointerDown(event){if(!toValue(enabled)||event.button!==0||event.isPrimary===false||input!==null)return;event.currentTarget.setPointerCapture(event.pointerId);begin(event.pointerId,350)}function keyDown(event){if(!toValue(enabled)||event.repeat||input!==null||![` `,`Enter`].includes(event.key))return;begin(event.key,onTap?350:0)}function finish(discard){clearTimeout(timer);const keyboard=typeof input===`string`;input=null;++revision;if(!holding.value){if(!discard&&keyboard&&onTap)report(onTap());return}holding.value=false;suppressClick=true;if(session)report(discard?session.discardHeldRecording():session.finishHeldRecording());session=null}function pointerUp(event){if(event.pointerId===input)finish(false)}function keyUp(event){if(event.key===input)finish(false)}function cancel(event){if(event?.pointerId!==void 0&&event.pointerId!==input)return;finish(true)}function click(event){const suppressed=suppressClick&&event.detail!==0;suppressClick=false;if(suppressed){event.preventDefault();event.stopImmediatePropagation();return}if(toValue(enabled)&&onTap)report(onTap())}onScopeDispose(cancel);return{holding,pointerDown,pointerUp,keyDown,keyUp,cancel,click}}var _hoisted_1$35=[`disabled`];var _hoisted_2$29=[`disabled`];var _hoisted_3$27=[`title`];var _hoisted_4$21={key:2,class:`assistant-voice-controls__provisional`,role:`status`,"aria-label":`Recognized words`};var _hoisted_5$20={key:3,class:`assistant-voice-controls__status`,role:`status`};var _hoisted_6$16={key:5,class:`assistant-voice__review`,"aria-label":`Review voice message`};var _hoisted_7$15={class:`assistant-voice__review-actions`};var _hoisted_8$14=[`disabled`,`aria-label`];var _hoisted_9$12={key:0,class:`assistant-voice-controls__stop`};var _hoisted_10$11={class:`assistant-voice__talk-action`};var _hoisted_11$11={key:0,class:`assistant-voice-controls__icon-disc`};var _hoisted_12$11={class:`assistant-voice-controls__icon-disc`};var _hoisted_13$11=[`id`];var _sfc_main$60={__name:`VoiceConversationControls`,props:{session:{type:Object,required:true},disabled:{type:Boolean,default:false},speakerDisabled:{type:Boolean,default:false},compact:{type:Boolean,default:false},iconOnly:{type:Boolean,default:false},reviewInTranscript:{type:Boolean,default:false},toolsTarget:{type:Object,default:null},feedbackTarget:{type:Object,default:null}},setup(__props){const props=__props;const{targetLabel,voice,error,microphoneMuted,live,starting,callMode,callStatus,speechActive,heldTranscript,capturing,pendingTranscript,pushHolding,sending,stopSpeech,startPushToTalk,finishPushToTalk,cancelPushToTalk,toggleHandsFree,readAloud,toggleReadAloud,enableSound,deliverTranscript,discardHeldRecording,editTranscript}=props.session;const controlStatus=computed(()=>{if(props.iconOnly&&voice.listening.value&&!starting.value&&!error.value&&!voice.error.value)return``;if(!props.compact||!props.session.hasUnsentSpeech.value)return callStatus.value;if(pendingTranscript.value)return props.reviewInTranscript?``:`Send or discard speech to send text.`;if(live.value&&callMode.value===`hands-free`&&voice.listening.value&&!microphoneMuted.value)return`Listening…`;return voice.listening.value?`Recording · finish speech to send text.`:`Finish speech to send text.`});const handsFreeListening=computed(()=>live.value&&callMode.value===`hands-free`&&voice.listening.value&&!microphoneMuted.value);const canTalk=computed(()=>!props.disabled&&(!capturing.value||voice.listening.value||pushHolding.value||starting.value));const talkLabel=computed(()=>starting.value?`Connecting…`:pushHolding.value?`Release to send`:handsFreeListening.value?`Pause`:`Talk`);const gestureHint=useId();const gesture=useVoiceLauncher({enabled:canTalk,open:()=>({startHeldRecording:startPushToTalk,finishHeldRecording:finishPushToTalk,discardHeldRecording:cancelPushToTalk}),onTap:toggleHandsFree,onError:cause=>{error.value=cause.message}});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`fieldset`,{class:normalizeClass([`assistant-voice-controls`,{"assistant-voice-controls--compact":__props.compact}]),disabled:__props.disabled},[(openBlock(),createBlock(Teleport,{to:__props.feedbackTarget,disabled:!__props.feedbackTarget},[createBaseVNode(`fieldset`,{class:normalizeClass([`assistant-voice-controls__feedback`,{"assistant-voice-controls__feedback--compact":__props.compact}]),disabled:__props.disabled},[unref(error)||unref(voice).error.value?(openBlock(),createElementBlock(`p`,{key:0,class:normalizeClass([`assistant-voice__error`,{"text-body-small":__props.compact}]),role:`alert`},toDisplayString(unref(error)||unref(voice).error.value),3)):createCommentVNode(``,true),controlStatus.value?(openBlock(),createElementBlock(`p`,{key:1,class:`assistant-voice-controls__status text-body-small`,role:`status`,title:unref(callStatus)},toDisplayString(controlStatus.value),9,_hoisted_3$27)):createCommentVNode(``,true),__props.compact&&!__props.reviewInTranscript&&unref(heldTranscript)&&!unref(pendingTranscript)?(openBlock(),createElementBlock(`p`,_hoisted_4$21,`Not sent · `+toDisplayString(unref(heldTranscript)),1)):createCommentVNode(``,true),unref(readAloud)&&unref(voice).playbackBlocked?.value?(openBlock(),createElementBlock(`p`,_hoisted_5$20,`Sound is blocked. Enable sound to hear future replies.`)):createCommentVNode(``,true),unref(readAloud)&&unref(voice).playbackBlocked?.value?(openBlock(),createBlock(VBtn,{key:4,"min-height":`48`,onClick:unref(enableSound)},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Enable sound`,-1)])]),_:1},8,[`onClick`])):createCommentVNode(``,true),!__props.reviewInTranscript&&unref(pendingTranscript)&&(unref(pendingTranscript).reviewBeforeSend||!unref(sending))?(openBlock(),createElementBlock(`section`,_hoisted_6$16,[createVNode(VTextarea,{class:`assistant-voice__review-input`,"model-value":unref(pendingTranscript).text,label:`Review your message`,disabled:unref(sending),density:__props.compact?`compact`:`default`,rows:__props.compact?1:2,"max-rows":__props.compact?2:3,"auto-grow":``,"hide-details":``,"onUpdate:modelValue":unref(editTranscript)},null,8,[`model-value`,`disabled`,`density`,`rows`,`max-rows`,`onUpdate:modelValue`]),createBaseVNode(`div`,_hoisted_7$15,[createVNode(VBtn,{disabled:unref(sending),"min-height":`48`,onClick:unref(discardHeldRecording)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Discard`,-1)])]),_:1},8,[`disabled`,`onClick`]),createVNode(VBtn,{disabled:unref(sending)||!unref(pendingTranscript).text.trim(),"min-height":`48`,color:`primary`,onClick:unref(deliverTranscript)},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(sending)?`Sending…`:`Send`),1)]),_:1},8,[`disabled`,`onClick`])])])):createCommentVNode(``,true)],10,_hoisted_2$29)],8,[`to`,`disabled`])),(openBlock(),createBlock(Teleport,{to:__props.toolsTarget,disabled:!__props.toolsTarget},[createBaseVNode(`fieldset`,{class:normalizeClass([`assistant-voice-controls__tools`,{"assistant-voice-controls__tools--compact":__props.compact,"assistant-voice-controls__tools--icons":__props.iconOnly}]),disabled:__props.disabled,"aria-label":`${unref(targetLabel)} voice chat controls`},[__props.compact||__props.iconOnly||unref(speechActive)?(openBlock(),createElementBlock(`div`,_hoisted_9$12,[unref(speechActive)?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiStop),variant:`text`,"min-width":`48`,"min-height":`48`,"aria-label":`Stop ${unref(targetLabel)} speaking`,title:`Stop speaking`,onClick:unref(stopSpeech)},null,8,[`icon`,`aria-label`,`onClick`])):createCommentVNode(``,true)])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`work-control`,{},void 0,true),createBaseVNode(`div`,_hoisted_10$11,[createVNode(VBtn,{class:`assistant-voice__talk`,color:`primary`,variant:__props.iconOnly?`text`:handsFreeListening.value?`tonal`:`flat`,"min-height":__props.iconOnly?44:__props.compact?48:64,rounded:`xl`,icon:__props.iconOnly?unref(voice).listening.value&&!unref(microphoneMuted)?unref(mdiMicrophone):unref(mdiMicrophoneOff):void 0,"prepend-icon":__props.iconOnly?void 0:unref(voice).listening.value&&!unref(microphoneMuted)?unref(mdiMicrophone):unref(mdiMicrophoneOff),"aria-label":__props.iconOnly?talkLabel.value:void 0,title:`click or long press to talk`,"aria-pressed":handsFreeListening.value||unref(pushHolding),"aria-describedby":unref(gestureHint),disabled:!canTalk.value,slim:__props.compact||__props.iconOnly,width:__props.iconOnly?40:__props.compact?148:void 0,"min-width":__props.iconOnly?40:__props.compact?148:void 0,onPointerdown:unref(gesture).pointerDown,onPointerup:unref(gesture).pointerUp,onPointercancel:unref(gesture).cancel,onLostpointercapture:unref(gesture).cancel,onKeydown:[withKeys(withModifiers(unref(gesture).keyDown,[`prevent`]),[`space`]),withKeys(withModifiers(unref(gesture).keyDown,[`prevent`]),[`enter`])],onKeyup:[withKeys(withModifiers(unref(gesture).keyUp,[`prevent`]),[`space`]),withKeys(withModifiers(unref(gesture).keyUp,[`prevent`]),[`enter`])],onBlur:unref(gesture).cancel,onContextmenu:_cache[0]||(_cache[0]=withModifiers(()=>{},[`prevent`])),onClick:unref(gesture).click},{default:withCtx(()=>[__props.iconOnly?(openBlock(),createElementBlock(`span`,_hoisted_11$11,[createVNode(VIcon,{size:`20`,icon:unref(voice).listening.value&&!unref(microphoneMuted)?unref(mdiMicrophone):unref(mdiMicrophoneOff)},null,8,[`icon`])])):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(toDisplayString(talkLabel.value),1)],64))]),_:1},8,[`variant`,`min-height`,`icon`,`prepend-icon`,`aria-label`,`aria-pressed`,`aria-describedby`,`disabled`,`slim`,`width`,`min-width`,`onPointerdown`,`onPointerup`,`onPointercancel`,`onLostpointercapture`,`onKeydown`,`onKeyup`,`onBlur`,`onClick`]),createVNode(VBtn,{icon:unref(readAloud)?unref(mdiVolumeHigh):unref(mdiVolumeOff),"aria-pressed":unref(readAloud),variant:__props.iconOnly?`text`:`tonal`,color:__props.iconOnly?`primary`:void 0,"min-height":__props.iconOnly?44:__props.compact?48:64,width:__props.iconOnly?40:void 0,"min-width":__props.iconOnly?40:__props.compact?48:64,rounded:`xl`,"aria-label":unref(readAloud)?`Turn ${unref(targetLabel)} read-aloud off`:`Read ${unref(targetLabel)} answers aloud`,title:unref(readAloud)?`Spoken replies on`:`Spoken replies off`,disabled:__props.speakerDisabled||__props.session.readAloudChangePending?.value===true,onClick:unref(toggleReadAloud)},createSlots({_:2},[__props.iconOnly?{name:`default`,fn:withCtx(()=>[createBaseVNode(`span`,_hoisted_12$11,[createVNode(VIcon,{size:`20`,icon:unref(readAloud)?unref(mdiVolumeHigh):unref(mdiVolumeOff)},null,8,[`icon`])])]),key:`0`}:void 0]),1032,[`icon`,`aria-pressed`,`variant`,`color`,`min-height`,`width`,`min-width`,`aria-label`,`title`,`disabled`,`onClick`]),renderSlot(_ctx.$slots,`settings-control`,{},void 0,true),createBaseVNode(`p`,{id:unref(gestureHint),class:`text-body-small text-medium-emphasis`},toDisplayString(handsFreeListening.value?`Tap to pause · hold to speak`:`Tap for hands-free · hold to speak`),9,_hoisted_13$11)])],10,_hoisted_8$14)],8,[`to`,`disabled`]))],10,_hoisted_1$35)}}};var VoiceConversationControls_default=_plugin_vue_export_helper_default(_sfc_main$60,[[`__scopeId`,`data-v-cef2716d`]]);var _hoisted_1$34=[`disabled`];var _hoisted_2$28={key:0,role:`img`,"aria-label":`Listening`,title:`Listening`};var _hoisted_3$26={key:1,role:`img`,"aria-label":`Speaking`,title:`Speaking`};var _hoisted_4$20=[`disabled`];var _hoisted_5$19=[`aria-label`];var _hoisted_6$15={key:0,class:`assistant-voice__call-body`};var _hoisted_7$14={class:`assistant-voice__captions`,"aria-label":`Voice conversation text`};var _hoisted_8$13={class:`text-label-medium`};var _hoisted_9$11={key:0};var _hoisted_10$10={key:1};var _hoisted_11$10={class:`assistant-voice__caption-text text-body-medium`};var _hoisted_12$10=[`aria-label`];var _hoisted_13$10={class:`text-label-medium`};var _hoisted_14$10={class:`assistant-voice__caption-text text-body-medium`};var _sfc_main$59={__name:`VoiceConversation`,props:{session:{type:Object,required:true},disabled:{type:Boolean,default:false},adapter:{type:Object,default:null},showAvatar:{type:Boolean,default:true},avatarSize:{type:String,default:`compact`}},emits:[`update:avatarSize`],setup(__props){const props=__props;const{targetLabel,voice,microphoneMuted,heldTranscript,pendingTranscript,sending,avatarVisual,callAudioLevel,voiceWords,voiceAnswer}=props.session;const presentationAdapter=computed(()=>props.adapter&&{...props.adapter,composer:{...props.adapter.composer,canSend:props.adapter.composer?.canSend&&!props.session.composerBlocked.value}});const toolsTarget=ref(null);const voiceWordsTarget=ref(null);const voiceAnswerTarget=ref(null);const followWords=ref(true);const followAnswer=ref(true);function isAtBottom(element){return element.scrollHeight-element.scrollTop-element.clientHeight<24}for(const[text,target,following]of[[voiceWords,voiceWordsTarget,followWords],[voiceAnswer,voiceAnswerTarget,followAnswer]])watch(text,()=>{if(target.value&&following.value)target.value.scrollTop=target.value.scrollHeight},{flush:`post`});return(_ctx,_cache)=>{return __props.adapter?(openBlock(),createElementBlock(`fieldset`,{key:0,class:`assistant-voice-conversation`,disabled:__props.disabled},[createVNode(unref(AssistantConversationElement_default),{adapter:presentationAdapter.value,"avatar-size":__props.avatarSize,"onUpdate:avatarSize":_cache[0]||(_cache[0]=$event=>_ctx.$emit(`update:avatarSize`,$event))},createSlots({"avatar-control":withCtx(scope=>[renderSlot(_ctx.$slots,`avatar-control`,normalizeProps(guardReactiveProps(scope)),()=>[scope.size===`hidden`&&unref(voice).listening.value&&!unref(microphoneMuted)?(openBlock(),createElementBlock(`span`,_hoisted_2$28,[createVNode(VIcon,{icon:unref(mdiMicrophone),size:`20`,"aria-hidden":`true`},null,8,[`icon`])])):createCommentVNode(``,true),scope.size===`hidden`&&unref(voice).speaking.value?(openBlock(),createElementBlock(`span`,_hoisted_3$26,[createVNode(VIcon,{icon:unref(mdiVolumeHigh),size:`20`,"aria-hidden":`true`},null,8,[`icon`])])):createCommentVNode(``,true)],true)]),"composer-feedback":withCtx(()=>[createVNode(VoiceConversationControls_default,{session:__props.session,disabled:__props.disabled,compact:``,"icon-only":__props.showAvatar,"tools-target":toolsTarget.value,"review-in-transcript":Boolean(presentationAdapter.value?.conversation?.previewMessage)},{"work-control":withCtx(()=>[renderSlot(_ctx.$slots,`work-control`,{},void 0,true)]),"settings-control":withCtx(()=>[renderSlot(_ctx.$slots,`settings-control`,{},void 0,true)]),_:3},8,[`session`,`disabled`,`icon-only`,`tools-target`,`review-in-transcript`])]),_:2},[__props.showAvatar?{name:`avatar`,fn:withCtx(size=>[renderSlot(_ctx.$slots,`avatar`,mergeProps(unref(avatarVisual),{size:size.size,height:size.height}),()=>[createVNode(VoiceAvatar_default,normalizeProps(guardReactiveProps(unref(avatarVisual))),null,16)],true)]),key:`0`}:void 0,__props.showAvatar?{name:`avatar-tools`,fn:withCtx(()=>[createBaseVNode(`div`,{ref_key:`toolsTarget`,ref:toolsTarget,class:`assistant-voice-conversation__tools`},null,512)]),key:`1`}:void 0]),1032,[`adapter`,`avatar-size`])],8,_hoisted_1$34)):(openBlock(),createElementBlock(`fieldset`,{key:1,class:`assistant-voice`,disabled:__props.disabled},[createBaseVNode(`section`,{class:normalizeClass([`assistant-voice__call`,{"assistant-voice__call--without-avatar":!__props.showAvatar}]),"aria-label":`${unref(targetLabel)} voice chat controls`},[__props.showAvatar?(openBlock(),createElementBlock(`div`,_hoisted_6$15,[createBaseVNode(`div`,{class:`assistant-voice__call-portrait`,style:normalizeStyle({"--call-audio-scale":1+unref(callAudioLevel)*.16}),"aria-hidden":`true`},[renderSlot(_ctx.$slots,`avatar`,normalizeProps(guardReactiveProps(unref(avatarVisual))),()=>[createVNode(VoiceAvatar_default,normalizeProps(guardReactiveProps(unref(avatarVisual))),null,16)],true)],4)])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_7$14,[createBaseVNode(`section`,{ref_key:`voiceWordsTarget`,ref:voiceWordsTarget,class:`assistant-voice__caption`,"aria-label":`Recognized words`,tabindex:`0`,onScroll:_cache[1]||(_cache[1]=$event=>followWords.value=isAtBottom($event.currentTarget))},[createBaseVNode(`strong`,_hoisted_8$13,[_cache[3]||(_cache[3]=createTextVNode(`You`,-1)),unref(heldTranscript)&&unref(voice).listening.value&&!unref(microphoneMuted)?(openBlock(),createElementBlock(`span`,_hoisted_9$11,` · Hearing…`)):unref(pendingTranscript)&&!unref(sending)?(openBlock(),createElementBlock(`span`,_hoisted_10$10,` · Not sent`)):createCommentVNode(``,true)]),createBaseVNode(`p`,_hoisted_11$10,toDisplayString(unref(voiceWords)),1)],544),createBaseVNode(`section`,{ref_key:`voiceAnswerTarget`,ref:voiceAnswerTarget,class:`assistant-voice__caption`,"aria-label":`${unref(targetLabel)} latest answer`,tabindex:`0`,onScroll:_cache[2]||(_cache[2]=$event=>followAnswer.value=isAtBottom($event.currentTarget))},[createBaseVNode(`strong`,_hoisted_13$10,toDisplayString(unref(targetLabel)),1),createBaseVNode(`p`,_hoisted_14$10,toDisplayString(unref(voiceAnswer)),1)],40,_hoisted_12$10)]),createVNode(VoiceConversationControls_default,{session:__props.session,disabled:__props.disabled},{"work-control":withCtx(()=>[renderSlot(_ctx.$slots,`work-control`,{},void 0,true)]),"settings-control":withCtx(()=>[renderSlot(_ctx.$slots,`settings-control`,{},void 0,true)]),_:3},8,[`session`,`disabled`])],10,_hoisted_5$19)],8,_hoisted_4$20))}}};var VoiceConversation_default=_plugin_vue_export_helper_default(_sfc_main$59,[[`__scopeId`,`data-v-a3d18724`]]);var _sfc_main$58={__name:`VoiceSpeakingVoiceSelect`,props:{voice:{type:Object,required:true}},setup(__props){const props=__props;function selectVoice(value){const selectedVoice=props.voice.selectedVoice;selectedVoice.value=value}return(_ctx,_cache)=>{return openBlock(),createBlock(VSelect,{"model-value":__props.voice.selectedVoice.value,"onUpdate:modelValue":selectVoice,items:__props.voice.availableVoices.value,"item-title":`label`,"item-value":`id`,disabled:__props.voice.availableVoices.value.length<2,label:`Speaking voice`,density:`comfortable`,hint:`Applies to the next spoken reply`,"persistent-hint":``},null,8,[`model-value`,`items`,`disabled`])}}};var _hoisted_1$33={class:`voice-settings__disc`};var _sfc_main$57={__name:`VoiceConversationSettings`,props:{voice:{type:Object,default:null},compact:Boolean},emits:[`error`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const slots=useSlots();async function openSettings(open){if(!open||slots.default||!props.voice)return;try{await props.voice.connect()}catch(error){emit(`error`,error)}}return(_ctx,_cache)=>{return openBlock(),createBlock(VMenu,{"close-on-content-click":false,location:`bottom end`,"onUpdate:modelValue":openSettings},{activator:withCtx(({props:settingsButton})=>[createVNode(VBtn,mergeProps(settingsButton,{icon:unref(mdiCog),variant:`text`,color:__props.compact?`primary`:void 0,width:__props.compact?40:void 0,"min-width":__props.compact?40:48,"min-height":__props.compact?44:48,disabled:!__props.voice&&!_ctx.$slots.default,"aria-label":`Voice settings`,title:`Voice settings`}),createSlots({_:2},[__props.compact?{name:`default`,fn:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$33,[createVNode(VIcon,{size:`20`,icon:unref(mdiCog)},null,8,[`icon`])])]),key:`0`}:void 0]),1040,[`icon`,`color`,`width`,`min-width`,`min-height`,`disabled`])]),default:withCtx(()=>[createVNode(VCard,{class:`voice-settings__menu`,role:`region`,"aria-label":`Voice settings`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[renderSlot(_ctx.$slots,`default`,{voice:__props.voice},()=>[__props.voice?(openBlock(),createBlock(_sfc_main$58,{key:0,voice:__props.voice},null,8,[`voice`])):createCommentVNode(``,true)],true)]),_:3})]),_:3})]),_:3})}}};var VoiceConversationSettings_default=_plugin_vue_export_helper_default(_sfc_main$57,[[`__scopeId`,`data-v-390cea8f`]]);var _hoisted_1$32={class:`voice-host__switch-actions`};var _hoisted_2$27={class:`voice-host__body`};var _sfc_main$56={__name:`VoiceConversationHost`,props:{controller:{type:Object,required:true},activator:{type:Object,default:null},avatarSize:{type:String,default:`hidden`},presentation:{type:String,default:`dialog`,validator:value=>[`dialog`,`inline`].includes(value)}},emits:[`update:avatarSize`],setup(__props){const props=__props;const state=props.controller.state;async function invoke(operation){try{await operation()}catch(error){state.error=error.message}}async function openText(){const opening=state.binding.openText();props.controller.minimize();try{await opening}catch(error){props.controller.reveal();throw error}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[unref(state).session?(openBlock(),createBlock(ConversationDialog_default,{key:0,"model-value":unref(state).visible,activator:__props.activator,presentation:__props.presentation,title:unref(state).binding.label||`Assistant`,mode:`talk`,"show-modes":Boolean(unref(state).binding.openText&&!unref(state).binding.adapter),minimizable:__props.presentation===`dialog`,"close-label":`Close voice chat`,onMinimize:_cache[7]||(_cache[7]=$event=>__props.controller.minimize()),"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>invoke(()=>__props.controller.end({discard:true}))),"onUpdate:mode":_cache[9]||(_cache[9]=value=>value===`text`&&invoke(openText))},createSlots({default:withCtx(()=>[unref(state).error?(openBlock(),createBlock(VAlert,{key:0,type:`error`,density:`compact`,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(state).error),1)]),_:1})):createCommentVNode(``,true),unref(state).nextTarget?(openBlock(),createBlock(VAlert,{key:1,type:`info`,class:`voice-host__switch`},{default:withCtx(()=>[createTextVNode(` Finish or discard your recording for `+toDisplayString(unref(state).binding.label||`this conversation`)+` before switching to `+toDisplayString(unref(state).nextTarget.label||`another conversation`)+`. `,1),createBaseVNode(`div`,_hoisted_1$32,[createVNode(VBtn,{variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>__props.controller.cancelSwitch())},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Stay here`,-1)])]),_:1}),createVNode(VBtn,{disabled:unref(state).busy||unref(state).session.sending.value,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>invoke(()=>__props.controller.switchTarget({discard:true})))},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Discard and switch`,-1)])]),_:1},8,[`disabled`]),!unref(state).session.hasUnsentSpeech.value?(openBlock(),createBlock(VBtn,{key:0,disabled:unref(state).busy,variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>invoke(()=>__props.controller.switchTarget()))},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(`Switch`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)])]),_:1})):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_2$27,[renderSlot(_ctx.$slots,`conversation`,{binding:unref(state).binding,session:unref(state).session,disabled:unref(state).busy},()=>[(openBlock(),createBlock(VoiceConversation_default,{key:unref(state).binding.id,session:unref(state).session,disabled:unref(state).busy,adapter:unref(state).binding.adapter||null,"show-avatar":unref(state).binding.showAvatar!==false,"avatar-size":__props.avatarSize,"onUpdate:avatarSize":_cache[6]||(_cache[6]=$event=>_ctx.$emit(`update:avatarSize`,$event))},createSlots({"work-control":withCtx(()=>[unref(state).binding.cancelWork&&unref(state).binding.state.status===`working`?(openBlock(),createBlock(VBtn,{key:0,disabled:unref(state).busy,icon:unref(mdiStop),variant:`text`,"aria-label":`Stop agent work`,title:`Stop agent work`,onClick:_cache[5]||(_cache[5]=$event=>invoke(unref(state).binding.cancelWork))},null,8,[`disabled`,`icon`])):createCommentVNode(``,true)]),_:2},[_ctx.$slots.avatar?{name:`avatar`,fn:withCtx(visual=>[renderSlot(_ctx.$slots,`avatar`,mergeProps(visual,{binding:unref(state).binding}),void 0,true)]),key:`0`}:void 0,_ctx.$slots[`avatar-control`]?{name:`avatar-control`,fn:withCtx(scope=>[renderSlot(_ctx.$slots,`avatar-control`,mergeProps(scope,{binding:unref(state).binding,session:unref(state).session}),void 0,true)]),key:`1`}:void 0,__props.presentation===`inline`||unref(state).binding.adapter?{name:`settings-control`,fn:withCtx(()=>[createVNode(VoiceConversationSettings_default,{voice:unref(state).session.voice,compact:``,onError:_cache[4]||(_cache[4]=$event=>unref(state).error=$event.message)},createSlots({_:2},[_ctx.$slots.settings?{name:`default`,fn:withCtx(settings=>[renderSlot(_ctx.$slots,`settings`,normalizeProps(guardReactiveProps(settings)),void 0,true)]),key:`0`}:void 0]),1032,[`voice`])]),key:`2`}:void 0]),1032,[`session`,`disabled`,`adapter`,`show-avatar`,`avatar-size`]))],true)])]),_:2},[!unref(state).binding.adapter?{name:`header-actions`,fn:withCtx(()=>[createVNode(VoiceConversationSettings_default,{voice:unref(state).session.voice,onError:_cache[0]||(_cache[0]=$event=>unref(state).error=$event.message)},createSlots({_:2},[_ctx.$slots.settings?{name:`default`,fn:withCtx(settings=>[renderSlot(_ctx.$slots,`settings`,normalizeProps(guardReactiveProps(settings)),void 0,true)]),key:`0`}:void 0]),1032,[`voice`])]),key:`0`}:void 0]),1032,[`model-value`,`activator`,`presentation`,`title`,`show-modes`,`minimizable`])):createCommentVNode(``,true),__props.presentation===`dialog`&&unref(state).session&&!unref(state).visible?(openBlock(),createElementBlock(Fragment,{key:1},[_ctx.$slots.reopen?renderSlot(_ctx.$slots,`reopen`,{controller:__props.controller},void 0,true,0):(openBlock(),createBlock(VBtn,{key:1,class:`voice-host__reopen`,color:`primary`,"prepend-icon":unref(mdiHeadset),"min-height":`56`,onClick:_cache[10]||(_cache[10]=$event=>__props.controller.reveal())},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(state).binding.label||`Assistant`)+` · Voice chat `,1)]),_:1},8,[`prepend-icon`]))],64)):createCommentVNode(``,true)],64)}}};var VoiceConversationHost_default=_plugin_vue_export_helper_default(_sfc_main$56,[[`__scopeId`,`data-v-f6adc756`]]);var client_exports$11=__exportAll({ConversationDialog:()=>ConversationDialog_default,VoiceAvatar:()=>VoiceAvatar_default,VoiceConversation:()=>VoiceConversation_default,VoiceConversationControls:()=>VoiceConversationControls_default,VoiceConversationHost:()=>VoiceConversationHost_default,VoiceConversationSettings:()=>VoiceConversationSettings_default,VoiceSpeakingVoiceSelect:()=>_sfc_main$58,createVoiceConversationController:()=>createVoiceConversationController,projectConversationVoiceState:()=>projectConversationVoiceState,useVoiceAvatar:()=>useVoiceAvatar,useVoiceLauncher:()=>useVoiceLauncher});var VIBE64_VOICE_KEY=Symbol.for(`vibe64.voice`);function useVibe64Voice(){return inject$1(VIBE64_VOICE_KEY,null)}var _sfc_main$55={__name:`Vibe64VoiceHost`,props:{preferences:{type:Object,default:()=>({})},preparePreferences:{type:Function,default:null}},emits:[`read-aloud-change`,`playback`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const controller=createVoiceConversationController({connectSpeech(binding){if(!binding.prepareVoice)return binding.socketUrl;return binding.prepareVoice().then(()=>binding.socketUrl)}});const launcher=shallowRef(null);const slots=useSlots();const Avatar=visual=>slots.avatar?.(visual);const Settings=settings=>slots.settings?.(settings);function preferencesFor(conversation){return props.preferences[conversation.preferenceTarget]||{}}function readAloudFor(conversation){const value=preferencesFor(conversation).readAloud;return typeof value===`boolean`?value:conversation.defaults?.readAloud===true}function readAloudChangePendingFor(conversation){return preferencesFor(conversation).isSaving===true}provide(VIBE64_VOICE_KEY,{controller,launcher,readAloudFor,readAloudChangePendingFor,Avatar:slots.avatar?Avatar:null,Settings:slots.settings?Settings:null,open(conversation){let actorKey=props.preferences.actorKey;return controller.open({conversation:{...conversation,...props.preparePreferences?{async prepareVoice(){actorKey=await props.preparePreferences(conversation.preferenceTarget);if(!actorKey||props.preferences.actorKey!==actorKey||conversation.available===false)throw new Error(`This conversation is no longer available for voice.`);await conversation.prepareVoice?.();if(props.preferences.actorKey!==actorKey||conversation.available===false)throw new Error(`This conversation is no longer available for voice.`)}}:{},get state(){return conversation.state},get available(){return conversation.available},get label(){return conversation.label},get adapter(){return conversation.adapter},get onTranscript(){return conversation.onTranscript},get presentation(){return conversation.presentation},get readAloudChangePending(){return readAloudChangePendingFor(conversation)},get narration(){const narration=conversation.narration;if(!narration)return narration;const preferences=conversation.preferenceTarget===`coding`?preferencesFor(conversation):{};return{...narration,vocalizeThinking:typeof preferences.vocalizeThinking===`boolean`?preferences.vocalizeThinking:narration.vocalizeThinking,vocalizeInterimTurns:typeof preferences.vocalizeInterimTurns===`boolean`?preferences.vocalizeInterimTurns:narration.vocalizeInterimTurns,thinkingSounds:typeof preferences.thinkingSounds===`boolean`?preferences.thinkingSounds:narration.thinkingSounds}},get defaults(){const preferences=preferencesFor(conversation);return{...conversation.defaults,readAloud:readAloudFor(conversation),...preferences.sendMode===`edit`?{reviewBeforeSend:true}:{},...preferences.voice?{voiceId:preferences.voice===`current`?``:preferences.voice}:{}}},onReadAloudChange(value){emit(`read-aloud-change`,value,{target:conversation.preferenceTarget,actorKey});return conversation.onReadAloudChange?.(value)},onPlayback(event){emit(`playback`,event);return conversation.onPlayback?.(event)},get avatar(){return preferencesFor(conversation).avatar||conversation.avatar}}})}});onScopeDispose(()=>{controller.dispose()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[renderSlot(_ctx.$slots,`default`,{},void 0,true),unref(controller).state.binding?.presentation!==`inline`||unref(controller).state.nextTarget?(openBlock(),createBlock(unref(VoiceConversationHost_default),{key:0,controller:unref(controller),activator:launcher.value},createSlots({reopen:withCtx(()=>[]),_:2},[unref(controller).state.binding?.setConversationTarget?{name:`conversation`,fn:withCtx(({binding})=>[createBaseVNode(`div`,{ref:binding.setConversationTarget,class:`vibe64-voice-host__conversation`},null,512)]),key:`0`}:void 0,_ctx.$slots.settings?{name:`settings`,fn:withCtx(settings=>[renderSlot(_ctx.$slots,`settings`,mergeProps(settings,{binding:unref(controller).state.binding}),void 0,true)]),key:`1`}:void 0,_ctx.$slots.avatar?{name:`avatar`,fn:withCtx(visual=>[renderSlot(_ctx.$slots,`avatar`,mergeProps(visual,{binding:unref(controller).state.binding}),void 0,true)]),key:`2`}:void 0]),1032,[`controller`,`activator`])):createCommentVNode(``,true)],64)}}};var Vibe64VoiceHost_default=_plugin_vue_export_helper_default(_sfc_main$55,[[`__scopeId`,`data-v-fd961413`]]);var MAIN_CONVERSATION_PREFIX=`vibe64-main:`;var TEMPORARY_CONVERSATION_PREFIX=`vibe64-temporary:`;function invalidConversation(kind){return Object.assign(new TypeError(`Invalid ${kind} conversation identity.`),{code:`conversation_input_invalid`,statusCode:400})}function mainConversationId({projectSlug,sessionId}={}){if(typeof projectSlug!==`string`||!projectSlug.trim()||typeof sessionId!==`string`||!sessionId.trim())throw new TypeError(`A Main conversation requires a project and session.`);return`${MAIN_CONVERSATION_PREFIX}${JSON.stringify([projectSlug,sessionId])}`}function mainConversationTarget(id){if(typeof id!==`string`||!id.startsWith(MAIN_CONVERSATION_PREFIX))return null;let target;try{target=JSON.parse(id.slice(12))}catch{throw invalidConversation(`Main`)}if(!Array.isArray(target)||target.length!==2||target.some(value=>typeof value!==`string`||!value.trim()))throw invalidConversation(`Main`);return{projectSlug:target[0],sessionId:target[1]}}function temporaryConversationId({projectSlug,sessionId,conversationId}={}){if([projectSlug,sessionId,conversationId].some(value=>typeof value!==`string`||!value.trim()))throw new TypeError(`A temporary conversation requires its project, session and saved logical identity.`);return`${TEMPORARY_CONVERSATION_PREFIX}${JSON.stringify([projectSlug,sessionId,conversationId])}`}function projectVoiceState(runtime){return projectConversationVoiceState({turns:runtime.conversationLog.turns||[],status:runtime.mounted.session.value?.agentSession?.turn?.active?`working`:`ready`})}function createProjectVoiceBinding(runtime,view={}){const identity=runtime.identity;let retained;return{preferenceTarget:`coding`,defaults:{readAloud:true},id:JSON.stringify([`project`,identity.actorKey,identity.projectSlug,identity.sessionId]),conversationId:mainConversationId(identity),socketUrl:`/api/app/${encodeURIComponent(identity.projectSlug)}/vibe64/sessions/${encodeURIComponent(identity.sessionId)}/voice/ws`,get label(){return`${identity.projectSlug} · ${runtime.mounted.session.value?.sessionName||identity.sessionId}`},get state(){return projectVoiceState(runtime)},get available(){return runtime.available.value},get narration(){return{turns:runtime.conversationLog.turns||[],loading:runtime.conversationLog.loading===true,working:runtime.mounted.session.value?.agentSession?.turn?.active===true,eligible:runtime.available.value&&runtime.access.canUseChat.value&&view.eligible===true,vocalizeThinking:false,vocalizeInterimTurns:false,thinkingSounds:true}},get adapter(){return view.adapter||null},get presentation(){return view.presentation||`dialog`},get onTranscript(){return view.onTranscript},captureContext:()=>({...identity}),retain(){retained=runtime.retain();runtime=retained.runtime},release(){retained?.release();retained=null},submitText(text,{messageId,context}={}){if(context?.actorKey!==identity.actorKey||context?.sessionId!==identity.sessionId||context?.projectSlug!==identity.projectSlug)throw new Error(`This recording belongs to another conversation.`);return runtime.send({message:text,agentSettings:runtime.agentSettings.requestSettings.value},{messageId})},cancelWork:()=>runtime.interrupt()}}var _hoisted_1$31={key:1,role:`alert`,class:`text-error`};var _sfc_main$54={__name:`Vibe64ProjectVoiceLauncher`,props:{runtime:{type:Object,required:true},binding:{type:Object,default:null}},emits:[`opened`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const voice=useVibe64Voice();const error=ref(``);async function open(){error.value=``;try{if(await voice.open(props.binding||createProjectVoiceBinding(props.runtime)))emit(`opened`)}catch(failure){error.value=failure.message}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[unref(voice)?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiHeadset),variant:`text`,size:`small`,"min-height":`48`,"min-width":`48`,"aria-label":`Talk to project agent`,title:`Talk to project agent`,disabled:!__props.runtime.available.value,onClick:open},null,8,[`icon`,`disabled`])):createCommentVNode(``,true),error.value?(openBlock(),createElementBlock(`span`,_hoisted_1$31,toDisplayString(error.value),1)):createCommentVNode(``,true)],64)}}};var _hoisted_1$30=[`aria-label`];var _hoisted_2$26={class:`merc-avatar__body`};var _hoisted_3$25=[`d`];var _hoisted_4$19={key:0,class:`merc-avatar__undershirt`,d:`M119 251c12 11 26 17 41 17s29-6 41-17l17 69H102l17-69Z`};var _hoisted_5$18=[`d`];var _hoisted_6$14={key:1,class:`merc-avatar__hood`,d:`M92 246c15-9 29-14 45-16l23 28 23-28c16 2 30 7 45 16l-16 48-35-26-17 23-17-23-35 26-16-48Z`};var _hoisted_7$13={key:2,class:`merc-avatar__hood-shadow`,d:`M103 252c13 5 26 13 40 24l17-18 17 18c14-11 27-19 40-24-9 17-18 29-28 39l-29-19-29 19c-10-10-19-22-28-39Z`};var _hoisted_8$12={key:3,class:`merc-avatar__jacket-panel`,d:`M48 320c4-29 17-52 39-69l23 39-10 30H48Zm224 0c-4-29-17-52-39-69l-23 39 10 30h52Z`};var _hoisted_9$10={key:4,class:`merc-avatar__shirt-neckline`,d:`M125 255q35 24 70 0`};var _hoisted_10$9={class:`merc-avatar__head-gesture`};var _hoisted_11$9={class:`merc-avatar__head`};var _hoisted_12$9=[`d`];var _hoisted_13$9={key:0,class:`merc-avatar__hair merc-avatar__hair--crown-spikes`,d:`M87 82c12-33 38-55 72-62 32-6 62 1 82 19-17 2-30 7-41 16-12-7-25-10-39-9-15 1-29 7-40 16-11-3-22-2-34 0Z`};var _hoisted_14$9={key:1,class:`merc-avatar__hair merc-avatar__hair--temples`,d:`M92 116c-18 12-25 31-21 56 4 23 15 41 35 54-8-24-8-47 1-68l-15-42Zm136 0c18 12 25 31 21 56-4 23-15 41-35 54 8-24 8-47-1-68l15-42Z`};var _hoisted_15$9=[`cx`,`cy`,`rx`,`ry`];var _hoisted_16$8=[`cx`,`cy`,`rx`,`ry`];var _hoisted_17$8={key:2,class:`merc-avatar__face`,d:`M160 72c-41 0-67 24-67 67 0 45 27 82 67 85 40-3 67-40 67-85 0-43-26-67-67-67Z`};var _hoisted_18$8={key:3,class:`merc-avatar__face`,d:`M160 48c-44 0-70 31-70 84 0 61 29 102 70 102s70-41 70-102c0-53-26-84-70-84Z`};var _hoisted_19$7={key:4,class:`merc-avatar__hair merc-avatar__hair--cap`,d:`M82 118c-5-31 2-58 22-79 19-20 42-28 68-27 34 1 60 14 75 38 13 21 17 47 10 76-18-13-40-21-66-22-38-2-74 3-109 14Z`};var _hoisted_20$7=[`d`];var _hoisted_21$7={key:5,class:`merc-avatar__hair-lock`,d:`M108 72c9-12 20-20 33-24M145 43l-2 29M176 42l5 31M204 54c9 8 15 19 18 31`};var _hoisted_22$7={key:6,class:`merc-avatar__hair-swoops`,d:`M91 76c22-33 56-49 99-48M103 91c29-29 65-38 107-28M117 105c28-20 61-25 97-15`};var _hoisted_23$7=[`d`];var _hoisted_24$6=[`d`];var _hoisted_25$5={class:`merc-avatar__eye`};var _hoisted_26$4=[`cx`,`cy`,`rx`,`ry`];var _hoisted_27$4=[`cx`,`cy`,`rx`,`ry`];var _hoisted_28$4=[`cx`,`cy`,`rx`,`ry`];var _hoisted_29$4=[`cy`,`r`];var _hoisted_30$4={key:0,class:`merc-avatar__eye-light`,cx:`133`,cy:`154`,r:`3`};var _hoisted_31$4={key:1,class:`merc-avatar__eye-light merc-avatar__eye-star`,d:`M116 147l3 5 5 2-5 2-3 5-2-5-5-2 5-2 2-5Z`};var _hoisted_32$4={class:`merc-avatar__eye`};var _hoisted_33$4=[`cx`,`cy`,`rx`,`ry`];var _hoisted_34$4=[`cx`,`cy`,`rx`,`ry`];var _hoisted_35$3=[`cx`,`cy`,`rx`,`ry`];var _hoisted_36$3=[`cx`,`cy`,`r`];var _hoisted_37$3={key:0,class:`merc-avatar__eye-light`,cx:`199`,cy:`154`,r:`3`};var _hoisted_38$3={key:1,class:`merc-avatar__eye-light merc-avatar__eye-star`,d:`M181 147l3 5 5 2-5 2-3 5-2-5-5-2 5-2 2-5Z`};var _hoisted_39$2={key:0,class:`merc-avatar__eyeliner`,d:`M106 143q20-27 40 0M174 143q20-27 40 0`};var _hoisted_40$2={key:1,class:`merc-avatar__eyelashes`,d:`M108 132l-9-5m14 0-6-9m7 5-2-10m100 19 9-5m-14 0 6-9m-7 5 2-10`};var _hoisted_41$2=[`d`];var _hoisted_42$2=[`cx`,`cy`,`rx`];var _hoisted_43$2=[`cx`,`cy`,`rx`];var _hoisted_44$2=[`transform`];var _hoisted_45$2={class:`merc-avatar__mouth`};var _hoisted_46$2={key:0,class:`merc-avatar__mouth-pose`};var _hoisted_47$2=[`d`];var _hoisted_48$2=[`d`];var _hoisted_49$2={key:0,class:`merc-avatar__tongue`,d:`M147 207q13-9 26 0c-4 7-8 10-13 10s-9-3-13-10Z`};var _hoisted_50$1={key:1,class:`merc-avatar__mouth-pose`};var _hoisted_51$1={key:2,class:`merc-avatar__mouth-pose`};var _hoisted_52$1={key:3,class:`merc-avatar__mouth-pose`};var _hoisted_53={key:4,class:`merc-avatar__mouth-pose`};var _hoisted_54={key:5,class:`merc-avatar__lip`,d:`M140 190q20 7 40 0`};var _hoisted_55={key:6,class:`merc-avatar__lip`,d:`M141 191q19 3 38 0`};var _hoisted_56={key:7,class:`merc-avatar__lip`,d:`M142 191q17-3 36 1`};var _hoisted_57={key:8,class:`merc-avatar__lip`,d:`M141 191q19 1 38 0`};var _hoisted_58={key:7,class:`merc-avatar__earring`,cx:`84`,cy:`165`,r:`5`};var _sfc_main$53={__name:`MercBlueMangaIllustratedAvatar`,props:{appearance:{default:`original`,type:String},mouthLevel:{default:0,type:Number},mouthPose:{default:`closed`,type:String},state:{default:`idle`,type:String}},setup(__props){const props=__props;const girlVariant=computed(()=>props.appearance===`blond-girl`);const{blinking,activeExpression,idleGesture,expression,visibleMouthPose}=useVoiceAvatar(props);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`svg`,{"aria-label":girlVariant.value?`Illustrated blue-haired manga girl AI avatar of Merc`:`Illustrated AI avatar of Merc`,class:normalizeClass([`merc-avatar`,[`merc-avatar--${unref(expression)}`,`merc-avatar--mouth-${unref(visibleMouthPose)}`,unref(idleGesture)?`merc-avatar--gesture-${unref(idleGesture)}`:``,unref(activeExpression)?`merc-avatar--${unref(expression)}-${unref(activeExpression)}`:``,{"merc-avatar--blinking":unref(blinking),"merc-avatar--blond-girl":girlVariant.value}]]),role:`img`,viewBox:`0 0 320 320`,xmlns:`http://www.w3.org/2000/svg`},[createBaseVNode(`g`,_hoisted_2$26,[createBaseVNode(`path`,{class:`merc-avatar__shirt`,d:girlVariant.value?`M48 320c5-36 24-62 59-78 15-7 32-11 53-11s38 4 53 11c35 16 54 42 59 78H48Z`:`M52 320c4-50 28-78 75-91h66c47 13 71 41 75 91H52Z`},null,8,_hoisted_3$25),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_4$19)):createCommentVNode(``,true),createBaseVNode(`path`,{class:`merc-avatar__neck`,d:girlVariant.value?`M138 203h44v48c-7 13-37 13-44 0v-48Z`:`M130 205h60v50c-8 15-52 15-60 0v-50Z`},null,8,_hoisted_5$18),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_6$14)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_7$13)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_8$12)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_9$10)):createCommentVNode(``,true)]),createBaseVNode(`g`,_hoisted_10$9,[createBaseVNode(`g`,_hoisted_11$9,[createBaseVNode(`path`,{class:`merc-avatar__hair merc-avatar__hair--back`,d:girlVariant.value?`M74 153C66 119 70 78 91 49c17-24 42-36 69-36 37 0 65 13 82 39 20 31 20 72 6 110-8 22-22 41-43 54H115c-22-14-34-34-41-63Z`:`M86 145c-11-35-4-68 18-90l-8-20 26 11 7-26 20 20 12-26 13 27 24-19 1 27 29-13-10 26h28l-21 20 25 12-23 10c5 12 7 25 5 39l-14-19c-5-43-28-68-59-69-34-2-58 24-62 69l-11 18Z`},null,8,_hoisted_12$9),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_13$9)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_14$9)):createCommentVNode(``,true),createBaseVNode(`ellipse`,{class:`merc-avatar__ear`,cx:girlVariant.value?94:91,cy:girlVariant.value?151:148,rx:girlVariant.value?10:16,ry:girlVariant.value?18:27},null,8,_hoisted_15$9),createBaseVNode(`ellipse`,{class:`merc-avatar__ear`,cx:girlVariant.value?226:229,cy:girlVariant.value?151:148,rx:girlVariant.value?10:16,ry:girlVariant.value?18:27},null,8,_hoisted_16$8),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_17$8)):(openBlock(),createElementBlock(`path`,_hoisted_18$8)),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_19$7)):createCommentVNode(``,true),createBaseVNode(`path`,{class:`merc-avatar__hair merc-avatar__hair--fringe`,d:girlVariant.value?`M88 105c15 2 29-3 41-15 8-7 15-15 21-24 2 11 7 20 15 27 8-10 17-18 28-24 1 13 5 23 12 30 10-7 19-15 27-25 5 19 5 37 0 53-14-8-29-13-45-15-23-3-43-1-61 5-15 5-28 11-39 18-7-18-10-35-9-54Z`:`M91 115c5-38 29-61 66-65 35-3 61 15 72 50l-19-12-3 20-17-24-6 22-20-27-9 25-16-25-15 24-15-16-11 23-7 5Z`},null,8,_hoisted_20$7),!girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_21$7)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_22$7)):createCommentVNode(``,true),createBaseVNode(`path`,{class:`merc-avatar__brow merc-avatar__brow--left`,d:girlVariant.value?`M104 111c13-8 28-9 41-3`:`M113 113c11-8 24-8 34-1`},null,8,_hoisted_23$7),createBaseVNode(`path`,{class:`merc-avatar__brow merc-avatar__brow--right`,d:girlVariant.value?`M175 108c13-6 28-5 41 3`:`M173 112c11-7 24-7 34 1`},null,8,_hoisted_24$6),createBaseVNode(`g`,{class:normalizeClass([`merc-avatar__eyes`,{"merc-avatar__eyes--closed":unref(blinking)}])},[createBaseVNode(`g`,_hoisted_25$5,[createBaseVNode(`ellipse`,{class:`merc-avatar__eye-white`,cx:girlVariant.value?126:130,cy:girlVariant.value?145:132,rx:girlVariant.value?19:18,ry:girlVariant.value?23:11},null,8,_hoisted_26$4),createBaseVNode(`ellipse`,{class:`merc-avatar__iris`,cx:girlVariant.value?127:132,cy:girlVariant.value?145:132,rx:girlVariant.value?14.5:7.5,ry:girlVariant.value?19.5:7.5},null,8,_hoisted_27$4),createBaseVNode(`ellipse`,{class:`merc-avatar__pupil`,cx:girlVariant.value?128:133,cy:girlVariant.value?145:132,rx:girlVariant.value?9.5:3.6,ry:girlVariant.value?14:3.6},null,8,_hoisted_28$4),createBaseVNode(`circle`,{class:`merc-avatar__eye-light`,cx:`121`,cy:girlVariant.value?136:128,r:girlVariant.value?5.5:1.8},null,8,_hoisted_29$4),girlVariant.value?(openBlock(),createElementBlock(`circle`,_hoisted_30$4)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_31$4)):createCommentVNode(``,true)]),createBaseVNode(`g`,_hoisted_32$4,[createBaseVNode(`ellipse`,{class:`merc-avatar__eye-white`,cx:girlVariant.value?194:190,cy:girlVariant.value?145:132,rx:girlVariant.value?19:18,ry:girlVariant.value?23:11},null,8,_hoisted_33$4),createBaseVNode(`ellipse`,{class:`merc-avatar__iris`,cx:girlVariant.value?193:188,cy:girlVariant.value?145:132,rx:girlVariant.value?14.5:7.5,ry:girlVariant.value?19.5:7.5},null,8,_hoisted_34$4),createBaseVNode(`ellipse`,{class:`merc-avatar__pupil`,cx:girlVariant.value?192:187,cy:girlVariant.value?145:132,rx:girlVariant.value?9.5:3.6,ry:girlVariant.value?14:3.6},null,8,_hoisted_35$3),createBaseVNode(`circle`,{class:`merc-avatar__eye-light`,cx:girlVariant.value?187:190,cy:girlVariant.value?136:128,r:girlVariant.value?5.5:1.8},null,8,_hoisted_36$3),girlVariant.value?(openBlock(),createElementBlock(`circle`,_hoisted_37$3)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_38$3)):createCommentVNode(``,true)]),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_39$2)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_40$2)):createCommentVNode(``,true)],2),createBaseVNode(`path`,{class:`merc-avatar__nose`,d:girlVariant.value?`M159 164q-2 5 2 6`:`M158 132c-1 15-6 27-3 31 4 4 10 4 14 0`},null,8,_hoisted_41$2),createBaseVNode(`ellipse`,{class:`merc-avatar__cheek`,cx:girlVariant.value?112:116,cy:girlVariant.value?180:166,rx:girlVariant.value?18:17,ry:`9`},null,8,_hoisted_42$2),createBaseVNode(`ellipse`,{class:`merc-avatar__cheek`,cx:girlVariant.value?208:204,cy:girlVariant.value?180:166,rx:girlVariant.value?18:17,ry:`9`},null,8,_hoisted_43$2),createBaseVNode(`g`,{transform:girlVariant.value?`translate(35 34) scale(.78)`:void 0},[createBaseVNode(`g`,_hoisted_45$2,[unref(visibleMouthPose)===`smile`?(openBlock(),createElementBlock(`g`,_hoisted_46$2,[createBaseVNode(`path`,{class:`merc-avatar__mouth-inside`,d:girlVariant.value?`M134 183q26 12 52 0c-2 25-13 36-26 36s-24-11-26-36Z`:`M132 183q28 24 56 0c-4 20-16 29-28 29s-24-9-28-29Z`},null,8,_hoisted_47$2),createBaseVNode(`path`,{class:`merc-avatar__teeth`,d:girlVariant.value?`M139 184q21 8 42 0c-3 8-10 11-21 11s-18-3-21-11Z`:`M137 185q23 14 46 0c-4 9-13 13-23 13s-19-4-23-13Z`},null,8,_hoisted_48$2),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_49$2)):createCommentVNode(``,true)])):unref(visibleMouthPose)===`wide`?(openBlock(),createElementBlock(`g`,_hoisted_50$1,[..._cache[0]||(_cache[0]=[createBaseVNode(`path`,{class:`merc-avatar__mouth-inside`,d:`M130 185q30-13 60 0-5 25-30 25t-30-25Z`},null,-1),createBaseVNode(`path`,{class:`merc-avatar__teeth`,d:`M135 186q25-8 50 0-8 8-25 8t-25-8Z`},null,-1)])])):unref(visibleMouthPose)===`open`?(openBlock(),createElementBlock(`g`,_hoisted_51$1,[..._cache[1]||(_cache[1]=[createBaseVNode(`ellipse`,{class:`merc-avatar__mouth-inside`,cx:`160`,cy:`194`,rx:`19`,ry:`25`},null,-1),createBaseVNode(`path`,{class:`merc-avatar__tongue`,d:`M145 207q15-11 30 0-5 10-15 10t-15-10Z`},null,-1)])])):unref(visibleMouthPose)===`round`?(openBlock(),createElementBlock(`g`,_hoisted_52$1,[..._cache[2]||(_cache[2]=[createBaseVNode(`ellipse`,{class:`merc-avatar__mouth-inside`,cx:`160`,cy:`193`,rx:`12`,ry:`18`},null,-1),createBaseVNode(`ellipse`,{class:`merc-avatar__lip-light`,cx:`160`,cy:`193`,rx:`16`,ry:`22`},null,-1)])])):unref(visibleMouthPose)===`small`?(openBlock(),createElementBlock(`g`,_hoisted_53,[..._cache[3]||(_cache[3]=[createBaseVNode(`ellipse`,{class:`merc-avatar__mouth-inside`,cx:`160`,cy:`191`,rx:`19`,ry:`10`},null,-1),createBaseVNode(`path`,{class:`merc-avatar__lip`,d:`M142 191q18 12 36 0`},null,-1)])])):unref(visibleMouthPose)===`warm-smile`?(openBlock(),createElementBlock(`path`,_hoisted_54)):unref(visibleMouthPose)===`soft-smile`?(openBlock(),createElementBlock(`path`,_hoisted_55)):unref(visibleMouthPose)===`thoughtful`?(openBlock(),createElementBlock(`path`,_hoisted_56)):(openBlock(),createElementBlock(`path`,_hoisted_57))])],8,_hoisted_44$2),!girlVariant.value?(openBlock(),createElementBlock(`circle`,_hoisted_58)):createCommentVNode(``,true)])])],10,_hoisted_1$30)}}};var MercBlueMangaIllustratedAvatar_default=_plugin_vue_export_helper_default(_sfc_main$53,[[`__scopeId`,`data-v-caa6ef8b`]]);var _hoisted_1$29=[`aria-label`];var _hoisted_2$25={class:`merc-avatar__body`};var _hoisted_3$24=[`d`];var _hoisted_4$18=[`d`];var _hoisted_5$17={key:0,class:`merc-avatar__blouse-neckline`,d:`M121 244l39 37 39-37`};var _hoisted_6$13={key:1,class:`merc-avatar__blouse-bow`,d:`M160 281c-12-9-24-9-24 1 0 9 12 12 24 5 12 7 24 4 24-5 0-10-12-10-24-1Z`};var _hoisted_7$12={class:`merc-avatar__head-gesture`};var _hoisted_8$11={class:`merc-avatar__head`};var _hoisted_9$9=[`d`];var _hoisted_10$8={key:0,class:`merc-avatar__hair merc-avatar__hair--crown-spikes`,d:`M100 88C93 63 99 36 118 14c-3 22 4 36 17 46 1-25 12-45 30-59-7 24-2 42 11 55 12-27 32-46 57-54-19 21-25 41-19 60 16-19 35-32 56-36-18 19-24 37-21 56Z`};var _hoisted_11$8={key:1,class:`merc-avatar__hair merc-avatar__hair--temples`,d:`M99 111C83 105 69 91 61 70c1 21 5 39 16 53l-23-10c7 24 20 41 38 53-3-22-1-40 7-55Zm122-2c18-5 33-19 43-39-2 22-6 38-16 53l28-12c-7 25-21 42-43 55 2-23-2-42-12-57Z`};var _hoisted_12$8=[`cx`,`cy`,`rx`,`ry`];var _hoisted_13$8=[`cx`,`cy`,`rx`,`ry`];var _hoisted_14$8={key:2,class:`merc-avatar__face`,d:`M160 42c-45 0-70 35-70 84 0 52 29 91 70 91s70-39 70-91c0-49-25-84-70-84Z`};var _hoisted_15$8={key:3,class:`merc-avatar__face`,d:`M160 48c-44 0-70 31-70 84 0 61 29 102 70 102s70-41 70-102c0-53-26-84-70-84Z`};var _hoisted_16$7={key:4,class:`merc-avatar__hair merc-avatar__hair--cap`,d:`M94 108c4-39 28-64 66-67 38-3 63 21 67 60-21-10-43-14-66-13-27 1-50 7-67 20Z`};var _hoisted_17$7=[`d`];var _hoisted_18$7={key:5,class:`merc-avatar__hair-lock`,d:`M108 72c9-12 20-20 33-24M145 43l-2 29M176 42l5 31M204 54c9 8 15 19 18 31`};var _hoisted_19$6={key:6,class:`merc-avatar__hair-swoops`,d:`M110 86c16-31 48-52 89-63M116 99c27-31 63-43 105-40M132 108c26-20 61-27 97-21`};var _hoisted_20$6=[`d`];var _hoisted_21$6=[`d`];var _hoisted_22$6={class:`merc-avatar__eye`};var _hoisted_23$6=[`cx`,`cy`,`rx`,`ry`];var _hoisted_24$5=[`cx`,`cy`,`r`];var _hoisted_25$4=[`cx`,`cy`,`r`];var _hoisted_26$3=[`cy`,`r`];var _hoisted_27$3={key:0,class:`merc-avatar__eye-light`,cx:`125`,cy:`143`,r:`1.5`};var _hoisted_28$3={class:`merc-avatar__eye`};var _hoisted_29$3=[`cx`,`cy`,`rx`,`ry`];var _hoisted_30$3=[`cx`,`cy`,`r`];var _hoisted_31$3=[`cx`,`cy`,`r`];var _hoisted_32$3=[`cx`,`cy`,`r`];var _hoisted_33$3={key:0,class:`merc-avatar__eye-light`,cx:`184`,cy:`143`,r:`1.5`};var _hoisted_34$3={key:0,class:`merc-avatar__eyeliner`,d:`M104 137q24-22 48 0M168 137q24-22 48 0`};var _hoisted_35$2={key:1,class:`merc-avatar__eyelashes`,d:`M106 130l-8-5m12 1-5-8m109 12 8-5m-12 1 5-8`};var _hoisted_36$2=[`d`];var _hoisted_37$2=[`cx`,`cy`,`rx`];var _hoisted_38$2=[`cx`,`cy`,`rx`];var _hoisted_39$1=[`transform`];var _hoisted_40$1={class:`merc-avatar__mouth`};var _hoisted_41$1={key:0,class:`merc-avatar__mouth-pose`};var _hoisted_42$1={key:1,class:`merc-avatar__mouth-pose`};var _hoisted_43$1={key:2,class:`merc-avatar__mouth-pose`};var _hoisted_44$1={key:3,class:`merc-avatar__mouth-pose`};var _hoisted_45$1={key:4,class:`merc-avatar__mouth-pose`};var _hoisted_46$1={key:5,class:`merc-avatar__lip`,d:`M140 190q20 7 40 0`};var _hoisted_47$1={key:6,class:`merc-avatar__lip`,d:`M141 191q19 3 38 0`};var _hoisted_48$1={key:7,class:`merc-avatar__lip`,d:`M142 191q17-3 36 1`};var _hoisted_49$1={key:8,class:`merc-avatar__lip`,d:`M141 191q19 1 38 0`};var _hoisted_50=[`cx`,`cy`];var _hoisted_51={key:7,class:`merc-avatar__earring`,cx:`232`,cy:`163`,r:`5`};var _hoisted_52={key:8,class:`merc-avatar__earring-drop`,d:`M88 168l-5 8 5 5 5-5-5-8Zm144 0-5 8 5 5 5-5-5-8Z`};var _sfc_main$52={__name:`MercIllustratedAvatar`,props:{appearance:{default:`original`,type:String},mouthLevel:{default:0,type:Number},mouthPose:{default:`closed`,type:String},state:{default:`idle`,type:String}},setup(__props){const props=__props;const girlVariant=computed(()=>props.appearance===`blond-girl`);const{blinking,activeExpression,idleGesture,expression,visibleMouthPose}=useVoiceAvatar(props);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`svg`,{"aria-label":girlVariant.value?`Illustrated blond girl AI avatar of Merc`:`Illustrated AI avatar of Merc`,class:normalizeClass([`merc-avatar`,[`merc-avatar--${unref(expression)}`,`merc-avatar--mouth-${unref(visibleMouthPose)}`,unref(idleGesture)?`merc-avatar--gesture-${unref(idleGesture)}`:``,unref(activeExpression)?`merc-avatar--${unref(expression)}-${unref(activeExpression)}`:``,{"merc-avatar--blinking":unref(blinking),"merc-avatar--blond-girl":girlVariant.value}]]),role:`img`,viewBox:`0 0 320 320`,xmlns:`http://www.w3.org/2000/svg`},[createBaseVNode(`g`,_hoisted_2$25,[createBaseVNode(`path`,{class:`merc-avatar__shirt`,d:girlVariant.value?`M62 320c7-44 31-71 74-89h48c43 18 67 45 74 89H62Z`:`M52 320c4-50 28-78 75-91h66c47 13 71 41 75 91H52Z`},null,8,_hoisted_3$24),createBaseVNode(`path`,{class:`merc-avatar__neck`,d:girlVariant.value?`M137 204h46v45c-6 13-40 13-46 0v-45Z`:`M130 205h60v50c-8 15-52 15-60 0v-50Z`},null,8,_hoisted_4$18),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_5$17)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_6$13)):createCommentVNode(``,true)]),createBaseVNode(`g`,_hoisted_7$12,[createBaseVNode(`g`,_hoisted_8$11,[createBaseVNode(`path`,{class:`merc-avatar__hair merc-avatar__hair--back`,d:girlVariant.value?`M96 121c-1-30 6-57 23-79 17-22 40-35 69-41-22 23-31 45-27 66 19-28 44-48 77-60-24 26-33 52-27 76 17-20 34-33 52-40-9 28-4 52 12 73-24-7-41-6-53 0-15-25-37-38-63-38-27 0-49 16-63 43Z`:`M86 145c-11-35-4-68 18-90l-8-20 26 11 7-26 20 20 12-26 13 27 24-19 1 27 29-13-10 26h28l-21 20 25 12-23 10c5 12 7 25 5 39l-14-19c-5-43-28-68-59-69-34-2-58 24-62 69l-11 18Z`},null,8,_hoisted_9$9),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_10$8)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_11$8)):createCommentVNode(``,true),createBaseVNode(`ellipse`,{class:`merc-avatar__ear`,cx:girlVariant.value?95:91,cy:girlVariant.value?147:148,rx:girlVariant.value?11.5:16,ry:girlVariant.value?20:27},null,8,_hoisted_12$8),createBaseVNode(`ellipse`,{class:`merc-avatar__ear`,cx:girlVariant.value?225:229,cy:girlVariant.value?147:148,rx:girlVariant.value?11.5:16,ry:girlVariant.value?20:27},null,8,_hoisted_13$8),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_14$8)):(openBlock(),createElementBlock(`path`,_hoisted_15$8)),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_16$7)):createCommentVNode(``,true),createBaseVNode(`path`,{class:`merc-avatar__hair merc-avatar__hair--fringe`,d:girlVariant.value?`M96 108c5-37 29-65 69-79-19 18-28 38-23 57 21-27 46-44 78-49-23 15-36 33-37 49 22-9 42-8 62 1-21 11-43 17-69 17-33 0-57-1-80 4Z`:`M91 115c5-38 29-61 66-65 35-3 61 15 72 50l-19-12-3 20-17-24-6 22-20-27-9 25-16-25-15 24-15-16-11 23-7 5Z`},null,8,_hoisted_17$7),!girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_18$7)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_19$6)):createCommentVNode(``,true),createBaseVNode(`path`,{class:`merc-avatar__brow merc-avatar__brow--left`,d:girlVariant.value?`M105 113c13-10 30-11 44-2`:`M113 113c11-8 24-8 34-1`},null,8,_hoisted_20$6),createBaseVNode(`path`,{class:`merc-avatar__brow merc-avatar__brow--right`,d:girlVariant.value?`M171 111c14-9 31-8 44 2`:`M173 112c11-7 24-7 34 1`},null,8,_hoisted_21$6),createBaseVNode(`g`,{class:normalizeClass([`merc-avatar__eyes`,{"merc-avatar__eyes--closed":unref(blinking)}])},[createBaseVNode(`g`,_hoisted_22$6,[createBaseVNode(`ellipse`,{class:`merc-avatar__eye-white`,cx:girlVariant.value?127.5:130,cy:girlVariant.value?138:132,rx:girlVariant.value?23.5:18,ry:girlVariant.value?16.5:11},null,8,_hoisted_23$6),createBaseVNode(`circle`,{class:`merc-avatar__iris`,cx:girlVariant.value?130:132,cy:girlVariant.value?138:132,r:girlVariant.value?12.5:7.5},null,8,_hoisted_24$5),createBaseVNode(`circle`,{class:`merc-avatar__pupil`,cx:girlVariant.value?131:133,cy:girlVariant.value?138:132,r:girlVariant.value?5.8:3.6},null,8,_hoisted_25$4),createBaseVNode(`circle`,{class:`merc-avatar__eye-light`,cx:`135`,cy:girlVariant.value?132:128,r:girlVariant.value?3.2:1.8},null,8,_hoisted_26$3),girlVariant.value?(openBlock(),createElementBlock(`circle`,_hoisted_27$3)):createCommentVNode(``,true)]),createBaseVNode(`g`,_hoisted_28$3,[createBaseVNode(`ellipse`,{class:`merc-avatar__eye-white`,cx:girlVariant.value?192.5:190,cy:girlVariant.value?138:132,rx:girlVariant.value?23.5:18,ry:girlVariant.value?16.5:11},null,8,_hoisted_29$3),createBaseVNode(`circle`,{class:`merc-avatar__iris`,cx:girlVariant.value?190:188,cy:girlVariant.value?138:132,r:girlVariant.value?12.5:7.5},null,8,_hoisted_30$3),createBaseVNode(`circle`,{class:`merc-avatar__pupil`,cx:girlVariant.value?189:187,cy:girlVariant.value?138:132,r:girlVariant.value?5.8:3.6},null,8,_hoisted_31$3),createBaseVNode(`circle`,{class:`merc-avatar__eye-light`,cx:girlVariant.value?194:190,cy:girlVariant.value?132:128,r:girlVariant.value?3.2:1.8},null,8,_hoisted_32$3),girlVariant.value?(openBlock(),createElementBlock(`circle`,_hoisted_33$3)):createCommentVNode(``,true)]),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_34$3)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_35$2)):createCommentVNode(``,true)],2),createBaseVNode(`path`,{class:`merc-avatar__nose`,d:girlVariant.value?`M160 154q-2 6 2 7`:`M158 132c-1 15-6 27-3 31 4 4 10 4 14 0`},null,8,_hoisted_36$2),createBaseVNode(`ellipse`,{class:`merc-avatar__cheek`,cx:girlVariant.value?111:116,cy:girlVariant.value?171:166,rx:girlVariant.value?22:17,ry:`9`},null,8,_hoisted_37$2),createBaseVNode(`ellipse`,{class:`merc-avatar__cheek`,cx:girlVariant.value?209:204,cy:girlVariant.value?171:166,rx:girlVariant.value?22:17,ry:`9`},null,8,_hoisted_38$2),createBaseVNode(`g`,{transform:girlVariant.value?`translate(35 34) scale(.78)`:void 0},[createBaseVNode(`g`,_hoisted_40$1,[unref(visibleMouthPose)===`smile`?(openBlock(),createElementBlock(`g`,_hoisted_41$1,[..._cache[0]||(_cache[0]=[createBaseVNode(`path`,{class:`merc-avatar__mouth-inside`,d:`M132 183q28 24 56 0c-4 20-16 29-28 29s-24-9-28-29Z`},null,-1),createBaseVNode(`path`,{class:`merc-avatar__teeth`,d:`M137 185q23 14 46 0c-4 9-13 13-23 13s-19-4-23-13Z`},null,-1)])])):unref(visibleMouthPose)===`wide`?(openBlock(),createElementBlock(`g`,_hoisted_42$1,[..._cache[1]||(_cache[1]=[createBaseVNode(`path`,{class:`merc-avatar__mouth-inside`,d:`M130 185q30-13 60 0-5 25-30 25t-30-25Z`},null,-1),createBaseVNode(`path`,{class:`merc-avatar__teeth`,d:`M135 186q25-8 50 0-8 8-25 8t-25-8Z`},null,-1)])])):unref(visibleMouthPose)===`open`?(openBlock(),createElementBlock(`g`,_hoisted_43$1,[..._cache[2]||(_cache[2]=[createBaseVNode(`ellipse`,{class:`merc-avatar__mouth-inside`,cx:`160`,cy:`194`,rx:`19`,ry:`25`},null,-1),createBaseVNode(`path`,{class:`merc-avatar__tongue`,d:`M145 207q15-11 30 0-5 10-15 10t-15-10Z`},null,-1)])])):unref(visibleMouthPose)===`round`?(openBlock(),createElementBlock(`g`,_hoisted_44$1,[..._cache[3]||(_cache[3]=[createBaseVNode(`ellipse`,{class:`merc-avatar__mouth-inside`,cx:`160`,cy:`193`,rx:`12`,ry:`18`},null,-1),createBaseVNode(`ellipse`,{class:`merc-avatar__lip-light`,cx:`160`,cy:`193`,rx:`16`,ry:`22`},null,-1)])])):unref(visibleMouthPose)===`small`?(openBlock(),createElementBlock(`g`,_hoisted_45$1,[..._cache[4]||(_cache[4]=[createBaseVNode(`ellipse`,{class:`merc-avatar__mouth-inside`,cx:`160`,cy:`191`,rx:`19`,ry:`10`},null,-1),createBaseVNode(`path`,{class:`merc-avatar__lip`,d:`M142 191q18 12 36 0`},null,-1)])])):unref(visibleMouthPose)===`warm-smile`?(openBlock(),createElementBlock(`path`,_hoisted_46$1)):unref(visibleMouthPose)===`soft-smile`?(openBlock(),createElementBlock(`path`,_hoisted_47$1)):unref(visibleMouthPose)===`thoughtful`?(openBlock(),createElementBlock(`path`,_hoisted_48$1)):(openBlock(),createElementBlock(`path`,_hoisted_49$1))])],8,_hoisted_39$1),createBaseVNode(`circle`,{class:`merc-avatar__earring`,cx:girlVariant.value?88:84,cy:girlVariant.value?163:165,r:`5`},null,8,_hoisted_50),girlVariant.value?(openBlock(),createElementBlock(`circle`,_hoisted_51)):createCommentVNode(``,true),girlVariant.value?(openBlock(),createElementBlock(`path`,_hoisted_52)):createCommentVNode(``,true)])])],10,_hoisted_1$29)}}};var MercIllustratedAvatar_default=_plugin_vue_export_helper_default(_sfc_main$52,[[`__scopeId`,`data-v-03a6668e`]]);var _sfc_main$51={__name:`MercBlondBoyAvatar`,props:{mouthLevel:{default:0,type:Number},mouthPose:{default:`closed`,type:String},state:{default:`idle`,type:String}},setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(MercIllustratedAvatar_default,{appearance:`original`,"mouth-level":__props.mouthLevel,"mouth-pose":__props.mouthPose,state:__props.state},null,8,[`mouth-level`,`mouth-pose`,`state`])}}};var _sfc_main$50={__name:`MercAvatar`,props:{avatar:{default:`yu`,type:String},mouthLevel:{default:0,type:Number},mouthPose:{default:`closed`,type:String},state:{default:`idle`,type:String}},setup(__props){return(_ctx,_cache)=>{return __props.avatar===`merc`?(openBlock(),createBlock(_sfc_main$51,{key:0,"mouth-level":__props.mouthLevel,"mouth-pose":__props.mouthPose,state:__props.state},null,8,[`mouth-level`,`mouth-pose`,`state`])):(openBlock(),createBlock(MercBlueMangaIllustratedAvatar_default,{key:1,appearance:`blond-girl`,"mouth-level":__props.mouthLevel,"mouth-pose":__props.mouthPose,state:__props.state},null,8,[`mouth-level`,`mouth-pose`,`state`]))}}};var VIBE64_AVATAR_CHOICES=Object.freeze([Object.freeze({id:`merc`,label:`Merc · male`}),Object.freeze({id:`yu`,label:`Yu · female`})]);var VIBE64_AVATAR_IDS=Object.freeze(VIBE64_AVATAR_CHOICES.map(choice=>choice.id));var VIBE64_DEFAULT_AVATARS=Object.freeze({colleague:`merc`,coding:`yu`});function isVibe64AvatarId(value){return VIBE64_AVATAR_IDS.includes(value)}var _sfc_main$49={__name:`Vibe64AvatarSetting`,props:{modelValue:{type:String,default:null},disabled:Boolean,loading:Boolean,hint:{type:String,default:``}},emits:[`update:modelValue`],setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(VSelect,{"model-value":__props.modelValue,items:unref(VIBE64_AVATAR_CHOICES),"item-title":`label`,"item-value":`id`,label:`Avatar`,density:`comfortable`,disabled:__props.disabled,loading:__props.loading,hint:__props.hint,"persistent-hint":Boolean(__props.hint),"onUpdate:modelValue":_cache[0]||(_cache[0]=value=>_ctx.$emit(`update:modelValue`,value))},null,8,[`model-value`,`items`,`disabled`,`loading`,`hint`,`persistent-hint`])}}};var client_exports$10=__exportAll({Vibe64AvatarSetting:()=>_sfc_main$49,Vibe64ColleagueAvatar:()=>_sfc_main$50,Vibe64ProjectVoiceLauncher:()=>_sfc_main$54,Vibe64VoiceHost:()=>Vibe64VoiceHost_default,createProjectVoiceBinding:()=>createProjectVoiceBinding,useVibe64Voice:()=>useVibe64Voice});var VIBE64_TRAINING_LEARNER_CHANGED_EVENT=`vibe64.training.learner.changed`;function conversationTurnsFromMessages(messages=[]){const turns=[];let current=null;for(const[index,source]of messages.entries()){const message={...source,messageId:String(source.messageId||source.id||`message-${index}`)};if(message.role===`system`){turns.push({turnId:message.messageId,system:message,messages:[message]});current=null;continue}if(message.role===`user`||!current||current.assistant){current={turnId:message.messageId,messages:[]};turns.push(current)}if(message.role===`user`)current.user=message;if(message.role===`assistant`){current.pending=[`starting`,`inProgress`].includes(message.status);for(const[progressIndex,progress]of(message.progressUpdates||[]).entries())current.messages.push({...progress,role:progress.role||`thinking`,messageId:`${message.messageId}:progress:${progress.id||progressIndex}`});if(!message.text&&[`failed`,`interrupted`].includes(message.status))message.text=message.status===`interrupted`?`Stopped.`:`Assistant stopped with an error.`;current.assistant=message}if(message.role!==`assistant`||message.text)current.messages.push(message)}return turns}function messagesForTurn(turn){return turn.messages||[turn.system,turn.user,...turn.thinking||[],...turn.commentary||[],turn.assistant].filter(Boolean)}function mergeConversationStream(turns=[],snapshot={}){const savedIds=new Set(turns.flatMap(messagesForTurn).map(message=>message.messageId));const messages=(snapshot?.messages||[]).filter(message=>message.text&&!savedIds.has(message.messageId));if(!messages.length)return turns;const result=[...turns];for(const message of messages){const tail=result.at(-1);const authoredIndex=message.turnId?result.findIndex(turn=>turn.turnId===message.turnId):-1;const existing=authoredIndex>=0?result[authoredIndex]:!message.turnId&&tail&&!tail.assistant&&!tail.system?tail:null;const turn=existing?{...existing,messages:[...messagesForTurn(existing)]}:{turnId:message.turnId||`stream:${message.messageId}`,messages:[]};if(authoredIndex>=0)result[authoredIndex]=turn;else if(existing)result[result.length-1]=turn;else result.push(turn);turn.messages.push(message);turn.pending=true;if(message.role===`assistant`)turn.assistant=message;else turn.commentary=[...turn.commentary||[],message]}return result}function messageText(value=``){return String(value||``).trim()}function conversationTurns(conversationLog={}){if(Array.isArray(conversationLog?.turns))return conversationLog.turns;return Array.isArray(conversationLog)?conversationLog:[]}function latestAssistantMessageAwaitingUserReply(conversationLog={}){const turns=conversationTurns(conversationLog);for(let turnIndex=turns.length-1;turnIndex>=0;turnIndex-=1){const turn=turns[turnIndex];const messages=Array.isArray(turn?.messages)?turn.messages:[];if(messages.length){for(let index=messages.length-1;index>=0;index-=1){const message=messages[index];const text=messageText(message?.text);if(!text)continue;if(message?.role===`user`)return``;if(message?.role===`assistant`){if(message.status===`inProgress`)return``;return text}}continue}if(messageText(turn?.user?.text))return``;const assistantText=messageText(turn?.assistant?.text);if(assistantText){if(turn.assistant.status===`inProgress`)return``;return assistantText}}return``}var CONVERSATION_LOG_PAGE_LIMIT=10;var messageRoles=[`system`,`user`,`assistant`];function conversationLogPageStart(turns,limit,end=turns.length){if(!limit)return 0;let remaining=limit;let start=end;while(start>0&&remaining>0){start-=1;remaining-=messageRoles.filter(role=>turns[start]?.[role]).length}return turns.slice(0,start).some(turn=>messageRoles.some(role=>turn?.[role]))?start:0}function isRecord$1(value){return Boolean(value&&typeof value===`object`&&!Array.isArray(value))}function normalizeConversationLogPagination(pagination={}){const source=isRecord$1(pagination)?pagination:{};return{...source.pageUnit===`messages`?{pageUnit:`messages`}:{},beforeTurnId:String(source.beforeTurnId||``).trim(),count:Number.isFinite(Number(source.count))?Number(source.count):0,hasMoreBefore:source.hasMoreBefore===true,limit:Number.isFinite(Number(source.limit))?Number(source.limit):0,newestTurnId:String(source.newestTurnId||``).trim(),nextBeforeTurnId:String(source.nextBeforeTurnId||``).trim(),oldestTurnId:String(source.oldestTurnId||``).trim(),totalTurnCount:Number.isFinite(Number(source.totalTurnCount))?Number(source.totalTurnCount):0}}function normalizeConversationLogPage(payload={}){const source=isRecord$1(payload)?payload:{};const conversationLog=Array.isArray(source.conversationLog)?source.conversationLog:[];const pagination=normalizeConversationLogPagination(source.pagination);return{...source,conversationLog,pagination:{...pagination,count:pagination.count||conversationLog.length,newestTurnId:pagination.newestTurnId||String(conversationLog.at(-1)?.turnId||``).trim(),oldestTurnId:pagination.oldestTurnId||String(conversationLog[0]?.turnId||``).trim()}}}function mergeConversationLogPages(pages=[]){const orderedTurns=[];const indexes=new Map;for(const page of Array.isArray(pages)?pages:[]){const normalized=normalizeConversationLogPage(page);for(const turn of normalized.conversationLog){const turnId=String(turn?.turnId||``).trim();if(!turnId){orderedTurns.push(turn);continue}if(indexes.has(turnId)){const index=indexes.get(turnId);const previous=orderedTurns[index];if(!turn.paginationPartial&&!previous.paginationPartial){orderedTurns[index]=turn;continue}const merged={...previous,...turn};for(const role of messageRoles)merged[role]=turn[role]||previous[role];const[activity,previousActivity]=[turn,previous].map(part=>(part.messages||[...part.thinking||[],...part.commentary||[]]).filter(message=>!messageRoles.includes(message.role)));const retainedActivity=activity.length?activity:previousActivity;merged.thinking=retainedActivity.filter(message=>message.role===`thinking`);merged.commentary=retainedActivity.filter(message=>message.role===`commentary`);merged.messages=[merged.system,merged.user,...retainedActivity,merged.assistant].filter(Boolean);orderedTurns[index]=merged;continue}indexes.set(turnId,orderedTurns.length);orderedTurns.push(turn)}}return{conversationLog:orderedTurns}}function conversationLogReadQuery({beforeTurnId=``,limit=10}={}){return{...beforeTurnId?{beforeTurnId}:{},limit:String(limit)}}function isRecord(value){return Boolean(value&&typeof value===`object`&&!Array.isArray(value))}function normalizeConversationMessage(message={},{normalizeAttachments=value=>Array.isArray(value)?value:[]}={}){if(!message||typeof message!==`object`||Array.isArray(message))return null;const role=String(message.role||``).trim();const text=role===`thinking`?normalizeThinkingMessageText(message.text):String(message.text||``).trim();if(!role||!text)return null;const attachments=normalizeAttachments(message.attachments);return{at:String(message.at||``).trim(),...attachments.length?{attachments}:{},...String(message.messageId||``).trim()?{messageId:String(message.messageId).trim()}:{},role,text,...message.receipt===false?{receipt:false}:{}}}function chronologicalConversationActivity(messages=[]){return[...messages].sort((left,right)=>String(left?.at||``).localeCompare(String(right?.at||``)))}function normalizeConversationTurn(turn={},index=0,options={}){if(!turn||typeof turn!==`object`||Array.isArray(turn))return null;const user=normalizeConversationMessage(turn.user,options);const assistant=normalizeConversationMessage(turn.assistant,options);const normalizedCommentary=Array.isArray(turn.commentary)?turn.commentary.map(message=>normalizeConversationMessage(message,options)).filter(Boolean):[];const system=normalizeConversationMessage(turn.system,options);const normalizedThinking=Array.isArray(turn.thinking)?turn.thinking.map(message=>normalizeConversationMessage(message,options)).filter(Boolean):[];const activityFromMessages=Array.isArray(turn.messages)?turn.messages.map(message=>normalizeConversationMessage(message,options)).filter(message=>[`commentary`,`thinking`].includes(message?.role)):[];const activity=activityFromMessages.length?activityFromMessages:chronologicalConversationActivity([...normalizedThinking,...normalizedCommentary]);const commentary=activity.filter(message=>message.role===`commentary`);const thinking=activity.filter(message=>message.role===`thinking`);if(!system&&!user&&!assistant&&!activity.length)return null;return{assistant,commentary,messages:[system,user,...activity,assistant].filter(Boolean),...isRecord(turn.metadata)?{metadata:turn.metadata}:{},...system?{system}:{},thinking,turnId:String(turn.turnId||index+1).trim(),user}}function applyConversationLogPatch(payload={},patch=null,options={}){if(patch?.type!==`upsert-turn`||!isRecord(patch.turn))return null;const source=isRecord(payload)?payload:{};const turns=Array.isArray(source.conversationLog)?source.conversationLog:[];const turnId=String(patch.turn.turnId||``).trim();if(!turnId)return null;const existingIndex=turns.findIndex(turn=>String(turn?.turnId||``).trim()===turnId);const existing=turns[existingIndex];const updated={...existing,...patch.turn};if(existing){for(const role of[`system`,`user`,`assistant`])if(existing[role]&&!updated[role])updated[role]=existing[role];const existingTurn=normalizeConversationTurn(existing,0,options);const patchedTurn=normalizeConversationTurn(patch.turn,0,options);for(const role of[`thinking`,`commentary`]){const messages=new Map;for(const message of[...existingTurn?.[role]||[],...patchedTurn?.[role]||[]]){const key=message.messageId||JSON.stringify(message.at?[message.role,message.at]:[message.role,``,message.text]);messages.set(key,message)}updated[role]=chronologicalConversationActivity([...messages.values()])}const replies=new Map;for(const message of[existing,patch.turn].flatMap(turn=>Array.isArray(turn.messages)?turn.messages.filter(message=>message?.role===`assistant`):[turn.assistant].filter(Boolean)))replies.set(message.messageId||JSON.stringify(message.at?[message.at]:[``,message.text]),message);if(!replies.size&&updated.assistant)replies.set(``,updated.assistant);const orderedReplies=chronologicalConversationActivity([...replies.values()]);updated.messages=[updated.system,updated.user,...chronologicalConversationActivity([...updated.thinking,...updated.commentary,...orderedReplies.slice(0,-1)]),orderedReplies.at(-1)].filter(Boolean)}const nextTurns=(existingIndex>=0?turns.map((turn,index)=>index===existingIndex?updated:turn):[...turns,patch.turn]).sort((left,right)=>String(left?.turnId||``).localeCompare(String(right?.turnId||``),void 0,{numeric:true}));const pagination=normalizeConversationLogPagination(source.pagination);const limit=Number.parseInt(String(options.limit||``),10);const limitedTurns=Number.isFinite(limit)&&limit>0?nextTurns.slice(pagination.pageUnit===`messages`?conversationLogPageStart(nextTurns,limit):-limit):nextTurns;const wasTrimmed=limitedTurns.length<nextTurns.length;const hasMoreBefore=pagination.hasMoreBefore||wasTrimmed;const oldestTurnId=String(limitedTurns[0]?.turnId||``).trim();const beforeCursor=oldestTurnId===pagination.oldestTurnId?pagination.nextBeforeTurnId||oldestTurnId:oldestTurnId;return{...source,conversationLog:limitedTurns,pagination:{...pagination,count:limitedTurns.length,hasMoreBefore,newestTurnId:String(limitedTurns.at(-1)?.turnId||``).trim(),nextBeforeTurnId:hasMoreBefore?beforeCursor:``,oldestTurnId}}}var _hoisted_1$28={key:1,class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_2$24={key:2,class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_3$23={class:`d-flex align-center justify-end ga-3 mt-2`};var _sfc_main$48={__name:`AssistantSettingsFormCard`,props:{rootClass:{type:String,required:true},title:{type:String,required:true},subtitle:{type:String,required:true},noPermissionMessage:{type:String,required:true},saveLabel:{type:String,required:true},addEdit:{type:Object,required:true},showFormSkeleton:{type:Boolean,default:false}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass(props.rootClass)},[createVNode(VCard,{rounded:`lg`,elevation:`1`,border:``},{default:withCtx(()=>[createVNode(VCardItem,null,{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-h6`},{default:withCtx(()=>[createTextVNode(toDisplayString(props.title),1)]),_:1}),createVNode(VCardSubtitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(props.subtitle),1)]),_:1})]),_:1}),createVNode(VDivider),createVNode(VCardText,{class:`pt-4`},{default:withCtx(()=>[props.showFormSkeleton?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`text@2, list-item-two-line@4, button`})):props.addEdit.loadError?(openBlock(),createElementBlock(`p`,_hoisted_1$28,toDisplayString(props.addEdit.loadError),1)):!props.addEdit.canView?(openBlock(),createElementBlock(`p`,_hoisted_2$24,toDisplayString(props.noPermissionMessage),1)):(openBlock(),createBlock(VForm,{key:3,onSubmit:withModifiers(props.addEdit.submit,[`prevent`]),novalidate:``},{default:withCtx(()=>[props.addEdit.isRefetching?(openBlock(),createBlock(VProgressLinear,{key:0,indeterminate:``,class:`mb-4`})):createCommentVNode(``,true),renderSlot(_ctx.$slots,`default`),createBaseVNode(`div`,_hoisted_3$23,[props.addEdit.canSave?(openBlock(),createBlock(VBtn,{key:0,type:`submit`,color:`primary`,loading:props.addEdit.isSaving,disabled:props.addEdit.isInitialLoading||props.addEdit.isRefetching},{default:withCtx(()=>[createTextVNode(toDisplayString(props.saveLabel),1)]),_:1},8,[`loading`,`disabled`])):(openBlock(),createBlock(VChip,{key:1,color:`secondary`,label:``},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Read-only`,-1)])]),_:1}))])]),_:3},8,[`onSubmit`]))]),_:3})]),_:3})],2)}}};var assistantHttpClient=createHttpClient({credentials:`include`,csrf:{sessionPath:`/api/session`}});var ASSISTANT_API_RELATIVE_PATH=`/assistant`;function materializeAssistantPath(basePath=``,{workspaceSlug=``,surfaceId=``,suffix=`/`}={}){const normalizedBasePath=String(basePath||``).trim();if(!normalizedBasePath)return``;let materializedBasePath=normalizedBasePath;if(normalizedBasePath.includes(`:workspaceSlug`)){const normalizedWorkspaceSlug=normalizeText$3(workspaceSlug).toLowerCase();if(!normalizedWorkspaceSlug)return``;materializedBasePath=normalizedBasePath.replace(`:workspaceSlug`,encodeURIComponent(normalizedWorkspaceSlug))}if(materializedBasePath.includes(`:surfaceId`)){const normalizedSurfaceId=normalizeText$3(surfaceId).toLowerCase();if(!normalizedSurfaceId)return``;materializedBasePath=materializedBasePath.replace(`:surfaceId`,encodeURIComponent(normalizedSurfaceId))}const normalizedSuffix=normalizePathname$1(suffix);return normalizedSuffix===`/`?materializedBasePath:`${materializedBasePath}${normalizedSuffix}`}function resolveAssistantApiBasePath({requiresWorkspace=false}={}){return resolveScopedApiBasePath({routeBase:requiresWorkspace===true?`/w/:workspaceSlug`:`/`,relativePath:ASSISTANT_API_RELATIVE_PATH,strictParams:false})}function buildAssistantApiPath({requiresWorkspace=false,workspaceSlug=``,suffix=`/`}={}){return materializeAssistantPath(resolveAssistantApiBasePath({requiresWorkspace}),{workspaceSlug,suffix})}var ASSISTANT_QUERY_KEY_PREFIX=Object.freeze([`assistant`]);function normalizeSurfaceId(value){return String(value||``).trim().toLowerCase()||`none`}function normalizeWorkspaceSlug(value){return String(value||``).trim()||`none`}function normalizePositiveInteger(value,fallback){const parsed=Number(value);if(!Number.isInteger(parsed)||parsed<1)return fallback;return parsed}function normalizeScopeKey({targetSurfaceId=``,workspaceSlug=``,workspaceId=null}={}){const normalizedWorkspaceId=normalizeRecordId(workspaceId,{fallback:null});const normalizedSurfaceId=normalizeSurfaceId(targetSurfaceId);if(normalizedWorkspaceId)return`${normalizedSurfaceId}:workspace:${normalizedWorkspaceId}`;const normalizedWorkspaceSlug=normalizeWorkspaceSlug(workspaceSlug);if(normalizedWorkspaceSlug!==`none`)return`${normalizedSurfaceId}:slug:${normalizedWorkspaceSlug}`;return`${normalizedSurfaceId}:global`}function normalizeStatus(value){return String(value||``).trim().toLowerCase()||`all`}function normalizeConversationId(value){return normalizeRecordId(value,{fallback:`none`})}function assistantRootQueryKey(){return[...ASSISTANT_QUERY_KEY_PREFIX]}function assistantScopeQueryKey(scope={}){return[...assistantRootQueryKey(),normalizeScopeKey(scope)]}function assistantSettingsQueryKey(scope={}){return[...assistantScopeQueryKey(scope),`settings`]}function assistantConversationsListQueryKey(scope={},{limit=20,status=``}={}){return[...assistantScopeQueryKey(scope),`conversations`,`list`,normalizePositiveInteger(limit,20),normalizeStatus(status)]}function assistantConversationMessagesQueryKey(scope={},conversationId,{page=1,pageSize=200}={}){return[...assistantScopeQueryKey(scope),`conversations`,normalizeConversationId(conversationId),`messages`,normalizePositiveInteger(page,1),normalizePositiveInteger(pageSize,200)]}var ASSISTANT_STREAM_EVENT_TYPES=Object.freeze({META:`meta`,ASSISTANT_DELTA:`assistant_delta`,ASSISTANT_MESSAGE:`assistant_message`,TOOL_CALL:`tool_call`,TOOL_RESULT:`tool_result`,ERROR:`error`,DONE:`done`});var STREAM_EVENT_TYPE_SET=new Set(Object.values(ASSISTANT_STREAM_EVENT_TYPES));function normalizeAssistantStreamEventType(value,fallback=``){const normalized=String(value||``).trim().toLowerCase();if(!normalized)return fallback;if(!STREAM_EVENT_TYPE_SET.has(normalized))return fallback;return normalized}var SCHEMA_DEFINITION_MODES=new Set([`create`,`replace`,`patch`]);var OPERATION_SCHEMA_SECTION_NAMES=Object.freeze([`body`,`query`,`params`,`input`,`output`]);function isJsonRestSchemaInstance(value){return Boolean(value)&&typeof value===`object`&&typeof value.create===`function`&&typeof value.replace===`function`&&typeof value.patch===`function`&&typeof value.toJsonSchema===`function`}function isSchemaDefinitionLike(value){return Boolean(value)&&typeof value===`object`&&!Array.isArray(value)&&(Object.hasOwn(value,`schema`)||Object.hasOwn(value,`mode`))}function resolveSchemaDefinitionMode(mode,{context=`schema definition.mode`,defaultMode=`patch`}={}){const fallbackMode=normalizeText$3(defaultMode).toLowerCase()||`patch`;const normalizedMode=normalizeText$3(mode).toLowerCase()||fallbackMode;if(!SCHEMA_DEFINITION_MODES.has(normalizedMode))throw new TypeError(`${context} must be one of: create, replace, patch.`);return normalizedMode}function createSchemaDefinition(schema,mode=`patch`,{context=`schema definition`}={}){if(!isJsonRestSchemaInstance(schema))throw new TypeError(`${context}.schema must be a json-rest-schema schema instance.`);return Object.freeze({schema,mode:resolveSchemaDefinitionMode(mode,{context:`${context}.mode`,defaultMode:`patch`})})}function normalizeSchemaDefinitionLike(value,{context=`schema definition`,defaultMode=`patch`}={}){if(value==null)return value;if(isJsonRestSchemaInstance(value))return createSchemaDefinition(value,defaultMode,{context});if(!isSchemaDefinitionLike(value))throw new TypeError(`${context} must be a json-rest-schema schema instance or schema definition object.`);const source=normalizeObject$1(value);if(!Object.hasOwn(source,`schema`))throw new TypeError(`${context}.schema is required.`);return createSchemaDefinition(source.schema,Object.hasOwn(source,`mode`)?source.mode:defaultMode,{context})}function resolveDefaultOperationSchemaMode(sectionName,operation={}){const normalizedSectionName=normalizeText$3(sectionName).toLowerCase();if(normalizedSectionName===`output`)return`replace`;if(normalizedSectionName!==`body`)return`patch`;const normalizedMethod=normalizeText$3(operation?.method).toUpperCase();if(normalizedMethod===`POST`)return`create`;if(normalizedMethod===`PUT`)return`replace`;return`patch`}function normalizeOperationDefinition(operationName,operation=null,resourceMessages=null){if(!operation||typeof operation!==`object`||Array.isArray(operation))throw new TypeError(`defineResource operations.${operationName} must be an object.`);const source=normalizeObject$1(operation);const normalizedOperation={...source};if(resourceMessages&&typeof resourceMessages===`object`&&!Array.isArray(resourceMessages)&&!Object.hasOwn(source,`messages`))normalizedOperation.messages=resourceMessages;for(const sectionName of OPERATION_SCHEMA_SECTION_NAMES){if(!Object.hasOwn(source,sectionName))continue;const defaultMode=resolveDefaultOperationSchemaMode(sectionName,source);normalizedOperation[sectionName]=normalizeSchemaDefinitionLike(source[sectionName],{context:`defineResource operations.${operationName}.${sectionName}`,defaultMode})}return deepFreeze(normalizedOperation)}function normalizeResourceOperations(operations=null,resourceMessages=null){const source=normalizeObject$1(operations);const normalizedOperations={};for(const[operationName,operation]of Object.entries(source)){const normalizedOperationName=normalizeText$3(operationName);if(!normalizedOperationName)continue;normalizedOperations[normalizedOperationName]=normalizeOperationDefinition(normalizedOperationName,operation,resourceMessages)}return Object.freeze(normalizedOperations)}function requireResourceNamespace(value,{context=`defineResource resource.namespace`}={}){const normalizedNamespace=normalizeText$3(value);if(!normalizedNamespace)throw new TypeError(`${context} requires a non-empty namespace.`);return normalizedNamespace}function defineResource(resource={}){const source=normalizeObject$1(resource);const normalizedMessages=Object.hasOwn(source,`messages`)?normalizeObject$1(source.messages):null;return deepFreeze({...source,namespace:requireResourceNamespace(source.namespace),...normalizedMessages?{messages:normalizedMessages}:{},operations:normalizeResourceOperations(source.operations,normalizedMessages)})}var MAX_INPUT_CHARS=8e3;var MAX_HISTORY_MESSAGES=20;var MAX_PAGE_SIZE=200;var MAX_MESSAGE_PAGE_SIZE=500;var attachmentIdsField={type:`array`,required:false,maxItems:10,items:{type:`string`,minLength:1,maxLength:256}};var historyMessageSchema=createSchema({attachmentIds:attachmentIdsField,role:{type:`string`,required:true,enum:[`user`,`assistant`]},content:{type:`string`,required:true,minLength:1,maxLength:MAX_INPUT_CHARS}});var clientContextSchema=createSchema({locale:{type:`string`,required:false,maxLength:64},timezone:{type:`string`,required:false,maxLength:64}});var chatStreamBodySchema=createSchema({attachmentIds:attachmentIdsField,integrationId:{type:`string`,required:false,minLength:1,maxLength:128},messageId:{type:`string`,required:true,minLength:1,maxLength:128},conversationId:{type:`string`,required:false,minLength:1,pattern:RECORD_ID_PATTERN},input:{type:`string`,required:true,minLength:1,maxLength:MAX_INPUT_CHARS},history:{type:`array`,required:false,maxItems:20,items:historyMessageSchema},clientContext:{type:`object`,required:false,schema:clientContextSchema}});var conversationsListQuerySchema=createSchema({cursor:{type:`id`,required:false},limit:{type:`number`,required:false,min:1,max:MAX_PAGE_SIZE},status:{type:`string`,required:false,minLength:1,maxLength:32}});var conversationRecordSchema=createSchema({id:{type:`string`,required:true,minLength:1,pattern:RECORD_ID_PATTERN},workspaceId:{type:`string`,required:true,nullable:true,minLength:1,pattern:RECORD_ID_PATTERN},title:{type:`string`,required:true},createdByUserId:{type:`string`,required:true,nullable:true,minLength:1,pattern:RECORD_ID_PATTERN},status:{type:`string`,required:true},provider:{type:`string`,required:true},model:{type:`string`,required:true},surfaceId:{type:`string`,required:true},startedAt:{type:`string`,required:true,minLength:1},endedAt:{type:`string`,required:true,nullable:true,minLength:1},messageCount:{type:`integer`,required:true,min:0},metadata:{type:`object`,required:true,additionalProperties:true},createdAt:{type:`string`,required:true,minLength:1},updatedAt:{type:`string`,required:true,minLength:1}});var messageRecordSchema=createSchema({id:{type:`string`,required:true,minLength:1,pattern:RECORD_ID_PATTERN},conversationId:{type:`string`,required:true,minLength:1,pattern:RECORD_ID_PATTERN},workspaceId:{type:`string`,required:true,nullable:true,minLength:1,pattern:RECORD_ID_PATTERN},seq:{type:`integer`,required:true,min:1},role:{type:`string`,required:true,minLength:1},kind:{type:`string`,required:true,minLength:1},clientMessageSid:{type:`string`,required:true},actorUserId:{type:`string`,required:true,nullable:true,minLength:1,pattern:RECORD_ID_PATTERN},contentText:{type:`string`,required:true,nullable:true},createdAt:{type:`string`,required:true,minLength:1},metadata:{type:`object`,required:true,additionalProperties:true}});var conversationMessagesParamsSchema=createSchema({conversationId:{type:`id`,required:true}});var conversationMessagesQuerySchema=createSchema({page:{type:`number`,required:false,min:1},pageSize:{type:`number`,required:false,min:1,max:500}});var conversationMessagesListOutputSchema=createSchema({page:{type:`integer`,required:true,min:1},pageSize:{type:`integer`,required:true,min:1},total:{type:`integer`,required:true,min:0},totalPages:{type:`integer`,required:true,min:1},conversation:{type:`object`,required:true,schema:conversationRecordSchema},entries:{type:`array`,required:true,items:messageRecordSchema}});var assistantConversationOutputValidator=createSchemaDefinition(conversationRecordSchema,`replace`);var assistantResource=defineResource({namespace:`assistant`,operations:{chatStream:{method:`POST`,body:chatStreamBodySchema},conversationsList:{method:`GET`,query:conversationsListQuerySchema,output:createCursorListValidator(createSchemaDefinition(conversationRecordSchema,`replace`))},conversationMessagesList:{method:`GET`,params:conversationMessagesParamsSchema,query:conversationMessagesQuerySchema,output:conversationMessagesListOutputSchema}}});function buildCrudOperationSchemaFields(fields={},operationName=``){const definitions={};for(const[fieldKey,fieldDefinition]of Object.entries(fields)){const operationConfig=fieldDefinition?.operations?.[operationName];if(!operationConfig)continue;const nextDefinition={...fieldDefinition};delete nextDefinition.operations;if(operationConfig!==true)Object.assign(nextDefinition,operationConfig);definitions[fieldKey]=nextDefinition}return definitions}function normalizeCrudNamespace(value=``){return normalizeText$3(value).toLowerCase().replace(/[^a-z0-9-]+/g,`-`).replace(/-+/g,`-`).replace(/^-+|-+$/g,``)}function requireCrudNamespace(namespace,{context=`requireCrudNamespace`}={}){const normalizedNamespace=normalizeCrudNamespace(namespace);if(!normalizedNamespace)throw new TypeError(`${context} requires a non-empty namespace.`);return normalizedNamespace}function resolveCrudRecordChangedEvent(namespace=``){return`${requireCrudNamespace(namespace,{context:`resolveCrudRecordChangedEvent`}).replace(/-/g,`_`)}.record.changed`}var DEFAULT_CRUD_OPERATION_NAMES=Object.freeze([`list`,`view`,`create`,`patch`,`delete`]);var SUPPORTED_CRUD_OPERATION_NAMES=Object.freeze([`list`,`view`,`create`,`replace`,`patch`,`delete`]);var CRUD_OPERATION_SPECS=deepFreeze({list:{method:`GET`,outputKind:`list`,includeRealtimeEvent:true},view:{method:`GET`,outputKind:`record`},create:{method:`POST`,outputKind:`record`,bodyOperation:`create`,bodyMode:`create`,explicitBodyKeys:[`createBody`,`body`]},replace:{method:`PUT`,outputKind:`record`,bodyOperation:`replace`,bodyMode:`replace`,explicitBodyKeys:[`replaceBody`,`body`,`createBody`]},patch:{method:`PATCH`,outputKind:`record`,bodyOperation:`patch`,bodyMode:`patch`,explicitBodyKeys:[`patchBody`,`body`]},delete:{method:`DELETE`,outputKind:`delete`}});function createCrudRecordIdFieldDefinition(){return{type:`string`,required:true,minLength:1,pattern:RECORD_ID_PATTERN}}function resolveCrudLookupContainerKey(resource={}){return normalizeText$3(resource?.contract?.lookup?.containerKey)}function resolveFieldEntries(resource={},operationName=`output`){return buildCrudOperationSchemaFields(resource?.schema,operationName)}function createDerivedCrudRecordOutputDefinition(resource={}){const outputFields=resolveFieldEntries(resource,`output`);if(Object.keys(outputFields).length<1)throw new Error(`defineCrudResource derived output requires explicit crud.output or at least one schema field with operations.output.`);const fields={id:createCrudRecordIdFieldDefinition(),...outputFields};const lookupContainerKey=resolveCrudLookupContainerKey(resource);if(lookupContainerKey)fields[lookupContainerKey]={type:`object`,required:false};return createSchemaDefinition(createSchema(fields),`replace`,{context:`defineCrudResource derived output`})}function createDerivedCrudBodyDefinition(resource={},operationName=`patch`){let fields=resolveFieldEntries(resource,operationName);if(operationName===`replace`&&Object.keys(fields).length===0)fields=resolveFieldEntries(resource,`create`);if(Object.keys(fields).length<1){const fieldHint=operationName===`replace`?`operations.replace or operations.create`:`operations.${operationName}`;throw new Error(`defineCrudResource derived ${operationName} body requires explicit crud.${operationName}Body or at least one schema field with ${fieldHint}.`)}const defaultMode=operationName===`create`?`create`:operationName===`replace`?`replace`:`patch`;return createSchemaDefinition(createSchema(fields),defaultMode,{context:`defineCrudResource derived ${operationName} body`})}function createCrudDeleteOutputDefinition(){return createSchemaDefinition(createSchema({id:createCrudRecordIdFieldDefinition(),deleted:{type:`boolean`,required:true}}),`replace`,{context:`defineCrudResource delete output`})}function requireCrudOperationName(value=``,{context=`crud operation name`}={}){const normalizedName=normalizeText$3(value).toLowerCase();if(SUPPORTED_CRUD_OPERATION_NAMES.includes(normalizedName))return normalizedName;throw new Error(`${context} must be one of: ${SUPPORTED_CRUD_OPERATION_NAMES.join(`, `)}. Received: ${JSON.stringify(value)}.`)}function requireCrudOperationSpec(operationName=``){const spec=CRUD_OPERATION_SPECS[operationName];if(spec)return spec;throw new Error(`createCrudOperationDefinition received unsupported operation "${operationName}".`)}function resolveCrudOperationNames(resource={}){const hasConfiguredOperations=Array.isArray(resource?.crudOperations);const configuredOperations=hasConfiguredOperations?resource.crudOperations:DEFAULT_CRUD_OPERATION_NAMES;const names=[];const seen=new Set;for(const rawName of configuredOperations){const operationName=requireCrudOperationName(rawName,{context:`defineCrudResource crudOperations`});if(seen.has(operationName))continue;seen.add(operationName);names.push(operationName)}if(hasConfiguredOperations)return names;return names.length>0?names:[...DEFAULT_CRUD_OPERATION_NAMES]}function resolveFirstPresentValue(source={},keys=[]){for(const key of Array.isArray(keys)?keys:[])if(Object.hasOwn(source,key)&&source[key]!=null)return source[key];return null}function resolveExplicitCrudSchemaDefinition(crudConfig={},keys=[],{context=`defineCrudResource schema definition`,defaultMode=`patch`}={}){const explicitValue=resolveFirstPresentValue(crudConfig,keys);if(explicitValue==null)return null;return normalizeSchemaDefinitionLike(explicitValue,{context,defaultMode})}function createCrudListOutputDefinition(resolveRecordOutputDefinition,crudConfig={}){const explicitListOutput=resolveExplicitCrudSchemaDefinition(crudConfig,[`listOutput`],{context:`defineCrudResource crud.listOutput`,defaultMode:`replace`});if(explicitListOutput)return explicitListOutput;const explicitListItemOutput=resolveExplicitCrudSchemaDefinition(crudConfig,[`listItemOutput`],{context:`defineCrudResource crud.listItemOutput`,defaultMode:`replace`});if(explicitListItemOutput)return createCursorListValidator(explicitListItemOutput);return createCursorListValidator(resolveRecordOutputDefinition())}function createCrudRecordOutputDefinitionResolver(resource={},crudConfig={}){let cachedDefinition=null;let hasResolved=false;return function resolveRecordOutputDefinition(){if(hasResolved)return cachedDefinition;cachedDefinition=resolveExplicitCrudSchemaDefinition(crudConfig,[`output`],{context:`defineCrudResource crud.output`,defaultMode:`replace`})||createDerivedCrudRecordOutputDefinition(resource);hasResolved=true;return cachedDefinition}}function resolveCrudBodyDefinition(spec,resource={},crudConfig={}){const explicitBody=resolveExplicitCrudSchemaDefinition(crudConfig,spec.explicitBodyKeys,{context:`defineCrudResource operations.${spec.bodyOperation}.body`,defaultMode:spec.bodyMode});if(explicitBody)return explicitBody;return createDerivedCrudBodyDefinition(resource,spec.bodyOperation)}function resolveCrudOutputDefinition(spec,resolveRecordOutputDefinition,crudConfig={}){if(spec.outputKind===`list`)return createCrudListOutputDefinition(resolveRecordOutputDefinition,crudConfig);if(spec.outputKind===`record`)return resolveRecordOutputDefinition();if(spec.outputKind===`delete`)return resolveExplicitCrudSchemaDefinition(crudConfig,[`deleteOutput`],{context:`defineCrudResource operations.delete.output`,defaultMode:`replace`})||createCrudDeleteOutputDefinition();throw new Error(`resolveCrudOutputDefinition received unsupported output kind "${spec.outputKind}".`)}function createCrudOperationDefinition(operationName,{namespace=``,resource={},crudConfig={},resolveRecordOutputDefinition}={}){const spec=requireCrudOperationSpec(operationName);const nextOperation={method:spec.method};if(spec.includeRealtimeEvent)nextOperation.realtime={events:[resolveCrudRecordChangedEvent(namespace)]};if(spec.bodyOperation)nextOperation.body=resolveCrudBodyDefinition(spec,resource,crudConfig);nextOperation.output=resolveCrudOutputDefinition(spec,resolveRecordOutputDefinition,crudConfig);return nextOperation}function createDefaultCrudOperations(resource={}){const namespace=requireCrudNamespace(resource?.namespace,{context:`createDefaultCrudOperations resource.namespace`});const crudConfig=normalizeObject$1(resource?.crud);const resolveRecordOutputDefinition=createCrudRecordOutputDefinitionResolver(resource,crudConfig);const operations={};for(const operationName of resolveCrudOperationNames(resource))operations[operationName]=createCrudOperationDefinition(operationName,{namespace,resource,crudConfig,resolveRecordOutputDefinition});return operations}function mergeCrudOperationDefinition(baseDefinition,overrideDefinition){const normalizedBase=normalizeObject$1(baseDefinition);const normalizedOverride=normalizeObject$1(overrideDefinition);const mergedRealtime={...normalizeObject$1(normalizedBase.realtime),...normalizeObject$1(normalizedOverride.realtime)};return{...normalizedBase,...normalizedOverride,...Object.keys(mergedRealtime).length>0?{realtime:mergedRealtime}:{}}}function mergeCrudOperations(defaultOperations={},overrides={}){const baseEntries=normalizeObject$1(defaultOperations);const overrideEntries=normalizeObject$1(overrides);const merged={};for(const[operationName,baseDefinition]of Object.entries(baseEntries))merged[operationName]=mergeCrudOperationDefinition(baseDefinition,overrideEntries[operationName]);for(const[operationName,overrideDefinition]of Object.entries(overrideEntries)){if(Object.hasOwn(merged,operationName))continue;merged[operationName]=overrideDefinition}return merged}function defineCrudResource(resource={}){const source=normalizeObject$1(resource);const{crud:_crudConfig,crudOperations:_crudOperations,...authoredResource}=source;return defineResource({...authoredResource,operations:mergeCrudOperations(createDefaultCrudOperations(source),authoredResource.operations)})}var MAX_SYSTEM_PROMPT_CHARS=12e3;var assistantConfigRecordSchema=createSchema({targetSurfaceId:{type:`string`,required:true,minLength:1,maxLength:64},scopeKey:{type:`string`,required:true,minLength:1,maxLength:160},workspaceId:{type:`string`,required:true,nullable:true,minLength:1,pattern:RECORD_ID_PATTERN},settings:{type:`object`,required:true,schema:createSchema({systemPrompt:{type:`string`,required:true,maxLength:MAX_SYSTEM_PROMPT_CHARS}})}});var assistantConfigPatchSchema=createSchema({systemPrompt:{type:`string`,required:false,maxLength:MAX_SYSTEM_PROMPT_CHARS,messages:{maxLength:`Assistant system prompt must be at most ${MAX_SYSTEM_PROMPT_CHARS} characters.`,default:`Assistant system prompt must be valid text.`}}});var assistantConfigResource=defineCrudResource({namespace:`assistantConfig`,crudOperations:[`view`,`patch`],crud:{output:assistantConfigRecordSchema,patchBody:assistantConfigPatchSchema}});var ASSISTANT_SETTINGS_TRANSPORT=deepFreeze({kind:`jsonapi-resource`,responseType:`assistant-settings`,responseKind:`record`});var ASSISTANT_SETTINGS_UPDATE_TRANSPORT=deepFreeze({...ASSISTANT_SETTINGS_TRANSPORT,requestType:`assistant-settings`});var ASSISTANT_CONVERSATIONS_TRANSPORT=deepFreeze({kind:`jsonapi-resource`,responseType:`assistant-conversations`,responseKind:`collection`});var ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT=deepFreeze({kind:`jsonapi-resource`,responseType:`assistant-conversation-messages`,responseKind:`record`});var assistantSettingsEvents=Object.freeze({settingsChanged:`assistant.settings.changed`});var ASSISTANT_CONVERSATION_STATUSES=Object.freeze([`active`,`completed`,`failed`,`aborted`]);var ASSISTANT_CONVERSATION_STATUS_SET=new Set(ASSISTANT_CONVERSATION_STATUSES);function normalizeConversationStatus$1(value,{fallback=``}={}){const normalized=normalizeText$3(value).toLowerCase();if(ASSISTANT_CONVERSATION_STATUS_SET.has(normalized))return normalized;return normalizeText$3(fallback).toLowerCase()}function parseJsonObject(value){if(value==null)return{};try{const parsed=typeof value===`string`?JSON.parse(value):value;if(!parsed||typeof parsed!==`object`||Array.isArray(parsed))return{};return parsed}catch{return{}}}function toPositiveInteger(value,fallback=0){return normalizePositiveInteger$1(value,{fallback})}var MAX_PROGRESS_ONLY_TEXT_CHARS=600;var PROGRESS_SENTENCE_PATTERNS=Object.freeze([/^(?:let me|i(?:'|’)ll|i will|i(?:'|’)m going to|i am going to)\s+(?:(?:first|now|quickly)\s+)*(?:analy[sz]e|call|check|confirm|do|execute|fetch|find|inspect|investigate|load|look up|open|prepare|query|read|retrieve|review|run|search|summarize|test|try|use|verify)\b/iu,/^(?:analy[sz]ing|calling|checking|confirming|executing|fetching|finding|inspecting|investigating|loading|looking up|opening|preparing|querying|reading|retrieving|reviewing|running|searching|summarizing|testing|trying|using|verifying)\b/iu,/^(?:one moment|please wait)\b/iu]);function isAssistantProgressOnlyText(value){const text=String(value||``).replace(/\s+/gu,` `).trim().replace(/^(?:okay|sure)[,;:!\s—-]+/iu,``);if(!text||text.length>MAX_PROGRESS_ONLY_TEXT_CHARS)return false;const sentences=text.split(/(?<=[.!?…])\s+/u).map(sentence=>sentence.trim()).filter(Boolean);return sentences.length>0&&sentences.every(sentence=>PROGRESS_SENTENCE_PATTERNS.some(pattern=>pattern.test(sentence)))}function buildStreamEventError(event){const message=String(event?.message||`Assistant request failed.`);const error=new Error(message);error.code=String(event?.code||`assistant_stream_error`);error.status=Number(event?.status||500);error.event=event&&typeof event===`object`?{...event}:null;return error}function appendQueryParam(params,key,value){if(value==null)return;const normalized=String(value).trim();if(!normalized)return;params.set(key,normalized)}function createAssistantQueryParams(query={},transport=null){const params=new URLSearchParams;const encodedQuery=encodeJsonApiResourceQueryObject(query,{responseType:transport?.responseType});for(const[key,value]of Object.entries(encodedQuery))appendQueryParam(params,key,value);return params}function normalizeSurfaceHeaderValue(value){return String(value||``).trim().toLowerCase()}function resolveAssistantRequestHeaders(resolveSurfaceId){if(typeof resolveSurfaceId!==`function`)return null;const surfaceId=normalizeSurfaceHeaderValue(resolveSurfaceId());if(!surfaceId)return null;return{"x-jskit-surface":surfaceId}}function resolveRequiredBasePath(resolveBasePath){if(typeof resolveBasePath!==`function`)throw new Error(`createAssistantApi requires resolveBasePath().`);const resolved=String(resolveBasePath()||``).trim();if(!resolved)throw new Error(`Assistant API base path is required.`);return resolved}function createAssistantApi({request,requestStream,resolveBasePath,resolveSurfaceId=null}={}){if(typeof request!==`function`)throw new Error(`createAssistantApi requires request().`);function requestConversation(conversationId,suffix,options){const basePath=resolveRequiredBasePath(resolveBasePath);const encodedId=encodeURIComponent(String(conversationId||``).trim());const headers=resolveAssistantRequestHeaders(resolveSurfaceId);return request(`${basePath}/conversations/${encodedId}${suffix}`,{...options,...headers?{headers}:{}})}return Object.freeze({readConversation(conversationId,{signal,beforeTurnId,limit}={}){const params=new URLSearchParams;appendQueryParam(params,`beforeTurnId`,beforeTurnId);appendQueryParam(params,`limit`,limit);return requestConversation(conversationId,params.size?`?${params}`:``,{method:`GET`,signal})},sendConversationMessage(conversationId,payload,{signal}={}){return requestConversation(conversationId,`/messages`,{method:`POST`,signal,body:{messageId:payload.messageId,text:payload.text,...Object.hasOwn(payload,`data`)?{data:payload.data}:{},...Object.hasOwn(payload,`attachmentIds`)?{attachmentIds:payload.attachmentIds}:{},...Object.hasOwn(payload,`steer`)?{steer:payload.steer}:{}}})},cancelConversation(conversationId,{signal}={}){return requestConversation(conversationId,`/cancel`,{method:`POST`,signal})},inspectConversationDelivery(conversationId,messageId,{signal}={}){return requestConversation(conversationId,`/deliveries/${encodeURIComponent(String(messageId||``).trim())}/inspect`,{method:`POST`,signal})},readConversationGoal(conversationId,{signal}={}){return requestConversation(conversationId,`/goal`,{method:`GET`,signal})},updateConversationGoal(conversationId,payload,{signal}={}){const body={};for(const key of[`action`,`expectedSegmentId`,`expectedGoalId`,`messageId`,`objective`,`tokenBudget`,`attachmentIds`])if(Object.hasOwn(payload,key))body[key]=payload[key];return requestConversation(conversationId,`/goal`,{method:`POST`,signal,body})},configureConversation(conversationId,configuration,{signal}={}){return requestConversation(conversationId,`/configuration`,{method:`PATCH`,signal,body:{configuration}})},selectConversation(conversationId,selection,{signal}={}){return requestConversation(conversationId,`/selection`,{method:`POST`,signal,body:{selection}})},replaceConversation(conversationId,replacement,{signal}={}){return requestConversation(conversationId,`/replacement`,{method:`POST`,signal,body:{replacement}})},async streamChat(payload,{signal,onEvent,onMalformedLine,rejectOnErrorEvent=true}={}){if(typeof requestStream!==`function`)throw new TypeError(`streamChat requires requestStream().`);const basePath=resolveRequiredBasePath(resolveBasePath);let streamEventError=null;const requestHeaders=resolveAssistantRequestHeaders(resolveSurfaceId);const streamHandlers={onEvent(event){const eventType=normalizeAssistantStreamEventType(event?.type,``);if(rejectOnErrorEvent&&eventType===ASSISTANT_STREAM_EVENT_TYPES.ERROR&&!streamEventError)streamEventError=buildStreamEventError(event);if(typeof onEvent===`function`)onEvent(event)}};if(typeof onMalformedLine===`function`)streamHandlers.onMalformedLine=(line,parseError)=>{onMalformedLine(line,parseError)};await requestStream(`${basePath}/chat/stream`,{method:`POST`,...requestHeaders?{headers:requestHeaders}:{},body:payload,signal},streamHandlers);if(streamEventError)throw streamEventError},listConversations(query={}){const basePath=resolveRequiredBasePath(resolveBasePath);const params=createAssistantQueryParams(query,ASSISTANT_CONVERSATIONS_TRANSPORT);const requestHeaders=resolveAssistantRequestHeaders(resolveSurfaceId);return request(appendQueryString(`${basePath}/conversations`,params.toString()),{...requestHeaders?{headers:requestHeaders}:{},transport:ASSISTANT_CONVERSATIONS_TRANSPORT})},getConversationMessages(conversationId,query={}){const basePath=resolveRequiredBasePath(resolveBasePath);const encodedConversationId=encodeURIComponent(String(conversationId||``).trim());const params=createAssistantQueryParams(query,ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT);const requestHeaders=resolveAssistantRequestHeaders(resolveSurfaceId);return request(appendQueryString(`${basePath}/conversations/${encodedConversationId}/messages`,params.toString()),{...requestHeaders?{headers:requestHeaders}:{},transport:ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT})},getSettings(){const basePath=resolveRequiredBasePath(resolveBasePath);const requestHeaders=resolveAssistantRequestHeaders(resolveSurfaceId);return request(`${basePath}/settings`,{...requestHeaders?{headers:requestHeaders}:{},transport:ASSISTANT_SETTINGS_TRANSPORT})},updateSettings(payload={}){const basePath=resolveRequiredBasePath(resolveBasePath);const requestHeaders=resolveAssistantRequestHeaders(resolveSurfaceId);return request(`${basePath}/settings`,{method:`PATCH`,...requestHeaders?{headers:requestHeaders}:{},body:payload,transport:ASSISTANT_SETTINGS_UPDATE_TRANSPORT})}})}var client_exports$9=__exportAll({AssistantSettingsFormCard:()=>_sfc_main$48,assistantHttpClient:()=>assistantHttpClient,buildStreamEventError:()=>buildStreamEventError,createAssistantApi:()=>createAssistantApi});var CLIENT_APP_CONFIG_GLOBAL_KEY=`__JSKIT_CLIENT_APP_CONFIG__`;var EMPTY_CLIENT_APP_CONFIG=Object.freeze({});function normalizeClientAppConfig(source={}){if(!isRecord$2(source))return EMPTY_CLIENT_APP_CONFIG;return Object.freeze({...source})}function setClientAppConfig(source={}){const appConfig=normalizeClientAppConfig(source);if(typeof globalThis===`object`&&globalThis)globalThis[CLIENT_APP_CONFIG_GLOBAL_KEY]=appConfig;return appConfig}function getClientAppConfig(){if(typeof globalThis!==`object`||!globalThis)return EMPTY_CLIENT_APP_CONFIG;const appConfig=globalThis[CLIENT_APP_CONFIG_GLOBAL_KEY];return isRecord$2(appConfig)?appConfig:EMPTY_CLIENT_APP_CONFIG}function resolveMobileConfig(appConfig=getClientAppConfig()){return normalizeMobileConfig(isRecord$2(appConfig)?appConfig.mobile:{})}function uniqueSurfaceIds(ids){const seen=new Set;const ordered=[];for(const id of ids){const normalizedId=normalizeSurfaceId$1(id);if(!normalizedId||seen.has(normalizedId))continue;seen.add(normalizedId);ordered.push(normalizedId)}return ordered}function resolveSurfaceIds({surfaces={}}={}){const surfaceCandidates=[];for(const[key,value]of Object.entries(isRecord$2(surfaces)?surfaces:{})){const record=isRecord$2(value)?value:{};surfaceCandidates.push(record.id||key)}const fromSurfaces=uniqueSurfaceIds(surfaceCandidates);if(fromSurfaces.length>0)return fromSurfaces;throw new Error(`createSurfaceRuntime requires at least one surface id.`)}function normalizeRoutePath(pathLike=``){const rawPath=String(pathLike||``).trim();if(!rawPath||rawPath===`/`)return`/`;const compacted=(rawPath.startsWith(`/`)?rawPath:`/${rawPath}`).replace(/\/{2,}/g,`/`);if(compacted===`/`)return`/`;return compacted.replace(/\/+$/,``)||`/`}function resolveAbsoluteRoutePath(parentAbsolutePath=`/`,routePath=``){const normalizedParentPath=normalizeRoutePath(parentAbsolutePath);const rawRoutePath=String(routePath||``).trim();if(!rawRoutePath)return normalizedParentPath;if(rawRoutePath.startsWith(`/`))return normalizeRoutePath(rawRoutePath);if(normalizedParentPath===`/`)return normalizeRoutePath(`/${rawRoutePath}`);return normalizeRoutePath(`${normalizedParentPath}/${rawRoutePath}`)}function readRouteJskitMeta(route){if(!isRecord$2(route)||!isRecord$2(route.meta)||!isRecord$2(route.meta.jskit))return{};return route.meta.jskit}function resolveRouteExplicitSurface(route){const metaSurface=readRouteJskitMeta(route).surface;return normalizeSurfaceId$1(route?.surface||metaSurface)}function resolveOwnRouteScope(route){const metaScope=readRouteJskitMeta(route).scope;const normalizedScope=String(route?.scope||metaScope||``).trim().toLowerCase();if(!normalizedScope)return``;return normalizedScope===`global`?`global`:`surface`}function resolveRouteSurface(route,inheritedSurfaceId=``,{surfaceRuntime,absolutePath=`/`}={}){const explicitSurface=resolveRouteExplicitSurface(route);if(explicitSurface)return explicitSurface;const normalizedInheritedSurface=normalizeSurfaceId$1(inheritedSurfaceId);if(normalizedInheritedSurface)return normalizedInheritedSurface;const routePath=String(route?.path||``).trim();if(routePath&&routePath.startsWith(`/`))return surfaceRuntime.resolveSurfaceFromPathname(routePath);if(absolutePath)return surfaceRuntime.resolveSurfaceFromPathname(absolutePath);return surfaceRuntime.DEFAULT_SURFACE_ID}function normalizeRoutesBySurfaceBoundaries(routeList=[],{surfaceRuntime}={}){const normalizedRoutes=Array.isArray(routeList)?routeList:[];const hoistedRoutes=[];function cloneRouteWithChildren(route,children){const nextRoute={...route};if(children.length>0)nextRoute.children=children;else if(Object.prototype.hasOwnProperty.call(nextRoute,`children`))delete nextRoute.children;return nextRoute}function cloneRouteAsHoisted(route,absolutePath,children){const nextRoute=cloneRouteWithChildren(route,children);nextRoute.path=absolutePath;return nextRoute}function visitRoute(route,parentSurfaceId=``,parentAbsolutePath=`/`){if(!isRecord$2(route))return null;const absolutePath=resolveAbsoluteRoutePath(parentAbsolutePath,route.path);const explicitSurface=resolveRouteExplicitSurface(route);const normalizedParentSurfaceId=normalizeSurfaceId$1(parentSurfaceId);const resolvedSurface=resolveRouteSurface(route,normalizedParentSurfaceId,{surfaceRuntime,absolutePath});const surfaceBoundary=Boolean(explicitSurface)&&Boolean(normalizedParentSurfaceId)&&explicitSurface!==normalizedParentSurfaceId;const children=Array.isArray(route.children)?route.children:[];const filteredChildren=[];for(const child of children){const normalizedChild=visitRoute(child,resolvedSurface,absolutePath);if(normalizedChild)filteredChildren.push(normalizedChild)}const routeWithChildren=children.length!==filteredChildren.length||filteredChildren.some((child,index)=>child!==children[index])?cloneRouteWithChildren(route,filteredChildren):route;if(!surfaceBoundary)return routeWithChildren;hoistedRoutes.push(cloneRouteAsHoisted(routeWithChildren,absolutePath,filteredChildren));return null}const keptRoutes=[];for(const route of normalizedRoutes){const normalizedRoute=visitRoute(route,``,`/`);if(normalizedRoute)keptRoutes.push(normalizedRoute)}return[...keptRoutes,...hoistedRoutes]}function createSurfaceRuntime(options={}){const allMode=normalizeSurfaceId$1(options?.allMode||`all`)||`all`;const sourceSurfaces=isRecord$2(options?.surfaces)?options.surfaces:{};const surfaceIds=resolveSurfaceIds({surfaces:sourceSurfaces});const normalizedSurfaces={};for(const surfaceId of surfaceIds){const source=isRecord$2(sourceSurfaces[surfaceId])?sourceSurfaces[surfaceId]:{};if(!Object.prototype.hasOwnProperty.call(source,`pagesRoot`))throw new Error(`Surface "${surfaceId}" requires pagesRoot (use "" for root).`);const pagesRoot=normalizeSurfacePagesRoot(source.pagesRoot);normalizedSurfaces[surfaceId]={...source,id:surfaceId,pagesRoot,routeBase:deriveSurfaceRouteBaseFromPagesRoot(pagesRoot),enabled:source.enabled!==false}}const defaultSurfaceId=normalizeSurfaceId$1(options?.defaultSurfaceId)||surfaceIds[0];const registry=createSurfaceRegistry({surfaces:normalizedSurfaces,defaultSurfaceId});const pathHelpers=createSurfacePathHelpers({apiBasePath:String(options?.apiBasePath||`/api`),defaultSurfaceId:registry.DEFAULT_SURFACE_ID,normalizeSurfaceId:registry.normalizeSurfaceId,resolveSurfaceRouteBase:registry.resolveSurfaceRouteBase,listSurfaceDefinitions:registry.listSurfaceDefinitions,routes:options?.routes});const enabledSurfaceIds=surfaceIds.filter(surfaceId=>normalizedSurfaces[surfaceId]?.enabled!==false);const defaultSurfaceSource=isRecord$2(normalizedSurfaces[registry.DEFAULT_SURFACE_ID])?normalizedSurfaces[registry.DEFAULT_SURFACE_ID]:{};const defaultSurfaceDefinition=Object.freeze({...defaultSurfaceSource});function normalizeSurfaceMode(value){const normalized=normalizeSurfaceId$1(value);if(!normalized||normalized===allMode)return allMode;return registry.SURFACE_REGISTRY[normalized]?normalized:allMode}function listEnabledSurfaceIds(){return[...enabledSurfaceIds]}function getSurfaceDefinition(surfaceId){const normalizedSurfaceId=normalizeSurfaceId$1(surfaceId);const definition=normalizedSurfaces[normalizedSurfaceId];if(!definition)return null;return Object.freeze({...definition})}function listSurfaceDefinitions({enabledOnly=false}={}){const ids=enabledOnly?enabledSurfaceIds:surfaceIds;const definitions=[];for(const surfaceId of ids){const source=isRecord$2(normalizedSurfaces[surfaceId])?normalizedSurfaces[surfaceId]:{};definitions.push(Object.freeze({...source}))}return definitions}function isSurfaceEnabled(surfaceId){const normalizedSurface=normalizeSurfaceMode(surfaceId);if(normalizedSurface===allMode)return false;return enabledSurfaceIds.includes(normalizedSurface)}return{SURFACE_MODE_ALL:allMode,SURFACE_IDS:[...surfaceIds],DEFAULT_SURFACE_ID:registry.DEFAULT_SURFACE_ID,DEFAULT_SURFACE:defaultSurfaceDefinition,normalizeSurfaceMode,resolveSurfaceFromPathname:pathHelpers.resolveSurfaceFromPathname,getSurfaceDefinition,listSurfaceDefinitions,listEnabledSurfaceIds,isSurfaceEnabled}}function filterRoutesBySurface(routeList,{surfaceRuntime,surfaceMode}={}){if(!surfaceRuntime||typeof surfaceRuntime!==`object`)throw new Error(`filterRoutesBySurface requires surfaceRuntime.`);if(typeof surfaceRuntime.normalizeSurfaceMode!==`function`)throw new Error(`filterRoutesBySurface requires surfaceRuntime.normalizeSurfaceMode().`);if(typeof surfaceRuntime.resolveSurfaceFromPathname!==`function`)throw new Error(`filterRoutesBySurface requires surfaceRuntime.resolveSurfaceFromPathname().`);if(typeof surfaceRuntime.listEnabledSurfaceIds!==`function`)throw new Error(`filterRoutesBySurface requires surfaceRuntime.listEnabledSurfaceIds().`);const normalizedRoutes=normalizeRoutesBySurfaceBoundaries(routeList,{surfaceRuntime});const allMode=String(surfaceRuntime.SURFACE_MODE_ALL||`all`).trim().toLowerCase()||`all`;const normalizedMode=surfaceRuntime.normalizeSurfaceMode(surfaceMode);const enabledSurfaces=new Set(surfaceRuntime.listEnabledSurfaceIds());function filterRouteNode(route,inheritedSurfaceId=``){if(!isRecord$2(route))return null;const resolvedSurface=resolveRouteSurface(route,inheritedSurfaceId,{surfaceRuntime,absolutePath:String(route.path||`/`)});const isGlobalScope=resolveOwnRouteScope(route)===`global`;const isEnabledSurfaceRoute=enabledSurfaces.has(resolvedSurface);const ownIncluded=isGlobalScope||isEnabledSurfaceRoute&&(normalizedMode===allMode||resolvedSurface===normalizedMode);const children=Array.isArray(route.children)?route.children:[];const filteredChildren=children.map(child=>filterRouteNode(child,resolvedSurface)).filter(Boolean);if(!ownIncluded&&filteredChildren.length<1)return null;if(children.length<1)return route;return{...route,children:filteredChildren}}return normalizedRoutes.map(route=>filterRouteNode(route)).filter(Boolean)}var DEFAULT_GUARD_EVALUATOR_KEY=`__JSKIT_WEB_SHELL_GUARD_EVALUATOR__`;var WEB_ROOT_ALLOW_YES=`yes`;var WEB_ROOT_ALLOW_NO=`no`;function createFallbackNotFoundRoute(component){if(!component)throw new Error(`createFallbackNotFoundRoute requires a component.`);return Object.freeze({path:`/:pathMatch(.*)*`,name:`not-found`,component,meta:{jskit:{scope:`global`}}})}function buildSurfaceAwareRoutes({routes=[],surfaceRuntime,surfaceMode,fallbackRoute,notFoundComponent}={}){const effectiveFallback=fallbackRoute||(notFoundComponent?createFallbackNotFoundRoute(notFoundComponent):null);if(!effectiveFallback)throw new TypeError(`buildSurfaceAwareRoutes requires fallbackRoute or notFoundComponent.`);return filterRoutesBySurface([...routes,effectiveFallback],{surfaceRuntime,surfaceMode})}function normalizeGuardPolicy(value){return String(value||``).trim().toLowerCase()}function resolveRouteGuardFromMeta(meta){if(!meta||typeof meta!==`object`||Array.isArray(meta))return null;if(meta.guard&&typeof meta.guard===`object`&&!Array.isArray(meta.guard))return meta.guard;if(meta.jskit&&typeof meta.jskit===`object`&&!Array.isArray(meta.jskit)){const jskitGuard=meta.jskit.guard;if(jskitGuard&&typeof jskitGuard===`object`&&!Array.isArray(jskitGuard))return jskitGuard}return null}function resolveRouteGuard(to){const matched=Array.isArray(to?.matched)?to.matched:[];for(let index=matched.length-1;index>=0;index-=1){const routeRecord=matched[index]&&typeof matched[index]===`object`?matched[index]:null;if(!routeRecord)continue;if(routeRecord.guard&&typeof routeRecord.guard===`object`&&!Array.isArray(routeRecord.guard))return routeRecord.guard;const metaGuard=resolveRouteGuardFromMeta(routeRecord.meta);if(metaGuard)return metaGuard}return null}function resolveSearchFromFullPath(fullPath){const rawFullPath=String(fullPath||``).trim();const queryStart=rawFullPath.indexOf(`?`);if(queryStart<0)return``;const hashStart=rawFullPath.indexOf(`#`,queryStart);return hashStart<0?rawFullPath.slice(queryStart):rawFullPath.slice(queryStart,hashStart)}function resolveSurfaceDefinition(surfaceDefinitions,surfaceId){const normalizedSurfaceId=String(surfaceId||``).trim().toLowerCase();if(!normalizedSurfaceId)return null;const definition=surfaceDefinitions[normalizedSurfaceId];if(!definition||typeof definition!==`object`)return null;return definition}function normalizeWebRootAllowed(value){const normalizedValue=String(value||``).trim().toLowerCase();if(normalizedValue===`yes`||normalizedValue===`no`)return normalizedValue;return`yes`}function resolveDefaultSurfaceRootPath({surfaceDefinitions,defaultSurfaceId}){const defaultSurface=resolveSurfaceDefinition(surfaceDefinitions,defaultSurfaceId);return String(defaultSurface?.routeBase||deriveSurfaceRouteBaseFromPagesRoot(defaultSurface?.pagesRoot||``)).trim()||`/`}function resolveSurfaceRequiresAuth({pathname,surfaceRuntime,surfaceDefinitions}){const normalizedPathname=String(pathname||`/`).trim()||`/`;const surfaceDefinition=resolveSurfaceDefinition(surfaceDefinitions,surfaceRuntime.resolveSurfaceFromPathname(normalizedPathname));return Boolean(surfaceDefinition?.requiresAuth)}function resolveEffectiveRouteGuard({to,surfaceRuntime,surfaceDefinitions,authenticatedPolicy=AUTH_POLICY_AUTHENTICATED,publicPolicy=AUTH_POLICY_PUBLIC}){const routePolicy=normalizeGuardPolicy(resolveRouteGuard(to)?.policy);if(routePolicy)return{policy:routePolicy};if(resolveSurfaceRequiresAuth({pathname:to?.path||`/`,surfaceRuntime,surfaceDefinitions}))return{policy:authenticatedPolicy};return{policy:publicPolicy}}function resolveGuardEvaluator(guardEvaluatorKey){if(typeof globalThis!==`object`||!globalThis)return null;const evaluator=globalThis[guardEvaluatorKey];if(typeof evaluator!==`function`)return null;return evaluator}function normalizeGuardOutcome(outcome){if(outcome===false)return{allow:false,redirectTo:``,reason:``};if(outcome==null||outcome===true||typeof outcome!==`object`||Array.isArray(outcome))return{allow:true,redirectTo:``,reason:``};return{allow:outcome.allow!==false,redirectTo:String(outcome.redirectTo||``).trim(),reason:String(outcome.reason||``).trim()}}function evaluateShellGuard({guard,to,guardEvaluatorKey}){const evaluator=resolveGuardEvaluator(guardEvaluatorKey);if(!evaluator)return{allow:true,redirectTo:``,reason:``};const pathname=String(to?.path||`/`).trim()||`/`;const search=resolveSearchFromFullPath(to?.fullPath||``);try{return normalizeGuardOutcome(evaluator({guard,phase:`route`,context:{to,location:{pathname,search}}}))}catch{return{allow:false,redirectTo:``,reason:`guard-evaluator-error`}}}function createShellBeforeEachGuard({surfaceRuntime,surfaceDefinitions,defaultSurfaceId,webRootAllowed=`yes`,guardEvaluatorKey=DEFAULT_GUARD_EVALUATOR_KEY,authenticatedPolicy=AUTH_POLICY_AUTHENTICATED,publicPolicy=AUTH_POLICY_PUBLIC}={}){if(!surfaceRuntime||typeof surfaceRuntime.resolveSurfaceFromPathname!==`function`)throw new TypeError(`createShellBeforeEachGuard requires surfaceRuntime.resolveSurfaceFromPathname().`);if(!surfaceDefinitions||typeof surfaceDefinitions!==`object`||Array.isArray(surfaceDefinitions))throw new TypeError(`createShellBeforeEachGuard requires a surfaceDefinitions object.`);return to=>{const normalizedWebRootAllowed=normalizeWebRootAllowed(webRootAllowed);const defaultSurfaceRootPath=resolveDefaultSurfaceRootPath({surfaceDefinitions,defaultSurfaceId});if(normalizedWebRootAllowed===`no`&&String(to?.path||`/`).trim()===`/`&&defaultSurfaceRootPath!==`/`)return`${defaultSurfaceRootPath}${resolveSearchFromFullPath(to?.fullPath||``)}${String(to?.hash||``).trim()}`;const guard=resolveEffectiveRouteGuard({to,surfaceRuntime,surfaceDefinitions,authenticatedPolicy,publicPolicy});if(guard.policy!==authenticatedPolicy)return true;const outcome=evaluateShellGuard({guard,to,guardEvaluatorKey});if(outcome.allow)return true;if(outcome.redirectTo){if(isExternalLinkTarget(outcome.redirectTo)){if(typeof window===`object`&&window?.location&&typeof window.location.assign===`function`)window.location.assign(outcome.redirectTo);return false}return outcome.redirectTo}return false}}function createStructuredLogger(logger=console){if(isRecord$2(logger))return Object.freeze({info:typeof logger.info===`function`?logger.info.bind(logger):console.info.bind(console),warn:typeof logger.warn===`function`?logger.warn.bind(logger):console.warn.bind(console),error:typeof logger.error===`function`?logger.error.bind(logger):console.error.bind(console),debug:typeof logger.debug===`function`?logger.debug.bind(logger):()=>{}});return Object.freeze({info:console.info.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),debug:()=>{}})}function summarizeRouterRoutes(router){if(!router||typeof router.getRoutes!==`function`)return Object.freeze([]);return Object.freeze(router.getRoutes().map(route=>Object.freeze({name:String(route?.name||``).trim(),path:String(route?.path||``).trim(),metaScope:String(route?.meta?.jskit?.scope||``).trim(),metaSurface:String(route?.meta?.jskit?.surface||``).trim()})))}function resolveClientBootstrapDebugEnabled({env={},debugEnabled=void 0,debugEnvKey=`VITE_JSKIT_CLIENT_DEBUG`}={}){if(typeof debugEnabled===`boolean`)return debugEnabled;if(!isRecord$2(env))return false;return String(env[debugEnvKey]||``).trim()===`1`}function createClientBootstrapLogger({env={},logger=console,debugEnabled=void 0,debugEnvKey=`VITE_JSKIT_CLIENT_DEBUG`}={}){const baseLogger=createStructuredLogger(logger);const isDebugEnabled=resolveClientBootstrapDebugEnabled({env,debugEnabled,debugEnvKey});return Object.freeze({info:baseLogger.info,warn:baseLogger.warn,error:baseLogger.error,debug:isDebugEnabled?baseLogger.info:()=>{},isDebugEnabled})}function installAppPlugins(app,appPlugins=[]){const plugins=Array.isArray(appPlugins)?appPlugins:[];for(const pluginEntry of plugins){if(!pluginEntry)continue;if(Array.isArray(pluginEntry)){const[plugin,...pluginArgs]=pluginEntry;if(!plugin)continue;app.use(plugin,...pluginArgs);continue}app.use(pluginEntry)}}function isSurfaceRootRecord(record){return Boolean(record?.meta?.jskit?.surface)}function staysOnSamePage(to,from){if(to.path===from.path)return true;const fromParents=new Set((from.matched||[]).slice(0,-1));return(to.matched||[]).slice(0,-1).some(record=>fromParents.has(record)&&!isSurfaceRootRecord(record))}function shellScrollBehavior(to,from,savedPosition){if(savedPosition)return savedPosition;if(staysOnSamePage(to,from))return false;if(to.hash)return{el:to.hash,top:0};return{top:0}}function createSurfaceShellRouter({createRouter,history,routes=[],surfaceRuntime,surfaceMode,fallbackRoute=null,notFoundComponent=null,guard=false,scrollBehavior=shellScrollBehavior}={}){if(typeof createRouter!==`function`)throw new TypeError(`createSurfaceShellRouter requires createRouter().`);const effectiveFallbackRoute=fallbackRoute||(notFoundComponent?createFallbackNotFoundRoute(notFoundComponent):null);const activeRoutes=buildSurfaceAwareRoutes({routes,surfaceRuntime,surfaceMode,fallbackRoute:effectiveFallbackRoute});const router=createRouter({history,routes:activeRoutes,...typeof scrollBehavior===`function`?{scrollBehavior}:{}});if(guard!==false){if(!router||typeof router.beforeEach!==`function`)throw new TypeError(`createSurfaceShellRouter requires router.beforeEach() when guard is enabled.`);const beforeEachGuard=typeof guard===`function`?guard:createShellBeforeEachGuard({surfaceRuntime,...isRecord$2(guard)?guard:{}});router.beforeEach(beforeEachGuard)}return Object.freeze({router,activeRoutes:Object.freeze([...activeRoutes]),fallbackRoute:effectiveFallbackRoute})}async function bootstrapClientShellApp({createApp,rootComponent,appConfig={},appPlugins=[],pinia=null,queryClient=null,router,bootClientModules,surfaceRuntime,surfaceMode,env={},fallbackRoute=null,logger=console,createBootstrapLogger=null,debugEnabled=void 0,debugEnvKey=`VITE_JSKIT_CLIENT_DEBUG`,debugMessage=`Client modules bootstrapped before router install.`,onAfterModulesBootstrapped=null,onAfterRouterReady=null,mountSelector=`#app`}={}){if(typeof createApp!==`function`)throw new TypeError(`bootstrapClientShellApp requires createApp().`);if(!router||typeof router.addRoute!==`function`)throw new TypeError(`bootstrapClientShellApp requires router.addRoute().`);if(typeof bootClientModules!==`function`)throw new TypeError(`bootstrapClientShellApp requires bootClientModules().`);const app=createApp(rootComponent);if(!app||typeof app.use!==`function`||typeof app.mount!==`function`)throw new TypeError(`bootstrapClientShellApp requires createApp() to return a Vue app with use() and mount().`);installAppPlugins(app,appPlugins);setClientAppConfig(appConfig);const resolvedLogger=typeof createBootstrapLogger===`function`?createBootstrapLogger({env,logger,debugEnabled,debugEnvKey}):createClientBootstrapLogger({env,logger,debugEnabled,debugEnvKey});const bootstrapLogger=createStructuredLogger(resolvedLogger);const clientBootstrap=await bootClientModules({app,pinia,queryClient,router,surfaceRuntime,surfaceMode,env,logger:bootstrapLogger});const isDebugEnabled=typeof resolvedLogger?.isDebugEnabled===`boolean`?resolvedLogger.isDebugEnabled:resolveClientBootstrapDebugEnabled({env,debugEnabled,debugEnvKey});if(isDebugEnabled)bootstrapLogger.info({bootstrap:{modules:clientBootstrap?.modules||[],providerCount:Number(clientBootstrap?.providerCount||0),routeCount:Number(clientBootstrap?.routeCount||0)},routerRoutesBeforeInstall:summarizeRouterRoutes(router),currentPath:typeof window!==`undefined`?String(window.location?.pathname||``):``},String(debugMessage||``).trim()||`Client modules bootstrapped before router install.`);if(fallbackRoute?.name&&typeof router.addRoute===`function`){if(typeof router.hasRoute===`function`&&router.hasRoute(fallbackRoute.name)&&typeof router.removeRoute===`function`)router.removeRoute(fallbackRoute.name);router.addRoute(fallbackRoute)}if(typeof onAfterModulesBootstrapped===`function`)await onAfterModulesBootstrapped(Object.freeze({app,router,clientBootstrap,surfaceRuntime,surfaceMode,env:isRecord$2(env)?{...env}:{},logger:bootstrapLogger,debugEnabled:isDebugEnabled}));app.use(router);if(typeof router.isReady===`function`)await router.isReady();if(typeof onAfterRouterReady===`function`)await onAfterRouterReady(Object.freeze({app,router,clientBootstrap,surfaceRuntime,surfaceMode,env:isRecord$2(env)?{...env}:{},logger:bootstrapLogger,debugEnabled:isDebugEnabled}));app.mount(mountSelector);return Object.freeze({app,router,clientBootstrap,logger:bootstrapLogger,debugEnabled:isDebugEnabled})}function defaultSelectItems(page){return Array.isArray(page?.items)?page.items:[]}function defaultGetNextPageParam(lastPage){return lastPage?.nextCursor??null}function normalizeQueryKeyValue(queryKey=null){const resolved=unref(queryKey);if(Array.isArray(resolved))return resolved;if(resolved===null||resolved===void 0||resolved===``)return[];return[resolved]}function trimInfinitePagesToFirst(data=null){if(!data||typeof data!==`object`||Array.isArray(data))return data;const sourcePages=Array.isArray(data.pages)?data.pages:[];const sourcePageParams=Array.isArray(data.pageParams)?data.pageParams:[];if(sourcePages.length<2&&sourcePageParams.length<2)return data;const pages=sourcePages.slice(0,1);const pageParams=sourcePageParams.length>0?sourcePageParams.slice(0,1):pages.length>0?[null]:[];return{...data,pages,pageParams}}function usePagedCollection({queryKey,enabled=true,initialPageParam=null,queryFn,getNextPageParam=defaultGetNextPageParam,selectItems=defaultSelectItems,dedupeBy=null,queryOptions=null,fallbackLoadError=`Unable to load list.`}={}){if(typeof queryFn!==`function`)throw new TypeError(`usePagedCollection requires queryFn().`);if(typeof getNextPageParam!==`function`)throw new TypeError(`usePagedCollection requires getNextPageParam().`);if(typeof selectItems!==`function`)throw new TypeError(`usePagedCollection requires selectItems().`);if(dedupeBy!=null&&typeof dedupeBy!==`function`)throw new TypeError(`usePagedCollection dedupeBy must be a function when provided.`);const queryClient=useQueryClient();const queryEnabled=computed(()=>resolveEnabledRef(enabled));const normalizedQueryKey=computed(()=>normalizeQueryKeyValue(queryKey));const query=useInfiniteQuery({queryKey,initialPageParam,enabled:queryEnabled,queryFn,getNextPageParam:(lastPage,allPages,lastPageParam,allPageParams)=>getNextPageParam(lastPage,allPages,lastPageParam,allPageParams),...mergeQueryMeta(asPlainObject(queryOptions),{jskit:{refreshOnPull:true}})});const pages=computed(()=>{const pageList=query.data.value?.pages;return Array.isArray(pageList)?pageList:[]});const items=computed(()=>{const result=[];const seen=dedupeBy?new Set:null;for(const page of pages.value){const pageItems=selectItems(page);if(!Array.isArray(pageItems))continue;if(!seen){result.push(...pageItems);continue}for(const item of pageItems){const key=dedupeBy(item);const normalizedKey=String(key??``).trim();if(!normalizedKey){result.push(item);continue}if(seen.has(normalizedKey))continue;seen.add(normalizedKey);result.push(item)}}return result});const isInitialLoading=computed(()=>Boolean(query.isPending.value));const isFetching=computed(()=>Boolean(query.isFetching.value));const isRefetching=computed(()=>Boolean(isFetching.value&&!isInitialLoading.value));const isLoading=computed(()=>Boolean(isInitialLoading.value||isFetching.value));const isLoadingMore=computed(()=>Boolean(query.isFetchingNextPage.value));const hasMore=computed(()=>Boolean(query.hasNextPage.value));const loadError=computed(()=>toQueryErrorMessage(query.error.value,fallbackLoadError,`Unable to load list.`));async function reload(){return query.refetch()}async function loadMore(){if(!hasMore.value||isLoadingMore.value)return null;return query.fetchNextPage()}function trimToFirstPage(){const key=normalizedQueryKey.value;if(key.length<1)return;queryClient.setQueryData(key,data=>trimInfinitePagesToFirst(data))}return Object.freeze({query,pages,items,isInitialLoading,isFetching,isRefetching,isLoading,isLoadingMore,hasMore,loadError,reload,loadMore,trimToFirstPage})}var CONSOLE_OWNER_ACCESS_POLICY_ID=`console_owner`;function resolveSurfaceDefinitions(appConfig={}){const source=normalizeObject$1(appConfig?.surfaceDefinitions);const resolved={};for(const[rawSurfaceId,rawDefinition]of Object.entries(source)){const surfaceId=normalizeSurfaceId$1(rawSurfaceId);const definition=normalizeObject$1(rawDefinition);if(!surfaceId||definition.enabled===false)continue;resolved[surfaceId]=Object.freeze({id:surfaceId,requiresWorkspace:definition.requiresWorkspace===true,accessPolicyId:normalizeText$3(definition.accessPolicyId).toLowerCase()})}return Object.freeze(resolved)}function resolveAssistantSurfacesConfig(appConfig={}){const source=normalizeObject$1(appConfig?.assistantSurfaces);const resolved={};for(const[rawSurfaceId,rawEntry]of Object.entries(source)){const targetSurfaceId=normalizeSurfaceId$1(rawSurfaceId);const entry=normalizeObject$1(rawEntry);if(!targetSurfaceId)continue;resolved[targetSurfaceId]=Object.freeze({settingsSurfaceId:normalizeSurfaceId$1(entry.settingsSurfaceId),configScope:normalizeAssistantConfigScope(entry.configScope)})}return Object.freeze(resolved)}function normalizeAssistantConfigScope(value=``){if(normalizeText$3(value).toLowerCase()===`workspace`)return`workspace`;return`global`}function resolveAssistantSurfaceConfig(appConfig={},targetSurfaceId=``){const normalizedTargetSurfaceId=normalizeSurfaceId$1(targetSurfaceId);if(!normalizedTargetSurfaceId)return null;const surfaceConfig=resolveAssistantSurfacesConfig(appConfig)[normalizedTargetSurfaceId];if(!surfaceConfig)return null;const surfaceDefinitions=resolveSurfaceDefinitions(appConfig);const runtimeSurface=surfaceDefinitions[normalizedTargetSurfaceId];const settingsSurface=surfaceDefinitions[surfaceConfig.settingsSurfaceId];if(!runtimeSurface||!settingsSurface)return null;if(surfaceConfig.configScope===`workspace`&&(runtimeSurface.requiresWorkspace!==true||settingsSurface.requiresWorkspace!==true))return null;return Object.freeze({targetSurfaceId:normalizedTargetSurfaceId,settingsSurfaceId:settingsSurface.id,configScope:surfaceConfig.configScope,runtimeSurfaceRequiresWorkspace:runtimeSurface.requiresWorkspace===true,settingsSurfaceRequiresWorkspace:settingsSurface.requiresWorkspace===true,settingsSurfaceRequiresConsoleOwner:settingsSurface.accessPolicyId===CONSOLE_OWNER_ACCESS_POLICY_ID})}var CONVERSATION_MESSAGE_STATUS=Object.freeze({streaming:`inProgress`,done:`completed`,error:`failed`,canceled:`interrupted`});function mapAssistantConversationTurns(messages,toolEvents=[],{showToolActivity=true}={}){return conversationTurnsFromMessages(messages.map(message=>({...message,messageId:String(message.id),status:CONVERSATION_MESSAGE_STATUS[message.status],progressUpdates:showToolActivity?toolEvents.filter(event=>event.messageId===message.id).map(event=>({id:event.id,text:`${event.name} — ${event.status}`})):[]})))}function buildId(prefix=`id`){if(typeof crypto!==`undefined`&&typeof crypto.randomUUID===`function`)return`${prefix}_${crypto.randomUUID()}`;return`${prefix}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function normalizeToolName(value){return normalizeText$3(value)||`tool`}function buildHistory(messages){return(Array.isArray(messages)?messages:[]).filter(message=>{if(!message||typeof message!==`object`)return false;if(message.kind!==`chat`)return false;if(message.role!==`user`&&message.role!==`assistant`)return false;if(normalizeText$3(message.status).toLowerCase()!==`done`)return false;const text=normalizeText$3(message.text);if(!text)return false;return message.role!==`assistant`||!isAssistantProgressOnlyText(text)}).map(message=>({role:message.role,content:String(message.text||``).slice(0,MAX_INPUT_CHARS),...message.role===`user`&&message.attachments?.length?{attachmentIds:message.attachments.map(file=>file.attachmentId)}:{}})).slice(-20)}function interruptPendingToolEvents(toolEvents){return(Array.isArray(toolEvents)?toolEvents:[]).map(toolEvent=>{if(normalizeText$3(toolEvent?.status).toLowerCase()!==`pending`)return toolEvent;return{...toolEvent,status:`interrupted`}})}function mapTranscriptEntriesToAssistantState(entries){const sourceEntries=Array.isArray(entries)?entries:[];const messages=[];const toolEventsById=new Map;let latestUserId=null;let currentAssistantId=null;const pendingAssociation=[];function ensureToolEvent(toolCallId,toolName){const key=normalizeText$3(toolCallId)||buildId(`tool_call`);if(toolEventsById.has(key))return toolEventsById.get(key);const next={id:key,name:normalizeToolName(toolName),arguments:``,status:`pending`,result:null,error:null};toolEventsById.set(key,next);return next}for(const entry of sourceEntries){const role=normalizeText$3(entry?.role).toLowerCase();const kind=normalizeText$3(entry?.kind).toLowerCase();const metadata=normalizeObject$1(entry?.metadata);const transcriptId=normalizeRecordId(entry?.id,{fallback:null});const messageId=transcriptId?`transcript_${transcriptId}`:buildId(`transcript`);if(kind===`chat`&&(role===`user`||role===`assistant`)){const text=entry?.contentText==null?``:String(entry.contentText);if(role===`assistant`&&isAssistantProgressOnlyText(text))continue;messages.push({id:messageId,role,kind:`chat`,text,...Array.isArray(metadata.attachments)?{attachments:metadata.attachments}:{},status:`done`});if(role===`user`){latestUserId=messageId;currentAssistantId=null;pendingAssociation.length=0}else{currentAssistantId=messageId;for(const event of pendingAssociation)event.messageId=messageId;pendingAssociation.length=0}continue}if(kind===`tool_call`){const toolEvent=ensureToolEvent(normalizeText$3(metadata.toolCallId)||`tool_call_${messageId}`,metadata.tool);toolEvent.arguments=String(entry?.contentText||``);toolEvent.status=`pending`;toolEvent.messageId=currentAssistantId||latestUserId;pendingAssociation.push(toolEvent);continue}if(kind===`tool_result`){const parsedResult=parseJsonObject(entry?.contentText);const toolEvent=ensureToolEvent(normalizeText$3(metadata.toolCallId||parsedResult.toolCallId)||`tool_result_${messageId}`,metadata.tool||parsedResult.tool);const failed=parsedResult.ok===false||metadata.ok===false;toolEvent.status=failed?`failed`:`done`;toolEvent.result=failed?null:parsedResult.result;toolEvent.error=failed?parsedResult.error||metadata.error||null:null}}return{messages,pendingToolEvents:interruptPendingToolEvents([...toolEventsById.values()])}}var DEFAULT_RESTORE_MESSAGES_PAGE_SIZE=200;var DEFAULT_RESTORE_MESSAGES_MAX_ENTRIES=2e3;var MAX_RESTORE_MESSAGES_MAX_ENTRIES=5e3;function normalizeBoundedPositiveInteger(value,fallback,maximum){const parsed=Number(value);if(!Number.isInteger(parsed)||parsed<1)return fallback;return Math.min(parsed,maximum)}function normalizeTotalPages(value){const parsed=Number(value);return Number.isInteger(parsed)&&parsed>0?parsed:1}function resolveConversationRestorePolicy({pageSize,maxEntries}={}){return Object.freeze({pageSize:normalizeBoundedPositiveInteger(pageSize,DEFAULT_RESTORE_MESSAGES_PAGE_SIZE,500),maxEntries:normalizeBoundedPositiveInteger(maxEntries,DEFAULT_RESTORE_MESSAGES_MAX_ENTRIES,MAX_RESTORE_MESSAGES_MAX_ENTRIES)})}async function loadConversationTranscript({fetchPage,pageSize=DEFAULT_RESTORE_MESSAGES_PAGE_SIZE,maxEntries=DEFAULT_RESTORE_MESSAGES_MAX_ENTRIES}={}){if(typeof fetchPage!==`function`)throw new TypeError(`loadConversationTranscript requires fetchPage().`);const restorePolicy=resolveConversationRestorePolicy({pageSize,maxEntries});const normalizedPageSize=restorePolicy.pageSize;const normalizedMaxEntries=restorePolicy.maxEntries;const firstResponse=await fetchPage(1,normalizedPageSize);const totalPages=normalizeTotalPages(firstResponse?.totalPages);const restoredPageCount=Math.max(1,Math.ceil(normalizedMaxEntries/normalizedPageSize));const firstRestoredPage=Math.max(1,totalPages-restoredPageCount+1);const entries=firstRestoredPage===1&&Array.isArray(firstResponse?.entries)?[...firstResponse.entries]:[];for(let page=Math.max(2,firstRestoredPage);page<=totalPages;page+=1){const response=await fetchPage(page,normalizedPageSize);if(Array.isArray(response?.entries))entries.push(...response.entries)}return Object.freeze({entries:Object.freeze(entries.slice(-normalizedMaxEntries)),firstRestoredPage,pageSize:normalizedPageSize,totalPages,truncated:firstRestoredPage>1})}var WORKSPACES_WEB_SCOPE_SUPPORT_INJECTION_KEY=`jskit.workspaces.web.scope-support`;var EMPTY_ROUTE_SCOPE=Object.freeze({workspaceSlug:``});var EMPTY_WORKSPACE_WEB_SCOPE_SUPPORT=Object.freeze({available:false,readRouteScope(){return EMPTY_ROUTE_SCOPE}});function isWorkspaceWebScopeSupport(value){return Boolean(value&&typeof value.readRouteScope===`function`)}function useWorkspaceWebScopeSupport({required=false}={}){const support=inject$1(WORKSPACES_WEB_SCOPE_SUPPORT_INJECTION_KEY,null);if(isWorkspaceWebScopeSupport(support))return support;if(required)throw new Error(`Workspace web scope support is not available in Vue injection context.`);return EMPTY_WORKSPACE_WEB_SCOPE_SUPPORT}var DEFAULT_STREAM_TIMEOUT_MS=12e4;var DEFAULT_HISTORY_PAGE_SIZE=20;var DEFAULT_HISTORY_STALE_TIME_MS=6e4;function toNonNegativeInteger(value,fallback=0){const parsed=Number(value);if(!Number.isInteger(parsed)||parsed<0)return fallback;return parsed}function buildScopeStorageKey(scope={}){return`assistant.activeConversationId:${normalizeText$3(scope?.targetSurfaceId).toLowerCase()||`assistant`}:${normalizeText$3(scope?.workspaceSlug).toLowerCase()||`global`}:${normalizeRecordId(scope?.userId,{fallback:`anonymous`})}`}function readStoredActiveConversationId(scope={}){if(typeof window===`undefined`||!window.sessionStorage)return``;try{return normalizeRecordId(window.sessionStorage.getItem(buildScopeStorageKey(scope)),{fallback:``})}catch{return``}}function writeStoredActiveConversationId(scope={},conversationId){if(typeof window===`undefined`||!window.sessionStorage)return;const normalizedConversationId=normalizeRecordId(conversationId,{fallback:null});const storageKey=buildScopeStorageKey(scope);try{if(normalizedConversationId){window.sessionStorage.setItem(storageKey,normalizedConversationId);return}window.sessionStorage.removeItem(storageKey)}catch{return}}function normalizeConversationStatus(value){return normalizeConversationStatus$1(value,{fallback:`unknown`})}function formatConversationStartedAt(value){const source=normalizeText$3(value);if(!source)return`unknown`;const date=new Date(source);if(Number.isNaN(date.getTime()))return`unknown`;return date.toLocaleString()}function resolveRuntimePolicy(){const appConfig=getClientAppConfig();const assistantConfig=normalizeObject$1(appConfig?.assistant);const conversationRestorePolicy=resolveConversationRestorePolicy({pageSize:assistantConfig.restoreMessagesPageSize,maxEntries:assistantConfig.restoreMessagesMaxEntries});return Object.freeze({timeoutMs:toPositiveInteger(assistantConfig.timeoutMs,DEFAULT_STREAM_TIMEOUT_MS),historyPageSize:toPositiveInteger(assistantConfig.historyPageSize,DEFAULT_HISTORY_PAGE_SIZE),restoreMessagesPageSize:conversationRestorePolicy.pageSize,restoreMessagesMaxEntries:conversationRestorePolicy.maxEntries,historyStaleTimeMs:toNonNegativeInteger(assistantConfig.historyStaleTimeMs,DEFAULT_HISTORY_STALE_TIME_MS)})}function createRuntimeApi({overrideApi=null,resolveBasePath,resolveSurfaceId=null}={}){if(overrideApi&&typeof overrideApi.streamChat===`function`)return overrideApi;return createAssistantApi({request:assistantHttpClient.request,requestStream:assistantHttpClient.requestStream,resolveBasePath,resolveSurfaceId})}function useAssistantRuntime({api=null,surfaceId=``,integrationId=``}={}){const runtimePolicy=resolveRuntimePolicy();const queryClient=useQueryClient();const errorRuntime=useShellWebErrorRuntime();const routeContext=useSurfaceRouteContext();const workspaceScopeSupport=useWorkspaceWebScopeSupport();const{placementContext,currentSurfaceId}=routeContext;const appConfig=getClientAppConfig();const messages=ref([]);const input=ref(``);const isStreaming=ref(false);const isRestoringConversation=ref(false);const error=ref(``);const pendingToolEvents=ref([]);const conversationId=ref(null);const abortController=shallowRef(null);const isCanceling=ref(false);const delivery=createAssistantMessageDelivery();let restoreVersion=0;const placementSnapshot=computed(()=>normalizeObject$1(placementContext.value));const assistantSurface=computed(()=>resolveAssistantSurfaceConfig(appConfig,toValue(surfaceId)));const routeScope=computed(()=>workspaceScopeSupport.readRouteScope(routeContext));const runtimeScope=computed(()=>{const workspaceSlug=assistantSurface.value?.runtimeSurfaceRequiresWorkspace?normalizeText$3(routeScope.value.workspaceSlug).toLowerCase():``;return{targetSurfaceId:normalizeText$3(assistantSurface.value?.targetSurfaceId).toLowerCase(),userId:normalizeRecordId(placementSnapshot.value?.user?.id,{fallback:null}),workspaceSlug}});const hasRuntimeScope=computed(()=>Boolean(assistantSurface.value&&runtimeScope.value.userId)&&(assistantSurface.value?.runtimeSurfaceRequiresWorkspace?Boolean(runtimeScope.value.workspaceSlug):true));const runtimeApi=createRuntimeApi({overrideApi:api,resolveBasePath:()=>buildAssistantApiPath({requiresWorkspace:assistantSurface.value?.runtimeSurfaceRequiresWorkspace===true,workspaceSlug:runtimeScope.value.workspaceSlug,suffix:`/${runtimeScope.value.targetSurfaceId}`}),resolveSurfaceId:()=>normalizeText$3(currentSurfaceId.value).toLowerCase()});const activeConversationId=computed(()=>normalizeRecordId(conversationId.value,{fallback:``}));const isAdminSurface=computed(()=>normalizeText$3(currentSurfaceId.value).toLowerCase()===`admin`);const canSend=computed(()=>{return Boolean(hasRuntimeScope.value&&!isStreaming.value&&!isRestoringConversation.value&&normalizeText$3(input.value))});const canStartNewConversation=computed(()=>Boolean(hasRuntimeScope.value&&!isStreaming.value&&!isRestoringConversation.value));const scopeKey=computed(()=>JSON.stringify(runtimeScope.value));function setRuntimeError(message,dedupeKey=``){const normalizedMessage=normalizeText$3(message);error.value=normalizedMessage;if(!normalizedMessage)return;errorRuntime.report({source:`assistant.runtime`,message:normalizedMessage,severity:`error`,channel:`banner`,dedupeKey:dedupeKey||`assistant.runtime:error:${normalizedMessage}`,dedupeWindowMs:3e3})}const conversationHistoryCollection=usePagedCollection({queryKey:computed(()=>[...assistantConversationsListQueryKey(runtimeScope.value,{limit:runtimePolicy.historyPageSize}),runtimeScope.value.userId]),queryFn:({pageParam=null})=>runtimeApi.listConversations({cursor:pageParam,limit:runtimePolicy.historyPageSize}),initialPageParam:null,dedupeBy(entry){return normalizeRecordId(entry?.id,{fallback:normalizeText$3(entry?.id)})},enabled:computed(()=>hasRuntimeScope.value),queryOptions:{staleTime:runtimePolicy.historyStaleTimeMs,refetchOnMount:false,refetchOnWindowFocus:false},fallbackLoadError:`Unable to load conversation history.`});const conversationHistory=conversationHistoryCollection.items;const conversationHistoryLoading=computed(()=>Boolean(conversationHistoryCollection.isLoading.value&&!conversationHistoryCollection.isLoadingMore.value));const conversationHistoryLoadingMore=conversationHistoryCollection.isLoadingMore;const conversationHistoryHasMore=conversationHistoryCollection.hasMore;const conversationHistoryError=conversationHistoryCollection.loadError;watch([hasRuntimeScope,conversationHistoryLoading,runtimeScope,conversationId,conversationHistory,isRestoringConversation],async([nextHasRuntimeScope,nextConversationHistoryLoading,nextRuntimeScope,nextConversationId,nextConversationHistory,nextIsRestoringConversation])=>{if(!nextHasRuntimeScope||nextConversationHistoryLoading||nextIsRestoringConversation||isStreaming.value)return;if(normalizeRecordId(nextConversationId,{fallback:null}))return;const sourceEntries=Array.isArray(nextConversationHistory)?nextConversationHistory:[];if(sourceEntries.length<1)return;const storedConversationId=readStoredActiveConversationId(nextRuntimeScope);if(!storedConversationId)return;if(!sourceEntries.some(entry=>normalizeRecordId(entry?.id,{fallback:null})===storedConversationId)){writeStoredActiveConversationId(nextRuntimeScope,``);return}await selectConversationById(storedConversationId,{preserveDraft:true})},{immediate:true});function appendMessage(payload){messages.value=[...messages.value,payload]}function updateMessage(messageId,updater){messages.value=messages.value.map(message=>{if(message.id!==messageId)return message;const patch=typeof updater===`function`?updater(message):updater;return{...message,...patch&&typeof patch===`object`?patch:{}}})}function findMessage(messageId){return messages.value.find(entry=>entry.id===messageId)||null}async function invalidateConversationScope(){if(!hasRuntimeScope.value)return;await queryClient.invalidateQueries({queryKey:assistantScopeQueryKey(runtimeScope.value)})}async function refreshConversationHistory(){if(!hasRuntimeScope.value)return;await conversationHistoryCollection.reload()}async function loadMoreConversationHistory(){await conversationHistoryCollection.loadMore()}async function selectConversationById(nextConversationId,{preserveDraft=false}={}){const normalizedConversationId=normalizeRecordId(nextConversationId,{fallback:``});if(!normalizedConversationId||isStreaming.value||isRestoringConversation.value||!hasRuntimeScope.value)return;const version=++restoreVersion;const scope=runtimeScope.value;const previousDraft=input.value;if(!preserveDraft)input.value=``;isRestoringConversation.value=true;setRuntimeError(``);try{const transcript=await loadConversationTranscript({pageSize:runtimePolicy.restoreMessagesPageSize,maxEntries:runtimePolicy.restoreMessagesMaxEntries,fetchPage:(page,pageSize)=>queryClient.fetchQuery({queryKey:[...assistantConversationMessagesQueryKey(scope,normalizedConversationId,{page,pageSize}),scope.userId],queryFn:()=>{if(version!==restoreVersion)throw new DOMException(`Conversation changed.`,`AbortError`);return runtimeApi.getConversationMessages(normalizedConversationId,{page,pageSize})},staleTime:runtimePolicy.historyStaleTimeMs})});if(version!==restoreVersion)return;const restored=mapTranscriptEntriesToAssistantState(transcript.entries);conversationId.value=normalizedConversationId;writeStoredActiveConversationId(scope,normalizedConversationId);delivery.reset();messages.value=restored.messages;pendingToolEvents.value=restored.pendingToolEvents}catch(loadError){if(version!==restoreVersion)return;if(readStoredActiveConversationId(scope)===normalizedConversationId)writeStoredActiveConversationId(scope,``);if(!input.value)input.value=previousDraft;setRuntimeError(normalizeText$3(loadError?.message)||`Unable to load conversation.`)}finally{if(version===restoreVersion)isRestoringConversation.value=false}}async function selectConversation(conversation){await selectConversationById(conversation?.id)}function clearView(){restoreVersion+=1;delivery.reset();abortController.value?.abort();abortController.value=null;messages.value=[];pendingToolEvents.value=[];input.value=``;error.value=``;conversationId.value=null;isStreaming.value=false;isCanceling.value=false;isRestoringConversation.value=false}function startNewConversation(){if(!canStartNewConversation.value)return;writeStoredActiveConversationId(runtimeScope.value,``);clearView()}watch(scopeKey,clearView,{flush:`sync`});onScopeDispose(clearView);function cancelStream(){if(!abortController.value||isCanceling.value)return;isCanceling.value=true;abortController.value.abort()}async function sendMessage({attachments=[],onAccepted,retryMessageId=``}={}){if(isStreaming.value||isRestoringConversation.value||!hasRuntimeScope.value)return false;const retry=retryMessageId?delivery.find(retryMessageId):null;if(retryMessageId&&retry?.status!==`failed`)return false;const message=normalizeText$3(input.value).slice(0,8e3)||(attachments.length?`Please review the attached files.`:``);const parsedConversationId=normalizeRecordId(conversationId.value,{fallback:null});const payload=retry?.payload||{message,displayAttachments:attachments,request:{input:message,...parsedConversationId?{conversationId:parsedConversationId}:{},...attachments.length?{attachmentIds:attachments.map(file=>file.attachmentId)}:{},...toValue(integrationId)?{integrationId:toValue(integrationId)}:{},history:buildHistory(messages.value)}};if(!payload.message)return false;if(!retry)input.value=``;try{return await delivery.send(payload,{messageId:retryMessageId||buildId(`message`),deliver(submission){const admission=Promise.withResolvers();runStream(submission,{onAccepted,admission}).then(()=>admission.reject(new Error(`Assistant did not confirm this message.`)),admission.reject);return admission.promise}})}catch{return false}}async function runStream({messageId,message:normalizedInput,displayAttachments:attachments,request},{onAccepted,admission}){const assistantMessageId=buildId(`assistant`);let accepted=false;let admissionError=``;setRuntimeError(``);isStreaming.value=true;const streamAbortController=new AbortController;abortController.value=streamAbortController;const streamTimeout=setTimeout(()=>{streamAbortController.abort()},runtimePolicy.timeoutMs);let streamDoneStatus=``;const ownsStream=()=>abortController.value===streamAbortController;try{await runtimeApi.streamChat({...request,messageId},{signal:streamAbortController.signal,onEvent(event){if(!ownsStream()||streamAbortController.signal.aborted)return;const eventType=normalizeAssistantStreamEventType(event?.type,``);if(eventType===ASSISTANT_STREAM_EVENT_TYPES.META&&Object.hasOwn(event||{},`conversationId`)){if(!accepted){accepted=true;appendMessage({id:messageId,role:`user`,kind:`chat`,text:normalizedInput,attachments,status:`done`});appendMessage({id:assistantMessageId,role:`assistant`,kind:`chat`,text:``,status:`streaming`});delivery.reconcile([{user:{messageId}}]);onAccepted?.();admission.resolve(true)}conversationId.value=normalizeRecordId(event?.conversationId,{fallback:null});writeStoredActiveConversationId(runtimeScope.value,conversationId.value);return}if(eventType===ASSISTANT_STREAM_EVENT_TYPES.ASSISTANT_DELTA){const delta=String(event?.delta||``);if(!delta)return;updateMessage(assistantMessageId,message=>({text:`${String(message?.text||``)}${delta}`,status:`streaming`}));return}if(eventType===ASSISTANT_STREAM_EVENT_TYPES.ASSISTANT_MESSAGE){const text=String(event?.text||``);updateMessage(assistantMessageId,{text,status:event.status===`streaming`?`streaming`:`done`});return}if(eventType===ASSISTANT_STREAM_EVENT_TYPES.TOOL_CALL){const toolCallId=normalizeText$3(event?.toolCallId)||buildId(`tool_call`);pendingToolEvents.value=[...pendingToolEvents.value,{id:toolCallId,messageId:assistantMessageId,name:normalizeToolName(event?.name),arguments:String(event?.arguments||``),status:`pending`,result:null,error:null}];return}if(eventType===ASSISTANT_STREAM_EVENT_TYPES.TOOL_RESULT){const toolCallId=normalizeText$3(event?.toolCallId);if(toolCallId)pendingToolEvents.value=pendingToolEvents.value.map(toolEvent=>{if(toolEvent.id!==toolCallId)return toolEvent;const failed=event?.ok===false;return{...toolEvent,status:failed?`failed`:`done`,result:failed?null:event?.result,error:failed?event?.error||null:null}});return}if(eventType===ASSISTANT_STREAM_EVENT_TYPES.ERROR){if(!accepted){admissionError=normalizeText$3(event?.message)||`Assistant request failed.`;return}setRuntimeError(normalizeText$3(event?.message)||`Assistant request failed.`,`assistant.runtime:stream-event-error`);updateMessage(assistantMessageId,{status:`error`});return}if(eventType===ASSISTANT_STREAM_EVENT_TYPES.DONE)streamDoneStatus=normalizeText$3(event?.status).toLowerCase()}});if(!ownsStream())return;if(!accepted)throw new Error(admissionError||`Assistant did not confirm this message.`);if(streamAbortController.signal.aborted)streamDoneStatus=`aborted`;const assistantMessage=findMessage(assistantMessageId);if(!normalizeText$3(assistantMessage?.text)&&streamDoneStatus!==`aborted`){if(!error.value)setRuntimeError(`Assistant returned no output.`,`assistant.runtime:empty-output`);updateMessage(assistantMessageId,{status:`error`})}else if(streamDoneStatus===`aborted`)updateMessage(assistantMessageId,{status:`canceled`});else updateMessage(assistantMessageId,message=>({status:message.status===`streaming`?`done`:message.status}))}catch(streamError){if(!ownsStream())return;if(!accepted)throw streamError;if(String(streamError?.name||``)===`AbortError`)updateMessage(assistantMessageId,{status:`canceled`});else{setRuntimeError(normalizeText$3(streamError?.message)||`Assistant request failed.`);updateMessage(assistantMessageId,{status:`error`})}}finally{clearTimeout(streamTimeout);if(ownsStream()){const answer=findMessage(assistantMessageId);if(answer?.status===`error`){updateMessage(assistantMessageId,{error:error.value});if(!answer.text&&!input.value)input.value=normalizedInput}pendingToolEvents.value=interruptPendingToolEvents(pendingToolEvents.value);abortController.value=null;isStreaming.value=false;isCanceling.value=false;if(accepted){await invalidateConversationScope();await refreshConversationHistory()}}}}const viewer=computed(()=>{const user=normalizeObject$1(placementSnapshot.value.user);return{displayName:normalizeText$3(user.displayName||user.name)||`You`,avatarUrl:normalizeText$3(user.avatarUrl)}});return Object.freeze({meta:{normalizeConversationStatus,formatConversationStartedAt},delivery,state:{messages,input,isStreaming,isCanceling,hasRuntimeScope,scopeKey,isRestoringConversation,error,pendingToolEvents,conversationId,activeConversationId,conversationHistory,conversationHistoryLoading,conversationHistoryLoadingMore,conversationHistoryHasMore,conversationHistoryError,isAdminSurface,canSend,canStartNewConversation},actions:{sendMessage,cancelStream,startNewConversation,clearConversation:startNewConversation,selectConversation,selectConversationById,refreshConversationHistory,loadMoreConversationHistory},viewer})}var _hoisted_1$27=[`aria-label`];var _hoisted_2$23={class:`assistant-surface__toolbar`};var _hoisted_3$22={class:`assistant-surface__title`};var _hoisted_4$17={key:0,class:`assistant-surface__message-error`,role:`status`};var _hoisted_5$16={key:1,class:`assistant-surface__notice`,role:`status`};var _hoisted_6$12={key:0,class:`assistant-surface__message-error`,role:`status`};var _hoisted_7$11={key:0,role:`alert`};var _sfc_main$47={__name:`AssistantSurfaceClientElement`,props:mergeModels({surfaceId:{type:String,required:true},layout:{type:String,default:`page`,validator:value=>[`page`,`compact`].includes(value)},assistantLabel:{type:String,default:`Assistant`},welcomeMessage:{type:String,default:`What would you like to do?`},placeholder:{type:String,default:`Message the assistant…`},showToolActivity:{type:Boolean,default:true},connections:{type:Array,default:()=>[]},attachments:{type:Object,default:null},suggestions:{type:Object,default:null},goal:{type:Object,default:null},activity:{type:Object,default:void 0},configurationMode:{type:String,default:`editable`,validator:value=>[`hidden`,`readonly`,`editable`].includes(value)}},{"integrationId":{type:String,default:``},"integrationIdModifiers":{}}),emits:[`update:integrationId`],setup(__props,{expose:__expose}){const props=__props;const integrationId=useModel(__props,`integrationId`);const draftIntegrationId=ref(integrationId.value);watch(integrationId,value=>{draftIntegrationId.value=value});const runtime=useAssistantRuntime({surfaceId:toRef(props,`surfaceId`),integrationId});const state=reactive(runtime.state);const conversation=ref(null);const root=ref(null);const historyOpen=ref(false);onMounted(()=>{const syncPageOffset=()=>{if(props.layout===`page`)root.value.style.setProperty(`--assistant-page-top`,`${Math.max(0,root.value.getBoundingClientRect().top)}px`)};const observer=new ResizeObserver(syncPageOffset);observer.observe(root.value.parentElement);window.addEventListener(`resize`,syncPageOffset);watchPostEffect(syncPageOffset);onScopeDispose(()=>{observer.disconnect();window.removeEventListener(`resize`,syncPageOffset)})});const selectedConversation=computed(()=>state.conversationHistory.find(entry=>String(entry.id)===state.activeConversationId));const turns=computed(()=>mapAssistantConversationTurns(state.messages,state.pendingToolEvents,props));const adapter=computed(()=>({delivery:runtime.delivery,attachments:props.attachments,suggestions:props.suggestions,goal:props.goal,activity:props.activity,models:props.connections.length&&props.configurationMode!==`hidden`?{providerRows:[{id:`application`,label:`Application AI`}],modelProviderId:`application`,modelRows:props.connections,modelId:draftIntegrationId.value,selectionSummary:props.connections.find(connection=>connection.id===integrationId.value)?.label||`Application default`,changesDisabled:props.configurationMode!==`editable`||state.isStreaming,canSave:props.configurationMode===`editable`&&!state.isStreaming&&draftIntegrationId.value!==integrationId.value&&props.connections.some(connection=>connection.id===draftIntegrationId.value),selectModel(value){draftIntegrationId.value=value},apply(){integrationId.value=draftIntegrationId.value}}:null,conversation:{turns:turns.value,scrollKey:`${state.scopeKey}:${state.activeConversationId||`new`}`,loading:state.isRestoringConversation,working:state.isStreaming&&!runtime.delivery.state.sending,assistantLabel:props.assistantLabel,welcomeMessage:state.messages.length||state.isRestoringConversation?``:props.welcomeMessage},composer:{draft:state.input,canSend:state.canSend||Boolean(props.attachments?.enabled!==false&&props.attachments?.attachments?.length&&!state.isStreaming&&!state.isRestoringConversation&&state.hasRuntimeScope),disabled:!state.hasRuntimeScope,canStop:state.isStreaming,stopPending:state.isCanceling,placeholder:props.placeholder,rows:2,density:props.layout===`compact`?`compact`:`default`,submitOnEnter:true,submitOnModifierEnter:true},actions:{setDraft(value){state.input=value},submit:({attachments})=>submitMessage({attachments}),resend:messageId=>submitMessage({retryMessageId:messageId}),stop:runtime.actions.cancelStream}}));function submitMessage({attachments=[],retryMessageId=``}){const attachmentOwner=props.attachments;const acceptedFiles=retryMessageId?runtime.delivery.find(retryMessageId)?.payload.displayAttachments||[]:attachments;return runtime.actions.sendMessage({attachments,retryMessageId,onAccepted:()=>attachmentOwner?.clearAttachments({accepted:true,attachmentIds:acceptedFiles.map(file=>file.attachmentId)})})}function conversationSubtitle(entry){const details=[runtime.meta.normalizeConversationStatus(entry.status),runtime.meta.formatConversationStartedAt(entry.startedAt),`${Number(entry.messageCount||0)} messages`];if(state.isAdminSurface)details.push(entry.createdByUserDisplayName||entry.createdByUserEmail||(entry.createdByUserId?`User #${entry.createdByUserId}`:`Unknown user`));return details.join(` · `)}async function selectConversation(entry){historyOpen.value=false;await runtime.actions.selectConversation(entry)}function startNewConversation(){runtime.actions.startNewConversation();historyOpen.value=false}__expose({focus:()=>conversation.value?.focus()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{ref_key:`root`,ref:root,class:normalizeClass([`assistant-surface`,`assistant-surface--${__props.layout}`]),"aria-label":__props.assistantLabel},[createBaseVNode(`div`,_hoisted_2$23,[createBaseVNode(`span`,_hoisted_3$22,toDisplayString(selectedConversation.value?.title||`New conversation`),1),createVNode(VBtn,{variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>historyOpen.value=true)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Conversations`,-1)])]),_:1}),__props.showToolActivity&&state.pendingToolEvents.length?(openBlock(),createBlock(VMenu,{key:0,location:`bottom end`},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{variant:`text`}),{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Activity`,-1)])]),_:1},16)]),default:withCtx(()=>[createVNode(VList,{"aria-label":`Tool activity`,"max-height":`320`,"max-width":`360`,class:`assistant-surface__activity`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(state.pendingToolEvents,event=>{return openBlock(),createBlock(VListItem,{key:event.id,title:event.name,subtitle:event.status},null,8,[`title`,`subtitle`])}),128))]),_:1})]),_:1})):createCommentVNode(``,true)]),createVNode(unref(AssistantConversationElement_default),{ref_key:`conversation`,ref:conversation,adapter:adapter.value,label:`Conversation`,class:`assistant-surface__conversation`},createSlots({"message-actions":withCtx(({message})=>[message.status===`failed`&&message.error?(openBlock(),createElementBlock(`p`,_hoisted_4$17,toDisplayString(message.error),1)):createCommentVNode(``,true),message.status===`interrupted`?(openBlock(),createElementBlock(`p`,_hoisted_5$16,`Response canceled. A tool already running may still finish.`)):createCommentVNode(``,true)]),"composer-feedback":withCtx(()=>[state.error&&!state.messages.some(message=>message.error===state.error)?(openBlock(),createElementBlock(`p`,_hoisted_6$12,toDisplayString(state.error),1)):createCommentVNode(``,true)]),"composer-tools":withCtx(()=>[renderSlot(_ctx.$slots,`composer-tools`,{runtime:unref(runtime)},void 0,true)]),_:2},[_ctx.$slots.activity?{name:`activity`,fn:withCtx(scope=>[renderSlot(_ctx.$slots,`activity`,normalizeProps(guardReactiveProps(scope)),void 0,true)]),key:`0`}:void 0,_ctx.$slots.attachments?{name:`attachments`,fn:withCtx(scope=>[renderSlot(_ctx.$slots,`attachments`,normalizeProps(guardReactiveProps(scope)),void 0,true)]),key:`1`}:void 0]),1032,[`adapter`]),createVNode(VDialog,{modelValue:historyOpen.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>historyOpen.value=$event),"max-width":`640`,scrollable:``,"aria-label":`Conversations`},{default:withCtx(()=>[createVNode(VCard,{class:`assistant-surface__history`},{default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Conversations`,-1)])]),_:1}),createVNode(VCardActions,{class:`assistant-surface__history-actions`},{default:withCtx(()=>[createVNode(VBtn,{color:`primary`,disabled:!state.canStartNewConversation,onClick:startNewConversation},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Start new conversation`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:state.conversationHistoryLoading,onClick:unref(runtime).actions.refreshConversationHistory},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Refresh`,-1)])]),_:1},8,[`disabled`,`onClick`]),createVNode(VBtn,{onClick:_cache[1]||(_cache[1]=$event=>historyOpen.value=false)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Close`,-1)])]),_:1})]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[state.conversationHistoryError?(openBlock(),createElementBlock(`p`,_hoisted_7$11,toDisplayString(state.conversationHistoryError),1)):createCommentVNode(``,true),state.conversationHistoryLoading&&!state.conversationHistory.length?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`list-item-two-line@3`,"aria-label":`Loading conversations`})):(openBlock(),createBlock(VList,{key:2,"aria-label":`Saved conversations`},{default:withCtx(()=>[!state.conversationHistory.length?(openBlock(),createBlock(VListItem,{key:0,title:`No saved conversations`})):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(state.conversationHistory,entry=>{return openBlock(),createBlock(VListItem,{key:entry.id,active:String(entry.id)===state.activeConversationId,title:entry.title||`Untitled conversation`,subtitle:conversationSubtitle(entry),disabled:state.isStreaming||state.isRestoringConversation,onClick:$event=>selectConversation(entry)},null,8,[`active`,`title`,`subtitle`,`disabled`,`onClick`])}),128))]),_:1})),state.conversationHistoryHasMore?(openBlock(),createBlock(VBtn,{key:3,disabled:state.conversationHistoryLoadingMore,variant:`text`,onClick:unref(runtime).actions.loadMoreConversationHistory},{default:withCtx(()=>[createTextVNode(toDisplayString(state.conversationHistoryLoadingMore?`Loading conversations…`:`Load older conversations`),1)]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true)]),_:1})]),_:1})]),_:1},8,[`modelValue`])],10,_hoisted_1$27)}}};var AssistantSurfaceClientElement_default=_plugin_vue_export_helper_default(_sfc_main$47,[[`__scopeId`,`data-v-77ad470a`]]);var ASSISTANT_CONVERSATION_SUBSCRIBE=`assistant.conversation.subscribe`;var ASSISTANT_CONVERSATION_UNSUBSCRIBE=`assistant.conversation.unsubscribe`;var ASSISTANT_CONVERSATION_EVENT=`assistant.conversation.event`;var refreshedHistoryPages=Symbol(`assistant.refreshedHistoryPages`);function patchLoadedHistoryPages(pages=[],patch){return pages.map(page=>page.conversationLog.some(turn=>turn.turnId===patch?.turn?.turnId)?applyConversationLogPatch(page,patch,{limit:page.pagination?.limit})||page:page)}var SNAPSHOT_EVENTS=new Set([`accepted`,`settled`,`configuration`,`phase`,`error`,`replaced`,`goal`]);function subscribeAssistantConversation({socket,conversationId,targetSurfaceId,hostSurfaceId,workspaceSlug,read,onState,onEvent=()=>{},onError=()=>{}}={}){if(typeof socket?.on!==`function`||typeof socket?.off!==`function`||typeof socket?.timeout!==`function`)throw new TypeError(`Conversation subscriptions require the application's shared realtime socket.`);if(typeof read!==`function`||typeof onState!==`function`||typeof onEvent!==`function`)throw new TypeError(`Conversation subscriptions require a canonical read operation and state listener.`);const subscriptionId=crypto.randomUUID();const input={subscriptionId,conversationId,targetSurfaceId,hostSurfaceId,...workspaceSlug===void 0?{}:{workspaceSlug}};let disposed=false;let generation=0;let epoch=null;let revision=0;let pending=[];let listening=false;let state=null;let streaming=null;let reloadInFlight=null;let reloadQueued=false;const completed=new Map;const settledTurns=new Set;const pendingReads=new Set;function savedMessageIds(){return new Set((state?.conversationLog||[]).flatMap(turn=>turn.messages||[turn.system,turn.user,...turn.thinking||[],...turn.commentary||[],turn.assistant].filter(Boolean)).map(message=>message.messageId))}function receiveStreaming(snapshot){if(!Number.isSafeInteger(snapshot?.revision)||streaming&&snapshot.revision<=streaming.revision)return false;streaming=snapshot;return true}function publishState({initial=false,canonical=false}={}){if(!state)return;const saved=savedMessageIds();for(const id of completed.keys())if(saved.has(id))completed.delete(id);const messages=new Map([...completed].map(([id,entry])=>[id,entry.message]));for(const message of streaming?.messages||[])messages.set(message.messageId,message);onState({...state,streaming,turns:mergeConversationStream(state.conversationLog,{messages:[...messages.values()]})},{initial,canonical})}function receiveState(snapshot,options){state=snapshot;receiveStreaming(snapshot.streaming);publishState({canonical:true,...options})}function reload({resubscribe=false}={}){if(resubscribe)return subscribe({preserveHistory:true});if(!listening)return subscribe();if(reloadInFlight){reloadQueued=true;return reloadInFlight}const attempt=generation;const settled=new Set(settledTurns);settledTurns.clear();const current=()=>!disposed&&listening&&attempt===generation;const pendingRead={generation:attempt,patches:[]};const job=Promise.resolve().then(()=>{if(!current())return null;pendingReads.add(pendingRead);return read({current})}).then(snapshot=>{if(!current())return;for(const patch of pendingRead.patches){snapshot=applyConversationLogPatch(snapshot,patch,{limit:snapshot.pagination?.limit});if(snapshot[refreshedHistoryPages])snapshot[refreshedHistoryPages]=patchLoadedHistoryPages(snapshot[refreshedHistoryPages],patch)}for(const[id,entry]of completed)if(settled.has(entry.turnId))completed.delete(id);receiveState(snapshot)}).catch(error=>{if(current()){if([401,403].includes(Number(error.status||error.statusCode))){if(epoch===null){disconnected();if(socket.connected)socket.emit(ASSISTANT_CONVERSATION_UNSUBSCRIBE,{subscriptionId})}else{generation+=1;reloadInFlight=null;reloadQueued=false}state=null;streaming=null;completed.clear();settledTurns.clear()}onError(error)}}).finally(()=>{pendingReads.delete(pendingRead);if(reloadInFlight!==job)return;reloadInFlight=null;if(reloadQueued&&current()){reloadQueued=false;reload()}});reloadInFlight=job;return job}function deliver(payload){if(payload.streamEpoch!==epoch||!Number.isSafeInteger(payload.streamRevision)||payload.streamRevision<=revision)return;revision=payload.streamRevision;const event=payload.event;if(!state){if(SNAPSHOT_EVENTS.has(event.type))reload();return}let changedPresentation=Object.hasOwn(event,`interimReply`);if(changedPresentation&&state)state={...state,interimReply:event.interimReply};if(event.type===`transcript`){const next=applyConversationLogPatch(state,event.patch,{limit:state?.pagination?.limit});if(next){state=next;for(const read of pendingReads)if(read.generation===generation)read.patches.push(event.patch);receiveStreaming(event.streaming);changedPresentation=true}}else if(event.type===`message`||event.type===`message-complete`){const persisted=event.type===`message`&&event.status===`complete`&&event.persisted===true;if(persisted)changedPresentation=completed.delete(event.messageId)||changedPresentation;const older=streaming&&event.streaming?.revision<streaming.revision;const completedWhileRunning=event.type===`message`&&event.status===`complete`&&state?.conversationLog.some(turn=>turn.turnId===event.turnId&&turn.metadata?.runtime?.status===`running`);if(!older||completedWhileRunning){const previous=streaming?.messages?.find(message=>message.messageId===event.messageId);const changed=receiveStreaming(event.streaming);if(event.type===`message`&&event.status===`complete`&&event.text&&!persisted)completed.set(event.messageId,{turnId:event.turnId,message:{messageId:event.messageId,role:event.role,text:event.text,status:`complete`,...event.outputId?{outputId:event.outputId}:{},...event.turnId?{turnId:event.turnId}:{},...event.origin?{origin:event.origin}:{},...event.at||previous?.at?{at:event.at||previous.at}:{}}});changedPresentation||=changed||event.status===`complete`}}else if(SNAPSHOT_EVENTS.has(event.type)){if(event.type===`settled`)settledTurns.add(event.turnId);if(event.type===`replaced`)completed.clear();reload()}if(changedPresentation)publishState();onEvent(event)}function receive(payload){if(disposed||!listening||payload?.subscriptionId!==subscriptionId||payload.conversationId!==conversationId)return;if(epoch===null)pending.push(payload);else deliver(payload)}function subscribe({preserveHistory=false}={}){if(disposed||!socket.connected)return;const attempt=++generation;epoch=null;revision=0;pending=[];listening=true;state=null;streaming=null;completed.clear();settledTurns.clear();reloadInFlight=null;reloadQueued=false;socket.timeout(1e4).emit(ASSISTANT_CONVERSATION_SUBSCRIBE,input,(error,response)=>{if(disposed||attempt!==generation)return;if(error||response?.ok!==true){listening=false;pending=[];if(socket.connected)socket.emit(ASSISTANT_CONVERSATION_UNSUBSCRIBE,{subscriptionId});onError(error?Object.assign(new Error(`Chat updates could not reconnect. Reload chat to try again.`,{cause:error}),{code:`assistant_subscription_transport_failed`}):Object.assign(new Error(response?.error||`Conversation subscription failed.`),{code:response?.code,statusCode:response?.status}));return}epoch=response.streamEpoch;receiveState(response.state,{initial:!preserveHistory,canonical:!preserveHistory});for(const payload of pending.sort((left,right)=>left.streamRevision-right.streamRevision))deliver(payload);pending=[]})}function disconnected(){generation+=1;epoch=null;pending=[];listening=false;reloadInFlight=null;reloadQueued=false}socket.on(ASSISTANT_CONVERSATION_EVENT,receive);socket.on(`connect`,subscribe);socket.on(`disconnect`,disconnected);subscribe();function release(){if(disposed)return;disposed=true;generation+=1;pending=[];completed.clear();socket.off(ASSISTANT_CONVERSATION_EVENT,receive);socket.off(`connect`,subscribe);socket.off(`disconnect`,disconnected);if(socket.connected)socket.emit(ASSISTANT_CONVERSATION_UNSUBSCRIBE,{subscriptionId})}return Object.assign(release,{reload})}var text$1=value=>String(toValue(value)??``).trim();var conversationDefaultsKey=Symbol.for(`jskit.assistant-runtime.conversation.defaults`);var compareTurnIds=(left,right)=>String(left).localeCompare(String(right),void 0,{numeric:true});function configureAssistantConversations(app,{actorKey,api=null,request,clearDraftOn=`dispatch`}={}){if(typeof app?.provide!==`function`)throw new TypeError(`Conversation defaults require a Vue application.`);if(request!==void 0&&typeof request!==`function`)throw new TypeError(`Conversation request must be a function.`);if(![`dispatch`,`accepted`].includes(clearDraftOn))throw new TypeError(`clearDraftOn must be dispatch or accepted.`);app.provide(conversationDefaultsKey,Object.freeze({actorKey,api,request,clearDraftOn}))}var SEND_REJECTIONS=new Set([`ACTION_VALIDATION_FAILED`,`ACTION_PERMISSION_DENIED`,`ACTION_SURFACE_FORBIDDEN`,`conversation_invalid_message`,`conversation_busy`,`conversation_not_steerable`,`conversation_invalid_goal`,`conversation_goal_changed`]);function isQuestionConfiguration(value){return value===true||Boolean(value&&typeof value===`object`&&![`questions`,`choices`,`capture`].some(key=>key in value))}function draftAfterAcceptedSubmission(currentDraft=``,submittedDraft=``){const current=String(currentDraft||``);const submitted=String(submittedDraft||``);if(current===submitted)return``;return submitted&&current.startsWith(submitted)?current.slice(submitted.length):current}function resolveWorkingPolicy(snapshot,{deferWhileWorking,admitWhileWorking}){const resolve=(name,option)=>{const value=typeof option===`function`?option(snapshot):option;if(typeof value!==`boolean`)throw new TypeError(`${name} must return a boolean.`);return value};const deferred=resolve(`deferWhileWorking`,deferWhileWorking);const admitted=resolve(`admitWhileWorking`,admitWhileWorking);if(deferred&&admitted)throw new TypeError(`Choose either admitWhileWorking or deferWhileWorking.`);return{deferWhileWorking:deferred,admitWhileWorking:admitted}}function createConversation(identity,{api,socket,actorKey,placement,readers,queueWhileSending,deferWhileWorking,admitWhileWorking,draftStorage,application,goalReadEnabled}){const disposed=ref(false);const placementRevision=ref(0);const stopPlacement=placement.subscribe(()=>{placementRevision.value+=1});const current=computed(()=>{placementRevision.value;const actor=toValue(actorKey);return!disposed.value&&(actor===void 0?String(placement.getContext()?.user?.id||``):text$1(actor))===identity.actorKey});const active=computed(()=>current.value&&[...readers.values()].some(reader=>toValue(reader.active)!==false));const snapshot=shallowRef(null);const draft=ref(``);const draftMessageId=ref(``);const draftAttachments=ref([]);const draftRetry=ref(null);const draftRetryMatches=computed(()=>{const retry=draftRetry.value;const current=String(draft.value||``);const submitted=String(retry?.draftSnapshot||``);return Boolean(retry&&submitted&&(current===submitted||current.startsWith(submitted)))});let draftSubmissionSequence=0;const error=ref(``);const loading=ref(true);const stopping=ref(false);const goalAction=ref(``);const goalTargetCurrent=ref(false);const goalError=ref(``);const goalView=shallowRef(null);const goalLoadError=ref(``);const accessDenied=ref(false);const delivery=createAssistantMessageDelivery();const pendingMessages=new Map;const olderPages=ref([]);let historyRevision=0;let deniedHistoryRevision=0;const loadingMore=ref(false);const loadMoreError=ref(``);const turns=computed(()=>{const saved=mergeConversationLogPages([...olderPages.value,{conversationLog:snapshot.value?.conversationLog||[]}]).conversationLog;const messages=(snapshot.value?.turns||[]).flatMap(turn=>turn.messages||[turn.system,turn.user,...turn.thinking||[],...turn.commentary||[],turn.assistant].filter(Boolean));return mergeConversationStream(saved,{messages})});const oldestLoadedPage=computed(()=>olderPages.value[0]||snapshot.value);const hasMoreBefore=computed(()=>normalizeConversationLogPagination(oldestLoadedPage.value?.pagination).hasMoreBefore);const editable=computed(()=>active.value&&!accessDenied.value);const available=computed(()=>active.value&&!loading.value&&!accessDenied.value&&Boolean(snapshot.value));const steerable=computed(()=>snapshot.value?.status===`working`&&snapshot.value?.capabilities?.steering===true);const workingPolicy=computed(()=>resolveWorkingPolicy(snapshot.value,{deferWhileWorking,admitWhileWorking}));const queueing=computed(()=>queueWhileSending!==false&&(steerable.value||workingPolicy.value.deferWhileWorking||workingPolicy.value.admitWhileWorking));const canSubmit=computed(()=>available.value&&!stopping.value&&(snapshot.value.status===`ready`||steerable.value||(workingPolicy.value.deferWhileWorking||workingPolicy.value.admitWhileWorking)&&snapshot.value.status===`working`)&&(queueWhileSending!==false||!delivery.state.sending)&&!delivery.state.messages.some(message=>message.status===`uncertain`&&(snapshot.value.status!==`ready`||!message.payload||text$1(message.payload.draft??message.payload.message)===text$1(draft))));const savedDraft=toValue(draftStorage);if(savedDraft&&(typeof savedDraft.key!==`string`||!savedDraft.key||![`getItem`,`setItem`,`removeItem`].every(name=>typeof savedDraft.storage?.[name]===`function`)))throw new TypeError(`draftStorage requires an explicit key and storage with getItem, setItem and removeItem.`);try{const saved=savedDraft?JSON.parse(savedDraft.storage.getItem(savedDraft.key)||`null`):null;draft.value=typeof saved?.draft===`string`?saved.draft:``;draftAttachments.value=Array.isArray(saved?.attachments)?saved.attachments.filter(attachment=>typeof attachment?.attachmentId===`string`):[];const restoredMessages=(Array.isArray(saved?.messages)?saved.messages.filter(message=>typeof message?.id===`string`&&typeof message.text===`string`&&typeof message.payload?.message===`string`):[]).filter(message=>!delivery.find(message.id)).map(message=>{const status=[`failed`,`accepted`].includes(message.status)?message.status:`uncertain`;return{...message,status,checking:false,error:message.error||(status===`accepted`?``:`Delivery was not confirmed before this page closed. Check the conversation before retrying.`)}});delivery.state.messages=unmatchedOptimisticMessages(turns.value,[...delivery.state.messages,...restoredMessages],{receiptsOnly:true})}catch{draft.value=``;draftAttachments.value=[]}function persistDraft(){if(!savedDraft||!current.value||accessDenied.value)return;try{const saved={draft:draft.value,attachments:draftAttachments.value.filter(attachment=>attachment?.attachmentId),messages:delivery.state.messages};if(saved.draft||saved.attachments.length||saved.messages.length)savedDraft.storage.setItem(savedDraft.key,JSON.stringify(saved));else savedDraft.storage.removeItem(savedDraft.key)}catch{}}persistDraft();watch([draft,draftAttachments,()=>delivery.state.messages],persistDraft,{deep:true,flush:`sync`});function settleDraftRetry(retry=draftRetry.value){if(!retry||retry.messageId!==draftRetry.value?.messageId)return false;draft.value=draftAfterAcceptedSubmission(draft.value,retry.draftSnapshot);draftRetry.value=null;return true}watch(turns,value=>{const retry=draftRetry.value;if(retry&&!unmatchedOptimisticMessages(value,[retry.optimistic],{receiptsOnly:true}).length)settleDraftRetry(retry)});const questionConfiguration=computed(()=>{for(const reader of readers.values()){const option=toValue(reader.questions);if(toValue(reader.active)!==false&&isQuestionConfiguration(option))return option}return null});const questions=useAssistantQuestions({message:()=>available.value?latestAssistantMessageAwaitingUserReply(turns.value):``,extraChoice:()=>questionConfiguration.value?.extraChoice||null});let subscription;let goalRead=null;let goalSegment=null;let goalReadController=null;let goalReadQueued=false;const readsGoals=computed(()=>goalReadEnabled||snapshot.value?.capabilities?.goals===true||[...readers.values()].some(reader=>toValue(reader.goal)===true));watch(readsGoals,enabled=>{if(enabled)refreshGoal()});function receiveState(state,{initial=false,canonical=false}={}){if(!current.value)return;const previous=snapshot.value;const goalChanged=JSON.stringify([previous?.goal,previous?.capabilities?.goals,previous?.capabilities?.goalCommands,previous?.capabilities?.goalBudgets])!==JSON.stringify([state.goal,state.capabilities?.goals,state.capabilities?.goalCommands,state.capabilities?.goalBudgets]);if(canonical){historyRevision+=1;olderPages.value=initial?[]:state[refreshedHistoryPages]||[];loadMoreError.value=``}else if(olderPages.value.length){const first=state.conversationLog?.[0]?.turnId;const evicted=first?(previous?.conversationLog||[]).filter(turn=>compareTurnIds(turn.turnId,first)<0):[];if(evicted.length){historyRevision+=1;olderPages.value=[...olderPages.value,normalizeConversationLogPage({conversationLog:evicted})]}}snapshot.value=state;loading.value=false;error.value=``;accessDenied.value=false;delivery.reconcile(state.turns);if(state.status===`unconfirmed`&&state.pendingRequest)delivery.restoreUncertain(state.pendingRequest,state.turns);if(state.segmentId!==goalSegment){goalTargetCurrent.value=false;goalLoadError.value=``;goalReadController?.abort()}if(readsGoals.value&&(initial||goalChanged||state.segmentId!==goalSegment))refreshGoal();goalSegment=state.segmentId}function receiveError(failure){if(!current.value)return;loading.value=false;error.value=failure.message;accessDenied.value=[401,403].includes(Number(failure.status||failure.statusCode));if(accessDenied.value){deniedHistoryRevision+=1;snapshot.value=null;historyRevision+=1;olderPages.value=[];draft.value=``;draftMessageId.value=``;draftAttachments.value=[];draftRetry.value=null;delivery.reset();goalError.value=``;goalView.value=null;goalTargetCurrent.value=false;goalLoadError.value=``;goalReadController?.abort()}}function receiveEvent(event){if(event.type===`transcript`&&olderPages.value.some(page=>page.conversationLog.some(turn=>turn.turnId===event.patch?.turn?.turnId))){historyRevision+=1;olderPages.value=patchLoadedHistoryPages(olderPages.value,event.patch)}if(event.type===`goal`)refreshGoal();for(const[token,reader]of[...readers]){if(!current.value)return;if(!readers.has(token)||toValue(reader.active)===false||typeof reader.onEvent!==`function`)continue;try{Promise.resolve(reader.onEvent(event)).catch(()=>{})}catch{}}}async function readLoadedHistory({current:subscriptionCurrent}){const denial=deniedHistoryRevision;const valid=()=>{if(denial!==deniedHistoryRevision)throw Object.assign(new Error(`Access denied.`),{status:403});return current.value&&active.value&&subscriptionCurrent()};while(valid()){const revision=historyRevision;const oldestTurn=olderPages.value[0]?.conversationLog?.[0];const oldest=oldestTurn?.turnId;const oldestCursor=olderPages.value[0]?.pagination?.nextBeforeTurnId||oldest;const latest=await api.readConversation(identity.conversationId);if(!valid())return latest;const pages=[];let page=normalizeConversationLogPage(latest);const cursors=new Set;while(oldest&&page.pagination.hasMoreBefore){const cursor=page.pagination.nextBeforeTurnId||page.pagination.oldestTurnId;const reachedFullOldestTurn=page.pagination.oldestTurnId===oldest&&!page.conversationLog[0]?.paginationPartial;const passedOldestTurn=compareTurnIds(page.pagination.oldestTurnId,oldest)<0;if(cursor&&(cursor===oldestCursor||passedOldestTurn||reachedFullOldestTurn))break;if(!cursor||cursors.has(cursor))throw new Error(`Older conversation history could not be refreshed. Reload chat to try again.`);cursors.add(cursor);page=normalizeConversationLogPage(await api.readConversation(identity.conversationId,{beforeTurnId:cursor,limit:latest.pagination.limit}));if(!valid())return latest;const saved=page.conversationLog.filter(turn=>compareTurnIds(turn.turnId,oldest)>=0).map(turn=>{if(turn.turnId!==oldest||!oldestTurn.paginationPartial)return turn;const roles=[`system`,`user`,`assistant`];const excluded=roles.slice(0,roles.findIndex(role=>oldestTurn[role]));return{...turn,paginationPartial:true,...Object.fromEntries(excluded.map(role=>[role,null])),messages:turn.messages?.filter(message=>!excluded.includes(message.role))}});pages.unshift(normalizeConversationLogPage({...page,conversationLog:saved,pagination:{...page.pagination,count:saved.length,oldestTurnId:saved[0]?.turnId||``,hasMoreBefore:page.pagination.hasMoreBefore||saved.length<page.conversationLog.length}}))}if(revision!==historyRevision)continue;return{...latest,[refreshedHistoryPages]:pages.filter(page=>page.conversationLog.length)}}return null}watch(active,enabled=>{subscription?.();subscription=null;historyRevision+=1;if(!enabled)return;loading.value=true;subscription=subscribeAssistantConversation({socket,conversationId:identity.conversationId,targetSurfaceId:identity.targetSurfaceId,hostSurfaceId:identity.hostSurfaceId,...identity.workspaceSlug?{workspaceSlug:identity.workspaceSlug}:{},read:readLoadedHistory,onState:receiveState,onError:receiveError,onEvent:receiveEvent})},{immediate:true,flush:`sync`});watch(current,value=>{if(value)return;for(const pending of pendingMessages.values())if(!pending.dispatched)pending.controller.abort();delivery.reset();snapshot.value=null;historyRevision+=1;olderPages.value=[];draft.value=``;draftMessageId.value=``;draftAttachments.value=[];draftRetry.value=null;goalError.value=``;goalAction.value=``;goalView.value=null;goalLoadError.value=``;goalReadQueued=false;goalReadController?.abort();questions.reset()},{flush:`sync`});onScopeDispose(()=>{disposed.value=true;subscription?.();stopPlacement();for(const pending of pendingMessages.values())pending.controller.abort();pendingMessages.clear();goalReadController?.abort();delivery.reset()});async function send(payload,{messageId=crypto.randomUUID(),onAccepted}={}){const retry=delivery.find(messageId);if(retry?.status===`failed`&&retry.payload.goalRequest)return changeGoal(retry.payload.goalRequest.action,{},{messageId});if(!canSubmit.value)return false;if(retry&&retry.status!==`failed`)return false;if(delivery.state.messages.some(message=>message.status===`uncertain`&&text$1(message.payload?.message)===text$1((retry?.payload||payload).message)))return false;const requestedSteering=(retry?.payload?.request||payload.request)?.steer===true;if(requestedSteering&&snapshot.value.capabilities?.steering!==true)return false;const steering=requestedSteering||steerable.value;const policy=workingPolicy.value;const deferred=policy.deferWhileWorking&&!retry&&!steering;const appAdmission=policy.admitWhileWorking&&!steering;if((snapshot.value.status===`working`||delivery.state.sending)&&!steering&&!deferred&&!appAdmission)return false;if((retry?.payload||payload).displayAttachments?.length&&snapshot.value.capabilities?.attachments!==true)return false;return submitRequest(retry?.payload?.request?retry.payload:{...retry?.payload||payload,request:payload.request||{text:String(payload.message||``),...payload.data!==void 0?{data:payload.data}:{},...payload.displayAttachments?.length?{attachmentIds:payload.displayAttachments.map(file=>file.attachmentId)}:{},...steerable.value?{steer:true}:{}}},{messageId,onAccepted,queue:queueWhileSending!==false&&(steering||deferred||appAdmission),deferred,appAdmission})}function submitPrepared(payload,{messageId=crypto.randomUUID(),onAccepted,prepare}={}){if(typeof prepare!==`function`)throw new TypeError(`Prepared submission requires application preparation.`);const retry=delivery.find(messageId);const captured=retry?.payload||payload;if(!captured?.request||typeof captured.request!==`object`||Array.isArray(captured.request)||captured.goalRequest)throw new TypeError(`Prepared submission requires an authored conversation request.`);if(!current.value||accessDenied.value||retry&&retry.status!==`failed`)return Promise.resolve(false);return submitRequest(captured,{messageId,onAccepted,prepare,queue:queueWhileSending===true})}async function submitDraft(payload,{messageId=crypto.randomUUID(),submissionKind=steerable.value?`steer`:`send`,questionText=``,onAccepted}={}){if(!canSubmit.value)return false;const retry=draftRetryMatches.value?draftRetry.value:null;if(!retry)draftRetry.value=null;const draftSnapshot=retry?.draftSnapshot||draft.value;const captured=retry?.payload?.request?retry.payload:payload;const kind=retry?.submissionKind||submissionKind;const questionTextSnapshot=retry?.questionTextSnapshot||questionText;const id=retry?.messageId||messageId;const sequence=++draftSubmissionSequence;draftRetry.value=null;draft.value=retry?draftAfterAcceptedSubmission(draft.value,draftSnapshot):``;const result=await send(captured,{messageId:id,onAccepted});if(!current.value)return false;if(!(result!==false&&result?.ok!==false)&&kind===`steer`&&sequence===draftSubmissionSequence&&!draft.value){draft.value=draftSnapshot;const optimistic=delivery.find(id)||{createdAtMs:Date.now(),id,text:String(captured.displayMessage||captured.message||``).trim()};draftRetry.value={draftSnapshot,messageId:id,optimistic,payload:optimistic.payload||captured,questionTextSnapshot,submissionKind:kind};if(!unmatchedOptimisticMessages(turns.value,[optimistic],{receiptsOnly:true}).length)settleDraftRetry(draftRetry.value)}return result}function waitForAdmission({controller}){return new Promise(resolve=>{let stop;const finish=admission=>{stop?.();controller.signal.removeEventListener(`abort`,check);resolve(admission)};const check=()=>{if(controller.signal.aborted||!available.value)finish(false);else if(snapshot.value.status===`ready`)finish(`send`);else if(steerable.value)finish(`steer`);else if(snapshot.value.status!==`working`)finish(false)};stop=watch([available,snapshot,steerable],check,{flush:`sync`});controller.signal.addEventListener(`abort`,check,{once:true});check()})}async function submitRequest(payload,{messageId,onAccepted,queue=false,prepare,deferred=false,appAdmission=false}){if(pendingMessages.has(messageId))return false;const pending={controller:new AbortController,started:false,dispatched:false};const{controller}=pending;pendingMessages.set(messageId,pending);try{return await delivery.send(payload,{messageId,queue,isCurrent:()=>current.value,onAccepted,receiptTurns:turns,uncertainOnError:true,async deliver(submission){pending.started=true;let admission=null;try{if(controller.signal.aborted||appAdmission&&(!available.value||stopping.value||!workingPolicy.value.admitWhileWorking))return false;if(deferred){await subscription?.reload();if(error.value)return false;if(snapshot.value.status===`working`&&!steerable.value)delivery.wait(messageId,`Waiting for the assistant to finish this step`);admission=await waitForAdmission(pending);delivery.wait(messageId,``);if(!admission||controller.signal.aborted||!available.value||snapshot.value.status!==(admission===`steer`?`working`:`ready`))return false;if(submission.displayAttachments?.length&&snapshot.value.capabilities?.attachments!==true)return{ok:false,error:`This conversation no longer accepts attachments.`}}let request=prepare?await prepare(submission,{signal:controller.signal}):submission.request;if(admission===`steer`){request={...request,steer:true};const retained=delivery.find(messageId);if(retained)retained.payload.request=request}if(prepare){if(!current.value||accessDenied.value||controller.signal.aborted||request===false)return false;if(!request||typeof request!==`object`||Array.isArray(request))throw new TypeError(`Application preparation must return its conversation request or false.`)}pending.dispatched=true;for(let attempt=0;;attempt+=1)try{return await(submission.goalRequest?api.updateConversationGoal(identity.conversationId,{...submission.goalRequest,messageId},{signal:controller.signal}):api.sendConversationMessage(identity.conversationId,{...request,messageId},{signal:controller.signal}))}catch(failure){if(attempt!==0||submission.goalRequest||request.steer!==true||failure.code!==`conversation_steer_turn_finished`||failure.status!==409||failure.details?.delivery&&(failure.details.delivery.status!==`not-sent`||failure.details.delivery.messageId!==messageId))throw failure;const retained=delivery.find(messageId);if(retained?.status===`accepted`||turns.value.some(turn=>turn.user?.messageId===messageId&&turn.user.receipt!==false))return{ok:true};if(!current.value||accessDenied.value||controller.signal.aborted||!retained||retained.status!==`pending`)return false;const{steer:_finishedTurn,...nextRequest}=request;request=nextRequest;retained.payload.request=nextRequest;retained.payload.submissionKind=`send`}}catch(failure){if(controller.signal.aborted)return false;if(prepare&&!pending.dispatched)return{ok:false,error:failure.message,...failure.code?{code:failure.code}:{}};const rejection=failure.details?.delivery;if(Number.isInteger(failure.status)&&failure.status>=400&&failure.status<500&&rejection&&!Array.isArray(rejection)&&rejection.status===`not-sent`&&rejection.messageId===messageId||SEND_REJECTIONS.has(failure.code)||failure.code===`conversation_steer_turn_finished`&&failure.status===409&&!failure.details?.delivery)return{ok:false,error:failure.message,...failure.code?{code:failure.code}:{}};throw failure}finally{if(pendingMessages.get(messageId)===pending)pendingMessages.delete(messageId)}}})}catch(failure){if(prepare)return{ok:false,status:`uncertain`,error:failure.message,...failure.code?{code:failure.code}:{}};return false}finally{if(!pending.started&&pendingMessages.get(messageId)===pending)pendingMessages.delete(messageId);if(current.value)subscription?.reload()}}function cancelMessage(messageId){const pending=pendingMessages.get(messageId);if(!pending)return false;pending.controller.abort();return true}async function loadMore({complete}={}){const finish=result=>{if(typeof complete===`function`)complete(result)};const pagination=normalizeConversationLogPagination(oldestLoadedPage.value?.pagination);const beforeTurnId=pagination.nextBeforeTurnId||pagination.oldestTurnId||String(turns.value[0]?.turnId||``).trim();if(!available.value||!hasMoreBefore.value||loadingMore.value||!beforeTurnId){finish({changed:false,loaded:false});return false}const revision=historyRevision;loadingMore.value=true;loadMoreError.value=``;try{const page=await api.readConversation(identity.conversationId,{beforeTurnId,limit:snapshot.value.pagination.limit});if(!available.value||revision!==historyRevision){finish({changed:false,loaded:false});return false}const previousOldestTurnId=String(turns.value[0]?.turnId||``).trim();const previousMessageCount=turns.value.reduce((count,turn)=>count+(turn.messages?.length||0),0);historyRevision+=1;olderPages.value=[normalizeConversationLogPage(page),...olderPages.value];const nextOldestTurnId=String(turns.value[0]?.turnId||``).trim();const nextMessageCount=turns.value.reduce((count,turn)=>count+(turn.messages?.length||0),0);finish({changed:Boolean(nextOldestTurnId&&(nextOldestTurnId!==previousOldestTurnId||nextMessageCount!==previousMessageCount)),loaded:true});return true}catch(failure){if(current.value){loadMoreError.value=String(failure?.message||failure||`Older conversation history could not be loaded.`);if([401,403].includes(Number(failure.status||failure.statusCode)))receiveError(failure)}finish({changed:false,loaded:false});return false}finally{loadingMore.value=false}}function refreshGoal(){if(!active.value||!snapshot.value||!readsGoals.value||accessDenied.value)return Promise.resolve(false);if(goalRead){goalReadQueued=true;return goalRead}const segment=snapshot.value.segmentId;const capabilities=snapshot.value.capabilities;const controller=new AbortController;goalReadController=controller;const job=Promise.resolve().then(()=>api.readConversationGoal(identity.conversationId,{signal:AbortSignal.any([controller.signal,AbortSignal.timeout(3e4)])})).then(result=>{if(!current.value||controller.signal.aborted||snapshot.value?.segmentId!==segment)return false;goalView.value=result&&Object.hasOwn(result,`target`)?result:{status:`available`,goal:result,target:{segmentId:segment,capabilities}};goalTargetCurrent.value=true;goalLoadError.value=``;return true}).catch(failure=>{if(current.value&&!controller.signal.aborted&&snapshot.value?.segmentId===segment)goalLoadError.value=failure.message||`Goal status is unavailable.`;return false}).finally(()=>{if(goalRead!==job)return;goalRead=null;goalReadController=null;if(goalReadQueued){goalReadQueued=false;refreshGoal()}});goalRead=job;return job}async function changeGoal(action,input={},{messageId=crypto.randomUUID()}={}){const view=goalView.value;const target=view?.target;const command=target?.capabilities?.goalCommands?.[action];if(!available.value||view?.status!==`available`||goalLoadError.value||goalAction.value||!goalTargetCurrent.value||![`message`,`control`].includes(command?.delivery)||delivery.state.messages.some(message=>message.status===`uncertain`))return false;if(input.tokenBudget!=null&&!target.capabilities.goalBudgets){goalError.value=`This conversation does not support goal token budgets.`;return false}const retry=delivery.find(messageId);if(retry&&retry.status!==`failed`)return false;const request=retry?.payload.goalRequest||{action,expectedSegmentId:target.segmentId,expectedGoalId:view.goal?.id||null,...action===`set`?{objective:String(input.objective||``).trim(),...input.tokenBudget==null?{}:{tokenBudget:input.tokenBudget}}:{}};goalAction.value=action;goalError.value=``;try{if(retry||command.delivery===`message`){const result=await submitRequest(retry?.payload||{message:action===`set`?request.objective:action===`resume`?`Resume the goal.`:`Cancel the goal.`,goalRequest:request},{messageId});if(result===false||result?.ok===false){if(current.value)goalError.value=result?.error||delivery.find(messageId)?.error||`Could not change the goal.`;return false}return result}const result=await api.updateConversationGoal(identity.conversationId,request);if(result?.ok===false)throw new Error(result.error||`Could not change the goal.`);return result}catch(failure){if(current.value){goalError.value=failure.message;if([401,403].includes(Number(failure.status||failure.statusCode)))receiveError(failure)}return false}finally{if(current.value){goalAction.value=``;await goalRead;await refreshGoal();subscription?.reload()}}}const goalState=computed(()=>{const view=goalView.value;if(!readsGoals.value)return null;const capabilities=view?.target?.capabilities||{};const commands=capabilities.goalCommands||{};const loading=!goalTargetCurrent.value&&!goalLoadError.value;const goalAvailable=goalTargetCurrent.value&&view?.status===`available`&&!goalLoadError.value;return{enabled:active.value&&Boolean(loading||view?.status===`available`&&!goalLoadError.value||goalError.value||goalLoadError.value),loading,available:Boolean(goalAvailable),action:goalAction.value,working:snapshot.value?.status===`working`,tokenBudgetSupported:capabilities.goalBudgets===true,goal:goalAvailable&&view?.goal?{...view.goal,elapsedSeconds:view.goal.timeUsedSeconds,sampledAt:Date.parse(view.goal.updatedAt)}:null,pending:Boolean(goalAction.value)||!goalAvailable||!available.value||delivery.state.sending||delivery.state.messages.some(message=>message.status===`uncertain`),error:goalError.value||goalLoadError.value||view?.error||``,pauseInterruptsTurn:commands.pause?.interruptsTurn===true,cancelInterruptsTurn:commands.cancel?.interruptsTurn===true,...Object.fromEntries([`set`,`resume`,`pause`,`cancel`].filter(action=>[`message`,`control`].includes(commands[action]?.delivery)).map(action=>[action,input=>changeGoal(action,input)]))}});async function cancel(){if(!editable.value||stopping.value)return false;stopping.value=true;for(const pending of pendingMessages.values())if(!pending.dispatched)pending.controller.abort();try{return await api.cancelConversation(identity.conversationId)}catch(failure){receiveError(failure);return false}finally{stopping.value=false;if(current.value)subscription?.reload()}}async function inspectDelivery(messageId){if(!available.value)return false;const message=delivery.find(messageId);if(message?.checking)return false;if(message)message.checking=true;try{const receipt=await api.inspectConversationDelivery(identity.conversationId,messageId);if(!current.value)return false;if(receipt.status===`accepted`){delivery.accept(messageId);if(receipt.messageId===messageId&&message?.payload.goalRequest)goalError.value=``}else if(receipt.status===`not-sent`&&receipt.messageId===messageId)delivery.rejectUnsent(messageId,receipt.error);else if(receipt.status===`unknown`&&message?.status===`uncertain`)message.error=`Delivery is still unknown. Retry to check again.`;subscription?.reload();return receipt}catch(failure){if(current.value&&message?.status===`uncertain`)message.error=failure.message||`Delivery could not be checked.`;receiveError(failure);return false}finally{if(message)message.checking=false}}const runtime={identity,current,active,editable,available,canSubmit,steerable,queueWhileSending:queueing,snapshot,draft,draftMessageId,draftAttachments,draftRetry,draftRetryMatches,settleDraftRetry,error,accessDenied,loading,stopping,delivery,turns,hasMoreBefore,loadingMore,loadMoreError,loadMore,send,submitPrepared,submitDraft,cancel,cancelMessage,inspectDelivery,changeGoal,refreshGoal,goalState,goalView,goalLoadError,questions,reload(options){const job=subscription?.reload(options);refreshGoal();return job}};runtime.application=application?application(runtime):null;return runtime}function useBoundedTask({command,endpoint,scope,input,result,onResult},{active,data,presentation}){if(typeof command?.run!==`function`||!(`isRunning`in command)||typeof input!==`function`||typeof result!==`function`)throw new TypeError(`boundedTask requires its command and input/result mappings.`);if(endpoint===void 0||scope===void 0)throw new TypeError(`boundedTask requires its endpoint and application scope.`);if(onResult!==void 0&&typeof onResult!==`function`)throw new TypeError(`boundedTask.onResult must be a function.`);const draft=ref(``);const messages=ref([]);const busy=computed(()=>toValue(command.isRunning)===true);let disposed=false;onScopeDispose(()=>{disposed=true});async function submit(){const content=draft.value.trim();if(!content||busy.value||toValue(active)===false)return;const capturedScope=toValue(scope);const message={...toValue(data),content,role:`user`};messages.value.push(message);draft.value=``;const response=await command.run({path:toValue(endpoint),payload:input(messages.value)});if(!response||disposed||toValue(scope)!==capturedScope)return;messages.value.push(result(response));onResult?.(response,{message,scope:capturedScope})}return{runtime:shallowRef(Object.freeze({draft,messages,submit,clearHistory(){messages.value=[]}})),adapter:computed(()=>{const display=toValue(presentation)||{};return{conversation:{turns:conversationTurnsFromMessages(messages.value.map(message=>({...message,text:message.content}))),assistantLabel:display.assistantLabel||`Assistant`,welcomeMessage:display.welcomeMessage,visible:display.visible,retainWhenHidden:display.retainWhenHidden,variant:display.variant,scrollKey:toValue(scope)},composer:{draft:draft.value,disabled:busy.value,pending:busy.value,canSend:toValue(active)!==false&&!busy.value&&Boolean(draft.value.trim()),submitOnEnter:display.submitOnEnter??false,submitOnModifierEnter:display.submitOnModifierEnter??true,placeholder:display.placeholder,ariaLabel:display.ariaLabel,submitAriaLabel:display.submitAriaLabel},actions:{setDraft(value){draft.value=value},submit}}}),error:computed(()=>``)}}function conversationBindingSetup({socket,boundedTask=null}={}){const app=getCurrentInstance()?.appContext.app;if(!app)throw new Error(`Conversation binding must be acquired from the application setup.`);if(boundedTask!==null)return{app};const routeContext=useSurfaceRouteContext();const placement=inject$1(`jskit.shell-web.runtime.web-placement.client`,null);if(typeof placement?.getContext!==`function`||typeof placement?.subscribe!==`function`)throw new Error(`Conversation binding requires the application's placement runtime.`);return{app,routeContext,placement,defaults:inject$1(conversationDefaultsKey,{}),workspaceScope:useWorkspaceWebScopeSupport(),socket:socket||useRealtimeSocket({required:true}),config:getClientAppConfig()}}function createConversationBinding({conversationId,endpoint=``,surfaceId=``,hostSurfaceId=``,workspaceSlug,actorKey:suppliedActorKey,api:suppliedApi=null,socket:suppliedSocket=null,active=true,onEvent,clearDraftOn:suppliedClearDraftOn,queueWhileSending,deferWhileWorking=false,admitWhileWorking=false,draftWhileLoading=false,draftStorage=null,application=null,boundedTask=null,data,attachments=null,suggestions=null,models=null,questions=null,goal=null,presentation={}}={},setup){const{app,routeContext,placement,workspaceScope,socket:setupSocket,config,defaults={}}=setup||conversationBindingSetup({socket:suppliedSocket,boundedTask});const clearDraftOn=suppliedClearDraftOn??defaults.clearDraftOn??`dispatch`;const actorKey=computed(()=>{const actor=toValue(suppliedActorKey);return actor===void 0?toValue(defaults.actorKey):actor});if(![`dispatch`,`accepted`].includes(clearDraftOn))throw new TypeError(`clearDraftOn must be dispatch or accepted.`);if(queueWhileSending!==void 0&&typeof queueWhileSending!==`boolean`)throw new TypeError(`queueWhileSending must be a boolean.`);if(![`boolean`,`function`].includes(typeof deferWhileWorking))throw new TypeError(`deferWhileWorking must be a boolean.`);if(![`boolean`,`function`].includes(typeof admitWhileWorking))throw new TypeError(`admitWhileWorking must be a boolean.`);resolveWorkingPolicy(null,{deferWhileWorking,admitWhileWorking});if(typeof draftWhileLoading!==`boolean`)throw new TypeError(`draftWhileLoading must be a boolean.`);if(application!==null&&typeof application!==`function`)throw new TypeError(`application must be a factory.`);if(boundedTask!==null)return useBoundedTask(boundedTask,{active,data,presentation});const socket=suppliedSocket||setupSocket;const runtime=shallowRef(null);const initialDraft=ref(``);const attachmentOwner=computed(()=>{const owner=toValue(attachments);return owner?proxyRefs(owner):null});const suggestionOwner=computed(()=>{const owner=toValue(suggestions);return owner?proxyRefs(owner):null});const modelOwner=computed(()=>{const owner=toValue(models);return owner?proxyRefs(owner):null});const questionOwner=computed(()=>{const option=toValue(questions);const owner=isQuestionConfiguration(option)?runtime.value?.questions:option;return owner?proxyRefs(owner):null});const identity=computed(()=>{const host=(text$1(hostSurfaceId)||text$1(routeContext.currentSurfaceId)).toLowerCase();const target=(text$1(surfaceId)||host).toLowerCase();const surface=resolveAssistantSurfaceConfig(config,target);const workspace=toValue(workspaceSlug)===void 0?surface?.runtimeSurfaceRequiresWorkspace?workspaceScope.readRouteScope(routeContext).workspaceSlug:``:text$1(workspaceSlug);const actor=toValue(actorKey);return Object.freeze({conversationId:text$1(conversationId),targetSurfaceId:target,hostSurfaceId:host||target,workspaceSlug:workspace||``,configured:Boolean(surface)&&(!surface.runtimeSurfaceRequiresWorkspace||Boolean(workspace)),actorKey:actor===void 0?String(routeContext.placementContext.value?.user?.id||``):text$1(actor),endpoint:text$1(endpoint)||buildAssistantApiPath({requiresWorkspace:Boolean(workspace),workspaceSlug:workspace,suffix:`/${target}`})})});const draftScope=computed(()=>{const scope=identity.value;return JSON.stringify([scope.actorKey,scope.endpoint,scope.targetSurfaceId,scope.hostSurfaceId,scope.workspaceSlug,scope.configured])});const canDraftWhileLoading=computed(()=>draftWhileLoading&&identity.value.configured&&Boolean(identity.value.actorKey&&identity.value.targetSurfaceId)&&toValue(active)!==false);watch(draftScope,()=>{initialDraft.value=``},{flush:`sync`});let retained;watch(()=>JSON.stringify(identity.value),()=>{retained?.release();retained=null;runtime.value=null;const target=identity.value;if(!target.configured||!target.conversationId||!target.actorKey||!target.targetSurfaceId)return;const key=JSON.stringify([`assistant`,target.actorKey,target.endpoint,target.targetSurfaceId,target.hostSurfaceId,target.workspaceSlug,target.conversationId]);retained=retainAssistantConversation(app,key,readers=>createConversation(target,{readers,socket,actorKey,placement,queueWhileSending,deferWhileWorking,admitWhileWorking,draftStorage,application,goalReadEnabled:toValue(goal)===true,api:suppliedApi||defaults.api||createAssistantApi({request:defaults.request||assistantHttpClient.request,resolveBasePath:()=>target.endpoint,resolveSurfaceId:()=>target.hostSurfaceId})}),{active,questions,goal,onEvent});runtime.value=retained.runtime},{immediate:true,flush:`sync`});watch(()=>runtime.value?.editable.value&&runtime.value,current=>{if(!draftWhileLoading||!current||!initialDraft.value)return;const value=initialDraft.value;if(!current.draft.value.trim())current.draft.value=value;else if(value.trim()&&text$1(current.draft)!==value.trim())createAssistantTextSubmission({getState:()=>({active:current.editable.value,draft:current.draft.value}),setDraft:value=>{current.draft.value=value},submit:()=>false})(value,{sendImmediately:false});initialDraft.value=``},{flush:`sync`});onScopeDispose(()=>{initialDraft.value=``;retained?.release()});function submit({attachments:files=[],retryMessageId=``}={}){const current=runtime.value;if(!current?.canSubmit.value)return false;const owner=attachmentOwner.value;const waitForAcceptance=clearDraftOn===`accepted`;const pending=waitForAcceptance?current.delivery.find(current.draftMessageId.value):null;const previousId=retryMessageId||(pending&&text$1(pending.payload.draft)===text$1(current.draft)?pending.id:``);const retry=previousId?current.delivery.find(previousId):null;if(retry&&retry.status!==`failed`)return false;if(!retry&&owner?.canSubmit===false)return false;const prompts=questionOwner.value;const formatsQuestions=typeof prompts?.capture===`function`;if(!retry&&formatsQuestions&&prompts.questions?.length&&!prompts.questions.every(question=>String(prompts.answers[question.name]||``).trim()))return false;const answer=!retry&&formatsQuestions?prompts.capture(current.draft.value):null;const captured=retry?.payload||{message:answer?.message??current.draft.value,displayAttachments:files,...waitForAcceptance?{draft:current.draft.value}:{},...data===void 0?{}:{data:toValue(data)}};if(!String(captured.message||``).trim()&&!captured.displayAttachments?.length)return false;if(captured.displayAttachments?.length&&current.snapshot.value?.capabilities?.attachments!==true)return false;const messageId=previousId||crypto.randomUUID();if(!retry&&answer)prompts.markSubmitted(answer.questionText);return submitCaptured(current,captured,{messageId,retry,attachments:owner})}function submitPrepared(payload,{messageId=crypto.randomUUID(),retryMessageId=``,retry,working=false,clearDraft=true,attachments=attachmentOwner.value,isCurrent=()=>true,onSubmit,onAccepted,prepare}={}){const current=runtime.value;if(typeof prepare!==`function`)throw new TypeError(`Prepared submission requires application preparation.`);if(!current?.current.value||!isCurrent())return false;const id=retryMessageId||messageId;const previous=retry||current.delivery.find(id);if(retryMessageId&&!previous||previous&&(![`failed`,`uncertain`].includes(previous.status)||previous.checking))return false;const captured=previous?.payload?.request?previous.payload:payload;return submitCaptured(current,captured.request?captured:{...captured,request:{text:String(captured.message||``),...captured.data!==void 0?{data:captured.data}:{},...captured.attachmentIds?.length?{attachmentIds:captured.attachmentIds}:captured.displayAttachments?.length?{attachmentIds:captured.displayAttachments.map(file=>file.attachmentId)}:{},...(previous?captured.submissionKind===`steer`:working)?{steer:true}:{}}},{messageId:id,retry:previous,clearDraft,attachments,isCurrent,onSubmit,onAccepted,prepare})}function submitCaptured(current,captured,{messageId,retry,clearDraft=true,attachments,isCurrent=()=>true,onSubmit,onAccepted,prepare}={}){const waitForAcceptance=clearDraftOn===`accepted`;const attachmentIds=[...captured.request?.attachmentIds||captured.attachmentIds||(captured.displayAttachments||[]).map(file=>file.attachmentId)];let accepted=false;function acknowledge(){if(accepted||!current.current.value||!isCurrent())return;accepted=true;if(waitForAcceptance&&current.draftMessageId.value===messageId){const receipt=current.delivery.find(messageId);current.draftMessageId.value=``;if(receipt&&text$1(current.draft)===text$1(receipt.payload.draft))current.draft.value=``}if(attachmentIds.length){current.draftAttachments.value=current.draftAttachments.value.filter(file=>!attachmentIds.includes(file.attachmentId));if(runtime.value===current)try{attachments?.clearAttachments({accepted:true,attachmentIds})}catch(failure){current.error.value=failure?.message||`Accepted attachments could not be cleared from the composer.`}}onAccepted?.()}if(!retry&&clearDraft){if(waitForAcceptance){current.draftMessageId.value=messageId;captured={...captured,draft:current.draft.value}}else current.draft.value=``}onSubmit?.();if(retry?.status===`uncertain`)return current.inspectDelivery(messageId).then(receipt=>{if(!current.current.value||!isCurrent())return false;if(receipt?.status!==`accepted`){const error=current.error.value||`Message delivery is not confirmed.`;const pending=current.delivery.find(messageId);if(pending)pending.error=error;return{ok:false,status:`uncertain`,error}}acknowledge();return{...receipt,ok:true}});return prepare?current.submitPrepared(captured,{messageId,onAccepted:acknowledge,prepare}):current.send(captured,{messageId,onAccepted:acknowledge})}return{runtime,adapter:computed(()=>{const current=runtime.value;const display=toValue(presentation)||{};const state=current?.snapshot.value;const files=state?.capabilities?.attachments?attachmentOwner.value:null;const prompts=current?.available.value?questionOwner.value:null;const formatsQuestions=typeof prompts?.capture===`function`;const draft=current?.draft.value??initialDraft.value;const editable=canDraftWhileLoading.value?!current||current.editable.value:current?.available.value;const message=formatsQuestions?prompts.capture(draft).message:draft;const answered=!formatsQuestions||!prompts.questions?.length||prompts.questions.every(question=>String(prompts.answers[question.name]||``).trim());const canSend=current?.canSubmit.value||false;return{delivery:current?.delivery,attachments:files,suggestions:current?.available.value?suggestionOwner.value:null,models:current?.available.value?modelOwner.value:null,questions:prompts,goal:(toValue(goal)===true?null:toValue(goal))||current?.goalState.value||null,conversation:{turns:current?.turns.value||[],interimReply:state?.interimReply||null,error:current?.error.value||state?.error||``,errorReloadable:Boolean(current)&&!current.accessDenied.value,scrollKey:JSON.stringify(identity.value),hasMoreBefore:current?.hasMoreBefore.value||false,loadingMore:current?.loadingMore.value||false,loadMoreError:current?.loadMoreError.value||``,loading:current?.loading.value||false,working:!current?.error.value&&state?.status===`working`&&!current.delivery.state.sending,assistantLabel:display.assistantLabel||`Assistant`,welcomeMessage:display.welcomeMessage??`What would you like to do?`,systemLabel:display.systemLabel,variant:display.variant,visible:display.visible,retainWhenHidden:display.retainWhenHidden,userMessageFormat:display.userMessageFormat,progressPreviewLimit:display.progressPreviewLimit,previewMessage:current?.available.value?display.previewMessage:null},composer:{draft,disabled:!editable||queueWhileSending===false&&current?.delivery.state.sending,canSend:canSend&&answered&&Boolean(message.trim()||files?.attachments?.length),canStop:state?.status===`working`||state?.status===`unavailable`,stopPending:current?.stopping.value||false,queueWhileSending:current?.queueWhileSending.value||false,ariaLabel:display.ariaLabel,submitAriaLabel:display.submitAriaLabel,submitLabel:display.submitLabel,placeholder:formatsQuestions&&prompts.questions?.length?`Optional additional context…`:formatsQuestions&&prompts.choices?.length?`Choose an answer above, or type another answer…`:display.placeholder||`Message the assistant…`,hint:formatsQuestions&&prompts.active?`Answer the assistant, then send one combined reply.`:``,rows:display.rows??2,density:display.layout===`compact`?`compact`:`default`,submitOnEnter:true,submitOnModifierEnter:true},actions:{setDraft(value){if(current)current.draft.value=value;else if(canDraftWhileLoading.value)initialDraft.value=value},submit,resend:messageId=>submit({retryMessageId:messageId}),stop:()=>current?.cancel(),checkDelivery:messageId=>current?.inspectDelivery(messageId),loadMore:input=>current?.loadMore(input),reload:()=>current?.reload()}}}),submitPrepared,error:computed(()=>runtime.value?.error.value||runtime.value?.snapshot.value?.error||``)}}function useAssistantConversation(options){return createConversationBinding(options)}function useAssistantConversationFactory(options={}){const setup=conversationBindingSetup(options);const owner=getCurrentScope();if(!owner)throw new Error(`Conversation factories require an application setup scope.`);return(input={})=>{if(!owner.active)throw new Error(`The conversation factory's application scope has ended.`);const scope=owner.run(()=>effectScope());try{return{...scope.run(()=>createConversationBinding({...options,...input},setup)),release:()=>scope.stop()}}catch(failure){scope.stop();throw failure}}}var _sfc_main$46={__name:`AssistantConversationClientElement`,props:{conversationId:{type:String,required:true},endpoint:{type:String,default:``},surfaceId:{type:String,default:``},hostSurfaceId:{type:String,default:``},workspaceSlug:{type:String,default:void 0},actorKey:{type:String,default:void 0},api:{type:Object,default:null},active:{type:Boolean,default:true},clearDraftOn:{type:String,default:void 0,validator:value=>[`dispatch`,`accepted`].includes(value)},assistantLabel:{type:String,default:`Assistant`},welcomeMessage:{type:String,default:`What would you like to do?`},placeholder:{type:String,default:`Message the assistant…`},layout:{type:String,default:`compact`,validator:value=>[`page`,`compact`].includes(value)},data:{type:Object,default:void 0},attachments:{type:Object,default:null},suggestions:{type:Object,default:null},models:{type:Object,default:null},questions:{type:[Boolean,Object],default:null},goal:{type:[Boolean,Object],default:null},avatarSize:{type:String,default:`compact`,validator:value=>[`hidden`,`compact`,`standard`,`large`].includes(value)}},emits:[`update:avatarSize`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const binding=useAssistantConversation({conversationId:toRef(props,`conversationId`),endpoint:toRef(props,`endpoint`),surfaceId:toRef(props,`surfaceId`),hostSurfaceId:toRef(props,`hostSurfaceId`),workspaceSlug:()=>props.workspaceSlug,active:toRef(props,`active`),actorKey:toRef(props,`actorKey`),api:props.api,clearDraftOn:props.clearDraftOn,data:toRef(props,`data`),attachments:toRef(props,`attachments`),suggestions:toRef(props,`suggestions`),models:toRef(props,`models`),questions:toRef(props,`questions`),goal:toRef(props,`goal`),presentation:computed(()=>({assistantLabel:props.assistantLabel,welcomeMessage:props.welcomeMessage,placeholder:props.placeholder,layout:props.layout}))});const conversation=ref(null);__expose({focus:()=>conversation.value?.focus(),runtime:binding.runtime});return(_ctx,_cache)=>{return openBlock(),createBlock(unref(AssistantConversationElement_default),{ref_key:`conversation`,ref:conversation,adapter:unref(binding).adapter.value,label:__props.assistantLabel,"avatar-size":__props.avatarSize,class:`assistant-client-conversation`,"onUpdate:avatarSize":_cache[0]||(_cache[0]=$event=>emit(`update:avatarSize`,$event))},createSlots({"composer-feedback":withCtx(()=>[renderSlot(_ctx.$slots,`composer-feedback`,{runtime:unref(binding).runtime.value},void 0,true)]),_:2},[renderList(Object.keys(_ctx.$slots).filter(name=>name!==`composer-feedback`),name=>{return{name,fn:withCtx(scope=>[renderSlot(_ctx.$slots,name,mergeProps(scope,{runtime:unref(binding).runtime.value}),void 0,true)])}})]),1032,[`adapter`,`label`,`avatar-size`])}}};var AssistantConversationClientElement_default=_plugin_vue_export_helper_default(_sfc_main$46,[[`__scopeId`,`data-v-acdfb969`]]);var _sfc_main$45={__name:`AssistantSettingsClientElement`,props:{targetSurfaceId:{type:String,required:true}},setup(__props){const props=__props;const form=reactive({systemPrompt:``});const fieldErrors=reactive({systemPrompt:``});const errorRuntime=useShellWebErrorRuntime();const queryClient=useQueryClient();const appConfig=getClientAppConfig();const routeContext=useSurfaceRouteContext();const workspaceScopeSupport=useWorkspaceWebScopeSupport();const{placementContext,currentSurfaceId}=routeContext;const assistantSurface=computed(()=>resolveAssistantSurfaceConfig(appConfig,props.targetSurfaceId));const placementSnapshot=computed(()=>normalizeObject$1(placementContext.value));const routeScope=computed(()=>workspaceScopeSupport.readRouteScope(routeContext));const scope=computed(()=>{const settingsRequiresWorkspace=assistantSurface.value?.settingsSurfaceRequiresWorkspace===true;const workspaceSlug=settingsRequiresWorkspace?normalizeText$3(routeScope.value.workspaceSlug).toLowerCase():``;return{targetSurfaceId:normalizeText$3(assistantSurface.value?.targetSurfaceId).toLowerCase(),workspaceSlug,workspaceId:settingsRequiresWorkspace?normalizeRecordId(placementSnapshot.value?.workspace?.id,{fallback:null}):null}});const hasScope=computed(()=>Boolean(assistantSurface.value)&&(assistantSurface.value?.settingsSurfaceRequiresWorkspace?Boolean(scope.value.workspaceSlug):true));const queryKey=computed(()=>assistantSettingsQueryKey(scope.value));const settingsApi=createAssistantApi({request:assistantHttpClient.request,requestStream:assistantHttpClient.requestStream,resolveBasePath:()=>buildAssistantApiPath({requiresWorkspace:assistantSurface.value?.settingsSurfaceRequiresWorkspace===true,workspaceSlug:scope.value.workspaceSlug,suffix:`/${scope.value.targetSurfaceId}`}),resolveSurfaceId:()=>normalizeText$3(currentSurfaceId.value).toLowerCase()});const subtitle=computed(()=>{if(!assistantSurface.value)return`Configure assistant settings.`;if(assistantSurface.value.configScope===`workspace`)return`Configure the prompt used on the ${assistantSurface.value.targetSurfaceId} surface for this workspace.`;return`Configure the prompt used on the ${assistantSurface.value.targetSurfaceId} surface.`});function clearFieldErrors(){fieldErrors.systemPrompt=``}function reportAssistantSettingsError(message,dedupeKey){const normalizedMessage=normalizeText$3(message);if(!normalizedMessage)return;errorRuntime.report({source:`assistant.settings`,message:normalizedMessage,severity:`error`,channel:`banner`,dedupeKey,dedupeWindowMs:3e3})}const settingsQuery=useQuery({queryKey,enabled:hasScope,retry:false,queryFn:()=>settingsApi.getSettings()});watch(()=>settingsQuery.data.value,payload=>{const settings=payload?.settings&&typeof payload.settings===`object`?payload.settings:{};form.systemPrompt=String(settings.systemPrompt||``);clearFieldErrors()},{immediate:true});const settingsMutation=useMutation({mutationFn:patch=>settingsApi.updateSettings(patch),onSuccess(payload){queryClient.setQueryData(queryKey.value,payload)}});const loadError=computed(()=>{if(!assistantSurface.value)return`Assistant settings are not configured for this surface.`;if(hasScope.value)return normalizeText$3(settingsQuery.error.value?.message);if(assistantSurface.value?.settingsSurfaceRequiresWorkspace){if(workspaceScopeSupport.available!==true)return`Workspace support is not available for this assistant surface.`;return`Select a workspace to configure assistant settings.`}return``});async function submit(){clearFieldErrors();const validation=validateOperationSection({operation:assistantConfigResource.operations.patch,section:`body`,value:{systemPrompt:form.systemPrompt}});if(!validation.ok){fieldErrors.systemPrompt=String(validation.fieldErrors.systemPrompt||``);if(validation.globalErrors.length>0)reportAssistantSettingsError(validation.globalErrors[0],`assistant.settings:validation`);return}try{await settingsMutation.mutateAsync(validation.value)}catch(error){const nextFieldErrors=normalizeObject$1(error?.details?.fieldErrors);fieldErrors.systemPrompt=String(nextFieldErrors.systemPrompt||``);reportAssistantSettingsError(normalizeText$3(error?.message)||`Unable to update assistant settings.`,`assistant.settings:save`)}}const addEdit=computed(()=>({canView:Boolean(assistantSurface.value)&&hasScope.value,canSave:Boolean(assistantSurface.value)&&hasScope.value,loadError:loadError.value,isInitialLoading:Boolean(settingsQuery.isLoading.value),isRefetching:Boolean(settingsQuery.isFetching.value&&!settingsQuery.isLoading.value),isSaving:Boolean(settingsMutation.isPending.value),submit}));const showFormSkeleton=computed(()=>Boolean(settingsQuery.isLoading.value));return(_ctx,_cache)=>{return openBlock(),createBlock(unref(_sfc_main$48),{"root-class":`assistant-settings-client-element`,title:`Assistant settings`,subtitle:subtitle.value,"no-permission-message":`You do not have permission to view assistant settings.`,"save-label":`Save assistant settings`,"add-edit":addEdit.value,"show-form-skeleton":showFormSkeleton.value},{default:withCtx(()=>[createVNode(VTextarea,{modelValue:form.systemPrompt,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>form.systemPrompt=$event),label:`System prompt`,variant:`outlined`,density:`comfortable`,rows:`8`,"auto-grow":``,readonly:!addEdit.value.canSave||addEdit.value.isSaving||addEdit.value.isRefetching,"error-messages":fieldErrors.systemPrompt?[fieldErrors.systemPrompt]:[]},null,8,[`modelValue`,`readonly`,`error-messages`])]),_:1},8,[`subtitle`,`add-edit`,`show-form-skeleton`])}}};var AssistantClientProvider=defineProvider({id:`assistant.web.client`,requires:{components:`client.components`},setup({components}){components.register(`assistant.web.settings.element`,_sfc_main$45)}});var client_exports$8=__exportAll({AssistantClientProvider:()=>AssistantClientProvider,AssistantConversationClientElement:()=>AssistantConversationClientElement_default,AssistantSettingsClientElement:()=>_sfc_main$45,AssistantSurfaceClientElement:()=>AssistantSurfaceClientElement_default,configureAssistantConversations:()=>configureAssistantConversations,useAssistantConversation:()=>useAssistantConversation,useAssistantConversationFactory:()=>useAssistantConversationFactory,useAssistantRuntime:()=>useAssistantRuntime});var VIBE64_SESSIONS_API_SUFFIX=`/vibe64/sessions`;var VIBE64_ARCHIVED_SESSIONS_API_SUFFIX=`${VIBE64_SESSIONS_API_SUFFIX}/archived`;var VIBE64_ASSISTANTS_API_SUFFIX=`/vibe64/assistants/capabilities`;var VIBE64_ASSISTANT_MODEL_ACCESS_API_SUFFIX=`/vibe64/assistants/model-access`;var VIBE64_CURRENT_SESSION_API_SUFFIX=`${VIBE64_SESSIONS_API_SUFFIX}/current`;var VIBE64_API_SUFFIX=`/vibe64`;var VIBE64_SESSION_CHANGED_EVENT=`vibe64.session.changed`;var VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT=`vibe64.source-editor.file.changed`;var VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT=`vibe64.source-editor.sync.error`;var VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT=`vibe64.source-editor.sync.ready`;var SELECTED_SESSION_STORAGE_KEY=`vibe64:selected-session-id`;function agentTurnControlPayloadFromContext(context={}){const source=context&&typeof context===`object`&&!Array.isArray(context)?context:{};const{agentSettings:_agentSettings,sessionId:_sessionId,...body}=source;return vibe64RealtimeOriginPayload({...body,...agentSettingsInputFromContext(source)})}function selectedSessionStorageKey(projectSlug){return vibe64ProjectScopedStorageKey(SELECTED_SESSION_STORAGE_KEY,projectSlug)}function vibe64SessionsQueryKey(surfaceId,ownershipFilter,projectSlug){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`sessions`]}function vibe64SessionQueryKey(surfaceId,ownershipFilter,projectSlug){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`session`]}function vibe64SessionEventMatchesScope(payload={},{projectSlug=``}={}){return!payload.learningAttemptId&&(!payload.projectSlug||payload.projectSlug===projectSlug)}function vibe64AssistantCapabilitiesQueryKey(surfaceId,ownershipFilter,projectSlug,scope=`overview`){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`assistant-capabilities`,String(scope||`overview`)]}function encodePathSegment(value=``){return encodeURIComponent(String(value||``).trim())}function vibe64SessionPath(sessionsApiPath=``,sessionId=``,suffix=``){return`${sessionsApiPath}/${encodePathSegment(sessionId)}${suffix}`}function vibe64AssistantModelAccessPath(capabilitiesApiPath=``){return String(capabilitiesApiPath||``).replace(/\/assistants\/capabilities(?=\?|#|$)/u,`/assistants/model-access`)}function vibe64RepositoryApiPath(sessionsApiPath=``){const normalized=String(sessionsApiPath||``).replace(/\/+$/u,``);return normalized.endsWith(`/vibe64/sessions`)?`${normalized.slice(0,-16)}/vibe64/repository`:`${normalized}/repository`}function vibe64RepositoryHistoryPath(sessionsApiPath=``,options={}){const params=new URLSearchParams;const sessionId=String(options?.sessionId||``).trim();const cursor=String(options?.cursor||``).trim();if(sessionId)params.set(`sessionId`,sessionId);if(cursor)params.set(`cursor`,cursor);const query=params.toString();const base=`${vibe64RepositoryApiPath(sessionsApiPath)}/history`;return query?`${base}?${query}`:base}function vibe64RepositoryVersionFilesPath(sessionsApiPath=``,commit=``,options={}){const params=new URLSearchParams;const sessionId=String(options?.sessionId||``).trim();const historySnapshotCommit=String(options?.historySnapshotCommit||``).trim();if(sessionId)params.set(`sessionId`,sessionId);if(historySnapshotCommit)params.set(`historySnapshotCommit`,historySnapshotCommit);if(Number.isInteger(Number(options?.offset))&&Number(options.offset)>0)params.set(`offset`,String(Number(options.offset)));if(Number.isInteger(Number(options?.limit))&&Number(options.limit)>0)params.set(`limit`,String(Number(options.limit)));const query=params.toString();const base=`${vibe64RepositoryApiPath(sessionsApiPath)}/history/${encodePathSegment(commit)}/files`;return query?`${base}?${query}`:base}function vibe64RepositoryVersionDiffPath(sessionsApiPath=``,commit=``,sourcePath=``,options={}){const params=new URLSearchParams({path:String(sourcePath||``)});const sessionId=String(options?.sessionId||``).trim();const historySnapshotCommit=String(options?.historySnapshotCommit||``).trim();if(sessionId)params.set(`sessionId`,sessionId);if(historySnapshotCommit)params.set(`historySnapshotCommit`,historySnapshotCommit);return`${vibe64RepositoryApiPath(sessionsApiPath)}/history/${encodePathSegment(commit)}/diff?${params.toString()}`}function vibe64SessionChangesPath(sessionsApiPath=``,sessionId=``,options={}){const params=new URLSearchParams;if(Number.isInteger(Number(options?.offset))&&Number(options.offset)>0)params.set(`offset`,String(Number(options.offset)));if(Number.isInteger(Number(options?.limit))&&Number(options.limit)>0)params.set(`limit`,String(Number(options.limit)));const query=params.toString();const base=vibe64SessionPath(sessionsApiPath,sessionId,`/changes`);return query?`${base}?${query}`:base}function vibe64SessionCheckUpdatesPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/updates/check`)}function vibe64SessionChangeDiffPath(sessionsApiPath=``,sessionId=``,sourcePath=``){return`${vibe64SessionPath(sessionsApiPath,sessionId,`/changes/diff`)}?path=${encodeURIComponent(String(sourcePath||``))}`}function vibe64AgentAttachmentPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/agent-attachments`)}function vibe64AgentAttachmentFilePath(sessionsApiPath=``,sessionId=``,attachmentId=``){return`${vibe64AgentAttachmentPath(sessionsApiPath,sessionId)}/${encodePathSegment(attachmentId)}`}function vibe64TemporaryConversationsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/temporary-conversations`)}function vibe64TemporaryConversationPath(sessionsApiPath=``,sessionId=``,conversationId=``){return`${vibe64TemporaryConversationsPath(sessionsApiPath,sessionId)}/${encodePathSegment(conversationId)}`}function vibe64AgentTerminalPath(sessionsApiPath=``,sessionId=``,terminalSessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,terminalSessionId?`/agent-terminal/${encodePathSegment(terminalSessionId)}`:`/agent-terminal`)}function vibe64AgentTerminalControlTextPath(sessionsApiPath=``,sessionId=``,terminalSessionId=``){return`${vibe64AgentTerminalPath(sessionsApiPath,sessionId,terminalSessionId)}/control/text`}function vibe64GlobalCodexTerminalPath(vibe64ApiPath=``,terminalSessionId=``){return terminalSessionId?`${vibe64ApiPath}/codex-terminal/${encodePathSegment(terminalSessionId)}`:`${vibe64ApiPath}/codex-terminal`}function vibe64ConversationLogPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/conversation-log`)}function vibe64SessionPromptHintsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/prompt-hints`)}function vibe64SessionPromptHintsCancelPath(sessionsApiPath=``,sessionId=``){return`${vibe64SessionPromptHintsPath(sessionsApiPath,sessionId)}/cancel`}function vibe64SessionPreviewStatePath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/preview-state`)}function vibe64OutputsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/outputs`)}function vibe64PreviewIdentityPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/preview-identity`)}function vibe64OutputRunPath(sessionsApiPath=``,sessionId=``,terminalSessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,terminalSessionId?`/output-runs/${encodePathSegment(terminalSessionId)}/terminal`:`/output-runs`)}function vibe64OutputRunStopPath(sessionsApiPath=``,sessionId=``,terminalSessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/output-runs/${encodePathSegment(terminalSessionId)}/stop`)}function vibe64OutputResultPath(sessionsApiPath=``,sessionId=``,resultId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/output-results/${encodePathSegment(resultId)}`)}function vibe64SourceEditorTreePath(sessionsApiPath=``,sessionId=``,options={}){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/tree`);const params=new URLSearchParams;const normalizedPath=String(options?.path||``).trim();if(normalizedPath)params.set(`path`,normalizedPath);if(Number.isInteger(Number(options?.offset))&&Number(options.offset)>0)params.set(`offset`,String(Number(options.offset)));if(Number.isInteger(Number(options?.limit))&&Number(options.limit)>0)params.set(`limit`,String(Number(options.limit)));const query=params.toString();return query?`${basePath}?${query}`:basePath}function vibe64SourceEditorFilesPath(sessionsApiPath=``,sessionId=``,query=``){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/files`);const normalizedQuery=String(query||``).trim();return normalizedQuery?`${basePath}?q=${encodeURIComponent(normalizedQuery)}`:basePath}function vibe64SourceEditorSearchPath(sessionsApiPath=``,sessionId=``,query=``){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/search`);const normalizedQuery=String(query||``).trim();return normalizedQuery?`${basePath}?q=${encodeURIComponent(normalizedQuery)}`:basePath}function vibe64SourceEditorResolvePathPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/resolve-path`)}function vibe64SourceEditorFilePath(sessionsApiPath=``,sessionId=``,sourcePath=``){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/file`);const normalizedPath=String(sourcePath||``).trim();return normalizedPath?`${basePath}?path=${encodeURIComponent(normalizedPath)}`:basePath}function vibe64SourceEditorCreateFilePath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/file`)}function vibe64SourceEditorStarsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/stars`)}function vibe64SourceEditorDownloadPath(sessionsApiPath=``,sessionId=``,sourcePath=``){return`${vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/download`)}?path=${encodeURIComponent(sourcePath)}`}function vibe64SourceEditorChangesStreamPath(sessionsApiPath=``,sessionId=``,sourcePath=``){const basePath=vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/changes/stream`);const normalizedPath=String(sourcePath||``).trim();return normalizedPath?`${basePath}?path=${encodeURIComponent(normalizedPath)}`:basePath}function vibe64SourceEditorExplanationsPath(sessionsApiPath=``,sessionId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/explanations`)}function vibe64SourceEditorExplanationsStreamPath(sessionsApiPath=``,sessionId=``){return`${vibe64SourceEditorExplanationsPath(sessionsApiPath,sessionId)}/stream`}function vibe64SourceEditorExplanationsCleanupPath(sessionsApiPath=``,sessionId=``){return`${vibe64SourceEditorExplanationsPath(sessionsApiPath,sessionId)}/cleanup`}function vibe64SourceEditorExplanationPath(sessionsApiPath=``,sessionId=``,explanationId=``){return vibe64SessionPath(sessionsApiPath,sessionId,`/source-editor/explanations/${encodePathSegment(explanationId)}`)}function vibe64SourceEditorExplanationFollowupsPath(sessionsApiPath=``,sessionId=``,explanationId=``){return`${vibe64SourceEditorExplanationPath(sessionsApiPath,sessionId,explanationId)}/followups`}function vibe64SourceEditorExplanationFollowupsStreamPath(sessionsApiPath=``,sessionId=``,explanationId=``){return`${vibe64SourceEditorExplanationFollowupsPath(sessionsApiPath,sessionId,explanationId)}/stream`}function vibe64SourceEditorExplanationStopPath(sessionsApiPath=``,sessionId=``,explanationId=``){return`${vibe64SourceEditorExplanationPath(sessionsApiPath,sessionId,explanationId)}/stop`}function vibe64ConversationLogQueryKey(surfaceId,ownershipFilter,sessionId=``,projectSlug){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`conversation-log`,encodePathSegment(sessionId)]}function vibe64OutputsQueryKey(surfaceId,ownershipFilter,sessionId=``,projectSlug){return[`vibe64`,...vibe64ProjectQueryScope(projectSlug),surfaceId,ownershipFilter,`outputs`,encodePathSegment(sessionId)]}function agentSettingsInputFromContext(context={}){return context?.agentSettings&&typeof context.agentSettings===`object`&&!Array.isArray(context.agentSettings)?{agentSettings:context.agentSettings}:{}}function value$1(input){return unref(input)}function normalizedText(input){return String(value$1(input)||``).trim()}function responseEngines(resource){const payload=resource.data.value;return Array.isArray(payload?.engines)?payload.engines:[]}function useVibe64AssistantCatalog({active,path:catalogPath,configuredOnly=false,allConnectedModels=false,engineId,modelProviderId,modelSearch,providerConnectedOnly=false,providerCursor,providerSearch}={}){const paths=usePaths();const selectedProjectSlug=useVibe64ProjectSlug();const projectSlug=computed(()=>normalizedText(catalogPath)||selectedProjectSlug.value);const apiPath=computed(()=>normalizedText(catalogPath)||paths.api(`/vibe64/assistants/capabilities`,{surface:`app`}));const enabled=computed(()=>Boolean(value$1(active)));const overview=useEndpointResource({enabled,fallbackLoadError:`AI choices could not be loaded.`,path:apiPath,queryKey:computed(()=>vibe64AssistantCapabilitiesQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,[`overview`,value$1(configuredOnly)?`configured`:normalizedText(engineId)||`all`,value$1(providerConnectedOnly)?`connected`:`all`,...value$1(allConnectedModels)?[`all-models`]:[]].join(`:`))),queryOptions:{refetchOnMount:true,staleTime:value$1(allConnectedModels)?3e4:0,refetchOnWindowFocus:false},readQuery:computed(()=>({...value$1(configuredOnly)?{configuredOnly:`true`}:{},...value$1(allConnectedModels)?{allConnectedModels:`true`}:{},...value$1(providerConnectedOnly)?{connectedOnly:`true`}:{},...!value$1(configuredOnly)&&normalizedText(engineId)?{engineId:normalizedText(engineId)}:{},limit:value$1(configuredOnly)?`100`:`25`})),realtime:{events:[VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT]},requestRecoveryLabel:`AI choices`});const providerPage=useEndpointResource({enabled:computed(()=>enabled.value&&!value$1(configuredOnly)&&!value$1(allConnectedModels)&&normalizedText(engineId)===`opencode`),fallbackLoadError:`OpenCode providers could not be loaded.`,path:apiPath,queryKey:computed(()=>vibe64AssistantCapabilitiesQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,(normalizedText(providerSearch)||normalizedText(providerCursor)?[`providers`,value$1(providerConnectedOnly)?`connected`:`all`,normalizedText(providerSearch),normalizedText(providerCursor)]:[`overview`,`opencode`,value$1(providerConnectedOnly)?`connected`:`all`]).join(`:`))),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:false},readQuery:computed(()=>({...value$1(providerConnectedOnly)?{connectedOnly:`true`}:{},...normalizedText(providerCursor)?{cursor:normalizedText(providerCursor)}:{},engineId:`opencode`,limit:`25`,...normalizedText(providerSearch)?{search:normalizedText(providerSearch)}:{}})),requestRecoveryLabel:`OpenCode providers`});const modelPage=useEndpointResource({enabled:computed(()=>Boolean(enabled.value&&!value$1(configuredOnly)&&normalizedText(engineId)&&normalizedText(modelProviderId))),fallbackLoadError:`Provider models could not be loaded.`,path:apiPath,queryKey:computed(()=>vibe64AssistantCapabilitiesQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value,[`models`,normalizedText(engineId),normalizedText(modelProviderId),value$1(providerConnectedOnly)?`connected`:`all`,normalizedText(modelSearch)].join(`:`))),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:false},readQuery:computed(()=>({...value$1(providerConnectedOnly)?{connectedOnly:`true`}:{},engineId:normalizedText(engineId),limit:`100`,modelProviderId:normalizedText(modelProviderId),...normalizedText(modelSearch)?{search:normalizedText(modelSearch)}:{}})),requestRecoveryLabel:`Provider models`});const overviewEngines=computed(()=>responseEngines(overview));const providerEngine=computed(()=>responseEngines(providerPage)[0]||null);const modelEngine=computed(()=>responseEngines(modelPage)[0]||null);const selectedOverviewEngine=computed(()=>overviewEngines.value.find(engine=>String(engine?.engineId||``)===normalizedText(engineId))||null);const selectedEngine=computed(()=>modelEngine.value||providerEngine.value||selectedOverviewEngine.value);const selectedProvider=computed(()=>{const providerId=normalizedText(modelProviderId);return[...modelEngine.value?.modelProviders||[],...providerEngine.value?.modelProviders||[],...selectedOverviewEngine.value?.modelProviders||[]].find(provider=>String(provider?.id||``)===providerId)||null});async function reload(){const requests=[overview.reload()];if(!value$1(configuredOnly)){if(!value$1(allConnectedModels)&&normalizedText(engineId)===`opencode`&&(normalizedText(providerSearch)||normalizedText(providerCursor)))requests.push(providerPage.reload());if(normalizedText(modelProviderId))requests.push(modelPage.reload())}await Promise.all(requests)}return{apiPath,engines:overviewEngines,modelEngine,modelPage,overview,providerEngine,providerPage,reload,selectedEngine,selectedOverviewEngine,selectedProvider}}var VIBE64_ACCOUNT_CONNECTIONS_OPEN_EVENT=`vibe64:account-connections:open`;function requestVibe64AccountConnectionsDialog({codexReconnectRequired=false,providerLabel=``,providerId=``,providerRevision=``,refresh=true,section=``}={}){if(typeof window===`undefined`||typeof window.dispatchEvent!==`function`)return false;window.dispatchEvent(new CustomEvent(VIBE64_ACCOUNT_CONNECTIONS_OPEN_EVENT,{detail:{codexReconnectRequired:codexReconnectRequired===true,providerLabel:String(providerLabel||``),providerId:String(providerId||``),providerRevision:String(providerRevision||``),refresh:refresh!==false,section:String(section||``)}}));return true}function onVibe64AccountConnectionsDialogRequested(handler){if(typeof window===`undefined`||typeof window.addEventListener!==`function`)return()=>null;window.addEventListener(VIBE64_ACCOUNT_CONNECTIONS_OPEN_EVENT,handler);return()=>window.removeEventListener(VIBE64_ACCOUNT_CONNECTIONS_OPEN_EVENT,handler)}function readRefOrGetterValue(value){return unref(typeof value===`function`?value():value)}var _hoisted_1$26={key:1,class:`text-body-small`,role:`status`};var _hoisted_2$22={key:5,class:`vibe64-session-assistant-menu__locked-note`};var _hoisted_3$21={key:6,"aria-label":`Provider model access`,class:`vibe64-session-assistant-menu__section`};var _hoisted_4$16={class:`vibe64-session-assistant-menu__access-summary`};var _sfc_main$44={__name:`Vibe64SessionAssistantMenu`,props:mergeModels({selection:{type:Object,default:null},catalogPath:{type:String,default:``},target:{default:null,type:Object},canConfigure:{default:false,type:Boolean},changesDisabled:{default:false,type:Boolean},session:{default:null,type:Object},saveSelection:{type:Function,default:null},sessionsApiPath:{default:``,type:[Function,Object,String]}},{"modelValue":{type:Boolean,default:false},"modelModifiers":{}}),emits:mergeModels([`saved`],[`update:modelValue`]),setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const saveError=ref(``);const routingMode=computed(()=>assistantRoutingFromMetadata(props.session?.metadata)?.mode||``);const menuOpen=useModel(__props,`modelValue`);const saving=ref(false);const modelAccessUpdating=ref(false);const unlockConfirmOpen=ref(false);const modelProviderId=ref(``);const modelId=ref(``);const agentId=ref(``);const variantId=ref(``);const assistantSelection=computed(()=>props.selection||assistantRoutingFromMetadata(props.session?.metadata)?.override||props.session?.assistantSelection||null);const engineId=ref(``);const catalogActive=computed(()=>Boolean(menuOpen.value&&(props.session?.sessionId||props.saveSelection)));const connections=useVibe64AssistantCatalog({active:catalogActive,configuredOnly:true,path:computed(()=>props.catalogPath)});const engineRows=computed(()=>connections.engines.value.filter(engine=>engine.health?.status===`ready`&&engine.modelProviders?.some(provider=>provider.connected)));const catalogs=Object.fromEntries(VIBE64_AGENT_PROVIDERS.map(({id})=>[id,useVibe64AssistantCatalog({active:computed(()=>catalogActive.value&&engineRows.value.some(engine=>engine.engineId===id)),path:computed(()=>props.catalogPath),engineId:id,allConnectedModels:true,providerConnectedOnly:true,modelProviderId:computed(()=>engineId.value===id?modelProviderId.value:``)})]));const catalog=computed(()=>catalogs[engineId.value]);const catalogLoading=computed(()=>connections.overview.isInitialLoading.value||catalog.value?.overview.isInitialLoading.value||catalog.value?.modelPage.isInitialLoading.value);const catalogError=computed(()=>String(connections.overview.loadError.value||catalog.value?.overview.loadError.value||catalog.value?.modelPage.loadError.value||``));const selectedOverviewEngine=computed(()=>catalog.value?.selectedOverviewEngine.value||null);const currentModelEngine=selectedOverviewEngine;const providerRows=computed(()=>(currentModelEngine.value?.modelProviders||[]).filter(provider=>provider.connected));const selectedProvider=computed(()=>providerRows.value.find(provider=>provider.id===modelProviderId.value));const savedProviderUnavailable=computed(()=>!catalogLoading.value&&assistantSelection.value?.engineId===engineId.value&&!providerRows.value.some(provider=>provider.id===assistantSelection.value.modelProviderId));const modelRows=computed(()=>providerRows.value.flatMap(provider=>provider.models.filter(model=>model.status===`available`).map(model=>({...model,modelProviderId:provider.id,props:{subtitle:provider.label},key:JSON.stringify([provider.id,model.id])}))));const modelKey=computed(()=>JSON.stringify([modelProviderId.value,modelId.value]));const modelAccess=computed(()=>selectedProvider.value?.modelAccess||{});const modelAccessUnlocked=computed(()=>modelAccess.value.mode===`all`);const recommendedModel=computed(()=>modelRows.value.find(model=>model.modelProviderId===modelProviderId.value&&model.id===modelAccess.value.recommendedModelId&&model.status===`available`)||null);const canRestoreRecommendedModel=computed(()=>Boolean(recommendedModel.value&&modelId.value!==recommendedModel.value.id));const modelAccessPendingLabel=computed(()=>modelAccessUnlocked.value?`Returning to ${recommendedModel.value?.label||`the recommended model`}…`:`Unlocking paid models…`);const selectedModel=computed(()=>modelRows.value.find(model=>model.key===modelKey.value)||null);const compatibleAgents=computed(()=>(currentModelEngine.value?.agents||[]).filter(agent=>[`all`,`primary`].includes(agent.mode)&&(!agent.modelProviderId||agent.modelProviderId===modelProviderId.value)&&(!agent.modelId||agent.modelId===modelId.value)));const selectedAgent=computed(()=>compatibleAgents.value.find(agent=>agent.id===agentId.value)||null);const variantRows=computed(()=>[{id:``,label:`Default`},...selectedModel.value?.variants||[]]);const selectionRevision=computed(()=>String(catalog.value?.modelEngine.value?.revision||``));const draftSelection=computed(()=>({agentId:agentId.value,catalogRevision:selectionRevision.value,engineId:engineId.value,modelId:modelId.value,modelProviderId:modelProviderId.value,variantId:variantId.value}));const selectionChanged=computed(()=>{const current=assistantSelection.value||{};return[`agentId`,`engineId`,`modelId`,`modelProviderId`,`variantId`].some(field=>String(current[field]||``)!==String(draftSelection.value[field]||``))});const canSave=computed(()=>Boolean(!props.changesDisabled&&(selectionChanged.value||routingMode.value!==`custom`)&&selectedProvider.value&&selectedModel.value&&selectedAgent.value&&selectionRevision.value&&!catalogLoading.value&&!catalogError.value&&!modelAccessUpdating.value));const updateCommand=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:`PATCH`,path:String(context?.path||``)}),buildRawPayload:(_model,{context})=>vibe64RealtimeOriginPayload({assistantSelection:context?.assistantSelection||{}}),fallbackRunError:`AI session choices could not be updated.`,suppressSuccessMessage:true,onRunSuccess(response){if(response?.ok===false)throw new Error(response.error||`The custom model could not be saved.`)},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.sessions.assistant-selection.update`,surfaceId:`app`,writeMethod:`PATCH`});const modelAccessCommand=useCommand({access:`never`,apiSuffix:VIBE64_ASSISTANT_MODEL_ACCESS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:`PATCH`,path:String(context?.path||``)}),buildRawPayload:(_model,{context})=>({engineId:String(context?.engineId||``),modelProviderId:String(context?.modelProviderId||``),unlocked:context?.unlocked===true}),fallbackRunError:`Provider model access could not be changed.`,messages:{error:`Provider model access could not be changed.`,success:`Provider model access updated.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.assistants.model-access.update`,surfaceId:`app`,writeMethod:`PATCH`});function hydrateSelection(){const selection=assistantSelection.value||{};engineId.value=String(selection.engineId||``);modelProviderId.value=String(selection.modelProviderId||``);modelId.value=String(selection.modelId||``);agentId.value=String(selection.agentId||``);variantId.value=String(selection.variantId||``)}async function reloadCatalog(){await Promise.all([connections.reload(),catalog.value?.reload()])}function selectEngine(value){if(props.changesDisabled||value===engineId.value)return;engineId.value=value;modelProviderId.value=``;modelId.value=``;agentId.value=``;variantId.value=``}function selectModel(key){if(props.changesDisabled)return;const model=modelRows.value.find(row=>row.key===key);if(!model||model.key===modelKey.value)return;modelProviderId.value=model.modelProviderId;modelId.value=model.id;agentId.value=``;variantId.value=``}function selectVariant(value=``){if(props.changesDisabled)return;variantId.value=String(value||``)}function selectionForModel(model=null){if(!model||model.status!==`available`||!selectionRevision.value)return null;const agents=(currentModelEngine.value?.agents||[]).filter(agent=>[`all`,`primary`].includes(agent.mode)&&(!agent.modelProviderId||agent.modelProviderId===modelProviderId.value)&&(!agent.modelId||agent.modelId===model.id));const agent=agents.find(candidate=>candidate.id===selectedOverviewEngine.value?.defaults?.agentId)||agents[0]||null;if(!agent)return null;const requestedVariantId=String(agent.variantId||``);const variants=Array.isArray(model.variants)?model.variants:[];return{agentId:agent.id,catalogRevision:selectionRevision.value,engineId:engineId.value,modelId:model.id,modelProviderId:modelProviderId.value,variantId:variants.some(variant=>variant.id===requestedVariantId)?requestedVariantId:``}}function openConnectionSettings(){if(props.changesDisabled)return;menuOpen.value=false;requestVibe64AccountConnectionsDialog({section:`ai`})}async function applySelection(selection,{closeMenu=true}={}){const sessionId=String(props.session?.sessionId||``).trim();const sessionsPath=String(readRefOrGetterValue(props.sessionsApiPath)||``).trim();if(props.changesDisabled||!selection||!props.saveSelection&&(!sessionId||!sessionsPath)||saving.value)return null;saving.value=true;saveError.value=``;try{const response=props.saveSelection?await props.saveSelection(selection):await updateCommand.run({assistantSelection:selection,path:vibe64SessionPath(sessionsPath,sessionId,`/assistant-selection`)});if(response?.ok===false)throw new Error(response.error||`The custom model could not be saved.`);if(response?.ok!==false){emit(`saved`);modelId.value=selection.modelId;agentId.value=selection.agentId;variantId.value=selection.variantId;if(closeMenu)menuOpen.value=false}return response}catch(error){saveError.value=error.message||`The custom model could not be saved.`;reloadCatalog().catch(()=>{});return{ok:false,error:saveError.value}}finally{saving.value=false}}async function save(){if(!canSave.value)return;await applySelection(draftSelection.value)}async function restoreRecommendedModel({closeMenu=true}={}){return applySelection(selectionForModel(recommendedModel.value),{closeMenu})}function requestModelAccessChange(unlocked){if(props.changesDisabled||!props.canConfigure||modelAccessUpdating.value||saving.value)return;if(unlocked===true){unlockConfirmOpen.value=true;return}updateModelAccess(false)}async function confirmUnlockModelAccess(){unlockConfirmOpen.value=false;await updateModelAccess(true)}async function updateModelAccess(unlocked){const providerId=String(modelProviderId.value||``).trim();const path=vibe64AssistantModelAccessPath(connections.apiPath.value);if(!props.canConfigure||props.changesDisabled||!providerId||!path||!modelAccess.value.configurable||modelAccessUpdating.value)return null;modelAccessUpdating.value=true;try{const current=assistantSelection.value||{};if(unlocked!==true&&current.modelProviderId===providerId&&recommendedModel.value&&current.modelId!==recommendedModel.value.id){const recovery=await restoreRecommendedModel({closeMenu:false});if(recovery?.ok===false||!recovery)return recovery;await nextTick$1()}const response=await modelAccessCommand.run({engineId:engineId.value,modelProviderId:providerId,path,unlocked:unlocked===true});if(response?.ok!==false)await catalog.value?.reload();return response}finally{modelAccessUpdating.value=false}}watch(()=>JSON.stringify(assistantSelection.value),hydrateSelection,{immediate:true});watch(menuOpen,open=>{if(open){hydrateSelection();saveError.value=``}});watch([menuOpen,engineRows,connections.overview.isInitialLoading],([open,rows,loading])=>{if(!open||loading||rows.some(row=>row.engineId===engineId.value))return;if(rows.length)selectEngine(rows[0].engineId)});watch([menuOpen,modelRows,catalogLoading],([open,models,loading])=>{if(!open||loading||models.some(model=>model.key===modelKey.value))return;const defaults=currentModelEngine.value?.defaults;const preferred=models.find(model=>model.modelProviderId===defaults?.modelProviderId&&model.id===defaults?.modelId);if(preferred||models[0])selectModel((preferred||models[0]).key)});watch([compatibleAgents,modelKey],([agents])=>{if(!menuOpen.value)return;if(!agents.some(agent=>agent.id===agentId.value))agentId.value=agents.find(agent=>agent.id===selectedOverviewEngine.value?.defaults?.agentId)?.id||agents[0]?.id||``},{immediate:true});watch([selectedModel,selectedAgent],([model,agent])=>{if(!menuOpen.value||!model)return;const fixedVariant=String(agent?.variantId||``);if(fixedVariant)variantId.value=fixedVariant;else if(variantId.value&&!model.variants.some(variant=>variant.id===variantId.value))variantId.value=``},{immediate:true});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VDialog,{modelValue:menuOpen.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>menuOpen.value=$event),"max-width":`34rem`,scrollable:``,persistent:saving.value,"aria-label":`Custom AI`,onAfterLeave:_cache[3]||(_cache[3]=$event=>__props.target?.focus())},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`pt-5 px-6`},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Custom AI`,-1)])]),_:1}),createVNode(VCardText,{class:`d-flex flex-column ga-4`},{default:withCtx(()=>[saveError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`},{default:withCtx(()=>[createTextVNode(toDisplayString(saveError.value),1)]),_:1})):createCommentVNode(``,true),savedProviderUnavailable.value?(openBlock(),createElementBlock(`p`,_hoisted_1$26,` This conversation's saved AI connection is unavailable. Choose an available model and Apply to reconnect. `)):createCommentVNode(``,true),catalogError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`,density:`compact`},{default:withCtx(()=>[createTextVNode(toDisplayString(catalogError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:reloadCatalog},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Retry`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),createVNode(VSelect,{label:`Orchestrator`,items:engineRows.value,"item-title":`label`,"item-value":`engineId`,"model-value":engineId.value,disabled:__props.changesDisabled||saving.value||unref(connections).overview.isInitialLoading.value,"hide-details":``,variant:`outlined`,"onUpdate:modelValue":selectEngine},null,8,[`items`,`model-value`,`disabled`]),catalogLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:3,type:`list-item-two-line@2`})):(openBlock(),createElementBlock(Fragment,{key:4},[createVNode(VAutocomplete,{label:`Model`,items:modelRows.value,"item-title":`label`,"item-value":`key`,"model-value":selectedModel.value?modelKey.value:null,disabled:__props.changesDisabled||saving.value,"hide-details":``,variant:`outlined`,"no-data-text":`No model is available yet`,"persistent-placeholder":``,placeholder:`None`,"onUpdate:modelValue":selectModel},null,8,[`items`,`model-value`,`disabled`]),createVNode(VSelect,{label:`Thinking`,items:variantRows.value,"item-title":`label`,"item-value":`id`,"model-value":variantId.value,disabled:__props.changesDisabled||saving.value||Boolean(selectedAgent.value?.variantId),"hide-details":``,variant:`outlined`,"onUpdate:modelValue":selectVariant},null,8,[`items`,`model-value`,`disabled`])],64)),modelAccess.value.configurable&&!modelAccess.value.managementOnly&&!modelAccessUnlocked.value?(openBlock(),createElementBlock(`small`,_hoisted_2$22,[createVNode(VIcon,{icon:unref(mdiLockOutline),size:`14`},null,8,[`icon`]),_cache[8]||(_cache[8]=createTextVNode(` Additional paid models are hidden until they are enabled. `,-1))])):createCommentVNode(``,true),modelAccess.value.configurable&&!modelAccess.value.managementOnly?(openBlock(),createElementBlock(`section`,_hoisted_3$21,[_cache[9]||(_cache[9]=createBaseVNode(`div`,{class:`vibe64-session-assistant-menu__label`},`Z.AI access`,-1)),createVNode(VSheet,{class:normalizeClass([`vibe64-session-assistant-menu__access`,{"vibe64-session-assistant-menu__access--paid":modelAccessUnlocked.value}]),rounded:`lg`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_4$16,[createVNode(VAvatar,{color:modelAccessUnlocked.value?`warning`:`success`,size:`36`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:modelAccessUnlocked.value?unref(mdiCreditCardOutline):unref(mdiShieldCheckOutline),size:`19`},null,8,[`icon`])]),_:1},8,[`color`]),createBaseVNode(`span`,null,[createBaseVNode(`strong`,null,toDisplayString(modelAccessUnlocked.value?`Paid models unlocked`:`Free-only mode`),1),createBaseVNode(`small`,null,toDisplayString(modelAccessUnlocked.value?`Other Z.AI models can consume API credit.`:`${recommendedModel.value?.label||`The recommended model`} stays available without paid credit.`),1)])]),createVNode(VSwitch,{color:`primary`,disabled:__props.changesDisabled||!__props.canConfigure||modelAccessUpdating.value||saving.value,"hide-details":``,inset:``,label:modelAccessUpdating.value?modelAccessPendingLabel.value:modelAccess.value.label,"model-value":modelAccessUnlocked.value,onClick:_cache[0]||(_cache[0]=withModifiers($event=>requestModelAccessChange(!modelAccessUnlocked.value),[`prevent`]))},null,8,[`disabled`,`label`,`model-value`]),canRestoreRecommendedModel.value?(openBlock(),createBlock(VBtn,{key:0,block:``,color:`primary`,disabled:__props.changesDisabled||saving.value||modelAccessUpdating.value,size:`small`,type:`button`,variant:`tonal`,onClick:restoreRecommendedModel},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?`Switching to ${recommendedModel.value.label}…`:`Use ${recommendedModel.value.label}`),1)]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),_:1},8,[`class`])])):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,{class:`px-6 pb-5 flex-wrap`},{default:withCtx(()=>[__props.canConfigure?(openBlock(),createBlock(VBtn,{key:0,disabled:__props.changesDisabled||saving.value,variant:`text`,onClick:openConnectionSettings},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Configure more AIs`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),createVNode(VSpacer),createVNode(VBtn,{disabled:saving.value,variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>menuOpen.value=false)},{default:withCtx(()=>[..._cache[11]||(_cache[11]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:!canSave.value||saving.value,"aria-busy":saving.value?`true`:void 0,color:`primary`,variant:`flat`,onClick:save},{default:withCtx(()=>[createTextVNode(toDisplayString(saving.value?`Applying…`:`Apply`),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`persistent`]),createVNode(VDialog,{modelValue:unlockConfirmOpen.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>unlockConfirmOpen.value=$event),"max-width":`31rem`,persistent:``},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createVNode(VCardItem,{class:`vibe64-session-assistant-menu__confirm-header`},{prepend:withCtx(()=>[createVNode(VAvatar,{color:`warning`,size:`44`,variant:`tonal`},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiCreditCardOutline),size:`23`},null,8,[`icon`])]),_:1})]),default:withCtx(()=>[createVNode(VCardTitle,null,{default:withCtx(()=>[createTextVNode(toDisplayString(modelAccess.value.label||`Unlock provider models`)+`?`,1)]),_:1}),createVNode(VCardSubtitle,{class:`vibe64-session-assistant-menu__confirm-subtitle`},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(` GLM-4.7 Flash stays available either way. `,-1)])]),_:1})]),_:1}),createVNode(VCardText,{class:`text-body-medium`},{default:withCtx(()=>[createTextVNode(toDisplayString(modelAccess.value.warning||`These models may consume paid provider credit.`),1)]),_:1}),createVNode(VCardActions,{class:`vibe64-session-assistant-menu__confirm-actions`},{default:withCtx(()=>[createVNode(VBtn,{disabled:modelAccessUpdating.value,type:`button`,variant:`text`,onClick:_cache[4]||(_cache[4]=$event=>unlockConfirmOpen.value=false)},{default:withCtx(()=>[..._cache[13]||(_cache[13]=[createTextVNode(` Keep free only `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`warning`,disabled:modelAccessUpdating.value,type:`button`,variant:`flat`,onClick:confirmUnlockModelAccess},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(` Unlock paid models `,-1)])]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])],64)}}};var Vibe64SessionAssistantMenu_default=_plugin_vue_export_helper_default(_sfc_main$44,[[`__scopeId`,`data-v-b487c06e`]]);function selectionLabels(catalog,selection){const engine=(catalog?.engines||[]).find(item=>item?.engineId===selection.engineId);const model=(engine?.modelProviders||[]).find(provider=>provider.id===selection.modelProviderId)?.models?.find(item=>item.id===selection.modelId);return{engineLabel:engine?.label||selection.engineId,modelLabel:model?.label||selection.modelId}}var COLLEAGUE_FOCUS_UPDATE=`vibe64.colleague.focus.update`;var COLLEAGUE_FOCUS_RELEASE=`vibe64.colleague.focus.release`;function createColleagueFocusBinding({socket,readFocus,onError}){let closed=false;let revision=0;function update(){const expected=++revision;if(closed||!socket.connected)return;socket.timeout(1e4).emit(COLLEAGUE_FOCUS_UPDATE,readFocus(),(error,result)=>{if(closed||expected!==revision)return;if(error||result?.ok!==true)onError(error?.message||result?.error||`Colleague could not update this browser's focus.`)})}function disconnected(){revision+=1}function release(){revision+=1;if(socket.connected)socket.emit(COLLEAGUE_FOCUS_RELEASE,{clientId:readFocus().clientId})}socket.on(`connect`,update);socket.on(`disconnect`,disconnected);return{update,release,close(){closed=true;revision+=1;socket.off(`connect`,update);socket.off(`disconnect`,disconnected);release()}}}function createColleagueNavigation({scope,navigate,beforeNavigate,acknowledge,error}){let navigating=null;let navigationReceipt=null;async function handle(command){if(navigating||command?.status!==`pending`||!navigate())return;navigating=command.id;const expectedActor=scope().actorKey;try{const before=beforeNavigate(command);if(before)await before;if(navigationReceipt?.commandId!==command.id){let receipt;try{const result=await navigate()(command);receipt={commandId:command.id,clientId:scope().clientId,ok:true,...command.guide?{...result.focus?{focus:result.focus}:{},guide:result.guide}:{focus:result}}}catch(error){receipt={commandId:command.id,clientId:scope().clientId,ok:false,error:error.message}}if(!scope().mounted||expectedActor!==scope().actorKey)return;navigationReceipt=receipt}if(!scope().mounted||expectedActor!==scope().actorKey)return;await acknowledge(navigationReceipt)}catch(cause){if(scope().mounted&&expectedActor===scope().actorKey)error.value=cause.message}finally{if(expectedActor===scope().actorKey)navigating=null}}function reset(){navigationReceipt=null;navigating=null}return{handle,reset}}function watchColleagueLearningRequests({learning,actorKey,reveal,send,report}){if(!learning?.colleagueRequest||typeof learning.consumeColleagueRequest!==`function`)return()=>{};let running=``;return watch(()=>learning.colleagueRequest.value,async request=>{if(!request?.id||running===request.id)return;if(request.actorKey&&request.actorKey!==actorKey())return;running=request.id;try{const value=learning.consumeColleagueRequest(request.id);if(!value)return;if(await reveal()===false)return;if(value.kind===`open`)return;if(await send(value.message)===false)throw new Error(value.kind===`stuck`?`Colleague could not receive I'm stuck. Open Colleague and tell it where you are stuck.`:`Colleague could not receive Teach me. Open Colleague and ask it to teach this step.`)}catch(error){report(error)}finally{if(running===request.id)running=``}},{immediate:true})}function learningPanelMatches(command,focus){const learning=command.learning;if(!learning)return true;if(typeof learning.open===`boolean`)return focus?.learningOpen===true===learning.open;return focus?.learningOpen!==true&&focus?.pane===`lesson`&&focus.learningAttemptId===learning.attemptId&&(!learning.stepId||focus.learningStepId===learning.stepId)}var read=value=>value?.__v_isRef===true?value.value:value;function learningPanelFocus(controller){if(!controller)return{};const learningOpen=read(controller.coursesOpen)===true;const surface=read(controller.surface);const attemptId=read(controller.lessonAttemptId)??read(controller.mode)?.currentAttemptId;const stepId=read(controller.stepId);const beat=read(controller.player?.beats)?.length?read(controller.player.index):void 0;return{learningOpen,...learningOpen&&[`courses`,`progress`,`archived`].includes(surface)?{learningSurface:surface}:{},...attemptId?{learningAttemptId:attemptId,...stepId?{learningStepId:stepId,...Number.isSafeInteger(beat)?{learningBeat:beat}:{}}:{}}:{}}}async function applyLearningNavigation(controller,learning){if(!controller)throw new Error(`Courses is unavailable in this view.`);const{open,attemptId,stepId}=learning;if(open===true)await controller.show();else if(open===false)await controller.minimise();else await controller.openLesson({attemptId,...stepId?{stepId}:{}})}var _hoisted_1$25={class:`vibe64-colleague__launcher-avatar`};var _hoisted_2$21=[`aria-label`];var _hoisted_3$20={class:`vibe64-colleague__drawer`};var _hoisted_4$15={class:`vibe64-colleague__drawer-header`};var _hoisted_5$15={class:`text-title-large`};var _hoisted_6$11=[`aria-label`];var _hoisted_7$10={key:0,class:`vibe64-colleague__nudge`};var _hoisted_8$10={key:0,"data-test":`colleague-teach-needs-model`};var _hoisted_9$8={key:1};var _hoisted_10$7={class:`vibe64-colleague__conversation`};var _hoisted_11$7={key:0,role:`img`,"aria-label":`Listening`,title:`Listening`,class:`d-inline-flex align-center text-primary`};var _hoisted_12$7={key:1,role:`img`,"aria-label":`Speaking`,title:`Speaking`,class:`d-inline-flex align-center text-primary`};var _hoisted_13$7={class:`vibe64-colleague__composer-region`};var _hoisted_14$7={key:0,class:`text-body-small text-error`,role:`alert`};var _hoisted_15$7=[`title`];var _hoisted_16$6={class:`vibe64-colleague__composer-actions`};var _hoisted_17$6={class:`ms-1`};var _hoisted_18$6={class:`vibe64-colleague__delivery`};var _hoisted_19$5={class:`vibe64-colleague__watch-badge`,"aria-hidden":`true`};var _hoisted_20$5={key:0,class:`vibe64-colleague__watch-card`,"aria-label":`Watches`};var _hoisted_21$5={class:`text-title-medium`};var _hoisted_22$5=[`data-status`];var _hoisted_23$5={key:0,class:`text-error`};var _hoisted_24$4={class:`d-flex flex-wrap ga-1`};var _hoisted_25$3={key:1,class:`vibe64-colleague__watch-card`,"aria-label":`Ongoing assignments`};var _hoisted_26$2={class:`text-title-medium`};var _hoisted_27$2={key:2,class:`vibe64-colleague__watch-empty`,role:`status`};var _hoisted_28$2={key:0};var _hoisted_29$2={key:0};var _hoisted_30$2={key:1,class:`text-error`};var _hoisted_31$2={class:`d-flex flex-wrap ga-1`};var _hoisted_32$2={key:0,role:`status`};var _hoisted_33$2={key:1,role:`alert`};var _hoisted_34$2={class:`vibe64-colleague__history`};var _hoisted_35$1={key:0,role:`alert`};var _hoisted_36$1={key:0,role:`status`};var _hoisted_37$1={key:1};var _hoisted_38$1={key:0};var _sfc_main$43={__name:`Vibe64Colleague`,props:{name:{type:String,default:`Colleague`},holdToTalk:Boolean,request:{type:Function,required:true},navigate:{type:Function,default:null},focus:{type:Object,default:()=>({})}},emits:[`message-submit`,`voice-visual`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const open=ref(false);const{xs}=useDisplay();const voice=useVibe64Voice();const inlineVoice=computed(()=>voice?.controller.state.binding?.presentation===`inline`&&voice.controller.state.binding.socketUrl!==`/api/vibe64/colleague/voice/ws`&&!voice.controller.state.nextTarget);const shown=computed(()=>open.value||Boolean(voice?.controller.state.visible&&!inlineVoice.value));const minimizedVoice=computed(()=>Boolean(voice?.controller.state.session&&!shown.value&&!inlineVoice.value));const listeningVoice=computed(()=>Boolean(minimizedVoice.value&&voice.controller.state.session.voice.listening.value&&!voice.controller.state.session.microphoneMuted.value));const viewer=inject$1(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const voiceTranscript=ref(null);const companionView=inject$1(VIBE64_COLLEAGUE_VIEW_KEY,null);const pageActivity=inject$1(VIBE64_PAGE_ACTIVITY_KEY,null);watch(shown,(value,was)=>{if(value!==was)pageActivity?.report(value?`colleague-opened`:`colleague-minimised`,{projectSlug:props.focus?.projectSlug})});const learningOwner=inject$1(VIBE64_LEARNING_KEY,null);const learningController=computed(()=>unref(learningOwner)||null);const learningStep=computed(()=>{const controller=learningController.value;const mode=unref(controller?.mode);const attemptId=mode?.on===true?unref(controller.lessonAttemptId)??mode.currentAttemptId:``;const stepId=unref(controller?.stepId);const lesson=unref(controller?.lesson);const steps=Array.isArray(lesson?.steps)?lesson.steps:[];const index=steps.findIndex(step=>step?.id===stepId);if(!attemptId||!stepId||index<0||lesson.attempt?.ended)return null;const results=unref(controller.results);const passed=Array.isArray(lesson?.passedStepIds)&&lesson.passedStepIds.includes(stepId)||Array.isArray(results)&&results.some(result=>result?.stepId===stepId&&result.outcome===`passed`);return{attemptId,stepId,lessonTitle:String(lesson.title||``),title:String(steps[index].title||``),position:index+1,total:steps.length,passed}});const stepButton=computed(()=>learningStep.value&&{class:[`vibe64-colleague__step-button`,{"vibe64-colleague__step-button--passed":learningStep.value.passed}],variant:`flat`,rounded:`pill`,height:32,"data-test":`colleague-current-step`,"aria-label":`Show the current lesson step: ${learningStep.value.title}`,title:`Current lesson step: ${learningStep.value.title}`});function showLearningStep(){const step=learningStep.value;const controller=learningController.value;if(!step||typeof controller?.openLesson!==`function`)return;const show=()=>applyLearningNavigation(controller,{attemptId:step.attemptId,stepId:step.stepId});if(xs.value&&shown.value)toggleConversation().then(show).catch(reportFailure);else Promise.resolve(show()).catch(reportFailure)}let returnFromLearning=false;function leaveForLearning(){returnFromLearning=true;return toggleConversation()}function reopenConversation(){if(shown.value)return;if(voice?.controller.state.session&&!inlineVoice.value&&!staleVoice.value)voice.controller.reveal();else open.value=true}watch(()=>unref(learningController.value?.coursesOpen)===true,(learningOpen,wasOpen)=>{if(learningOpen||!wasOpen)return;const back=returnFromLearning&&learningController.value?.hiddenBy===`learner`;returnFromLearning=false;if(back&&xs.value)reopenConversation()});const{holding:holdingAvatar,pointerDown:startAvatarPress,pointerUp:endAvatarPress,cancel:cancelAvatarPress,click:avatarClick}=useVoiceLauncher({open:openVoice,enabled:()=>props.holdToTalk&&!shown.value&&!voice?.controller.state.session,onError:reportFailure});async function toggleConversation(){const opening=!shown.value;if(shown.value){voice?.controller.minimize();open.value=false;launcher.value?.$el?.focus()}else if(voice?.controller.state.session&&!inlineVoice.value&&!staleVoice.value)voice.controller.reveal();else if(voice){open.value=true;await openVoice()}else open.value=true;if(opening&&bodyVisible.value)await focusConversationComposer()}async function openVoice(){if(!voice||freshOperation.value||freshBusy.value)return false;if(!conversation.runtime.value)await refresh();const target=conversation.runtime.value;if(!target)throw new Error(connectionError.value||`Colleague is not connected yet. Try again.`);let retained;const binding={preferenceTarget:`colleague`,presentation:`inline`,id:JSON.stringify([`colleague`,target.identity.actorKey]),conversationId:target.identity.conversationId,get label(){return props.name},get state(){return projectConversationVoiceState({turns:target.turns.value,status:target.snapshot.value?.status,interimReply:target.snapshot.value?.interimReply})},get available(){return mounted&&target.current.value},get adapter(){return conversation.runtime.value===target?adapter.value:null},setConversationTarget(element){voicePanelTarget.value=element},retain(){retained=target.retain()},release(){retained?.release();retained=null},socketUrl:`/api/vibe64/colleague/voice/ws`,captureContext:()=>({...props.focus}),submitText(text,{messageId,context}){return sendMessage(text,{messageId,focus:context||{}},target)},cancelWork:()=>target.cancel(),onTranscript(value,{canTake=false}={}){if(mounted&&conversation.runtime.value===target)voiceTranscript.value=value?{...value,canTake}:null},onVisual(value){emit(`voice-visual`,value)},onError:reportFailure};const opened=await voice.open(binding);if(!mounted||conversation.runtime.value!==target)return false;open.value=false;if(opened)return voice.controller.state.session;return false}async function closeText(){try{if(voice?.controller.state.session)await voice.controller.end({discard:true});open.value=false;launcher.value?.$el?.focus()}catch(error){reportFailure(error)}}const launcherTarget=inject$1(VIBE64_COLLEAGUE_LAUNCHER_KEY,null);const launcher=ref(null);const composerInput=ref(null);async function focusConversationComposer(){await nextTick$1();composerInput.value?.focus?.({preventScroll:true})}const panelTarget=ref(null);const desktopPanelTarget=ref(null);const conversationTarget=computed(()=>xs.value?panelTarget.value:desktopPanelTarget.value);const voicePanelTarget=ref(null);const voiceToolsTarget=ref(null);const avatarSize=ref(`compact`);const product=ref({conversationId:``,error:``});const productError=ref(``);const pointerNotice=ref(``);const actorKey=computed(()=>viewer?.value?.actorKey||viewer?.actorKey||``);const feedback=useShellWebErrorRuntime();const watchDetails=ref(false);const watchButton=ref(null);const operationDetails=ref(false);const operationButton=ref(null);const modelMenu=ref(false);const modelButton=ref(null);const sendButton=ref(null);const clientId=crypto.randomUUID();const working=computed(()=>conversation.runtime.value?.snapshot.value?.status===`working`);const watches=computed(()=>(product.value.watches||[]).filter(item=>!item.assignmentId&&[`active`,`pending`,`paused`].includes(item.status)));const operations=computed(()=>product.value.operations||(product.value.operation?[product.value.operation]:[]));const assignments=computed(()=>(product.value.assignments||[]).filter(item=>[`active`,`waiting`,`needs-user`].includes(item.status)));const watchControlCount=computed(()=>watches.value.length+assignments.value.length);let mounted=true;let revision=0;function reportFailure(error){const message=String(error?.message||error||`Colleague could not complete this request.`);feedback.report({source:`vibe64.colleague`,intent:`action-feedback`,severity:`error`,message,dedupeKey:`vibe64.colleague:${message}`,dedupeWindowMs:1e3})}async function requestColleague(suffix=``,options={}){const result=await props.request(`/api/vibe64/colleague${suffix}`,options);if(result?.ok===false)throw new Error(result.error||result.errors?.[0]?.message||`Colleague could not complete this request.`);return result}function apply(result,expectedRevision,expectedActor,allowRetarget=false){if(!mounted||expectedRevision!==revision||expectedActor!==actorKey.value)return false;const runtime=conversation.runtime.value;const changingConversation=Boolean(product.value.conversationId&&result.conversationId&&product.value.conversationId!==result.conversationId);const changingThread=Boolean(product.value.thread&&result.thread&&(product.value.thread.kind!==result.thread.kind||product.value.thread.attemptId!==result.thread.attemptId));if(changingConversation&&!changingThread&&runtime?.current.value&&runtime.identity.actorKey===expectedActor){if(voiceSession.value?.hasUnsentSpeech.value||pointerNotice.value&&!allowRetarget){pointerNotice.value=`Colleague changed in another tab. Resolve the old speech first: pause the microphone and discard newer words, or explicitly Stop voice chat. Then choose Refresh conversation. Your typed draft stays unsent.`;return false}}const savedDraft=changingConversation&&!changingThread&&runtime?.current.value&&runtime.identity.actorKey===expectedActor?runtime.draft.value:null;const{conversationId,thread,assistantSelection,watches,assignments,navigation,operation,operations,modelSetupRequired,error}=result;product.value={conversationId,thread,assistantSelection,watches,assignments,navigation,operation,operations,modelSetupRequired,error};if(savedDraft!==null&&actorKey.value===expectedActor)conversation.adapter.value.actions.setDraft(savedDraft);pointerNotice.value=``;handleNavigation(navigation);return true}async function navigateBrowser(command){const controller=learningController.value;if((command.projectSlug||command.route||command.guide&&command.guide.target!==`learning`)&&!command.learning&&unref(controller?.coursesOpen)&&typeof controller.minimise===`function`)await applyLearningNavigation(controller,{open:false});if(!command.guide)return props.navigate(command);return runTrainingGuideCommand(command,{navigateBrowser:props.navigate,view:{openFile(path){const view=companionView?.value;return view?.projectSlug===command.projectSlug&&view.sessionId===command.sessionId&&typeof view.openFile===`function`&&view.openFile(path)===true}}})}const colleagueNavigation=createColleagueNavigation({scope:()=>({mounted,actorKey:actorKey.value,clientId}),navigate:()=>props.navigate?navigateBrowser:null,beforeNavigate(command){if(xs.value&&shown.value&&typeof command.learning?.open===`boolean`)return leaveForLearning();if(xs.value&&shown.value&&command.learning)return toggleConversation();if(xs.value&&shown.value&&command.guide)return toggleConversation()},acknowledge:body=>requestColleague(`/navigation/ack`,{method:`POST`,body}),error:productError});const handleNavigation=colleagueNavigation.handle;const realtimeSocket=useRealtimeSocket();const api=createAssistantApi({request:(url,options)=>props.request(url,options),resolveBasePath:()=>`/api/assistant/app`,resolveSurfaceId:()=>`app`});const nativeApplicationAdmission=snapshot=>[`codex`,`claude`,`opencode`].includes(snapshot?.engine);const conversation=useAssistantConversation({conversationId:()=>product.value.conversationId,actorKey,surfaceId:`app`,hostSurfaceId:`app`,workspaceSlug:``,socket:realtimeSocket,api:{...api,sendConversationMessage(id,input){emit(`message-submit`,input.messageId);const activeVoice=voice?.controller.state;if(activeVoice?.binding?.socketUrl===`/api/vibe64/colleague/voice/ws`)activeVoice.session.inviteSpeech(input.messageId);return api.sendConversationMessage(id,input)}},clearDraftOn:`accepted`,queueWhileSending:true,admitWhileWorking:nativeApplicationAdmission,deferWhileWorking:snapshot=>!nativeApplicationAdmission(snapshot),draftWhileLoading:true,draftStorage:()=>{try{const storage=typeof window!==`undefined`?window.sessionStorage:null;return storage&&actorKey.value&&product.value.conversationId?{storage,key:`vibe64:colleague-composer:v1:${JSON.stringify([actorKey.value,product.value.conversationId])}`}:null}catch{return null}},data:()=>({clientId,focus:{...props.focus}}),onEvent(event){if(event.type===`application`){conversation.runtime.value?.reload();refresh()}},presentation:()=>({assistantLabel:props.name,systemLabel:`Vibe64`,variant:`task`,visible:open.value,userMessageFormat:`plain`,progressPreviewLimit:0,welcomeMessage:product.value.thread?.kind===`learn`?`I'm your teacher here. Ask me about a lesson, or press Teach me on a step.`:`Let's think it through. I can discuss an idea, check on your agents, or help you operate Vibe64.`,previewMessage:voicePreview.value,ariaLabel:`Message ${props.name}`,placeholder:`Talk it through with ${props.name}…`,rows:1,layout:`compact`,submitAriaLabel:conversation.runtime.value?.steerable.value?`Steer ${props.name}`:`Send to ${props.name}`,submitLabel:conversation.runtime.value?.steerable.value?`Steer`:`Send`})});const voiceSession=computed(()=>{const state=voice?.controller.state;const identity=conversation.runtime.value?.identity;return state?.binding?.socketUrl===`/api/vibe64/colleague/voice/ws`&&state.binding.conversationId===identity?.conversationId&&state.binding.id===JSON.stringify([`colleague`,identity?.actorKey])?state.session:null});const staleVoice=computed(()=>voice?.controller.state.binding?.socketUrl===`/api/vibe64/colleague/voice/ws`&&!voiceSession.value);watch(()=>conversation.runtime.value?.identity.conversationId,(id,previous)=>{if(!id||!previous||!staleVoice.value||!voice.controller.state.visible)return;waitForConversation().then(()=>staleVoice.value&&openVoice()).catch(reportFailure)});function voicePreviewActionsAllowed(messageId){const transcript=voiceTranscript.value;const session=voiceSession.value;const runtime=conversation.runtime.value;const selected=(session?.pendingTranscript.value)?.messageId===messageId||transcript?.id===messageId&&transcript.canTake;const receipt=runtime?.delivery.find?.(messageId);return Boolean(selected&&session&&session.canTakeTranscript(messageId)&&!session.sending.value&&(!receipt||receipt.status===`failed`)&&(!receipt||!runtime?.delivery.state.messages.some(message=>message.status===`uncertain`)))}function selectedVoiceTranscriptSession(messageId){const runtime=conversation.runtime.value;if(!mounted||!runtime?.current.value||!voicePreviewActionsAllowed(messageId))return null;return voiceSession.value}async function takeVoiceTranscript(messageId){const session=selectedVoiceTranscriptSession(messageId);if(!session)return false;const runtime=conversation.runtime.value;if(!await session.takeTranscript(messageId))return false;if(runtime.delivery.find?.(messageId)?.status===`failed`)runtime.delivery.cancel(messageId);return true}async function editVoiceTranscript(messageId){const session=selectedVoiceTranscriptSession(messageId);if(!session)return false;const runtime=conversation.runtime.value;if(!await session.beginTranscriptEdit(messageId))return false;if(runtime.delivery.find?.(messageId)?.status===`failed`)return runtime.delivery.cancel(messageId);return true}function updateVoiceTranscript(messageId,text){const session=selectedVoiceTranscriptSession(messageId);if(session?.pendingTranscript.value?.messageId!==messageId)return false;session.editTranscript(text,messageId);return true}async function sendVoiceTranscript(messageId){const session=selectedVoiceTranscriptSession(messageId);const pending=session?.pendingTranscript.value;if(pending?.messageId!==messageId||!pending.text.trim()||conversation.runtime.value?.delivery.state.messages.some(message=>message.status===`uncertain`))return false;await session.deliverTranscript();return true}const voicePreviews=computed(()=>{const transcript=voiceTranscript.value;const session=voiceSession.value;const pending=session?.pendingTranscript.value;const previews=pending?[{id:pending.messageId,text:pending.text}]:[];if(transcript&&transcript.id!==pending?.messageId)previews.push(transcript);return previews.map(preview=>{const review=pending?.messageId===preview.id;const allowed=voicePreviewActionsAllowed(preview.id);return{...preview,actions:{canDiscard:allowed,canEdit:allowed&&(!pending||review),discard:takeVoiceTranscript,edit:editVoiceTranscript,editing:review&&pending.editing===true,update:updateVoiceTranscript,send:review&&(pending.reviewBeforeSend||!session.sending.value)?sendVoiceTranscript:null,canSend:Boolean(review&&allowed&&!session.sending.value&&pending.text.trim()&&!conversation.runtime.value?.delivery.state.messages.some(message=>message.status===`uncertain`)),sending:Boolean(review&&session.sending.value)}}})});const voicePreview=computed(()=>voicePreviews.value.find(preview=>preview.id===voiceTranscript.value?.id)||voicePreviews.value[0]||null);const bodyVisible=computed(()=>open.value||Boolean((voiceSession.value||staleVoice.value)&&voice.controller.state.visible));const adapter=computed(()=>{const supplied=conversation.adapter.value;return{...supplied,conversation:{...supplied.conversation,reloadable:false,retainWhenHidden:true,visible:bodyVisible.value,previewMessages:voicePreviews.value},composer:{...supplied.composer,canSend:supplied.composer.canSend&&!voiceSession.value?.composerBlocked.value&&!freshOperation.value&&!freshBusy.value}}});const draft=computed({get:()=>adapter.value.composer.draft,set:value=>adapter.value.actions.setDraft(value)});const voiceFeedbackTarget=ref(null);const sending=computed(()=>conversation.runtime.value?.delivery.state.sending===true);const connectionError=computed(()=>productError.value||conversation.runtime.value?.error.value||``);const turnError=computed(()=>conversation.runtime.value?.snapshot.value?.error||product.value.error);const freshConfirm=ref(false);const freshBusy=ref(false);const freshError=ref(``);const freshOperation=shallowRef(null);const freshBlocked=computed(()=>{if(pointerNotice.value)return`Colleague already changed in another tab. Resolve the old speech, then choose Refresh conversation instead of starting another fresh request.`;const runtime=conversation.runtime.value;if(!runtime?.current.value||working.value||sending.value||runtime.stopping.value)return`Wait for the current request or Stop to finish before starting fresh.`;if(voice?.controller.state.busy||voice?.controller.state.nextTarget)return`Finish the pending voice switch before starting fresh.`;const session=voiceSession.value;if(!session)return``;if(session.starting?.value||session.capturing?.value||session.sending.value)return`Pause the microphone, then discard newer unsent speech with its X before starting fresh. You can also explicitly stop voice chat.`;const pending=session.pendingTranscript.value;if(pending&&runtime.delivery.find(pending.messageId)?.status!==`uncertain`)return`Send or discard the reviewed speech before starting fresh.`;return``});function showFreshConfirmation(){closeHistory();freshError.value=``;freshConfirm.value=true}function closeFreshConfirmation(){if(!freshBusy.value)freshConfirm.value=false}function freshScopeCurrent(operation){return mounted&&actorKey.value===operation.actor&&conversation.runtime.value===operation.runtime&&product.value.conversationId===operation.body.expectedConversationId}async function startFresh(){if(freshBusy.value)return false;if(freshBlocked.value){freshError.value=freshBlocked.value;return false}let operation=freshOperation.value;if(!operation){const runtime=conversation.runtime.value;const unconfirmedMessages=runtime.delivery.state.messages.filter(message=>message.status===`uncertain`).map(message=>{const request=message.payload?.request;const data=request?.data||message.payload?.data;return{messageId:message.id,text:request?.text??message.payload?.message,clientId:data?.clientId,...data?.focus?{focus:{...data.focus}}:{}}});if(unconfirmedMessages.length>8||unconfirmedMessages.some(message=>typeof message.text!==`string`||!message.text.trim()||message.text.length>24e3||!message.clientId)){freshError.value=`The original uncertain delivery evidence is incomplete or too large. Check delivery before starting fresh.`;return false}operation={actor:actorKey.value,runtime,session:voiceSession.value,binding:voiceSession.value?voice.controller.state.binding:null,body:{operationId:crypto.randomUUID(),expectedConversationId:product.value.conversationId,unconfirmedMessages}};revision+=1;freshOperation.value=operation}if(!freshScopeCurrent(operation))return false;freshBusy.value=true;freshError.value=``;try{const result=await requestColleague(`/conversations/fresh`,{method:`POST`,body:operation.body});if(!freshScopeCurrent(operation))return false;if(result.fresh?.operationId!==operation.body.operationId||result.fresh.previousConversationId!==operation.body.expectedConversationId||!result.fresh.conversationId||!result.conversationId)throw new Error(`The fresh conversation receipt did not match this request. Retry the same operation.`);if(freshBlocked.value||operation.session&&voice.controller.state.session&&(voice.controller.state.session!==operation.session||voice.controller.state.binding!==operation.binding))throw new Error(freshBlocked.value||`The voice conversation changed. Return to the original conversation before retrying this fresh operation.`);if(operation.session&&voice.controller.state.session===operation.session)await voice.controller.end({discard:true});if(!freshScopeCurrent(operation))return false;if(operation.session&&(voice.controller.state.session||voice.controller.state.busy||voice.controller.state.nextTarget))throw new Error(`Another voice conversation opened during retirement. Resolve it before retrying this fresh operation.`);apply(result,++revision,operation.actor,true);if(mounted&&actorKey.value===operation.actor&&product.value.conversationId===result.conversationId){freshBusy.value=false;freshOperation.value=null;freshConfirm.value=false;productError.value=``;open.value=true;voiceTranscript.value=null;const controller=voice?.controller;if(controller&&!controller.state.session&&!controller.state.binding&&!controller.state.busy&&!controller.state.nextTarget){try{await openVoice()}catch(error){if(mounted&&actorKey.value===operation.actor&&product.value.conversationId===result.conversationId)reportFailure(new Error(`The fresh conversation is ready, but its voice controls could not open. Reopen Colleague to try again. ${error.message}`))}if(!mounted||actorKey.value!==operation.actor||product.value.conversationId!==result.conversationId)return false;open.value=true}return true}return false}catch(error){if(freshScopeCurrent(operation))freshError.value=`${error.message} Nothing was resent. Retry this same fresh operation to check its result.`;return false}finally{if(freshOperation.value===operation)freshBusy.value=false}}const historyOpen=ref(false);const historyLoading=ref(false);const historyError=ref(``);const historyConversations=ref([]);const historyNextOffset=ref(null);const historyHasMore=ref(false);const historyId=ref(``);const historyPages=ref([]);const historyUnconfirmed=ref([]);const historyUnconfirmedDelivery=ref(null);const historyTurns=computed(()=>mergeConversationLogPages(historyPages.value).conversationLog);const historyPagination=computed(()=>historyPages.value[0]?.pagination||{});let historyRevision=0;function closeHistory(){historyRevision+=1;historyOpen.value=false;historyLoading.value=false;historyId.value=``;historyPages.value=[];historyConversations.value=[];historyUnconfirmed.value=[];historyUnconfirmedDelivery.value=null;historyError.value=``}async function loadHistory({more=false}={}){if(historyLoading.value)return;const expectedActor=actorKey.value;const expectedHistory=++historyRevision;historyOpen.value=true;historyId.value=``;historyPages.value=[];historyUnconfirmed.value=[];historyUnconfirmedDelivery.value=null;historyLoading.value=true;historyError.value=``;try{const result=await requestColleague(`/conversations/history?offset=${more?historyNextOffset.value:0}&limit=20`,{method:`GET`});if(!mounted||expectedActor!==actorKey.value||expectedHistory!==historyRevision||!historyOpen.value)return;historyConversations.value=more?[...historyConversations.value,...result.conversations]:result.conversations;historyNextOffset.value=result.nextOffset;historyHasMore.value=result.hasMore}catch(error){if(mounted&&expectedActor===actorKey.value&&expectedHistory===historyRevision)historyError.value=error.message}finally{if(expectedHistory===historyRevision)historyLoading.value=false}}async function readHistoryPage(conversationId,{more=false,complete}={}){if(historyLoading.value){complete?.({changed:false});return}let changed=false;const expectedActor=actorKey.value;const expectedHistory=++historyRevision;const before=more?historyPagination.value.nextBeforeTurnId:``;historyId.value=conversationId;if(!more){historyPages.value=[];historyUnconfirmed.value=[];historyUnconfirmedDelivery.value=null}historyLoading.value=true;historyError.value=``;try{const result=await requestColleague(`/conversations/history/page?conversationId=${encodeURIComponent(conversationId)}&limit=20${before?`&beforeTurnId=${encodeURIComponent(before)}`:``}`,{method:`GET`});if(!mounted||expectedActor!==actorKey.value||expectedHistory!==historyRevision||!historyOpen.value)return;if(result.id!==conversationId||result.readOnly!==true)throw new Error(`The saved conversation response did not match this read-only history.`);historyPages.value=[normalizeConversationLogPage(result),...more?historyPages.value:[]];historyUnconfirmed.value=result.unconfirmedMessages||[];historyUnconfirmedDelivery.value=result.unconfirmedDelivery||null;changed=true}catch(error){if(mounted&&expectedActor===actorKey.value&&expectedHistory===historyRevision)historyError.value=error.message}finally{if(expectedHistory===historyRevision)historyLoading.value=false;complete?.({changed})}}realtimeSocket.on(`connect`,refresh);useRealtimeEvent({event:VIBE64_TRAINING_LEARNER_CHANGED_EVENT,matches:({payload}={})=>[`learning-mode`,`lesson`].includes(payload?.reason),onEvent:()=>{refresh()}});async function refresh(options={}){if(freshOperation.value)return;const expectedRevision=++revision;const expectedActor=actorKey.value;try{apply(await requestColleague(`?clientId=${encodeURIComponent(clientId)}`,{method:`GET`}),expectedRevision,expectedActor,options?.allowRetarget===true);if(mounted&&expectedRevision===revision&&expectedActor===actorKey.value)productError.value=``}catch(error){if(mounted&&expectedRevision===revision&&expectedActor===actorKey.value)productError.value=error.message}}async function sendMessage(message,options={},target=conversation.runtime.value){if(!target?.available.value)return false;return target.send({message,data:{clientId,focus:options.focus}},{messageId:options.messageId})}function waitForConversation(timeoutMs=1e4){return new Promise((resolve,reject)=>{let stop=null;const timer=setTimeout(()=>finish(new Error(connectionError.value||`Colleague is not connected yet. Press Teach me again.`)),timeoutMs);function finish(error,target){clearTimeout(timer);if(stop)stop();else queueMicrotask(()=>stop?.());if(error)reject(error);else resolve(target)}stop=watch(()=>conversation.runtime.value?.available.value?conversation.runtime.value:null,target=>{if(!mounted)finish(new Error(`Colleague left this browser view.`));else if(target)finish(null,target)},{immediate:true})})}const teachNeedsModel=ref(false);async function revealForLearning(){teachNeedsModel.value=false;reopenConversation();await refresh();if(product.value.modelSetupRequired){teachNeedsModel.value=true;return false}await waitForConversation();if(bodyVisible.value)await focusConversationComposer();return true}watch(()=>product.value.modelSetupRequired,required=>{if(!required)teachNeedsModel.value=false});const stopLearningRequests=watchColleagueLearningRequests({learning:learningController.value,actorKey:()=>actorKey.value,reveal:revealForLearning,report:reportFailure,send:async message=>sendMessage(message,{focus:{...props.focus}})});onBeforeUnmount(stopLearningRequests);async function submit(){if(freshOperation.value||freshBusy.value||voiceSession.value?.composerBlocked.value)return;const target=conversation.runtime.value;if(product.value.modelSetupRequired)return;if(!target?.canSubmit.value){if(draft.value.trim()&&connectionError.value)reportFailure(connectionError.value);return}const result=await adapter.value.actions.submit();if((result===false||result?.ok===false)&&target.current.value){const failure=target.delivery.find(target.draftMessageId.value)?.error||target.error.value;await refresh();if(failure&&!product.value.modelSetupRequired)reportFailure(failure)}}async function stop(){const target=conversation.runtime.value;if(await target?.cancel()===false&&target.current.value&&target.error.value)reportFailure(target.error.value)}async function saveSelection(selection,{report=true}={}){if(freshOperation.value||freshBusy.value)return{ok:false,error:`Colleague is busy; try again in a moment.`};const expectedRevision=++revision;const expectedActor=actorKey.value;try{const result=await api.selectConversation(product.value.conversationId,selection);apply(result,expectedRevision,expectedActor);if(mounted&&expectedActor===actorKey.value){productError.value=``;conversation.runtime.value?.reload()}return result}catch(error){if(report&&expectedActor===actorKey.value)reportFailure(error);return{ok:false,error:String(error?.message||error)}}}const selectModel=assistantSelection=>saveSelection({assistantSelection});async function withLabels(selection){try{const query=new URLSearchParams({engineId:selection.engineId,modelProviderId:selection.modelProviderId,allConnectedModels:`true`,connectedOnly:`true`});return{selection,...selectionLabels(await requestColleague(`/models?${query}`,{method:`GET`}),selection)}}catch{return{selection,...selectionLabels(null,selection)}}}async function conversationReady(){if(!product.value.conversationId)await refresh();return Boolean(product.value.conversationId)}const colleagueModel={async current(){await conversationReady();return product.value.assistantSelection?withLabels(product.value.assistantSelection):null},async select(assistantSelection){if(!await conversationReady())return{ok:false,error:productError.value||`Colleague is not ready yet; try again in a moment.`};const result=await saveSelection({assistantSelection},{report:false});const selection=result?.ok===false?null:result?.assistantSelection;if(!selection)return{ok:false,error:result?.error||`Colleague could not switch to this AI.`};return{ok:true,...await withLabels(selection)}},async sayHello(message){if(!await conversationReady())return{ok:false,error:productError.value||`Colleague is not ready yet.`};const target=await waitForConversation();const sent=target.turns.value.length;if(!await sendMessage(message,{focus:{...props.focus}},target))return{ok:false,error:target.error.value||`Colleague didn't receive it.`};const outcome=()=>{if(target.turns.value.length<=sent)return null;const{status,error}=target.turns.value.at(-1)?.assistant||{};const failure=target.snapshot.value?.status===`working`?``:target.snapshot.value?.error;if([`failed`,`interrupted`].includes(status)||failure)return{ok:false,error:failure||error||`It stopped with an error.`};const reply=latestAssistantMessageAwaitingUserReply(target.turns.value);return reply?{ok:true,reply}:null};let stop=null;const result=await new Promise(resolve=>{const timer=setTimeout(()=>resolve({ok:false,error:`It took too long to reply.`}),15e3);stop=watch(outcome,value=>{if(value){clearTimeout(timer);resolve(value)}},{immediate:true})});stop();return result},async reveal(){reopenConversation();await focusConversationComposer()}};let unregisterModel=null;async function changeWatch(item,operation){try{const watch=typeof item===`string`?watches.value.find(value=>value.watchId===item)||{watchId:item}:item;await requestColleague(`/watches/${operation}`,{method:`POST`,body:{watchId:watch.watchId}});await refresh()}catch(error){reportFailure(error)}}async function openOperationTarget(item){const target=item?.target;if(!target?.projectSlug||!props.navigate)return reportFailure(`This operation target cannot be opened from the current app.`);try{const result=await props.navigate({projectSlug:target.projectSlug,...target.sessionId?{sessionId:target.sessionId}:{},...target.conversationId?{conversationId:target.conversationId}:{}});const opened=result?.focus||result;if(opened?.projectSlug!==target.projectSlug||target.sessionId&&opened.sessionId!==target.sessionId||target.conversationId&&opened.conversationId!==target.conversationId)throw new Error(`The operation target did not open.`);operationDetails.value=false}catch(error){reportFailure(error)}}function prepareOperationRecovery(item){if(!item?.id||![`failed`,`unknown`].includes(item.status))return false;const target=[item.target?.projectSlug,item.target?.sessionId,item.target?.conversationId].filter(Boolean).join(` / `)||`its saved target`;draft.value=item.status===`unknown`?`Inspect the saved target for the uncertain ${item.label} receipt (${item.id}) at ${target}. Tell me what actually happened. Do not repeat the operation unless inspection proves no effect and I explicitly ask you to continue.`:`Recheck the saved target for the failed ${item.label} receipt (${item.id}) at ${target}, then retry only if the operation is still needed and safe. Do not repeat any confirmed side effect.`;operationDetails.value=false;return true}watch(open,value=>{if(value)refresh()});watch(actorKey,()=>{revision+=1;freshOperation.value=null;freshConfirm.value=false;freshBusy.value=false;freshError.value=``;closeHistory();watchDetails.value=false;product.value={conversationId:``,error:``};productError.value=``;pointerNotice.value=``;colleagueNavigation.reset();voiceTranscript.value=null;refresh()},{flush:`sync`});const focusBinding=createColleagueFocusBinding({socket:realtimeSocket,readFocus:()=>({clientId,focus:props.focus}),onError:message=>{if(mounted)productError.value=message}});watch([actorKey,()=>props.focus],([actor],[previousActor])=>{if(previousActor!==void 0&&actor!==previousActor)focusBinding.release();focusBinding.update()},{deep:true,immediate:true});onMounted(()=>{if(voice)voice.launcher.value=launcher.value?.$el;refresh();unregisterModel=registerVibe64ColleagueModel(colleagueModel);window.addEventListener(`blur`,cancelAvatarPress);window.addEventListener(`pagehide`,cancelAvatarPress)});onBeforeUnmount(()=>{if(voice?.launcher.value===launcher.value?.$el)voice.launcher.value=null;realtimeSocket.off(`connect`,refresh);focusBinding.close();unregisterModel?.();mounted=false;if(voice?.controller.state.binding?.socketUrl===`/api/vibe64/colleague/voice/ws`)voice.controller.end({discard:true});cancelAvatarPress();revision+=1;window.removeEventListener(`blur`,cancelAvatarPress);window.removeEventListener(`pagehide`,cancelAvatarPress)});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[(openBlock(),createBlock(Teleport,{to:unref(launcherTarget)||`body`,disabled:!unref(launcherTarget)},[createVNode(VBtn,{ref_key:`launcher`,ref:launcher,class:normalizeClass([`vibe64-colleague__launcher`,{"vibe64-colleague__launcher--floating":!unref(launcherTarget),"vibe64-colleague__launcher--listening":unref(holdingAvatar)}]),icon:``,variant:`text`,width:`48`,height:`48`,"data-vibe64-guide":`colleague`,"aria-label":shown.value?`Minimize ${unref(voice)?.controller.state.binding?.label||__props.name}`:minimizedVoice.value?`Reopen ${unref(voice).controller.state.binding.label||`Assistant`} voice chat${listeningVoice.value?` · Listening`:``}`:`Open ${__props.name}`,title:shown.value?`Minimize conversation`:listeningVoice.value?`Listening · Reopen voice chat`:minimizedVoice.value?`Reopen voice chat`:__props.holdToTalk?`${__props.name} · Hold to talk`:__props.name,"aria-haspopup":`dialog`,"aria-expanded":shown.value,onPointerdown:unref(startAvatarPress),onPointerup:unref(endAvatarPress),onPointercancel:unref(cancelAvatarPress),onLostpointercapture:unref(cancelAvatarPress),onClickCapture:unref(avatarClick),onClick:_cache[0]||(_cache[0]=$event=>toggleConversation($event).catch(reportFailure)),onContextmenu:_cache[1]||(_cache[1]=withModifiers(()=>{},[`prevent`]))},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_1$25,[renderSlot(_ctx.$slots,`avatar`,{state:working.value?`thinking`:`idle`},void 0,true)]),minimizedVoice.value?(openBlock(),createElementBlock(`span`,{key:0,class:normalizeClass([`vibe64-colleague__voice-badge`,{"vibe64-colleague__voice-badge--listening":listeningVoice.value}]),"aria-hidden":`true`},[createVNode(VIcon,{icon:listeningVoice.value?unref(mdiMicrophone):unref(mdiHeadset),size:`14`},null,8,[`icon`])],2)):createCommentVNode(``,true),working.value?(openBlock(),createElementBlock(`span`,{key:1,class:`vibe64-colleague__working`,"aria-label":`${__props.name} is working`},null,8,_hoisted_2$21)):createCommentVNode(``,true)]),_:3},8,[`class`,`aria-label`,`title`,`aria-expanded`,`onPointerdown`,`onPointerup`,`onPointercancel`,`onLostpointercapture`,`onClickCapture`]),minimizedVoice.value?(openBlock(),createBlock(VBtn,{key:0,class:normalizeClass([`vibe64-colleague__voice-stop`,{"vibe64-colleague__voice-stop--floating":!unref(launcherTarget)}]),icon:unref(mdiClose),variant:`text`,width:`48`,height:`48`,"aria-label":`Stop voice chat`,title:`Stop voice chat`,onClick:closeText},null,8,[`class`,`icon`])):createCommentVNode(``,true)],8,[`to`,`disabled`])),createVNode(unref(VNavigationDrawer),{"model-value":bodyVisible.value&&!unref(xs),location:`right`,width:380,order:1,mobile:false,scrim:false,"disable-resize-watcher":``,"disable-route-watcher":``,touchless:``,tag:`section`,"aria-label":`${__props.name} conversation`,onKeydown:withKeys(withModifiers(closeText,[`stop`]),[`esc`])},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$20,[createBaseVNode(`header`,_hoisted_4$15,[createBaseVNode(`span`,_hoisted_5$15,toDisplayString(__props.name),1),learningStep.value&&!unref(xs)?(openBlock(),createBlock(VBtn,mergeProps({key:0},stepButton.value,{onClick:showLearningStep}),{default:withCtx(()=>[createVNode(VIcon,{icon:learningStep.value.passed?unref(mdiCheck):unref(mdiSchoolOutline),size:`18`,start:``},null,8,[`icon`]),createTextVNode(`Step `+toDisplayString(learningStep.value.position)+`/`+toDisplayString(learningStep.value.total),1)]),_:1},16)):createCommentVNode(``,true),createVNode(VBtn,{icon:unref(mdiMinus),variant:`text`,"aria-label":`Minimize conversation`,title:`Minimize conversation`,onClick:_cache[2]||(_cache[2]=$event=>toggleConversation($event).catch(reportFailure))},null,8,[`icon`]),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":`Close ${__props.name}`,title:`Close ${__props.name}`,onClick:closeText},null,8,[`icon`,`aria-label`,`title`])]),createVNode(unref(ConversationDialog_default),{presentation:`inline`,title:__props.name,class:`vibe64-colleague__inline`},{default:withCtx(()=>[createBaseVNode(`div`,{ref_key:`desktopPanelTarget`,ref:desktopPanelTarget,class:`vibe64-colleague__panel`},null,512)]),_:1},8,[`title`])])]),_:1},8,[`model-value`,`aria-label`,`onKeydown`]),createVNode(unref(ConversationDialog_default),{"model-value":bodyVisible.value&&unref(xs),title:__props.name,"close-label":`Close ${__props.name}`,minimizable:``,activator:launcher.value?.$el,"open-on-click":false,eager:``,"onUpdate:modelValue":_cache[3]||(_cache[3]=value=>!value&&closeText()),onMinimize:_cache[4]||(_cache[4]=$event=>toggleConversation($event).catch(reportFailure))},createSlots({default:withCtx(()=>[createBaseVNode(`div`,{ref_key:`panelTarget`,ref:panelTarget,class:`vibe64-colleague__panel`},null,512)]),_:2},[learningStep.value&&unref(xs)?{name:`header-actions`,fn:withCtx(()=>[createVNode(VBtn,mergeProps(stepButton.value,{onClick:showLearningStep}),{default:withCtx(()=>[createVNode(VIcon,{icon:learningStep.value.passed?unref(mdiCheck):unref(mdiSchoolOutline),size:`18`,start:``},null,8,[`icon`]),createTextVNode(`Step `+toDisplayString(learningStep.value.position)+`/`+toDisplayString(learningStep.value.total),1)]),_:1},16)]),key:`0`}:void 0]),1032,[`model-value`,`title`,`close-label`,`activator`]),(openBlock(),createBlock(Teleport,{to:voicePanelTarget.value||conversationTarget.value||`body`,disabled:!voicePanelTarget.value&&!conversationTarget.value},[withDirectives(createBaseVNode(`aside`,{class:`vibe64-colleague`,"aria-label":__props.name},[!product.value.modelSetupRequired?(openBlock(),createElementBlock(`div`,_hoisted_7$10,[createVNode(unref(AiOnboardingNudge_default))])):createCommentVNode(``,true),voiceSession.value&&!voicePanelTarget.value&&unref(voice).controller.state.error?(openBlock(),createBlock(VAlert,{key:1,type:`error`,density:`compact`,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(voice).controller.state.error),1)]),_:1})):createCommentVNode(``,true),pointerNotice.value?(openBlock(),createBlock(VAlert,{key:2,variant:`tonal`,type:`info`,role:`status`},{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(pointerNotice.value),1),createVNode(VBtn,{disabled:Boolean(voiceSession.value?.hasUnsentSpeech.value),onClick:_cache[5]||(_cache[5]=$event=>refresh({allowRetarget:true}))},{default:withCtx(()=>[..._cache[26]||(_cache[26]=[createTextVNode(`Refresh conversation`,-1)])]),_:1},8,[`disabled`])]),_:1})):createCommentVNode(``,true),product.value.modelSetupRequired?(openBlock(),createBlock(VAlert,{key:3,class:`vibe64-colleague__notice`,variant:`tonal`,type:`warning`,role:`status`},{default:withCtx(()=>[teachNeedsModel.value?(openBlock(),createElementBlock(`p`,_hoisted_8$10,`Connect an AI first, then press Teach me again. Nothing was sent.`)):(openBlock(),createElementBlock(`p`,_hoisted_9$8,`Connect an AI first. Your message stays here until you do.`)),createVNode(VBtn,{variant:`flat`,color:`primary`,"min-height":`48`,onClick:_cache[6]||(_cache[6]=$event=>unref(requestVibe64AiOnboarding)())},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(`Set up your AI`,-1)])]),_:1})]),_:1})):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_10$7,[createVNode(unref(AssistantConversationElement_default),{adapter:adapter.value,label:`${__props.name} conversation`,"avatar-size":avatarSize.value,"onUpdate:avatarSize":_cache[15]||(_cache[15]=$event=>avatarSize.value=$event)},createSlots({"avatar-tools":withCtx(()=>[createBaseVNode(`div`,{ref_key:`voiceToolsTarget`,ref:voiceToolsTarget,class:`vibe64-colleague__voice-tools`},null,512)]),"avatar-control":withCtx(()=>[avatarSize.value===`hidden`&&voiceSession.value?.voice.listening.value&&!voiceSession.value.microphoneMuted.value?(openBlock(),createElementBlock(`span`,_hoisted_11$7,[createVNode(VIcon,{size:`20`,icon:unref(mdiMicrophone)},null,8,[`icon`])])):createCommentVNode(``,true),avatarSize.value===`hidden`&&voiceSession.value?.voice.speaking.value?(openBlock(),createElementBlock(`span`,_hoisted_12$7,[createVNode(VIcon,{size:`20`,icon:unref(mdiVolumeHigh)},null,8,[`icon`])])):createCommentVNode(``,true)]),"system-message":withCtx(({message})=>[createVNode(unref(_sfc_main$65),{message,onCheckDelivery:_cache[7]||(_cache[7]=$event=>adapter.value.actions.checkDelivery($event))},null,8,[`message`]),message.delivery?(openBlock(),createBlock(VBtn,{key:0,variant:`tonal`,"min-height":`48`,disabled:freshBusy.value,onClick:showFreshConfirmation},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`Start fresh`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)]),composer:withCtx(({adapter:{composer}})=>[createBaseVNode(`div`,_hoisted_13$7,[createVNode(unref(AssistantPromptInput_default),{ref_key:`composerInput`,ref:composerInput,modelValue:draft.value,"onUpdate:modelValue":_cache[12]||(_cache[12]=$event=>draft.value=$event),class:`vibe64-colleague__composer`,"aria-label":composer.ariaLabel,placeholder:composer.placeholder,disabled:composer.disabled,"submit-enabled":composer.canSend,rows:composer.rows,density:composer.density,"tab-to-submit":``,onSubmit:submit,onTabToSubmit:_cache[13]||(_cache[13]=$event=>sendButton.value?.$el?.focus()),onKeydown:_cache[14]||(_cache[14]=withKeys($event=>$event.defaultPrevented&&$event.stopPropagation(),[`tab`]))},{"input-start":withCtx(()=>[turnError.value&&turnError.value!==adapter.value.conversation.error?(openBlock(),createElementBlock(`span`,_hoisted_14$7,toDisplayString(turnError.value),1)):connectionError.value&&connectionError.value!==adapter.value.conversation.error?(openBlock(),createElementBlock(`span`,{key:1,class:`text-body-small`,role:`status`,title:connectionError.value},`Reconnecting…`,8,_hoisted_15$7)):createCommentVNode(``,true)]),footer:withCtx(()=>[createBaseVNode(`div`,_hoisted_16$6,[createVNode(VBtn,{ref_key:`modelButton`,ref:modelButton,icon:unref(mdiTuneVariant),size:`small`,variant:`text`,"aria-label":`Choose ${__props.name} model`,title:product.value.assistantSelection?.modelId||`Choose model`,disabled:working.value||sending.value||Boolean(freshOperation.value),onClick:_cache[8]||(_cache[8]=$event=>modelMenu.value=true)},null,8,[`icon`,`aria-label`,`title`,`disabled`]),createVNode(VBtn,{icon:unref(mdiHistory),size:`small`,variant:`text`,"aria-label":`Previous conversations`,title:`Previous conversations`,onClick:_cache[9]||(_cache[9]=$event=>loadHistory())},null,8,[`icon`]),operations.value.length?(openBlock(),createBlock(VBtn,{key:0,ref_key:`operationButton`,ref:operationButton,size:`small`,"min-height":`48`,variant:`text`,"aria-label":`Recent operations (${operations.value.length})`,title:`Recent operations`,"aria-haspopup":`dialog`,"aria-expanded":operationDetails.value,onClick:_cache[10]||(_cache[10]=$event=>operationDetails.value=true)},{default:withCtx(()=>[createTextVNode(` Operations `+toDisplayString(operations.value.length),1)]),_:1},8,[`aria-label`,`aria-expanded`])):createCommentVNode(``,true),watches.value.length||assignments.value.length?(openBlock(),createBlock(VBtn,{key:1,ref_key:`watchButton`,ref:watchButton,size:`small`,"min-height":`48`,variant:`text`,"aria-label":`Watches and assignments (${watchControlCount.value})`,title:`Watches and assignments`,"aria-haspopup":`dialog`,"aria-expanded":watchDetails.value,onClick:_cache[11]||(_cache[11]=$event=>watchDetails.value=true)},{default:withCtx(()=>[createVNode(VIcon,{icon:unref(mdiEyeOutline)},null,8,[`icon`]),createBaseVNode(`span`,_hoisted_17$6,toDisplayString(watchControlCount.value),1)]),_:1},8,[`aria-label`,`aria-expanded`])):createCommentVNode(``,true),freshOperation.value?(openBlock(),createBlock(VBtn,{key:2,variant:`text`,disabled:freshBusy.value,onClick:showFreshConfirmation},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`Resume fresh operation`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_18$6,[composer.canStop?(openBlock(),createBlock(VBtn,{key:0,icon:unref(mdiStop),size:`small`,variant:`text`,"aria-label":`Stop ${__props.name}`,title:`Stop assistant`,onClick:stop},null,8,[`icon`,`aria-label`])):createCommentVNode(``,true),createVNode(VBtn,{ref_key:`sendButton`,ref:sendButton,icon:working.value?unref(mdiArrowTopRight):unref(mdiSend),size:`small`,variant:`flat`,color:`primary`,"aria-label":composer.submitAriaLabel,title:composer.submitLabel,disabled:!composer.canSend,onClick:submit},null,8,[`icon`,`aria-label`,`title`,`disabled`])])]),createBaseVNode(`div`,{ref_key:`voiceFeedbackTarget`,ref:voiceFeedbackTarget,class:`vibe64-colleague__voice-feedback`},null,512)]),_:2},1032,[`modelValue`,`aria-label`,`placeholder`,`disabled`,`submit-enabled`,`rows`,`density`]),voiceSession.value?(openBlock(),createBlock(unref(VoiceConversationControls_default),{key:unref(voice).controller.state.binding.id,session:voiceSession.value,disabled:unref(voice).controller.state.busy,compact:``,"icon-only":``,"tools-target":voiceToolsTarget.value,"feedback-target":voiceFeedbackTarget.value,"review-in-transcript":Boolean(voicePreview.value)},{"settings-control":withCtx(()=>[createVNode(unref(VoiceConversationSettings_default),{voice:voiceSession.value.voice,compact:``,onError:reportFailure},createSlots({_:2},[unref(voice).Settings?{name:`default`,fn:withCtx(settings=>[(openBlock(),createBlock(resolveDynamicComponent(unref(voice).Settings),mergeProps(settings,{binding:unref(voice).controller.state.binding}),null,16,[`binding`]))]),key:`0`}:void 0]),1032,[`voice`])]),_:1},8,[`session`,`disabled`,`tools-target`,`feedback-target`,`review-in-transcript`])):createCommentVNode(``,true)])]),_:2},[_ctx.$slots.avatar?{name:`avatar`,fn:withCtx(size=>[renderSlot(_ctx.$slots,`avatar`,mergeProps(voiceSession.value?.avatarVisual.value||{state:working.value?`thinking`:`idle`},{size:size.size,height:size.height}),void 0,true)]),key:`0`}:void 0]),1032,[`adapter`,`label`,`avatar-size`])]),createVNode(Vibe64SessionAssistantMenu_default,{modelValue:modelMenu.value,"onUpdate:modelValue":_cache[16]||(_cache[16]=$event=>modelMenu.value=$event),target:modelButton.value?.$el,selection:product.value.assistantSelection,"save-selection":selectModel,"catalog-path":`/api/vibe64/colleague/models`,"changes-disabled":working.value||sending.value||Boolean(freshOperation.value)},null,8,[`modelValue`,`target`,`selection`,`changes-disabled`])],8,_hoisted_6$11),[[vShow,bodyVisible.value]])],8,[`to`,`disabled`])),createVNode(VDialog,{modelValue:watchDetails.value,"onUpdate:modelValue":_cache[18]||(_cache[18]=$event=>watchDetails.value=$event),activator:watchButton.value?.$el||modelButton.value?.$el,"open-on-click":false,fullscreen:unref(xs),"max-width":`620`,scrollable:``,"aria-label":`Watches and assignments`},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-colleague__watch-dialog`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`vibe64-colleague__watch-title d-flex align-center text-title-large`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_19$5,[createVNode(VIcon,{icon:unref(mdiEyeOutline),size:`22`},null,8,[`icon`])]),_cache[30]||(_cache[30]=createBaseVNode(`span`,{class:`flex-grow-1`},`Watches and assignments`,-1)),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":`Close watches and assignments`,title:`Close watches and assignments`,onClick:_cache[17]||(_cache[17]=$event=>watchDetails.value=false)},null,8,[`icon`])]),_:1}),createVNode(VCardText,{class:`vibe64-colleague__watch-details`},{default:withCtx(()=>[watches.value.length?(openBlock(),createElementBlock(`section`,_hoisted_20$5,[createBaseVNode(`p`,_hoisted_21$5,`Watches (`+toDisplayString(watches.value.length)+`)`,1),createBaseVNode(`ul`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(watches.value,item=>{return openBlock(),createElementBlock(`li`,{key:item.watchId},[createBaseVNode(`div`,null,[createBaseVNode(`strong`,null,toDisplayString(item.projectSlug||`Workspace`),1),_cache[31]||(_cache[31]=createTextVNode(` · `,-1)),createBaseVNode(`span`,{class:`vibe64-colleague__watch-chip`,"data-status":item.status},toDisplayString(item.status),9,_hoisted_22$5),createBaseVNode(`p`,null,toDisplayString(item.question),1),item.error?(openBlock(),createElementBlock(`p`,_hoisted_23$5,toDisplayString(item.error),1)):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_24$4,[item.status===`paused`?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,"min-height":`48`,"aria-label":`Resume watch: ${item.question}`,onClick:$event=>changeWatch(item,`resume`)},{default:withCtx(()=>[..._cache[32]||(_cache[32]=[createTextVNode(`Resume`,-1)])]),_:1},8,[`aria-label`,`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`text`,"min-height":`48`,"aria-label":`Cancel watch: ${item.question}`,onClick:$event=>changeWatch(item,`cancel`)},{default:withCtx(()=>[..._cache[33]||(_cache[33]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`aria-label`,`onClick`])])])}),128))])])):createCommentVNode(``,true),assignments.value.length?(openBlock(),createElementBlock(`section`,_hoisted_25$3,[createBaseVNode(`p`,_hoisted_26$2,`Ongoing assignments (`+toDisplayString(assignments.value.length)+`)`,1),createBaseVNode(`ul`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(assignments.value,item=>{return openBlock(),createElementBlock(`li`,{key:item.assignmentId},[createBaseVNode(`strong`,null,toDisplayString(item.projectSlug),1),createTextVNode(` · `+toDisplayString(item.status)+` · `+toDisplayString(item.turnLimit-item.turnsUsed)+` turns left `,1),createBaseVNode(`p`,null,toDisplayString(item.summary),1),createBaseVNode(`p`,null,toDisplayString(item.criteria),1)])}),128))])])):createCommentVNode(``,true),!watches.value.length&&!assignments.value.length?(openBlock(),createElementBlock(`p`,_hoisted_27$2,`No ongoing watches or assignments.`)):createCommentVNode(``,true)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`activator`,`fullscreen`]),createVNode(VDialog,{modelValue:operationDetails.value,"onUpdate:modelValue":_cache[20]||(_cache[20]=$event=>operationDetails.value=$event),activator:operationButton.value?.$el||modelButton.value?.$el,"open-on-click":false,fullscreen:unref(xs),"max-width":`620`,scrollable:``,"aria-label":`Recent operations`},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,{class:`d-flex align-center text-title-large`},{default:withCtx(()=>[_cache[34]||(_cache[34]=createBaseVNode(`span`,{class:`flex-grow-1`},`Recent operations`,-1)),createVNode(VBtn,{icon:unref(mdiClose),variant:`text`,"aria-label":`Close recent operations`,title:`Close recent operations`,onClick:_cache[19]||(_cache[19]=$event=>operationDetails.value=false)},null,8,[`icon`])]),_:1}),createVNode(VCardText,{class:`vibe64-colleague__operation-details`},{default:withCtx(()=>[_cache[38]||(_cache[38]=createBaseVNode(`p`,null,`These receipts report what Vibe64 actually recorded. An uncertain receipt is not safe to repeat until its target is inspected.`,-1)),createBaseVNode(`ol`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(operations.value,item=>{return openBlock(),createElementBlock(`li`,{key:item.id},[createBaseVNode(`p`,null,[createBaseVNode(`strong`,null,toDisplayString(item.label),1),createTextVNode(` · `+toDisplayString(item.status),1),item.at?(openBlock(),createElementBlock(`span`,_hoisted_28$2,` · `+toDisplayString(item.at),1)):createCommentVNode(``,true)]),item.target?(openBlock(),createElementBlock(`p`,_hoisted_29$2,toDisplayString([item.target.projectSlug,item.target.sessionId,item.target.conversationId].filter(Boolean).join(` · `)),1)):createCommentVNode(``,true),item.error?(openBlock(),createElementBlock(`p`,_hoisted_30$2,toDisplayString(item.error),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_31$2,[item.target?.projectSlug&&props.navigate?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,"min-height":`48`,onClick:$event=>openOperationTarget(item)},{default:withCtx(()=>[..._cache[35]||(_cache[35]=[createTextVNode(`Open target`,-1)])]),_:1},8,[`onClick`])):createCommentVNode(``,true),item.status===`unknown`?(openBlock(),createBlock(VBtn,{key:1,variant:`text`,"min-height":`48`,onClick:$event=>prepareOperationRecovery(item)},{default:withCtx(()=>[..._cache[36]||(_cache[36]=[createTextVNode(`Prepare inspection`,-1)])]),_:1},8,[`onClick`])):item.status===`failed`&&item.canPrepareRetry?(openBlock(),createBlock(VBtn,{key:2,variant:`text`,"min-height":`48`,onClick:$event=>prepareOperationRecovery(item)},{default:withCtx(()=>[..._cache[37]||(_cache[37]=[createTextVNode(`Prepare retry`,-1)])]),_:1},8,[`onClick`])):createCommentVNode(``,true)])])}),128))])]),_:1})]),_:1})]),_:1},8,[`modelValue`,`activator`,`fullscreen`]),createVNode(VDialog,{"model-value":freshConfirm.value,"max-width":`520`,persistent:freshBusy.value,"onUpdate:modelValue":_cache[21]||(_cache[21]=value=>!value&&closeFreshConfirmation())},{default:withCtx(()=>[createVNode(VCard,{title:`Start a fresh conversation?`},{default:withCtx(()=>[createVNode(VCardText,null,{default:withCtx(()=>[_cache[39]||(_cache[39]=createBaseVNode(`p`,null,`This ends the old voice conversation. Nothing will be resent. Its history and any unconfirmed words remain available in Previous conversations. Watches and assignments continue.`,-1)),_cache[40]||(_cache[40]=createBaseVNode(`p`,null,`Your typed draft and personal microphone, speaker, avatar and voice preferences stay. The new conversation does not automatically start voice.`,-1)),freshBlocked.value?(openBlock(),createElementBlock(`p`,_hoisted_32$2,toDisplayString(freshBlocked.value),1)):createCommentVNode(``,true),freshError.value?(openBlock(),createElementBlock(`p`,_hoisted_33$2,toDisplayString(freshError.value),1)):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{disabled:freshBusy.value,onClick:closeFreshConfirmation},{default:withCtx(()=>[createTextVNode(toDisplayString(freshOperation.value?`Close`:`Cancel`),1)]),_:1},8,[`disabled`]),createVNode(VBtn,{disabled:freshBusy.value||Boolean(freshBlocked.value),color:`primary`,onClick:startFresh},{default:withCtx(()=>[createTextVNode(toDisplayString(freshBusy.value?`Checking fresh conversation…`:freshOperation.value?`Retry same fresh operation`:`Start fresh`),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`]),createVNode(unref(ConversationDialog_default),{"model-value":historyOpen.value,title:`Previous conversations`,"close-label":`Close previous conversations`,"onUpdate:modelValue":_cache[25]||(_cache[25]=value=>!value&&closeHistory())},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_34$2,[_cache[45]||(_cache[45]=createBaseVNode(`p`,null,`Read-only history. Unconfirmed words are annotations, not accepted messages.`,-1)),historyError.value?(openBlock(),createElementBlock(`p`,_hoisted_35$1,toDisplayString(historyError.value),1)):createCommentVNode(``,true),historyLoading.value&&!historyId.value?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`list-item-two-line@3`,"aria-label":`Loading previous conversations`})):createCommentVNode(``,true),!historyId.value?(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VBtn,{variant:`tonal`,"min-height":`48`,disabled:freshBusy.value||Boolean(freshBlocked.value),onClick:showFreshConfirmation},{default:withCtx(()=>[..._cache[41]||(_cache[41]=[createTextVNode(`Start fresh`,-1)])]),_:1},8,[`disabled`]),freshBlocked.value?(openBlock(),createElementBlock(`p`,_hoisted_36$1,toDisplayString(freshBlocked.value),1)):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(historyConversations.value,item=>{return openBlock(),createBlock(VBtn,{key:item.conversationId,variant:`text`,"min-height":`48`,disabled:historyLoading.value,onClick:$event=>readHistoryPage(item.conversationId)},{default:withCtx(()=>[createTextVNode(toDisplayString(item.archivedAt)+` · `+toDisplayString(item.unconfirmedCount)+` unconfirmed `,1)]),_:2},1032,[`disabled`,`onClick`])}),128)),!historyLoading.value&&!historyConversations.value.length&&!historyError.value?(openBlock(),createElementBlock(`p`,_hoisted_37$1,`No previous conversations.`)):createCommentVNode(``,true),historyHasMore.value?(openBlock(),createBlock(VBtn,{key:2,disabled:historyLoading.value,onClick:_cache[22]||(_cache[22]=$event=>loadHistory({more:true}))},{default:withCtx(()=>[..._cache[42]||(_cache[42]=[createTextVNode(`More conversations`,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true)],64)):(openBlock(),createElementBlock(Fragment,{key:3},[createVNode(VBtn,{disabled:historyLoading.value,onClick:_cache[23]||(_cache[23]=$event=>loadHistory())},{default:withCtx(()=>[..._cache[43]||(_cache[43]=[createTextVNode(`Back to previous conversations`,-1)])]),_:1},8,[`disabled`]),createVNode(unref(AssistantTranscript_default),{turns:historyTurns.value,"assistant-label":__props.name,"scroll-key":historyId.value,loading:historyLoading.value&&!historyPages.value.length,"has-more-before":historyPagination.value.hasMoreBefore,"loading-more":historyLoading.value&&Boolean(historyPages.value.length),"load-more-error":historyError.value,onLoadMore:_cache[24]||(_cache[24]=$event=>readHistoryPage(historyId.value,{more:true,complete:$event.complete}))},{"system-message":withCtx(({message})=>[createBaseVNode(`p`,null,toDisplayString(message.text),1)]),_:1},8,[`turns`,`assistant-label`,`scroll-key`,`loading`,`has-more-before`,`loading-more`,`load-more-error`]),(openBlock(true),createElementBlock(Fragment,null,renderList(historyUnconfirmed.value,message=>{return openBlock(),createElementBlock(`div`,{key:message.messageId,class:`vibe64-colleague__history-annotation`},[_cache[44]||(_cache[44]=createBaseVNode(`strong`,null,`Unconfirmed · client-reported words`,-1)),createBaseVNode(`p`,null,toDisplayString(message.text),1)])}),128)),historyUnconfirmedDelivery.value?(openBlock(),createElementBlock(`p`,_hoisted_38$1,`Delivery of `+toDisplayString(historyUnconfirmedDelivery.value.messageId)+` remains unconfirmed.`,1)):createCommentVNode(``,true)],64))])]),_:1},8,[`model-value`])],64)}}};var Vibe64Colleague_default=_plugin_vue_export_helper_default(_sfc_main$43,[[`__scopeId`,`data-v-36d37b13`]]);var client_exports$7=__exportAll({Vibe64Colleague:()=>Vibe64Colleague_default});var VIBE64_LOCAL_AVATAR_STORAGE_KEY=`vibe64:assistant-avatars`;function readStoredAvatars(){const stored=readLocalStorageJson(VIBE64_LOCAL_AVATAR_STORAGE_KEY,{});return Object.freeze(Object.fromEntries(Object.entries(VIBE64_DEFAULT_AVATARS).map(([target,fallback])=>[target,isVibe64AvatarId(stored?.[target])?stored[target]:fallback])))}var avatars=null;function useVibe64LocalAvatarPreferences(){avatars||=shallowRef(readStoredAvatars());function setAvatar(target,value){if(!Object.hasOwn(VIBE64_DEFAULT_AVATARS,target)||!isVibe64AvatarId(value))return;if(avatars.value[target]===value)return;avatars.value=Object.freeze({...avatars.value,[target]:value});writeLocalStorageJson(VIBE64_LOCAL_AVATAR_STORAGE_KEY,avatars.value)}return{avatars,setAvatar}}var _sfc_main$42={__name:`Vibe64LocalColleagueHost`,setup(__props){const view=inject$1(VIBE64_COLLEAGUE_VIEW_KEY);const layout=inject$1(VIBE64_COLLEAGUE_LAYOUT_KEY);const database=inject$1(VIBE64_COLLEAGUE_DATABASE_KEY);const integrations=inject$1(VIBE64_COLLEAGUE_INTEGRATIONS_KEY);const plan=inject$1(VIBE64_COLLEAGUE_PLAN_KEY);const browserNavigation=inject$1(VIBE64_BROWSER_NAVIGATION_KEY,null);const learningOwner=inject$1(VIBE64_LEARNING_KEY,null);const learningController=computed(()=>unref(learningOwner)||null);const route=useRoute();const router=useRouter$1();const{avatars}=useVibe64LocalAvatarPreferences();const voiceVisual=ref(null);const focus=computed(()=>{const projectSlug=projectSlugFromRoute(route);const current=view.value?.projectSlug===projectSlug?view.value:null;const pane=layout.value?.ready&&layout.value.projectSlug===projectSlug?!layout.value.projectVisible?`chat`:layout.value.lessonVisible?`lesson`:route.path.split(`/dashboard/`)[1]?.split(`/`)[0]||`preview`:``;const result={projectSlug,sessionId:current?.sessionId||``,conversationId:current?.conversationId||``,pane,route:route.path,...learningPanelFocus(learningController.value)};const displayedDatabase=pane===`database`&&database.value?.projectSlug===projectSlug&&database.value.sessionId===result.sessionId?database.value:null;if(displayedDatabase){result.databaseScreen=displayedDatabase.screen;if(displayedDatabase.screen===`workspace`){result.databaseView=displayedDatabase.view;if(displayedDatabase.table)result.databaseTable=displayedDatabase.table}}const displayedIntegrations=pane===`integrations`&&integrations.value?.projectSlug===projectSlug&&(!integrations.value.sessionId||integrations.value.sessionId===result.sessionId)?integrations.value:null;if(displayedIntegrations?.ready){result.integrationEnvironment=displayedIntegrations.environment;result.integrationDirty=displayedIntegrations.dirty;if(displayedIntegrations.integrationId)result.integrationId=displayedIntegrations.integrationId}const displayedPlan=plan.value?.projectSlug===projectSlug&&plan.value.sessionId===result.sessionId?plan.value:null;if(displayedPlan?.open)result.planView=displayedPlan.view;return result});const pageFocus=inject$1(VIBE64_PAGE_FOCUS_KEY,null);if(pageFocus){watchEffect(()=>{pageFocus.value=focus.value});onBeforeUnmount(()=>{pageFocus.value=null})}const request=(url,options)=>getHttpWebClient().request(resolveStudioRequestUrl(url),options);const paneSuffix=Object.freeze({access:`/dashboard/access`,changes:`/dashboard/changes`,database:`/dashboard/database`,env:`/dashboard/env`,files:`/dashboard/files`,history:`/dashboard/history`,integrations:`/dashboard/integrations`,repository:`/dashboard/repository`,"repository-settings":`/dashboard/repository`,session:`/dashboard/session`,settings:`/dashboard/settings`,system:`/dashboard/system`,"ai-terminal":`/dashboard/ai-terminal`});let navigationGeneration=0;function waitForNavigation(predicate,isCurrent,failure){return new Promise((resolve,reject)=>{let stop;const timer=setTimeout(()=>finish(new Error(failure)),15e3);function finish(error){clearTimeout(timer);if(stop)stop();else queueMicrotask(()=>stop?.());if(error)reject(error);else resolve()}stop=watchEffect(()=>{if(!isCurrent())finish(new Error(`The browser navigation target changed before it opened.`));else if(predicate())finish()},{flush:`post`})})}function focusMatches(command,value){if(!learningPanelMatches(command,value))return false;if(command.projectSlug&&value.projectSlug!==command.projectSlug)return false;if(command.sessionId&&value.sessionId!==command.sessionId)return false;if(command.conversationId!==void 0&&value.conversationId!==command.conversationId)return false;const expectedPane=command.pane||(!command.sessionId?`preview`:``);if(expectedPane&&command.projectSlug&&value.pane!==expectedPane)return false;if(command.databaseView&&(value.databaseScreen!==`workspace`||value.databaseView!==command.databaseView))return false;if(command.databaseTable&&value.databaseTable!==command.databaseTable)return false;if(command.integrationEnvironment&&value.integrationEnvironment!==command.integrationEnvironment)return false;if(command.integrationId&&value.integrationId!==command.integrationId)return false;if(command.planView&&value.planView!==(command.planView==="default"?plan.value?.view:command.planView))return false;return true}async function navigate(command={}){const generation=++navigationGeneration;const isCurrent=()=>generation===navigationGeneration;if(command.route){await router.push({path:command.route});await waitForNavigation(()=>route.path===command.route,isCurrent,`The page did not open.`);return{...focus.value}}if(command.learning){await applyLearningNavigation(learningController.value,command.learning);if(!isCurrent())throw new Error(`The browser navigation target changed before it opened.`);if(!command.projectSlug){await waitForNavigation(()=>learningPanelMatches(command,focus.value),isCurrent,`Learning did not show the requested lesson.`);return{...focus.value}}}if(!command.projectSlug)throw new Error(`Choose a project before opening this view.`);const suffix=command.pane&&command.pane!==`preview`?paneSuffix[command.pane]:``;if(command.pane&&command.pane!==`preview`&&!suffix)throw new Error(`This project view is unavailable.`);const{pane:_pane,lesson:_lesson,...query}=route.query;if(command.sessionId)query.session=command.sessionId;if(command.databaseView)query.databaseView=command.databaseView;if(command.pane===`integrations`){query.integrationEnvironment=command.integrationEnvironment||`development`;query.integrationSession=command.sessionId||void 0;query.integration=command.integrationId||void 0}await router.push({path:projectAppPath(command.projectSlug,suffix),query});if(!isCurrent())throw new Error(`The browser navigation target changed before it opened.`);await nextTick$1();const expectedSession=command.sessionId||``;if(expectedSession)await waitForNavigation(()=>view.value?.projectSlug===command.projectSlug&&view.value?.sessionId===expectedSession&&view.value?.ready,isCurrent,`The requested session did not become ready.`);if(expectedSession)await view.value?.openConversation(command.conversationId||``,isCurrent);if(command.pane||!command.sessionId)layout.value?.showProject?.();else layout.value?.showChat?.();if(command.databaseView){await waitForNavigation(()=>database.value?.projectSlug===command.projectSlug&&database.value?.sessionId===expectedSession&&database.value.screen!==`loading`,isCurrent,`The requested Database view did not become available.`);if(database.value.screen!==`workspace`)throw new Error(`Database is unavailable in this session.`);if(command.databaseTable)database.value.selectTable(command.databaseTable)}if(command.pane===`integrations`){await waitForNavigation(()=>integrations.value?.projectSlug===command.projectSlug&&(command.integrationEnvironment===`production`||integrations.value?.sessionId===expectedSession)&&(integrations.value?.ready||integrations.value?.error),isCurrent,`Integrations did not become available.`);if(integrations.value.error)throw new Error(integrations.value.error);integrations.value.select(command.integrationId||``,command.integrationEnvironment||`development`)}if(command.planView){await waitForNavigation(()=>plan.value?.projectSlug===command.projectSlug&&plan.value?.sessionId===expectedSession,isCurrent,`The requested plan viewer did not become available.`);await plan.value.openPlan(command.planView,isCurrent)}await waitForNavigation(()=>focusMatches(command,focus.value),isCurrent,`The browser did not settle on the requested view.`);return{...focus.value}}if(browserNavigation)browserNavigation.value=navigate;onBeforeUnmount(()=>{navigationGeneration+=1;if(browserNavigation?.value===navigate)browserNavigation.value=null});return(_ctx,_cache)=>{return openBlock(),createBlock(unref(Vibe64Colleague_default),{focus:focus.value,navigate,request,onVoiceVisual:_cache[0]||(_cache[0]=$event=>voiceVisual.value=$event)},{avatar:withCtx(({state})=>[createVNode(unref(_sfc_main$50),mergeProps(voiceVisual.value||{state},{avatar:unref(avatars).colleague}),null,16,[`avatar`])]),_:1},8,[`focus`])}}};var _sfc_main$41={__name:`Vibe64LocalVoiceSettings`,props:{binding:{type:Object,default:null},voice:{type:Object,default:null}},setup(__props){const props=__props;const{avatars,setAvatar}=useVibe64LocalAvatarPreferences();const voiceError=ref(``);onMounted(async()=>{if(!props.voice)return;try{await props.voice.connect()}catch(error){voiceError.value=error?.message||`Speaking voices could not load.`}});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[__props.binding?.preferenceTarget?(openBlock(),createBlock(unref(_sfc_main$49),{key:0,"model-value":unref(avatars)[__props.binding.preferenceTarget],hint:`Saved in this browser for this assistant type.`,"onUpdate:modelValue":_cache[0]||(_cache[0]=value=>unref(setAvatar)(__props.binding.preferenceTarget,value))},null,8,[`model-value`])):createCommentVNode(``,true),__props.voice?(openBlock(),createElementBlock(Fragment,{key:1},[voiceError.value?(openBlock(),createBlock(VAlert,{key:0,type:`error`,density:`compact`,class:`mt-3`},{default:withCtx(()=>[createTextVNode(toDisplayString(voiceError.value),1)]),_:1})):createCommentVNode(``,true),createVNode(unref(_sfc_main$58),{voice:__props.voice,class:`mt-3`},null,8,[`voice`])],64)):createCommentVNode(``,true)],64)}}};var _sfc_main$40={__name:`Vibe64LocalVoiceHost`,setup(__props){const{avatars}=useVibe64LocalAvatarPreferences();const preferences=computed(()=>Object.fromEntries(Object.entries(avatars.value).map(([target,avatar])=>[target,{avatar}])));return(_ctx,_cache)=>{return openBlock(),createBlock(unref(Vibe64VoiceHost_default),{preferences:preferences.value},{avatar:withCtx(({mouthLevel,mouthPose,state,binding})=>[createVNode(unref(_sfc_main$50),{avatar:unref(avatars)[binding?.preferenceTarget]||unref(avatars).coding,"mouth-level":mouthLevel,"mouth-pose":mouthPose,state},null,8,[`avatar`,`mouth-level`,`mouth-pose`,`state`])]),settings:withCtx(({binding,voice})=>[createVNode(_sfc_main$41,{binding,voice},null,8,[`binding`,`voice`])]),default:withCtx(()=>[renderSlot(_ctx.$slots,`default`)]),_:3},8,[`preferences`])}}};var SIDES=Object.freeze([`right`,`left`,`below`,`above`]);var ARROW_INSET=20;function clamp(value,min,max){return Math.max(min,Math.min(value,max))}function coveredArea(a,b){const width=Math.min(a.left+a.width,b.left+b.width)-Math.max(a.left,b.left);const height=Math.min(a.top+a.height,b.top+b.height)-Math.max(a.top,b.top);return Math.max(0,width)*Math.max(0,height)}function besideTop(ring,caption,viewport,margin){return clamp(ring.top+ring.height/2-caption.height/2,margin,viewport.height-margin-caption.height)}function stackedLeft(ring,caption,viewport,margin){return clamp(ring.left,margin,viewport.width-margin-caption.width)}function candidate(side,ring,caption,viewport,{gap,margin}){switch(side){case`right`:return{top:besideTop(ring,caption,viewport,margin),left:ring.left+ring.width+gap};case`left`:return{top:besideTop(ring,caption,viewport,margin),left:ring.left-gap-caption.width};case`below`:return{top:ring.top+ring.height+gap,left:stackedLeft(ring,caption,viewport,margin)};default:return{top:ring.top-gap-caption.height,left:stackedLeft(ring,caption,viewport,margin)}}}function fits(box,caption,viewport,margin){return box.left>=margin&&box.top>=margin&&box.left+caption.width<=viewport.width-margin&&box.top+caption.height<=viewport.height-margin}function arrowOffset(side,box,ring,caption){const beside=side===`right`||side===`left`;const centre=beside?ring.top+ring.height/2-box.top:ring.left+ring.width/2-box.left;const length=beside?caption.height:caption.width;return clamp(centre,Math.min(ARROW_INSET,length/2),Math.max(length-ARROW_INSET,length/2))}function placeGuideCaption({ring,caption,viewport,avoid=[],gap=14,margin=8}){const placements=SIDES.map(side=>({side,...candidate(side,ring,caption,viewport,{gap,margin})})).filter(box=>fits(box,caption,viewport,margin));const covered=box=>avoid.reduce((sum,rect)=>sum+coveredArea({...box,...caption},rect),0);const chosen=placements.reduce((best,box)=>best&&covered(best)<=covered(box)?best:box,null);if(chosen)return{...chosen,arrow:arrowOffset(chosen.side,chosen,ring,caption)};return{side:`inside`,top:Math.max(margin,ring.top)+gap,left:stackedLeft(ring,caption,viewport,margin),arrow:0}}var _hoisted_1$24=[`data-guide-step`];var _hoisted_2$20={class:`training-guide-overlay__caption-text`};var _hoisted_3$19={key:0,class:`training-guide-overlay__timer`,"aria-hidden":`true`};var KEEP_CLEAR_SELECTOR=`[data-vibe64-guide="lesson-bar"]`;var pad=6;var gap=14;var captionMaxWidth=352;var _sfc_main$39={__name:`TrainingGuideOverlay`,setup(__props){const unregister=registerTrainingGuideOverlay();const rect=ref(null);const caption=ref(null);const captionSize=ref(null);const keepClear=ref([]);const lifetime=ref(0);const reducedMotion=ref(Boolean(globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`)?.matches));let frame=0;let timer=null;let element=null;function stop(){if(frame)globalThis.cancelAnimationFrame?.(frame);frame=0;clearTimeout(timer);timer=null;globalThis.document?.removeEventListener(`pointerdown`,dismiss,true);globalThis.document?.removeEventListener(`keydown`,dismiss,true)}function dismiss(){clearTrainingGuide(trainingGuide.value?.id)}function box(target){const{top,left,width,height}=target.getBoundingClientRect();return{top,left,width,height}}function measure(){const guide=trainingGuide.value;if(!guide)return;element=currentTrainingGuideElement({...guide,element});if(!element){clearTrainingGuide(guide.id);return}rect.value=box(element);keepClear.value=[...globalThis.document?.querySelectorAll?.(KEEP_CLEAR_SELECTOR)||[]].map(box);captionSize.value=caption.value?.getBoundingClientRect?box(caption.value):null;if(globalThis.requestAnimationFrame)frame=globalThis.requestAnimationFrame(measure)}watch(trainingGuide,guide=>{stop();rect.value=null;element=guide?.element||null;if(!guide)return;if(Number.isFinite(guide.expiresAt)){lifetime.value=Math.max(0,guide.expiresAt-Date.now());timer=setTimeout(()=>clearTrainingGuide(guide.id),lifetime.value);globalThis.document?.addEventListener(`pointerdown`,dismiss,true);globalThis.document?.addEventListener(`keydown`,dismiss,true)}measure()},{immediate:true});onBeforeUnmount(()=>{stop();unregister()});const ring=computed(()=>rect.value&&{top:rect.value.top-pad,left:rect.value.left-pad,width:rect.value.width+12,height:rect.value.height+12});const ringStyle=computed(()=>ring.value&&{top:`${ring.value.top}px`,left:`${ring.value.left}px`,width:`${ring.value.width}px`,height:`${ring.value.height}px`});const captionWidth=computed(()=>Math.min(captionMaxWidth,(globalThis.innerWidth||368)-16));const placement=computed(()=>ring.value&&placeGuideCaption({ring:ring.value,caption:captionSize.value||{width:captionWidth.value,height:56},viewport:{width:globalThis.innerWidth||0,height:globalThis.innerHeight||0},avoid:keepClear.value,gap}));const captionStyle=computed(()=>placement.value&&{top:`${placement.value.top}px`,left:`${placement.value.left}px`,maxWidth:`${captionWidth.value}px`,"--training-guide-arrow":`${placement.value.arrow}px`,"--training-guide-lifetime":`${lifetime.value}ms`});return(_ctx,_cache)=>{return openBlock(),createBlock(Teleport,{to:`body`},[unref(trainingGuide)&&rect.value?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`training-guide-overlay`,{"training-guide-overlay--still":reducedMotion.value}]),"data-guide-step":unref(trainingGuide).step,"aria-live":`polite`},[createBaseVNode(`div`,{class:`training-guide-overlay__spotlight`,style:normalizeStyle(ringStyle.value),"aria-hidden":`true`},null,4),createBaseVNode(`div`,{class:`training-guide-overlay__ring`,style:normalizeStyle(ringStyle.value)},null,4),unref(trainingGuide).caption?(openBlock(),createElementBlock(`div`,{key:0,ref_key:`caption`,ref:caption,class:normalizeClass([`training-guide-overlay__caption`,`training-guide-overlay__caption--${placement.value.side}`]),style:normalizeStyle(captionStyle.value)},[_cache[0]||(_cache[0]=createBaseVNode(`svg`,{class:`training-guide-overlay__caption-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`,focusable:`false`},[createBaseVNode(`path`,{d:`M10,9A1,1 0 0,1 11,8A1,1 0 0,1 12,9V13.47L13.21,13.6L18.15,15.79C18.68,16.03 19,16.56 19,17.14V21.5C18.97,22.32 18.32,22.97 17.5,23H11C10.62,23 10.26,22.85 10,22.57L5.1,18.37L5.84,17.6C6.03,17.39 6.3,17.28 6.58,17.28H6.8L10,19V9M11,5A4,4 0 0,1 15,9C15,10.5 14.2,11.77 13,12.46V11.24C13.61,10.69 14,9.89 14,9A3,3 0 0,0 11,6A3,3 0 0,0 8,9C8,9.89 8.39,10.69 9,11.24V12.46C7.8,11.77 7,10.5 7,9A4,4 0 0,1 11,5Z`})],-1)),createBaseVNode(`span`,_hoisted_2$20,toDisplayString(unref(trainingGuide).caption),1),Number.isFinite(unref(trainingGuide).expiresAt)?(openBlock(),createElementBlock(`span`,_hoisted_3$19)):createCommentVNode(``,true)],6)):createCommentVNode(``,true)],10,_hoisted_1$24)):createCommentVNode(``,true)])}}};var TrainingGuideOverlay_default=_plugin_vue_export_helper_default(_sfc_main$39,[[`__scopeId`,`data-v-5126a055`]]);function useVibe64Learning(){return inject$1(VIBE64_LEARNING_KEY,null)}var TRAINING_PATH=`/api/vibe64/training`;function useVibe64LearningCourses({authorPreview=false,active}={}){const viewer=inject$1(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`});const actorKey=computed(()=>String(toValue(viewer)?.actorKey||``));const open=computed(()=>toValue(active)===true);let generation=0;let disposed=false;watch(()=>[actorKey.value,open.value],()=>{generation+=1},{flush:`sync`});onScopeDispose(()=>{disposed=true;generation+=1});function readResource(name,enabled=null){const client=getHttpWebClient();const original=useEndpointResource({path:`${TRAINING_PATH}/${name}`,queryKey:computed(()=>[`vibe64`,`training`,name,actorKey.value||`signed-out`]),enabled:computed(()=>Boolean(actorKey.value)&&(!enabled||toValue(enabled)===true)),client:{async request(path,options){return{reader:actorKey.value,value:await client.request(path,options)}}},queryOptions:{retry:false},fallbackLoadError:`The saved lessons could not be read. Refresh to try again.`});const data=computed(()=>{const status=Number(original.query.error.value?.statusCode||original.query.error.value?.status||0);const result=original.data.value;return actorKey.value&&(!enabled||toValue(enabled)===true)&&status!==401&&status!==403&&result?.reader===actorKey.value?result.value:null});async function refetch(options){if(!actorKey.value||disposed||enabled&&toValue(enabled)!==true)return null;const reader=actorKey.value;return{...await original.query.refetch(options),data:reader===actorKey.value&&!disposed?data.value:null}}return Object.freeze({...original,data,query:{...original.query,data,refetch},reload:()=>refetch()})}const coursesResource=readResource(`courses`);const learningResource=readResource(`learning`);const availableResource=readResource(`available`,open);const authorPreviewEnabled=computed(()=>toValue(authorPreview)===true);const authorPreviewResource=authorPreview===false?null:readResource(`author-preview`,authorPreviewEnabled);watch(open,(value,previous)=>{if(value&&!previous)refresh()});const savedAuthorPreview=computed(()=>{const result=authorPreviewResource?.data.value;return result?.ok===true&&result.available===true&&result.authorPreview===true&&!result.active?.ended?result.active||null:null});const learnerId=computed(()=>learningResource.data.value?.ok===true&&learningResource.data.value?.available===true&&typeof learningResource.data.value.learnerId===`string`?learningResource.data.value.learnerId:``);const busy=ref(false);const pendingStart=shallowRef(null);const starting=ref(false);const startRetry=computed(()=>!starting.value&&pendingStart.value?.actor===actorKey.value?pendingStart.value.input:null);const command=useCommand({ownershipFilter:ROUTE_VISIBILITY_PUBLIC,surfaceId:`app`,access:`never`,apiSuffix:`/vibe64/training`,placementSource:`vibe64.training.learning-mode`,suppressSuccessMessage:true,buildRawPayload:(_model,{context})=>context.body,buildCommandOptions:(_model,{context})=>({method:`POST`,path:context.path}),fallbackRunError:`The lesson request was not confirmed. Retry the same request before starting another lesson.`});function capture(){if(disposed||!actorKey.value||!open.value||!learnerId.value)throw new Error(`Open Courses and read your saved lessons before making a lesson request.`);return Object.freeze({actor:actorKey.value,learnerId:learnerId.value,generation})}const current=scope=>!disposed&&scope.actor===actorKey.value&&scope.learnerId===learnerId.value&&scope.generation===generation&&open.value&&(!scope.authorPreviewAttemptId||authorPreviewEnabled.value&&savedAuthorPreview.value?.attemptId===scope.authorPreviewAttemptId&&!authorPreviewResource.loadError.value);async function refresh(){if(!actorKey.value||disposed)return null;return Promise.all([coursesResource.reload(),learningResource.reload(),availableResource.reload(),...authorPreviewResource?[authorPreviewResource.reload()]:[]])}async function prepare(path,body,scope,{attemptId=``,onAdmitted=null}={}){const result=await command.run({path,body});if(!result||result.ok!==true||result.available!==true)throw new Error(`The lesson request did not return a confirmed saved attempt. Retry the same request.`);const admitted=result.attempt?.ended?result.attempt:result.active;if(!admitted?.attemptId||attemptId&&admitted.attemptId!==attemptId)throw new Error(`The lesson response did not confirm the requested attempt.`);const handedOver=typeof onAdmitted===`function`&&!admitted.ended&&current(scope);const stillCurrent=handedOver?()=>scope.actor===actorKey.value&&scope.learnerId===learnerId.value:()=>current(scope);if(handedOver)onAdmitted(admitted.attemptId);if(stillCurrent()){await learningResource.reload();if(scope.authorPreviewAttemptId)await authorPreviewResource.reload()}return{result,attemptId:admitted.attemptId,learnerId:scope.learnerId,ended:Boolean(admitted.ended),current:stillCurrent()}}async function startLesson(selection,{onAdmitted=null}={}){if(busy.value)return null;const scope=capture();const input=Object.freeze({courseId:selection.courseId,release:selection.release,lessonCode:selection.lessonCode,expectedRevision:selection.expectedRevision,...selection.archiveCurrent===true?{archiveCurrent:true}:{}});let request=pendingStart.value;if(request?.actor===scope.actor){if(!(Object.keys(input).every(key=>input[key]===request.input[key])&&Object.keys(request.input).length===Object.keys(input).length))throw new Error(`A previous start was not confirmed. Retry that same lesson request first.`)}else{request=Object.freeze({actor:scope.actor,input,requestId:globalThis.crypto.randomUUID()});pendingStart.value=request}busy.value=true;starting.value=true;try{const outcome=await prepare(`${TRAINING_PATH}/lessons/start`,{...request.input,requestId:request.requestId},scope,{onAdmitted});if(pendingStart.value===request)pendingStart.value=null;return{...outcome,requestId:request.requestId}}catch(cause){if(cause?.code===`VIBE64_TRAINING_LESSON_IN_PROGRESS`&&pendingStart.value===request)pendingStart.value=null;throw cause}finally{busy.value=false;starting.value=false}}async function resumeLesson(attemptId,{onAdmitted=null}={}){if(busy.value)return null;const scope=capture();busy.value=true;try{return await prepare(`${TRAINING_PATH}/attempts/${encodeURIComponent(attemptId)}/resume`,{},scope,{attemptId,onAdmitted})}finally{busy.value=false}}async function createCourse({title,topics,expectedRevision}={}){if(busy.value)return null;capture();busy.value=true;try{const result=await command.run({path:`${TRAINING_PATH}/courses`,body:{title,topics,expectedRevision}});if(result?.ok!==true||!result.course?.courseId)throw new Error(result?.error||`The new course was not confirmed. Refresh courses before trying again.`);await coursesResource.reload();return result}finally{busy.value=false}}const installRecord=shallowRef(null);const installState=computed(()=>installRecord.value?.actor===actorKey.value?installRecord.value:null);async function installCourse({courseId,release}={}){if(busy.value)return null;const scope=capture();const target=Object.freeze({actor:scope.actor,courseId,release});busy.value=true;installRecord.value=Object.freeze({...target,phase:`installing`,message:``});const poll=setInterval(()=>{availableResource.reload()},1500);try{const result=await command.run({path:`${TRAINING_PATH}/courses/install`,body:{courseId,release}});if(result?.ok!==true||result.course?.courseId!==courseId||result.course.release!==release)throw new Error(result?.error||`The course installation was not confirmed. Refresh courses, then retry.`);if(installRecord.value?.courseId===courseId&&installRecord.value.release===release)installRecord.value=null;await Promise.all([coursesResource.reload(),availableResource.reload()]);return result}catch(cause){if(current(scope))installRecord.value=Object.freeze({...target,phase:`failed`,message:String(cause?.message||`The course installation was not confirmed. Refresh courses, then retry.`)});return null}finally{clearInterval(poll);busy.value=false}}async function resumeAuthorPreview(attemptId){if(busy.value)return null;const scope=Object.freeze({...capture(),authorPreviewAttemptId:attemptId});if(!attemptId||!current(scope))throw new Error(`Read this owner's exact saved author trial before reopening it.`);busy.value=true;try{return await prepare(`${TRAINING_PATH}/attempts/${encodeURIComponent(attemptId)}/resume`,{},scope,{attemptId})}finally{busy.value=false}}return Object.freeze({active:open,coursesResource,learningResource,availableResource,installState,installCourse,learnerId,busy,starting,startRetry,refresh,startLesson,resumeLesson,createCourse,authorPreviewEnabled,authorPreviewResource,savedAuthorPreview,resumeAuthorPreview})}var _hoisted_1$23=[`aria-labelledby`,`data-test`];var _hoisted_2$19=[`id`];var _hoisted_3$18={class:`vibe64-learning-attempts__intro`};var _hoisted_4$14={key:1,class:`vibe64-learning-attempts__loading`,role:`status`,"data-test":`learning-attempts-loading`};var _hoisted_5$14={key:0,class:`vibe64-learning-attempts__empty`,"data-test":`learning-progress-empty`};var _hoisted_6$10=[`data-attempt-id`];var _hoisted_7$9={class:`vibe64-learning-attempts__text`};var _hoisted_8$9={class:`vibe64-learning-attempts__name`};var _hoisted_9$7={class:`vibe64-learning-attempts__status`};var _hoisted_10$6={key:0,class:`vibe64-learning-attempts__empty`,"data-test":`learning-archived-empty`};var _hoisted_11$6={key:1,class:`vibe64-learning-attempts__list`};var _hoisted_12$6=[`data-attempt-id`];var _hoisted_13$6={class:`vibe64-learning-attempts__text`};var _hoisted_14$6={class:`vibe64-learning-attempts__name`};var _hoisted_15$6={class:`vibe64-learning-attempts__status`};var _sfc_main$38={__name:`Vibe64LearningAttempts`,props:{learning:{type:Object,required:true},archived:Boolean},setup(__props){const props=__props;const practice=computed(()=>props.learning.practice);const current=computed(()=>practice.value.current);const busy=computed(()=>props.learning.state.busy);const confirming=ref(``);onMounted(()=>{props.learning.readPractice()});const dateLabel=value=>{const date=new Date(value);return Number.isNaN(date.getTime())?``:date.toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})};async function confirmThen(key,action){if(confirming.value!==key){confirming.value=key;return}confirming.value=``;await action()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:`vibe64-learning-attempts`,"aria-labelledby":`vibe64-learning-attempts-${__props.archived?`archived`:`progress`}`,"data-test":__props.archived?`learning-archived`:`learning-progress`},[createBaseVNode(`h2`,{id:`vibe64-learning-attempts-${__props.archived?`archived`:`progress`}`,class:`vibe64-learning-attempts__title`},toDisplayString(__props.archived?`Archived`:`In progress`),9,_hoisted_2$19),createBaseVNode(`p`,_hoisted_3$18,toDisplayString(__props.archived?`Lessons you finished or archived, each with its practice project and conversation.`:`Your lesson in progress. It stays paused, with its practice project and conversation, until you finish, restart or delete it.`),1),__props.learning.state.error?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`,class:`vibe64-learning-attempts__error`,"data-test":`learning-attempts-error`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.learning.state.error),1)]),_:1})):createCommentVNode(``,true),!practice.value.loaded&&!__props.learning.state.error?(openBlock(),createElementBlock(`div`,_hoisted_4$14,[createVNode(VProgressCircular,{indeterminate:``,size:`20`,width:`2`,color:`primary`}),createTextVNode(toDisplayString(__props.archived?`Loading archived lessons…`:`Loading your lesson…`),1)])):!__props.archived?(openBlock(),createElementBlock(Fragment,{key:2},[practice.value.loaded&&!current.value?(openBlock(),createElementBlock(`p`,_hoisted_5$14,` No lesson in progress. Start one from Courses. `)):current.value?(openBlock(),createElementBlock(`div`,{key:1,class:`vibe64-learning-attempts__row`,"data-attempt-id":current.value.attemptId},[createBaseVNode(`div`,_hoisted_7$9,[createBaseVNode(`span`,_hoisted_8$9,toDisplayString(current.value.name),1),createBaseVNode(`span`,_hoisted_9$7,toDisplayString(current.value.status===`deleting`?`Being deleted`:current.value.projectName||`No practice project`),1)]),current.value.status!==`deleting`?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VBtn,{variant:`flat`,color:`primary`,rounded:`pill`,"min-height":`48`,disabled:Boolean(busy.value),"data-test":`learning-progress-open`,onClick:_cache[0]||(_cache[0]=$event=>__props.learning.openCurrent())},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Open`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{variant:confirming.value===`restart`?`flat`:`tonal`,color:confirming.value===`restart`?`warning`:void 0,rounded:`pill`,"min-height":`48`,disabled:Boolean(busy.value),loading:busy.value===`restart`,title:`Archive this attempt and start the lesson again`,"data-test":`learning-progress-restart`,onClick:_cache[1]||(_cache[1]=$event=>confirmThen(`restart`,()=>__props.learning.restart()))},{default:withCtx(()=>[createTextVNode(toDisplayString(confirming.value===`restart`?`Archive and restart`:`Restart`),1)]),_:1},8,[`variant`,`color`,`disabled`,`loading`])],64)):createCommentVNode(``,true),createVNode(VBtn,{variant:confirming.value===`current`?`flat`:`text`,color:confirming.value===`current`?`error`:void 0,rounded:`pill`,"min-height":`48`,disabled:Boolean(busy.value),loading:busy.value===`delete`,title:`Delete ${current.value.name}, its practice project and its conversation`,"data-test":`learning-progress-delete`,onClick:_cache[2]||(_cache[2]=$event=>confirmThen(`current`,()=>__props.learning.deleteAttempt()))},{default:withCtx(()=>[createTextVNode(toDisplayString(confirming.value===`current`?`Delete for good`:`Delete`),1)]),_:1},8,[`variant`,`color`,`disabled`,`loading`,`title`])],8,_hoisted_6$10)):createCommentVNode(``,true)],64)):(openBlock(),createElementBlock(Fragment,{key:3},[practice.value.loaded&&!practice.value.archived.length?(openBlock(),createElementBlock(`p`,_hoisted_10$6,` Nothing archived yet. `)):(openBlock(),createElementBlock(`ul`,_hoisted_11$6,[(openBlock(true),createElementBlock(Fragment,null,renderList(practice.value.archived,entry=>{return openBlock(),createElementBlock(`li`,{key:entry.attemptId,class:`vibe64-learning-attempts__row`,"data-attempt-id":entry.attemptId},[createBaseVNode(`div`,_hoisted_13$6,[createBaseVNode(`span`,_hoisted_14$6,toDisplayString(entry.name),1),createBaseVNode(`span`,_hoisted_15$6,toDisplayString(entry.reason===`finished`?`Finished`:`Archived`)+` `+toDisplayString(dateLabel(entry.archivedAt))+toDisplayString(entry.hasProject?` · with practice project`:``),1)]),confirming.value===entry.attemptId?(openBlock(),createBlock(VBtn,{key:0,variant:`flat`,color:`error`,rounded:`pill`,"min-height":`48`,disabled:Boolean(busy.value),"data-test":`learning-archived-delete-confirm`,onClick:$event=>confirmThen(entry.attemptId,()=>__props.learning.deleteArchived(entry.attemptId))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Delete for good`,-1)])]),_:1},8,[`disabled`,`onClick`])):(openBlock(),createBlock(VBtn,{key:1,variant:`text`,icon:unref(mdiDeleteOutline),"min-width":`48`,"min-height":`48`,"aria-label":`Delete archived ${entry.name}`,title:`Delete archived ${entry.name}`,disabled:Boolean(busy.value),loading:busy.value===`archive-delete:${entry.attemptId}`,"data-test":`learning-archived-delete`,onClick:$event=>confirmThen(entry.attemptId,()=>__props.learning.deleteArchived(entry.attemptId))},null,8,[`icon`,`aria-label`,`title`,`disabled`,`loading`,`onClick`]))],8,_hoisted_12$6)}),128))]))],64))],8,_hoisted_1$23)}}};var Vibe64LearningAttempts_default=_plugin_vue_export_helper_default(_sfc_main$38,[[`__scopeId`,`data-v-baedd71f`]]);var trainingIcons=Object.freeze({refresh:`M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z`,play:`M8,5.14V19.14L19,12.14L8,5.14Z`,plus:`M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z`,arrowRight:`M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z`,checkCircle:`M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z`,eye:`M12,9A3,3 0 0,1 15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9M12,4.5C17,4.5 21.27,7.61 23,12C21.27,16.39 17,19.5 12,19.5C7,19.5 2.73,16.39 1,12C2.73,7.61 7,4.5 12,4.5M3.18,12C4.83,15.36 8.24,17.5 12,17.5C15.76,17.5 19.17,15.36 20.82,12C19.17,8.64 15.76,6.5 12,6.5C8.24,6.5 4.83,8.64 3.18,12Z`,cancel:`M12 2C17.5 2 22 6.5 22 12S17.5 22 12 22 2 17.5 2 12 6.5 2 12 2M12 4C10.1 4 8.4 4.6 7.1 5.7L18.3 16.9C19.3 15.5 20 13.8 20 12C20 7.6 16.4 4 12 4M16.9 18.3L5.7 7.1C4.6 8.4 4 10.1 4 12C4 16.4 7.6 20 12 20C13.9 20 15.6 19.4 16.9 18.3Z`,trophy:`M18 2C17.1 2 16 3 16 4H8C8 3 6.9 2 6 2H2V11C2 12 3 13 4 13H6.2C6.6 15 7.9 16.7 11 17V19.08C8 19.54 8 22 8 22H16C16 22 16 19.54 13 19.08V17C16.1 16.7 17.4 15 17.8 13H20C21 13 22 12 22 11V2H18M6 11H4V4H6V11M16 11.5C16 13.43 15.42 15 12 15C8.59 15 8 13.43 8 11.5V6H16V11.5M20 11H18V4H20V11Z`,history:`M13.5,8H12V13L16.28,15.54L17,14.33L13.5,12.25V8M13,3A9,9 0 0,0 4,12H1L4.96,16.03L9,12H6A7,7 0 0,1 13,5A7,7 0 0,1 20,12A7,7 0 0,1 13,19C11.07,19 9.32,18.21 8.06,16.94L6.64,18.36C8.27,20 10.5,21 13,21A9,9 0 0,0 22,12A9,9 0 0,0 13,3`,school:`M12 3L1 9L5 11.18V17.18L12 21L19 17.18V11.18L21 10.09V17H23V9L12 3M18.82 9L12 12.72L5.18 9L12 5.28L18.82 9M17 16L12 18.72L7 16V12.27L12 15L17 12.27V16Z`,bookmark:`M17,18L12,15.82L7,18V5H17M17,3H7A2,2 0 0,0 5,5V21L12,18L19,21V5C19,3.89 18.1,3 17,3Z`,book:`M19 1L14 6V17L19 12.5V1M21 5V18.5C19.9 18.15 18.7 18 17.5 18C15.8 18 13.35 18.65 12 19.5V6C10.55 4.9 8.45 4.5 6.5 4.5C4.55 4.5 2.45 4.9 1 6V20.65C1 20.9 1.25 21.15 1.5 21.15C1.6 21.15 1.65 21.1 1.75 21.1C3.1 20.45 5.05 20 6.5 20C8.45 20 10.55 20.4 12 21.5C13.35 20.65 15.8 20 17.5 20C19.15 20 20.85 20.3 22.25 21.05C22.35 21.1 22.4 21.1 22.5 21.1C22.75 21.1 23 20.85 23 20.6V6C22.4 5.55 21.75 5.25 21 5M10 18.41C8.75 18.09 7.5 18 6.5 18C5.44 18 4.18 18.19 3 18.5V7.13C3.91 6.73 5.14 6.5 6.5 6.5C7.86 6.5 9.09 6.73 10 7.13V18.41Z`,chevronUp:`M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z`,chevronDown:`M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z`,path:`M18,15A3,3 0 0,1 21,18A3,3 0 0,1 18,21C16.69,21 15.58,20.17 15.17,19H14V17H15.17C15.58,15.83 16.69,15 18,15M18,17A1,1 0 0,0 17,18A1,1 0 0,0 18,19A1,1 0 0,0 19,18A1,1 0 0,0 18,17M18,8A1.43,1.43 0 0,0 19.43,6.57C19.43,5.78 18.79,5.14 18,5.14C17.21,5.14 16.57,5.78 16.57,6.57A1.43,1.43 0 0,0 18,8M18,2.57A4,4 0 0,1 22,6.57C22,9.56 18,14 18,14C18,14 14,9.56 14,6.57A4,4 0 0,1 18,2.57M8.83,17H10V19H8.83C8.42,20.17 7.31,21 6,21A3,3 0 0,1 3,18C3,16.69 3.83,15.58 5,15.17V14H7V15.17C7.85,15.47 8.53,16.15 8.83,17M6,17A1,1 0 0,0 5,18A1,1 0 0,0 6,19A1,1 0 0,0 7,18A1,1 0 0,0 6,17M6,3A3,3 0 0,1 9,6C9,7.31 8.17,8.42 7,8.83V10H5V8.83C3.83,8.42 3,7.31 3,6A3,3 0 0,1 6,3M6,5A1,1 0 0,0 5,6A1,1 0 0,0 6,7A1,1 0 0,0 7,6A1,1 0 0,0 6,5M11,19V17H13V19H11M7,13H5V11H7V13Z`,check:`M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z`,layers:`M12,18.54L19.37,12.8L21,14.07L12,21.07L3,14.07L4.62,12.81L12,18.54M12,16L3,9L12,2L21,9L12,16M12,4.53L6.26,9L12,13.47L17.74,9L12,4.53Z`,info:`M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z`,download:`M5,20H19V18H5M19,9H15V3H9V9H5L12,16L19,9Z`,update:`M21,10.12H14.22L16.96,7.3C14.23,4.6 9.81,4.5 7.08,7.2C4.35,9.91 4.35,14.28 7.08,17C9.81,19.7 14.23,19.7 16.96,17C18.32,15.65 19,14.08 19,12.1H21C21,14.08 20.12,16.65 18.36,18.39C14.85,21.87 9.15,21.87 5.64,18.39C2.14,14.92 2.11,9.28 5.62,5.81C9.13,2.34 14.76,2.34 18.27,5.81L21,3V10.12M12.5,8V12.25L16,14.33L15.28,15.54L11,13V8H12.5Z`,close:`M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z`});var _hoisted_1$22={class:`training-course-creator`,"aria-label":`New course`};var _hoisted_2$18={class:`tcc-header`};var _hoisted_3$17={class:`tcc-header__icon`,"aria-hidden":`true`};var _hoisted_4$13={class:`tcc-steps`};var _hoisted_5$13={class:`tcc-step__marker`,"aria-hidden":`true`};var _hoisted_6$9={class:`tcc-step__body`};var _hoisted_7$8={class:`tcc-step__marker`,"aria-hidden":`true`};var _hoisted_8$8={class:`tcc-step__body`};var _hoisted_9$6={key:0,class:`tcc-empty`,role:`status`};var _hoisted_10$5=[`disabled`];var _hoisted_11$5={class:`tcc-topics`};var _hoisted_12$5={key:0,class:`tcc-step tcc-step--done`};var _hoisted_13$5={class:`tcc-step__body`};var _hoisted_14$5={class:`training-course-creator__order`};var _hoisted_15$5={class:`tcc-order__index`,"aria-hidden":`true`};var _hoisted_16$5={class:`tcc-order__name`};var _hoisted_17$5={class:`tcc-order__moves`};var _hoisted_18$5={class:`tcc-actions`};var _sfc_main$37={__name:`TrainingCourseCreator`,props:{topics:{type:Array,required:true},busy:Boolean},emits:[`create`,`cancel`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const name=ref(``);const selected=ref([]);const key=topic=>JSON.stringify([topic.topicId,topic.release]);const chosen=computed(()=>selected.value.map(value=>props.topics.find(topic=>key(topic)===value)).filter(Boolean));const createEnabled=computed(()=>!props.busy&&name.value.trim().length>0&&name.value.trim().length<=120&&chosen.value.length>0);function toggle(topic,checked){const value=key(topic);selected.value=checked?[...selected.value.filter(item=>item!==value),value]:selected.value.filter(item=>item!==value)}function move(index,offset){const order=chosen.value.map(key);[order[index],order[index+offset]]=[order[index+offset],order[index]];selected.value=order}function requestCreate(){if(createEnabled.value)emit(`create`,{title:name.value.trim(),topics:chosen.value.map(({topicId,release})=>({topicId,release}))})}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$22,[createBaseVNode(`header`,_hoisted_2$18,[createBaseVNode(`span`,_hoisted_3$17,[createVNode(VIcon,{icon:unref(trainingIcons).path,size:`28`},null,8,[`icon`])]),_cache[2]||(_cache[2]=createBaseVNode(`div`,null,[createBaseVNode(`h3`,{id:`tcc-title`},`New course`),createBaseVNode(`p`,null,`Name the course and choose whole installed topics in the order to learn them. Lessons and their saved progress are shared with every course that contains them.`)],-1))]),createBaseVNode(`ol`,_hoisted_4$13,[createBaseVNode(`li`,{class:normalizeClass([`tcc-step`,{"tcc-step--done":name.value.trim().length>0}])},[createBaseVNode(`span`,_hoisted_5$13,[name.value.trim().length>0?(openBlock(),createBlock(VIcon,{key:0,icon:unref(trainingIcons).check,size:`16`},null,8,[`icon`])):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`1`)],64))]),createBaseVNode(`div`,_hoisted_6$9,[_cache[3]||(_cache[3]=createBaseVNode(`p`,{class:`tcc-step__title`},`Name it`,-1)),createVNode(VTextField,{modelValue:name.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>name.value=$event),label:`Course name`,counter:`120`,maxlength:`120`,variant:`outlined`,rounded:`lg`,disabled:__props.busy},null,8,[`modelValue`,`disabled`])])],2),createBaseVNode(`li`,{class:normalizeClass([`tcc-step`,{"tcc-step--done":chosen.value.length>0}])},[createBaseVNode(`span`,_hoisted_7$8,[chosen.value.length>0?(openBlock(),createBlock(VIcon,{key:0,icon:unref(trainingIcons).check,size:`16`},null,8,[`icon`])):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`2`)],64))]),createBaseVNode(`div`,_hoisted_8$8,[!__props.topics.length?(openBlock(),createElementBlock(`p`,_hoisted_9$6,`No topics from enabled released courses are installed. Ask the owner to install and enable a course first.`)):(openBlock(),createElementBlock(`fieldset`,{key:1,class:`training-course-creator__topics`,disabled:__props.busy},[_cache[4]||(_cache[4]=createBaseVNode(`legend`,{class:`tcc-step__title`},`Installed topics`,-1)),createBaseVNode(`div`,_hoisted_11$5,[(openBlock(true),createElementBlock(Fragment,null,renderList(__props.topics,topic=>{return openBlock(),createElementBlock(`div`,{key:key(topic),class:normalizeClass([`tcc-topic`,{"tcc-topic--on":selected.value.includes(key(topic))}])},[createVNode(VCheckbox,{"model-value":selected.value.includes(key(topic)),color:`primary`,density:`comfortable`,label:`${topic.title} · ${topic.release}`,"hide-details":``,"onUpdate:modelValue":$event=>toggle(topic,$event)},null,8,[`model-value`,`label`,`onUpdate:modelValue`])],2)}),128))])],8,_hoisted_10$5))])],2),chosen.value.length?(openBlock(),createElementBlock(`li`,_hoisted_12$5,[_cache[8]||(_cache[8]=createBaseVNode(`span`,{class:`tcc-step__marker`,"aria-hidden":`true`},`3`,-1)),createBaseVNode(`div`,_hoisted_13$5,[_cache[7]||(_cache[7]=createBaseVNode(`p`,{class:`tcc-step__title`},`Topic order`,-1)),createBaseVNode(`ol`,_hoisted_14$5,[(openBlock(true),createElementBlock(Fragment,null,renderList(chosen.value,(topic,index)=>{return openBlock(),createElementBlock(`li`,{key:key(topic)},[createBaseVNode(`span`,_hoisted_15$5,toDisplayString(index+1),1),createBaseVNode(`span`,_hoisted_16$5,toDisplayString(topic.title)+` · `+toDisplayString(topic.release),1),createBaseVNode(`span`,_hoisted_17$5,[createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,"prepend-icon":unref(trainingIcons).chevronUp,disabled:__props.busy||index===0,"aria-label":`Move ${topic.title} up`,onClick:$event=>move(index,-1)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Up`,-1)])]),_:1},8,[`prepend-icon`,`disabled`,`aria-label`,`onClick`]),createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,"prepend-icon":unref(trainingIcons).chevronDown,disabled:__props.busy||index===chosen.value.length-1,"aria-label":`Move ${topic.title} down`,onClick:$event=>move(index,1)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Down`,-1)])]),_:1},8,[`prepend-icon`,`disabled`,`aria-label`,`onClick`])])])}),128))])])])):createCommentVNode(``,true)]),createBaseVNode(`footer`,_hoisted_18$5,[createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,disabled:__props.busy,onClick:_cache[1]||(_cache[1]=$event=>emit(`cancel`))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,"prepend-icon":unref(trainingIcons).plus,disabled:!createEnabled.value,onClick:requestCreate},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Create course`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])])])}}};var TrainingCourseCreator_default=_plugin_vue_export_helper_default(_sfc_main$37,[[`__scopeId`,`data-v-c5c653a1`]]);function offered(course,lesson,canTryPreviews=false){return course.enabled&&(course.status===`released`||canTryPreviews)&&lesson.status===`published`}function previewCourse(course){return course.enabled&&course.status!==`released`}var previewNote=`Preview — the workspace owner can try it; it becomes startable when released.`;function lessonStatus(lesson,lessonProgress){const saved=lessonProgress.find(value=>value.lessonCode===lesson.code&&value.lessonHash===lesson.hash);if(saved?.completed)return`completed`;return saved&&(saved.open||saved.passed>0)?`in-progress`:`not-started`}function earlierCompletion(lesson,lessonProgress,attempts){const done=lessonProgress.filter(value=>value.lessonCode===lesson.code&&value.lessonHash!==lesson.hash&&value.completed);if(!done.length)return null;return{release:done.flatMap(value=>attempts.filter(attempt=>attempt?.pin?.lesson?.code===value.lessonCode&&attempt.pin.lesson.hash===value.lessonHash).map(attempt=>attempt.pin.course?.release)).filter(Boolean).at(-1)||``}}function courseProgress(course,lessonProgress=[],active=null,history=[],{canTryPreviews=false}={}){const attempts=[...history,...active?[active]:[]];const lessons=course.lessons.map(lesson=>{const status=lessonStatus(lesson,lessonProgress);const earlier=status===`completed`?null:earlierCompletion(lesson,lessonProgress,attempts);return{lesson,status,current:Boolean(lessonProgress.find(value=>value.lessonCode===lesson.code&&value.lessonHash===lesson.hash)?.open),...earlier?{earlier}:{}}});const next=lessons.find(value=>value.status!==`completed`&&offered(course,value.lesson,canTryPreviews))?.lesson||null;const counted=lessons.some(value=>value.lesson.required)?lessons.filter(value=>value.lesson.required):lessons;return{lessons,topics:course.topics.map(topic=>({...topic,lessons:lessons.filter(value=>value.lesson.topicId===topic.topicId&&value.lesson.topicRelease===topic.release)})),completed:counted.filter(value=>value.status===`completed`).length,total:counted.length,activeHere:Boolean(active&&active.pin.course.courseId===course.courseId&&active.pin.course.release===course.release),next}}var statusLabels=Object.freeze({completed:`Completed`,"in-progress":`In progress`,"not-started":`Not started`});function courseStatusLabel(course){return!course.enabled?`Disabled for new lessons`:course.status===`released`?`Enabled`:`Preview course`}function earlierCompletionLabel(earlier){return earlier?`Completed in ${earlier.release||`an earlier release`} · updated since`:``}function hashText(value){let hash=2166136261;for(const char of String(value)){hash^=char.codePointAt(0);hash=Math.imul(hash,16777619)}return hash>>>0}var patterns=Object.freeze([`waves`,`orbits`,`grid`,`peaks`]);function courseArt(courseId){const hash=hashText(courseId);const hue=hash%360;const shift=35+(hash>>>9)%50;return{id:`v64-course-art-${hash.toString(36)}`,pattern:patterns[(hash>>>3)%patterns.length],from:`hsl(${hue} 62% 38%)`,to:`hsl(${(hue+shift)%360} 70% 52%)`,accent:`hsl(${(hue+shift*2)%360} 90% 78%)`,seed:hash}}function courseMonogram(title){const words=String(title||``).split(/\s+[—–-]\s+/).pop().trim().split(/\s+/).filter(word=>/^[\p{L}\p{N}]/u.test(word));return(words.length>1?words[0][0]+words[1][0]:(words[0]||`?`).slice(0,2)).toUpperCase()}var _hoisted_1$21={class:`training-course-art`,"aria-hidden":`true`};var _hoisted_2$17={viewBox:`0 0 320 120`,preserveAspectRatio:`xMidYMid slice`,focusable:`false`};var _hoisted_3$16=[`id`];var _hoisted_4$12=[`stop-color`];var _hoisted_5$12=[`stop-color`];var _hoisted_6$8=[`id`];var _hoisted_7$7=[`stop-color`];var _hoisted_8$7=[`stop-color`];var _hoisted_9$5=[`fill`];var _hoisted_10$4=[`fill`];var _hoisted_11$4={key:0,fill:`none`,stroke:`#fff`,"stroke-linecap":`round`};var _hoisted_12$4=[`d`,`stroke-opacity`,`stroke-width`];var _hoisted_13$4={key:1,fill:`none`,stroke:`#fff`};var _hoisted_14$4=[`cx`,`cy`,`r`,`stroke-opacity`];var _hoisted_15$4=[`cx`,`cy`,`fill`];var _hoisted_16$4={key:2};var _hoisted_17$4=[`cx`,`cy`,`r`,`fill`,`fill-opacity`];var _hoisted_18$4={key:3,fill:`#fff`};var _hoisted_19$4=[`d`,`fill-opacity`];var _hoisted_20$4={key:4,class:`training-course-art__path`};var _hoisted_21$4=[`d`];var _hoisted_22$4=[`cx`,`cy`,`fill`,`stroke-opacity`];var _hoisted_23$4=[`d`,`stroke`];var _hoisted_24$3=[`cx`,`cy`];var _hoisted_25$2={class:`training-course-art__monogram`};var _sfc_main$36={__name:`TrainingCourseArt`,props:{courseId:{type:String,required:true},title:{type:String,default:``},statuses:{type:Array,default:()=>[]}},setup(__props){const props=__props;const art=computed(()=>courseArt(props.courseId));const monogram=computed(()=>courseMonogram(props.title));const rand=index=>(art.value.seed>>>index%24^index*2654435761)>>>0;const waves=computed(()=>[0,1,2].map(row=>{const y=34+row*30+rand(row)%10;const amp=8+rand(row+3)%10;return`M -10 ${y} C 60 ${y-amp}, 100 ${y+amp}, 170 ${y} S 280 ${y-amp}, 340 ${y}`}));const orbits=computed(()=>({cx:230+rand(1)%60,cy:20+rand(2)%50,radii:[26,52,80,110]}));const dots=computed(()=>{const list=[];for(let y=14;y<120;y+=18)for(let x=120;x<330;x+=18)list.push({x,y,on:rand(x*7+y)%7===0});return list});const peaks=computed(()=>[0,1,2].map(layer=>{const base=120;const step=70-layer*12;let d=`M -10 ${base}`;for(let x=-10,i=0;x<340;x+=step,i++)d+=` L ${x+step/2} ${50+layer*18+rand(layer*9+i)%26} L ${x+step} ${110+layer*4}`;return`${d} L 340 ${base} Z`}));const path=computed(()=>{const statuses=props.statuses.slice(0,12);const count=statuses.length;if(!count)return null;const start=108;const nodes=statuses.map((status,index)=>{return{x:count===1?204:start+192*index/(count-1),y:84-Math.sin(index/Math.max(1,count-1)*Math.PI)*26,status}});return{nodes,d:nodes.map((node,index)=>`${index?`L`:`M`} ${node.x.toFixed(1)} ${node.y.toFixed(1)}`).join(` `)}});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$21,[(openBlock(),createElementBlock(`svg`,_hoisted_2$17,[createBaseVNode(`defs`,null,[createBaseVNode(`linearGradient`,{id:`${art.value.id}-bg`,x1:`0`,y1:`0`,x2:`1`,y2:`1`},[createBaseVNode(`stop`,{offset:`0`,"stop-color":art.value.from},null,8,_hoisted_4$12),createBaseVNode(`stop`,{offset:`1`,"stop-color":art.value.to},null,8,_hoisted_5$12)],8,_hoisted_3$16),createBaseVNode(`radialGradient`,{id:`${art.value.id}-glow`,cx:`0.85`,cy:`0.1`,r:`0.7`},[createBaseVNode(`stop`,{offset:`0`,"stop-color":art.value.accent,"stop-opacity":`0.55`},null,8,_hoisted_7$7),createBaseVNode(`stop`,{offset:`1`,"stop-color":art.value.accent,"stop-opacity":`0`},null,8,_hoisted_8$7)],8,_hoisted_6$8)]),createBaseVNode(`rect`,{width:`320`,height:`120`,fill:`url(#${art.value.id}-bg)`},null,8,_hoisted_9$5),createBaseVNode(`rect`,{width:`320`,height:`120`,fill:`url(#${art.value.id}-glow)`},null,8,_hoisted_10$4),art.value.pattern===`waves`?(openBlock(),createElementBlock(`g`,_hoisted_11$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(waves.value,(d,index)=>{return openBlock(),createElementBlock(`path`,{key:index,d,"stroke-opacity":.14+index*.06,"stroke-width":10-index*3},null,8,_hoisted_12$4)}),128))])):art.value.pattern===`orbits`?(openBlock(),createElementBlock(`g`,_hoisted_13$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(orbits.value.radii,(r,index)=>{return openBlock(),createElementBlock(`circle`,{key:r,cx:orbits.value.cx,cy:orbits.value.cy,r,"stroke-opacity":.26-index*.05,"stroke-width":`2`},null,8,_hoisted_14$4)}),128)),createBaseVNode(`circle`,{cx:orbits.value.cx,cy:orbits.value.cy,r:`10`,fill:art.value.accent,"fill-opacity":`0.7`,stroke:`none`},null,8,_hoisted_15$4)])):art.value.pattern===`grid`?(openBlock(),createElementBlock(`g`,_hoisted_16$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(dots.value,dot=>{return openBlock(),createElementBlock(`circle`,{key:`${dot.x}-${dot.y}`,cx:dot.x,cy:dot.y,r:dot.on?3.2:1.6,fill:dot.on?art.value.accent:`#fff`,"fill-opacity":dot.on?.9:.28},null,8,_hoisted_17$4)}),128))])):(openBlock(),createElementBlock(`g`,_hoisted_18$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(peaks.value,(d,index)=>{return openBlock(),createElementBlock(`path`,{key:index,d,"fill-opacity":.08+index*.06},null,8,_hoisted_19$4)}),128))])),path.value?(openBlock(),createElementBlock(`g`,_hoisted_20$4,[createBaseVNode(`path`,{d:path.value.d,fill:`none`,stroke:`#fff`,"stroke-opacity":`0.55`,"stroke-width":`2.5`,"stroke-dasharray":`2 6`,"stroke-linecap":`round`},null,8,_hoisted_21$4),(openBlock(true),createElementBlock(Fragment,null,renderList(path.value.nodes,(node,index)=>{return openBlock(),createElementBlock(`g`,{key:index},[createBaseVNode(`circle`,{cx:node.x,cy:node.y,r:`7.5`,fill:node.status===`completed`?`#fff`:`rgba(0,0,0,0.18)`,stroke:`#fff`,"stroke-opacity":node.status===`not-started`?.6:1,"stroke-width":`2`},null,8,_hoisted_22$4),node.status===`completed`?(openBlock(),createElementBlock(`path`,{key:0,d:`M ${node.x-3.2} ${node.y} l 2.2 2.3 l 4.2 -4.6`,fill:`none`,stroke:art.value.from,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,8,_hoisted_23$4)):node.status===`in-progress`?(openBlock(),createElementBlock(`circle`,{key:1,cx:node.x,cy:node.y,r:`3`,fill:`#fff`},null,8,_hoisted_24$3)):createCommentVNode(``,true)])}),128))])):createCommentVNode(``,true)])),createBaseVNode(`span`,_hoisted_25$2,toDisplayString(monogram.value),1)])}}};var TrainingCourseArt_default=_plugin_vue_export_helper_default(_sfc_main$36,[[`__scopeId`,`data-v-a28d3001`]]);var _hoisted_1$20=[`aria-label`,`aria-valuemax`,`aria-valuenow`];var _hoisted_2$16=[`viewBox`];var _hoisted_3$15=[`cx`,`cy`,`r`,`stroke-width`];var _hoisted_4$11=[`cx`,`cy`,`r`,`stroke-width`,`stroke-dasharray`,`transform`];var _hoisted_5$11={class:`training-progress-ring__content`};var _sfc_main$35={__name:`TrainingProgressRing`,props:{value:{type:Number,default:0},max:{type:Number,default:0},size:{type:Number,default:72},stroke:{type:Number,default:8},label:{type:String,required:true}},setup(__props){const props=__props;const radius=computed(()=>(props.size-props.stroke)/2);const circumference=computed(()=>2*Math.PI*radius.value);const fraction=computed(()=>props.max>0?Math.min(1,Math.max(0,props.value/props.max)):0);const percent=computed(()=>Math.round(fraction.value*100));const gap=computed(()=>fraction.value>0&&fraction.value<1?props.stroke*1.5:0);const visible=computed(()=>Math.max(0,fraction.value*circumference.value-gap.value));return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{class:`training-progress-ring`,role:`progressbar`,"aria-label":__props.label,"aria-valuemin":`0`,"aria-valuemax":__props.max,"aria-valuenow":Math.min(__props.value,__props.max),style:normalizeStyle({width:`${__props.size}px`,height:`${__props.size}px`})},[(openBlock(),createElementBlock(`svg`,{viewBox:`0 0 ${__props.size} ${__props.size}`,"aria-hidden":`true`,focusable:`false`},[createBaseVNode(`circle`,{class:`training-progress-ring__track`,cx:__props.size/2,cy:__props.size/2,r:radius.value,fill:`none`,"stroke-width":__props.stroke},null,8,_hoisted_3$15),visible.value>0?(openBlock(),createElementBlock(`circle`,{key:0,class:`training-progress-ring__indicator`,cx:__props.size/2,cy:__props.size/2,r:radius.value,fill:`none`,"stroke-width":__props.stroke,"stroke-linecap":`round`,"stroke-dasharray":`${visible.value} ${circumference.value}`,transform:`rotate(-90 ${__props.size/2} ${__props.size/2})`},null,8,_hoisted_4$11)):createCommentVNode(``,true)],8,_hoisted_2$16)),createBaseVNode(`span`,_hoisted_5$11,[renderSlot(_ctx.$slots,`default`,{},()=>[createTextVNode(toDisplayString(percent.value)+`%`,1)],true)])],12,_hoisted_1$20)}}};var TrainingProgressRing_default=_plugin_vue_export_helper_default(_sfc_main$35,[[`__scopeId`,`data-v-8c0b2060`]]);var _hoisted_1$19={key:0,class:`training-start-feedback training-start-feedback--progress`,role:`status`,"data-test":`lesson-start-feedback`};var _hoisted_2$15={key:1,class:`training-start-feedback training-start-feedback--error`,role:`alert`,"data-test":`lesson-start-feedback`};var _hoisted_3$14={key:2,class:`training-start-feedback training-start-feedback--warn`,role:`status`,"data-test":`lesson-start-feedback`};var _sfc_main$34={__name:`TrainingStartFeedback`,props:{feedback:{type:Object,required:true}},setup(__props){return(_ctx,_cache)=>{return __props.feedback.phase===`starting`?(openBlock(),createElementBlock(`div`,_hoisted_1$19,[createVNode(VProgressCircular,{indeterminate:``,size:`24`,width:`3`,color:`primary`}),_cache[0]||(_cache[0]=createBaseVNode(`div`,null,[createBaseVNode(`strong`,null,`Starting your lesson`),createBaseVNode(`p`,null,`Creating your practice project. This can take a while; the lesson opens by itself when it is ready.`)],-1))])):__props.feedback.phase===`failed`?(openBlock(),createElementBlock(`div`,_hoisted_2$15,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`24`},null,8,[`icon`]),createBaseVNode(`div`,null,[_cache[1]||(_cache[1]=createBaseVNode(`strong`,null,`The lesson did not start`,-1)),createBaseVNode(`p`,null,toDisplayString(__props.feedback.message),1)])])):__props.feedback.phase===`unconfirmed`?(openBlock(),createElementBlock(`div`,_hoisted_3$14,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`24`},null,8,[`icon`]),_cache[2]||(_cache[2]=createBaseVNode(`div`,null,[createBaseVNode(`strong`,null,`Lesson start not confirmed`),createBaseVNode(`p`,null,`Use Retry lesson start to repeat that same request.`)],-1))])):createCommentVNode(``,true)}}};var TrainingStartFeedback_default=_plugin_vue_export_helper_default(_sfc_main$34,[[`__scopeId`,`data-v-94e65a74`]]);var _hoisted_1$18=[`aria-label`];var _hoisted_2$14={class:`training-course-page__back`};var _hoisted_3$13={class:`training-course-page__hero-body`};var _hoisted_4$10={class:`training-course-page__hero-text`};var _hoisted_5$10={class:`training-course-page__title`};var _hoisted_6$7={class:`training-course-page__meta`};var _hoisted_7$6={class:`training-course-page__chip`};var _hoisted_8$6={class:`training-course-page__chip`};var _hoisted_9$4={class:`training-course-page__count`};var _hoisted_10$3={class:`training-course-page__ring-value`};var _hoisted_11$3={class:`training-course-page__next-text`};var _hoisted_12$3={class:`training-course-page__next-title`};var _hoisted_13$3={key:2,class:`training-course-page__next-text`};var _hoisted_14$3={key:3,class:`training-course-page__next-title training-course-page__preview-note`};var _hoisted_15$3={key:4,class:`training-course-page__next-title`};var _hoisted_16$3={key:1,class:`training-course-page__empty`,role:`note`};var _hoisted_17$3={class:`training-course-page__topics`};var _hoisted_18$3={class:`training-course-page__topic-head`};var _hoisted_19$3={class:`training-course-page__topic-index`,"aria-hidden":`true`};var _hoisted_20$3={class:`training-course-page__topic-text`};var _hoisted_21$3=[`aria-label`];var _hoisted_22$3={key:0,class:`training-course-page__empty`};var _hoisted_23$3={class:`training-course-page__path`};var _hoisted_24$2={class:`training-course-page__node`,"aria-hidden":`true`};var _hoisted_25$1={key:0,viewBox:`0 0 24 24`};var _hoisted_26$1={key:1,viewBox:`0 0 24 24`};var _hoisted_27$1={key:2};var _hoisted_28$1={class:`training-course-page__card`};var _hoisted_29$1={class:`training-course-page__card-main`};var _hoisted_30$1={class:`training-course-page__lesson-title`};var _hoisted_31$1={class:`training-course-page__lesson-meta`};var _hoisted_32$1={key:0};var _hoisted_33$1={key:0,class:`training-course-page__earlier`};var _hoisted_34$1={class:`training-course-page__identity`};var _sfc_main$33={__name:`TrainingCoursePage`,props:{course:{type:Object,required:true},progress:{type:Object,required:true},startAllowed:Boolean,canTryPreviews:Boolean,resumeAllowed:Boolean,startFeedback:{type:Object,default:null},startingLesson:{type:Function,default:()=>false}},emits:[`back`,`start`,`resume`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const complete=computed(()=>Boolean(props.progress.total&&props.progress.completed===props.progress.total));const availability=computed(()=>courseStatusLabel(props.course));const preview=computed(()=>previewCourse(props.course));const isNext=lesson=>Boolean(props.progress.next&&props.progress.next.code===lesson.code&&props.progress.next.hash===lesson.hash);const path=computed(()=>{let step=0;return props.progress.topics.map((topic,index)=>({topic,index:index+1,done:topic.lessons.filter(value=>value.status===`completed`).length,lessons:topic.lessons.map(value=>({...value,step:++step,next:isNext(value.lesson)}))}))});return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:`training-course-page`,"aria-label":`Course ${__props.course.title}`},[createBaseVNode(`div`,_hoisted_2$14,[createVNode(VBtn,{variant:`text`,"min-height":`48`,class:`training-course-page__back-btn`,onClick:_cache[0]||(_cache[0]=$event=>emit(`back`))},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createBaseVNode(`svg`,{class:`training-course-page__back-icon`,viewBox:`0 0 24 24`,"aria-hidden":`true`},[createBaseVNode(`path`,{d:`M15.4 7.4 14 6l-6 6 6 6 1.4-1.4L10.8 12z`})],-1),createTextVNode(` Back to courses `,-1)])]),_:1})]),createBaseVNode(`header`,{class:normalizeClass([`training-course-page__hero`,{"is-complete":complete.value}])},[createVNode(TrainingCourseArt_default,{class:`training-course-page__cover`,"course-id":__props.course.courseId,title:__props.course.title,statuses:__props.progress.lessons.map(value=>value.status)},null,8,[`course-id`,`title`,`statuses`]),createBaseVNode(`div`,_hoisted_3$13,[createBaseVNode(`div`,_hoisted_4$10,[_cache[4]||(_cache[4]=createBaseVNode(`p`,{class:`training-course-page__eyebrow`},`Course`,-1)),createBaseVNode(`h3`,_hoisted_5$10,toDisplayString(__props.course.title),1),createBaseVNode(`div`,_hoisted_6$7,[createBaseVNode(`span`,_hoisted_7$6,[createBaseVNode(`code`,null,toDisplayString(__props.course.courseId)+` · `+toDisplayString(__props.course.release),1)]),createBaseVNode(`span`,{class:normalizeClass([`training-course-page__chip`,{"is-muted":!__props.course.enabled||__props.course.status!==`released`}])},toDisplayString(availability.value),3),createBaseVNode(`span`,_hoisted_8$6,toDisplayString(__props.progress.topics.length)+` `+toDisplayString(__props.progress.topics.length===1?`topic`:`topics`),1)]),createBaseVNode(`p`,_hoisted_9$4,toDisplayString(__props.progress.completed)+` of `+toDisplayString(__props.progress.total)+` lessons complete`,1)]),createVNode(TrainingProgressRing_default,{class:`training-course-page__ring`,value:__props.progress.completed,max:__props.progress.total,size:88,stroke:9,label:`${__props.progress.completed} of ${__props.progress.total} lessons complete`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_10$3,[createBaseVNode(`strong`,null,toDisplayString(__props.progress.completed),1),createTextVNode(`/`+toDisplayString(__props.progress.total),1)])]),_:1},8,[`value`,`max`,`label`])])],2),createBaseVNode(`div`,{class:normalizeClass([`training-course-page__next`,{"is-complete":complete.value}])},[__props.progress.activeHere?(openBlock(),createElementBlock(Fragment,{key:0},[_cache[6]||(_cache[6]=createBaseVNode(`div`,{class:`training-course-page__next-text`},[createBaseVNode(`p`,{class:`training-course-page__next-label`},`Lesson in progress`),createBaseVNode(`p`,{class:`training-course-page__next-title`},`Pick up where you left off.`)],-1)),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,rounded:`pill`,disabled:!__props.resumeAllowed,onClick:_cache[1]||(_cache[1]=$event=>emit(`resume`))},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Continue lesson`,-1)])]),_:1},8,[`disabled`])],64)):__props.progress.next?(openBlock(),createElementBlock(Fragment,{key:1},[createBaseVNode(`div`,_hoisted_11$3,[_cache[7]||(_cache[7]=createBaseVNode(`p`,{class:`training-course-page__next-label`},`Up next`,-1)),createBaseVNode(`p`,_hoisted_12$3,toDisplayString(__props.progress.next.title)+` · `+toDisplayString(__props.progress.next.code),1)]),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,rounded:`pill`,readonly:__props.startingLesson(__props.progress.next),disabled:!__props.startAllowed&&!__props.startingLesson(__props.progress.next),onClick:_cache[2]||(_cache[2]=$event=>emit(`start`,__props.progress.next))},{default:withCtx(()=>[__props.startingLesson(__props.progress.next)?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VProgressCircular,{indeterminate:``,size:`18`,width:`2`,class:`training-course-page__spinner`}),_cache[8]||(_cache[8]=createTextVNode(`Starting lesson…`,-1))],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`Start next lesson`)],64))]),_:1},8,[`readonly`,`disabled`])],64)):complete.value?(openBlock(),createElementBlock(`div`,_hoisted_13$3,[..._cache[9]||(_cache[9]=[createBaseVNode(`p`,{class:`training-course-page__next-label`},`All lessons done`,-1),createBaseVNode(`p`,{class:`training-course-page__next-title`},`Course complete.`,-1)])])):preview.value&&!__props.canTryPreviews?(openBlock(),createElementBlock(`p`,_hoisted_14$3,toDisplayString(unref(previewNote)),1)):(openBlock(),createElementBlock(`p`,_hoisted_15$3,`No lesson in this course can be started here.`))],2),__props.startFeedback?(openBlock(),createBlock(TrainingStartFeedback_default,{key:0,feedback:__props.startFeedback},null,8,[`feedback`])):createCommentVNode(``,true),__props.course.unusableLessons?.length?(openBlock(),createElementBlock(`p`,_hoisted_16$3,` Not shown, because this version of Vibe64 can't teach `+toDisplayString(__props.course.unusableLessons.length===1?`it`:`them`)+`: `+toDisplayString(__props.course.unusableLessons.map(lesson=>lesson.title).join(`, `))+`. Update the course when Courses offers an update. `,1)):createCommentVNode(``,true),createBaseVNode(`ol`,_hoisted_17$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(path.value,({topic,index,done,lessons})=>{return openBlock(),createElementBlock(`li`,{key:JSON.stringify([topic.topicId,topic.release]),class:`training-course-page__topic`},[createBaseVNode(`div`,_hoisted_18$3,[createBaseVNode(`span`,_hoisted_19$3,toDisplayString(index),1),createBaseVNode(`div`,_hoisted_20$3,[createBaseVNode(`h4`,null,toDisplayString(topic.title),1),createBaseVNode(`p`,null,toDisplayString(topic.topicId)+` · `+toDisplayString(topic.release),1)]),lessons.length?(openBlock(),createElementBlock(`span`,{key:0,class:`training-course-page__topic-done`,"aria-label":`${done} of ${lessons.length} lessons completed in this topic`},toDisplayString(done)+`/`+toDisplayString(lessons.length),9,_hoisted_21$3)):createCommentVNode(``,true)]),!lessons.length?(openBlock(),createElementBlock(`p`,_hoisted_22$3,`This topic has no displayed lesson choices.`)):createCommentVNode(``,true),createBaseVNode(`ol`,_hoisted_23$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(lessons,({lesson,status,current,step,next,earlier})=>{return openBlock(),createElementBlock(`li`,{key:JSON.stringify([lesson.code,lesson.hash]),class:normalizeClass([`training-course-page__lesson`,[`is-${status}`,{"is-next":next&&!__props.progress.activeHere}]])},[createBaseVNode(`span`,_hoisted_24$2,[status===`completed`?(openBlock(),createElementBlock(`svg`,_hoisted_25$1,[..._cache[10]||(_cache[10]=[createBaseVNode(`path`,{d:`M9.5 16.2 5.3 12l-1.4 1.4 5.6 5.6 11-11-1.4-1.4z`},null,-1)])])):status===`in-progress`?(openBlock(),createElementBlock(`svg`,_hoisted_26$1,[..._cache[11]||(_cache[11]=[createBaseVNode(`path`,{d:`M8 5.5v13l10.5-6.5z`},null,-1)])])):(openBlock(),createElementBlock(`span`,_hoisted_27$1,toDisplayString(step),1))]),createBaseVNode(`div`,_hoisted_28$1,[createBaseVNode(`div`,_hoisted_29$1,[createBaseVNode(`strong`,_hoisted_30$1,toDisplayString(lesson.title)+` · `+toDisplayString(lesson.code),1),createBaseVNode(`p`,_hoisted_31$1,[createBaseVNode(`span`,{class:normalizeClass([`training-course-page__status`,`is-${status}`])},toDisplayString(unref(statusLabels)[status]),3),_cache[12]||(_cache[12]=createBaseVNode(`span`,{"aria-hidden":`true`},` · `,-1)),createBaseVNode(`span`,null,toDisplayString(lesson.status===`published`?`Published`:`Draft — unavailable for new lessons`),1),!lesson.required?(openBlock(),createElementBlock(`span`,_hoisted_32$1,` · Optional`)):createCommentVNode(``,true)]),earlier?(openBlock(),createElementBlock(`p`,_hoisted_33$1,toDisplayString(unref(earlierCompletionLabel)(earlier)),1)):createCommentVNode(``,true),createBaseVNode(`details`,_hoisted_34$1,[_cache[13]||(_cache[13]=createBaseVNode(`summary`,null,`Lesson identity`,-1)),createBaseVNode(`code`,null,toDisplayString(lesson.hash),1)])]),unref(offered)(__props.course,lesson,__props.canTryPreviews)&&!current?(openBlock(),createBlock(VBtn,{key:0,variant:next?`tonal`:`text`,color:`primary`,"min-height":`48`,rounded:`pill`,class:`training-course-page__start`,readonly:__props.startingLesson(lesson),disabled:!__props.startAllowed&&!__props.startingLesson(lesson),onClick:$event=>emit(`start`,lesson)},{default:withCtx(()=>[__props.startingLesson(lesson)?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VProgressCircular,{indeterminate:``,size:`18`,width:`2`,class:`training-course-page__spinner`}),_cache[14]||(_cache[14]=createTextVNode(`Starting lesson…`,-1))],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`Start lesson`)],64))]),_:2},1032,[`variant`,`readonly`,`disabled`,`onClick`])):createCommentVNode(``,true)])],2)}),128))])])}),128))])],8,_hoisted_1$18)}}};var TrainingCoursePage_default=_plugin_vue_export_helper_default(_sfc_main$33,[[`__scopeId`,`data-v-d3fbbe77`]]);var _hoisted_1$17=[`aria-busy`];var _hoisted_2$13={class:`tcc__head`};var _hoisted_3$12={class:`tcc__eyebrow`};var _hoisted_4$9={key:0,class:`tcc__loading`,role:`status`};var _hoisted_5$9={key:2,class:`tcc__note`,role:`status`};var _hoisted_6$6={key:3,class:`tcc__note`,role:`status`};var _hoisted_7$5=[`aria-label`];var _hoisted_8$5={class:`tcc__topic-title`};var _hoisted_9$3={key:0,class:`tcc__empty`};var _hoisted_10$2={class:`tcc__list`};var _hoisted_11$2=[`data-course`];var _hoisted_12$2={class:`tcc__course-main`};var _hoisted_13$2={class:`tcc__title`};var _hoisted_14$2={class:`tcc__chips`};var _hoisted_15$2={class:`tcc__chip`};var _hoisted_16$2={class:`tcc__chip`};var _hoisted_17$2={key:1,class:`tcc__chip tcc__chip--update`};var _hoisted_18$2={key:0,class:`tcc__detail`};var _hoisted_19$2={key:1,class:`tcc__detail`};var _hoisted_20$2={key:2,class:`tcc__detail`};var _hoisted_21$2={key:3,class:`tcc__progress`,role:`status`};var _hoisted_22$2={key:4,class:`tcc__failure`,role:`alert`};var _hoisted_23$2={class:`tcc__actions`};var _sfc_main$32={__name:`TrainingCourseCatalogue`,props:{availableResult:{type:Object,default:null},availableLoading:Boolean,availableError:{type:String,default:``},installState:{type:Object,default:null},busy:Boolean},emits:[`install`,`view`,`refresh`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const text=value=>typeof value===`string`&&value.length>0;const ready=computed(()=>props.availableResult?.ok===true&&props.availableResult.available===true&&Array.isArray(props.availableResult.domains)&&Array.isArray(props.availableResult.courses));const courses=computed(()=>ready.value?props.availableResult.courses.filter(course=>text(course?.courseId)&&text(course.release)&&text(course.title)):[]);const topics=computed(()=>{if(!ready.value)return[];const known=new Set(props.availableResult.domains.map(domain=>domain.domainId));const groups=props.availableResult.domains.map(domain=>({id:domain.domainId,title:domain.title,courses:courses.value.filter(course=>course.domainId===domain.domainId)}));const other=courses.value.filter(course=>!known.has(course.domainId));return other.length?[...groups,{id:``,title:`Other courses`,courses:other}]:groups});const key=course=>`${course.courseId}@${course.release}`;const plural=(count,word)=>`${count} ${word}${count===1?``:`s`}`;const stateOf=course=>props.installState&&props.installState.courseId===course.courseId&&props.installState.release===course.release?props.installState:null;function progressText(course){const progress=course.installing;if(!progress)return`Downloading and verifying the course…`;if(progress.phase===`queued`)return`Waiting for another course installation to finish…`;if(progress.phase===`catalogue`)return`Reading the official catalogue…`;if(progress.phase===`topic`)return`Downloading and verifying topic ${Math.min(progress.topicsDone+1,progress.topicsTotal)} of ${progress.topicsTotal}…`;if(progress.phase===`enable`)return`Enabling the course…`;return`Installing…`}const installedLabel={enabled:`Installed`,disabled:`Disabled by the owner`,conflict:`Conflicting copy installed`,"not-installed":`Not installed`};const installedTone={enabled:`enabled`,disabled:`disabled`,conflict:`disabled`,"not-installed":`neutral`};const installable=course=>course.installed===`not-installed`;function install(course){if(props.busy||!installable(course))return;emit(`install`,{courseId:course.courseId,release:course.release})}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:`tcc training-course-catalogue`,"aria-labelledby":`tcc-heading`,"aria-busy":__props.availableLoading},[createBaseVNode(`header`,_hoisted_2$13,[createBaseVNode(`div`,null,[createBaseVNode(`p`,_hoisted_3$12,[createVNode(VIcon,{icon:unref(trainingIcons).download,size:`18`},null,8,[`icon`]),_cache[1]||(_cache[1]=createTextVNode(` Course catalogue`,-1))]),_cache[2]||(_cache[2]=createBaseVNode(`h3`,{id:`tcc-heading`},`Install a course`,-1)),_cache[3]||(_cache[3]=createBaseVNode(`p`,{class:`tcc__intro`},`Courses from the official Vibe64 catalogue, grouped by topic. Installing downloads and verifies the course on this server; it does not start a lesson.`,-1))])]),__props.availableLoading&&!ready.value?(openBlock(),createElementBlock(`div`,_hoisted_4$9,[createVNode(VProgressCircular,{indeterminate:``,size:`20`,width:`2`,color:`primary`}),_cache[4]||(_cache[4]=createBaseVNode(`span`,null,`Reading the course catalogue…`,-1))])):__props.availableError?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`,rounded:`lg`,role:`alert`},{append:withCtx(()=>[createVNode(VBtn,{variant:`text`,"min-height":`40`,disabled:__props.busy,onClick:_cache[0]||(_cache[0]=$event=>emit(`refresh`))},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Retry`,-1)])]),_:1},8,[`disabled`])]),default:withCtx(()=>[createTextVNode(toDisplayString(__props.availableError)+` `,1)]),_:1})):__props.availableResult&&!ready.value?(openBlock(),createElementBlock(`p`,_hoisted_5$9,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`20`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(__props.availableResult.error||`The course catalogue is not available in this installation.`),1)])):ready.value&&!courses.value.length?(openBlock(),createElementBlock(`p`,_hoisted_6$6,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`20`},null,8,[`icon`]),_cache[6]||(_cache[6]=createBaseVNode(`span`,null,`The catalogue has no courses yet.`,-1))])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(topics.value,topic=>{return openBlock(),createElementBlock(`section`,{key:topic.id||`other`,class:`tcc__topic`,"aria-label":`Topic ${topic.title}`},[createBaseVNode(`h4`,_hoisted_8$5,[createVNode(VIcon,{icon:unref(trainingIcons).layers,size:`20`},null,8,[`icon`]),createTextVNode(toDisplayString(topic.title),1)]),!topic.courses.length?(openBlock(),createElementBlock(`p`,_hoisted_9$3,`No courses in this topic yet.`)):createCommentVNode(``,true),createBaseVNode(`ul`,_hoisted_10$2,[(openBlock(true),createElementBlock(Fragment,null,renderList(topic.courses,course=>{return openBlock(),createElementBlock(`li`,{key:key(course),class:`tcc__course`,"data-course":key(course)},[createBaseVNode(`div`,_hoisted_12$2,[createBaseVNode(`strong`,_hoisted_13$2,toDisplayString(course.title),1),createBaseVNode(`p`,_hoisted_14$2,[createBaseVNode(`span`,_hoisted_15$2,[createBaseVNode(`code`,null,toDisplayString(course.release),1)]),createBaseVNode(`span`,{class:normalizeClass([`tcc__chip`,course.status===`released`?`tcc__chip--enabled`:`tcc__chip--preview`])},toDisplayString(course.status===`released`?`Released`:`Preview`),3),createBaseVNode(`span`,_hoisted_16$2,toDisplayString(plural(course.lessonCount,`lesson`)),1),!course.updateFrom?(openBlock(),createElementBlock(`span`,{key:0,class:normalizeClass([`tcc__chip`,`tcc__chip--${installedTone[course.installed]||`neutral`}`])},toDisplayString(installedLabel[course.installed]||course.installed),3)):createCommentVNode(``,true),course.updateFrom?(openBlock(),createElementBlock(`span`,_hoisted_17$2,[createVNode(VIcon,{icon:unref(trainingIcons).update,size:`14`},null,8,[`icon`]),createTextVNode(`Update available: `+toDisplayString(course.release),1)])):createCommentVNode(``,true)]),course.updateFrom?(openBlock(),createElementBlock(`p`,_hoisted_18$2,`You have `+toDisplayString(course.updateFrom)+`. Updating keeps your saved lessons and progress.`,1)):createCommentVNode(``,true),course.status!==`released`?(openBlock(),createElementBlock(`p`,_hoisted_19$2,`Preview course: it can be installed; until it is released, only the workspace owner can try its lessons from Courses.`)):createCommentVNode(``,true),course.installed===`disabled`?(openBlock(),createElementBlock(`p`,_hoisted_20$2,`Ask the owner to enable this release again.`)):createCommentVNode(``,true),stateOf(course)?.phase===`installing`?(openBlock(),createElementBlock(`p`,_hoisted_21$2,[createVNode(VProgressCircular,{indeterminate:``,size:`18`,width:`2`,color:`primary`}),createBaseVNode(`span`,null,toDisplayString(progressText(course)),1)])):stateOf(course)?.phase===`failed`?(openBlock(),createElementBlock(`p`,_hoisted_22$2,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`18`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(stateOf(course).message),1)])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_23$2,[course.installed===`enabled`?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,rounded:`pill`,"min-height":`48`,"append-icon":unref(trainingIcons).arrowRight,onClick:$event=>emit(`view`,{courseId:course.courseId,release:course.release})},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`View course`,-1)])]),_:1},8,[`append-icon`,`onClick`])):installable(course)?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:course.updateFrom?`flat`:`tonal`,rounded:`pill`,"min-height":`48`,"prepend-icon":course.updateFrom?unref(trainingIcons).update:unref(trainingIcons).download,loading:stateOf(course)?.phase===`installing`,disabled:__props.busy,onClick:$event=>install(course)},{default:withCtx(()=>[createTextVNode(toDisplayString(stateOf(course)?.phase===`failed`?course.updateFrom?`Retry update`:`Retry install`:course.updateFrom?`Update`:`Install`),1)]),_:2},1032,[`variant`,`prepend-icon`,`loading`,`disabled`,`onClick`])):createCommentVNode(``,true)])],8,_hoisted_11$2)}),128))])],8,_hoisted_7$5)}),128))],8,_hoisted_1$17)}}};var TrainingCourseCatalogue_default=_plugin_vue_export_helper_default(_sfc_main$32,[[`__scopeId`,`data-v-cf7f135b`]]);var _hoisted_1$16=[`aria-busy`];var _hoisted_2$12={class:`tlp-hero`};var _hoisted_3$11={class:`tlp-hero__text`};var _hoisted_4$8={class:`tlp-eyebrow`};var _hoisted_5$8={key:0,class:`tlp-hero__meta`};var _hoisted_6$5={key:0,class:`tlp-skeleton tlp-skeleton--saved`,role:`status`,"aria-label":`Loading saved lesson`};var _hoisted_7$4={key:2,class:`tlp-note`,role:`status`};var _hoisted_8$4={key:3,class:`tlp-saved training-lesson-picker__saved`,"aria-labelledby":`tlp-saved-heading`};var _hoisted_9$2={class:`tlp-saved__ring-value`};var _hoisted_10$1={key:1,class:`tlp-saved__badge`,"aria-hidden":`true`};var _hoisted_11$1={class:`tlp-saved__body`};var _hoisted_12$1={id:`tlp-saved-heading`,class:`tlp-eyebrow tlp-eyebrow--learning`};var _hoisted_13$1={class:`tlp-saved__title`};var _hoisted_14$1={class:`tlp-saved__meta`};var _hoisted_15$1={key:0,class:`tlp-saved__status`};var _hoisted_16$1={key:1,class:`tlp-saved__status`};var _hoisted_17$1={key:2,class:`tlp-note tlp-note--warn`};var _hoisted_18$1={key:3,class:`tlp-note`};var _hoisted_19$1={class:`tlp-saved__actions`};var _hoisted_20$1={class:`tlp-identity`};var _hoisted_21$1={key:4,class:`tlp-grid`,role:`status`,"aria-label":`Loading installed courses`};var _hoisted_22$1={key:6,class:`tlp-empty`,role:`status`};var _hoisted_23$1={key:7,class:`tlp-empty`,role:`status`};var _hoisted_24$1={key:0};var _hoisted_25={key:1};var _hoisted_26={key:0,class:`tlp-grid training-lesson-picker__courses`};var _hoisted_27=[`aria-label`];var _hoisted_28={class:`tlp-card__cover`};var _hoisted_29={class:`tlp-card__chips`};var _hoisted_30={key:0,class:`tlp-chip tlp-chip--learning`};var _hoisted_31={key:1,class:`tlp-chip tlp-chip--success`};var _hoisted_32={key:2,class:`tlp-chip tlp-chip--learning`};var _hoisted_33={class:`tlp-card__body`};var _hoisted_34={class:`tlp-card__title`};var _hoisted_35={class:`tlp-card__id`};var _hoisted_36={class:`tlp-card__facts`};var _hoisted_37={key:0,class:`tlp-card__next`,role:`note`};var _hoisted_38={class:`tlp-card__progress`};var _hoisted_39={class:`tlp-card__count`};var _hoisted_40={key:0,class:`tlp-card__next`};var _hoisted_41={key:1,class:`tlp-card__next tlp-card__preview-note`};var _hoisted_42={class:`tlp-card__actions`};var _hoisted_43={class:`tlp-new__icon`,"aria-hidden":`true`};var _hoisted_44={key:2};var _hoisted_45={key:10,class:`training-lesson-picker__start`};var _hoisted_46={key:0,class:`tlp-note`};var _hoisted_47={key:1,class:`tlp-note tlp-note--warn`};var _hoisted_48={key:2,class:`tlp-note`};var _hoisted_49={key:11,class:`tlp-history training-lesson-picker__history`};var _sfc_main$31={__name:`TrainingLessonPicker`,props:{catalogueResult:{type:Object,default:null},learningResult:{type:Object,default:null},catalogueLoading:Boolean,learningLoading:Boolean,catalogueError:{type:String,default:``},learningError:{type:String,default:``},busy:Boolean,canStart:Boolean,canResume:Boolean,createCourse:{type:Function,default:null},starting:Boolean,startUnconfirmed:Boolean,startError:{type:String,default:``},availableResult:{type:Object,default:null},availableLoading:Boolean,availableError:{type:String,default:``},installState:{type:Object,default:null}},emits:[`refresh`,`start`,`resume`,`install`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const selectionId=ref(``);const text=value=>typeof value===`string`&&value.length>0;const revision=value=>Number.isSafeInteger(value)&&value>=0;const lessonTitlesMissing=computed(()=>Array.isArray(props.catalogueResult?.courses)&&props.catalogueResult.courses.some(course=>Array.isArray(course?.lessons)&&course.lessons.some(lesson=>!text(lesson?.title))));const catalogueInvalid=computed(()=>{const result=props.catalogueResult;return result?.ok===true&&result.available===true&&(!revision(result.revision)||!Array.isArray(result.courses)||result.courses.some(course=>!text(course?.courseId)||!text(course.release)||!text(course.title)||typeof course.enabled!==`boolean`||!text(course.status)||!Array.isArray(course.lessons)||!Array.isArray(course.topics)||course.topics.some(topic=>!text(topic?.topicId)||!text(topic.release)||!text(topic.title))||course.lessons.some(lesson=>!text(lesson?.code)||!text(lesson.hash)||!text(lesson.topicId)||!text(lesson.topicRelease)||!text(lesson.status)||!text(lesson.title))))});const courses=computed(()=>!catalogueInvalid.value&&props.catalogueResult?.ok===true&&props.catalogueResult.available===true?props.catalogueResult.courses:[]);function choiceId(course,lesson){return JSON.stringify([course.courseId,course.release,lesson.code,lesson.hash,lesson.topicId,lesson.topicRelease])}const choices=computed(()=>courses.value.flatMap(course=>course.lessons.map(lesson=>({course,lesson,id:choiceId(course,lesson)}))));const selected=computed(()=>choices.value.find(choice=>choice.id===selectionId.value)||null);watch(choices,values=>{if(!props.catalogueLoading&&!catalogueInvalid.value&&props.catalogueResult?.ok===true&&props.catalogueResult.available===true&&!values.some(value=>value.id===selectionId.value))selectionId.value=``},{immediate:true});function hasDisplayPin(attempt){return text(attempt?.attemptId)&&text(attempt.pin?.course?.courseId)&&text(attempt.pin.course.release)&&text(attempt.pin?.topic?.topicId)&&text(attempt.pin.topic.release)&&text(attempt.pin.topic.commit)&&text(attempt.pin?.lesson?.code)&&text(attempt.pin.lesson.hash)}const learningInvalid=computed(()=>{const result=props.learningResult;if(result?.ok!==true||result.available!==true)return false;if(!revision(result.revision)||!Object.hasOwn(result,`active`)||result.active!==null&&(!hasDisplayPin(result.active)||result.active.ended)||!Array.isArray(result.history)||result.history.some(attempt=>!hasDisplayPin(attempt)||!attempt.ended))return true;if(result.lessonProgress!==void 0&&(!Array.isArray(result.lessonProgress)||result.lessonProgress.some(value=>!text(value?.lessonCode)||!text(value.lessonHash)||!revision(value.required)||!revision(value.passed)||value.passed>value.required||typeof value.completed!==`boolean`||typeof value.open!==`boolean`)))return true;const completion=result.completion;return completion!=null&&(!result.active||!revision(completion.required)||!revision(completion.passed)||completion.passed>completion.required||typeof completion.completed!==`boolean`||completion.lessonCode!==result.active.pin.lesson.code||completion.lessonHash!==result.active.pin.lesson.hash)});const learningReady=computed(()=>!props.learningLoading&&!props.learningError&&!learningInvalid.value&&props.learningResult?.ok===true&&props.learningResult.available===true);const savedAttempt=computed(()=>!learningInvalid.value&&props.learningResult?.ok===true&&props.learningResult.available===true?props.learningResult.active:null);const history=computed(()=>!learningInvalid.value&&props.learningResult?.ok===true&&props.learningResult.available===true?props.learningResult.history:[]);const completion=computed(()=>savedAttempt.value?props.learningResult.completion:null);const startPossible=computed(()=>Boolean(props.canStart&&!props.starting&&!props.startUnconfirmed&&!props.busy&&!props.catalogueLoading&&!props.catalogueError&&learningReady.value));const canTryPreviews=computed(()=>!catalogueInvalid.value&&props.catalogueResult?.ok===true&&props.catalogueResult.canTryPreviews===true);const startEnabled=computed(()=>startPossible.value&&selected.value&&offered(selected.value.course,selected.value.lesson,canTryPreviews.value));const resumeEnabled=computed(()=>props.canResume&&!props.busy&&learningReady.value&&savedAttempt.value&&!savedAttempt.value.ended);function requestStart(){if(!startEnabled.value)return;const{course,lesson}=selected.value;emit(`start`,{courseId:course.courseId,release:course.release,lessonCode:lesson.code,expectedRevision:props.learningResult.revision})}function requestResume(){if(resumeEnabled.value)emit(`resume`,{attemptId:savedAttempt.value.attemptId})}function startLesson(course,lesson){selectionId.value=choiceId(course,lesson);if(startEnabled.value)startedFrom.value={key:courseKey(course),lesson:choiceId(course,lesson)};requestStart()}const startedFrom=ref(null);const startFeedback=computed(()=>!startedFrom.value?null:props.starting?{phase:`starting`}:props.startError?{phase:`failed`,message:props.startError}:props.startUnconfirmed?{phase:`unconfirmed`}:null);const feedbackFor=key=>startedFrom.value?.key===key?startFeedback.value:null;const startingHere=(course,lesson)=>props.starting&&startedFrom.value?.lesson===choiceId(course,lesson);const courseKey=course=>JSON.stringify([course.courseId,course.release]);const lessonProgress=computed(()=>!learningInvalid.value&&props.learningResult?.ok===true&&props.learningResult.available===true?props.learningResult.lessonProgress||[]:[]);const releaseOrder=(left,right)=>{const a=left.split(`.`).map(Number),b=right.split(`.`).map(Number);return a[0]-b[0]||a[1]-b[1]||a[2]-b[2]};const superseded=course=>!course.enabled&&courses.value.some(other=>other.courseId===course.courseId&&other.enabled&&releaseOrder(other.release,course.release)>0);const summaries=computed(()=>courses.value.map(course=>({course,key:courseKey(course),progress:courseProgress(course,lessonProgress.value,savedAttempt.value,history.value,{canTryPreviews:canTryPreviews.value})})).filter(summary=>!superseded(summary.course)||summary.progress.activeHere));const availableCourses=computed(()=>props.availableResult?.ok===true&&Array.isArray(props.availableResult.courses)?props.availableResult.courses:[]);const updateFor=course=>availableCourses.value.find(value=>value.courseId===course.courseId&&value.updateFrom===course.release&&value.installed===`not-installed`)||null;const showCatalogue=computed(()=>Boolean(props.availableResult||props.availableLoading||props.availableError));function requestInstall(selection){if(!props.busy)emit(`install`,selection)}function viewInstalled({courseId,release}){openCourseKey.value=courseKey({courseId,release})}const openCourseKey=ref(``);const openCourse=computed(()=>summaries.value.find(summary=>summary.key===openCourseKey.value)||null);watch(summaries,values=>{if(!props.catalogueLoading&&openCourseKey.value&&!values.some(value=>value.key===openCourseKey.value))openCourseKey.value=``});const creating=ref(false);const canCreateCourses=computed(()=>typeof props.createCourse===`function`&&!catalogueInvalid.value&&props.catalogueResult?.ok===true&&props.catalogueResult.canCreateCourses===true);const availableTopics=computed(()=>[...new Map(courses.value.filter(course=>course.enabled&&course.status===`released`).flatMap(course=>course.topics).map(topic=>[JSON.stringify([topic.topicId,topic.release]),topic])).values()]);async function requestCreateCourse(input){if(!canCreateCourses.value||props.busy)return;const result=await props.createCourse({...input,expectedRevision:props.catalogueResult.revision});if(result?.ok!==true||!result.course)return;creating.value=false;openCourseKey.value=courseKey(result.course)}const savedPlace=computed(()=>{const pin=savedAttempt.value?.pin;if(!pin)return null;const course=courses.value.find(value=>value.courseId===pin.course.courseId&&value.release===pin.course.release);const lesson=course?.lessons.find(value=>value.code===pin.lesson.code&&value.hash===pin.lesson.hash);return{courseTitle:course?.title||``,lessonTitle:lesson?.title||``}});const statusTone=course=>!course.enabled?`disabled`:course.status===`released`?`enabled`:`preview`;const statusIcon={enabled:trainingIcons.checkCircle,preview:trainingIcons.eye,disabled:trainingIcons.cancel};function unusableNote(course){const titles=course.unusableLessons.map(lesson=>lesson.title).join(`, `);return`${course.unusableLessons.length===1?`One lesson is`:`${course.unusableLessons.length} lessons are`} not shown because this version of Vibe64 can't teach ${course.unusableLessons.length===1?`it`:`them`}: ${titles}. Update the course when Courses offers an update.`}const uniqueLessonCount=computed(()=>new Set(summaries.value.flatMap(({course})=>course.lessons.map(lesson=>`${lesson.code}\n${lesson.hash}`))).size);const plural=(count,word)=>`${count} ${word}${count===1?``:`s`}`;return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:normalizeClass([`training-lesson-picker`,{"training-lesson-picker--course-open":openCourse.value}]),"aria-label":`Courses`,"aria-busy":__props.catalogueLoading||__props.learningLoading},[createBaseVNode(`header`,_hoisted_2$12,[_cache[11]||(_cache[11]=createBaseVNode(`svg`,{class:`tlp-hero__art`,viewBox:`0 0 240 160`,"aria-hidden":`true`,focusable:`false`},[createBaseVNode(`circle`,{cx:`188`,cy:`34`,r:`58`,class:`tlp-hero__sun`}),createBaseVNode(`path`,{d:`M18 132 C 62 132, 64 92, 104 92 S 150 52, 196 52`,class:`tlp-hero__trail`}),createBaseVNode(`circle`,{cx:`18`,cy:`132`,r:`9`,class:`tlp-hero__stop tlp-hero__stop--done`}),createBaseVNode(`circle`,{cx:`104`,cy:`92`,r:`9`,class:`tlp-hero__stop tlp-hero__stop--done`}),createBaseVNode(`circle`,{cx:`196`,cy:`52`,r:`11`,class:`tlp-hero__stop`}),createBaseVNode(`path`,{d:`M190 52 l4.5 4.5 l8 -9`,class:`tlp-hero__tick`})],-1)),createBaseVNode(`div`,_hoisted_3$11,[createBaseVNode(`p`,_hoisted_4$8,[createVNode(VIcon,{icon:unref(trainingIcons).school,size:`18`},null,8,[`icon`]),_cache[7]||(_cache[7]=createTextVNode(` Learning`,-1))]),_cache[8]||(_cache[8]=createBaseVNode(`h2`,null,`Courses`,-1)),_cache[9]||(_cache[9]=createBaseVNode(`p`,null,`Choose a course to see its lessons and your progress, or continue your lesson.`,-1)),summaries.value.length?(openBlock(),createElementBlock(`p`,_hoisted_5$8,toDisplayString(plural(summaries.value.length,`course`))+` · `+toDisplayString(plural(uniqueLessonCount.value,`lesson`))+` installed `,1)):createCommentVNode(``,true)]),createVNode(VBtn,{class:`tlp-hero__refresh`,variant:`tonal`,rounded:`pill`,"min-height":`48`,"prepend-icon":unref(trainingIcons).refresh,disabled:__props.busy||__props.catalogueLoading||__props.learningLoading,onClick:_cache[0]||(_cache[0]=$event=>emit(`refresh`))},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Refresh courses`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])]),__props.learningLoading&&!savedAttempt.value?(openBlock(),createElementBlock(`div`,_hoisted_6$5,[..._cache[12]||(_cache[12]=[createStaticVNode(`<span class="tlp-shimmer tlp-shimmer--ring" data-v-0275a0a8></span><span class="tlp-skeleton__lines" data-v-0275a0a8><span class="tlp-shimmer" style="width:40%;" data-v-0275a0a8></span><span class="tlp-shimmer" style="width:70%;" data-v-0275a0a8></span><span class="tlp-shimmer" style="width:55%;" data-v-0275a0a8></span></span>`,2)])])):createCommentVNode(``,true),__props.learningError||learningInvalid.value?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`,rounded:`lg`,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.learningError||`Saved learning could not be displayed. Refresh before requesting a lesson; no progress was changed.`),1)]),_:1})):!__props.learningLoading&&(!__props.learningResult||__props.learningResult.ok!==true||__props.learningResult.available!==true)?(openBlock(),createElementBlock(`p`,_hoisted_7$4,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`20`},null,8,[`icon`]),createBaseVNode(`span`,null,toDisplayString(__props.learningResult?.error||`Saved learning is not available yet. No lesson has been started here.`),1)])):createCommentVNode(``,true),savedAttempt.value?(openBlock(),createElementBlock(`article`,_hoisted_8$4,[_cache[20]||(_cache[20]=createBaseVNode(`div`,{class:`tlp-saved__glow`,"aria-hidden":`true`},null,-1)),completion.value?(openBlock(),createBlock(TrainingProgressRing_default,{key:0,class:`tlp-saved__ring`,value:completion.value.passed,max:completion.value.required,size:96,stroke:10,label:`${completion.value.passed} of ${completion.value.required} required steps done`},{default:withCtx(()=>[createBaseVNode(`span`,_hoisted_9$2,[createBaseVNode(`strong`,null,toDisplayString(completion.value.passed),1),createTextVNode(` of `+toDisplayString(completion.value.required),1),_cache[13]||(_cache[13]=createBaseVNode(`small`,null,`required done`,-1))])]),_:1},8,[`value`,`max`,`label`])):(openBlock(),createElementBlock(`div`,_hoisted_10$1,[createVNode(VIcon,{icon:unref(trainingIcons).bookmark,size:`36`},null,8,[`icon`])])),createBaseVNode(`div`,_hoisted_11$1,[createBaseVNode(`p`,_hoisted_12$1,`Lesson in progress · `+toDisplayString(savedAttempt.value.pin.lesson.code),1),createBaseVNode(`h3`,_hoisted_13$1,toDisplayString(savedPlace.value.lessonTitle||`Continue where you left off`),1),createBaseVNode(`p`,_hoisted_14$1,[savedPlace.value.courseTitle?(openBlock(),createElementBlock(Fragment,{key:0},[createTextVNode(toDisplayString(savedPlace.value.courseTitle)+` · `,1)],64)):createCommentVNode(``,true),createTextVNode(toDisplayString(savedAttempt.value.pin.course.courseId)+` · `+toDisplayString(savedAttempt.value.pin.course.release),1)]),completion.value?(openBlock(),createElementBlock(`p`,_hoisted_15$1,[completion.value.completed?(openBlock(),createBlock(VIcon,{key:0,icon:unref(trainingIcons).checkCircle,size:`18`,color:`success`},null,8,[`icon`])):createCommentVNode(``,true),createTextVNode(` `+toDisplayString(completion.value.passed)+` of `+toDisplayString(completion.value.required)+` required steps done. `+toDisplayString(completion.value.completed?`This lesson is complete.`:`Continue the remaining steps.`),1)])):(openBlock(),createElementBlock(`p`,_hoisted_16$1,`Saved attempt retained. Completion has not been reported.`)),__props.learningResult.activeSummaryCurrent===false?(openBlock(),createElementBlock(`p`,_hoisted_17$1,`The saved summary needs reconciliation. Continue lesson rechecks this same attempt; reading it does not repair it.`)):createCommentVNode(``,true),!__props.canResume?(openBlock(),createElementBlock(`p`,_hoisted_18$1,`Continuing a lesson is unavailable in this installation. Your lesson remains visible.`)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_19$1,[createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,size:`large`,"min-height":`48`,"prepend-icon":unref(trainingIcons).play,disabled:!resumeEnabled.value,onClick:requestResume},{default:withCtx(()=>[..._cache[14]||(_cache[14]=[createTextVNode(`Continue lesson`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])]),createBaseVNode(`details`,_hoisted_20$1,[createBaseVNode(`summary`,null,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`18`},null,8,[`icon`]),_cache[15]||(_cache[15]=createBaseVNode(`span`,null,`Saved lesson identity`,-1)),createVNode(VIcon,{class:`tlp-chevron`,icon:unref(trainingIcons).chevronDown,size:`18`},null,8,[`icon`])]),createBaseVNode(`dl`,null,[_cache[16]||(_cache[16]=createBaseVNode(`dt`,null,`Topic`,-1)),createBaseVNode(`dd`,null,toDisplayString(savedAttempt.value.pin.topic.topicId)+` · `+toDisplayString(savedAttempt.value.pin.topic.release),1),_cache[17]||(_cache[17]=createBaseVNode(`dt`,null,`Commit`,-1)),createBaseVNode(`dd`,null,[createBaseVNode(`code`,null,toDisplayString(savedAttempt.value.pin.topic.commit),1)]),_cache[18]||(_cache[18]=createBaseVNode(`dt`,null,`Lesson hash`,-1)),createBaseVNode(`dd`,null,[createBaseVNode(`code`,null,toDisplayString(savedAttempt.value.pin.lesson.hash),1)]),_cache[19]||(_cache[19]=createBaseVNode(`dt`,null,`Attempt`,-1)),createBaseVNode(`dd`,null,[createBaseVNode(`code`,null,toDisplayString(savedAttempt.value.attemptId),1)])])])])])):createCommentVNode(``,true),__props.catalogueLoading&&!courses.value.length?(openBlock(),createElementBlock(`div`,_hoisted_21$1,[(openBlock(),createElementBlock(Fragment,null,renderList(3,index=>{return createBaseVNode(`div`,{key:index,class:`tlp-skeleton tlp-skeleton--card`},[..._cache[21]||(_cache[21]=[createStaticVNode(`<span class="tlp-shimmer tlp-shimmer--art" data-v-0275a0a8></span><span class="tlp-skeleton__lines" data-v-0275a0a8><span class="tlp-shimmer" style="width:65%;height:18px;" data-v-0275a0a8></span><span class="tlp-shimmer" style="width:45%;" data-v-0275a0a8></span><span class="tlp-shimmer" style="width:80%;" data-v-0275a0a8></span></span>`,2)])])}),64))])):createCommentVNode(``,true),__props.catalogueError||catalogueInvalid.value?(openBlock(),createBlock(VAlert,{key:5,type:`error`,variant:`tonal`,rounded:`lg`,role:`alert`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.catalogueError||(lessonTitlesMissing.value?`Lesson titles are unavailable. Refresh courses; your saved lesson and history remain retained.`:`Installed courses could not be displayed. Refresh or ask the owner to restore the exact content; nothing was installed or enabled.`)),1)]),_:1})):!__props.catalogueLoading&&(!__props.catalogueResult||__props.catalogueResult.ok!==true||__props.catalogueResult.available!==true)?(openBlock(),createElementBlock(`div`,_hoisted_22$1,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`32`,class:`tlp-empty__icon`},null,8,[`icon`]),createBaseVNode(`p`,null,toDisplayString(__props.catalogueResult?.error||`Installed courses are not available yet.`),1)])):!__props.catalogueLoading&&courses.value.length===0?(openBlock(),createElementBlock(`div`,_hoisted_23$1,[_cache[22]||(_cache[22]=createBaseVNode(`svg`,{class:`tlp-empty__art`,viewBox:`0 0 120 80`,"aria-hidden":`true`,focusable:`false`},[createBaseVNode(`rect`,{x:`10`,y:`66`,width:`100`,height:`6`,rx:`3`,class:`tlp-empty__shelf`}),createBaseVNode(`rect`,{x:`24`,y:`30`,width:`16`,height:`36`,rx:`3`,class:`tlp-empty__book`}),createBaseVNode(`rect`,{x:`44`,y:`22`,width:`14`,height:`44`,rx:`3`,class:`tlp-empty__book tlp-empty__book--alt`}),createBaseVNode(`rect`,{x:`70`,y:`40`,width:`16`,height:`26`,rx:`3`,class:`tlp-empty__book tlp-empty__book--ghost`,transform:`rotate(-12 78 53)`})],-1)),showCatalogue.value?(openBlock(),createElementBlock(`p`,_hoisted_24$1,`No courses are installed yet. Choose a course in the catalogue below and select Install.`)):(openBlock(),createElementBlock(`p`,_hoisted_25,`No courses are installed. Ask the owner to install and enable a course; this page cannot install one.`))])):createCommentVNode(``,true),openCourse.value?(openBlock(),createBlock(TrainingCoursePage_default,{key:8,course:openCourse.value.course,progress:openCourse.value.progress,"start-allowed":startPossible.value,"can-try-previews":canTryPreviews.value,"resume-allowed":!!resumeEnabled.value,"start-feedback":feedbackFor(openCourse.value.key),"starting-lesson":lesson=>startingHere(openCourse.value.course,lesson),onBack:_cache[1]||(_cache[1]=$event=>openCourseKey.value=``),onStart:_cache[2]||(_cache[2]=$event=>startLesson(openCourse.value.course,$event)),onResume:requestResume},null,8,[`course`,`progress`,`start-allowed`,`can-try-previews`,`resume-allowed`,`start-feedback`,`starting-lesson`])):(openBlock(),createElementBlock(Fragment,{key:9},[courses.value.length?(openBlock(),createElementBlock(`div`,_hoisted_26,[(openBlock(true),createElementBlock(Fragment,null,renderList(summaries.value,({course,key,progress},index)=>{return openBlock(),createElementBlock(`article`,{key,class:normalizeClass([`tlp-card`,{"tlp-card--active":progress.activeHere,"tlp-card--off":statusTone(course)!==`enabled`}]),style:normalizeStyle({"--tlp-index":index}),"aria-label":course.title},[createBaseVNode(`div`,_hoisted_28,[createVNode(TrainingCourseArt_default,{"course-id":course.courseId,title:course.title,statuses:progress.lessons.map(value=>value.status)},null,8,[`course-id`,`title`,`statuses`]),createBaseVNode(`div`,_hoisted_29,[progress.activeHere?(openBlock(),createElementBlock(`span`,_hoisted_30,[createVNode(VIcon,{icon:unref(trainingIcons).bookmark,size:`14`},null,8,[`icon`]),_cache[23]||(_cache[23]=createTextVNode(`Lesson in progress`,-1))])):progress.total&&progress.completed===progress.total?(openBlock(),createElementBlock(`span`,_hoisted_31,[createVNode(VIcon,{icon:unref(trainingIcons).trophy,size:`14`},null,8,[`icon`]),_cache[24]||(_cache[24]=createTextVNode(`Course complete`,-1))])):createCommentVNode(``,true),createBaseVNode(`span`,{class:normalizeClass([`tlp-chip`,`tlp-chip--${statusTone(course)}`])},[createVNode(VIcon,{icon:statusIcon[statusTone(course)],size:`14`},null,8,[`icon`]),createTextVNode(toDisplayString(unref(courseStatusLabel)(course)),1)],2),updateFor(course)?(openBlock(),createElementBlock(`span`,_hoisted_32,[createVNode(VIcon,{icon:unref(trainingIcons).update,size:`14`},null,8,[`icon`]),createTextVNode(`Update available: `+toDisplayString(updateFor(course).release),1)])):createCommentVNode(``,true)])]),createBaseVNode(`div`,_hoisted_33,[createBaseVNode(`h3`,_hoisted_34,toDisplayString(course.title),1),createBaseVNode(`p`,_hoisted_35,[createBaseVNode(`code`,null,toDisplayString(course.courseId)+` · `+toDisplayString(course.release),1)]),createBaseVNode(`p`,_hoisted_36,[createBaseVNode(`span`,null,[createVNode(VIcon,{icon:unref(trainingIcons).layers,size:`16`},null,8,[`icon`]),createTextVNode(toDisplayString(plural(course.topics.length,`topic`)),1)]),createBaseVNode(`span`,null,[createVNode(VIcon,{icon:unref(trainingIcons).book,size:`16`},null,8,[`icon`]),createTextVNode(toDisplayString(plural(course.lessons.length,`lesson`)),1)])]),course.unusableLessons?.length?(openBlock(),createElementBlock(`p`,_hoisted_37,toDisplayString(unusableNote(course)),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_38,[createVNode(TrainingProgressRing_default,{value:progress.completed,max:progress.total,size:48,stroke:5,label:`${course.title}: ${progress.completed} of ${progress.total} lessons complete`},null,8,[`value`,`max`,`label`]),createBaseVNode(`div`,null,[createBaseVNode(`p`,_hoisted_39,toDisplayString(progress.completed)+` of `+toDisplayString(progress.total)+` lessons complete`,1),progress.next&&!progress.activeHere?(openBlock(),createElementBlock(`p`,_hoisted_40,`Next: `+toDisplayString(progress.next.title),1)):unref(previewCourse)(course)&&!canTryPreviews.value&&!progress.activeHere?(openBlock(),createElementBlock(`p`,_hoisted_41,toDisplayString(unref(previewNote)),1)):createCommentVNode(``,true)])]),feedbackFor(key)?(openBlock(),createBlock(TrainingStartFeedback_default,{key:1,feedback:feedbackFor(key)},null,8,[`feedback`])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_42,[progress.activeHere?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,"prepend-icon":unref(trainingIcons).play,disabled:!resumeEnabled.value,onClick:requestResume},{default:withCtx(()=>[..._cache[25]||(_cache[25]=[createTextVNode(`Continue lesson`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])):progress.next?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,"prepend-icon":startingHere(course,progress.next)?void 0:unref(trainingIcons).play,readonly:startingHere(course,progress.next),disabled:!startPossible.value&&!startingHere(course,progress.next),onClick:$event=>startLesson(course,progress.next)},{default:withCtx(()=>[startingHere(course,progress.next)?(openBlock(),createElementBlock(Fragment,{key:0},[createVNode(VProgressCircular,{indeterminate:``,size:`18`,width:`2`,class:`tlp-card__spinner`}),_cache[26]||(_cache[26]=createTextVNode(`Starting lesson…`,-1))],64)):(openBlock(),createElementBlock(Fragment,{key:1},[createTextVNode(`Start lesson`)],64))]),_:2},1032,[`prepend-icon`,`readonly`,`disabled`,`onClick`])):createCommentVNode(``,true),updateFor(course)?(openBlock(),createBlock(VBtn,{key:2,variant:`tonal`,rounded:`pill`,"min-height":`48`,"prepend-icon":unref(trainingIcons).update,loading:__props.installState?.phase===`installing`&&__props.installState.courseId===course.courseId,disabled:__props.busy,onClick:$event=>requestInstall({courseId:course.courseId,release:updateFor(course).release})},{default:withCtx(()=>[..._cache[27]||(_cache[27]=[createTextVNode(`Update`,-1)])]),_:1},8,[`prepend-icon`,`loading`,`disabled`,`onClick`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,"append-icon":unref(trainingIcons).arrowRight,onClick:$event=>openCourseKey.value=key},{default:withCtx(()=>[..._cache[28]||(_cache[28]=[createTextVNode(`View course`,-1)])]),_:1},8,[`append-icon`,`onClick`])])],14,_hoisted_27)}),128)),canCreateCourses.value&&!creating.value?(openBlock(),createElementBlock(`div`,{key:0,class:`tlp-new`,style:normalizeStyle({"--tlp-index":summaries.value.length})},[createBaseVNode(`span`,_hoisted_43,[createVNode(VIcon,{icon:unref(trainingIcons).path,size:`28`},null,8,[`icon`])]),_cache[30]||(_cache[30]=createBaseVNode(`p`,null,`Combine installed topics into a course of your own.`,-1)),createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,"prepend-icon":unref(trainingIcons).plus,disabled:__props.busy||__props.catalogueLoading,onClick:_cache[3]||(_cache[3]=$event=>creating.value=true)},{default:withCtx(()=>[..._cache[29]||(_cache[29]=[createTextVNode(`New course`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])],4)):createCommentVNode(``,true)])):createCommentVNode(``,true),creating.value&&canCreateCourses.value?(openBlock(),createBlock(TrainingCourseCreator_default,{key:1,topics:availableTopics.value,busy:__props.busy,onCreate:requestCreateCourse,onCancel:_cache[4]||(_cache[4]=$event=>creating.value=false)},null,8,[`topics`,`busy`])):canCreateCourses.value&&!courses.value.length?(openBlock(),createElementBlock(`div`,_hoisted_44,[createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,"prepend-icon":unref(trainingIcons).plus,disabled:__props.busy||__props.catalogueLoading,onClick:_cache[5]||(_cache[5]=$event=>creating.value=true)},{default:withCtx(()=>[..._cache[31]||(_cache[31]=[createTextVNode(`New course`,-1)])]),_:1},8,[`prepend-icon`,`disabled`])])):createCommentVNode(``,true),showCatalogue.value&&!creating.value?(openBlock(),createBlock(TrainingCourseCatalogue_default,{key:3,"available-result":__props.availableResult,"available-loading":__props.availableLoading,"available-error":__props.availableError,"install-state":__props.installState,busy:__props.busy,onInstall:requestInstall,onView:viewInstalled,onRefresh:_cache[6]||(_cache[6]=$event=>emit(`refresh`))},null,8,[`available-result`,`available-loading`,`available-error`,`install-state`,`busy`])):createCommentVNode(``,true)],64)),courses.value.length&&(savedAttempt.value||__props.startUnconfirmed&&!startFeedback.value||!__props.canStart)?(openBlock(),createElementBlock(`div`,_hoisted_45,[savedAttempt.value?(openBlock(),createElementBlock(`p`,_hoisted_46,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`20`},null,8,[`icon`]),_cache[32]||(_cache[32]=createBaseVNode(`span`,null,`A lesson is in progress. Starting a different one first asks to archive it.`,-1))])):__props.startUnconfirmed&&!startFeedback.value?(openBlock(),createElementBlock(`p`,_hoisted_47,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`20`},null,8,[`icon`]),_cache[33]||(_cache[33]=createBaseVNode(`span`,null,`The last lesson start was not confirmed. Use Retry lesson start to repeat that same request.`,-1))])):!__props.canStart?(openBlock(),createElementBlock(`p`,_hoisted_48,[createVNode(VIcon,{icon:unref(trainingIcons).info,size:`20`},null,8,[`icon`]),_cache[34]||(_cache[34]=createBaseVNode(`span`,null,`Starting lessons is unavailable in this installation.`,-1))])):createCommentVNode(``,true)])):createCommentVNode(``,true),history.value.length?(openBlock(),createElementBlock(`details`,_hoisted_49,[createBaseVNode(`summary`,null,[createVNode(VIcon,{icon:unref(trainingIcons).history,size:`20`},null,8,[`icon`]),createBaseVNode(`span`,null,`Saved lesson history (`+toDisplayString(history.value.length)+`)`,1),createVNode(VIcon,{class:`tlp-chevron`,icon:unref(trainingIcons).chevronDown,size:`18`},null,8,[`icon`])]),createBaseVNode(`ol`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(history.value,attempt=>{return openBlock(),createElementBlock(`li`,{key:attempt.attemptId},[createBaseVNode(`strong`,null,toDisplayString(attempt.pin.lesson.code),1),createTextVNode(` · `+toDisplayString(attempt.pin.course.courseId)+` · `+toDisplayString(attempt.pin.course.release)+` `,1),createBaseVNode(`p`,null,[_cache[35]||(_cache[35]=createTextVNode(`Ended attempt · `,-1)),createBaseVNode(`code`,null,toDisplayString(attempt.attemptId),1)]),createBaseVNode(`p`,null,[createTextVNode(`Topic `+toDisplayString(attempt.pin.topic.topicId)+` · `+toDisplayString(attempt.pin.topic.release)+` · `,1),createBaseVNode(`code`,null,toDisplayString(attempt.pin.topic.commit),1)]),createBaseVNode(`p`,null,[_cache[36]||(_cache[36]=createTextVNode(`Lesson hash · `,-1)),createBaseVNode(`code`,null,toDisplayString(attempt.pin.lesson.hash),1)])])}),128))])])):createCommentVNode(``,true)],10,_hoisted_1$16)}}};var TrainingLessonPicker_default=_plugin_vue_export_helper_default(_sfc_main$31,[[`__scopeId`,`data-v-0275a0a8`]]);var _hoisted_1$15={class:`vibe64-learning-launcher`};var _hoisted_2$11=[`aria-busy`];var _hoisted_3$10={key:3};var _sfc_main$30={__name:`Vibe64LearningCourses`,props:{learning:{type:Object,required:true}},setup(__props){const props=__props;const controller=useVibe64Learning();const opened=operation=>request(async owner=>controller.opened(await operation(owner,{onAdmitted:controller.admitted})));const start=(selection,kind=`start`)=>request(owner=>controller.startLesson(selection,owner.startLesson),kind);const route=useRoute();const error=ref(``);const errorLearner=ref(``);const errorKind=ref(``);const courses=computed(()=>toValue(props.learning.coursesResource.data));const progress=computed(()=>toValue(props.learning.learningResource.data));const busy=computed(()=>toValue(props.learning.busy));const retry=computed(()=>toValue(props.learning.startRetry));const starting=computed(()=>toValue(props.learning.starting)===true);const trial=computed(()=>toValue(props.learning.savedAuthorPreview));const installState=computed(()=>toValue(props.learning.installState)||null);const trialResource=computed(()=>props.learning.authorPreviewResource);const trialEnabled=computed(()=>toValue(props.learning.authorPreviewEnabled)===true);const errorVisible=computed(()=>Boolean(errorLearner.value&&errorLearner.value===toValue(props.learning.learnerId)&&toValue(props.learning.active)));const aiFailure=computed(()=>{const failure=progress.value?.ok===true?progress.value.active?.preparation?.failure:null;return failure?.code===`VIBE64_TRAINING_PRACTICE_AI_REQUIRED`?failure:null});const aiNotice=computed(()=>aiFailure.value?.message||(aiOnboardingNeeded.value?`Lessons use your AI: the coding agent in each practice project and Colleague, your teacher, both need it. Set up your AI before you start.`:``));const canRequest=computed(()=>Boolean(toValue(props.learning.learnerId)&&toValue(props.learning.active)));let feedbackGeneration=0;watch(()=>[toValue(props.learning.learnerId),toValue(props.learning.active),route.fullPath,trialEnabled.value],()=>{feedbackGeneration+=1;error.value=``;errorLearner.value=``},{flush:`sync`});async function request(operation,kind=``){const owner=props.learning;const learner=toValue(owner.learnerId);const target=route.fullPath;const generation=feedbackGeneration;error.value=``;errorLearner.value=learner;errorKind.value=kind;try{return await operation(owner)}catch(cause){if(cause?.code===`VIBE64_TRAINING_PRACTICE_AI_REQUIRED`){await owner.learningResource.reload();return null}if(props.learning===owner&&generation===feedbackGeneration&&learner===toValue(owner.learnerId)&&target===route.fullPath)error.value=String(cause?.message||`The lesson request was not confirmed. Read saved progress before trying again.`);return null}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$15,[error.value&&errorVisible.value&&errorKind.value!==`start`?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,class:`vibe64-learning-launcher__error`},{default:withCtx(()=>[createTextVNode(toDisplayString(error.value),1)]),_:1})):createCommentVNode(``,true),aiNotice.value?(openBlock(),createBlock(VAlert,{key:1,type:`warning`,variant:`tonal`,class:`vibe64-learning-launcher__error`,"data-test":`learning-ai-notice`},{default:withCtx(()=>[createBaseVNode(`p`,null,toDisplayString(aiNotice.value),1),unref(aiOnboardingAvailable)?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`40`,class:`vibe64-learning-launcher__ai`,onClick:_cache[0]||(_cache[0]=$event=>unref(requestVibe64AiOnboarding)())},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(` Set up your AI `,-1)])]),_:1})):createCommentVNode(``,true)]),_:1})):createCommentVNode(``,true),retry.value?(openBlock(),createBlock(VBtn,{key:2,class:`vibe64-learning-launcher__retry`,variant:`tonal`,rounded:`pill`,"min-height":`48`,disabled:busy.value||!canRequest.value,onClick:_cache[1]||(_cache[1]=$event=>start(toValue(__props.learning.startRetry),``))},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(` Retry lesson start `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),trialEnabled.value&&trialResource.value?(openBlock(),createElementBlock(`section`,{key:3,class:`vibe64-learning-launcher__trial`,"aria-label":`Saved author trial`,"aria-busy":toValue(trialResource.value.isLoading)},[_cache[10]||(_cache[10]=createBaseVNode(`p`,{class:`vibe64-learning-launcher__trial-eyebrow`},`Authoring`,-1)),_cache[11]||(_cache[11]=createBaseVNode(`h2`,null,`Author trial`,-1)),_cache[12]||(_cache[12]=createBaseVNode(`p`,null,`This isolated snapshot is separate from your published lesson progress.`,-1)),toValue(trialResource.value.isLoading)&&!trial.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item-two-line, actions`,"aria-label":`Loading saved author trial`})):createCommentVNode(``,true),toValue(trialResource.value.loadError)?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(toValue(trialResource.value.loadError))+` Refresh courses before reopening the trial. `,1)]),_:1})):createCommentVNode(``,true),trial.value?(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`p`,null,toDisplayString(trial.value.pin.lesson.code)+` · `+toDisplayString(trial.value.pin.topic.release),1),createBaseVNode(`details`,null,[_cache[8]||(_cache[8]=createBaseVNode(`summary`,null,`Saved trial identity`,-1)),createBaseVNode(`code`,null,toDisplayString(trial.value.pin.topic.commit),1)]),createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,"data-test":`resume-author-trial`,disabled:busy.value||!canRequest.value||toValue(trialResource.value.isLoading)||!!toValue(trialResource.value.loadError),onClick:_cache[2]||(_cache[2]=$event=>opened(owner=>owner.resumeAuthorPreview(trial.value.attemptId)))},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(` Resume author trial `,-1)])]),_:1},8,[`disabled`])],64)):!toValue(trialResource.value.isLoading)&&!toValue(trialResource.value.loadError)?(openBlock(),createElementBlock(`p`,_hoisted_3$10,` Ask Colleague to admit the exact clean committed lesson snapshot from your authoring session first. `)):createCommentVNode(``,true)],8,_hoisted_2$11)):createCommentVNode(``,true),createVNode(unref(TrainingLessonPicker_default),{"catalogue-result":courses.value,"learning-result":progress.value,"catalogue-loading":toValue(__props.learning.coursesResource.isLoading),"learning-loading":toValue(__props.learning.learningResource.isLoading),"catalogue-error":toValue(__props.learning.coursesResource.loadError),"learning-error":toValue(__props.learning.learningResource.loadError),busy:busy.value,"can-start":canRequest.value,"can-resume":canRequest.value,"create-course":input=>request(owner=>owner.createCourse(input)),"available-result":toValue(__props.learning.availableResource?.data),"available-loading":toValue(__props.learning.availableResource?.isLoading)===true,"available-error":toValue(__props.learning.availableResource?.loadError)||``,"install-state":installState.value,starting:starting.value,"start-unconfirmed":Boolean(retry.value),"start-error":error.value&&errorVisible.value&&errorKind.value===`start`?error.value:``,onRefresh:_cache[3]||(_cache[3]=$event=>request(owner=>owner.refresh())),onStart:start,onResume:_cache[4]||(_cache[4]=$event=>opened((owner,options)=>owner.resumeLesson($event.attemptId,options))),onInstall:_cache[5]||(_cache[5]=$event=>request(owner=>owner.installCourse($event)))},null,8,[`catalogue-result`,`learning-result`,`catalogue-loading`,`learning-loading`,`catalogue-error`,`learning-error`,`busy`,`can-start`,`can-resume`,`create-course`,`available-result`,`available-loading`,`available-error`,`install-state`,`starting`,`start-unconfirmed`,`start-error`])])}}};var Vibe64LearningCourses_default=_plugin_vue_export_helper_default(_sfc_main$30,[[`__scopeId`,`data-v-52f2f3c4`]]);function I(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var y=I();function W(l){y=l}var A={exec:()=>null};function C(l){let e=[];return t=>{let n=Math.max(0,Math.min(3,t-1)),s=e[n];return s||(s=l(n),e[n]=s),s}}function h(l,e=``){let t=typeof l==`string`?l:l.source,n={replace:(s,r)=>{let o=typeof r==`string`?r:r.source;return o=o.replace(x.caret,`$1`),t=t.replace(s,o),n},getRegex:()=>new RegExp(t,e)};return n}var _e=((l=``)=>{try{return!!new RegExp(`(?<=1)(?<!1)`+l)}catch{return!1}})();var x={codeRemoveIndent:/^(?: {0,3}\t| {1,4})/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,endingSpaceTabChar:/[ \t]$/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,leadingSpaceTab:/^[ \t]+/,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,numericCharacterReference:/&#(?:(\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));/g,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:C(l=>new RegExp(`^ {0,${l}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:C(l=>new RegExp(`^ {0,${l}}((?:-[ ]*){3,}|(?:_[ ]*){3,}|(?:\\*[ ]*){3,})(?:\\n+|$)`)),fencesBeginRegex:C(l=>new RegExp(`^ {0,${l}}(?:\`\`\`|~~~)`)),headingBeginRegex:C(l=>new RegExp(`^ {0,${l}}#`)),htmlBeginRegex:C(l=>new RegExp(`^ {0,${l}}(?:</?(?:${N})(?: +|$|/?>)|<(?:script|pre|style|textarea|!--))`,`i`)),blockquoteBeginRegex:C(l=>new RegExp(`^ {0,${l}}>`))};var $e=/^(?:[ \t]*(?:\n|$))+/;var Le=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/;var ze=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;var G=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;var Ae=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;var J=/ {0,3}(?:[*+-]|\d{1,9}[.)])/;var ce=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |fences|blockquote|heading|hr|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/;var he=h(ce).replace(/bull/g,J).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/hr/g,/ {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex();var Ee=h(ce).replace(/bull/g,J).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/hr/g,/ {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex();var V=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/;var Me=/^[^\n]+/;var Y=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/;var Ie=h(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,Y).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();var Ce=h(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,J).getRegex();var N=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`;var ee=/<!--(?:-?>|[\s\S]*?(?:-->|$))/;var Be=h(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][a-z0-9-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,ee).replace(`tag`,N).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();var de=l=>h(V).replace(`hr`,G).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,l).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,N).getRegex();var De=de(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/);var qe=de(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/);var te={blockquote:h(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,qe).getRegex(),code:Le,def:Ie,fences:ze,heading:Ae,hr:G,html:Be,lheading:he,list:Ce,newline:$e,paragraph:De,table:A,text:Me};var le=h(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,G).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,N).getRegex();var Ze={...te,lheading:Ee,table:le,paragraph:h(V).replace(`hr`,G).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,le).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace(`list`,` {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]`).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,N).getRegex()};var He={...te,html:h(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,ee).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:A,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:h(V).replace(`hr`,G).replace(`heading`,` *#{1,6} *[^
71
+ ]`).replace(`lheading`,he).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()};var Ge=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;var Ne=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;var ke=/^( {2,}|\\)\n(?!\s*$)[ \t]*/;var Qe=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;var $=/[\p{P}\p{S}]/u;var B=/[\s\p{P}\p{S}]/u;var Q=/[^\s\p{P}\p{S}]/u;var je=h(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,B).getRegex();var Fe=/[\p{Pi}\p{Ps}"']/u;var ge=/(?!~)[\p{P}\p{S}]/u;var Ue=/(?!~)[\s\p{P}\p{S}]/u;var Ke=/(?:[^\s\p{P}\p{S}]|~)/u;var We=h(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,_e?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex();var fe=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/;var Xe=h(fe,`u`).replace(/punct/g,$).getRegex();var Je=h(fe,`u`).replace(/punct/g,ge).getRegex();var Ye=h(/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,`u`).replace(/openQuote/g,Fe).replace(/punct/g,$).getRegex();var me=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`;var et=h(me,`gu`).replace(/notPunctSpace/g,Q).replace(/punctSpace/g,B).replace(/punct/g,$).getRegex();var tt=h(me,`gu`).replace(/notPunctSpace/g,Ke).replace(/punctSpace/g,Ue).replace(/punct/g,ge).getRegex();var rt=h(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Q).replace(/punctSpace/g,B).replace(/punct/g,$).getRegex();var st=h(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,Q).replace(/punctSpace/g,B).replace(/punct/g,$).getRegex();var ot=h(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Q).replace(/punctSpace/g,B).replace(/punct/g,$).getRegex();var at=h(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,$).getRegex();var ut=h(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,Q).replace(/punctSpace/g,B).replace(/punct/g,$).getRegex();var pt=h(/\\(punct)/,`gu`).replace(/punct/g,$).getRegex();var ct=h(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();var ht=h(ee).replace(`(?:-->|$)`,`-->`).getRegex();var dt=h(`^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,ht).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();var xe=/\[(?:\\[\s\S]|[^\[\]\\])*\]/;var U=h(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace(`brackets`,xe).getRegex();var kt=h(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,U).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();var gt=h(/^!?\[(label)\]\[(ref)\]/).replace(`label`,U).replace(`ref`,Y).getRegex();var ft=h(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,Y).getRegex();var ue=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\]){1,999}/;var mt=h(/(?:[^\[\]\\`]*(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\]))){0,999}?[^\[\]\\`]*?/).replace(`brackets`,xe).getRegex();var xt=h(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,h(/^!?\[(label)\]\[(ref)\]/).replace(`label`,mt).replace(`ref`,ue).getRegex()).replace(`nolink`,h(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,ue).getRegex()).getRegex();var pe=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;var Rt=h(/(?:mailto:email|xmpp:email(?:\/[A-Za-z0-9@.]+)?)/).replace(/email/g,/[A-Za-z0-9._+-]+@[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex();var ne={_backpedal:A,anyPunctuation:pt,autolink:ct,blockSkip:We,br:ke,code:Ne,del:A,delLDelim:A,delRDelim:A,emStrongLDelim:Xe,emStrongRDelimAst:et,emStrongRDelimUnd:st,escape:Ge,link:kt,nolink:ft,punctuation:je,reflink:gt,reflinkSearch:xt,tag:dt,text:Qe,url:A};var Tt={...ne,emStrongLDelim:Ye,emStrongRDelimAst:rt,emStrongRDelimUnd:ot,link:h(/^!?\[(label)\]\((.*?)\)/).replace(`label`,U).getRegex(),reflink:h(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,U).getRegex()};var X={...ne,emStrongRDelimAst:tt,emStrongLDelim:Je,delLDelim:at,delRDelim:ut,url:h(/^emailProtocol|^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`emailProtocol`,Rt).replace(`protocol`,pe).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:h(/^(?:[^a-zA-Z0-9](?=emailProtocol)|(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9](?=emailProtocol)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))))/).replace(`protocol`,pe).replace(/emailProtocol/g,/(?:mailto|xmpp):/).getRegex()};var Ot={...X,br:h(ke).replace(`{2,}`,`*`).getRegex(),text:h(X.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()};var j={normal:te,gfm:Ze,pedantic:He};var D={normal:ne,gfm:X,breaks:Ot,pedantic:Tt};var wt={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`};var be=l=>wt[l];function O(l,e){if(e){if(x.escapeTest.test(l))return l.replace(x.escapeReplace,be)}else if(x.escapeTestNoEncode.test(l))return l.replace(x.escapeReplaceNoEncode,be);return l}function Re(l){return l.replace(x.numericCharacterReference,(e,t,n)=>{let s=t===void 0?Number.parseInt(n,16):Number.parseInt(t,10);return s===0||s>1114111||s>=55296&&s<=57343?`�`:String.fromCodePoint(s)})}function re$1(l){try{l=encodeURI(l).replace(x.percentDecode,`%`)}catch{return null}return l}function se(l,e){let n=l.replace(x.findPipe,(r,o,i)=>{let u=!1,a=o;for(;--a>=0&&i[a]===`\\`;)u=!u;return u?`|`:` |`}).split(x.splitPipe),s=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(``);for(;s<n.length;s++)n[s]=n[s].trim().replace(x.slashPipe,`|`);return n}function L(l,e,t){let n=l.length;if(n===0)return``;let s=0;for(;s<n;){let r=l.charAt(n-s-1);if(r===e&&!t)s++;else if(r!==e&&t)s++;else break}return l.slice(0,n-s)}function ie(l){let e=l.split(`
72
+ `),t=e.length-1;for(;t>=0&&x.blankLine.test(e[t]);)t--;return e.length-t<=2?l:e.slice(0,t+1).join(`
73
+ `)}function q(l){return l.trim().toLowerCase().toUpperCase().toLowerCase()}function Te(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===`\\`)n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function oe(l,e=0){let t=e,n=``;for(let s of l)if(s===` `){let r=4-t%4;n+=` `.repeat(r),t+=r}else n+=s,t++;return n}function Oe(l,e,t,n,s){let r=e.href,o=e.title||null,i=l[1].replace(s.other.outputLinkReplace,`$1`),u=l[0].charAt(0)===`!`;n.state.inLink=!0;let a=n.state.linkEmitted,p=n.state.inRawBlock;n.state.linkEmitted=!1;let c=n.inlineTokens(i),d=n.state.linkEmitted;if(n.state.linkEmitted=a,n.state.inLink=!1,!u){if(d){n.state.inRawBlock=p;return}n.state.linkEmitted=!0}return{type:u?`image`:`link`,raw:t,href:r,title:o,text:i,tokens:c}}function yt(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let s=n[1];return e.split(`
74
+ `).map(r=>{let o=r.match(t.other.beginningSpace);if(o===null)return r;let[i]=o;return r.slice(Math.min(i.length,s.length))}).join(`
75
+ `)}function we(l,e,t,n){if(!e.includes(`<`))return!1;for(let s=0;s<e.length;s++){if(e[s]===`\\`){s++;continue}if(e[s]==="`"){let i=n.inline.code.exec(e.slice(s));if(i){s+=i[0].length-1;continue}}if(e[s]!==`<`)continue;let r=l.slice(t+s),o=n.inline.tag.exec(r)||n.inline.autolink.exec(r);if(o){if(o[0].length>e.length-s)return!0;s+=o[0].length-1}}return!1}var P=class{options;rules;lexer;constructor(e){this.options=e||y}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:ie(t[0]);return{type:`code`,raw:n,codeBlockStyle:`indented`,text:n.replace(this.rules.other.codeRemoveIndent,``)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=yt(n,t[3]||``,this.rules);return{type:`code`,raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:s}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let s=L(n,`#`);(this.options.pedantic||!s||this.rules.other.endingSpaceTabChar.test(s))&&(n=s.trim())}return{type:`heading`,raw:L(t[0],`
76
+ `),depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:L(t[0],`
77
+ `)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=L(t[0],`
78
+ `).split(`
79
+ `),s=``,r=``,o=[];for(;n.length>0;){let i=!1,u=[],a=0;for(;a<n.length;a++)if(this.rules.other.blockquoteStart.test(n[a]))u.push(n[a]),i=!0;else if(!i)u.push(n[a]);else break;n=n.slice(a);let p=u.join(`
80
+ `),c=p.replace(this.rules.other.blockquoteSetextReplace,`
81
+ $1`).replace(this.rules.other.blockquoteSetextReplace2,``);s=s?`${s}
82
+ ${p}`:p,r=r?`${r}
83
+ ${c}`:c;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,o,!0),this.lexer.state.top=d,n.length===0)break;let m=o.at(-1);if(m?.type===`code`)break;if(m?.type===`blockquote`){let b=m,g=n.join(`
84
+ `),w=b.raw+`
85
+ `+g.replace(this.rules.other.blockquoteSetextReplace2,``),f=this.blockquote(w);o[o.length-1]=f;let M=w.substring(f.raw.length).replace(/^\n/,``),v=M?M.split(`
86
+ `).length:0,Z=v?n.slice(0,-v):n;Z.length>0&&(s=`${s}
87
+ ${Z.join(`
88
+ `)}`),r=r.substring(0,r.length-b.text.length)+f.text;break}else if(m?.type===`list`){let b=m,g=b.raw+`
89
+ `+n.join(`
90
+ `),w=this.list(g);o[o.length-1]=w,s=s.substring(0,s.length-m.raw.length)+w.raw,r=r.substring(0,r.length-b.raw.length)+w.raw,n=g.substring(o.at(-1).raw.length).split(`
91
+ `);continue}}return{type:`blockquote`,raw:s,tokens:o,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),s=n.length>1,r={type:`list`,raw:``,ordered:s,start:s?+n.slice(0,-1):``,loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:`[*+-]`);let o=this.rules.other.listItemRegex(n),i=!1;for(;e;){let a=!1,p=``,c=``;if(!(t=o.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let d=t[2].split(`
92
+ `,1)[0],m=t[1].length,b=this.options.pedantic?oe(d,m):d.replace(this.rules.other.leadingSpaceTab,M=>oe(M,m)),g=e.split(`
93
+ `,1)[0],w=!b.trim(),f=0;if(this.options.pedantic?(f=2,c=b.trimStart()):w?f=m+1:(f=b.search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=b.slice(f),f+=m),w&&this.rules.other.blankLine.test(g)&&(p+=g+`
94
+ `,e=e.substring(g.length+1),a=!0),!a){let M=this.rules.other.nextBulletRegex(f),v=this.rules.other.hrRegex(f),Z=this.rules.other.fencesBeginRegex(f),ae=this.rules.other.headingBeginRegex(f),ye=this.rules.other.htmlBeginRegex(f),Pe=this.rules.other.blockquoteBeginRegex(f);for(;e;){let K=e.split(`
95
+ `,1)[0],H;if(g=K,this.options.pedantic?(g=g.replace(this.rules.other.listReplaceNesting,` `),H=g):H=g.replace(this.rules.other.leadingSpaceTab,Se=>Se.replace(this.rules.other.tabCharGlobal,` `)),Z.test(g)||ae.test(g)||ye.test(g)||Pe.test(g)||M.test(g)||v.test(g))break;if(H.search(this.rules.other.nonSpaceChar)>=f||!g.trim())c+=`
96
+ `+H.slice(f);else{if(w||b.replace(this.rules.other.tabCharGlobal,` `).search(this.rules.other.nonSpaceChar)>=4||Z.test(b)||ae.test(b)||v.test(b))break;c+=`
97
+ `+g}w=!g.trim(),p+=K+`
98
+ `,e=e.substring(K.length+1),b=H.slice(f)}}r.loose||(i?r.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(i=!0)),r.items.push({type:`list_item`,raw:p,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),r.raw+=p}let u=r.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let a of r.items)if(this.lexer.state.top=!1,a.tokens=this.lexer.blockTokens(a.text,[]),!r.loose){let p=a.tokens.filter(d=>d.type===`space`);r.loose=p.length>0&&p.some(d=>this.rules.other.anyLine.test(d.raw))}for(let a of r.items){let p=a.tokens[0];if(a.task&&(p?.type===`text`||p?.type===`paragraph`)){a.text=a.text.replace(this.rules.other.listReplaceTask,``),p.raw=p.raw.replace(this.rules.other.listReplaceTask,``),p.text=p.text.replace(this.rules.other.listReplaceTask,``);for(let d=this.lexer.inlineQueue.length-1;d>=0;d--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[d].src)){this.lexer.inlineQueue[d].src=this.lexer.inlineQueue[d].src.replace(this.rules.other.listReplaceTask,``);break}let c=this.rules.other.listTaskCheckbox.exec(a.raw);if(c){let d={type:`checkbox`,raw:c[0]+` `,checked:c[0]!==`[ ]`};a.checked=d.checked,r.loose?a.tokens[0]&&[`paragraph`,`text`].includes(a.tokens[0].type)&&`tokens`in a.tokens[0]&&a.tokens[0].tokens?(a.tokens[0].raw=d.raw+a.tokens[0].raw,a.tokens[0].text=d.raw+a.tokens[0].text,a.tokens[0].tokens.unshift(d)):a.tokens.unshift({type:`paragraph`,raw:d.raw,text:d.raw,tokens:[d]}):a.tokens.unshift(d)}}else a.task&&(a.task=!1)}if(r.loose)for(let a of r.items){a.loose=!0;for(let p of a.tokens)p.type===`text`&&(p.type=`paragraph`)}return r}}html(e){let t=this.rules.block.html.exec(e);if(t){let n=ie(t[0]);return{type:`html`,block:!0,raw:n,pre:t[1]===`pre`||t[1]===`script`||t[1]===`style`,text:n}}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=q(t[1]).replace(this.rules.other.multipleSpaceGlobal,` `),s=t[2]?t[2].replace(this.rules.other.hrefBrackets,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:n,raw:L(t[0],`
99
+ `),href:s,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=se(t[1]),s=t[2].replace(this.rules.other.tableAlignChars,``).split(`|`),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,``).split(`
100
+ `):[],o={type:`table`,raw:L(t[0],`
101
+ `),header:[],align:[],rows:[]};if(n.length===s.length){for(let i of s)this.rules.other.tableAlignRight.test(i)?o.align.push(`right`):this.rules.other.tableAlignCenter.test(i)?o.align.push(`center`):this.rules.other.tableAlignLeft.test(i)?o.align.push(`left`):o.align.push(null);for(let i=0;i<n.length;i++)o.header.push({text:n[i],tokens:this.lexer.inline(n[i]),header:!0,align:o.align[i]});for(let i of r)o.rows.push(se(i,o.header.length).map((u,a)=>({text:u,tokens:this.lexer.inline(u),header:!1,align:o.align[a]})));return o}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:`heading`,raw:L(t[0],`
102
+ `),depth:t[2].charAt(0)===`=`?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`
103
+ `?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[0].charAt(0)===`!`?2:1;if(!this.options.pedantic&&we(e,t[1],n,this.rules))return;let s=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(s)){if(!this.rules.other.endAngleBracket.test(s))return;let i=L(s.slice(0,-1),`\\`);if((s.length-i.length)%2===0)return}else{let i=Te(t[2],`()`);if(i===-2)return;if(i>-1){let a=(t[0].indexOf(`!`)===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,a).trim(),t[3]=``}}let r=t[2],o=``;if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(r);i&&(r=i[1],o=i[3])}else o=t[3]?t[3].slice(1,-1):``;return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(s)?r=r.slice(1):r=r.slice(1,-1)),Oe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,`$1`),title:o&&o.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let s=n[0].charAt(0)===`!`?2:1;if(!this.options.pedantic&&we(e,n[1],s,this.rules))return;let o=t[q((n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,` `))];if(!o){let i=n[0].charAt(0);return{type:`text`,raw:i,text:i}}return Oe(n,o,n[0],this.lexer,this.rules)}}emStrong(e,t,n=``){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(s[1]||s[3]||``)||!n||this.rules.inline.punctuation.exec(n)){let o=[...s[0]].length-1,i,u,a=o,p=0,c=s[0][0],d=n===c,m=c===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(m.lastIndex=0,t=t.slice(-1*e.length+o);(s=m.exec(t))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(u=[...i].length,s[3]||s[4]){a+=u;continue}else if(s[5]||s[6]){if(o%3&&!((o+u)%3)){p+=u;continue}if(d)break}if(a-=u,a>0)continue;u=Math.min(u,u+a+p);let b=[...s[0]][0].length,g=e.slice(0,o+s.index+b+u);if(Math.min(o,u)%2){let f=g.slice(1,-1);return{type:`em`,raw:g,text:f,tokens:this.lexer.inlineTokens(f)}}let w=g.slice(2,-2);return{type:`strong`,raw:g,text:w,tokens:this.lexer.inlineTokens(w)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,` `),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:`codespan`,raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e,t,n=``){let s=this.rules.inline.delLDelim.exec(e);if(!s)return;if(!(s[1]||``)||!n||this.rules.inline.punctuation.exec(n)){let o=[...s[0]].length-1,i,u,a=o,p=this.rules.inline.delRDelim;for(p.lastIndex=0,t=t.slice(-1*e.length+o);(s=p.exec(t))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i||(u=[...i].length,u!==o))continue;if(s[3]||s[4]){a+=u;continue}if(a-=u,a>0)continue;u=Math.min(u,u+a);let c=[...s[0]][0].length,d=e.slice(0,o+s.index+c+u),m=d.slice(o,-o);return{type:`del`,raw:d,text:m,tokens:this.lexer.inlineTokens(m)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]===`@`?(n=t[1],s=`mailto:`+n):(n=t[1],s=n),{type:`link`,raw:t[0],text:n,href:s,autolink:!0,tokens:[{type:`text`,raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,s;if(t[2]===`@`)n=t[0],s=`mailto:`+n;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);n=t[0],t[1]===`www.`?s=`http://`+t[0]:s=t[0]}return{type:`link`,raw:t[0],text:n,href:s,autolink:!0,tokens:[{type:`text`,raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:`text`,raw:t[0],text:n?t[0]:Re(t[0]),escaped:n}}}};var R=class l{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||y,this.options.tokenizer=this.options.tokenizer||new P,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,linkEmitted:!1,top:!0};let t={other:x,block:j.normal,inline:D.normal};this.options.pedantic?(t.block=j.pedantic,t.inline=D.pedantic):this.options.gfm&&(t.block=j.gfm,this.options.breaks?t.inline=D.breaks:t.inline=D.gfm),this.tokenizer.rules=t}static get rules(){return{block:j,inline:D}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(x.carriageReturn,`
104
+ `),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(x.tabCharGlobal,` `).replace(x.spaceLine,``));let s=1/0;for(;e;){if(e.length<s)s=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let r;if(this.options.extensions?.block?.some(i=>(r=i.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let i=t.at(-1);r.raw.length===1&&i!==void 0?i.raw+=`
105
+ `:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let i=t.at(-1);i?.type===`paragraph`||i?.type===`text`?(i.raw+=(i.raw.endsWith(`
106
+ `)?``:`
107
+ `)+r.raw,i.text+=`
108
+ `+r.text,this.inlineQueue.at(-1).src=i.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let i=t.at(-1);i?.type===`paragraph`||i?.type===`text`?(i.raw+=(i.raw.endsWith(`
109
+ `)?``:`
110
+ `)+r.raw,i.text+=`
111
+ `+r.raw,this.inlineQueue.at(-1).src=i.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let o=e;if(this.options.extensions?.startBlock){let i=1/0,u=e.slice(1),a;this.options.extensions.startBlock.forEach(p=>{a=p.call({lexer:this},u),typeof a==`number`&&a>=0&&(i=Math.min(i,a))}),i<1/0&&i>=0&&(o=e.substring(0,i+1))}if(this.state.top&&(r=this.tokenizer.paragraph(o))){let i=t.at(-1);n&&i?.type===`paragraph`?(i.raw+=(i.raw.endsWith(`
112
+ `)?``:`
113
+ `)+r.raw,i.text+=`
114
+ `+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=i.text):t.push(r),n=o.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let i=t.at(-1);i?.type===`text`?(i.raw+=(i.raw.endsWith(`
115
+ `)?``:`
116
+ `)+r.raw,i.text+=`
117
+ `+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=i.text):t.push(r);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}linkInText(e){if(!e.includes(`[`))return!1;let t=this.tokenizer.rules.inline.link;for(let n of e.matchAll(this.tokenizer.rules.inline.blockSkip))if(t.test(n[0])&&e.charAt(n.index-1)!==`!`)return!0;for(let n of e.matchAll(this.tokenizer.rules.inline.reflinkSearch)){let s=n[0],r=s.lastIndexOf(`[`);if(!(s.charAt(0)===`!`||!Object.hasOwn(this.tokens.links,q(s.slice(r+1,-1))))&&!(r>1&&this.linkInText(s.slice(1,r-1))))return!0}return!1}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e;if(this.tokens.links&&e.includes(`[`)){let i=this.tokenizer.rules.inline.reflinkSearch,u=a=>{let p=a.lastIndexOf(`[`);if(!Object.hasOwn(this.tokens.links,q(a.slice(p+1,-1))))return a;if(p>1&&a.charAt(0)!==`!`){let c=a.slice(1,p-1);if(this.linkInText(c))return`[`+c.replace(i,u)+`][`+`a`.repeat(a.length-p-2)+`]`}return`[`+`a`.repeat(a.length-2)+`]`};n=n.replace(i,u)}n=n.replace(this.tokenizer.rules.inline.anyPunctuation,i=>`+`.repeat(i.length)),n=n.replace(this.tokenizer.rules.inline.blockSkip,(i,u,a)=>{let p=a?a.length:0;return i.slice(0,p)+`[`+`a`.repeat(i.length-p-2)+`]`}),n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,r=``,o=1/0;for(;e;){if(e.length<o)o=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}s||(r=``),s=!1;let i;if(this.options.extensions?.inline?.some(a=>(i=a.call({lexer:this},e,t))?(e=e.substring(i.raw.length),t.push(i),!0):!1))continue;if(i=this.tokenizer.escape(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.tag(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.link(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(i.raw.length);let a=t.at(-1);i.type===`text`&&a?.type===`text`?(a.raw+=i.raw,a.text+=i.text):t.push(i);continue}if(i=this.tokenizer.emStrong(e,n,r)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.codespan(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.br(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.del(e,n,r)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.autolink(e)){e=e.substring(i.raw.length),t.push(i);continue}if(!this.state.inLink&&(i=this.tokenizer.url(e))){e=e.substring(i.raw.length),t.push(i);continue}let u=e;if(this.options.extensions?.startInline){let a=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(d=>{c=d.call({lexer:this},p),typeof c==`number`&&c>=0&&(a=Math.min(a,c))}),a<1/0&&a>=0&&(u=e.substring(0,a+1))}if(i=this.tokenizer.inlineText(u)){e=e.substring(i.raw.length),i.raw.slice(-1)!==`_`&&(r=i.raw.slice(-1)),s=!0;let a=t.at(-1);a?.type===`text`?(a.raw+=i.raw,a.text+=i.text):t.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=`Infinite loop on byte: `+e;if(this.options.silent)console.error(t);else throw new Error(t)}};var S=class{options;parser;constructor(e){this.options=e||y}space(e){return``}code({text:e,lang:t,escaped:n}){let s=(t||``).match(x.notSpaceStart)?.[0],r=e?e.replace(x.endingNewline,``)+`
118
+ `:``;return s?`<pre><code class="language-`+O(s)+`">`+(n?r:O(r,!0))+`</code></pre>
119
+ `:`<pre><code>`+(n?r:O(r,!0))+`</code></pre>
120
+ `}blockquote({tokens:e}){return`<blockquote>
121
+ ${this.parser.parse(e)}</blockquote>
122
+ `}html({text:e}){return e}def(e){return``}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
123
+ `}hr(e){return`<hr>
124
+ `}list(e){let t=e.ordered,n=e.start,s=``;for(let i=0;i<e.items.length;i++){let u=e.items[i];s+=this.listitem(u)}let r=t?`ol`:`ul`,o=t&&n!==1?` start="`+n+`"`:``;return`<`+r+o+`>
125
+ `+s+`</`+r+`>
126
+ `}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
127
+ `}checkbox({checked:e}){return`<input `+(e?`checked="" `:``)+`disabled="" type="checkbox"> `}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
128
+ `}table(e){let t=``,n=``;for(let r=0;r<e.header.length;r++)n+=this.tablecell(e.header[r]);t+=this.tablerow({text:n});let s=``;for(let r=0;r<e.rows.length;r++){let o=e.rows[r];n=``;for(let i=0;i<o.length;i++)n+=this.tablecell(o[i]);s+=this.tablerow({text:n})}return s&&(s=`<tbody>${s}</tbody>`),`<table>
129
+ <thead>
130
+ `+t+`</thead>
131
+ `+s+`</table>
132
+ `}tablerow({text:e}){return`<tr>
133
+ ${e}</tr>
134
+ `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
135
+ `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${O(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,text:n,tokens:s,autolink:r}){let o=r?O(n,!0):this.parser.parseInline(s),i=re$1(e);if(i===null)return o;e=O(i,r);let u=`<a href="`+e+`"`;return t&&(u+=` title="`+O(t)+`"`),u+=`>`+o+`</a>`,u}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=re$1(e);if(r===null)return O(n);e=r;let o=`<img src="${O(e)}" alt="${O(n)}"`;return t&&(o+=` title="${O(t)}"`),o+=`>`,o}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:O(e.text)}};var z=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}};var T=class l{options;renderer;textRenderer;constructor(e){this.options=e||y,this.options.renderer=this.options.renderer||new S,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new z}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let s=e[n];if(this.options.extensions?.renderers?.[s.type]){let o=s,i=this.options.extensions.renderers[o.type].call({parser:this},o);if(i!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`checkbox`,`html`,`def`,`paragraph`,`text`].includes(o.type)){t+=i||``;continue}}let r=s;switch(r.type){case`space`:t+=this.renderer.space(r);break;case`hr`:t+=this.renderer.hr(r);break;case`heading`:t+=this.renderer.heading(r);break;case`code`:t+=this.renderer.code(r);break;case`table`:t+=this.renderer.table(r);break;case`blockquote`:t+=this.renderer.blockquote(r);break;case`list`:t+=this.renderer.list(r);break;case`checkbox`:t+=this.renderer.checkbox(r);break;case`html`:t+=this.renderer.html(r);break;case`def`:t+=this.renderer.def(r);break;case`paragraph`:t+=this.renderer.paragraph(r);break;case`text`:t+=this.renderer.text(r);break;default:{let o=`Token with "`+r.type+`" type was not found.`;if(this.options.silent)return console.error(o),``;throw new Error(o)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let i=this.options.extensions.renderers[r.type].call({parser:this},r);if(i!==!1||![`escape`,`html`,`link`,`image`,`checkbox`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(r.type)){n+=i||``;continue}}let o=r;switch(o.type){case`escape`:n+=t.text(o);break;case`html`:n+=t.html(o);break;case`link`:n+=t.link(o);break;case`image`:n+=t.image(o);break;case`checkbox`:n+=t.checkbox(o);break;case`strong`:n+=t.strong(o);break;case`em`:n+=t.em(o);break;case`codespan`:n+=t.codespan(o);break;case`br`:n+=t.br(o);break;case`del`:n+=t.del(o);break;case`text`:n+=t.text(o);break;default:{let i=`Token with "`+o.type+`" type was not found.`;if(this.options.silent)return console.error(i),``;throw new Error(i)}}}return n}};var _=class{options;block;constructor(e){this.options=e||y}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?R.lex:R.lexInline}provideParser(e=this.block){return e?T.parse:T.parseInline}};var F=class{defaults=I();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=T;Renderer=S;TextRenderer=z;Lexer=R;Tokenizer=P;Hooks=_;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let s of e)switch(n=n.concat(t.call(this,s)),s.type){case`table`:{let r=s;for(let o of r.header)n=n.concat(this.walkTokens(o.tokens,t));for(let o of r.rows)for(let i of o)n=n.concat(this.walkTokens(i.tokens,t));break}case`list`:{let r=s;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=s;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(o=>{let i=r[o].flat(1/0);n=n.concat(this.walkTokens(i,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error(`extension name required`);if(`renderer`in r){let o=t.renderers[r.name];o?t.renderers[r.name]=function(...i){let u=r.renderer.apply(this,i);return u===!1&&(u=o.apply(this,i)),u}:t.renderers[r.name]=r.renderer}if(`tokenizer`in r){if(!r.level||r.level!==`block`&&r.level!==`inline`)throw new Error(`extension level must be 'block' or 'inline'`);let o=t[r.level];o?o.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level===`block`?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level===`inline`&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}`childTokens`in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),s.extensions=t),n.renderer){let r=this.defaults.renderer||new S(this.defaults);for(let o in n.renderer){if(!(o in r))throw new Error(`renderer '${o}' does not exist`);if([`options`,`parser`].includes(o))continue;let i=o,u=n.renderer[i],a=r[i];r[i]=(...p)=>{let c=u.apply(r,p);return c===!1&&(c=a.apply(r,p)),c||``}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new P(this.defaults);for(let o in n.tokenizer){if(!(o in r))throw new Error(`tokenizer '${o}' does not exist`);if([`options`,`rules`,`lexer`].includes(o))continue;let i=o,u=n.tokenizer[i],a=r[i];r[i]=(...p)=>{let c=u.apply(r,p);return c===!1&&(c=a.apply(r,p)),c}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new _;for(let o in n.hooks){if(!(o in r))throw new Error(`hook '${o}' does not exist`);if([`options`,`block`].includes(o))continue;let i=o,u=n.hooks[i],a=r[i];_.passThroughHooks.has(o)?r[i]=p=>{if(this.defaults.async&&_.passThroughHooksRespectAsync.has(o))return(async()=>{let d=await u.call(r,p);return a.call(r,d)})();let c=u.call(r,p);return a.call(r,c)}:r[i]=(...p)=>{if(this.defaults.async)return(async()=>{let d=await u.apply(r,p);return d===!1&&(d=await a.apply(r,p)),d})();let c=u.apply(r,p);return c===!1&&(c=a.apply(r,p)),c}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,o=n.walkTokens;s.walkTokens=function(i){let u=[];return u.push(o.call(this,i)),r&&(u=u.concat(r.call(this,i))),u}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return R.lex(e,t??this.defaults)}parser(e,t){return T.parse(e,t??this.defaults)}parseMarkdown(e){return(n,s)=>{let r={...s},o={...this.defaults,...r},i=this.onError(!!o.silent,!!o.async);if(this.defaults.async===!0&&r.async===!1)return i(new Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof n>`u`||n===null)return i(new Error(`marked(): input parameter is undefined or null`));if(typeof n!=`string`)return i(new Error(`marked(): input parameter is of type `+Object.prototype.toString.call(n)+`, string expected`));if(o.hooks&&(o.hooks.options=o,o.hooks.block=e),o.async)return(async()=>{let u=o.hooks?await o.hooks.preprocess(n):n,p=await(o.hooks?await o.hooks.provideLexer(e):e?R.lex:R.lexInline)(u,o),c=o.hooks?await o.hooks.processAllTokens(p):p;o.walkTokens&&await Promise.all(this.walkTokens(c,o.walkTokens));let m=await(o.hooks?await o.hooks.provideParser(e):e?T.parse:T.parseInline)(c,o);return o.hooks?await o.hooks.postprocess(m):m})().catch(i);try{o.hooks&&(n=o.hooks.preprocess(n));let a=(o.hooks?o.hooks.provideLexer(e):e?R.lex:R.lexInline)(n,o);o.hooks&&(a=o.hooks.processAllTokens(a)),o.walkTokens&&this.walkTokens(a,o.walkTokens);let c=(o.hooks?o.hooks.provideParser(e):e?T.parse:T.parseInline)(a,o);return o.hooks&&(c=o.hooks.postprocess(c)),c}catch(u){return i(u)}}}onError(e,t){return n=>{if(n.message+=`
136
+ Please report this to https://github.com/markedjs/marked.`,e){let s=`<p>An error occurred:</p><pre>`+O(n.message+``,!0)+`</pre>`;return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}};var E=new F;function k(l,e){return E.parse(l,e)}k.options=k.setOptions=function(l){return E.setOptions(l),k.defaults=E.defaults,W(k.defaults),k};k.getDefaults=I;k.defaults=y;function Pt(...l){return E.use(...l),k.defaults=E.defaults,W(k.defaults),k}k.use=Pt;k.walkTokens=function(l,e){return E.walkTokens(l,e)};k.parseInline=E.parseInline;k.Parser=T;k.parser=T.parse;k.Renderer=S;k.TextRenderer=z;k.Lexer=R;k.lexer=R.lex;k.Tokenizer=P;k.Hooks=_;k.parse=k;var gn=k.options;var fn=k.setOptions;var mn=k.walkTokens;var xn=k.parseInline;var Rn=T.parse;var Tn=R.lex;function _OverloadYield(e,d){this.v=e,this.k=d}function _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}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _iterableToArrayLimit(r,l){var t=null==r?null:`undefined`!=typeof Symbol&&r[Symbol.iterator]||r[`@@iterator`];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _nonIterableRest(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
137
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _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}}function AsyncGenerator(e){var t,n;function resume(t,n){try{var r=e[t](n),o=r.value,u=o instanceof _OverloadYield;Promise.resolve(u?o.v:o).then(function(n){if(u){var i=`return`===t&&o.k?t:`next`;if(!o.k||n.done)return resume(i,n);n=e[i](n).value}settle(!!r.done,n)},function(e){resume(`throw`,e)})}catch(e){settle(2,e)}}function settle(e,r){2===e?t.reject(r):t.resolve({value:r,done:e}),(t=t.next)?resume(t.key,t.arg):n=null}this._invoke=function(e,r){return new Promise(function(o,u){var i={key:e,arg:r,resolve:o,reject:u,next:null};n?n=n.next=i:(t=n=i,resume(e,r))})},`function`!=typeof e.return&&(this.return=void 0)}AsyncGenerator.prototype[`function`==typeof Symbol&&Symbol.asyncIterator||`@@asyncIterator`]=function(){return this},AsyncGenerator.prototype.next=function(e){return this._invoke(`next`,e)},AsyncGenerator.prototype.throw=function(e){return this._invoke(`throw`,e)},AsyncGenerator.prototype.return=function(e){return this._invoke(`return`,e)};var entries=Object.entries;var setPrototypeOf=Object.setPrototypeOf;var isFrozen=Object.isFrozen;var getPrototypeOf=Object.getPrototypeOf;var getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor;var freeze=Object.freeze;var seal=Object.seal;var create=Object.create;var _ref=typeof Reflect!==`undefined`&&Reflect;var apply=_ref.apply;var construct=_ref.construct;if(!freeze)freeze=function freeze(x){return x};if(!seal)seal=function seal(x){return x};if(!apply)apply=function apply(func,thisArg){for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return func.apply(thisArg,args)};if(!construct)construct=function construct(Func){for(var _len2=arguments.length,args=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++)args[_key2-1]=arguments[_key2];return new Func(...args)};var arrayForEach=unapply(Array.prototype.forEach);Array.prototype.indexOf;var arrayLastIndexOf=unapply(Array.prototype.lastIndexOf);var arrayPop=unapply(Array.prototype.pop);var arrayPush=unapply(Array.prototype.push);Array.prototype.slice;var arraySplice=unapply(Array.prototype.splice);var arrayIsArray=Array.isArray;var stringToLowerCase=unapply(String.prototype.toLowerCase);var stringToString=unapply(String.prototype.toString);var stringMatch=unapply(String.prototype.match);var stringReplace=unapply(String.prototype.replace);var stringIndexOf=unapply(String.prototype.indexOf);var stringTrim=unapply(String.prototype.trim);var numberToString=unapply(Number.prototype.toString);var booleanToString=unapply(Boolean.prototype.toString);var bigintToString=typeof BigInt===`undefined`?null:unapply(BigInt.prototype.toString);var symbolToString=typeof Symbol===`undefined`?null:unapply(Symbol.prototype.toString);var objectHasOwnProperty=unapply(Object.prototype.hasOwnProperty);var objectToString=unapply(Object.prototype.toString);var regExpTest=unapply(RegExp.prototype.test);var typeErrorCreate=unconstruct(TypeError);function unapply(func){return function(thisArg){if(thisArg instanceof RegExp)thisArg.lastIndex=0;for(var _len3=arguments.length,args=new Array(_len3>1?_len3-1:0),_key3=1;_key3<_len3;_key3++)args[_key3-1]=arguments[_key3];return apply(func,thisArg,args)}}function unconstruct(Func){return function(){for(var _len4=arguments.length,args=new Array(_len4),_key4=0;_key4<_len4;_key4++)args[_key4]=arguments[_key4];return construct(Func,args)}}function addToSet(set,array){let transformCaseFunc=arguments.length>2&&arguments[2]!==void 0?arguments[2]:stringToLowerCase;if(setPrototypeOf)setPrototypeOf(set,null);if(!arrayIsArray(array))return set;let l=array.length;while(l--){let element=array[l];if(typeof element===`string`){const lcElement=transformCaseFunc(element);if(lcElement!==element){if(!isFrozen(array))array[l]=lcElement;element=lcElement}}set[element]=true}return set}function cleanArray(array){for(let index=0;index<array.length;index++)if(!objectHasOwnProperty(array,index))array[index]=null;return array}function clone(object){const newObject=create(null);for(const _ref2 of entries(object)){var _ref3=_slicedToArray(_ref2,2);const property=_ref3[0];const value=_ref3[1];if(objectHasOwnProperty(object,property)){if(arrayIsArray(value))newObject[property]=cleanArray(value);else if(value&&typeof value===`object`&&value.constructor===Object)newObject[property]=clone(value);else newObject[property]=value}}return newObject}function stringifyValue(value){switch(typeof value){case`string`:return value;case`number`:return numberToString(value);case`boolean`:return booleanToString(value);case`bigint`:return bigintToString?bigintToString(value):`0`;case`symbol`:return symbolToString?symbolToString(value):`Symbol()`;case`undefined`:return objectToString(value);case`function`:case`object`:{if(value===null)return objectToString(value);const valueAsRecord=value;const valueToString=lookupGetter(valueAsRecord,`toString`);if(typeof valueToString===`function`){const stringified=valueToString(valueAsRecord);return typeof stringified===`string`?stringified:objectToString(stringified)}return objectToString(value)}default:return objectToString(value)}}function lookupGetter(object,prop){while(object!==null){const desc=getOwnPropertyDescriptor(object,prop);if(desc){if(desc.get)return unapply(desc.get);if(typeof desc.value===`function`)return unapply(desc.value)}object=getPrototypeOf(object)}function fallbackValue(){return null}return fallbackValue}function isRegex(value){try{regExpTest(value,``);return true}catch(_unused){return false}}var html$1=freeze([`a`,`abbr`,`acronym`,`address`,`area`,`article`,`aside`,`audio`,`b`,`bdi`,`bdo`,`big`,`blink`,`blockquote`,`body`,`br`,`button`,`canvas`,`caption`,`center`,`cite`,`code`,`col`,`colgroup`,`content`,`data`,`datalist`,`dd`,`decorator`,`del`,`details`,`dfn`,`dialog`,`dir`,`div`,`dl`,`dt`,`element`,`em`,`fieldset`,`figcaption`,`figure`,`font`,`footer`,`form`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`head`,`header`,`hgroup`,`hr`,`html`,`i`,`img`,`input`,`ins`,`kbd`,`label`,`legend`,`li`,`main`,`map`,`mark`,`marquee`,`menu`,`menuitem`,`meter`,`nav`,`nobr`,`ol`,`optgroup`,`option`,`output`,`p`,`picture`,`pre`,`progress`,`q`,`rp`,`rt`,`ruby`,`s`,`samp`,`search`,`section`,`select`,`shadow`,`slot`,`small`,`source`,`spacer`,`span`,`strike`,`strong`,`style`,`sub`,`summary`,`sup`,`table`,`tbody`,`td`,`template`,`textarea`,`tfoot`,`th`,`thead`,`time`,`tr`,`track`,`tt`,`u`,`ul`,`var`,`video`,`wbr`]);var svg$1=freeze([`svg`,`a`,`altglyph`,`altglyphdef`,`altglyphitem`,`animatecolor`,`animatemotion`,`animatetransform`,`circle`,`clippath`,`defs`,`desc`,`ellipse`,`enterkeyhint`,`exportparts`,`filter`,`font`,`g`,`glyph`,`glyphref`,`hkern`,`image`,`inputmode`,`line`,`lineargradient`,`marker`,`mask`,`metadata`,`mpath`,`part`,`path`,`pattern`,`polygon`,`polyline`,`radialgradient`,`rect`,`stop`,`style`,`switch`,`symbol`,`text`,`textpath`,`title`,`tref`,`tspan`,`view`,`vkern`]);var svgFilters=freeze([`feBlend`,`feColorMatrix`,`feComponentTransfer`,`feComposite`,`feConvolveMatrix`,`feDiffuseLighting`,`feDisplacementMap`,`feDistantLight`,`feDropShadow`,`feFlood`,`feFuncA`,`feFuncB`,`feFuncG`,`feFuncR`,`feGaussianBlur`,`feImage`,`feMerge`,`feMergeNode`,`feMorphology`,`feOffset`,`fePointLight`,`feSpecularLighting`,`feSpotLight`,`feTile`,`feTurbulence`]);var svgDisallowed=freeze([`animate`,`color-profile`,`cursor`,`discard`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`foreignobject`,`hatch`,`hatchpath`,`mesh`,`meshgradient`,`meshpatch`,`meshrow`,`missing-glyph`,`script`,`set`,`solidcolor`,`unknown`,`use`]);var mathMl$1=freeze([`math`,`menclose`,`merror`,`mfenced`,`mfrac`,`mglyph`,`mi`,`mlabeledtr`,`mmultiscripts`,`mn`,`mo`,`mover`,`mpadded`,`mphantom`,`mroot`,`mrow`,`ms`,`mspace`,`msqrt`,`mstyle`,`msub`,`msup`,`msubsup`,`mtable`,`mtd`,`mtext`,`mtr`,`munder`,`munderover`,`mprescripts`]);var mathMlDisallowed=freeze([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]);var text=freeze([`#text`]);var html=freeze([`accept`,`action`,`align`,`alt`,`autocapitalize`,`autocomplete`,`autopictureinpicture`,`autoplay`,`background`,`bgcolor`,`border`,`capture`,`cellpadding`,`cellspacing`,`checked`,`cite`,`class`,`clear`,`color`,`cols`,`colspan`,`command`,`commandfor`,`controls`,`controlslist`,`coords`,`crossorigin`,`datetime`,`decoding`,`default`,`dir`,`disabled`,`disablepictureinpicture`,`disableremoteplayback`,`download`,`draggable`,`enctype`,`enterkeyhint`,`exportparts`,`face`,`for`,`headers`,`height`,`hidden`,`high`,`href`,`hreflang`,`id`,`inert`,`inputmode`,`integrity`,`ismap`,`kind`,`label`,`lang`,`list`,`loading`,`loop`,`low`,`max`,`maxlength`,`media`,`method`,`min`,`minlength`,`multiple`,`muted`,`name`,`nonce`,`noshade`,`novalidate`,`nowrap`,`open`,`optimum`,`part`,`pattern`,`placeholder`,`playsinline`,`popover`,`popovertarget`,`popovertargetaction`,`poster`,`preload`,`pubdate`,`radiogroup`,`readonly`,`rel`,`required`,`rev`,`reversed`,`role`,`rows`,`rowspan`,`spellcheck`,`scope`,`selected`,`shape`,`size`,`sizes`,`slot`,`span`,`srclang`,`start`,`src`,`srcset`,`step`,`style`,`summary`,`tabindex`,`title`,`translate`,`type`,`usemap`,`valign`,`value`,`width`,`wrap`,`xmlns`]);var svg=freeze([`accent-height`,`accumulate`,`additive`,`alignment-baseline`,`amplitude`,`ascent`,`attributename`,`attributetype`,`azimuth`,`basefrequency`,`baseline-shift`,`begin`,`bias`,`by`,`class`,`clip`,`clippathunits`,`clip-path`,`clip-rule`,`color`,`color-interpolation`,`color-interpolation-filters`,`color-profile`,`color-rendering`,`cx`,`cy`,`d`,`dx`,`dy`,`diffuseconstant`,`direction`,`display`,`divisor`,`dominant-baseline`,`dur`,`edgemode`,`elevation`,`end`,`exponent`,`fill`,`fill-opacity`,`fill-rule`,`filter`,`filterunits`,`flood-color`,`flood-opacity`,`font-family`,`font-size`,`font-size-adjust`,`font-stretch`,`font-style`,`font-variant`,`font-weight`,`fx`,`fy`,`g1`,`g2`,`glyph-name`,`glyphref`,`gradientunits`,`gradienttransform`,`height`,`href`,`id`,`image-rendering`,`in`,`in2`,`intercept`,`k`,`k1`,`k2`,`k3`,`k4`,`kerning`,`keypoints`,`keysplines`,`keytimes`,`lang`,`lengthadjust`,`letter-spacing`,`kernelmatrix`,`kernelunitlength`,`lighting-color`,`local`,`marker-end`,`marker-mid`,`marker-start`,`markerheight`,`markerunits`,`markerwidth`,`maskcontentunits`,`maskunits`,`max`,`mask`,`mask-type`,`media`,`method`,`mode`,`min`,`name`,`numoctaves`,`offset`,`operator`,`opacity`,`order`,`orient`,`orientation`,`origin`,`overflow`,`paint-order`,`path`,`pathlength`,`patterncontentunits`,`patterntransform`,`patternunits`,`pointer-events`,`points`,`preservealpha`,`preserveaspectratio`,`primitiveunits`,`r`,`rx`,`ry`,`radius`,`refx`,`refy`,`repeatcount`,`repeatdur`,`restart`,`result`,`rotate`,`scale`,`seed`,`shape-rendering`,`slope`,`specularconstant`,`specularexponent`,`spreadmethod`,`startoffset`,`stddeviation`,`stitchtiles`,`stop-color`,`stop-opacity`,`stroke-dasharray`,`stroke-dashoffset`,`stroke-linecap`,`stroke-linejoin`,`stroke-miterlimit`,`stroke-opacity`,`stroke`,`stroke-width`,`style`,`surfacescale`,`systemlanguage`,`tabindex`,`tablevalues`,`targetx`,`targety`,`transform`,`transform-origin`,`text-anchor`,`text-decoration`,`text-orientation`,`text-rendering`,`textlength`,`type`,`u1`,`u2`,`unicode`,`values`,`vector-effect`,`viewbox`,`visibility`,`version`,`vert-adv-y`,`vert-origin-x`,`vert-origin-y`,`width`,`word-spacing`,`wrap`,`writing-mode`,`xchannelselector`,`ychannelselector`,`x`,`x1`,`x2`,`xmlns`,`y`,`y1`,`y2`,`z`,`zoomandpan`]);var mathMl=freeze([`accent`,`accentunder`,`align`,`bevelled`,`close`,`columnalign`,`columnlines`,`columnspacing`,`columnspan`,`denomalign`,`depth`,`dir`,`display`,`displaystyle`,`encoding`,`fence`,`frame`,`height`,`href`,`id`,`largeop`,`length`,`linethickness`,`lquote`,`lspace`,`mathbackground`,`mathcolor`,`mathsize`,`mathvariant`,`maxsize`,`minsize`,`movablelimits`,`notation`,`numalign`,`open`,`rowalign`,`rowlines`,`rowspacing`,`rowspan`,`rspace`,`rquote`,`scriptlevel`,`scriptminsize`,`scriptsizemultiplier`,`selection`,`separator`,`separators`,`stretchy`,`subscriptshift`,`supscriptshift`,`symmetric`,`voffset`,`width`,`xmlns`]);var xml=freeze([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]);var MUSTACHE_EXPR=seal(/{{[\w\W]*|^[\w\W]*}}/g);var ERB_EXPR=seal(/<%[\w\W]*|^[\w\W]*%>/g);var TMPLIT_EXPR=seal(/\${[\w\W]*/g);var DATA_ATTR=seal(/^data-[\-\w.\u00B7-\uFFFF]+$/);var ARIA_ATTR=seal(/^aria-[\-\w]+$/);var IS_ALLOWED_URI=seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);var IS_SCRIPT_OR_DATA=seal(/^(?:\w+script|data):/i);var ATTR_WHITESPACE=seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);var DOCTYPE_NAME=seal(/^html$/i);var CUSTOM_ELEMENT=seal(/^[a-z][.\w]*(-[.\w]+)+$/i);var ELEMENT_MARKUP_PROBE=seal(/<[/\w!]/g);var COMMENT_MARKUP_PROBE=seal(/<[/\w]/g);var FALLBACK_TAG_CLOSE=seal(/<\/no(script|embed|frames)/i);var SELF_CLOSING_TAG=seal(/\/>/i);var NODE_TYPE={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12};var LITERAL_TEXT_ELEMENT_NAMES=[`style`,`script`,`xmp`,`iframe`,`noembed`,`noframes`,`plaintext`,`noscript`];var LITERAL_TEXT_ELEMENTS=freeze(addToSet({},LITERAL_TEXT_ELEMENT_NAMES));var LITERAL_TEXT_CLOSE=function(){const map={};arrayForEach(LITERAL_TEXT_ELEMENT_NAMES,name=>{map[name]=seal(new RegExp(`</`+name+`(?=[\\t\\n\\f\\r />])`,`i`))});return freeze(map)}();var getGlobal=function getGlobal(){return typeof window===`undefined`?null:window};var _createTrustedTypesPolicy=function _createTrustedTypesPolicy(trustedTypes,purifyHostElement){if(typeof trustedTypes!==`object`||typeof trustedTypes.createPolicy!==`function`)return null;let suffix=null;const ATTR_NAME=`data-tt-policy-suffix`;if(purifyHostElement&&purifyHostElement.hasAttribute(ATTR_NAME))suffix=purifyHostElement.getAttribute(ATTR_NAME);const policyName=`dompurify`+(suffix?`#`+suffix:``);try{return trustedTypes.createPolicy(policyName,{createHTML(html){return html},createScriptURL(scriptUrl){return scriptUrl}})}catch(_){console.warn(`TrustedTypes policy `+policyName+` could not be created.`);return null}};var _createHooksMap=function _createHooksMap(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};var _resolveSetOption=function _resolveSetOption(cfg,key,fallback,options){return objectHasOwnProperty(cfg,key)&&arrayIsArray(cfg[key])?addToSet(options.base?clone(options.base):{},cfg[key],options.transform):fallback};var _resolveObjectOption=function _resolveObjectOption(cfg,key,makeFallback){const value=objectHasOwnProperty(cfg,key)?cfg[key]:void 0;return value&&typeof value===`object`?clone(value):makeFallback()};function createDOMPurify(){let window=arguments.length>0&&arguments[0]!==void 0?arguments[0]:getGlobal();const DOMPurify=root=>createDOMPurify(root);DOMPurify.version=`3.4.16`;DOMPurify.removed=[];if(!window||!window.document||window.document.nodeType!==NODE_TYPE.document||!window.Element){DOMPurify.isSupported=false;return DOMPurify}let document=window.document;const originalDocument=document;const currentScript=originalDocument.currentScript;window.DocumentFragment;const HTMLTemplateElement=window.HTMLTemplateElement,Node=window.Node,Element=window.Element,NodeFilter=window.NodeFilter;window.NamedNodeMap===void 0&&(window.NamedNodeMap||window.MozNamedAttrMap);window.HTMLFormElement;const DOMParser=window.DOMParser,trustedTypes=window.trustedTypes;const ElementPrototype=Element.prototype;const cloneNode=lookupGetter(ElementPrototype,`cloneNode`);const remove=lookupGetter(ElementPrototype,`remove`);const removeAttributeNode=lookupGetter(ElementPrototype,`removeAttributeNode`);const getNextSibling=lookupGetter(ElementPrototype,`nextSibling`);const getChildNodes=lookupGetter(ElementPrototype,`childNodes`);const getParentNode=lookupGetter(ElementPrototype,`parentNode`);const getShadowRoot=lookupGetter(ElementPrototype,`shadowRoot`);const getAttributes=lookupGetter(ElementPrototype,`attributes`);const getNodeType=Node&&Node.prototype?lookupGetter(Node.prototype,`nodeType`):null;const getNodeName=Node&&Node.prototype?lookupGetter(Node.prototype,`nodeName`):null;const getOwnerDocument=Node&&Node.prototype?lookupGetter(Node.prototype,`ownerDocument`):null;const _readNodeType=function _readNodeType(node){return getNodeType?getNodeType(node):node.nodeType};const _readNodeName=function _readNodeName(node){return getNodeName?getNodeName(node):node.nodeName};if(typeof HTMLTemplateElement===`function`){const template=document.createElement(`template`);if(template.content&&template.content.ownerDocument)document=template.content.ownerDocument}let trustedTypesPolicy;let emptyHTML=``;let defaultTrustedTypesPolicy;let defaultTrustedTypesPolicyResolved=false;let IN_TRUSTED_TYPES_POLICY=0;const _assertNotInTrustedTypesPolicy=function _assertNotInTrustedTypesPolicy(){if(IN_TRUSTED_TYPES_POLICY>0)throw typeErrorCreate(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)};const _createTrustedHTML=function _createTrustedHTML(html){_assertNotInTrustedTypesPolicy();IN_TRUSTED_TYPES_POLICY++;try{return trustedTypesPolicy.createHTML(html)}finally{IN_TRUSTED_TYPES_POLICY--}};const _createTrustedScriptURL=function _createTrustedScriptURL(scriptUrl){_assertNotInTrustedTypesPolicy();IN_TRUSTED_TYPES_POLICY++;try{return trustedTypesPolicy.createScriptURL(scriptUrl)}finally{IN_TRUSTED_TYPES_POLICY--}};const _getDefaultTrustedTypesPolicy=function _getDefaultTrustedTypesPolicy(){if(!defaultTrustedTypesPolicyResolved){defaultTrustedTypesPolicy=_createTrustedTypesPolicy(trustedTypes,currentScript);defaultTrustedTypesPolicyResolved=true}return defaultTrustedTypesPolicy};const _document=document,implementation=_document.implementation,createNodeIterator=_document.createNodeIterator,createDocumentFragment=_document.createDocumentFragment,getElementsByTagName=_document.getElementsByTagName;const importNode=originalDocument.importNode;let hooks=_createHooksMap();DOMPurify.isSupported=typeof entries===`function`&&typeof getParentNode===`function`&&implementation&&implementation.createHTMLDocument!==void 0;const MUSTACHE_EXPR$1=MUSTACHE_EXPR,ERB_EXPR$1=ERB_EXPR,TMPLIT_EXPR$1=TMPLIT_EXPR,DATA_ATTR$1=DATA_ATTR,ARIA_ATTR$1=ARIA_ATTR,IS_SCRIPT_OR_DATA$1=IS_SCRIPT_OR_DATA,ATTR_WHITESPACE$1=ATTR_WHITESPACE,CUSTOM_ELEMENT$1=CUSTOM_ELEMENT;let IS_ALLOWED_URI$1=IS_ALLOWED_URI;let ALLOWED_TAGS=null;const DEFAULT_ALLOWED_TAGS=addToSet({},[...html$1,...svg$1,...svgFilters,...mathMl$1,...text]);let ALLOWED_ATTR=null;const DEFAULT_ALLOWED_ATTR=addToSet({},[...html,...svg,...mathMl,...xml]);let CUSTOM_ELEMENT_HANDLING=Object.seal(create(null,{tagNameCheck:{writable:true,configurable:false,enumerable:true,value:null},attributeNameCheck:{writable:true,configurable:false,enumerable:true,value:null},allowCustomizedBuiltInElements:{writable:true,configurable:false,enumerable:true,value:false}}));let FORBID_TAGS=null;let FORBID_ATTR=null;const EXTRA_ELEMENT_HANDLING=Object.seal(create(null,{tagCheck:{writable:true,configurable:false,enumerable:true,value:null},attributeCheck:{writable:true,configurable:false,enumerable:true,value:null}}));let ALLOW_ARIA_ATTR=true;let ALLOW_DATA_ATTR=true;let ALLOW_UNKNOWN_PROTOCOLS=false;let ALLOW_SELF_CLOSE_IN_ATTR=true;let SAFE_FOR_TEMPLATES=false;let SAFE_FOR_XML=true;let WHOLE_DOCUMENT=false;let SET_CONFIG=false;let SET_CONFIG_ALLOWED_TAGS=null;let SET_CONFIG_ALLOWED_ATTR=null;let FORCE_BODY=false;let RETURN_DOM=false;let RETURN_DOM_FRAGMENT=false;let RETURN_TRUSTED_TYPE=false;let SANITIZE_DOM=true;let SANITIZE_NAMED_PROPS=false;const SANITIZE_NAMED_PROPS_PREFIX=`user-content-`;let KEEP_CONTENT=true;let IN_PLACE=false;let USE_PROFILES={};let FORBID_CONTENTS=null;const DEFAULT_FORBID_CONTENTS=addToSet({},[`annotation-xml`,`audio`,`colgroup`,`desc`,`foreignobject`,`head`,`iframe`,`math`,`mi`,`mn`,`mo`,`ms`,`mtext`,`noembed`,`noframes`,`noscript`,`plaintext`,`script`,`selectedcontent`,`style`,`svg`,`template`,`thead`,`title`,`video`,`xmp`]);let DATA_URI_TAGS=null;const DEFAULT_DATA_URI_TAGS=addToSet({},[`audio`,`video`,`img`,`source`,`image`,`track`]);let URI_SAFE_ATTRIBUTES=null;const DEFAULT_URI_SAFE_ATTRIBUTES=addToSet({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]);const MATHML_NAMESPACE=`http://www.w3.org/1998/Math/MathML`;const SVG_NAMESPACE=`http://www.w3.org/2000/svg`;const HTML_NAMESPACE=`http://www.w3.org/1999/xhtml`;let NAMESPACE=HTML_NAMESPACE;let IS_EMPTY_INPUT=false;let ALLOWED_NAMESPACES=null;const DEFAULT_ALLOWED_NAMESPACES=addToSet({},[MATHML_NAMESPACE,SVG_NAMESPACE,HTML_NAMESPACE],stringToString);const DEFAULT_MATHML_TEXT_INTEGRATION_POINTS=freeze([`mi`,`mo`,`mn`,`ms`,`mtext`]);let MATHML_TEXT_INTEGRATION_POINTS=addToSet({},DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);const DEFAULT_HTML_INTEGRATION_POINTS=freeze([`annotation-xml`]);let HTML_INTEGRATION_POINTS=addToSet({},DEFAULT_HTML_INTEGRATION_POINTS);const COMMON_SVG_AND_HTML_ELEMENTS=addToSet({},[`title`,`style`,`font`,`a`,`script`]);let PARSER_MEDIA_TYPE=null;const SUPPORTED_PARSER_MEDIA_TYPES=[`application/xhtml+xml`,`text/html`];const DEFAULT_PARSER_MEDIA_TYPE=`text/html`;let transformCaseFunc=null;let CONFIG=null;const formElement=document.createElement(`form`);const isRegexOrFunction=function isRegexOrFunction(testValue){return testValue instanceof RegExp||testValue instanceof Function};const _parseConfig=function _parseConfig(){let cfg=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(CONFIG&&CONFIG===cfg)return;if(!cfg||typeof cfg!==`object`)cfg={};cfg=clone(cfg);PARSER_MEDIA_TYPE=SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE)===-1?DEFAULT_PARSER_MEDIA_TYPE:cfg.PARSER_MEDIA_TYPE;transformCaseFunc=PARSER_MEDIA_TYPE===`application/xhtml+xml`?stringToString:stringToLowerCase;ALLOWED_TAGS=_resolveSetOption(cfg,`ALLOWED_TAGS`,DEFAULT_ALLOWED_TAGS,{transform:transformCaseFunc});ALLOWED_ATTR=_resolveSetOption(cfg,`ALLOWED_ATTR`,DEFAULT_ALLOWED_ATTR,{transform:transformCaseFunc});ALLOWED_NAMESPACES=_resolveSetOption(cfg,`ALLOWED_NAMESPACES`,DEFAULT_ALLOWED_NAMESPACES,{transform:stringToString});URI_SAFE_ATTRIBUTES=_resolveSetOption(cfg,`ADD_URI_SAFE_ATTR`,DEFAULT_URI_SAFE_ATTRIBUTES,{transform:transformCaseFunc,base:DEFAULT_URI_SAFE_ATTRIBUTES});DATA_URI_TAGS=_resolveSetOption(cfg,`ADD_DATA_URI_TAGS`,DEFAULT_DATA_URI_TAGS,{transform:transformCaseFunc,base:DEFAULT_DATA_URI_TAGS});FORBID_CONTENTS=_resolveSetOption(cfg,`FORBID_CONTENTS`,DEFAULT_FORBID_CONTENTS,{transform:transformCaseFunc});FORBID_TAGS=_resolveSetOption(cfg,`FORBID_TAGS`,clone({}),{transform:transformCaseFunc});FORBID_ATTR=_resolveSetOption(cfg,`FORBID_ATTR`,clone({}),{transform:transformCaseFunc});USE_PROFILES=objectHasOwnProperty(cfg,`USE_PROFILES`)?cfg.USE_PROFILES&&typeof cfg.USE_PROFILES===`object`?clone(cfg.USE_PROFILES):cfg.USE_PROFILES:false;ALLOW_ARIA_ATTR=cfg.ALLOW_ARIA_ATTR!==false;ALLOW_DATA_ATTR=cfg.ALLOW_DATA_ATTR!==false;ALLOW_UNKNOWN_PROTOCOLS=cfg.ALLOW_UNKNOWN_PROTOCOLS||false;ALLOW_SELF_CLOSE_IN_ATTR=cfg.ALLOW_SELF_CLOSE_IN_ATTR!==false;SAFE_FOR_TEMPLATES=cfg.SAFE_FOR_TEMPLATES||false;SAFE_FOR_XML=cfg.SAFE_FOR_XML!==false;WHOLE_DOCUMENT=cfg.WHOLE_DOCUMENT||false;RETURN_DOM=cfg.RETURN_DOM||false;RETURN_DOM_FRAGMENT=cfg.RETURN_DOM_FRAGMENT||false;RETURN_TRUSTED_TYPE=cfg.RETURN_TRUSTED_TYPE||false;FORCE_BODY=cfg.FORCE_BODY||false;SANITIZE_DOM=cfg.SANITIZE_DOM!==false;SANITIZE_NAMED_PROPS=cfg.SANITIZE_NAMED_PROPS||false;KEEP_CONTENT=cfg.KEEP_CONTENT!==false;IN_PLACE=cfg.IN_PLACE||false;IS_ALLOWED_URI$1=isRegex(cfg.ALLOWED_URI_REGEXP)?cfg.ALLOWED_URI_REGEXP:IS_ALLOWED_URI;NAMESPACE=typeof cfg.NAMESPACE===`string`?cfg.NAMESPACE:HTML_NAMESPACE;MATHML_TEXT_INTEGRATION_POINTS=_resolveObjectOption(cfg,`MATHML_TEXT_INTEGRATION_POINTS`,()=>addToSet({},DEFAULT_MATHML_TEXT_INTEGRATION_POINTS));HTML_INTEGRATION_POINTS=_resolveObjectOption(cfg,`HTML_INTEGRATION_POINTS`,()=>addToSet({},DEFAULT_HTML_INTEGRATION_POINTS));const customElementHandling=_resolveObjectOption(cfg,`CUSTOM_ELEMENT_HANDLING`,()=>create(null));CUSTOM_ELEMENT_HANDLING=create(null);if(objectHasOwnProperty(customElementHandling,`tagNameCheck`)&&isRegexOrFunction(customElementHandling.tagNameCheck))CUSTOM_ELEMENT_HANDLING.tagNameCheck=customElementHandling.tagNameCheck;if(objectHasOwnProperty(customElementHandling,`attributeNameCheck`)&&isRegexOrFunction(customElementHandling.attributeNameCheck))CUSTOM_ELEMENT_HANDLING.attributeNameCheck=customElementHandling.attributeNameCheck;if(objectHasOwnProperty(customElementHandling,`allowCustomizedBuiltInElements`)&&typeof customElementHandling.allowCustomizedBuiltInElements===`boolean`)CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=customElementHandling.allowCustomizedBuiltInElements;seal(CUSTOM_ELEMENT_HANDLING);if(SAFE_FOR_TEMPLATES)ALLOW_DATA_ATTR=false;if(RETURN_DOM_FRAGMENT)RETURN_DOM=true;if(USE_PROFILES){ALLOWED_TAGS=addToSet({},text);ALLOWED_ATTR=create(null);if(USE_PROFILES.html===true){addToSet(ALLOWED_TAGS,html$1);addToSet(ALLOWED_ATTR,html)}if(USE_PROFILES.svg===true){addToSet(ALLOWED_TAGS,svg$1);addToSet(ALLOWED_ATTR,svg);addToSet(ALLOWED_ATTR,xml)}if(USE_PROFILES.svgFilters===true){addToSet(ALLOWED_TAGS,svgFilters);addToSet(ALLOWED_ATTR,svg);addToSet(ALLOWED_ATTR,xml)}if(USE_PROFILES.mathMl===true){addToSet(ALLOWED_TAGS,mathMl$1);addToSet(ALLOWED_ATTR,mathMl);addToSet(ALLOWED_ATTR,xml)}}EXTRA_ELEMENT_HANDLING.tagCheck=null;EXTRA_ELEMENT_HANDLING.attributeCheck=null;if(objectHasOwnProperty(cfg,`ADD_TAGS`)){if(typeof cfg.ADD_TAGS===`function`)EXTRA_ELEMENT_HANDLING.tagCheck=cfg.ADD_TAGS;else if(arrayIsArray(cfg.ADD_TAGS)){if(ALLOWED_TAGS===DEFAULT_ALLOWED_TAGS)ALLOWED_TAGS=clone(ALLOWED_TAGS);addToSet(ALLOWED_TAGS,cfg.ADD_TAGS,transformCaseFunc)}}if(objectHasOwnProperty(cfg,`ADD_ATTR`)){if(typeof cfg.ADD_ATTR===`function`)EXTRA_ELEMENT_HANDLING.attributeCheck=cfg.ADD_ATTR;else if(arrayIsArray(cfg.ADD_ATTR)){if(ALLOWED_ATTR===DEFAULT_ALLOWED_ATTR)ALLOWED_ATTR=clone(ALLOWED_ATTR);addToSet(ALLOWED_ATTR,cfg.ADD_ATTR,transformCaseFunc)}}if(objectHasOwnProperty(cfg,`ADD_FORBID_CONTENTS`)&&arrayIsArray(cfg.ADD_FORBID_CONTENTS)){if(FORBID_CONTENTS===DEFAULT_FORBID_CONTENTS)FORBID_CONTENTS=clone(FORBID_CONTENTS);addToSet(FORBID_CONTENTS,cfg.ADD_FORBID_CONTENTS,transformCaseFunc)}if(KEEP_CONTENT)ALLOWED_TAGS[`#text`]=true;if(WHOLE_DOCUMENT)addToSet(ALLOWED_TAGS,[`html`,`head`,`body`]);if(ALLOWED_TAGS.table){addToSet(ALLOWED_TAGS,[`tbody`]);delete FORBID_TAGS.tbody}if(cfg.TRUSTED_TYPES_POLICY){if(typeof cfg.TRUSTED_TYPES_POLICY.createHTML!==`function`)throw typeErrorCreate(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL!==`function`)throw typeErrorCreate(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);const previousTrustedTypesPolicy=trustedTypesPolicy;trustedTypesPolicy=cfg.TRUSTED_TYPES_POLICY;try{emptyHTML=_createTrustedHTML(``)}catch(error){trustedTypesPolicy=previousTrustedTypesPolicy;throw error}}else if(cfg.TRUSTED_TYPES_POLICY===null){trustedTypesPolicy=void 0;emptyHTML=``}else{if(trustedTypesPolicy===void 0)trustedTypesPolicy=_getDefaultTrustedTypesPolicy();if(trustedTypesPolicy&&typeof emptyHTML===`string`)emptyHTML=_createTrustedHTML(``)}if(freeze)freeze(cfg);CONFIG=cfg};const ALL_SVG_TAGS=addToSet({},[...svg$1,...svgFilters,...svgDisallowed]);const ALL_MATHML_TAGS=addToSet({},[...mathMl$1,...mathMlDisallowed]);const _checkSvgNamespace=function _checkSvgNamespace(tagName,parent,parentTagName){if(parent.namespaceURI===HTML_NAMESPACE)return tagName===`svg`;if(parent.namespaceURI===MATHML_NAMESPACE)return tagName===`svg`&&(parentTagName===`annotation-xml`||MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);return Boolean(ALL_SVG_TAGS[tagName])};const _checkMathMlNamespace=function _checkMathMlNamespace(tagName,parent,parentTagName){if(parent.namespaceURI===HTML_NAMESPACE)return tagName===`math`;if(parent.namespaceURI===SVG_NAMESPACE)return tagName===`math`&&HTML_INTEGRATION_POINTS[parentTagName];return Boolean(ALL_MATHML_TAGS[tagName])};const _checkHtmlNamespace=function _checkHtmlNamespace(tagName,parent,parentTagName){if(parent.namespaceURI===SVG_NAMESPACE&&!HTML_INTEGRATION_POINTS[parentTagName])return false;if(parent.namespaceURI===MATHML_NAMESPACE&&!MATHML_TEXT_INTEGRATION_POINTS[parentTagName])return false;return!ALL_MATHML_TAGS[tagName]&&(COMMON_SVG_AND_HTML_ELEMENTS[tagName]||!ALL_SVG_TAGS[tagName])};const _checkValidNamespace=function _checkValidNamespace(element){let parent=getParentNode(element);if(!parent||!parent.tagName)parent={namespaceURI:NAMESPACE,tagName:`template`};const tagName=stringToLowerCase(element.tagName);const parentTagName=stringToLowerCase(parent.tagName);if(!ALLOWED_NAMESPACES[element.namespaceURI])return false;if(element.namespaceURI===SVG_NAMESPACE)return _checkSvgNamespace(tagName,parent,parentTagName);if(element.namespaceURI===MATHML_NAMESPACE)return _checkMathMlNamespace(tagName,parent,parentTagName);if(element.namespaceURI===HTML_NAMESPACE)return _checkHtmlNamespace(tagName,parent,parentTagName);if(PARSER_MEDIA_TYPE===`application/xhtml+xml`&&ALLOWED_NAMESPACES[element.namespaceURI])return true;return false};const _forceRemove=function _forceRemove(node){arrayPush(DOMPurify.removed,{element:node});try{getParentNode(node).removeChild(node)}catch(_){remove(node);if(!getParentNode(node))throw typeErrorCreate(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}};const _stripAttributeNode=function _stripAttributeNode(element,attribute,name){try{removeAttributeNode(element,attribute)}catch(_){try{element.removeAttribute(name)}catch(_){}}};const _neutralizeRoot=function _neutralizeRoot(root){_neutralizeSubtree(root);const childNodes=getChildNodes(root);if(childNodes){const snapshot=[];arrayForEach(childNodes,child=>{arrayPush(snapshot,child)});arrayForEach(snapshot,child=>{try{remove(child)}catch(_){}})}const attributes=getAttributes(root);if(attributes)for(let i=attributes.length-1;i>=0;--i){const attribute=attributes[i];const name=attribute&&attribute.name;if(typeof name===`string`)_stripAttributeNode(root,attribute,name)}};const _removeAttribute=function _removeAttribute(name,element,attr){if(!attr)try{attr=element.getAttributeNode(name)}catch(_){attr=null}arrayPush(DOMPurify.removed,{attribute:attr||null,from:element});try{if(attr)removeAttributeNode(element,attr);else element.removeAttribute(name)}catch(_){try{element.removeAttribute(name)}catch(_){}}if(name===`is`){if(RETURN_DOM||RETURN_DOM_FRAGMENT)try{_forceRemove(element)}catch(_){}else try{element.setAttribute(name,``)}catch(_){}}};const _stripDisallowedAttributes=function _stripDisallowedAttributes(element){const attributes=getAttributes(element);if(!attributes)return;for(let i=attributes.length-1;i>=0;--i){const attribute=attributes[i];const name=attribute&&attribute.name;if(typeof name!==`string`||ALLOWED_ATTR[transformCaseFunc(name)])continue;_stripAttributeNode(element,attribute,name)}};const _neutralizeSubtree=function _neutralizeSubtree(root){const stack=[root];while(stack.length>0){const node=stack.pop();if(_readNodeType(node)===NODE_TYPE.element)_stripDisallowedAttributes(node);const childNodes=getChildNodes(node);if(childNodes)for(let i=childNodes.length-1;i>=0;--i)stack.push(childNodes[i])}};const _isPatchLinkageAttribute=function _isPatchLinkageAttribute(lcName,lcTag){if(!SAFE_FOR_XML)return false;if(lcName===`patchsrc`)return true;return lcName===`for`&&lcTag!==`label`&&lcTag!==`output`};const _neutralizePatchLinkage=function _neutralizePatchLinkage(root){if(!SAFE_FOR_XML)return;const stack=[root];while(stack.length>0){const node=stack.pop();const nodeType=_readNodeType(node);if(nodeType===NODE_TYPE.processingInstruction||nodeType===NODE_TYPE.comment&&regExpTest(COMMENT_MARKUP_PROBE,node.data)){try{remove(node)}catch(_){}continue}if(nodeType===NODE_TYPE.element){const element=node;const lcTag=transformCaseFunc(_readNodeName(node));try{if(element.hasAttribute&&element.hasAttribute(`patchsrc`))element.removeAttribute(`patchsrc`);if(element.hasAttribute&&element.hasAttribute(`for`)&&_isPatchLinkageAttribute(`for`,lcTag))element.removeAttribute(`for`)}catch(_){}}const childNodes=getChildNodes(node);if(childNodes)for(let i=childNodes.length-1;i>=0;--i)stack.push(childNodes[i])}};const _initDocument=function _initDocument(dirty){let doc=null;let leadingWhitespace=null;if(FORCE_BODY)dirty=`<remove></remove>`+dirty;else{const matches=stringMatch(dirty,/^[\r\n\t ]+/);leadingWhitespace=matches&&matches[0]}if(PARSER_MEDIA_TYPE===`application/xhtml+xml`&&NAMESPACE===HTML_NAMESPACE)dirty=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+dirty+`</body></html>`;const dirtyPayload=trustedTypesPolicy?_createTrustedHTML(dirty):dirty;if(NAMESPACE===HTML_NAMESPACE)try{doc=new DOMParser().parseFromString(dirtyPayload,PARSER_MEDIA_TYPE)}catch(_){}if(!doc||!doc.documentElement){doc=implementation.createDocument(NAMESPACE,`template`,null);try{doc.documentElement.innerHTML=IS_EMPTY_INPUT?emptyHTML:dirtyPayload}catch(_){}}const body=doc.body||doc.documentElement;if(dirty&&leadingWhitespace)body.insertBefore(document.createTextNode(leadingWhitespace),body.childNodes[0]||null);if(NAMESPACE===HTML_NAMESPACE)return getElementsByTagName.call(doc,WHOLE_DOCUMENT?`html`:`body`)[0];return WHOLE_DOCUMENT?doc.documentElement:body};const _createNodeIterator=function _createNodeIterator(root){const doc=getOwnerDocument?getOwnerDocument(root):root.ownerDocument;return createNodeIterator.call(doc||root,root,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_COMMENT|NodeFilter.SHOW_TEXT|NodeFilter.SHOW_PROCESSING_INSTRUCTION|NodeFilter.SHOW_CDATA_SECTION,null)};const _stripTemplateExpressions=function _stripTemplateExpressions(value){value=stringReplace(value,MUSTACHE_EXPR$1,` `);value=stringReplace(value,ERB_EXPR$1,` `);value=stringReplace(value,TMPLIT_EXPR$1,` `);return value};const _scrubTemplateExpressions2=function _scrubTemplateExpressions(node){var _node$querySelectorAl;node.normalize();const doc=getOwnerDocument?getOwnerDocument(node):node.ownerDocument;const walker=createNodeIterator.call(doc||node,node,NodeFilter.SHOW_TEXT|NodeFilter.SHOW_COMMENT|NodeFilter.SHOW_CDATA_SECTION|NodeFilter.SHOW_PROCESSING_INSTRUCTION,null);let currentNode=walker.nextNode();while(currentNode){currentNode.data=_stripTemplateExpressions(currentNode.data);currentNode=walker.nextNode()}const templates=(_node$querySelectorAl=node.querySelectorAll)===null||_node$querySelectorAl===void 0?void 0:_node$querySelectorAl.call(node,`template`);if(templates)arrayForEach(templates,tmpl=>{if(_isDocumentFragment(tmpl.content))_scrubTemplateExpressions2(tmpl.content)})};const _isClobbered=function _isClobbered(element){const realTagName=getNodeName?getNodeName(element):null;if(typeof realTagName!==`string`)return false;if(transformCaseFunc(realTagName)!==`form`)return false;return typeof element.nodeName!==`string`||typeof element.textContent!==`string`||typeof element.removeChild!==`function`||element.attributes!==getAttributes(element)||typeof element.removeAttribute!==`function`||typeof element.removeAttributeNode!==`function`||typeof element.getAttributeNode!==`function`||typeof element.setAttribute!==`function`||typeof element.namespaceURI!==`string`||typeof element.insertBefore!==`function`||typeof element.hasChildNodes!==`function`||element.nodeType!==getNodeType(element)||element.childNodes!==getChildNodes(element)};const _isDocumentFragment=function _isDocumentFragment(value){if(!getNodeType||typeof value!==`object`||value===null)return false;try{return getNodeType(value)===NODE_TYPE.documentFragment}catch(_){return false}};const _isNode=function _isNode(value){if(!getNodeType||typeof value!==`object`||value===null)return false;try{return typeof getNodeType(value)===`number`}catch(_){return false}};function _executeHooks(hooks,currentNode,data){if(hooks.length===0)return;arrayForEach(hooks,hook=>{hook.call(DOMPurify,currentNode,data,CONFIG)})}const _isUnsafeNode=function _isUnsafeNode(currentNode,tagName){if(SAFE_FOR_XML&&currentNode.hasChildNodes()&&!_isNode(currentNode.firstElementChild)&&regExpTest(ELEMENT_MARKUP_PROBE,currentNode.textContent)&&regExpTest(ELEMENT_MARKUP_PROBE,currentNode.innerHTML))return true;if(SAFE_FOR_XML&&currentNode.namespaceURI===HTML_NAMESPACE&&LITERAL_TEXT_ELEMENTS[tagName]&&(_isNode(currentNode.firstElementChild)||typeof currentNode.textContent===`string`&&regExpTest(LITERAL_TEXT_CLOSE[tagName],currentNode.textContent)))return true;if(currentNode.nodeType===NODE_TYPE.processingInstruction)return true;if(SAFE_FOR_XML&&currentNode.nodeType===NODE_TYPE.comment&&regExpTest(COMMENT_MARKUP_PROBE,currentNode.data))return true;return false};const _matchesNameCheck=function _matchesNameCheck(check,name){if(check instanceof RegExp)return regExpTest(check,name);if(check instanceof Function){for(var _len=arguments.length,args=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)args[_key-2]=arguments[_key];return Boolean(check(name,...args))}return false};const _sanitizeDisallowedNode=function _sanitizeDisallowedNode(currentNode,tagName,root){if(!FORBID_TAGS[tagName]&&_isBasicCustomElement(tagName)&&_matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck,tagName))return false;if(KEEP_CONTENT&&!FORBID_CONTENTS[tagName]){const parentNode=getParentNode(currentNode);const childNodes=getChildNodes(currentNode);if(childNodes&&parentNode){const childCount=childNodes.length;for(let i=childCount-1;i>=0;--i){const hoisted=currentNode===root?cloneNode(childNodes[i],true):childNodes[i];parentNode.insertBefore(hoisted,getNextSibling(currentNode))}}}_forceRemove(currentNode);return true};const _forkSharedAllowlist=function _forkSharedAllowlist(hookList,set,defaultSet,setConfigSet){if(hookList.length===0)return set;return set===defaultSet||set===setConfigSet?clone(set):set};const _handleHookDetachedNode=function _handleHookDetachedNode(currentNode,root){if(currentNode===root||getParentNode(currentNode)!==null)return false;if(IN_PLACE)_neutralizeSubtree(currentNode);return true};const _sanitizeElements=function _sanitizeElements(currentNode,root){_executeHooks(hooks.beforeSanitizeElements,currentNode,null);if(_handleHookDetachedNode(currentNode,root))return true;if(_isClobbered(currentNode)){_forceRemove(currentNode);return true}const tagName=transformCaseFunc(_readNodeName(currentNode));ALLOWED_TAGS=_forkSharedAllowlist(hooks.uponSanitizeElement,ALLOWED_TAGS,DEFAULT_ALLOWED_TAGS,SET_CONFIG_ALLOWED_TAGS);_executeHooks(hooks.uponSanitizeElement,currentNode,{tagName,allowedTags:ALLOWED_TAGS});if(_handleHookDetachedNode(currentNode,root))return true;if(_isUnsafeNode(currentNode,tagName)){_forceRemove(currentNode);return true}if(FORBID_TAGS[tagName]||!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function&&EXTRA_ELEMENT_HANDLING.tagCheck(tagName))&&!ALLOWED_TAGS[tagName]){const removed=_sanitizeDisallowedNode(currentNode,tagName,root);if(removed===false){_executeHooks(hooks.afterSanitizeElements,currentNode,null);if(_handleHookDetachedNode(currentNode,root))return true}return removed}if(_readNodeType(currentNode)===NODE_TYPE.element&&!_checkValidNamespace(currentNode)){_forceRemove(currentNode);return true}if((tagName===`noscript`||tagName===`noembed`||tagName===`noframes`)&&regExpTest(FALLBACK_TAG_CLOSE,currentNode.innerHTML)){_forceRemove(currentNode);return true}if(SAFE_FOR_TEMPLATES&&currentNode.nodeType===NODE_TYPE.text){const content=_stripTemplateExpressions(currentNode.textContent);if(currentNode.textContent!==content){arrayPush(DOMPurify.removed,{element:currentNode.cloneNode()});currentNode.textContent=content}}_executeHooks(hooks.afterSanitizeElements,currentNode,null);return _handleHookDetachedNode(currentNode,root)};const _isValidAttribute=function _isValidAttribute(lcTag,lcName,value){if(FORBID_ATTR[lcName])return false;if(_isPatchLinkageAttribute(lcName,lcTag))return false;if(SANITIZE_DOM&&(lcName===`id`||lcName===`name`)&&(value in document||value in formElement))return false;const nameIsPermitted=ALLOWED_ATTR[lcName]||EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function&&EXTRA_ELEMENT_HANDLING.attributeCheck(lcName,lcTag);if(ALLOW_DATA_ATTR&&regExpTest(DATA_ATTR$1,lcName))return true;if(ALLOW_ARIA_ATTR&&regExpTest(ARIA_ATTR$1,lcName))return true;if(!nameIsPermitted)return _isBasicCustomElement(lcTag)&&_matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck,lcTag)&&_matchesNameCheck(CUSTOM_ELEMENT_HANDLING.attributeNameCheck,lcName,lcTag)||lcName===`is`&&CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&_matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck,value);if(URI_SAFE_ATTRIBUTES[lcName])return true;if(regExpTest(IS_ALLOWED_URI$1,stringReplace(value,ATTR_WHITESPACE$1,``)))return true;if((lcName===`src`||lcName===`xlink:href`||lcName===`href`)&&lcTag!==`script`&&stringIndexOf(value,`data:`)===0&&DATA_URI_TAGS[lcTag])return true;if(ALLOW_UNKNOWN_PROTOCOLS&&!regExpTest(IS_SCRIPT_OR_DATA$1,stringReplace(value,ATTR_WHITESPACE$1,``)))return true;return!value};const RESERVED_CUSTOM_ELEMENT_NAMES=addToSet({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]);const _isBasicCustomElement=function _isBasicCustomElement(tagName){return!RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)]&&regExpTest(CUSTOM_ELEMENT$1,tagName)};const _applyTrustedTypesToAttribute=function _applyTrustedTypesToAttribute(lcTag,lcName,namespaceURI,value){if(trustedTypesPolicy&&typeof trustedTypes===`object`&&typeof trustedTypes.getAttributeType===`function`&&!namespaceURI)switch(trustedTypes.getAttributeType(lcTag,lcName)){case`TrustedHTML`:return _createTrustedHTML(value);case`TrustedScriptURL`:return _createTrustedScriptURL(value)}return value};const _setAttributeValue=function _setAttributeValue(currentNode,name,namespaceURI,value){try{if(namespaceURI)currentNode.setAttributeNS(namespaceURI,name,value);else currentNode.setAttribute(name,value);if(_isClobbered(currentNode)){_forceRemove(currentNode);return false}return true}catch(_){_removeAttribute(name,currentNode);return false}};const _sanitizeAttributes=function _sanitizeAttributes(currentNode,root){_executeHooks(hooks.beforeSanitizeAttributes,currentNode,null);if(_handleHookDetachedNode(currentNode,root))return;const attributes=currentNode.attributes;if(!attributes||_isClobbered(currentNode))return;ALLOWED_ATTR=_forkSharedAllowlist(hooks.uponSanitizeAttribute,ALLOWED_ATTR,DEFAULT_ALLOWED_ATTR,SET_CONFIG_ALLOWED_ATTR);const hookEvent={attrName:``,attrValue:``,keepAttr:true,allowedAttributes:ALLOWED_ATTR,forceKeepAttr:void 0};let l=attributes.length;const lcTag=transformCaseFunc(currentNode.nodeName);while(l--){const attr=attributes[l];const name=attr.name,namespaceURI=attr.namespaceURI,attrValue=attr.value;const lcName=transformCaseFunc(name);const initValue=attrValue;let value=name===`value`?initValue:stringTrim(initValue);let recreatedNamedProp=false;hookEvent.attrName=lcName;hookEvent.attrValue=value;hookEvent.keepAttr=true;hookEvent.forceKeepAttr=void 0;_executeHooks(hooks.uponSanitizeAttribute,currentNode,hookEvent);value=hookEvent.attrValue;if(SANITIZE_NAMED_PROPS&&(lcName===`id`||lcName===`name`)&&stringIndexOf(value,SANITIZE_NAMED_PROPS_PREFIX)!==0){_removeAttribute(name,currentNode,attr);value=SANITIZE_NAMED_PROPS_PREFIX+value;recreatedNamedProp=true}if(SAFE_FOR_XML&&regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,value)){_removeAttribute(name,currentNode,attr);continue}if(lcName===`attributename`&&stringMatch(value,`href`)){_removeAttribute(name,currentNode,attr);continue}if(hookEvent.forceKeepAttr)continue;if(!hookEvent.keepAttr){_removeAttribute(name,currentNode,attr);continue}if(!ALLOW_SELF_CLOSE_IN_ATTR&&regExpTest(SELF_CLOSING_TAG,value)){_removeAttribute(name,currentNode,attr);continue}if(SAFE_FOR_TEMPLATES)value=_stripTemplateExpressions(value);if(!_isValidAttribute(lcTag,lcName,value)){_removeAttribute(name,currentNode,attr);continue}value=_applyTrustedTypesToAttribute(lcTag,lcName,namespaceURI,value);if(value!==initValue){if(_setAttributeValue(currentNode,name,namespaceURI,value)&&recreatedNamedProp)arrayPop(DOMPurify.removed)}}_executeHooks(hooks.afterSanitizeAttributes,currentNode,null);_handleHookDetachedNode(currentNode,root)};const _sanitizeShadowDOM2=function _sanitizeShadowDOM(fragment){let shadowNode=null;const shadowIterator=_createNodeIterator(fragment);_executeHooks(hooks.beforeSanitizeShadowDOM,fragment,null);while(shadowNode=shadowIterator.nextNode()){_executeHooks(hooks.uponSanitizeShadowNode,shadowNode,null);_sanitizeElements(shadowNode,fragment);_sanitizeAttributes(shadowNode,fragment);if(_isDocumentFragment(shadowNode.content))_sanitizeShadowDOM2(shadowNode.content);if(_readNodeType(shadowNode)===NODE_TYPE.element){const innerSr=getShadowRoot(shadowNode);if(_isDocumentFragment(innerSr)){_sanitizeAttachedShadowRoots(innerSr);_sanitizeShadowDOM2(innerSr)}}}_executeHooks(hooks.afterSanitizeShadowDOM,fragment,null)};const _sanitizeAttachedShadowRoots=function _sanitizeAttachedShadowRoots(root){const stack=[{node:root,shadow:null}];while(stack.length>0){const item=stack.pop();if(item.shadow){_sanitizeShadowDOM2(item.shadow);continue}const node=item.node;const isElement=_readNodeType(node)===NODE_TYPE.element;const childNodes=getChildNodes(node);if(childNodes)for(let i=childNodes.length-1;i>=0;--i)stack.push({node:childNodes[i],shadow:null});if(isElement){const rootName=getNodeName?getNodeName(node):null;if(typeof rootName===`string`&&transformCaseFunc(rootName)===`template`){const content=node.content;if(_isDocumentFragment(content))stack.push({node:content,shadow:null})}}if(isElement){const sr=getShadowRoot(node);if(_isDocumentFragment(sr))stack.push({node:null,shadow:sr},{node:sr,shadow:null})}}};DOMPurify.sanitize=function(dirty){let cfg=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};let body=null;let importedNode=null;let currentNode=null;let returnNode=null;IS_EMPTY_INPUT=!dirty;if(IS_EMPTY_INPUT)dirty=`<!-->`;if(typeof dirty!==`string`&&!_isNode(dirty)){dirty=stringifyValue(dirty);if(typeof dirty!==`string`)throw typeErrorCreate(`dirty is not a string, aborting`)}if(!DOMPurify.isSupported)return dirty;if(SET_CONFIG){ALLOWED_TAGS=SET_CONFIG_ALLOWED_TAGS;ALLOWED_ATTR=SET_CONFIG_ALLOWED_ATTR}else _parseConfig(cfg);if(hooks.uponSanitizeElement.length>0||hooks.uponSanitizeAttribute.length>0)ALLOWED_TAGS=clone(ALLOWED_TAGS);if(hooks.uponSanitizeAttribute.length>0)ALLOWED_ATTR=clone(ALLOWED_ATTR);DOMPurify.removed=[];const inPlace=IN_PLACE&&typeof dirty!==`string`&&_isNode(dirty);if(inPlace){_neutralizePatchLinkage(dirty);const nn=_readNodeName(dirty);if(typeof nn===`string`){const tagName=transformCaseFunc(nn);if(!ALLOWED_TAGS[tagName]||FORBID_TAGS[tagName]){_neutralizeRoot(dirty);throw typeErrorCreate(`root node is forbidden and cannot be sanitized in-place`)}}if(_isClobbered(dirty)){_neutralizeRoot(dirty);throw typeErrorCreate(`root node is clobbered and cannot be sanitized in-place`)}try{_sanitizeAttachedShadowRoots(dirty)}catch(error){_neutralizeRoot(dirty);throw error}}else if(_isNode(dirty)){body=_initDocument(`<!---->`);importedNode=body.ownerDocument.importNode(dirty,true);if(importedNode.nodeType===NODE_TYPE.element&&importedNode.nodeName===`BODY`)body=importedNode;else if(importedNode.nodeName===`HTML`)body=importedNode;else body.appendChild(importedNode);_sanitizeAttachedShadowRoots(body)}else{if(!RETURN_DOM&&!SAFE_FOR_TEMPLATES&&!WHOLE_DOCUMENT&&dirty.indexOf(`<`)===-1)return trustedTypesPolicy&&RETURN_TRUSTED_TYPE?_createTrustedHTML(dirty):dirty;body=_initDocument(dirty);if(!body)return RETURN_DOM?null:RETURN_TRUSTED_TYPE?emptyHTML:``}if(body&&FORCE_BODY)_forceRemove(body.firstChild);const walkRoot=inPlace?dirty:body;try{const nodeIterator=_createNodeIterator(walkRoot);while(currentNode=nodeIterator.nextNode()){_sanitizeElements(currentNode,walkRoot);_sanitizeAttributes(currentNode,walkRoot);if(_isDocumentFragment(currentNode.content))_sanitizeShadowDOM2(currentNode.content)}}catch(error){if(inPlace){_neutralizeRoot(dirty);arrayForEach(DOMPurify.removed,entry=>{if(entry.element)_neutralizeSubtree(entry.element)})}throw error}if(inPlace){let rootWasRemoved=false;arrayForEach(DOMPurify.removed,entry=>{if(entry.element){if(entry.element===dirty)rootWasRemoved=true;_neutralizeSubtree(entry.element)}});if(rootWasRemoved)throw typeErrorCreate(`a node selected for removal could not be safely returned; refusing to sanitize in place`);if(SAFE_FOR_TEMPLATES)_scrubTemplateExpressions2(dirty);return dirty}if(RETURN_DOM){if(SAFE_FOR_TEMPLATES)_scrubTemplateExpressions2(body);if(RETURN_DOM_FRAGMENT){returnNode=createDocumentFragment.call(body.ownerDocument);while(body.firstChild)returnNode.appendChild(body.firstChild)}else returnNode=body;if(ALLOWED_ATTR.shadowroot||ALLOWED_ATTR.shadowrootmode)returnNode=importNode.call(originalDocument,returnNode,true);return returnNode}let serializedHTML=WHOLE_DOCUMENT?body.outerHTML:body.innerHTML;if(WHOLE_DOCUMENT&&ALLOWED_TAGS[`!doctype`]&&body.ownerDocument&&body.ownerDocument.doctype&&body.ownerDocument.doctype.name&&regExpTest(DOCTYPE_NAME,body.ownerDocument.doctype.name))serializedHTML=`<!DOCTYPE `+body.ownerDocument.doctype.name+`>
138
+ `+serializedHTML;if(SAFE_FOR_TEMPLATES)serializedHTML=_stripTemplateExpressions(serializedHTML);return trustedTypesPolicy&&RETURN_TRUSTED_TYPE?_createTrustedHTML(serializedHTML):serializedHTML};DOMPurify.setConfig=function(){let cfg=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};_parseConfig(cfg);SET_CONFIG=true;SET_CONFIG_ALLOWED_TAGS=ALLOWED_TAGS;SET_CONFIG_ALLOWED_ATTR=ALLOWED_ATTR};DOMPurify.clearConfig=function(){CONFIG=null;SET_CONFIG=false;SET_CONFIG_ALLOWED_TAGS=null;SET_CONFIG_ALLOWED_ATTR=null;trustedTypesPolicy=defaultTrustedTypesPolicy;emptyHTML=``};DOMPurify.isValidAttribute=function(tag,attr,value){if(!CONFIG)_parseConfig({});const lcTag=transformCaseFunc(tag);const lcName=transformCaseFunc(attr);return _isValidAttribute(lcTag,lcName,value)};DOMPurify.addHook=function(entryPoint,hookFunction){if(typeof hookFunction!==`function`)return;if(!objectHasOwnProperty(hooks,entryPoint))return;arrayPush(hooks[entryPoint],hookFunction)};DOMPurify.removeHook=function(entryPoint,hookFunction){if(!objectHasOwnProperty(hooks,entryPoint))return;if(hookFunction!==void 0){const index=arrayLastIndexOf(hooks[entryPoint],hookFunction);return index===-1?void 0:arraySplice(hooks[entryPoint],index,1)[0]}return arrayPop(hooks[entryPoint])};DOMPurify.removeHooks=function(entryPoint){if(!objectHasOwnProperty(hooks,entryPoint))return;hooks[entryPoint]=[]};DOMPurify.removeAllHooks=function(){hooks=_createHooksMap()};return DOMPurify}var purify_default=createDOMPurify();var _hoisted_1$14=[`innerHTML`];var _sfc_main$29={__name:`GithubMarkdown`,props:{html:{type:String,default:``},text:{type:String,default:``}},setup(__props){const props=__props;const sanitizedHtml=computed(()=>purify_default.sanitize(props.html,{ALLOWED_TAGS:[`a`,`b`,`blockquote`,`br`,`code`,`del`,`details`,`div`,`em`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`hr`,`img`,`li`,`ol`,`p`,`pre`,`s`,`span`,`strong`,`sub`,`summary`,`sup`,`table`,`tbody`,`td`,`th`,`thead`,`tr`,`ul`],ALLOWED_ATTR:[`href`,`src`,`alt`,`title`,`width`,`height`,`colspan`,`rowspan`,`start`],ALLOW_DATA_ATTR:false,ALLOW_ARIA_ATTR:false}));const blocks=computed(()=>parseLongTextReviewBlocks(props.text));return(_ctx,_cache)=>{return __props.html?(openBlock(),createElementBlock(`div`,{key:0,class:`github-markdown`,innerHTML:sanitizedHtml.value},null,8,_hoisted_1$14)):(openBlock(),createBlock(unref(LongTextPreviewBlocks_default),{key:1,blocks:blocks.value},null,8,[`blocks`]))}}};var GithubMarkdown_default=_plugin_vue_export_helper_default(_sfc_main$29,[[`__scopeId`,`data-v-3636cce2`]]);var _sfc_main$28={__name:`Vibe64LearningMarkdown`,props:{text:{type:String,default:``}},setup(__props){const props=__props;const renderer=new F({async:false,gfm:true,walkTokens(token){if(token.type!==`image`)return;token.type=`text`;token.raw=token.text=token.text||``;delete token.tokens}});const html=computed(()=>props.text?renderer.parse(props.text):``);return(_ctx,_cache)=>{return openBlock(),createBlock(GithubMarkdown_default,{class:`vibe64-learning-markdown`,html:html.value,onClick:unref(openLessonLink)},null,8,[`html`,`onClick`])}}};var Vibe64LearningMarkdown_default=_plugin_vue_export_helper_default(_sfc_main$28,[[`__scopeId`,`data-v-47420e75`]]);var _hoisted_1$13=[`aria-busy`];var _hoisted_2$10={class:`vibe64-teacher-notes__actions`};var _hoisted_3$9={key:1,class:`vibe64-teacher-notes__empty`,"data-test":`teacher-notes-empty`};var _hoisted_4$7={key:2,class:`vibe64-teacher-notes__updated`};var _hoisted_5$7={class:`vibe64-teacher-notes__actions`};var _sfc_main$27={__name:`Vibe64LearningTeacherNotes`,props:{learning:{type:Object,required:true}},setup(__props){const props=__props;const notes=computed(()=>props.learning.notes.value);const status=computed(()=>props.learning.notesState);const editing=ref(false);const confirmingClear=ref(false);const draft=ref(``);const updated=computed(()=>{const value=notes.value;if(!value?.updatedAt)return``;const when=new Date(value.updatedAt);const date=Number.isNaN(when.getTime())?``:when.toLocaleString();return`${value.updatedBy===`colleague`?`Updated by Colleague`:`Updated by you`}${date?`, ${date}`:``}`});onMounted(()=>{if(!props.learning.notes.value)props.learning.readNotes()});function edit(){draft.value=notes.value?.text||``;confirmingClear.value=false;editing.value=true}async function save(){if(await props.learning.saveNotes(draft.value))editing.value=false}async function clear(){if(await props.learning.clearNotes()){confirmingClear.value=false;editing.value=false}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,{class:`vibe64-teacher-notes`,"aria-labelledby":`vibe64-teacher-notes-title`,"aria-busy":status.value.loading||status.value.saving,"data-test":`teacher-notes`},[_cache[9]||(_cache[9]=createBaseVNode(`h2`,{id:`vibe64-teacher-notes-title`,class:`vibe64-teacher-notes__title`},`What my teacher knows about me`,-1)),_cache[10]||(_cache[10]=createBaseVNode(`p`,{class:`vibe64-teacher-notes__intro`},` Colleague keeps a short private summary of how you learn, so it can teach you better. Only you can see it, and it never changes your lesson results. `,-1)),status.value.error?(openBlock(),createBlock(VAlert,{key:0,type:`error`,variant:`tonal`,density:`compact`,class:`vibe64-teacher-notes__error`,"data-test":`teacher-notes-error`},{default:withCtx(()=>[createTextVNode(toDisplayString(status.value.error),1)]),_:1})):createCommentVNode(``,true),editing.value?(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VTextarea,{modelValue:draft.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>draft.value=$event),label:`Your notes (Markdown)`,variant:`outlined`,rows:`8`,"auto-grow":``,counter:unref(VIBE64_LEARNING_NOTES_MAX),maxlength:unref(VIBE64_LEARNING_NOTES_MAX),disabled:status.value.saving,"data-test":`teacher-notes-draft`},null,8,[`modelValue`,`counter`,`maxlength`,`disabled`]),createBaseVNode(`div`,_hoisted_2$10,[createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`48`,loading:status.value.saving,disabled:status.value.saving||!draft.value.trim(),"data-test":`teacher-notes-save`,onClick:save},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Save`,-1)])]),_:1},8,[`loading`,`disabled`]),createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,disabled:status.value.saving,"data-test":`teacher-notes-cancel`,onClick:_cache[1]||(_cache[1]=$event=>editing.value=false)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`])])],64)):(openBlock(),createElementBlock(Fragment,{key:2},[notes.value?.text?(openBlock(),createBlock(Vibe64LearningMarkdown_default,{key:0,class:`vibe64-teacher-notes__text`,text:notes.value.text},null,8,[`text`])):!status.value.loading?(openBlock(),createElementBlock(`p`,_hoisted_3$9,` Nothing yet. Colleague adds notes as it teaches you. `)):createCommentVNode(``,true),notes.value?.text&&updated.value?(openBlock(),createElementBlock(`p`,_hoisted_4$7,toDisplayString(updated.value),1)):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_5$7,[createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`48`,disabled:status.value.loading||status.value.saving,"data-test":`teacher-notes-edit`,onClick:edit},{default:withCtx(()=>[createTextVNode(toDisplayString(notes.value?.text?`Edit`:`Write notes`),1)]),_:1},8,[`disabled`]),notes.value?.text?(openBlock(),createElementBlock(Fragment,{key:0},[!confirmingClear.value?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,rounded:`pill`,"min-height":`48`,disabled:status.value.saving,"data-test":`teacher-notes-clear`,onClick:_cache[2]||(_cache[2]=$event=>confirmingClear.value=true)},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Clear`,-1)])]),_:1},8,[`disabled`])):(openBlock(),createElementBlock(Fragment,{key:1},[createVNode(VBtn,{color:`error`,variant:`flat`,rounded:`pill`,"min-height":`48`,loading:status.value.saving,disabled:status.value.saving,"data-test":`teacher-notes-clear-confirm`,onClick:clear},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Clear all notes`,-1)])]),_:1},8,[`loading`,`disabled`]),createVNode(VBtn,{variant:`text`,rounded:`pill`,"min-height":`48`,disabled:status.value.saving,"data-test":`teacher-notes-clear-cancel`,onClick:_cache[3]||(_cache[3]=$event=>confirmingClear.value=false)},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Keep them`,-1)])]),_:1},8,[`disabled`])],64))],64)):createCommentVNode(``,true)])],64))],8,_hoisted_1$13)}}};var Vibe64LearningTeacherNotes_default=_plugin_vue_export_helper_default(_sfc_main$27,[[`__scopeId`,`data-v-6857364d`]]);var _hoisted_1$12={class:`vibe64-learning__bar`};var _hoisted_2$9={class:`vibe64-learning__tabs`,"aria-label":`Courses`};var _hoisted_3$8=[`aria-current`,`data-test`,`onClick`];var _hoisted_4$6={class:`vibe64-learning__content`};var _hoisted_5$6={key:0,class:`vibe64-learning__scroll`};var _hoisted_6$4={key:1,class:`vibe64-learning__scroll`};var LEARN_MODE_CLASS=`vibe64-learn-mode`;var _sfc_main$26={__name:`Vibe64LearningOverlay`,props:{authorPreview:{type:[Boolean,Object],default:false}},setup(__props){const props=__props;const learning=useVibe64Learning();const viewer=inject$1(VIBE64_ASSISTANT_VIEWER_KEY,null);const actorKey=computed(()=>String(toValue(viewer)?.actorKey||``));watch(actorKey,value=>learning?.setViewer(value),{immediate:true});onBeforeUnmount(()=>learning?.setViewer(``));watch(()=>Boolean(learning?.learnMode),value=>globalThis.document?.body?.classList.toggle(LEARN_MODE_CLASS,value),{immediate:true});onBeforeUnmount(()=>globalThis.document?.body?.classList.remove(LEARN_MODE_CLASS));const route=useRoute();const router=useRouter$1();watch(()=>[learning?.mode,route?.fullPath,learning?.state.modeBusy],(_value,previous)=>{if(!route||!router||!learning||learning.state.modeBusy)return;const target=modeRedirect({mode:learning.mode,slug:projectSlugFromRoute(route),path:route.path});if(!target||target.path===route.path)return;const modeChanged=Boolean(previous?.[0])&&previous[0]!==learning.mode;if(target.note&&!modeChanged)learning.showNotice(target.note);router.replace(learning.state.finished&&learning.mode?.on?withLesson(target.path):target.path)},{immediate:true});watch(()=>learning?.mode?.on,(_on,wasOn)=>{if(typeof wasOn===`boolean`)learning.clearNotice()});function noticeShown(value){if(!value)learning.clearNotice()}const open=computed(()=>Boolean(learning?.state.open));const built=ref(false);watch(open,value=>{if(value)built.value=true},{immediate:true});watch(actorKey,()=>{built.value=open.value});const layer=ref(null);watch(open,async value=>{if(!value)return;await nextTick$1();const element=layer.value;if(typeof element?.focus===`function`&&!element.contains?.(globalThis.document?.activeElement))element.focus({preventScroll:true})});const orientationRequested=computed(()=>Boolean(learning?.orientationRequested));const courses=useVibe64LearningCourses({authorPreview:computed(()=>toValue(props.authorPreview)===true),active:computed(()=>open.value||orientationRequested.value)});const surface=computed(()=>learning?.state.surface||`courses`);const tabs=Object.freeze([{id:`courses`,label:`Courses`},{id:`progress`,label:`In progress`},{id:`archived`,label:`Archived`}]);useRealtimeEvent({event:VIBE64_TRAINING_LEARNER_CHANGED_EVENT,enabled:computed(()=>Boolean(actorKey.value)),onEvent:({payload}={})=>{learning?.learnerChanged(payload||{});if(open.value&&payload?.reason!==`notes`)courses.learningResource.reload()}});let orientationRun=false;watch(orientationRequested,value=>{if(value)takeOrientation()},{immediate:true});async function takeOrientation(){if(orientationRun)return;orientationRun=true;try{await courses.refresh();const selection=orientationSelection(courses.coursesResource.data.value,courses.learningResource.data.value);if(selection)await learning.startLesson(selection,courses.startLesson);else await learning.show({surface:`courses`})}catch(cause){learning.showNotice(String(cause?.message||`The tour did not start. Try again from Courses.`))}finally{orientationRun=false;if(!learning.confirmArchive)learning.orientationAnswered()}}const confirm=computed(()=>learning?.confirmArchive||null);async function archiveAndStart(){try{await learning.confirmArchiveAndStart()}catch(cause){learning.showNotice(String(cause?.message||`The lesson did not start. Try again from Courses.`))}finally{learning.orientationAnswered()}}function keepCurrent(){learning.cancelArchive();learning.orientationAnswered()}const continueOffered=computed(()=>Boolean(learning?.mode?.on&&learning.lessonAttemptId&&!learning.state.finished));function continueLesson(){learning.openLesson().catch(cause=>learning.showNotice(String(cause?.message||`The lesson could not open. Try again.`)))}function keydown(event){if(event.key===`Escape`&&!event.defaultPrevented&&!confirm.value){event.stopPropagation();learning.closeCourses()}}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(unref(TrainingGuideOverlay_default)),unref(learning)&&actorKey.value&&built.value?withDirectives((openBlock(),createElementBlock(`div`,{key:0,class:`vibe64-learning`,role:`dialog`,"aria-modal":`true`,"aria-label":`Courses`,"data-pane-swipe-ignore":``,tabindex:`-1`,ref_key:`layer`,ref:layer,onKeydown:keydown},[createBaseVNode(`header`,_hoisted_1$12,[createBaseVNode(`nav`,_hoisted_2$9,[(openBlock(true),createElementBlock(Fragment,null,renderList(unref(tabs),tab=>{return openBlock(),createElementBlock(`button`,{key:tab.id,type:`button`,class:`vibe64-learning__tab`,"aria-current":surface.value===tab.id?`page`:void 0,"data-test":`learning-${tab.id}-tab`,onClick:$event=>unref(learning).show({surface:tab.id})},toDisplayString(tab.label),9,_hoisted_3$8)}),128))]),continueOffered.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,rounded:`pill`,"min-height":`40`,"append-icon":unref(mdiArrowRight),class:`vibe64-learning__exit`,"data-test":`learning-continue-lesson`,onClick:continueLesson},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Continue lesson `,-1)])]),_:1},8,[`append-icon`])):createCommentVNode(``,true),createVNode(VBtn,{variant:`tonal`,rounded:`pill`,"min-height":`40`,"prepend-icon":unref(mdiArrowLeft),class:`vibe64-learning__exit`,title:`Close Courses (your place is kept)`,"data-test":`learning-back`,onClick:_cache[0]||(_cache[0]=$event=>unref(learning).closeCourses())},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Back `,-1)])]),_:1},8,[`prepend-icon`])]),createBaseVNode(`div`,_hoisted_4$6,[surface.value===`courses`?(openBlock(),createElementBlock(`div`,_hoisted_5$6,[createVNode(Vibe64LearningCourses_default,{learning:unref(courses)},null,8,[`learning`]),createVNode(Vibe64LearningTeacherNotes_default,{learning:unref(learning)},null,8,[`learning`])])):(openBlock(),createElementBlock(`div`,_hoisted_6$4,[createVNode(Vibe64LearningAttempts_default,{learning:unref(learning),archived:surface.value===`archived`},null,8,[`learning`,`archived`])]))])],544)),[[vShow,open.value]]):createCommentVNode(``,true),unref(learning)&&actorKey.value?(openBlock(),createBlock(VDialog,{key:1,"model-value":Boolean(confirm.value),"max-width":`28rem`,style:{"z-index":`2410`},"onUpdate:modelValue":_cache[1]||(_cache[1]=value=>value||keepCurrent())},{default:withCtx(()=>[confirm.value?(openBlock(),createBlock(VCard,{key:0,rounded:`xl`,"data-test":`learning-archive-confirm`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-wrap`},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Archive your lesson in progress?`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[_cache[5]||(_cache[5]=createTextVNode(` You can have one lesson in progress. Starting this one archives `,-1)),createBaseVNode(`strong`,null,toDisplayString(confirm.value.current.lessonTitle||`the lesson in progress`),1),_cache[6]||(_cache[6]=createTextVNode(` with its practice project and conversation; it stays under Archived. `,-1))]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,"min-height":`48`,"data-test":`learning-archive-cancel`,onClick:keepCurrent},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Keep it`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,"min-height":`48`,"data-test":`learning-archive-start`,onClick:archiveAndStart},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Archive and start`,-1)])]),_:1})]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`])):createCommentVNode(``,true),unref(learning)&&actorKey.value?(openBlock(),createBlock(VSnackbar,{key:2,"model-value":Boolean(unref(learning).notice),timeout:8e3,location:`bottom`,"data-test":`learning-mode-notice`,"onUpdate:modelValue":noticeShown},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(learning).notice),1)]),_:1},8,[`model-value`])):createCommentVNode(``,true)],64)}}};var Vibe64LearningOverlay_default=_plugin_vue_export_helper_default(_sfc_main$26,[[`__scopeId`,`data-v-48467613`]]);var _sfc_main$25={__name:`Vibe64LearningRouteHold`,setup(__props){const learning=useVibe64Learning();const viewer=inject$1(VIBE64_ASSISTANT_VIEWER_KEY,null);const route=useRoute();const queryClient=useQueryClient();const held=computed(()=>{const slug=projectSlugFromRoute(route);const actorKey=String(toValue(viewer)?.actorKey||``);if(!learning||!actorKey||!slug)return false;return learning.state.actorKey!==actorKey||!learning.state.modeRead||learning.state.modeBusy===`set`||Boolean(modeRedirect({mode:learning.mode,slug,path:route.path}))});function leaveProject(slug){const queryKey=[`vibe64`,...vibe64ProjectQueryScope(slug)];queryClient.cancelQueries({queryKey}).then(()=>queryClient.removeQueries({queryKey,predicate:query=>query.state.error?.code===VIBE64_LEARNING_MODE_PROJECT_CODE}))}watch(()=>[held.value,projectSlugFromRoute(route)],([isHeld],[wasHeld,shownSlug]=[])=>{if(isHeld&&wasHeld===false&&shownSlug)leaveProject(shownSlug)});return(_ctx,_cache)=>{return!held.value?renderSlot(_ctx.$slots,`default`,{},void 0,void 0,0):createCommentVNode(``,true)}}};var _hoisted_1$11={class:`shell-error-host__banner-stack`};var _hoisted_2$8={class:`d-flex align-center ga-3 flex-wrap`};var _hoisted_3$7={key:0};var BANNER_INLINE_HEIGHT_PROPERTY=`--shell-error-banners-inline-height`;var _sfc_main$24={__name:`ShellErrorHost`,setup(__props){const runtime=useShellWebErrorRuntime();const store=useShellErrorPresentationStore();const snackbarEntries=computed(()=>store.channels.snackbar||[]);const bannerEntries=computed(()=>store.channels.banner||[]);const dialogEntry=computed(()=>store.channels.dialog[0]||null);const displayedSnackbarEntry=ref(null);const layoutRect=readLayoutRect();function readLayoutRect(){try{return useLayout().mainRect}catch{return null}}const bannersElement=ref(null);const bannerPlacement=computed(()=>{const rect=layoutRect?.value||{};const top=Number(rect.top)||0;if(top<=0)return{inline:true,style:void 0};return{inline:false,style:{top:`calc(env(safe-area-inset-top, 0px) + ${top}px)`,left:`${Number(rect.left)||0}px`,right:`${Number(rect.right)||0}px`}}});let bannerResizeObserver=null;function publishInlineBannerHeight(height=0){const rootStyle=globalThis.document?.documentElement?.style;if(!rootStyle)return;if(height>0)rootStyle.setProperty(BANNER_INLINE_HEIGHT_PROPERTY,`${Math.ceil(height)}px`);else rootStyle.removeProperty(BANNER_INLINE_HEIGHT_PROPERTY)}function stopObservingBanners(){bannerResizeObserver?.disconnect();bannerResizeObserver=null;publishInlineBannerHeight(0)}watch([bannersElement,()=>bannerPlacement.value.inline],([element,inline])=>{stopObservingBanners();if(!element||!inline||typeof globalThis.ResizeObserver!==`function`)return;bannerResizeObserver=new globalThis.ResizeObserver(()=>{publishInlineBannerHeight(element.getBoundingClientRect().height)});bannerResizeObserver.observe(element);publishInlineBannerHeight(element.getBoundingClientRect().height)},{flush:`post`});onBeforeUnmount(stopObservingBanners);const snackbarOpen=ref(false);function isSameSnackbarEntry(left=null,right=null){return Boolean(left?.id&&right?.id&&left.id===right.id)}function hasSnackbarEntry(entry=null){if(!entry?.id)return false;return snackbarEntries.value.some(candidate=>isSameSnackbarEntry(candidate,entry))}function openNextSnackbarEntry(){const nextEntry=snackbarEntries.value[0]||null;if(!nextEntry){displayedSnackbarEntry.value=null;snackbarOpen.value=false;return}displayedSnackbarEntry.value=nextEntry;snackbarOpen.value=true}watch(snackbarEntries,entries=>{const currentEntry=displayedSnackbarEntry.value;if(!currentEntry){openNextSnackbarEntry();return}const matchingEntry=entries.find(entry=>isSameSnackbarEntry(entry,currentEntry))||null;if(matchingEntry){displayedSnackbarEntry.value=matchingEntry;return}snackbarOpen.value=false},{immediate:true});function resolveSeverityColor(severity=`error`){const normalized=String(severity||`error`).trim().toLowerCase();if(normalized===`info`)return`info`;if(normalized===`success`)return`success`;if(normalized===`warning`)return`warning`;return`error`}function resolveSeverityIcon(severity=`error`){const normalized=String(severity||`error`).trim().toLowerCase();if(normalized===`info`)return mdiInformationOutline;if(normalized===`success`)return mdiCheckCircleOutline;return mdiAlertOutline}function resolveTimeout(entry){if(!entry)return-1;if(entry.persist)return-1;return 5e3}function dismiss(entry){if(!entry||!entry.channel||!entry.id)return;store.dismiss(entry.channel,entry.id)}function actionsFor(entry){return entry?[entry.action,...entry.additionalActions].filter(Boolean):[]}async function runAction(entry,action){if(!entry||typeof action?.handler!==`function`)return;try{await action.handler(entry)}catch(error){runtime.report({source:`shell-web.error-host.action`,message:`Error action failed.`,cause:error,intent:`blocking`,severity:`error`})}if(action.dismissOnRun!==false)dismiss(entry)}function onSnackbarModelValue(nextValue){if(nextValue===false&&displayedSnackbarEntry.value){snackbarOpen.value=false;dismiss(displayedSnackbarEntry.value)}}function onDialogModelValue(nextValue){if(nextValue===false&&dialogEntry.value&&dialogEntry.value.persist!==true)dismiss(dialogEntry.value)}function onSnackbarAfterLeave(){if(hasSnackbarEntry(displayedSnackbarEntry.value))return;openNextSnackbarEntry()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,{class:normalizeClass([`shell-error-host`,{"shell-error-host--inline-banners":bannerPlacement.value.inline}]),"aria-live":`polite`},[bannerEntries.value.length>0?(openBlock(),createElementBlock(`div`,{key:0,ref_key:`bannersElement`,ref:bannersElement,class:normalizeClass([`shell-error-host__banners`,{"shell-error-host__banners--inline":bannerPlacement.value.inline}]),style:normalizeStyle(bannerPlacement.value.style),"data-testid":`shell-error-host-banners`},[createBaseVNode(`div`,_hoisted_1$11,[(openBlock(true),createElementBlock(Fragment,null,renderList(bannerEntries.value,entry=>{return openBlock(),createBlock(VAlert,{key:entry.id,type:resolveSeverityColor(entry.severity),icon:resolveSeverityIcon(entry.severity),variant:`elevated`,density:`comfortable`,rounded:`lg`,border:`start`,class:`shell-error-host__banner`,closable:``,"onClick:close":$event=>dismiss(entry)},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_2$8,[createBaseVNode(`span`,null,toDisplayString(entry.message),1),createVNode(VSpacer),(openBlock(true),createElementBlock(Fragment,null,renderList(actionsFor(entry),(action,index)=>{return openBlock(),createBlock(VBtn,{key:index,variant:`text`,size:`small`,class:`text-none`,onClick:$event=>runAction(entry,action)},{default:withCtx(()=>[createTextVNode(toDisplayString(action.label),1)]),_:2},1032,[`onClick`])}),128))])]),_:2},1032,[`type`,`icon`,`onClick:close`])}),128))])],6)):createCommentVNode(``,true),createVNode(VSnackbar,{"model-value":snackbarOpen.value,location:`bottom end`,timeout:resolveTimeout(displayedSnackbarEntry.value),vertical:actionsFor(displayedSnackbarEntry.value).length>1,color:displayedSnackbarEntry.value?resolveSeverityColor(displayedSnackbarEntry.value.severity):void 0,"onUpdate:modelValue":onSnackbarModelValue,onAfterLeave:onSnackbarAfterLeave},{actions:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(actionsFor(displayedSnackbarEntry.value),(action,index)=>{return openBlock(),createBlock(VBtn,{key:index,variant:`text`,"min-height":`48`,onClick:$event=>runAction(displayedSnackbarEntry.value,action)},{default:withCtx(()=>[createTextVNode(toDisplayString(action.label),1)]),_:2},1032,[`onClick`])}),128)),displayedSnackbarEntry.value?(openBlock(),createBlock(VBtn,{key:0,variant:`text`,size:`small`,onClick:_cache[0]||(_cache[0]=$event=>dismiss(displayedSnackbarEntry.value))},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Dismiss `,-1)])]),_:1})):createCommentVNode(``,true)]),default:withCtx(()=>[displayedSnackbarEntry.value?(openBlock(),createElementBlock(`span`,_hoisted_3$7,toDisplayString(displayedSnackbarEntry.value.message),1)):createCommentVNode(``,true)]),_:1},8,[`model-value`,`timeout`,`vertical`,`color`]),createVNode(VDialog,{"model-value":Boolean(dialogEntry.value),"max-width":`560`,persistent:Boolean(dialogEntry.value?.persist),"onUpdate:modelValue":onDialogModelValue},{default:withCtx(()=>[dialogEntry.value?(openBlock(),createBlock(VCard,{key:0},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-subtitle-1`},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(`Attention required`,-1)])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createTextVNode(toDisplayString(dialogEntry.value.message),1)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),(openBlock(true),createElementBlock(Fragment,null,renderList(actionsFor(dialogEntry.value),(action,index)=>{return openBlock(),createBlock(VBtn,{key:index,variant:`text`,onClick:$event=>runAction(dialogEntry.value,action)},{default:withCtx(()=>[createTextVNode(toDisplayString(action.label),1)]),_:2},1032,[`onClick`])}),128)),createVNode(VBtn,{color:`primary`,variant:`tonal`,onClick:_cache[1]||(_cache[1]=$event=>dismiss(dialogEntry.value))},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(` Close `,-1)])]),_:1})]),_:1})]),_:1})):createCommentVNode(``,true)]),_:1},8,[`model-value`,`persistent`])],2)}}};var ShellErrorHost_default=_plugin_vue_export_helper_default(_sfc_main$24,[[`__scopeId`,`data-v-9e7d7ed4`]]);function useVibe64InAppLinks(){const router=useRouter$1();function navigateAppLink(event){if(event.defaultPrevented||event.button!==0||event.ctrlKey||event.metaKey||event.shiftKey||event.altKey)return;const anchor=event.target?.closest?.(`a[href]`);if(!anchor||anchor.hasAttribute(`download`)||anchor.relList.contains(`external`))return;const target=anchor.getAttribute(`target`);if(target&&target.toLowerCase()!==`_self`)return;const href=anchor.getAttribute(`href`);if(!href||href.startsWith(`#`))return;let url;try{url=new URL(anchor.href)}catch{return}if(url.origin!==window.location.origin||![`http:`,`https:`].includes(url.protocol)||url.username||url.password)return;const path=`${url.pathname}${url.search}${url.hash}`;const route=router.resolve(path);if(!route.matched.length||route.name===`not-found`)return;event.preventDefault();router.push(path)}onMounted(()=>document.addEventListener(`click`,navigateAppLink));onUnmounted(()=>document.removeEventListener(`click`,navigateAppLink))}var _sfc_main$23={__name:`App`,setup(__props){useVibe64InAppLinks();return(_ctx,_cache)=>{return openBlock(),createBlock(VApp,null,{default:withCtx(()=>[createVNode(_sfc_main$63,{local:``},{default:withCtx(()=>[createVNode(_sfc_main$40,null,{default:withCtx(()=>[createVNode(_sfc_main$25,null,{default:withCtx(()=>[createVNode(unref(RouterView))]),_:1}),createVNode(_sfc_main$42),createVNode(Vibe64LearningOverlay_default)]),_:1}),createVNode(_sfc_main$25,null,{default:withCtx(()=>[createVNode(unref(_sfc_main$64),{"can-configure":``,"actor-key":`local`})]),_:1})]),_:1}),createVNode(unref(ShellErrorHost_default))]),_:1})}}};var title=`Not Found`;var message=`The page you requested does not exist.`;var _sfc_main$22={__name:`NotFound`,setup(__props){return(_ctx,_cache)=>{return openBlock(),createBlock(VContainer,{class:`fill-height d-flex align-center justify-center`},{default:withCtx(()=>[createVNode(VCard,{class:`pa-6 text-center`,"max-width":`560`,rounded:`lg`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`text-h4`},{default:withCtx(()=>[createTextVNode(toDisplayString(title))]),_:1}),createVNode(VCardText,{class:`text-medium-emphasis`},{default:withCtx(()=>[createTextVNode(toDisplayString(message))]),_:1})]),_:1})]),_:1})}}};var name={type:`string`,required:true,minLength:1,maxLength:200};var secretReference={...name,pattern:`^(?!https?:)[a-z][a-z0-9-]*:[^\\s]+$`};var authenticationSchema=createSchema({method:{...name,enum:[`oauth2`,`api-key`,`service-account`,`none`]},registrationRef:{...name,required:false},secretRef:{...secretReference,required:false},refreshTokenRef:{...secretReference,required:false}});var assistantPermission={type:`string`,enum:[`ask`,`always`,`never`]};var assistantPolicySchema=createSchema({enabled:{type:`boolean`,strictBoolean:true,defaultTo:true},defaultPermission:{...assistantPermission,defaultTo:`ask`},actions:{type:`object`,values:assistantPermission,defaultTo:{}}});var integrationSchema=createSchema({provider:name,displayName:{...name,required:false},accountMode:{...name,enum:[`shared`,`per-user`,`assistant`]},scopes:{type:`array`,items:{...name,maxLength:2048},required:true},authentication:{type:`object`,schema:authenticationSchema,required:true},settings:{type:`object`,additionalProperties:true,required:false},assistantPolicy:{type:`object`,schema:assistantPolicySchema,required:false},extensions:{type:`object`,additionalProperties:true,required:false}});var registrationSchema=createSchema({source:{...name,enum:[`own`]},grantType:{...name,enum:[`authorization_code`,`client_credentials`],required:false},clientId:{...name,maxLength:2048,required:false},clientSecretRef:{...secretReference,required:false},tokenEndpointAuthMethod:{...name,enum:[`client_secret_post`,`client_secret_basic`,`none`],required:false},callbackUrlRef:{...secretReference,required:false}});var integrationsSchema=createSchema({schemaVersion:{type:`integer`,enum:[1],required:true},integrations:{type:`object`,values:integrationSchema,required:true},registrations:{type:`object`,values:registrationSchema,required:true},extensions:{type:`object`,additionalProperties:true,required:false}});var IntegrationConfigurationError=class extends Error{constructor(fieldErrors){super(`Integration configuration is invalid.`);this.name=`IntegrationConfigurationError`;this.code=`integration_configuration_invalid`;this.statusCode=422;this.fieldErrors=fieldErrors}};function getProviderSettingsSchema(provider,settings={}){return typeof provider.settingsSchema===`function`?provider.settingsSchema(settings):provider.settingsSchema}function getProviderAuthenticationMethods(provider,settings={}){return provider.authenticationMethodsForSettings?provider.authenticationMethodsForSettings(settings):provider.authenticationMethods}function getProviderAccountModes(provider,settings={}){return provider.accountModesForSettings?provider.accountModesForSettings(settings):provider.accountModes}function getProviderScopes(provider,settings={},grantType=`authorization_code`,authenticationMethod){const scopes=provider.scopesForGrantType?provider.scopesForGrantType(grantType,settings):provider.scopesForSettings?provider.scopesForSettings(settings):provider.scopes;return authenticationMethod?scopes.filter(scope=>!scope.authenticationMethods||scope.authenticationMethods.includes(authenticationMethod)):scopes}function getProviderClientAuthenticationMethods(provider,grantType=`authorization_code`,settings={}){const methods=provider.oauthClientAuthenticationMethods;return typeof methods===`function`?methods(grantType,settings):methods||[`client_secret_post`]}function validateIntegrationConfiguration(input,{providers=[],allowUnknownProviders=false}={}){if(input?.schemaVersion!==1)throw new IntegrationConfigurationError({schemaVersion:`Use numeric schemaVersion 1; other versions require an explicit migration.`});let config;try{config=validateSchemaPayload({schema:integrationsSchema,mode:`replace`},input)}catch(error){throw new IntegrationConfigurationError(error.fieldErrors||{configuration:`Invalid configuration.`})}const fieldErrors={};const definitions=new Map(providers.map(provider=>[provider.id,provider]));const requireValue=(record,key,path)=>{if(!record[key])fieldErrors[`${path}.${key}`]=`This value is required.`};for(const field of[`integrations`,`registrations`])for(const id of Object.keys(config[field]))if(!/^[a-z][a-z0-9-]*$/u.test(id)||[`constructor`,`prototype`].includes(id))fieldErrors[`${field}.${id}`]=`Use a stable lowercase name containing letters, digits and hyphens.`;for(const[id,registration]of Object.entries(config.registrations)){const path=`registrations.${id}`;const clientCredentials=registration.grantType===`client_credentials`;const required=[`clientId`,...clientCredentials?[]:[`callbackUrlRef`],...registration.tokenEndpointAuthMethod===`none`?[]:[`clientSecretRef`]];for(const key of required)requireValue(registration,key,path);const forbidden=[...clientCredentials?[`callbackUrlRef`]:[],...registration.tokenEndpointAuthMethod===`none`?[`clientSecretRef`]:[]];for(const key of forbidden)if(Object.hasOwn(registration,key))fieldErrors[`${path}.${key}`]=`This field belongs to another credential mode.`;if(clientCredentials&&registration.tokenEndpointAuthMethod===`none`)fieldErrors[`${path}.tokenEndpointAuthMethod`]=`Client credentials require a confidential client.`}for(const[id,integration]of Object.entries(config.integrations)){const path=`integrations.${id}`;const auth=integration.authentication;const provider=definitions.get(integration.provider);const registration=config.registrations[auth.registrationRef];const grantType=registration?.grantType||`authorization_code`;if(auth.refreshTokenRef&&auth.method!==`oauth2`)fieldErrors[`${path}.authentication.refreshTokenRef`]=`Only an OAuth connection can start from a refresh token.`;if(auth.method===`oauth2`){if(!auth.registrationRef||!Object.hasOwn(config.registrations,auth.registrationRef))fieldErrors[`${path}.authentication.registrationRef`]=`Select a registration defined in this file.`;if(auth.secretRef)fieldErrors[`${path}.authentication.secretRef`]=`Use the registration's secret reference.`;if(auth.refreshTokenRef&&integration.accountMode!==`shared`)fieldErrors[`${path}.authentication.refreshTokenRef`]=`Only a shared connection can start from a refresh token in Env.`;else if(auth.refreshTokenRef&&grantType!==`authorization_code`)fieldErrors[`${path}.authentication.refreshTokenRef`]=`Client credentials do not use a refresh token.`;if(grantType===`client_credentials`&&integration.accountMode===`per-user`)fieldErrors[`${path}.accountMode`]=`A service account cannot connect as each app user.`}else if(auth.method===`api-key`){if(!provider?.apiKeySecretOptional)requireValue(auth,`secretRef`,`${path}.authentication`);if(auth.registrationRef)fieldErrors[`${path}.authentication.registrationRef`]=`API keys do not use an OAuth registration.`}else if(auth.method===`service-account`){requireValue(auth,`secretRef`,`${path}.authentication`);if(auth.registrationRef)fieldErrors[`${path}.authentication.registrationRef`]=`Service-account credentials do not use a browser OAuth registration.`;if(integration.accountMode===`per-user`)fieldErrors[`${path}.accountMode`]=`A service account cannot connect as each app user.`}else for(const field of[`secretRef`,`registrationRef`])if(Object.hasOwn(auth,field))fieldErrors[`${path}.authentication.${field}`]=`This mode does not use credentials.`;if(new Set(integration.scopes).size!==integration.scopes.length)fieldErrors[`${path}.scopes`]=`Select each permission only once.`;if(providers.length){if(!provider){if(!allowUnknownProviders)fieldErrors[`${path}.provider`]=`Install and register this provider before using it.`;continue}for(const action of Object.keys(integration.assistantPolicy?.actions||{}))if(!provider.assistantActions?.some(item=>item.value===action))fieldErrors[`${path}.assistantPolicy.actions.${action}`]=`This provider does not declare this assistant action.`;if(provider.settingsSchema)try{integration.settings=validateSchemaPayload({schema:getProviderSettingsSchema(provider,integration.settings),mode:`replace`},integration.settings||{})}catch(error){for(const[field,message]of Object.entries(error.fieldErrors||{settings:`Check this provider's settings.`}))fieldErrors[`${path}.settings.${field}`]=message}for(const field of provider.settingsFields||[])if(field.authenticationMethods&&!field.authenticationMethods.includes(auth.method)&&Object.hasOwn(integration.settings||{},field.name))fieldErrors[`${path}.settings.${field.name}`]=`This setting belongs to another credential mode.`;if(!getProviderAccountModes(provider,integration.settings||{}).includes(integration.accountMode))fieldErrors[`${path}.accountMode`]=`This provider does not support this account mode.`;if(!getProviderAuthenticationMethods(provider,integration.settings).includes(auth.method))fieldErrors[`${path}.authentication.method`]=`This provider configuration does not support this credential mode.`;if(auth.method===`oauth2`&&registration?.source===`own`){const registrationPath=`registrations.${auth.registrationRef}`;if(!(provider.oauthGrantTypes||[`authorization_code`]).includes(grantType))fieldErrors[`${registrationPath}.grantType`]=`This provider does not support this OAuth flow.`;if(!getProviderClientAuthenticationMethods(provider,grantType,integration.settings||{}).includes(registration.tokenEndpointAuthMethod||`client_secret_post`))fieldErrors[`${registrationPath}.tokenEndpointAuthMethod`]=`This provider does not support this client authentication method.`;if(registration.clientId&&provider.validateClientId){const result=provider.validateClientId(registration.clientId);if(result!==true)fieldErrors[`${registrationPath}.clientId`]=result||`Check this provider's client identifier.`}}const scopes=getProviderScopes(provider,integration.settings||{},grantType,auth.method);const allowedScopes=new Set(scopes.map(scope=>scope.value));if(scopes.some(scope=>scope.required&&!integration.scopes.includes(scope.value)))fieldErrors[`${path}.scopes`]=`Include this provider's required permissions.`;if(integration.scopes.some(scope=>!allowedScopes.has(scope)))fieldErrors[`${path}.scopes`]=`A selected permission is not supported by this provider configuration.`;if([`oauth2`,`service-account`].includes(auth.method)&&scopes.length&&!integration.scopes.length)fieldErrors[`${path}.scopes`]=`Select at least one permission.`}}if(Object.keys(fieldErrors).length)throw new IntegrationConfigurationError(fieldErrors);return config}var _hoisted_1$10={class:`text-body-medium mb-3`};var _hoisted_2$7={key:0,role:`alert`,class:`text-error text-body-small mt-2`};var _sfc_main$21={__name:`IntegrationConfigurationFields`,props:{modelValue:{type:Object,required:true},integrationId:{type:String,required:true},provider:{type:Object,required:true},fieldErrors:{type:Object,default:()=>({})},disabled:Boolean,callbackUrl:{type:String,default:``}},emits:[`update:modelValue`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const panels=ref([`details`,`credentials`]);const integration=computed(()=>props.modelValue.integrations[props.integrationId]);const registrationId=computed(()=>integration.value?.authentication.registrationRef);const registration=computed(()=>props.modelValue.registrations[registrationId.value]);const grantType=computed(()=>registration.value?.grantType||`authorization_code`);const grantOptions=computed(()=>(props.provider.oauthGrantTypes||[`authorization_code`]).map(value=>({value,title:{authorization_code:`User consent`,client_credentials:`Service account`}[value]||value})));const modes=computed(()=>getProviderAccountModes(props.provider,integration.value.settings||{}).filter(mode=>integration.value?.authentication.method!==`oauth2`||grantType.value!==`client_credentials`||mode!==`per-user`).map(value=>({value,title:{shared:`One shared account`,"per-user":`Each app user's own account`,assistant:`Assistant access`}[value]||value})));const registrationOptions=computed(()=>Object.keys(props.modelValue.registrations));const integrationPath=computed(()=>`integrations.${props.integrationId}`);const registrationPath=computed(()=>`registrations.${registrationId.value}`);const settingProperties=computed(()=>getProviderSettingsSchema(props.provider,integration.value?.settings)?.getFieldDefinitions()||{});const authenticationOptions=computed(()=>getProviderAuthenticationMethods(props.provider,integration.value.settings).map(value=>({value,title:props.provider.authenticationLabels?.[value]||{"api-key":`API key`,"service-account":`Service account`,oauth2:`OAuth`,none:`No credentials`}[value]||value})));const visibleSettings=computed(()=>(props.provider.settingsFields||[]).filter(field=>Object.hasOwn(settingProperties.value,field.name)&&(!field.authenticationMethods||field.authenticationMethods.includes(integration.value.authentication.method))));const visibleScopes=computed(()=>getProviderScopes(props.provider,integration.value.settings||{},grantType.value,integration.value.authentication.method));const assistantPermissions=[{value:`ask`,title:`Ask each time`},{value:`always`,title:`Always allow`},{value:`never`,title:`Never allow`}];function editAssistantPolicy(changes){editIntegration({assistantPolicy:{enabled:true,defaultPermission:`ask`,actions:{},...integration.value.assistantPolicy,...changes}})}function editIntegration(changes){const next={...integration.value,...changes};for(const key of Object.keys(changes))if(changes[key]===void 0)delete next[key];const registrations={...props.modelValue.registrations};const previousRegistration=registrationId.value;if(changes.authentication&&next.authentication.method!==`oauth2`&&previousRegistration&&registrations[previousRegistration]?.source===`own`&&registrations[previousRegistration]?.clientId===``&&!Object.entries(props.modelValue.integrations).some(([id,value])=>id!==props.integrationId&&value.authentication.registrationRef===previousRegistration))delete registrations[previousRegistration];emit(`update:modelValue`,{...props.modelValue,registrations,integrations:{...props.modelValue.integrations,[props.integrationId]:next}})}function editSetting(field,value){const settings={...integration.value.settings};if(value===void 0||value===``)delete settings[field];else settings[field]=value;if(typeof props.provider.settingsSchema===`function`){const fields=getProviderSettingsSchema(props.provider,settings).getFieldDefinitions();for(const key of Object.keys(settings))if(!Object.hasOwn(fields,key))delete settings[key]}const available=getProviderScopes(props.provider,settings,grantType.value,integration.value.authentication.method);const scopes=integration.value.scopes.filter(value=>available.some(scope=>scope.value===value));for(const scope of available)if(scope.required&&!scopes.includes(scope.value))scopes.push(scope.value);const methods=getProviderAuthenticationMethods(props.provider,settings);const credentialScope=props.provider.settingsFields?.find(item=>item.name===field)?.credentialScope;const authentication=credentialScope&&credentialScope(value)!==credentialScope(integration.value.settings?.[field]??settingProperties.value[field]?.defaultTo)||!methods.includes(integration.value.authentication.method)?{method:methods[0]}:integration.value.authentication;const accountModes=getProviderAccountModes(props.provider,settings);const accountMode=accountModes.includes(integration.value.accountMode)?integration.value.accountMode:accountModes[0];if(authentication.method===`oauth2`&&!authentication.registrationRef)editAuthentication(`oauth2`,{...integration.value,settings,scopes,authentication,accountMode});else editIntegration({settings,scopes,authentication,accountMode})}function editAuthentication(method,current=integration.value){const settings={...current.settings};for(const field of props.provider.settingsFields||[])if(field.authenticationMethods&&!field.authenticationMethods.includes(method))delete settings[field.name];const scopes=getProviderScopes(props.provider,settings,`authorization_code`,method).filter(scope=>current.scopes.includes(scope.value)||scope.required||scope.authenticationMethods&&scope.recommended).map(scope=>scope.value);if(method===`oauth2`){let id=props.integrationId;let suffix=2;while(Object.hasOwn(props.modelValue.registrations,id))id=`${props.integrationId}-${suffix++}`;const prefix=id.toUpperCase().replaceAll(`-`,`_`);const grant=props.provider.oauthGrantTypes?.[0]||`authorization_code`;const clientAuthentication=getProviderClientAuthenticationMethods(props.provider,grant,settings)[0];emit(`update:modelValue`,{...props.modelValue,integrations:{...props.modelValue.integrations,[props.integrationId]:{...current,scopes,authentication:{method,registrationRef:id},...current.settings?{settings}:{}}},registrations:{...props.modelValue.registrations,[id]:{source:`own`,clientId:``,...grant===`authorization_code`?{callbackUrlRef:`env:${prefix}_CALLBACK_URL`}:{grantType:grant},...clientAuthentication!==`client_secret_post`?{tokenEndpointAuthMethod:clientAuthentication}:{},...clientAuthentication!==`none`?{clientSecretRef:`env:${prefix}_CLIENT_SECRET`}:{}}}});return}editIntegration({scopes,authentication:{method},...current.settings?{settings}:{}})}function editSecretReference(value){const authentication={...integration.value.authentication,secretRef:value};if(!value&&props.provider.apiKeySecretOptional)delete authentication.secretRef;editIntegration({authentication})}function editRegistration(field,value){emit(`update:modelValue`,{...props.modelValue,registrations:{...props.modelValue.registrations,[registrationId.value]:{...registration.value,[field]:value}}})}function editGrantType(value){const nextRegistration={...registration.value,grantType:value};const methods=getProviderClientAuthenticationMethods(props.provider,value,integration.value.settings||{});if(!methods.includes(nextRegistration.tokenEndpointAuthMethod||`client_secret_post`))nextRegistration.tokenEndpointAuthMethod=methods[0];if(nextRegistration.tokenEndpointAuthMethod===`none`)delete nextRegistration.clientSecretRef;if(value===`client_credentials`)delete nextRegistration.callbackUrlRef;const allowed=getProviderScopes(props.provider,integration.value.settings||{},value,integration.value.authentication.method).map(scope=>scope.value);emit(`update:modelValue`,{...props.modelValue,registrations:{...props.modelValue.registrations,[registrationId.value]:nextRegistration},integrations:{...props.modelValue.integrations,[props.integrationId]:{...integration.value,accountMode:value===`client_credentials`&&integration.value.accountMode===`per-user`?props.provider.accountModes.find(mode=>mode!==`per-user`):integration.value.accountMode,scopes:integration.value.scopes.filter(scope=>allowed.includes(scope))}}})}return(_ctx,_cache)=>{return integration.value?(openBlock(),createBlock(VSheet,{key:0,class:`integration-fields`,"aria-label":`${__props.provider.name} configuration`},{default:withCtx(()=>[createVNode(VExpansionPanels,{modelValue:panels.value,"onUpdate:modelValue":_cache[9]||(_cache[9]=$event=>panels.value=$event),multiple:``,variant:`accordion`,disabled:__props.disabled},{default:withCtx(()=>[createVNode(VExpansionPanel,{value:`details`,title:`Details`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createVNode(VTextField,{label:`Display name`,"model-value":integration.value.displayName||``,disabled:__props.disabled,placeholder:__props.provider.name,"error-messages":__props.fieldErrors[`${integrationPath.value}.displayName`],"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>editIntegration({displayName:$event||void 0}))},null,8,[`model-value`,`disabled`,`placeholder`,`error-messages`]),createVNode(VSelect,{label:`Account used by the application`,items:modes.value,"model-value":integration.value.accountMode,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${integrationPath.value}.accountMode`],"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>editIntegration({accountMode:$event}))},null,8,[`items`,`model-value`,`disabled`,`error-messages`])]),_:1})]),_:1}),createVNode(VExpansionPanel,{value:`credentials`,title:`Credentials`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[authenticationOptions.value.length>1?(openBlock(),createBlock(VSelect,{key:0,label:`Authentication`,items:authenticationOptions.value,"model-value":integration.value.authentication.method,disabled:__props.disabled,hint:__props.provider.authenticationHint,"persistent-hint":Boolean(__props.provider.authenticationHint),"error-messages":__props.fieldErrors[`${integrationPath.value}.authentication.method`],"onUpdate:modelValue":editAuthentication},null,8,[`items`,`model-value`,`disabled`,`hint`,`persistent-hint`,`error-messages`])):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(visibleSettings.value,field=>{return openBlock(),createElementBlock(Fragment,{key:field.name},[field.searchable?(openBlock(),createBlock(VAutocomplete,{key:0,label:field.label,items:field.items,disabled:__props.disabled,"auto-select-first":``,"model-value":integration.value.settings?.[field.name]??settingProperties.value[field.name]?.defaultTo,hint:typeof field.hint===`function`?field.hint(integration.value.settings):field.hint,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.settings.${field.name}`],"onUpdate:modelValue":$event=>editSetting(field.name,$event)},null,8,[`label`,`items`,`disabled`,`model-value`,`hint`,`error-messages`,`onUpdate:modelValue`])):field.items?(openBlock(),createBlock(VSelect,{key:1,label:field.label,items:field.items,disabled:__props.disabled,"model-value":integration.value.settings?.[field.name]??settingProperties.value[field.name]?.defaultTo,hint:field.hint,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.settings.${field.name}`],"onUpdate:modelValue":$event=>editSetting(field.name,$event)},null,8,[`label`,`items`,`disabled`,`model-value`,`hint`,`error-messages`,`onUpdate:modelValue`])):(openBlock(),createBlock(VTextField,{key:2,label:field.label,disabled:__props.disabled,placeholder:field.placeholder,"model-value":integration.value.settings?.[field.name]??settingProperties.value[field.name]?.defaultTo??``,hint:field.hint,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.settings.${field.name}`],"onUpdate:modelValue":$event=>editSetting(field.name,$event)},null,8,[`label`,`disabled`,`placeholder`,`model-value`,`hint`,`error-messages`,`onUpdate:modelValue`]))],64)}),128)),[`api-key`,`service-account`].includes(integration.value.authentication.method)?renderSlot(_ctx.$slots,`credential`,{reference:integration.value.authentication.secretRef,disabled:__props.disabled},()=>[createVNode(VTextField,{label:integration.value.authentication.method===`service-account`?__props.provider.serviceAccountReferenceLabel||`Service-account credential reference`:__props.provider.apiKeyReferenceLabel||`API key reference`,"model-value":integration.value.authentication.secretRef,disabled:__props.disabled,hint:integration.value.authentication.method===`service-account`?__props.provider.serviceAccountReferenceHint||`Store the service credential in your environment or secret store and enter its reference here.`:__props.provider.apiKeyReferenceHint||`Store the API key in your environment or secret store. Enter its reference here, such as env:SERVICE_API_KEY.`,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.authentication.secretRef`],"onUpdate:modelValue":editSecretReference},null,8,[`label`,`model-value`,`disabled`,`hint`,`error-messages`])],true,1):integration.value.authentication.method===`oauth2`?(openBlock(),createElementBlock(Fragment,{key:2},[createVNode(VSelect,{label:`App registration`,items:registrationOptions.value,"model-value":registrationId.value,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${integrationPath.value}.authentication.registrationRef`],"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>editIntegration({authentication:{...integration.value.authentication,registrationRef:$event}}))},null,8,[`items`,`model-value`,`disabled`,`error-messages`]),registration.value?.source===`own`?(openBlock(),createElementBlock(Fragment,{key:0},[grantOptions.value.length>1?(openBlock(),createBlock(VSelect,{key:0,label:`OAuth flow`,items:grantOptions.value,"model-value":grantType.value,disabled:__props.disabled,hint:__props.provider.oauthGrantHint,"persistent-hint":Boolean(__props.provider.oauthGrantHint),"error-messages":__props.fieldErrors[`${registrationPath.value}.grantType`],"onUpdate:modelValue":editGrantType},null,8,[`items`,`model-value`,`disabled`,`hint`,`persistent-hint`,`error-messages`])):createCommentVNode(``,true),createVNode(VTextField,{label:__props.provider.clientIdLabel||`Client ID`,hint:__props.provider.clientIdHint,"persistent-hint":Boolean(__props.provider.clientIdHint),"model-value":registration.value.clientId,autocomplete:`off`,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${registrationPath.value}.clientId`],"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>editRegistration(`clientId`,$event))},null,8,[`label`,`hint`,`persistent-hint`,`model-value`,`disabled`,`error-messages`]),registration.value.tokenEndpointAuthMethod!==`none`?renderSlot(_ctx.$slots,`credential`,{reference:registration.value.clientSecretRef,disabled:__props.disabled},()=>[createVNode(VTextField,{label:`Client secret reference`,"model-value":registration.value.clientSecretRef,disabled:__props.disabled,hint:`Use an environment reference such as env:GOOGLE_CLIENT_SECRET. Keep the value outside this file.`,"persistent-hint":``,"error-messages":__props.fieldErrors[`${registrationPath.value}.clientSecretRef`],"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>editRegistration(`clientSecretRef`,$event))},null,8,[`model-value`,`disabled`,`error-messages`])],true,1):createCommentVNode(``,true),grantType.value===`authorization_code`?(openBlock(),createBlock(VTextField,{key:2,hint:`Reference the callback route implemented by your application and registered with the provider.`,"persistent-hint":``,class:`mt-4`,label:`Callback URL reference`,"model-value":registration.value.callbackUrlRef,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${registrationPath.value}.callbackUrlRef`],"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>editRegistration(`callbackUrlRef`,$event))},null,8,[`model-value`,`disabled`,`error-messages`])):createCommentVNode(``,true),__props.callbackUrl&&grantType.value===`authorization_code`?(openBlock(),createBlock(VTextField,{key:3,label:`Callback URL`,"model-value":__props.callbackUrl,readonly:``},null,8,[`model-value`])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)],64)):createCommentVNode(``,true)]),_:3})]),_:3}),visibleScopes.value.length&&(__props.provider.scopes.length||__props.provider.permissionsHint||[`oauth2`,`service-account`].includes(integration.value.authentication.method))?(openBlock(),createBlock(VExpansionPanel,{key:0,value:`permissions`,title:`Permissions`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[createBaseVNode(`p`,_hoisted_1$10,toDisplayString(__props.provider.permissionsHint||`Choose what the application needs. The account owner approves these permissions when connecting.`),1),(openBlock(true),createElementBlock(Fragment,null,renderList(visibleScopes.value,permission=>{return openBlock(),createBlock(VCheckbox,{key:permission.value,label:permission.label,value:permission.value,"model-value":integration.value.scopes,disabled:__props.disabled||permission.required,"hide-details":``,"onUpdate:modelValue":_cache[6]||(_cache[6]=$event=>editIntegration({scopes:$event}))},null,8,[`label`,`value`,`model-value`,`disabled`])}),128)),__props.fieldErrors[`${integrationPath.value}.scopes`]?(openBlock(),createElementBlock(`p`,_hoisted_2$7,toDisplayString(__props.fieldErrors[`${integrationPath.value}.scopes`]),1)):createCommentVNode(``,true)]),_:1})]),_:1})):createCommentVNode(``,true),__props.provider.assistantActions?.length?(openBlock(),createBlock(VExpansionPanel,{key:1,value:`assistant`,title:`Assistant permissions`},{default:withCtx(()=>[createVNode(VExpansionPanelText,null,{default:withCtx(()=>[_cache[10]||(_cache[10]=createBaseVNode(`p`,{class:`text-body-medium mb-3`},`These choices control assistant actions for this integration. They do not grant access to the provider or replace your application's permissions.`,-1)),createVNode(VSwitch,{label:`Allow assistant access`,"model-value":integration.value.assistantPolicy?.enabled??true,disabled:__props.disabled,"error-messages":__props.fieldErrors[`${integrationPath.value}.assistantPolicy.enabled`],"onUpdate:modelValue":_cache[7]||(_cache[7]=$event=>editAssistantPolicy({enabled:$event}))},null,8,[`model-value`,`disabled`,`error-messages`]),createVNode(VSelect,{label:`Manage all permissions`,items:assistantPermissions,"model-value":integration.value.assistantPolicy?.defaultPermission||`ask`,disabled:__props.disabled||integration.value.assistantPolicy?.enabled===false,hint:`Changing this sets every assistant action below to the same choice.`,"persistent-hint":``,"error-messages":__props.fieldErrors[`${integrationPath.value}.assistantPolicy.defaultPermission`],"onUpdate:modelValue":_cache[8]||(_cache[8]=$event=>editAssistantPolicy({defaultPermission:$event,actions:{}}))},null,8,[`model-value`,`disabled`,`error-messages`]),(openBlock(true),createElementBlock(Fragment,null,renderList(__props.provider.assistantActions,action=>{return openBlock(),createBlock(VSelect,{key:action.value,label:action.label,items:assistantPermissions,"model-value":integration.value.assistantPolicy?.actions?.[action.value]||integration.value.assistantPolicy?.defaultPermission||`ask`,disabled:__props.disabled||integration.value.assistantPolicy?.enabled===false,"error-messages":__props.fieldErrors[`${integrationPath.value}.assistantPolicy.actions.${action.value}`],"onUpdate:modelValue":$event=>editAssistantPolicy({actions:{...integration.value.assistantPolicy?.actions,[action.value]:$event}})},null,8,[`label`,`model-value`,`disabled`,`error-messages`,`onUpdate:modelValue`])}),128))]),_:1})]),_:1})):createCommentVNode(``,true)]),_:3},8,[`modelValue`,`disabled`]),renderSlot(_ctx.$slots,`access`,{integration:integration.value},void 0,true)]),_:3},8,[`aria-label`])):createCommentVNode(``,true)}}};var IntegrationConfigurationFields_default=_plugin_vue_export_helper_default(_sfc_main$21,[[`__scopeId`,`data-v-5cec349f`]]);var client_exports$6=__exportAll({IntegrationConfigurationFields:()=>IntegrationConfigurationFields_default});var _hoisted_1$9={class:`crud-screen crud-screen--operator crud-add-edit-form d-flex flex-column ga-4`};var _hoisted_2$6={class:`crud-add-edit-form__actions`};var _hoisted_3$6={key:0,class:`crud-add-edit-form__state`};var _hoisted_4$5={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_5$5={key:1,class:`pa-4`};var _sfc_main$20={__name:`CrudAddEditScreen`,props:{screen:{type:Object,required:true},resolveLookupItems:{type:Function,default:null},resolveLookupLoading:{type:Function,default:null},resolveLookupSearch:{type:Function,default:null},setLookupSearch:{type:Function,default:null}},setup(__props){const props=__props;const formRuntime=computed(()=>props.screen?.formRuntime||{});const addEdit=computed(()=>props.screen?.addEdit||formRuntime.value?.addEdit||{});const formState=computed(()=>props.screen?.formState||formRuntime.value?.form||{});const mode=computed(()=>String(unref(props.screen?.mode)||`new`).trim()||`new`);const saveLabel=computed(()=>String(unref(props.screen?.saveLabel)||`Save`).trim()||`Save`);const cancelTo=computed(()=>unref(props.screen?.cancelTo)||``);function resolveFieldErrors(fieldKey){if(typeof props.screen?.resolveFieldErrors===`function`)return props.screen.resolveFieldErrors(fieldKey);if(typeof formRuntime.value?.resolveFieldErrors===`function`)return formRuntime.value.resolveFieldErrors(fieldKey);return[]}function resolveCancelTo(target=cancelTo.value){if(typeof props.screen?.resolveCancelTo===`function`)return props.screen.resolveCancelTo(target);return target||``}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$9,[createBaseVNode(`div`,_hoisted_2$6,[renderSlot(_ctx.$slots,`actions`,{screen:__props.screen,mode:mode.value,formRuntime:formRuntime.value,formState:formState.value,addEdit:addEdit.value,saveLabel:saveLabel.value,cancelTo:resolveCancelTo(),submit:addEdit.value.submit},()=>[cancelTo.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`outlined`,to:resolveCancelTo(cancelTo.value)},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`to`])):createCommentVNode(``,true),createVNode(VBtn,{color:`primary`,variant:`flat`,disabled:addEdit.value.isSubmitDisabled,onClick:addEdit.value.submit},{default:withCtx(()=>[createTextVNode(toDisplayString(addEdit.value.isSaving?`Saving…`:saveLabel.value),1)]),_:1},8,[`disabled`,`onClick`])],true)]),createVNode(VSheet,{rounded:`lg`,border:``,class:`crud-add-edit-form__panel`},{default:withCtx(()=>[addEdit.value.loadError?(openBlock(),createElementBlock(`div`,_hoisted_3$6,[createBaseVNode(`p`,_hoisted_4$5,toDisplayString(addEdit.value.loadError),1),addEdit.value.canRetryLoad?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,disabled:addEdit.value.isFetching,onClick:addEdit.value.refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(addEdit.value.isFetching?`Retrying…`:`Retry`),1)]),_:1},8,[`disabled`,`onClick`])):createCommentVNode(``,true)])):formRuntime.value.showFormSkeleton?(openBlock(),createElementBlock(`div`,_hoisted_5$5,[createVNode(VSkeletonLoader,{type:`text@2, article`})])):(openBlock(),createBlock(VForm,{key:2,class:`pa-4`,onSubmit:withModifiers(addEdit.value.submit,[`prevent`]),novalidate:``},{default:withCtx(()=>[createVNode(VRow,{class:`crud-add-edit-form__fields`},{default:withCtx(()=>[renderSlot(_ctx.$slots,`fields`,{mode:mode.value,formRuntime:formRuntime.value,formState:formState.value,addEdit:addEdit.value,resolveFieldErrors,resolveLookupItems:__props.resolveLookupItems,resolveLookupLoading:__props.resolveLookupLoading,resolveLookupSearch:__props.resolveLookupSearch,setLookupSearch:__props.setLookupSearch},void 0,true)]),_:3})]),_:3},8,[`onSubmit`]))]),_:3})])}}};var CrudAddEditScreen_default=_plugin_vue_export_helper_default(_sfc_main$20,[[`__scopeId`,`data-v-24dfd81e`]]);var _sfc_main$19={__name:`CrudDeleteAction`,props:{action:{type:Object,required:true},resourceSingularTitle:{type:String,default:`Record`}},setup(__props){const props=__props;const resourceLabel=computed(()=>String(props.resourceSingularTitle||`Record`).trim()||`Record`);const componentId=useId();const titleId=`${componentId}-delete-title`;const descriptionId=`${componentId}-delete-description`;function closeDialog(){props.action.cancel()}function handleDialogModelUpdate(isOpen){if(!isOpen)closeDialog()}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VBtn,{color:`error`,variant:`tonal`,"prepend-icon":unref(mdiDeleteOutline),"min-height":`48`,disabled:!__props.action.canDelete,onClick:__props.action.request},{default:withCtx(()=>[createTextVNode(` Delete `+toDisplayString(resourceLabel.value),1)]),_:1},8,[`prepend-icon`,`disabled`,`onClick`]),createVNode(VDialog,{"model-value":__props.action.isOpen,"max-width":`32rem`,role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":titleId,"aria-describedby":descriptionId,persistent:__props.action.isDeleting,"onUpdate:modelValue":handleDialogModelUpdate},{default:withCtx(()=>[createVNode(VCard,null,{default:withCtx(()=>[createVNode(VCardTitle,{id:titleId},{default:withCtx(()=>[createTextVNode(`Delete `+toDisplayString(resourceLabel.value)+`?`,1)]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`p`,{id:descriptionId,class:`mb-0`},` This permanently deletes this `+toDisplayString(resourceLabel.value.toLowerCase())+`. This action cannot be undone. `,1),__props.action.error?(openBlock(),createBlock(VAlert,{key:0,class:`mt-4`,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.action.error),1)]),_:1})):createCommentVNode(``,true)]),_:1}),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{autofocus:``,variant:`text`,disabled:__props.action.isDeleting,onClick:closeDialog},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(` Cancel `,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`error`,variant:`flat`,disabled:!__props.action.canDelete,onClick:__props.action.confirm},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.action.isDeleting?`Deleting…`:`Delete`),1)]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])],64)}}};var _hoisted_1$8={key:0,class:`crud-list-bulk-action-surface`};var _hoisted_2$5={class:`crud-list-bulk-action-surface__summary`};var _hoisted_3$5={class:`crud-list-bulk-action-surface__copy`};var _hoisted_4$4={class:`text-overline text-medium-emphasis`};var _hoisted_5$4={key:0,class:`crud-list-bulk-action-surface__actions`};var _sfc_main$18={__name:`CrudListBulkActionSurface`,props:{runtime:{type:Object,default:null},title:{type:String,default:`Selection`}},setup(__props){const props=__props;const display=useDisplay();const isCompactLayout=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();return displayName===`xs`||displayName===`sm`});const actions=computed(()=>Array.isArray(props.runtime?.actions)?props.runtime.actions:[]);const selectedCount=computed(()=>Number(props.runtime?.selectedCount?.value||0));const shouldRender=computed(()=>Boolean(props.runtime?.hasActions?.value)&&Boolean(props.runtime?.hasSelection?.value)&&selectedCount.value>0);function clearSelection(){props.runtime?.clearSelection?.()}function execute(action={}){props.runtime?.execute?.(action)}function isActionDisabled(action={}){return Boolean(props.runtime?.isActionDisabled?.(action))}function isActionExecuting(action={}){return Boolean(props.runtime?.isActionExecuting?.(action))}return(_ctx,_cache)=>{return shouldRender.value?(openBlock(),createElementBlock(`section`,_hoisted_1$8,[createBaseVNode(`div`,_hoisted_2$5,[createBaseVNode(`div`,_hoisted_3$5,[createBaseVNode(`span`,_hoisted_4$4,toDisplayString(__props.title),1),createBaseVNode(`strong`,null,toDisplayString(selectedCount.value)+` selected`,1)]),createVNode(VBtn,{size:`small`,variant:`text`,onClick:clearSelection},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Clear`,-1)])]),_:1})]),!isCompactLayout.value?(openBlock(),createElementBlock(`div`,_hoisted_5$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(actions.value,action=>{return openBlock(),createBlock(VBtn,{key:action.key,color:action.color,variant:action.variant,"prepend-icon":action.icon||void 0,disabled:isActionDisabled(action),onClick:$event=>execute(action)},{default:withCtx(()=>[createTextVNode(toDisplayString(isActionExecuting(action)?`${action.label}…`:action.label),1)]),_:2},1032,[`color`,`variant`,`prepend-icon`,`disabled`,`onClick`])}),128))])):(openBlock(),createBlock(VMenu,{key:1,location:`bottom end`},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{color:`primary`,variant:`tonal`}),{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Bulk actions`,-1)])]),_:1},16)]),default:withCtx(()=>[createVNode(VList,{density:`compact`,"min-width":`180`},{default:withCtx(()=>[(openBlock(true),createElementBlock(Fragment,null,renderList(actions.value,action=>{return openBlock(),createBlock(VListItem,{key:action.key,title:isActionExecuting(action)?`${action.label}…`:action.label,"prepend-icon":action.icon||void 0,disabled:isActionDisabled(action),onClick:$event=>execute(action)},null,8,[`title`,`prepend-icon`,`disabled`,`onClick`])}),128))]),_:1})]),_:1}))])):createCommentVNode(``,true)}}};var CrudListBulkActionSurface_default=_plugin_vue_export_helper_default(_sfc_main$18,[[`__scopeId`,`data-v-03d079ce`]]);var DATE_ONLY_PATTERN=/^(\d{4})-(\d{2})-(\d{2})$/u;function parseDateOnlyValue(value=``){const match=DATE_ONLY_PATTERN.exec(String(value||``).trim());if(!match)return null;const year=Number(match[1]);const month=Number(match[2]);const day=Number(match[3]);const date=new Date(0);date.setHours(12,0,0,0);date.setFullYear(year,month-1,day);if(date.getFullYear()!==year||date.getMonth()!==month-1||date.getDate()!==day)return null;return date}function formatDateOnlyValue(value=null){const source=Array.isArray(value)?value[0]:value;const date=source instanceof Date?source:parseDateOnlyValue(source);if(!(date instanceof Date)||Number.isNaN(date.getTime()))return``;const year=date.getFullYear();if(year<0||year>9999)return``;return[String(year).padStart(4,`0`),String(date.getMonth()+1).padStart(2,`0`),String(date.getDate()).padStart(2,`0`)].join(`-`)}function formatDateOnlyDisplay(value=``,{locale=void 0}={}){const date=parseDateOnlyValue(value);if(!date)return``;try{return new Intl.DateTimeFormat(locale||void 0,{year:`numeric`,month:`short`,day:`numeric`}).format(date)}catch{return formatDateOnlyValue(date)}}var _sfc_main$17=Object.assign({inheritAttrs:false},{__name:`CrudListDateFilterControl`,props:{modelValue:{type:String,default:``},label:{type:String,required:true},controlId:{type:String,default:``},placeholder:{type:String,default:`Select date`},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false}},emits:[`update:modelValue`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const attrs=useAttrs();const{current:currentLocale}=useLocale();const generatedId=useId();const menuOpen=ref(false);const textFieldRef=ref(null);const resolvedControlId=computed(()=>props.controlId||`crud-list-date-${generatedId}`);const pickerId=computed(()=>`${resolvedControlId.value}-picker`);const pickerValue=computed(()=>parseDateOnlyValue(props.modelValue));const displayValue=computed(()=>formatDateOnlyDisplay(props.modelValue,{locale:currentLocale?.value}));const pickerTitle=computed(()=>`${props.label} calendar`);function restoreFocus(){nextTick$1(()=>{textFieldRef.value?.focus?.()})}function openMenu(){if(props.disabled||props.readonly)return;menuOpen.value=true}function closeMenu(){menuOpen.value=false;restoreFocus()}function clearDate(){if(props.disabled||props.readonly)return;emit(`update:modelValue`,``);closeMenu()}function selectDate(value){const nextValue=formatDateOnlyValue(value);if(!nextValue)return;emit(`update:modelValue`,nextValue);closeMenu()}function handleActivatorKeydown(event){if(![`Enter`,` `,`ArrowDown`].includes(event.key))return;event.preventDefault();openMenu()}return(_ctx,_cache)=>{return openBlock(),createBlock(VMenu,{modelValue:menuOpen.value,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>menuOpen.value=$event),"close-on-content-click":false,"open-on-click":false,location:`bottom start`,offset:6,"min-width":`0`},{activator:withCtx(({props:activatorProps})=>[createVNode(VTextField,mergeProps({...unref(attrs),...activatorProps},{id:resolvedControlId.value,ref_key:`textFieldRef`,ref:textFieldRef,"model-value":displayValue.value,label:__props.label,placeholder:__props.placeholder,"aria-label":__props.label,"aria-controls":pickerId.value,"aria-expanded":String(menuOpen.value),"aria-haspopup":`dialog`,"data-date-filter-control":resolvedControlId.value,"append-inner-icon":`$calendar`,disabled:__props.disabled,clearable:Boolean(__props.modelValue)&&!__props.disabled&&!__props.readonly,"persistent-clear":``,"persistent-placeholder":``,readonly:``,inputmode:`none`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-date-filter-control`,"onClick:control":openMenu,"onClick:appendInner":openMenu,"onClick:clear":withModifiers(clearDate,[`stop`]),onKeydown:handleActivatorKeydown}),null,16,[`id`,`model-value`,`label`,`placeholder`,`aria-label`,`aria-controls`,`aria-expanded`,`data-date-filter-control`,`disabled`,`clearable`])]),default:withCtx(()=>[createVNode(VCard,{id:pickerId.value,"aria-label":pickerTitle.value,role:`dialog`,class:`crud-list-date-filter-control__picker`,onKeydown:withKeys(withModifiers(closeMenu,[`stop`,`prevent`]),[`esc`])},{default:withCtx(()=>[createVNode(VDatePicker,{"model-value":pickerValue.value,title:pickerTitle.value,header:__props.label,disabled:__props.disabled||__props.readonly,color:`primary`,"show-adjacent-months":``,width:`100%`,"onUpdate:modelValue":selectDate},null,8,[`model-value`,`title`,`header`,`disabled`]),createVNode(VDivider),createVNode(VCardActions,null,{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,disabled:__props.disabled||__props.readonly||!__props.modelValue,onClick:clearDate},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(` Clear `,-1)])]),_:1},8,[`disabled`]),createVNode(VSpacer),createVNode(VBtn,{color:`primary`,variant:`text`,onClick:closeMenu},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(`Close`,-1)])]),_:1})]),_:1})]),_:1},8,[`id`,`aria-label`,`onKeydown`])]),_:1},8,[`modelValue`])}}});var CrudListDateFilterControl_default=_plugin_vue_export_helper_default(_sfc_main$17,[[`__scopeId`,`data-v-75e78026`]]);var _hoisted_1$7={key:0,class:`crud-list-filter-surface`};var _hoisted_2$4={class:`crud-list-filter-surface__summary`};var _hoisted_3$4={key:1,class:`crud-list-filter-surface__chips`};var _hoisted_4$3={class:`crud-list-filter-surface__controls`};var _hoisted_5$3=[`aria-label`,`data-filter-key`];var _hoisted_6$3={key:5,class:`crud-list-filter-surface__range`};var _hoisted_7$3={class:`crud-list-filter-surface__controls crud-list-filter-surface__controls--stacked`};var _hoisted_8$3=[`aria-label`,`data-filter-key`];var _hoisted_9$1={key:5,class:`crud-list-filter-surface__range`};var _sfc_main$16={__name:`CrudListFilterSurface`,props:{filters:{type:Object,default:()=>({})},runtime:{type:Object,default:null},title:{type:String,default:`Filters`}},setup(__props){const props=__props;const display=useDisplay();const sheetOpen=ref(false);const filterEntries=computed(()=>Object.values(props.filters&&typeof props.filters===`object`&&!Array.isArray(props.filters)?props.filters:{}).filter(filter=>filter?.key&&filter?.type));const runtimeValues=computed(()=>props.runtime?.values||{});const activeChips=computed(()=>Array.isArray(props.runtime?.activeChips?.value)?props.runtime.activeChips.value:[]);const hasActiveFilters=computed(()=>Boolean(props.runtime?.hasActiveFilters?.value));const shouldRender=computed(()=>filterEntries.value.length>0&&Boolean(props.runtime?.values));const isCompactLayout=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();return displayName===`xs`||displayName===`sm`});function optionItems(filter={}){return Array.isArray(filter.options)?filter.options:[]}function placeholder(filter={},fallback=``){return String(filter?.ui?.placeholder||fallback||``).trim()}function clearChip(chip={}){props.runtime?.clearChip?.(chip)}function clearFilters(){props.runtime?.clearFilters?.()}return(_ctx,_cache)=>{return shouldRender.value?(openBlock(),createElementBlock(`section`,_hoisted_1$7,[createBaseVNode(`div`,_hoisted_2$4,[isCompactLayout.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,class:`crud-list-filter-surface__open`,onClick:_cache[0]||(_cache[0]=$event=>sheetOpen.value=true)},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.title)+` `,1),activeChips.value.length>0?(openBlock(),createBlock(VChip,{key:0,class:`ml-2`,size:`x-small`,color:`primary`,variant:`flat`},{default:withCtx(()=>[createTextVNode(toDisplayString(activeChips.value.length),1)]),_:1})):createCommentVNode(``,true)]),_:1})):createCommentVNode(``,true),hasActiveFilters.value?(openBlock(),createElementBlock(`div`,_hoisted_3$4,[(openBlock(true),createElementBlock(Fragment,null,renderList(activeChips.value,chip=>{return openBlock(),createBlock(VChip,{key:chip.id,closable:``,size:`small`,variant:`tonal`,"onClick:close":$event=>clearChip(chip)},{default:withCtx(()=>[createTextVNode(toDisplayString(chip.label),1)]),_:2},1032,[`onClick:close`])}),128)),createVNode(VBtn,{size:`small`,variant:`text`,onClick:clearFilters},{default:withCtx(()=>[..._cache[4]||(_cache[4]=[createTextVNode(`Clear all`,-1)])]),_:1})])):createCommentVNode(``,true)]),!isCompactLayout.value?(openBlock(),createBlock(VSheet,{key:0,rounded:`lg`,border:``,class:`crud-list-filter-surface__panel`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_4$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(filterEntries.value,filter=>{return openBlock(),createElementBlock(Fragment,{key:filter.key},[filter.type===`flag`?(openBlock(),createBlock(VSwitch,{key:0,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,color:`primary`,density:`comfortable`,"hide-details":``,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])):filter.type===`enum`||filter.type===`enumMany`||filter.type===`presence`?(openBlock(),createBlock(VSelect,{key:1,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,items:optionItems(filter),label:filter.label,placeholder:placeholder(filter),multiple:filter.type===`enumMany`,chips:filter.type===`enumMany`,"closable-chips":filter.type===`enumMany`,clearable:``,"item-title":`label`,"item-value":`value`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`items`,`label`,`placeholder`,`multiple`,`chips`,`closable-chips`])):filter.type===`recordIdMany`?(openBlock(),createBlock(VCombobox,{key:2,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter ids`),multiple:``,chips:``,"closable-chips":``,clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`recordId`?(openBlock(),createBlock(VTextField,{key:3,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter id`),clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`dateRange`?(openBlock(),createElementBlock(`div`,{key:4,class:`crud-list-filter-surface__range crud-list-filter-surface__range--date`,role:`group`,"aria-label":`${filter.label} date range`,"data-filter-key":filter.key,"data-filter-type":`date-range`},[createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].from,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].from=$event,label:`${filter.label} from`,"control-id":`${filter.key}-from`,placeholder:placeholder(filter,`Select start date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`]),createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].to,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].to=$event,label:`${filter.label} to`,"control-id":`${filter.key}-to`,placeholder:placeholder(filter,`Select end date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])],8,_hoisted_5$3)):filter.type===`numberRange`?(openBlock(),createElementBlock(`div`,_hoisted_6$3,[createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].min,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].min=$event,label:`${filter.label} min`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`]),createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].max,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].max=$event,label:`${filter.label} max`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])])):filter.type===`date`?(openBlock(),createBlock(CrudListDateFilterControl_default,{key:6,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,"control-id":filter.key,placeholder:placeholder(filter,`Select date`),class:`crud-list-filter-surface__control`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])):createCommentVNode(``,true)],64)}),128))])]),_:1})):createCommentVNode(``,true),createVNode(VDialog,{modelValue:sheetOpen.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>sheetOpen.value=$event),"max-width":`640`,location:`bottom`},{default:withCtx(()=>[createVNode(VCard,{rounded:`lg`,class:`crud-list-filter-surface__sheet`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`d-flex align-center justify-space-between`},{default:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(__props.title),1),createVNode(VBtn,{variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>sheetOpen.value=false)},{default:withCtx(()=>[..._cache[5]||(_cache[5]=[createTextVNode(`Close`,-1)])]),_:1})]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_7$3,[(openBlock(true),createElementBlock(Fragment,null,renderList(filterEntries.value,filter=>{return openBlock(),createElementBlock(Fragment,{key:filter.key},[filter.type===`flag`?(openBlock(),createBlock(VSwitch,{key:0,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,color:`primary`,density:`comfortable`,"hide-details":``},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])):filter.type===`enum`||filter.type===`enumMany`||filter.type===`presence`?(openBlock(),createBlock(VSelect,{key:1,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,items:optionItems(filter),label:filter.label,placeholder:placeholder(filter),multiple:filter.type===`enumMany`,chips:filter.type===`enumMany`,"closable-chips":filter.type===`enumMany`,clearable:``,"item-title":`label`,"item-value":`value`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`items`,`label`,`placeholder`,`multiple`,`chips`,`closable-chips`])):filter.type===`recordIdMany`?(openBlock(),createBlock(VCombobox,{key:2,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter ids`),multiple:``,chips:``,"closable-chips":``,clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`recordId`?(openBlock(),createBlock(VTextField,{key:3,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,placeholder:placeholder(filter,`Enter id`),clearable:``,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`placeholder`])):filter.type===`dateRange`?(openBlock(),createElementBlock(`div`,{key:4,class:`crud-list-filter-surface__range crud-list-filter-surface__range--date`,role:`group`,"aria-label":`${filter.label} date range`,"data-filter-key":filter.key,"data-filter-type":`date-range`},[createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].from,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].from=$event,label:`${filter.label} from`,"control-id":`${filter.key}-from`,placeholder:placeholder(filter,`Select start date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`]),createVNode(CrudListDateFilterControl_default,{modelValue:runtimeValues.value[filter.key].to,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].to=$event,label:`${filter.label} to`,"control-id":`${filter.key}-to`,placeholder:placeholder(filter,`Select end date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])],8,_hoisted_8$3)):filter.type===`numberRange`?(openBlock(),createElementBlock(`div`,_hoisted_9$1,[createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].min,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].min=$event,label:`${filter.label} min`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`]),createVNode(VTextField,{modelValue:runtimeValues.value[filter.key].max,"onUpdate:modelValue":$event=>runtimeValues.value[filter.key].max=$event,label:`${filter.label} max`,type:`number`,variant:`outlined`,density:`comfortable`,"hide-details":`auto`},null,8,[`modelValue`,`onUpdate:modelValue`,`label`])])):filter.type===`date`?(openBlock(),createBlock(CrudListDateFilterControl_default,{key:6,modelValue:runtimeValues.value[filter.key],"onUpdate:modelValue":$event=>runtimeValues.value[filter.key]=$event,label:filter.label,"control-id":filter.key,placeholder:placeholder(filter,`Select date`)},null,8,[`modelValue`,`onUpdate:modelValue`,`label`,`control-id`,`placeholder`])):createCommentVNode(``,true)],64)}),128))])]),_:1}),createVNode(VCardActions,{class:`justify-space-between`},{default:withCtx(()=>[createVNode(VBtn,{variant:`text`,onClick:clearFilters},{default:withCtx(()=>[..._cache[6]||(_cache[6]=[createTextVNode(`Clear all`,-1)])]),_:1}),createVNode(VBtn,{color:`primary`,variant:`flat`,onClick:_cache[2]||(_cache[2]=$event=>sheetOpen.value=false)},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Apply`,-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])])):createCommentVNode(``,true)}}};var CrudListFilterSurface_default=_plugin_vue_export_helper_default(_sfc_main$16,[[`__scopeId`,`data-v-5dc35e87`]]);var _sfc_main$15={__name:`CrudListRecordActionMenu`,props:{record:{type:Object,default:()=>({})},index:{type:Number,default:0},rowActions:{type:Object,default:null},viewLocation:{type:Object,default:null},editLocation:{type:Object,default:null},showView:{type:Boolean,default:false},showEdit:{type:Boolean,default:false},buttonLabel:{type:String,default:`Actions`},buttonVariant:{type:String,default:`text`},buttonSize:{type:String,default:`small`}},setup(__props){const props=__props;const visibleRowActions=computed(()=>{if(typeof props.rowActions?.visibleActionsFor!==`function`)return[];return props.rowActions.visibleActionsFor(props.record,props.index)});const hasViewAction=computed(()=>Boolean(props.showView&&props.viewLocation));const hasEditAction=computed(()=>Boolean(props.showEdit&&props.editLocation));const hasActions=computed(()=>hasViewAction.value||hasEditAction.value||visibleRowActions.value.length>0);function isRowActionLoading(action={}){return typeof props.rowActions?.isActionLoading===`function`&&props.rowActions.isActionLoading(action,props.record,props.index)}function isRowActionDisabled(action={}){return typeof props.rowActions?.isActionDisabled!==`function`||props.rowActions.isActionDisabled(action,props.record,props.index)}function runRowAction(action={}){if(typeof props.rowActions?.execute!==`function`)return;props.rowActions.execute(action,props.record,props.index)}return(_ctx,_cache)=>{return hasActions.value?(openBlock(),createBlock(VMenu,{key:0,location:`bottom end`},{activator:withCtx(({props:menuProps})=>[createVNode(VBtn,mergeProps(menuProps,{variant:__props.buttonVariant,size:__props.buttonSize}),{default:withCtx(()=>[createTextVNode(toDisplayString(__props.buttonLabel),1)]),_:1},16,[`variant`,`size`])]),default:withCtx(()=>[createVNode(VList,{density:`compact`,"min-width":`150`},{default:withCtx(()=>[hasViewAction.value?(openBlock(),createBlock(VListItem,{key:0,title:`Open`,to:__props.viewLocation},null,8,[`to`])):createCommentVNode(``,true),hasEditAction.value?(openBlock(),createBlock(VListItem,{key:1,title:`Edit`,to:__props.editLocation},null,8,[`to`])):createCommentVNode(``,true),(hasViewAction.value||hasEditAction.value)&&visibleRowActions.value.length>0?(openBlock(),createBlock(VDivider,{key:2})):createCommentVNode(``,true),(openBlock(true),createElementBlock(Fragment,null,renderList(visibleRowActions.value,action=>{return openBlock(),createBlock(VListItem,{key:action.key,title:isRowActionLoading(action)?`${action.label}…`:action.label,"base-color":action.color,disabled:isRowActionDisabled(action),onClick:$event=>runRowAction(action)},createSlots({_:2},[action.icon?{name:`prepend`,fn:withCtx(()=>[createVNode(VIcon,{icon:action.icon},null,8,[`icon`])]),key:`0`}:void 0]),1032,[`title`,`base-color`,`disabled`,`onClick`])}),128))]),_:1})]),_:1})):createCommentVNode(``,true)}}};var _hoisted_1$6={class:`crud-screen crud-screen--operator crud-list-element d-flex flex-column ga-4`};var _hoisted_2$3={class:`crud-list-actions`};var _hoisted_3$3={class:`crud-list-toolbar`};var _hoisted_4$2={key:0,class:`pa-4`};var _hoisted_5$2={key:0,class:`crud-list-state`};var _hoisted_6$2={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_7$2={key:1,class:`crud-list-state`};var _hoisted_8$2={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_9={class:`crud-list-cards`};var _hoisted_10={class:`crud-list-card__header`};var _hoisted_11={class:`min-w-0`};var _hoisted_12={class:`crud-list-card__title`};var _hoisted_13={class:`text-caption text-medium-emphasis`};var _hoisted_14={class:`crud-list-card__fields`};var _hoisted_15={class:`crud-list-table`};var _hoisted_16={key:0,class:`crud-list-table__select`};var _hoisted_17={key:1,class:`text-right`};var _hoisted_18={key:2,class:`text-right`};var _hoisted_19={key:3,class:`text-right`};var _hoisted_20={key:0,class:`crud-list-table__select`};var _hoisted_21={key:1,class:`text-right`};var _hoisted_22={key:2,class:`text-right`};var _hoisted_23={key:3,class:`text-right`};var _hoisted_24={key:3,class:`d-flex justify-center pa-4`};var _sfc_main$14={__name:`CrudListScreen`,props:{screen:{type:Object,required:true},createLabel:{type:String,default:`New record`},loadErrorBody:{type:String,default:`Check the connection and try again.`},emptyBody:{type:String,default:`Create the first record to start using this workflow.`}},setup(__props){const props=__props;const route=useRoute();const records=computed(()=>props.screen?.records||{});const bulkActions=computed(()=>props.screen?.bulkActions||{});const rowActions=computed(()=>props.screen?.rowActions||{});const listFilters=computed(()=>props.screen?.listFilters||{});const filterRuntime=computed(()=>props.screen?.filterRuntime||null);const displayRows=computed(()=>unref(props.screen?.displayRows)||[]);const selectableRows=computed(()=>unref(props.screen?.selectableRows)||[]);const listPrimaryAction=computed(()=>unref(props.screen?.listPrimaryAction)||``);const hasBulkActions=computed(()=>Boolean(unref(bulkActions.value?.hasActions)));const hasRowActions=computed(()=>Boolean(unref(rowActions.value?.hasActions)));const hasViewUrl=computed(()=>Boolean(props.screen?.hasViewUrl));const hasEditUrl=computed(()=>Boolean(props.screen?.hasEditUrl));function resolveListRecordTitle(record){if(typeof props.screen?.resolveRecordTitle===`function`)return props.screen.resolveRecordTitle(record);return`Record`}function formatListCardValue(value){if(typeof props.screen?.formatListCardValue===`function`)return props.screen.formatListCardValue(value);return value}function resolveViewLocation(record){const path=typeof records.value?.resolveViewUrl===`function`?records.value.resolveViewUrl(record):``;return path?{path,query:route.query}:null}function resolveEditLocation(record){const path=typeof records.value?.resolveEditUrl===`function`?records.value.resolveEditUrl(record):``;return path?{path,query:route.query}:null}function hasRowActionsFor(record,index){return typeof rowActions.value?.hasVisibleActionsFor===`function`&&rowActions.value.hasVisibleActionsFor(record,index)}function isBulkRowSelected(row={}){return typeof bulkActions.value?.isRecordSelected===`function`&&bulkActions.value.isRecordSelected(row.record,row.index)}function setBulkRowSelected(row={},selected=true){if(typeof bulkActions.value?.setRecordSelected!==`function`)return;bulkActions.value.setRecordSelected(row.record,row.index,selected)}function allSelectableRowsSelected(){return selectableRows.value.length>0&&selectableRows.value.every(row=>isBulkRowSelected(row))}function someSelectableRowsSelected(){return selectableRows.value.some(row=>isBulkRowSelected(row))}function setSelectableRowsSelected(selected=true){if(typeof bulkActions.value?.setRecordSelected!==`function`)return;for(const row of selectableRows.value)bulkActions.value.setRecordSelected(row.record,row.index,selected)}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$6,[createBaseVNode(`div`,_hoisted_2$3,[createVNode(VBtn,{color:`primary`,variant:`tonal`,disabled:records.value.isFetching,onClick:records.value.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(records.value.isFetching?`Refreshing…`:`Refresh`),1)]),_:1},8,[`disabled`,`onClick`]),listPrimaryAction.value?(openBlock(),createBlock(VBtn,{key:0,class:`crud-list-primary-action`,color:`primary`,variant:`flat`,to:listPrimaryAction.value},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.createLabel),1)]),_:1},8,[`to`])):createCommentVNode(``,true)]),createVNode(VSheet,{rounded:`lg`,border:``,class:`crud-list-panel`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$3,[records.value.searchEnabled?(openBlock(),createBlock(VTextField,{key:0,modelValue:records.value.searchQuery,"onUpdate:modelValue":_cache[0]||(_cache[0]=$event=>records.value.searchQuery=$event),label:records.value.searchLabel,placeholder:records.value.searchPlaceholder,variant:`outlined`,density:`comfortable`,"hide-details":`auto`,clearable:``,class:`crud-list-search`,"aria-busy":records.value.isSearchDebouncing?`true`:void 0},null,8,[`modelValue`,`label`,`placeholder`,`aria-busy`])):createCommentVNode(``,true),createVNode(CrudListFilterSurface_default,{filters:listFilters.value,runtime:filterRuntime.value},null,8,[`filters`,`runtime`])]),createVNode(CrudListBulkActionSurface_default,{runtime:bulkActions.value},null,8,[`runtime`]),records.value.showListSkeleton?(openBlock(),createElementBlock(`div`,_hoisted_4$2,[createVNode(VSkeletonLoader,{type:`text@2, list-item-two-line@5`})])):(openBlock(),createElementBlock(Fragment,{key:1},[records.value.loadError?(openBlock(),createElementBlock(`div`,_hoisted_5$2,[createBaseVNode(`p`,_hoisted_6$2,toDisplayString(__props.loadErrorBody),1),createVNode(VBtn,{color:`primary`,variant:`tonal`,disabled:records.value.isFetching,onClick:records.value.reload},{default:withCtx(()=>[createTextVNode(toDisplayString(records.value.isFetching?`Retrying…`:`Retry`),1)]),_:1},8,[`disabled`,`onClick`])])):displayRows.value.length<1?(openBlock(),createElementBlock(`div`,_hoisted_7$2,[createBaseVNode(`p`,_hoisted_8$2,toDisplayString(__props.emptyBody),1),listPrimaryAction.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`flat`,to:listPrimaryAction.value},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.createLabel),1)]),_:1},8,[`to`])):createCommentVNode(``,true)])):(openBlock(),createElementBlock(Fragment,{key:2},[createBaseVNode(`div`,_hoisted_9,[(openBlock(true),createElementBlock(Fragment,null,renderList(displayRows.value,row=>{return openBlock(),createBlock(VSheet,{key:row.key,rounded:`lg`,border:``,class:`crud-list-card`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_10,[hasBulkActions.value&&row.selectable!==false?(openBlock(),createBlock(VCheckboxBtn,{key:0,"model-value":isBulkRowSelected(row),"aria-label":`Select ${resolveListRecordTitle(row.record)}`,class:`crud-list-card__select`,"onUpdate:modelValue":$event=>setBulkRowSelected(row,$event)},null,8,[`model-value`,`aria-label`,`onUpdate:modelValue`])):createCommentVNode(``,true),createBaseVNode(`div`,_hoisted_11,[createBaseVNode(`div`,_hoisted_12,toDisplayString(resolveListRecordTitle(row.record)),1),createBaseVNode(`div`,_hoisted_13,toDisplayString(row.recordKey),1)]),hasViewUrl.value||hasEditUrl.value||hasRowActionsFor(row.record,row.index)?(openBlock(),createBlock(_sfc_main$15,{key:1,record:row.record,index:row.index,"row-actions":rowActions.value,"show-view":hasViewUrl.value&&!row.synthetic,"show-edit":hasEditUrl.value&&!row.synthetic,"view-location":resolveViewLocation(row.record),"edit-location":resolveEditLocation(row.record)},null,8,[`record`,`index`,`row-actions`,`show-view`,`show-edit`,`view-location`,`edit-location`])):createCommentVNode(``,true)]),createBaseVNode(`div`,_hoisted_14,[renderSlot(_ctx.$slots,`card-fields`,{record:row.record,records:records.value,index:row.index,row,formatListCardValue},void 0,true)])]),_:2},1024)}),128))]),createBaseVNode(`div`,_hoisted_15,[createVNode(VTable,{density:`comfortable`},{default:withCtx(()=>[createBaseVNode(`thead`,null,[createBaseVNode(`tr`,null,[hasBulkActions.value?(openBlock(),createElementBlock(`th`,_hoisted_16,[createVNode(VCheckboxBtn,{"model-value":allSelectableRowsSelected(),indeterminate:someSelectableRowsSelected()&&!allSelectableRowsSelected(),"aria-label":`Select visible rows`,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>setSelectableRowsSelected($event))},null,8,[`model-value`,`indeterminate`])])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`table-header`,{},void 0,true),hasViewUrl.value?(openBlock(),createElementBlock(`th`,_hoisted_17)):createCommentVNode(``,true),hasEditUrl.value?(openBlock(),createElementBlock(`th`,_hoisted_18)):createCommentVNode(``,true),hasRowActions.value?(openBlock(),createElementBlock(`th`,_hoisted_19)):createCommentVNode(``,true)])]),createBaseVNode(`tbody`,null,[(openBlock(true),createElementBlock(Fragment,null,renderList(displayRows.value,row=>{return openBlock(),createElementBlock(`tr`,{key:row.key},[hasBulkActions.value?(openBlock(),createElementBlock(`td`,_hoisted_20,[row.selectable!==false?(openBlock(),createBlock(VCheckboxBtn,{key:0,"model-value":isBulkRowSelected(row),"aria-label":`Select ${resolveListRecordTitle(row.record)}`,"onUpdate:modelValue":$event=>setBulkRowSelected(row,$event)},null,8,[`model-value`,`aria-label`,`onUpdate:modelValue`])):createCommentVNode(``,true)])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`table-row`,{record:row.record,records:records.value,index:row.index,row},void 0,true),hasViewUrl.value?(openBlock(),createElementBlock(`td`,_hoisted_21,[!row.synthetic?(openBlock(),createBlock(VBtn,{key:0,size:`small`,color:`primary`,variant:`outlined`,to:resolveViewLocation(row.record),disabled:!resolveViewLocation(row.record)},{default:withCtx(()=>[..._cache[2]||(_cache[2]=[createTextVNode(` Open `,-1)])]),_:1},8,[`to`,`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true),hasEditUrl.value?(openBlock(),createElementBlock(`td`,_hoisted_22,[!row.synthetic?(openBlock(),createBlock(VBtn,{key:0,size:`small`,color:`primary`,variant:`tonal`,to:resolveEditLocation(row.record),disabled:!resolveEditLocation(row.record)},{default:withCtx(()=>[..._cache[3]||(_cache[3]=[createTextVNode(` Edit `,-1)])]),_:1},8,[`to`,`disabled`])):createCommentVNode(``,true)])):createCommentVNode(``,true),hasRowActions.value?(openBlock(),createElementBlock(`td`,_hoisted_23,[hasRowActionsFor(row.record,row.index)?(openBlock(),createBlock(_sfc_main$15,{key:0,record:row.record,index:row.index,"row-actions":rowActions.value,"button-label":`More`,"button-variant":`outlined`},null,8,[`record`,`index`,`row-actions`])):createCommentVNode(``,true)])):createCommentVNode(``,true)])}),128))])]),_:3})])],64)),records.value.hasMore?(openBlock(),createElementBlock(`div`,_hoisted_24,[createVNode(VBtn,{color:`primary`,variant:`outlined`,disabled:records.value.isLoadingMore,onClick:records.value.loadMore},{default:withCtx(()=>[createTextVNode(toDisplayString(records.value.isLoadingMore?`Loading more…`:`Load more`),1)]),_:1},8,[`disabled`,`onClick`])])):createCommentVNode(``,true)],64))]),_:3}),listPrimaryAction.value?(openBlock(),createBlock(VBtn,{key:0,class:`crud-list-fab`,color:`primary`,variant:`flat`,to:listPrimaryAction.value},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.createLabel),1)]),_:1},8,[`to`])):createCommentVNode(``,true)])}}};var CrudListScreen_default=_plugin_vue_export_helper_default(_sfc_main$14,[[`__scopeId`,`data-v-0a597f2b`]]);var _hoisted_1$5={class:`crud-screen crud-screen--operator crud-view-element d-flex flex-column ga-4`};var _hoisted_2$2={class:`crud-view-actions`};var _hoisted_3$2={key:0,class:`crud-view-state`};var _hoisted_4$1={class:`text-body-2 text-medium-emphasis mb-4`};var _hoisted_5$1={class:`crud-view-state__actions`};var _hoisted_6$1={key:1,class:`pa-4`};var _hoisted_7$1={key:2,class:`pa-4`};var _hoisted_8$1={key:0,class:`crud-view-supporting-content`};var _sfc_main$13={__name:`CrudViewScreen`,props:{screen:{type:Object,required:true},resourceSingularTitle:{type:String,default:`Record`},resourcePluralTitle:{type:String,default:`Records`}},setup(__props){const props=__props;const view=computed(()=>props.screen?.view||{});const listLocation=computed(()=>unref(props.screen?.listLocation)||null);const editLocation=computed(()=>unref(props.screen?.editLocation)||null);return(_ctx,_cache)=>{return openBlock(),createElementBlock(`section`,_hoisted_1$5,[createBaseVNode(`div`,_hoisted_2$2,[listLocation.value?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`outlined`,to:listLocation.value},{default:withCtx(()=>[createTextVNode(` Back to `+toDisplayString(__props.resourcePluralTitle),1)]),_:1},8,[`to`])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`actions`,{screen:__props.screen,view:view.value},void 0,true),editLocation.value?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`flat`,to:editLocation.value},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(` Edit `,-1)])]),_:1},8,[`to`])):createCommentVNode(``,true)]),createVNode(VSheet,{rounded:`lg`,border:``,class:`crud-view-panel`},{default:withCtx(()=>[view.value.loadError||view.value.isNotFound?(openBlock(),createElementBlock(`div`,_hoisted_3$2,[createBaseVNode(`p`,_hoisted_4$1,toDisplayString(view.value.loadError||`This ${__props.resourceSingularTitle} could not be found.`),1),createBaseVNode(`div`,_hoisted_5$1,[view.value.loadError?(openBlock(),createBlock(VBtn,{key:0,color:`primary`,variant:`tonal`,disabled:view.value.isFetching,onClick:view.value.refresh},{default:withCtx(()=>[createTextVNode(toDisplayString(view.value.isFetching?`Retrying…`:`Retry`),1)]),_:1},8,[`disabled`,`onClick`])):listLocation.value?(openBlock(),createBlock(VBtn,{key:1,color:`primary`,variant:`tonal`,to:listLocation.value},{default:withCtx(()=>[createTextVNode(` Back to `+toDisplayString(__props.resourcePluralTitle),1)]),_:1},8,[`to`])):createCommentVNode(``,true)])])):view.value.isLoading?(openBlock(),createElementBlock(`div`,_hoisted_6$1,[createVNode(VSkeletonLoader,{type:`text@2, list-item-two-line@5`})])):(openBlock(),createElementBlock(`div`,_hoisted_7$1,[renderSlot(_ctx.$slots,`before-fields`,{view:view.value},void 0,true),createVNode(VRow,{class:`crud-view-fields`},{default:withCtx(()=>[renderSlot(_ctx.$slots,`fields`,{view:view.value},void 0,true)]),_:3}),renderSlot(_ctx.$slots,`after-fields`,{view:view.value},void 0,true)]))]),_:3}),_ctx.$slots[`supporting-content`]?(openBlock(),createElementBlock(`div`,_hoisted_8$1,[renderSlot(_ctx.$slots,`supporting-content`,{view:view.value},void 0,true)])):createCommentVNode(``,true)])}}};var CrudViewScreen_default=_plugin_vue_export_helper_default(_sfc_main$13,[[`__scopeId`,`data-v-5a3a2569`]]);function normalizeCrudListBulkAction(rawAction={},index=0){if(!rawAction||typeof rawAction!==`object`||Array.isArray(rawAction))return null;const key=normalizeText$3(rawAction.key||rawAction.id||`action-${index+1}`);const label=normalizeText$3(rawAction.label||rawAction.title);if(!key||!label)return null;return Object.freeze({key,label,icon:normalizeText$3(rawAction.icon),color:normalizeText$3(rawAction.color,{fallback:`primary`}),variant:normalizeText$3(rawAction.variant,{fallback:`tonal`}),confirmLabel:normalizeText$3(rawAction.confirmLabel),run:typeof rawAction.run===`function`?rawAction.run:null,disabled:rawAction.disabled})}function defineCrudListBulkActions(actions=[]){if(!Array.isArray(actions))throw new TypeError(`defineCrudListBulkActions requires an array.`);const normalizedActions=[];const seenKeys=new Set;actions.forEach((rawAction,index)=>{const action=normalizeCrudListBulkAction(rawAction,index);if(!action||seenKeys.has(action.key))return;seenKeys.add(action.key);normalizedActions.push(action)});return Object.freeze(normalizedActions)}function normalizeCrudLookupApiPath(value=``){const normalized=normalizePathname$1(normalizeText$3(value));if(!normalized||normalized===`/`)return``;return normalized}function normalizeCrudLookupNamespace(value=``){const normalizedApiPath=normalizeCrudLookupApiPath(value);if(!normalizedApiPath)return``;return normalizedApiPath.slice(1)}function resolveCrudLookupApiPathFromNamespace(value=``){const normalizedNamespace=normalizeCrudLookupNamespace(value);if(!normalizedNamespace)return``;return`/${normalizedNamespace}`}var CRUD_LIST_FILTER_TYPE_FLAG=`flag`;var CRUD_LIST_FILTER_TYPE_ENUM=`enum`;var CRUD_LIST_FILTER_TYPE_ENUM_MANY=`enumMany`;var CRUD_LIST_FILTER_TYPE_RECORD_ID=`recordId`;var CRUD_LIST_FILTER_TYPE_RECORD_ID_MANY=`recordIdMany`;var CRUD_LIST_FILTER_TYPE_DATE=`date`;var CRUD_LIST_FILTER_TYPE_DATE_RANGE=`dateRange`;var CRUD_LIST_FILTER_TYPE_NUMBER_RANGE=`numberRange`;var CRUD_LIST_FILTER_TYPE_PRESENCE=`presence`;var CRUD_LIST_FILTER_TYPES=Object.freeze([CRUD_LIST_FILTER_TYPE_FLAG,CRUD_LIST_FILTER_TYPE_ENUM,CRUD_LIST_FILTER_TYPE_ENUM_MANY,CRUD_LIST_FILTER_TYPE_RECORD_ID,CRUD_LIST_FILTER_TYPE_RECORD_ID_MANY,CRUD_LIST_FILTER_TYPE_DATE,CRUD_LIST_FILTER_TYPE_DATE_RANGE,CRUD_LIST_FILTER_TYPE_NUMBER_RANGE,CRUD_LIST_FILTER_TYPE_PRESENCE]);var CRUD_LIST_FILTER_PRESENCE_PRESENT=`present`;var CRUD_LIST_FILTER_PRESENCE_MISSING=`missing`;var CRUD_LIST_FILTER_PRESENCE_OPTIONS=Object.freeze([Object.freeze({value:CRUD_LIST_FILTER_PRESENCE_PRESENT,label:`Present`}),Object.freeze({value:CRUD_LIST_FILTER_PRESENCE_MISSING,label:`Missing`})]);var CRUD_LIST_FILTER_INVALID_VALUES_REJECT=`reject`;var CRUD_LIST_FILTER_INVALID_VALUES_DISCARD=`discard`;var CRUD_LIST_FILTER_INVALID_VALUES_MODES=Object.freeze([CRUD_LIST_FILTER_INVALID_VALUES_REJECT,CRUD_LIST_FILTER_INVALID_VALUES_DISCARD]);var DATE_FILTER_PATTERN=/^\d{4}-\d{2}-\d{2}$/u;function parseCrudListRangeQueryExpression(value=null){const sourceValue=Array.isArray(value)?value[0]:value;if(sourceValue==null)return null;const normalized=typeof sourceValue===`number`?String(sourceValue):normalizeText$3(sourceValue);if(!normalized)return null;const separatorIndex=normalized.indexOf(`..`);if(separatorIndex<0)return deepFreeze({exact:true,start:normalized,end:normalized});const start=normalizeText$3(normalized.slice(0,separatorIndex));const end=normalizeText$3(normalized.slice(separatorIndex+2));if(!start&&!end)return null;return deepFreeze({exact:false,start,end})}function firstCrudListFilterValue(value){return Array.isArray(value)?value[0]:value}function normalizeDateFilterText(value){const normalized=normalizeText$3(firstCrudListFilterValue(value));if(!normalized||!DATE_FILTER_PATTERN.test(normalized))return``;return normalized}function normalizeCanonicalRecordIdList(value){return normalizeUniqueTextList(value,{acceptSingle:true}).map(entry=>normalizeCanonicalRecordIdText(entry,{fallback:``})).filter(Boolean)}function normalizeAllowedFilterTextValue(value,allowedValues=new Set){const normalized=normalizeText$3(firstCrudListFilterValue(value));if(!normalized||!allowedValues.has(normalized))return``;return normalized}function normalizeAllowedFilterTextValues(value,allowedValues=new Set){return normalizeUniqueTextList(value,{acceptSingle:true}).filter(entry=>allowedValues.has(entry))}function resolveCrudListFilterAllowedValues(filter={}){return new Set((Array.isArray(filter.options)?filter.options:[]).map(entry=>normalizeText$3(entry?.value)).filter(Boolean))}function normalizeCrudListDateRangeUiValue(rawValue){const source=rawValue&&typeof rawValue===`object`&&!Array.isArray(rawValue)?rawValue:null;if(source)return{from:normalizeDateFilterText(source.from),to:normalizeDateFilterText(source.to)};const parsed=parseCrudListRangeQueryExpression(rawValue);return{from:normalizeDateFilterText(parsed?.start),to:normalizeDateFilterText(parsed?.end)}}function normalizeCrudListNumberRangeUiValue(rawValue){const source=rawValue&&typeof rawValue===`object`&&!Array.isArray(rawValue)?rawValue:null;if(source)return{min:normalizeText$3(source.min),max:normalizeText$3(source.max)};const parsed=parseCrudListRangeQueryExpression(rawValue);return{min:normalizeText$3(parsed?.start),max:normalizeText$3(parsed?.end)}}function normalizeCrudListFilterUiValue(filter={},rawValue){const type=normalizeCrudListFilterType(filter.type);if(type===`flag`)return rawValue===true;if(type===`enum`)return normalizeAllowedFilterTextValue(rawValue,resolveCrudListFilterAllowedValues(filter));if(type===`presence`)return normalizeAllowedFilterTextValue(rawValue,new Set([CRUD_LIST_FILTER_PRESENCE_PRESENT,CRUD_LIST_FILTER_PRESENCE_MISSING]));if(type===`enumMany`)return normalizeAllowedFilterTextValues(rawValue,resolveCrudListFilterAllowedValues(filter));if(type===`recordId`)return normalizeCanonicalRecordIdText(rawValue,{fallback:``})||``;if(type===`recordIdMany`)return normalizeCanonicalRecordIdList(rawValue);if(type===`date`)return normalizeDateFilterText(rawValue);if(type===`dateRange`)return normalizeCrudListDateRangeUiValue(rawValue);if(type===`numberRange`)return normalizeCrudListNumberRangeUiValue(rawValue);return normalizeText$3(rawValue)}function normalizeCrudListFilterType(value=``){const normalized=normalizeText$3(value);if(CRUD_LIST_FILTER_TYPES.includes(normalized))return normalized;throw new TypeError(`Unsupported CRUD list filter type "${value}".`)}function normalizeCrudListFilterOption(rawOption=null,{context=`filter option`}={}){const source=typeof rawOption===`string`?{value:rawOption}:normalizeObject$1(rawOption);const value=normalizeText$3(source.value);if(!value)throw new TypeError(`${context} requires value.`);return Object.freeze({value,label:normalizeText$3(source.label)||value})}function normalizeCrudListFilterOptions(rawOptions=[],{context=`filter options`}={}){const source=Array.isArray(rawOptions)?rawOptions:[];const options=[];const seenValues=new Set;for(const rawOption of source){const option=normalizeCrudListFilterOption(rawOption,{context});if(seenValues.has(option.value))continue;seenValues.add(option.value);options.push(option)}return Object.freeze(options)}function normalizeCrudListFilterPresenceOptions(rawOptions=[]){const sourceOptions=normalizeCrudListFilterOptions(rawOptions,{context:`presence filter options`});if(sourceOptions.length<1)return CRUD_LIST_FILTER_PRESENCE_OPTIONS;const optionMap=new Map(sourceOptions.map(entry=>[entry.value,entry]));const presentOption=optionMap.get(CRUD_LIST_FILTER_PRESENCE_PRESENT);const missingOption=optionMap.get(CRUD_LIST_FILTER_PRESENCE_MISSING);if(!presentOption||!missingOption)throw new TypeError(`Presence filter options must contain both "present" and "missing" values.`);return Object.freeze([presentOption,missingOption])}function normalizeCrudListFilterLookup(rawLookup=null){if(rawLookup==null)return null;if(!rawLookup||typeof rawLookup!==`object`||Array.isArray(rawLookup))throw new TypeError(`CRUD list filter lookup must be an object.`);const source=normalizeObject$1(rawLookup);const namespace=normalizeCrudLookupNamespace(source.namespace);const apiSuffix=normalizeCrudLookupApiPath(source.apiSuffix||source.apiPath)||resolveCrudLookupApiPathFromNamespace(namespace);const labelKey=normalizeText$3(source.labelKey);const valueKey=normalizeText$3(source.valueKey)||`id`;return Object.freeze({...namespace?{namespace}:{},...apiSuffix?{apiSuffix}:{},...labelKey?{labelKey}:{},valueKey})}function resolveCrudListFilterOptionSet(rawDefinition={},type=``){if(type===`enum`||type===`enumMany`){const options=normalizeCrudListFilterOptions(rawDefinition.options,{context:`${type} filter options`});if(options.length<1)throw new TypeError(`${type} filters require at least one option.`);return options}if(type===`presence`)return normalizeCrudListFilterPresenceOptions(rawDefinition.options);return Object.freeze([])}function resolveCrudListFilterQueryKeys(definition={}){return Object.freeze([normalizeText$3(definition.queryKey)].filter(Boolean))}function normalizeCrudListFilterDefinition(rawKey=``,rawDefinition=null){const key=normalizeText$3(rawKey);if(!key)throw new TypeError(`CRUD list filter definitions require non-empty keys.`);if(!rawDefinition||typeof rawDefinition!==`object`||Array.isArray(rawDefinition))throw new TypeError(`CRUD list filter "${key}" must be an object.`);const source=normalizeObject$1(rawDefinition);const type=normalizeCrudListFilterType(source.type);const label=normalizeText$3(source.label)||key;const options=resolveCrudListFilterOptionSet(source,type);const lookup=normalizeCrudListFilterLookup(source.lookup);const chipLabel=typeof source.chipLabel===`function`?source.chipLabel:null;const ui=source.ui&&typeof source.ui===`object`&&!Array.isArray(source.ui)?deepFreeze({...source.ui}):null;const meta=source.meta&&typeof source.meta===`object`&&!Array.isArray(source.meta)?deepFreeze({...source.meta}):null;const hasDefaultValue=Object.hasOwn(source,`defaultValue`);const defaultValue=hasDefaultValue?deepFreeze(normalizeCrudListFilterUiValue({type,options},source.defaultValue)):void 0;if(type===`dateRange`){if(normalizeText$3(source.fromKey)||normalizeText$3(source.toKey))throw new TypeError(`CRUD list filter "${key}" uses unsupported split range keys. Use queryKey.`)}if(type===`numberRange`){if(normalizeText$3(source.minKey)||normalizeText$3(source.maxKey))throw new TypeError(`CRUD list filter "${key}" uses unsupported split range keys. Use queryKey.`)}return Object.freeze({key,type,label,queryKey:normalizeText$3(source.queryKey)||key,options,lookup,chipLabel,ui,meta,...hasDefaultValue?{defaultValue}:{}})}function defineCrudListFilters(definitions={}){if(!definitions||typeof definitions!==`object`||Array.isArray(definitions))throw new TypeError(`defineCrudListFilters requires an object.`);const source=normalizeObject$1(definitions);const normalized={};const seenFilterKeys=new Set;const seenQueryKeys=new Map;for(const[rawKey,rawDefinition]of Object.entries(source)){const filter=normalizeCrudListFilterDefinition(rawKey,rawDefinition);if(seenFilterKeys.has(filter.key))throw new TypeError(`Duplicate CRUD list filter key "${filter.key}".`);seenFilterKeys.add(filter.key);for(const queryKey of resolveCrudListFilterQueryKeys(filter)){const seenBy=seenQueryKeys.get(queryKey);if(seenBy)throw new TypeError(`CRUD list filters "${seenBy}" and "${filter.key}" both use query key "${queryKey}".`);seenQueryKeys.set(queryKey,filter.key)}normalized[filter.key]=filter}return deepFreeze(normalized)}function normalizeCrudListRowAction(rawAction={},index=0){if(!rawAction||typeof rawAction!==`object`||Array.isArray(rawAction))return null;const key=normalizeText$3(rawAction.key||rawAction.id||`action-${index+1}`);const label=normalizeText$3(rawAction.label||rawAction.title);if(!key||!label)return null;return Object.freeze({key,label,icon:normalizeText$3(rawAction.icon),color:normalizeText$3(rawAction.color,{fallback:`primary`}),run:typeof rawAction.run===`function`?rawAction.run:null,visible:rawAction.visible,disabled:rawAction.disabled,loading:rawAction.loading})}function defineCrudListRowActions(actions=[]){if(!Array.isArray(actions))throw new TypeError(`defineCrudListRowActions requires an array.`);const normalizedActions=[];const seenKeys=new Set;actions.forEach((rawAction,index)=>{const action=normalizeCrudListRowAction(rawAction,index);if(!action||seenKeys.has(action.key))return;seenKeys.add(action.key);normalizedActions.push(action)});return Object.freeze(normalizedActions)}function isObjectLike(value){return value!==null&&typeof value===`object`}function deepClone(value){try{return JSON.parse(JSON.stringify(value))}catch{return null}}function captureModelSnapshot(model){if(!isObjectLike(model))return null;return deepClone(model)}function restoreModelSnapshot(model,snapshot){if(!isObjectLike(model)||!isObjectLike(snapshot))return;if(Array.isArray(model)&&Array.isArray(snapshot)){model.splice(0,model.length,...snapshot);return}if(Array.isArray(model)||Array.isArray(snapshot))return;for(const key of Object.keys(model))if(!Object.prototype.hasOwnProperty.call(snapshot,key))delete model[key];for(const[key,value]of Object.entries(snapshot))model[key]=value}function watchResourceModelState({resource,model,mapLoadedToModel,resolveMapContext=null}={}){const modelSnapshot=captureModelSnapshot(model);watch(()=>resource?.query?.isPending?.value,isPending=>{if(!isPending||!modelSnapshot)return;restoreModelSnapshot(model,modelSnapshot)},{immediate:true});watch(()=>resource?.data?.value,payload=>{if(!payload||typeof mapLoadedToModel!==`function`)return;mapLoadedToModel(model,payload,typeof resolveMapContext===`function`?resolveMapContext():{})},{immediate:true})}function useAddEditCore({model,resource,queryKey,canSave,fieldBag,feedback,input,mapLoadedToModel,buildRawPayload,buildSavePayload,onSaveSuccess,validationFeedback=true,messages={}}={}){const queryClient=useQueryClient();watchResourceModelState({resource,model,mapLoadedToModel,resolveMapContext(){return{queryClient,resource}}});const submitting=ref(false);const saving=computed(()=>Boolean(submitting.value||resource?.isSaving?.value));const fieldErrors=fieldBag?.errors;const message=feedback?.message;const messageType=feedback?.messageType;const validationAttempted=ref(false);const validationErrors=computed(()=>{if(!validationAttempted.value||!input)return{};const result=validateOperationInput({input,rawPayload:resolveRawPayload()});return result.ok?{}:resolveFieldErrors(result.failure)});function resolveRawPayload(){return typeof buildRawPayload===`function`?buildRawPayload(model,{queryClient,resource}):{}}function resetValidation(){validationAttempted.value=false;fieldBag?.clear?.()}async function submit(){if(!canSave?.value||saving.value)return;feedback?.clear?.();fieldBag?.clear?.();validationAttempted.value=true;const rawPayload=resolveRawPayload();const validationResult=validateOperationInput({input,rawPayload,fieldBag,feedback:validationFeedback===false?null:feedback,validationMessage:String(messages.validation||`Validation failed.`)});if(!validationResult.ok)return;const{parsedInput}=validationResult;const savePayload=typeof buildSavePayload===`function`?buildSavePayload(parsedInput,{rawPayload,queryClient,resource}):parsedInput;try{submitting.value=true;const queryKeySnapshot=queryKey?.value;const payload=await resource.save(savePayload);if(typeof mapLoadedToModel===`function`)mapLoadedToModel(model,payload,{queryClient,resource});if(queryKeySnapshot!==void 0)queryClient.setQueryData(queryKeySnapshot,payload);if(typeof onSaveSuccess===`function`)await onSaveSuccess(payload,{queryClient,parsed:parsedInput,rawPayload,savePayload,resource});feedback?.success?.(String(messages.saveSuccess||`Saved.`))}catch(error){fieldBag?.apply?.(resolveFieldErrors(error));feedback?.error?.(error,String(messages.saveError||`Unable to save.`))}finally{submitting.value=false}}return Object.freeze({saving,fieldErrors,message,messageType,validationAttempted,validationErrors,resetValidation,submit})}var WEB_OPERATION_ADAPTER_ID=`http-web-default`;function createWebOperationAdapter(){return Object.freeze({id:WEB_OPERATION_ADAPTER_ID,useOperationScope(options={}){return useOperationScope(options)}})}var defaultWebOperationAdapter=createWebOperationAdapter();function resolveOperationAdapter(adapter,{context=`http-web operation adapter`}={}){if(adapter==null)return defaultWebOperationAdapter;if(!adapter||typeof adapter!==`object`||Array.isArray(adapter))throw new TypeError(`${context} must be an object when provided.`);if(typeof adapter.useOperationScope!==`function`)throw new TypeError(`${context} must expose useOperationScope(options).`);return adapter}function toResolvedRecordId({routeParams,recordIdParam,routeRecordId}){const explicitRecordId=toRouteParamValue(typeof routeRecordId===`function`?routeRecordId():unref(routeRecordId));if(explicitRecordId)return explicitRecordId;return toRouteParamValue(routeParams[recordIdParam])}function resolveSavedRecordId(payload,saveRecordIdSelector){const sourcePayload=asPlainObject(payload);if(typeof saveRecordIdSelector===`function`)return toRouteParamValue(saveRecordIdSelector(sourcePayload));return toRouteParamValue(sourcePayload.id)}function createAddEditUiRuntime({recordIdParam=`recordId`,routeParams=null,routeParamNames=null,routePath=``,routeRecordId=null,apiUrlTemplate=``,viewUrlTemplate=``,listUrlTemplate=``,saveRecordIdSelector=null}={}){const normalizedRecordIdParam=normalizeRouteParamName(recordIdParam,{context:`useAddEdit recordIdParam`});const normalizedApiUrlTemplate=String(apiUrlTemplate||``).trim();const normalizedViewUrlTemplate=String(viewUrlTemplate||``).trim();const normalizedListUrlTemplate=String(listUrlTemplate||``).trim();function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const currentRouteRecordId=toResolvedRecordId({routeParams:currentRouteParams,recordIdParam:normalizedRecordIdParam,routeRecordId});const resolvedRecordId=toRouteParamValue(sourceParams[normalizedRecordIdParam])||currentRouteRecordId;sourceParams[normalizedRecordIdParam]=resolvedRecordId;const currentPathname=resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:normalizedRecordIdParam,anchorParamValue:currentRouteRecordId,anchorMode:`after`});return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname})}const recordId=computed(()=>toResolvedRecordId({routeParams:resolveRouteParamsSource(routeParams),recordIdParam:normalizedRecordIdParam,routeRecordId}));const apiSuffix=computed(()=>resolveTemplatePath(normalizedApiUrlTemplate));const listUrl=computed(()=>resolveTemplatePath(normalizedListUrlTemplate));const cancelUrl=computed(()=>resolveTemplatePath(normalizedViewUrlTemplate)||listUrl.value);function resolveParams(urlTemplate=``,extraParams={}){return resolveTemplatePath(urlTemplate,extraParams)}function resolveViewUrl(recordIdLike=``){const targetRecordId=toRouteParamValue(recordIdLike);if(!targetRecordId)return``;return resolveTemplatePath(normalizedViewUrlTemplate,{[normalizedRecordIdParam]:targetRecordId})}function resolveSavedViewUrl(payload={}){const targetRecordId=resolveSavedRecordId(payload,saveRecordIdSelector);if(!targetRecordId)return``;return resolveViewUrl(targetRecordId)}return Object.freeze({recordId,apiSuffix,listUrl,cancelUrl,resolveParams,resolveViewUrl,resolveSavedViewUrl})}var QUERY_PARAM_BINDING_TYPE_TEXT=`text`;var QUERY_PARAM_BINDING_TYPE_BOOLEAN=`boolean`;var QUERY_PARAM_BINDING_TYPE_NUMBER=`number`;var QUERY_PARAM_BINDING_TYPE_ARRAY=`array`;var QUERY_PARAM_BINDING_TYPE_DATE=`date`;function normalizeListSyncToRouteConfig(syncToRoute=false,{defaultSearchParam=`q`}={}){const source=syncToRoute===true?{}:asPlainObject(syncToRoute);const requested=syncToRoute===true||Object.keys(source).length>0;const queryParamBlacklist=Object.freeze(normalizeUniqueTextList(source.queryParamBlacklist));if(!requested||source.enabled===false)return Object.freeze({enabled:false,mode:`replace`,syncSearch:false,syncQueryParams:false,hydrateFromRoute:false,searchParam:normalizeText$3(defaultSearchParam)||`q`,queryParamBlacklist});const mode=normalizeText$3(source.mode).toLowerCase()===`push`?`push`:`replace`;const searchParam=normalizeText$3(source.searchParam)||normalizeText$3(defaultSearchParam)||`q`;return Object.freeze({enabled:true,mode,syncSearch:source.search!==false,syncQueryParams:source.queryParams!==false,hydrateFromRoute:source.hydrateFromRoute!==false,searchParam,queryParamBlacklist})}function normalizeQueryParamKey(value){return normalizeText$3(value)}function normalizeQueryParamValues(value){const list=Array.isArray(value)?value:[value];const normalizedValues=[];for(const entry of list){const resolvedEntry=unref(entry);if(resolvedEntry==null)continue;if(typeof resolvedEntry===`boolean`){if(resolvedEntry)normalizedValues.push(`1`);continue}if(typeof resolvedEntry===`number`){if(Number.isFinite(resolvedEntry))normalizedValues.push(String(resolvedEntry));continue}if(resolvedEntry instanceof Date){if(!Number.isNaN(resolvedEntry.getTime()))normalizedValues.push(resolvedEntry.toISOString());continue}const normalizedText=normalizeText$3(resolvedEntry);if(normalizedText)normalizedValues.push(normalizedText)}return normalizedValues}function resolveQueryParamsInput(queryParams,context={}){if(typeof queryParams===`function`)return asPlainObject(queryParams(context));return asPlainObject(unref(queryParams))}function resolveQueryParamBindingType(value){if(Array.isArray(value))return QUERY_PARAM_BINDING_TYPE_ARRAY;if(typeof value===`boolean`)return QUERY_PARAM_BINDING_TYPE_BOOLEAN;if(typeof value===`number`)return QUERY_PARAM_BINDING_TYPE_NUMBER;if(value instanceof Date)return QUERY_PARAM_BINDING_TYPE_DATE;return QUERY_PARAM_BINDING_TYPE_TEXT}function resolveArrayQueryParamItemType(values=[]){const list=Array.isArray(values)?values:[];for(const entry of list){if(entry==null)continue;if(typeof entry===`boolean`)return QUERY_PARAM_BINDING_TYPE_BOOLEAN;if(typeof entry===`number`)return QUERY_PARAM_BINDING_TYPE_NUMBER;if(entry instanceof Date)return QUERY_PARAM_BINDING_TYPE_DATE;return QUERY_PARAM_BINDING_TYPE_TEXT}return QUERY_PARAM_BINDING_TYPE_TEXT}function createWritableQueryParamBinding({source={},rawKey=``,rawValue=null,key=``,resolveRouteValue=null}={}){const valueSourceIsRef=isRef(rawValue);const read=valueSourceIsRef?()=>rawValue.value:()=>source[rawKey];const write=valueSourceIsRef?nextValue=>{rawValue.value=nextValue}:nextValue=>{source[rawKey]=nextValue};const currentValue=read();const valueType=resolveQueryParamBindingType(currentValue);return{key,valueType,arrayItemType:valueType===QUERY_PARAM_BINDING_TYPE_ARRAY?resolveArrayQueryParamItemType(currentValue):QUERY_PARAM_BINDING_TYPE_TEXT,get:read,set:write,resolveRouteValue}}function resolveQueryParamDescriptors(queryParams,context={},{routeValueResolvers=null}={}){const source=resolveQueryParamsInput(queryParams,context);const resolvers=asPlainObject(unref(routeValueResolvers));const descriptorsByKey=new Map;const canWriteToSource=typeof queryParams!==`function`;for(const[rawKey,rawValue]of Object.entries(source)){const key=normalizeQueryParamKey(rawKey);if(!key)continue;const values=normalizeQueryParamValues(rawValue);const current=descriptorsByKey.get(key)||{key,values:[],binding:null};if(values.length>0)current.values.push(...values);if(!current.binding&&canWriteToSource)current.binding=createWritableQueryParamBinding({source,rawKey,rawValue,key,resolveRouteValue:typeof resolvers[key]===`function`?resolvers[key]:null});descriptorsByKey.set(key,current)}return[...descriptorsByKey.values()].sort((left,right)=>left.key.localeCompare(right.key))}function resolveActiveQueryParamEntries(descriptors=[]){return(Array.isArray(descriptors)?descriptors:[]).filter(descriptor=>Array.isArray(descriptor?.values)&&descriptor.values.length>0).map(descriptor=>({key:descriptor.key,values:[...descriptor.values]}))}function resolveWritableQueryParamBindings(descriptors=[]){return(Array.isArray(descriptors)?descriptors:[]).map(descriptor=>descriptor?.binding||null).filter(Boolean)}function buildQueryParamEntriesToken(entries=[]){const normalizedEntries=Array.isArray(entries)?entries:[];if(normalizedEntries.length<1)return``;return normalizedEntries.map(entry=>{const key=normalizeQueryParamKey(entry?.key);const values=Array.isArray(entry?.values)?entry.values.map(value=>normalizeText$3(value)).filter(Boolean):[];if(!key||values.length<1)return``;return`${key}=${values.join(`,`)}`}).filter(Boolean).join(`&`)}function firstRouteQueryValue(value){if(Array.isArray(value))return value[0];return value}function normalizeRouteQueryValues(value){return(Array.isArray(value)?value:[value]).map(entry=>normalizeText$3(entry)).filter(Boolean)}function parseRouteBooleanValue(value,fallback=false){if(value===void 0)return fallback;if(value===null||value===``)return true;try{return normalizeBoolean(firstRouteQueryValue(value))}catch{return fallback}}function parseRouteNumberValue(value,fallback=null){if(value===void 0)return null;const normalized=normalizeText$3(firstRouteQueryValue(value));if(!normalized)return null;const parsed=Number(normalized);if(!Number.isFinite(parsed))return fallback;return parsed}function parseRouteDateValue(value,fallback=null){if(value===void 0)return null;const normalized=normalizeText$3(firstRouteQueryValue(value));if(!normalized)return null;const parsed=new Date(normalized);if(Number.isNaN(parsed.getTime()))return fallback;return parsed}function parseRouteQueryItemValue(value,itemType=QUERY_PARAM_BINDING_TYPE_TEXT,fallback=null){if(itemType===QUERY_PARAM_BINDING_TYPE_BOOLEAN)try{return normalizeBoolean(value)}catch{return fallback}if(itemType===QUERY_PARAM_BINDING_TYPE_NUMBER){const numeric=Number(value);return Number.isFinite(numeric)?numeric:fallback}if(itemType===QUERY_PARAM_BINDING_TYPE_DATE){const date=new Date(value);return Number.isNaN(date.getTime())?fallback:date}return normalizeText$3(value)||fallback}function parseRouteBindingValue(binding,routeQueryValue,context={}){if(typeof binding?.resolveRouteValue===`function`)return binding.resolveRouteValue(routeQueryValue,context);const valueType=normalizeText$3(binding?.valueType).toLowerCase();if(valueType===QUERY_PARAM_BINDING_TYPE_BOOLEAN)return parseRouteBooleanValue(routeQueryValue,false);if(valueType===QUERY_PARAM_BINDING_TYPE_NUMBER)return parseRouteNumberValue(routeQueryValue,typeof binding?.get===`function`?binding.get():null);if(valueType===QUERY_PARAM_BINDING_TYPE_DATE)return parseRouteDateValue(routeQueryValue,typeof binding?.get===`function`?binding.get():null);if(valueType===QUERY_PARAM_BINDING_TYPE_ARRAY){const itemType=normalizeText$3(binding?.arrayItemType).toLowerCase()||QUERY_PARAM_BINDING_TYPE_TEXT;return normalizeRouteQueryValues(routeQueryValue).map(value=>parseRouteQueryItemValue(value,itemType,null)).filter(value=>value!=null&&!(typeof value===`string`&&!value))}return normalizeText$3(firstRouteQueryValue(routeQueryValue))}function areQueryParamBindingItemsEqual(left,right){if(left===right)return true;if(left instanceof Date&&right instanceof Date)return left.getTime()===right.getTime();return Object.is(left,right)}function areQueryParamBindingValuesEqual(left,right){if(left===right)return true;if(left instanceof Date&&right instanceof Date)return left.getTime()===right.getTime();if(!Array.isArray(left)||!Array.isArray(right))return Object.is(left,right);if(left.length!==right.length)return false;for(let index=0;index<left.length;index+=1)if(!areQueryParamBindingItemsEqual(left[index],right[index]))return false;return true}function buildRouteQueryCompareToken(query={}){const source=asPlainObject(query);const keys=Object.keys(source).sort();const parts=[];for(const key of keys){const normalizedKey=normalizeQueryParamKey(key);if(!normalizedKey)continue;const normalizedValues=normalizeRouteQueryValues(source[key]);if(normalizedValues.length<1)continue;parts.push(`${normalizedKey}=${normalizedValues.join(`,`)}`)}return parts.join(`&`)}function mergeManagedQueryParamKeyHistory(history=[],keys=[]){const merged=new Set;for(const key of Array.isArray(history)?history:[]){const normalized=normalizeQueryParamKey(key);if(normalized)merged.add(normalized)}for(const key of Array.isArray(keys)?keys:[]){const normalized=normalizeQueryParamKey(key);if(normalized)merged.add(normalized)}return[...merged].sort((left,right)=>left.localeCompare(right))}function resolveRouteSyncManagedKeys({searchEnabled=false,searchParam=`q`,syncSearch=false,syncQueryParams=false,declaredKeys=[],keyHistory=[]}={}){const managed=new Set;if(syncSearch===true&&searchEnabled===true){const normalizedSearchParam=normalizeQueryParamKey(searchParam);if(normalizedSearchParam)managed.add(normalizedSearchParam)}if(syncQueryParams===true)for(const key of mergeManagedQueryParamKeyHistory(keyHistory,declaredKeys))managed.add(key);return[...managed].sort((left,right)=>left.localeCompare(right))}function resolveRequestQueryContext(context=null){const source=unref(context);return source&&typeof source===`object`&&!Array.isArray(source)?source:{}}function resolveRequestQueryBaseKey(sourceQueryKey=null){const source=unref(sourceQueryKey);if(Array.isArray(source))return[...source];if(source==null)return[];return[source]}function resolveRequestFieldsets(requestFieldsets=null,context={}){const source=typeof requestFieldsets===`function`?requestFieldsets(context):unref(requestFieldsets);return normalizeJsonApiFieldsets(source)}function appendRequestQueryValue(target={},key=``,values=[]){const normalizedKey=String(key||``).trim();const normalizedValues=(Array.isArray(values)?values:[]).map(value=>String(value??``).trim()).filter(Boolean);if(!normalizedKey||normalizedValues.length<1)return;const currentValue=target[normalizedKey];if(currentValue===void 0){target[normalizedKey]=normalizedValues.length===1?normalizedValues[0]:[...normalizedValues];return}target[normalizedKey]=[...Array.isArray(currentValue)?[...currentValue]:[currentValue],...normalizedValues]}function buildRequestQueryObject(entries=[],{fieldsets=null}={}){const sourceEntries=Array.isArray(entries)?entries:[];const query={};for(const entry of sourceEntries)appendRequestQueryValue(query,entry?.key,entry?.values);const normalizedFieldsets=normalizeJsonApiFieldsets(fieldsets);return Object.freeze({...query,...Object.keys(normalizedFieldsets).length>0?{fields:normalizedFieldsets}:{}})}function createRequestQueryRuntime({requestQueryParams=null,requestFieldsets=null,context=null,sourceQueryKey=null}={}){const requestQueryParamDescriptors=computed(()=>{return resolveQueryParamDescriptors(requestQueryParams,resolveRequestQueryContext(context))});const activeRequestQueryParamEntries=computed(()=>{return resolveActiveQueryParamEntries(requestQueryParamDescriptors.value)});const activeRequestQueryParamsToken=computed(()=>{return buildQueryParamEntriesToken(activeRequestQueryParamEntries.value)});const activeRequestFieldsets=computed(()=>{return resolveRequestFieldsets(requestFieldsets,resolveRequestQueryContext(context))});const activeRequestFieldsetsToken=computed(()=>{return buildJsonApiFieldsetsToken(activeRequestFieldsets.value)});const queryKeyParts=computed(()=>{const parts=[];if(activeRequestQueryParamsToken.value)parts.push(`__request_query__`,activeRequestQueryParamsToken.value);if(activeRequestFieldsetsToken.value)parts.push(`__request_fieldsets__`,activeRequestFieldsetsToken.value);return Object.freeze(parts)});const queryKey=computed(()=>{if(queryKeyParts.value.length<1)return unref(sourceQueryKey);return[...resolveRequestQueryBaseKey(sourceQueryKey),...queryKeyParts.value]});const requestQuery=computed(()=>{const query=buildRequestQueryObject(activeRequestQueryParamEntries.value,{fieldsets:activeRequestFieldsets.value});if(Object.keys(query).length<1)return null;return query});return Object.freeze({requestQueryParamDescriptors,activeRequestQueryParamEntries,activeRequestQueryParamsToken,activeRequestFieldsets,activeRequestFieldsetsToken,queryKeyParts,queryKey,requestQuery})}function useAddEdit({ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,resource=null,apiSuffix=``,queryKeyFactory=null,viewPermissions=[],savePermissions=[],readMethod=`GET`,readEnabled=true,writeMethod=`PATCH`,client=null,transport=null,requestRecovery=null,requestRecoveryLabel=`Resource`,placementSource=`http-web.add-edit`,fallbackLoadError=`Unable to load resource.`,fallbackSaveError=`Unable to save resource.`,fieldErrorKeys=[],clearOnRouteChange=true,model,input,mapLoadedToModel,buildRawPayload,buildSavePayload,onSaveSuccess,validationFeedback=true,requestQueryParams=null,recordIdParam=`recordId`,routeParams=null,routeRecordId=null,apiUrlTemplate=``,viewUrlTemplate=``,listUrlTemplate=``,saveRecordIdSelector=null,messages={},realtime=null,adapter=null}={}){const route=useRoute();const addEditUiRuntime=createAddEditUiRuntime({recordIdParam,routeParams:routeParams??computed(()=>route?.params||{}),routeParamNames:computed(()=>resolveRouteParamNamesInOrder(route)),routePath:computed(()=>route?.path||``),routeRecordId,apiUrlTemplate,viewUrlTemplate,listUrlTemplate,saveRecordIdSelector});const effectiveApiSuffix=String(apiUrlTemplate||``).trim()?addEditUiRuntime.apiSuffix:apiSuffix;const operationScope=resolveOperationAdapter(adapter,{context:`useAddEdit adapter`}).useOperationScope({ownershipFilter,surfaceId,access,placementSource,apiSuffix:effectiveApiSuffix,model,readEnabled,queryKeyFactory,permissionSets:{view:viewPermissions,save:savePermissions},realtime});const routeContext=operationScope.routeContext;const effectiveMessages={...resolveResourceMessages(resource,{validation:`Fix invalid values and try again.`,saveSuccess:`Saved.`,saveError:`Unable to save.`}),...messages&&typeof messages===`object`?messages:{}};const canView=operationScope.permissionGate(`view`);const canSave=operationScope.permissionGate(`save`);const queryCanRun=operationScope.queryCanRun(canView);const queryParamsContext=computed(()=>{return Object.freeze({surfaceId:operationScope.routeContext.currentSurfaceId.value,scopeParamValue:operationScope.scopeParamValue.value,ownershipFilter:operationScope.normalizedOwnershipFilter,recordId:addEditUiRuntime.recordId.value,model})});const requestQueryRuntime=createRequestQueryRuntime({requestQueryParams,context:queryParamsContext,sourceQueryKey:operationScope.queryKey});const endpointResource=useEndpointResource({queryKey:requestQueryRuntime.queryKey,path:operationScope.apiPath,enabled:queryCanRun,client,readMethod,writeMethod,readQuery:requestQueryRuntime.requestQuery,transport,requestRecovery,requestRecoveryLabel,fallbackLoadError,fallbackSaveError:String(fallbackSaveError||effectiveMessages.saveError||`Unable to save resource.`)});const feedback=useUiFeedback({source:`${placementSource}.feedback`});const fieldBag=useFieldErrorBag(fieldErrorKeys);const addEdit=useAddEditCore({model,resource:endpointResource,queryKey:requestQueryRuntime.queryKey,canSave,fieldBag,feedback,input,mapLoadedToModel,buildRawPayload,buildSavePayload,onSaveSuccess,validationFeedback,messages:effectiveMessages});setupRouteChangeCleanup({enabled:clearOnRouteChange,route:routeContext.route,feedback,onClear:addEdit.resetValidation});const isInitialLoading=operationScope.isLoading(endpointResource.isInitialLoading);const isFetching=operationScope.isLoading(endpointResource.isFetching);const isRefetching=computed(()=>Boolean(isFetching.value&&!isInitialLoading.value));const isFieldLocked=computed(()=>Boolean(!canSave.value||addEdit.saving.value||isRefetching.value));const isSubmitDisabled=computed(()=>Boolean(isInitialLoading.value||isRefetching.value||!canSave.value||addEdit.saving.value));const loadError=operationScope.loadError(endpointResource.loadError);const isLoading=operationScope.isLoading(endpointResource.isLoading);const canRetryLoad=computed(()=>Boolean(readEnabled!==false&&endpointResource?.reload));async function refresh(){if(!canRetryLoad.value)return null;return endpointResource.reload()}setupOperationErrorReporting({source:`${placementSource}.load`,loadError,dedupeWindowMs:0,loadActionFactory:()=>canRetryLoad.value?{label:`Retry`,dismissOnRun:true,handler(){refresh()}}:null});return proxyRefs({canView,canSave,loadError,isInitialLoading,isFetching,isRefetching,isFieldLocked,isSubmitDisabled,canRetryLoad,isLoading,isSaving:addEdit.saving,fieldErrors:addEdit.fieldErrors,validationAttempted:addEdit.validationAttempted,validationErrors:addEdit.validationErrors,resetValidation:addEdit.resetValidation,message:addEdit.message,messageType:addEdit.messageType,submit:addEdit.submit,refresh,resource:endpointResource,recordId:addEditUiRuntime.recordId,listUrl:addEditUiRuntime.listUrl,cancelUrl:addEditUiRuntime.cancelUrl,resolveParams:addEditUiRuntime.resolveParams,resolveViewUrl:addEditUiRuntime.resolveViewUrl,resolveSavedViewUrl:addEditUiRuntime.resolveSavedViewUrl})}var DEFAULT_LIST_LIMIT=20;function buildListRequestOptions({requestOptions=null,transport=null,pageParam=null}={}){const resolvedOptions={method:`GET`,...resolveRequestOptionsObject(requestOptions)};const sourceQuery=resolvedOptions.query&&typeof resolvedOptions.query===`object`&&!Array.isArray(resolvedOptions.query)?{...resolvedOptions.query}:{};if(!Object.hasOwn(sourceQuery,`limit`)&&!Object.hasOwn(sourceQuery,`page[limit]`))sourceQuery.limit=DEFAULT_LIST_LIMIT;if(pageParam!==null&&pageParam!==void 0&&pageParam!==``)sourceQuery.cursor=String(pageParam);if(Object.keys(sourceQuery).length>0)resolvedOptions.query=sourceQuery;else delete resolvedOptions.query;if(transport&&typeof transport===`object`)resolvedOptions.transport=transport;return resolvedOptions}function resolveRequestOptionsObject(value=null){const source=unref(value);return asPlainObject(source)}function resolveListRequestMethod(requestOptions=null){return String(resolveRequestOptionsObject(requestOptions).method||`GET`).toUpperCase()}function useListCore({queryKey,path=``,enabled=true,client=null,transport=null,initialPageParam=null,getNextPageParam,selectItems,requestOptions=null,queryOptions=null,requestRecovery=null,requestRecoveryLabel=`List`,fallbackLoadError=`Unable to load list.`}={}){const activeClient=client||getHttpWebClient();if(!activeClient||typeof activeClient.request!==`function`)throw new TypeError(`useListCore requires a client with request().`);const normalizedPath=computed(()=>resolveTextRef(path));const queryEnabled=computed(()=>resolveEnabledRef(enabled)&&Boolean(normalizedPath.value));return usePagedCollection({queryKey,initialPageParam,enabled:queryEnabled,queryFn:async({pageParam,signal})=>{const requestPath=normalizedPath.value;if(!requestPath)throw new Error(`List path is required.`);const options=buildListRequestOptions({requestOptions,transport,pageParam});options.signal=options.signal?AbortSignal.any([signal,options.signal]):signal;return activeClient.request(requestPath,options)},getNextPageParam,selectItems,queryOptions:mergeRequestRecoveryQueryMeta(queryOptions,requestRecovery,{label:requestRecoveryLabel,method:resolveListRequestMethod(requestOptions)}),fallbackLoadError})}function resolveRecordId$1(record,recordIdSelector){const item=asPlainObject(record);if(typeof recordIdSelector===`function`)return toRouteParamValue(recordIdSelector(item));return toRouteParamValue(item.id)}function createListUiRuntime({items,isInitialLoading,recordIdParam=`recordId`,recordIdSelector=null,routeParams=null,routeParamNames=null,routePath=``,viewUrlTemplate=``,editUrlTemplate=``}={}){const normalizedRecordIdParam=normalizeRouteParamName(recordIdParam,{context:`useList recordIdParam`});const normalizedViewUrlTemplate=String(viewUrlTemplate||``).trim();const normalizedEditUrlTemplate=String(editUrlTemplate||``).trim();const hasViewUrl=Boolean(normalizedViewUrlTemplate);const hasEditUrl=Boolean(normalizedEditUrlTemplate);const actionColumnCount=(hasViewUrl?1:0)+(hasEditUrl?1:0);const normalizedItems=computed(()=>Array.isArray(items?.value)?items.value:[]);const showListSkeleton=computed(()=>Boolean(isInitialLoading?.value&&normalizedItems.value.length<1));function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const currentPathname=resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:normalizedRecordIdParam,anchorParamValue:currentRouteParams[normalizedRecordIdParam],anchorMode:`before`});return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname})}function resolveParams(urlTemplate=``,extraParams={}){return resolveTemplatePath(urlTemplate,extraParams)}function resolveRowKey(record,index){const recordId=resolveRecordId$1(record,recordIdSelector);if(recordId)return recordId;return`row-${index}`}function resolveViewUrl(record){if(!hasViewUrl)return``;const recordId=resolveRecordId$1(record,recordIdSelector);if(!recordId)return``;return resolveTemplatePath(normalizedViewUrlTemplate,{[normalizedRecordIdParam]:recordId})}function resolveEditUrl(record){if(!hasEditUrl)return``;const recordId=resolveRecordId$1(record,recordIdSelector);if(!recordId)return``;return resolveTemplatePath(normalizedEditUrlTemplate,{[normalizedRecordIdParam]:recordId})}return Object.freeze({hasViewUrl,hasEditUrl,actionColumnCount,showListSkeleton,resolveParams,resolveRowKey,resolveViewUrl,resolveEditUrl})}var DEFAULT_LIST_SEARCH_DEBOUNCE_MS=250;var DEFAULT_LIST_SEARCH_MIN_LENGTH=1;var LIST_SEARCH_MODE_LOCAL=`local`;var LIST_SEARCH_MODE_QUERY=`query`;function normalizeListSearchConfig(value={}){const source=asPlainObject(value);const mode=normalizeText$3(source.mode).toLowerCase()===LIST_SEARCH_MODE_LOCAL?LIST_SEARCH_MODE_LOCAL:LIST_SEARCH_MODE_QUERY;return Object.freeze({enabled:source.enabled===true,mode,queryParam:normalizeText$3(source.queryParam)||`q`,label:normalizeText$3(source.label)||`Search`,placeholder:normalizeText$3(source.placeholder),initialQuery:normalizeText$3(source.initialQuery),debounceMs:normalizeInteger(source.debounceMs,{fallback:DEFAULT_LIST_SEARCH_DEBOUNCE_MS,min:0}),minLength:normalizeInteger(source.minLength,{fallback:DEFAULT_LIST_SEARCH_MIN_LENGTH,min:DEFAULT_LIST_SEARCH_MIN_LENGTH}),fields:Object.freeze(normalizeUniqueTextList(source.fields))})}function normalizeSearchableValue(value){if(value==null)return``;if(typeof value===`string`)return normalizeText$3(value).toLowerCase();if(typeof value===`number`||typeof value===`boolean`)return String(value).toLowerCase();return``}function matchesLocalSearch(item={},query=``,searchFields=[]){const source=asPlainObject(item);const normalizedQuery=normalizeText$3(query).toLowerCase();if(!normalizedQuery)return true;const fields=Array.isArray(searchFields)?searchFields:[];if(fields.length>0)return fields.some(field=>normalizeSearchableValue(source[field]).includes(normalizedQuery));return Object.values(source).some(value=>normalizeSearchableValue(value).includes(normalizedQuery))}var EMPTY_ROUTE_SYNC_QUERY_PARAM_BLACKLIST=Object.freeze([]);function useList({ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,apiSuffix=``,queryKeyFactory=null,viewPermissions=[],readEnabled=true,placementSource=`http-web.list`,fallbackLoadError=`Unable to load list.`,initialPageParam=null,getNextPageParam,selectItems,client=null,transport=null,requestOptions,queryOptions,requestRecovery,requestRecoveryLabel=`List`,realtime=null,adapter=null,recordIdParam=`recordId`,recordIdSelector=null,viewUrlTemplate=``,editUrlTemplate=``,search=null,queryParams=null,routeQueryValueResolvers=null,requestQueryParams=null,requestFieldsets=null,syncToRoute=false}={}){const searchConfig=normalizeListSearchConfig(search);const routeSyncConfig=normalizeListSyncToRouteConfig(syncToRoute,{defaultSearchParam:searchConfig.queryParam});const routeSyncHydrated=ref(routeSyncConfig.enabled!==true||routeSyncConfig.hydrateFromRoute!==true);const router=routeSyncConfig.enabled===true?useRouter$1():null;const searchQuery=ref(searchConfig.initialQuery);const debouncedSearchQuery=ref(searchConfig.initialQuery);let searchDebounceTimer=null;const isSearchDebouncing=ref(false);watch(searchQuery,value=>{const normalizedValue=normalizeText$3(value);if(searchDebounceTimer)clearTimeout(searchDebounceTimer);if(searchConfig.enabled!==true){debouncedSearchQuery.value=normalizedValue;isSearchDebouncing.value=false;return}isSearchDebouncing.value=true;searchDebounceTimer=setTimeout(()=>{debouncedSearchQuery.value=normalizedValue;isSearchDebouncing.value=false;searchDebounceTimer=null},searchConfig.debounceMs)},{immediate:true});onScopeDispose(()=>{if(!searchDebounceTimer)return;clearTimeout(searchDebounceTimer);searchDebounceTimer=null});const operationScope=resolveOperationAdapter(adapter,{context:`useList adapter`}).useOperationScope({ownershipFilter,surfaceId,access,placementSource,apiSuffix,readEnabled,queryKeyFactory,permissionSets:{view:viewPermissions},realtime});if(routeSyncConfig.enabled===true&&routeSyncConfig.hydrateFromRoute===true&&routeSyncConfig.syncSearch===true&&searchConfig.enabled===true){const routeSearchValue=asPlainObject(operationScope.routeContext.route?.query||{})[routeSyncConfig.searchParam];const hydratedSearch=normalizeText$3(Array.isArray(routeSearchValue)?routeSearchValue[0]:routeSearchValue);if(searchDebounceTimer){clearTimeout(searchDebounceTimer);searchDebounceTimer=null}searchQuery.value=hydratedSearch;debouncedSearchQuery.value=hydratedSearch;isSearchDebouncing.value=false}const canView=operationScope.permissionGate(`view`);const queryParamsContext=computed(()=>{return Object.freeze({surfaceId:operationScope.routeContext.currentSurfaceId.value,scopeParamValue:operationScope.scopeParamValue.value,ownershipFilter:operationScope.normalizedOwnershipFilter})});const queryParamDescriptors=computed(()=>{return resolveQueryParamDescriptors(queryParams,queryParamsContext.value,{routeValueResolvers:routeQueryValueResolvers})});const{activeRequestQueryParamEntries,activeRequestQueryParamsToken,activeRequestFieldsets,activeRequestFieldsetsToken,queryKeyParts:requestQueryKeyParts}=createRequestQueryRuntime({requestQueryParams,requestFieldsets,context:queryParamsContext});const declaredQueryParamKeys=computed(()=>{return queryParamDescriptors.value.map(descriptor=>descriptor.key)});const activeQueryParamEntries=computed(()=>{return resolveActiveQueryParamEntries(queryParamDescriptors.value)});const activeQueryParamsToken=computed(()=>buildQueryParamEntriesToken(activeQueryParamEntries.value));const writableQueryParamBindings=computed(()=>{return resolveWritableQueryParamBindings(queryParamDescriptors.value)});const activeSearchQuery=computed(()=>{if(searchConfig.enabled!==true)return``;const normalized=normalizeText$3(debouncedSearchQuery.value);if(!normalized||normalized.length<searchConfig.minLength)return``;return normalized});const querySearchEnabled=computed(()=>searchConfig.enabled===true&&searchConfig.mode===`query`);const listPath=computed(()=>{return normalizeText$3(operationScope.apiPath.value)});const listRequestOptions=computed(()=>{const entries=[];if(querySearchEnabled.value){const queryValue=activeSearchQuery.value;if(queryValue)entries.push({key:searchConfig.queryParam,values:[queryValue]})}entries.push(...activeRequestQueryParamEntries.value);entries.push(...activeQueryParamEntries.value);const query=buildRequestQueryObject(entries,{fieldsets:activeRequestFieldsets.value});const baseOptions=asPlainObject(requestOptions);if(Object.keys(query).length<1)return baseOptions;return{...baseOptions,query}});const listQueryKey=computed(()=>{const sourceQueryKey=operationScope.queryKey.value;const baseQueryKey=Array.isArray(sourceQueryKey)?[...sourceQueryKey]:sourceQueryKey==null?[]:[sourceQueryKey];baseQueryKey.push(...requestQueryKeyParts.value);if(querySearchEnabled.value)baseQueryKey.push(`__search__`,searchConfig.queryParam,activeSearchQuery.value);if(activeQueryParamsToken.value)baseQueryKey.push(`__query__`,activeQueryParamsToken.value);return baseQueryKey});const listReadEnabled=computed(()=>canView.value&&routeSyncHydrated.value);const list=useListCore({queryKey:listQueryKey,path:listPath,enabled:operationScope.queryCanRun(listReadEnabled),client,transport,initialPageParam,getNextPageParam,selectItems,requestOptions:listRequestOptions,queryOptions,requestRecovery,requestRecoveryLabel,fallbackLoadError});const routeSyncApplying=ref(false);const routeSyncManagedKeyHistory=ref([]);const routeSyncQueryParamBlacklist=computed(()=>{if(routeSyncConfig.enabled!==true||routeSyncConfig.syncQueryParams!==true)return EMPTY_ROUTE_SYNC_QUERY_PARAM_BLACKLIST;return routeSyncConfig.queryParamBlacklist});const routeSyncQueryParamBlacklistSet=computed(()=>{return new Set(routeSyncQueryParamBlacklist.value)});if(routeSyncConfig.enabled===true&&routeSyncConfig.syncQueryParams===true)watch(declaredQueryParamKeys,nextKeys=>{routeSyncManagedKeyHistory.value=mergeManagedQueryParamKeyHistory(routeSyncManagedKeyHistory.value,nextKeys)},{immediate:true});const routeSyncManagedKeys=computed(()=>{const managedKeys=resolveRouteSyncManagedKeys({searchEnabled:searchConfig.enabled,searchParam:routeSyncConfig.searchParam,syncSearch:routeSyncConfig.enabled===true&&routeSyncConfig.syncSearch===true,syncQueryParams:routeSyncConfig.enabled===true&&routeSyncConfig.syncQueryParams===true,declaredKeys:declaredQueryParamKeys.value,keyHistory:routeSyncManagedKeyHistory.value});if(routeSyncConfig.enabled!==true||routeSyncConfig.syncQueryParams!==true)return managedKeys;const output=new Set(managedKeys);for(const key of routeSyncQueryParamBlacklist.value)output.add(key);return[...output].sort((left,right)=>left.localeCompare(right))});const routeSyncDesiredQuery=computed(()=>{if(routeSyncConfig.enabled!==true)return{};const desiredQuery={};if(routeSyncConfig.syncSearch===true&&searchConfig.enabled===true){const normalizedSearch=normalizeText$3(searchQuery.value);if(normalizedSearch)desiredQuery[routeSyncConfig.searchParam]=normalizedSearch}if(routeSyncConfig.syncQueryParams===true)for(const entry of activeQueryParamEntries.value){if(routeSyncQueryParamBlacklistSet.value.has(entry.key))continue;if(entry.values.length===1){desiredQuery[entry.key]=entry.values[0];continue}desiredQuery[entry.key]=[...entry.values]}return desiredQuery});if(routeSyncConfig.enabled===true){watch(()=>operationScope.routeContext.route?.query||{},routeQuery=>{const initialHydration=routeSyncHydrated.value!==true;if(routeSyncConfig.hydrateFromRoute!==true||routeSyncApplying.value===true){routeSyncHydrated.value=true;return}const routeQuerySource=asPlainObject(routeQuery);if(routeSyncConfig.syncSearch===true&&searchConfig.enabled===true){const routeSearchValue=routeQuerySource[routeSyncConfig.searchParam];const nextSearch=normalizeText$3(Array.isArray(routeSearchValue)?routeSearchValue[0]:routeSearchValue);if(nextSearch!==searchQuery.value)searchQuery.value=nextSearch}if(routeSyncConfig.syncQueryParams===true)for(const binding of writableQueryParamBindings.value){if(routeSyncQueryParamBlacklistSet.value.has(binding.key))continue;const nextValue=parseRouteBindingValue(binding,routeQuerySource[binding.key],{initial:initialHydration});const currentValue=typeof binding.get===`function`?binding.get():void 0;if(areQueryParamBindingValuesEqual(currentValue,nextValue))continue;try{binding.set(nextValue)}catch{}}routeSyncHydrated.value=true},{immediate:true});watch([routeSyncDesiredQuery,routeSyncManagedKeys],async([desiredQuery,managedKeys])=>{if(routeSyncHydrated.value!==true||routeSyncApplying.value===true)return;const managedKeySet=new Set(Array.isArray(managedKeys)?managedKeys:[]);const currentQuery=asPlainObject(operationScope.routeContext.route?.query||{});const nextQuery={};for(const[key,value]of Object.entries(currentQuery)){if(managedKeySet.has(key))continue;nextQuery[key]=value}for(const[key,value]of Object.entries(asPlainObject(desiredQuery)))nextQuery[key]=value;if(buildRouteQueryCompareToken(currentQuery)===buildRouteQueryCompareToken(nextQuery))return;routeSyncApplying.value=true;try{if(routeSyncConfig.mode===`push`)await router.push({query:nextQuery});else await router.replace({query:nextQuery})}finally{routeSyncApplying.value=false}})}watch(activeSearchQuery,(nextValue,previousValue)=>{if(!querySearchEnabled.value)return;if(nextValue===previousValue)return;list.trimToFirstPage()});watch([activeQueryParamsToken,activeRequestQueryParamsToken,activeRequestFieldsetsToken],()=>{list.trimToFirstPage()});const filteredItems=computed(()=>{const sourceItems=Array.isArray(list.items.value)?list.items.value:[];if(searchConfig.enabled!==true||searchConfig.mode!==`local`)return sourceItems;const queryValue=activeSearchQuery.value;if(!queryValue)return sourceItems;return sourceItems.filter(item=>matchesLocalSearch(item,queryValue,searchConfig.fields))});const isInitialLoading=operationScope.isLoading(list.isInitialLoading);const isFetching=operationScope.isLoading(list.isFetching);const isRefetching=computed(()=>Boolean(isFetching.value&&!isInitialLoading.value));const loadError=operationScope.loadError(list.loadError);const isLoading=operationScope.isLoading(list.isLoading);const listUiRuntime=createListUiRuntime({items:filteredItems,isInitialLoading,recordIdParam,recordIdSelector,routeParams:computed(()=>operationScope.routeContext.route?.params||{}),routeParamNames:computed(()=>resolveRouteParamNamesInOrder(operationScope.routeContext.route)),routePath:computed(()=>operationScope.routeContext.route?.path||``),viewUrlTemplate,editUrlTemplate});setupOperationErrorReporting({source:`${placementSource}.load`,loadError,dedupeWindowMs:0,loadActionFactory:()=>({label:`Retry`,dismissOnRun:true,handler(){list.reload()}})});return proxyRefs({canView,isInitialLoading,isFetching,isRefetching,isLoading,isLoadingMore:list.isLoadingMore,hasMore:list.hasMore,loadError,pages:list.pages,items:filteredItems,reload:list.reload,loadMore:list.loadMore,hasViewUrl:listUiRuntime.hasViewUrl,hasEditUrl:listUiRuntime.hasEditUrl,actionColumnCount:listUiRuntime.actionColumnCount,showListSkeleton:listUiRuntime.showListSkeleton,resolveRowKey:listUiRuntime.resolveRowKey,resolveParams:listUiRuntime.resolveParams,resolveViewUrl:listUiRuntime.resolveViewUrl,resolveEditUrl:listUiRuntime.resolveEditUrl,searchEnabled:searchConfig.enabled,searchMode:searchConfig.mode,searchQuery,searchLabel:searchConfig.label,searchPlaceholder:searchConfig.placeholder,isSearchDebouncing,activeQueryParamsToken})}function normalizeStatusList(value){if(Array.isArray(value))return value.map(entry=>Number(entry)).filter(entry=>Number.isInteger(entry)&&entry>0);return[404]}function useViewCore({resource,model,canView,mapLoadedToModel,notFoundStatuses=[404],notFoundMessage=`Record not found.`}={}){const statusList=normalizeStatusList(notFoundStatuses);watchResourceModelState({resource,model,mapLoadedToModel,resolveMapContext(){return{resource}}});const data=resource?.data;const record=computed(()=>model!==void 0?model:data?.value);const isLoading=computed(()=>{if(resource?.isInitialLoading?.value!==void 0)return Boolean(resource.isInitialLoading.value);return Boolean(resource?.query?.isPending?.value)});const isFetching=computed(()=>{if(resource?.isFetching?.value!==void 0)return Boolean(resource.isFetching.value);return Boolean(resource?.query?.isFetching?.value)});const error=computed(()=>resource?.query?.error?.value||null);const isNotFound=computed(()=>{const status=Number(error.value?.status||0);return statusList.includes(status)});const notFoundError=computed(()=>{if(!isNotFound.value)return``;return String(notFoundMessage||`Record not found.`)});const loadError=computed(()=>{if(isNotFound.value)return``;return String(resource?.loadError?.value||``).trim()});const resolvedCanView=computed(()=>{if(canView===void 0)return true;return Boolean(canView?.value)});async function refresh(){return resource?.reload?.()}return Object.freeze({record,isLoading,isFetching,isNotFound,notFoundError,loadError,canView:resolvedCanView,refresh})}function resolveRecordId({routeParams,recordIdParam,routeRecordId}){const explicitRecordId=toRouteParamValue(typeof routeRecordId===`function`?routeRecordId():unref(routeRecordId));if(explicitRecordId)return explicitRecordId;return toRouteParamValue(routeParams[recordIdParam])}function createViewUiRuntime({recordIdParam=`recordId`,routeParams=null,routeParamNames=null,routePath=``,routeRecordId=null,apiUrlTemplate=``,listUrlTemplate=``,editUrlTemplate=``}={}){const normalizedRecordIdParam=normalizeRouteParamName(recordIdParam,{context:`useView recordIdParam`});const normalizedApiUrlTemplate=String(apiUrlTemplate||``).trim();const normalizedListUrlTemplate=String(listUrlTemplate||``).trim();const normalizedEditUrlTemplate=String(editUrlTemplate||``).trim();function resolveTemplatePath(urlTemplate=``,extraParams={}){const normalizedTemplate=String(urlTemplate||``).trim();if(!normalizedTemplate)return``;const currentRouteParams=resolveRouteParamsSource(routeParams);const sourceParams={...currentRouteParams,...asPlainObject(extraParams)};const resolvedRecordId=toRouteParamValue(sourceParams[normalizedRecordIdParam])||resolveRecordId({routeParams:currentRouteParams,recordIdParam:normalizedRecordIdParam,routeRecordId});sourceParams[normalizedRecordIdParam]=resolvedRecordId;const currentPathname=resolveScopedRoutePathname({currentPathname:routePath,params:currentRouteParams,orderedParamNames:routeParamNames,anchorParamName:normalizedRecordIdParam,anchorParamValue:resolvedRecordId,anchorMode:`at`});return resolveRouteTemplateLocation(normalizedTemplate,{params:sourceParams,currentPathname})}const recordId=computed(()=>resolveRecordId({routeParams:resolveRouteParamsSource(routeParams),recordIdParam:normalizedRecordIdParam,routeRecordId}));const apiSuffix=computed(()=>resolveTemplatePath(normalizedApiUrlTemplate));const listUrl=computed(()=>resolveTemplatePath(normalizedListUrlTemplate));const editUrl=computed(()=>resolveTemplatePath(normalizedEditUrlTemplate));function resolveParams(urlTemplate=``,extraParams={}){return resolveTemplatePath(urlTemplate,extraParams)}return Object.freeze({recordId,apiSuffix,listUrl,editUrl,resolveParams})}function useView({resource=null,ownershipFilter=ROUTE_VISIBILITY_WORKSPACE,surfaceId=``,access=`auto`,apiSuffix=``,queryKeyFactory=null,viewPermissions=[],readMethod=`GET`,readEnabled=true,client=null,transport=null,requestRecovery=null,requestRecoveryLabel=`Resource`,placementSource=`http-web.view`,fallbackLoadError=`Unable to load resource.`,notFoundStatuses=[404],notFoundMessage=`Record not found.`,model,mapLoadedToModel,requestQueryParams=null,requestFieldsets=null,recordIdParam=`recordId`,routeParams=null,routeRecordId=null,apiUrlTemplate=``,listUrlTemplate=``,editUrlTemplate=``,includeRecordIdInQueryKey=false,realtime=void 0,adapter=null}={}){const route=useRoute();const viewUiRuntime=createViewUiRuntime({recordIdParam,routeParams:routeParams??computed(()=>route?.params||{}),routeParamNames:computed(()=>resolveRouteParamNamesInOrder(route)),routePath:computed(()=>route?.path||``),routeRecordId,apiUrlTemplate,listUrlTemplate,editUrlTemplate});const effectiveApiSuffix=String(apiUrlTemplate||``).trim()?viewUiRuntime.apiSuffix:apiSuffix;const operationScope=resolveOperationAdapter(adapter,{context:`useView adapter`}).useOperationScope({ownershipFilter,surfaceId,access,placementSource,apiSuffix:effectiveApiSuffix,readEnabled,queryKeyFactory,permissionSets:{view:viewPermissions},realtime:resolveOperationRealtimeOptions({realtime,fallbackRealtime:resource?.operations?.view?.realtime||resource?.operations?.list?.realtime||null})});const queryParamsContext=computed(()=>{return Object.freeze({surfaceId:operationScope.routeContext.currentSurfaceId.value,scopeParamValue:operationScope.scopeParamValue.value,ownershipFilter:operationScope.normalizedOwnershipFilter,recordId:viewUiRuntime.recordId.value})});const baseQueryKey=computed(()=>{const next=[...Array.isArray(operationScope.queryKey.value)?operationScope.queryKey.value:[]];if(!includeRecordIdInQueryKey)return next;const recordIdToken=String(viewUiRuntime.recordId.value||``).trim();return[...next,recordIdToken]});const requestQueryRuntime=createRequestQueryRuntime({requestQueryParams,requestFieldsets,context:queryParamsContext,sourceQueryKey:baseQueryKey});const canView=operationScope.permissionGate(`view`);const endpointResource=useEndpointResource({queryKey:requestQueryRuntime.queryKey,path:operationScope.apiPath,enabled:operationScope.queryCanRun(canView),client,readMethod,readQuery:requestQueryRuntime.requestQuery,transport,requestRecovery,requestRecoveryLabel,refreshOnPull:true,fallbackLoadError});const view=useViewCore({resource:endpointResource,model,canView,mapLoadedToModel,notFoundStatuses,notFoundMessage});const loadError=operationScope.loadError(view.loadError);const isLoading=operationScope.isLoading(view.isLoading);const isFetching=operationScope.isLoading(view.isFetching);const isRefetching=computed(()=>Boolean(isFetching.value&&!isLoading.value));setupOperationErrorReporting({source:`${placementSource}.load`,loadError,notFoundError:view.notFoundError,dedupeWindowMs:0,loadActionFactory:()=>({label:`Retry`,dismissOnRun:true,handler(){view.refresh()}})});return proxyRefs({record:view.record,recordId:viewUiRuntime.recordId,listUrl:viewUiRuntime.listUrl,editUrl:viewUiRuntime.editUrl,resolveParams:viewUiRuntime.resolveParams,canView,isLoading,isFetching,isRefetching,isNotFound:view.isNotFound,notFoundError:view.notFoundError,loadError,refresh:view.refresh,resource:endpointResource})}var client_exports$5=__exportAll({CrudAddEditScreen:()=>CrudAddEditScreen_default,CrudDeleteAction:()=>_sfc_main$19,CrudListBulkActionSurface:()=>CrudListBulkActionSurface_default,CrudListFilterSurface:()=>CrudListFilterSurface_default,CrudListScreen:()=>CrudListScreen_default,CrudViewScreen:()=>CrudViewScreen_default,configureHttpWebClient:()=>configureHttpWebClient,createHttpWebClient:()=>createHttpWebClient,defineCrudListBulkActions:()=>defineCrudListBulkActions,defineCrudListFilters:()=>defineCrudListFilters,defineCrudListRowActions:()=>defineCrudListRowActions,getHttpWebClient:()=>getHttpWebClient,httpWebClient:()=>httpWebClient,useAccess:()=>useAccess,useAddEdit:()=>useAddEdit,useCommand:()=>useCommand,useEndpointResource:()=>useEndpointResource,useList:()=>useList,usePagedCollection:()=>usePagedCollection,useRealtimeQueryInvalidation:()=>useRealtimeQueryInvalidation,useUiFeedback:()=>useUiFeedback,useView:()=>useView});function asLogger(value){if(!value||typeof value!==`object`||Array.isArray(value))return null;return value}function callLoggerMethod(logger,methodName,fallbackMethodName,args){if(logger&&typeof logger[methodName]===`function`){logger[methodName](...args);return}if(typeof console[fallbackMethodName]===`function`)console[fallbackMethodName](...args)}function createProviderLogger(loggerLike=null,{debugEnabled=false,debugMethod=`info`}={}){const logger=asLogger(loggerLike);const resolvedDebugMethod=String(debugMethod||`info`).trim()||`info`;return Object.freeze({debug:(...args)=>{if(debugEnabled!==true)return;callLoggerMethod(logger,resolvedDebugMethod,`info`,args)},info:(...args)=>{callLoggerMethod(logger,`info`,`info`,args)},warn:(...args)=>{callLoggerMethod(logger,`warn`,`warn`,args)},error:(...args)=>{callLoggerMethod(logger,`error`,`error`,args)}})}var ROOT_STYLE=Object.freeze({alignItems:`center`,background:`transparent`,border:`0`,borderRadius:`50%`,display:`inline-flex`,height:`48px`,justifyContent:`center`,padding:`0`,width:`48px`});var DOT_STYLE=Object.freeze({borderRadius:`9999px`,boxShadow:`0 0 0 2px rgba(255, 255, 255, 0.82)`,display:`block`,height:`10px`,width:`10px`});var SR_ONLY_STYLE=Object.freeze({border:`0`,clip:`rect(0, 0, 0, 0)`,clipPath:`inset(50%)`,height:`1px`,margin:`-1px`,overflow:`hidden`,padding:`0`,position:`absolute`,whiteSpace:`nowrap`,width:`1px`});function resolveTooltipText({realtimeAvailable,connected}){if(!realtimeAvailable)return`Realtime is unavailable. Live updates are disabled for this page.`;if(connected)return`Realtime is connected. Live updates are active.`;return`Live updates are disconnected. Click to reconnect. If your session expired, sign in again.`}var RealtimeConnectionIndicator=defineComponent({name:`RealtimeConnectionIndicator`,setup(){const socket=useRealtimeSocket({required:false});const connected=ref(Boolean(socket?.connected));const realtimeAvailable=socket!==EMPTY_REALTIME_SOCKET;let detach=null;const tooltipText=computed(()=>{return resolveTooltipText({realtimeAvailable,connected:connected.value})});const statusLabel=computed(()=>connected.value?`Realtime connected`:`Realtime disconnected`);const dotStyle=computed(()=>({...DOT_STYLE,backgroundColor:connected.value?`#22c55e`:`#ef4444`}));function syncConnected(nextState){connected.value=Boolean(nextState)}function bindSocketStatusListeners(){if(!realtimeAvailable||typeof socket.on!==`function`){syncConnected(false);return}syncConnected(socket.connected);const onConnect=()=>syncConnected(true);const onDisconnect=()=>syncConnected(false);const onConnectError=()=>syncConnected(false);socket.on(`connect`,onConnect);socket.on(`disconnect`,onDisconnect);socket.on(`connect_error`,onConnectError);detach=()=>{if(typeof socket.off===`function`){socket.off(`connect`,onConnect);socket.off(`disconnect`,onDisconnect);socket.off(`connect_error`,onConnectError)}}}onMounted(()=>{bindSocketStatusListeners()});onBeforeUnmount(()=>{if(typeof detach===`function`)detach();detach=null});return()=>h$1(`button`,{disabled:!realtimeAvailable||connected.value,onClick:()=>socket.connect?.(),style:{...ROOT_STYLE,cursor:realtimeAvailable&&!connected.value?`pointer`:`default`},title:tooltipText.value,type:`button`,"aria-label":realtimeAvailable&&!connected.value?`Reconnect live updates`:statusLabel.value},[h$1(`span`,{style:dotStyle.value,"aria-hidden":`true`}),h$1(`span`,{style:SR_ONLY_STYLE},statusLabel.value)])}});var PACKET_TYPES=Object.create(null);PACKET_TYPES[`open`]=`0`;PACKET_TYPES[`close`]=`1`;PACKET_TYPES[`ping`]=`2`;PACKET_TYPES[`pong`]=`3`;PACKET_TYPES[`message`]=`4`;PACKET_TYPES[`upgrade`]=`5`;PACKET_TYPES[`noop`]=`6`;var PACKET_TYPES_REVERSE=Object.create(null);Object.keys(PACKET_TYPES).forEach(key=>{PACKET_TYPES_REVERSE[PACKET_TYPES[key]]=key});var ERROR_PACKET={type:`error`,data:`parser error`};var withNativeBlob$1=typeof Blob===`function`||typeof Blob!==`undefined`&&Object.prototype.toString.call(Blob)===`[object BlobConstructor]`;var withNativeArrayBuffer$2=typeof ArrayBuffer===`function`;var isView$1=obj=>{return typeof ArrayBuffer.isView===`function`?ArrayBuffer.isView(obj):obj&&obj.buffer instanceof ArrayBuffer};var encodePacket=({type,data},supportsBinary,callback)=>{if(withNativeBlob$1&&data instanceof Blob){if(supportsBinary)return callback(data);else return encodeBlobAsBase64(data,callback)}else if(withNativeArrayBuffer$2&&(data instanceof ArrayBuffer||isView$1(data))){if(supportsBinary)return callback(data);else return encodeBlobAsBase64(new Blob([data]),callback)}return callback(PACKET_TYPES[type]+(data||``))};var encodeBlobAsBase64=(data,callback)=>{const fileReader=new FileReader;fileReader.onload=function(){const content=fileReader.result.split(`,`)[1];callback(`b`+(content||``))};return fileReader.readAsDataURL(data)};function toArray(data){if(data instanceof Uint8Array)return data;else if(data instanceof ArrayBuffer)return new Uint8Array(data);else return new Uint8Array(data.buffer,data.byteOffset,data.byteLength)}var TEXT_ENCODER;function encodePacketToBinary(packet,callback){if(withNativeBlob$1&&packet.data instanceof Blob)return packet.data.arrayBuffer().then(toArray).then(callback);else if(withNativeArrayBuffer$2&&(packet.data instanceof ArrayBuffer||isView$1(packet.data)))return callback(toArray(packet.data));encodePacket(packet,false,encoded=>{if(!TEXT_ENCODER)TEXT_ENCODER=new TextEncoder;callback(TEXT_ENCODER.encode(encoded))})}var chars=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`;var lookup$1=typeof Uint8Array===`undefined`?[]:new Uint8Array(256);for(let i=0;i<64;i++)lookup$1[chars.charCodeAt(i)]=i;var decode$1=base64=>{let bufferLength=base64.length*.75,len=base64.length,i,p=0,encoded1,encoded2,encoded3,encoded4;if(base64[base64.length-1]===`=`){bufferLength--;if(base64[base64.length-2]===`=`)bufferLength--}const arraybuffer=new ArrayBuffer(bufferLength),bytes=new Uint8Array(arraybuffer);for(i=0;i<len;i+=4){encoded1=lookup$1[base64.charCodeAt(i)];encoded2=lookup$1[base64.charCodeAt(i+1)];encoded3=lookup$1[base64.charCodeAt(i+2)];encoded4=lookup$1[base64.charCodeAt(i+3)];bytes[p++]=encoded1<<2|encoded2>>4;bytes[p++]=(encoded2&15)<<4|encoded3>>2;bytes[p++]=(encoded3&3)<<6|encoded4&63}return arraybuffer};var withNativeArrayBuffer$1=typeof ArrayBuffer===`function`;var decodePacket=(encodedPacket,binaryType)=>{if(typeof encodedPacket!==`string`)return{type:`message`,data:mapBinary(encodedPacket,binaryType)};const type=encodedPacket.charAt(0);if(type===`b`)return{type:`message`,data:decodeBase64Packet(encodedPacket.substring(1),binaryType)};if(!PACKET_TYPES_REVERSE[type])return ERROR_PACKET;return encodedPacket.length>1?{type:PACKET_TYPES_REVERSE[type],data:encodedPacket.substring(1)}:{type:PACKET_TYPES_REVERSE[type]}};var decodeBase64Packet=(data,binaryType)=>{if(withNativeArrayBuffer$1){const decoded=decode$1(data);return mapBinary(decoded,binaryType)}else return{base64:true,data}};var mapBinary=(data,binaryType)=>{switch(binaryType){case`blob`:if(data instanceof Blob)return data;else return new Blob([data]);default:if(data instanceof ArrayBuffer)return data;else return data.buffer}};var SEPARATOR=String.fromCharCode(30);var encodePayload=(packets,callback)=>{const length=packets.length;const encodedPackets=new Array(length);let count=0;packets.forEach((packet,i)=>{encodePacket(packet,false,encodedPacket=>{encodedPackets[i]=encodedPacket;if(++count===length)callback(encodedPackets.join(SEPARATOR))})})};var decodePayload=(encodedPayload,binaryType)=>{const encodedPackets=encodedPayload.split(SEPARATOR);const packets=[];for(let i=0;i<encodedPackets.length;i++){const decodedPacket=decodePacket(encodedPackets[i],binaryType);packets.push(decodedPacket);if(decodedPacket.type===`error`)break}return packets};function createPacketEncoderStream(){return new TransformStream({transform(packet,controller){encodePacketToBinary(packet,encodedPacket=>{const payloadLength=encodedPacket.length;let header;if(payloadLength<126){header=new Uint8Array(1);new DataView(header.buffer).setUint8(0,payloadLength)}else if(payloadLength<65536){header=new Uint8Array(3);const view=new DataView(header.buffer);view.setUint8(0,126);view.setUint16(1,payloadLength)}else{header=new Uint8Array(9);const view=new DataView(header.buffer);view.setUint8(0,127);view.setBigUint64(1,BigInt(payloadLength))}if(packet.data&&typeof packet.data!==`string`)header[0]|=128;controller.enqueue(header);controller.enqueue(encodedPacket)})}})}var TEXT_DECODER;function totalLength(chunks){return chunks.reduce((acc,chunk)=>acc+chunk.length,0)}function concatChunks(chunks,size){if(chunks[0].length===size)return chunks.shift();const buffer=new Uint8Array(size);let j=0;for(let i=0;i<size;i++){buffer[i]=chunks[0][j++];if(j===chunks[0].length){chunks.shift();j=0}}if(chunks.length&&j<chunks[0].length)chunks[0]=chunks[0].slice(j);return buffer}function createPacketDecoderStream(maxPayload,binaryType){if(!TEXT_DECODER)TEXT_DECODER=new TextDecoder;const chunks=[];let state=0;let expectedLength=-1;let isBinary=false;return new TransformStream({transform(chunk,controller){chunks.push(chunk);while(true){if(state===0){if(totalLength(chunks)<1)break;const header=concatChunks(chunks,1);isBinary=(header[0]&128)===128;expectedLength=header[0]&127;if(expectedLength<126)state=3;else if(expectedLength===126)state=1;else state=2}else if(state===1){if(totalLength(chunks)<2)break;const headerArray=concatChunks(chunks,2);expectedLength=new DataView(headerArray.buffer,headerArray.byteOffset,headerArray.length).getUint16(0);state=3}else if(state===2){if(totalLength(chunks)<8)break;const headerArray=concatChunks(chunks,8);const view=new DataView(headerArray.buffer,headerArray.byteOffset,headerArray.length);const n=view.getUint32(0);if(n>Math.pow(2,21)-1){controller.enqueue(ERROR_PACKET);break}expectedLength=n*Math.pow(2,32)+view.getUint32(4);state=3}else{if(totalLength(chunks)<expectedLength)break;const data=concatChunks(chunks,expectedLength);controller.enqueue(decodePacket(isBinary?data:TEXT_DECODER.decode(data),binaryType));state=0}if(expectedLength===0||expectedLength>maxPayload){controller.enqueue(ERROR_PACKET);break}}}})}function Emitter(obj){if(obj)return mixin(obj)}function mixin(obj){for(var key in Emitter.prototype)obj[key]=Emitter.prototype[key];return obj}Emitter.prototype.on=Emitter.prototype.addEventListener=function(event,fn){this._callbacks=this._callbacks||{};(this._callbacks[`$`+event]=this._callbacks[`$`+event]||[]).push(fn);return this};Emitter.prototype.once=function(event,fn){function on(){this.off(event,on);fn.apply(this,arguments)}on.fn=fn;this.on(event,on);return this};Emitter.prototype.off=Emitter.prototype.removeListener=Emitter.prototype.removeAllListeners=Emitter.prototype.removeEventListener=function(event,fn){this._callbacks=this._callbacks||{};if(0==arguments.length){this._callbacks={};return this}var callbacks=this._callbacks[`$`+event];if(!callbacks)return this;if(1==arguments.length){delete this._callbacks[`$`+event];return this}var cb;for(var i=0;i<callbacks.length;i++){cb=callbacks[i];if(cb===fn||cb.fn===fn){callbacks.splice(i,1);break}}if(callbacks.length===0)delete this._callbacks[`$`+event];return this};Emitter.prototype.emit=function(event){this._callbacks=this._callbacks||{};var args=new Array(arguments.length-1),callbacks=this._callbacks[`$`+event];for(var i=1;i<arguments.length;i++)args[i-1]=arguments[i];if(callbacks){callbacks=callbacks.slice(0);for(var i=0,len=callbacks.length;i<len;++i)callbacks[i].apply(this,args)}return this};Emitter.prototype.emitReserved=Emitter.prototype.emit;Emitter.prototype.listeners=function(event){this._callbacks=this._callbacks||{};return this._callbacks[`$`+event]||[]};Emitter.prototype.hasListeners=function(event){return!!this.listeners(event).length};var nextTick=(()=>{if(typeof Promise===`function`&&typeof Promise.resolve===`function`)return cb=>Promise.resolve().then(cb);else return(cb,setTimeoutFn)=>setTimeoutFn(cb,0)})();var globalThisShim=(()=>{if(typeof self!==`undefined`)return self;else if(typeof window!==`undefined`)return window;else return Function(`return this`)()})();var defaultBinaryType=`arraybuffer`;function createCookieJar(){}function pick(obj,...attr){return attr.reduce((acc,k)=>{if(obj.hasOwnProperty(k))acc[k]=obj[k];return acc},{})}var NATIVE_SET_TIMEOUT=globalThisShim.setTimeout;var NATIVE_CLEAR_TIMEOUT=globalThisShim.clearTimeout;function installTimerFunctions(obj,opts){if(opts.useNativeTimers){obj.setTimeoutFn=NATIVE_SET_TIMEOUT.bind(globalThisShim);obj.clearTimeoutFn=NATIVE_CLEAR_TIMEOUT.bind(globalThisShim)}else{obj.setTimeoutFn=globalThisShim.setTimeout.bind(globalThisShim);obj.clearTimeoutFn=globalThisShim.clearTimeout.bind(globalThisShim)}}var BASE64_OVERHEAD=1.33;function byteLength(obj){if(typeof obj===`string`)return utf8Length(obj);return Math.ceil((obj.byteLength||obj.size)*BASE64_OVERHEAD)}function utf8Length(str){let c=0,length=0;for(let i=0,l=str.length;i<l;i++){c=str.charCodeAt(i);if(c<128)length+=1;else if(c<2048)length+=2;else if(c<55296||c>=57344)length+=3;else{i++;length+=4}}return length}function randomString(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function encode(obj){let str=``;for(let i in obj)if(obj.hasOwnProperty(i)){if(str.length)str+=`&`;str+=encodeURIComponent(i)+`=`+encodeURIComponent(obj[i])}return str}function decode(qs){let qry={};let pairs=qs.split(`&`);for(let i=0,l=pairs.length;i<l;i++){let pair=pairs[i].split(`=`);qry[decodeURIComponent(pair[0])]=decodeURIComponent(pair[1])}return qry}var TransportError=class extends Error{constructor(reason,description,context){super(reason);this.description=description;this.context=context;this.type=`TransportError`}};var Transport=class extends Emitter{constructor(opts){super();this.writable=false;installTimerFunctions(this,opts);this.opts=opts;this.query=opts.query;this.socket=opts.socket;this.supportsBinary=!opts.forceBase64}onError(reason,description,context){super.emitReserved(`error`,new TransportError(reason,description,context));return this}open(){this.readyState=`opening`;this.doOpen();return this}close(){if(this.readyState===`opening`||this.readyState===`open`){this.doClose();this.onClose()}return this}send(packets){if(this.readyState===`open`)this.write(packets)}onOpen(){this.readyState=`open`;this.writable=true;super.emitReserved(`open`)}onData(data){const packet=decodePacket(data,this.socket.binaryType);this.onPacket(packet)}onPacket(packet){super.emitReserved(`packet`,packet)}onClose(details){this.readyState=`closed`;super.emitReserved(`close`,details)}pause(onPause){}createUri(schema,query={}){return schema+`://`+this._hostname()+this._port()+this.opts.path+this._query(query)}_hostname(){const hostname=this.opts.hostname;return hostname.indexOf(`:`)===-1?hostname:`[`+hostname+`]`}_port(){if(this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80))return`:`+this.opts.port;else return``}_query(query){const encodedQuery=encode(query);return encodedQuery.length?`?`+encodedQuery:``}};var Polling=class extends Transport{constructor(){super(...arguments);this._polling=false}get name(){return`polling`}doOpen(){this._poll()}pause(onPause){this.readyState=`pausing`;const pause=()=>{this.readyState=`paused`;onPause()};if(this._polling||!this.writable){let total=0;if(this._polling){total++;this.once(`pollComplete`,function(){--total||pause()})}if(!this.writable){total++;this.once(`drain`,function(){--total||pause()})}}else pause()}_poll(){this._polling=true;this.doPoll();this.emitReserved(`poll`)}onData(data){const callback=packet=>{if(`opening`===this.readyState&&packet.type===`open`)this.onOpen();if(`close`===packet.type){this.onClose({description:`transport closed by the server`});return false}this.onPacket(packet)};decodePayload(data,this.socket.binaryType).forEach(callback);if(`closed`!==this.readyState){this._polling=false;this.emitReserved(`pollComplete`);if(`open`===this.readyState)this._poll()}}doClose(){const close=()=>{this.write([{type:`close`}])};if(`open`===this.readyState)close();else this.once(`open`,close)}write(packets){this.writable=false;encodePayload(packets,data=>{this.doWrite(data,()=>{this.writable=true;this.emitReserved(`drain`)})})}uri(){const schema=this.opts.secure?`https`:`http`;const query=this.query||{};if(false!==this.opts.timestampRequests)query[this.opts.timestampParam]=randomString();if(!this.supportsBinary&&!query.sid)query.b64=1;return this.createUri(schema,query)}};var value=false;try{value=typeof XMLHttpRequest!==`undefined`&&`withCredentials`in new XMLHttpRequest}catch(err){}var hasCORS=value;function empty(){}var BaseXHR=class extends Polling{constructor(opts){super(opts);if(typeof location!==`undefined`){const isSSL=`https:`===location.protocol;let port=location.port;if(!port)port=isSSL?`443`:`80`;this.xd=typeof location!==`undefined`&&opts.hostname!==location.hostname||port!==opts.port}}doWrite(data,fn){const req=this.request({method:`POST`,data});req.on(`success`,fn);req.on(`error`,(xhrStatus,context)=>{this.onError(`xhr post error`,xhrStatus,context)})}doPoll(){const req=this.request();req.on(`data`,this.onData.bind(this));req.on(`error`,(xhrStatus,context)=>{this.onError(`xhr poll error`,xhrStatus,context)});this.pollXhr=req}};var Request=class Request extends Emitter{constructor(createRequest,uri,opts){super();this.createRequest=createRequest;installTimerFunctions(this,opts);this._opts=opts;this._method=opts.method||`GET`;this._uri=uri;this._data=void 0!==opts.data?opts.data:null;this._create()}_create(){var _a;const opts=pick(this._opts,`agent`,`pfx`,`key`,`passphrase`,`cert`,`ca`,`ciphers`,`rejectUnauthorized`,`autoUnref`);opts.xdomain=!!this._opts.xd;const xhr=this._xhr=this.createRequest(opts);try{xhr.open(this._method,this._uri,true);try{if(this._opts.extraHeaders){xhr.setDisableHeaderCheck&&xhr.setDisableHeaderCheck(true);for(let i in this._opts.extraHeaders)if(this._opts.extraHeaders.hasOwnProperty(i))xhr.setRequestHeader(i,this._opts.extraHeaders[i])}}catch(e){}if(`POST`===this._method)try{xhr.setRequestHeader(`Content-type`,`text/plain;charset=UTF-8`)}catch(e){}try{xhr.setRequestHeader(`Accept`,`*/*`)}catch(e){}(_a=this._opts.cookieJar)===null||_a===void 0||_a.addCookies(xhr);if(`withCredentials`in xhr)xhr.withCredentials=this._opts.withCredentials;if(this._opts.requestTimeout)xhr.timeout=this._opts.requestTimeout;xhr.onreadystatechange=()=>{var _a;if(xhr.readyState===3)(_a=this._opts.cookieJar)===null||_a===void 0||_a.parseCookies(xhr.getResponseHeader(`set-cookie`));if(4!==xhr.readyState)return;if(200===xhr.status||1223===xhr.status)this._onLoad();else this.setTimeoutFn(()=>{this._onError(typeof xhr.status===`number`?xhr.status:0)},0)};xhr.send(this._data)}catch(e){this.setTimeoutFn(()=>{this._onError(e)},0);return}if(typeof document!==`undefined`){this._index=Request.requestsCount++;Request.requests[this._index]=this}}_onError(err){this.emitReserved(`error`,err,this._xhr);this._cleanup(true)}_cleanup(fromError){if(`undefined`===typeof this._xhr||null===this._xhr)return;this._xhr.onreadystatechange=empty;if(fromError)try{this._xhr.abort()}catch(e){}if(typeof document!==`undefined`)delete Request.requests[this._index];this._xhr=null}_onLoad(){const data=this._xhr.responseText;if(data!==null){this.emitReserved(`data`,data);this.emitReserved(`success`);this._cleanup()}}abort(){this._cleanup()}};Request.requestsCount=0;Request.requests={};if(typeof document!==`undefined`){if(typeof attachEvent===`function`)attachEvent(`onunload`,unloadHandler);else if(typeof addEventListener===`function`){const terminationEvent=`onpagehide`in globalThisShim?`pagehide`:`unload`;addEventListener(terminationEvent,unloadHandler,false)}}function unloadHandler(){for(let i in Request.requests)if(Request.requests.hasOwnProperty(i))Request.requests[i].abort()}var hasXHR2=(function(){const xhr=newRequest({xdomain:false});return xhr&&xhr.responseType!==null})();var XHR=class extends BaseXHR{constructor(opts){super(opts);const forceBase64=opts&&opts.forceBase64;this.supportsBinary=hasXHR2&&!forceBase64}request(opts={}){Object.assign(opts,{xd:this.xd},this.opts);return new Request(newRequest,this.uri(),opts)}};function newRequest(opts){const xdomain=opts.xdomain;try{if(`undefined`!==typeof XMLHttpRequest&&(!xdomain||hasCORS))return new XMLHttpRequest}catch(e){}if(!xdomain)try{return new globalThisShim[[`Active`].concat(`Object`).join(`X`)](`Microsoft.XMLHTTP`)}catch(e){}}var isReactNative=typeof navigator!==`undefined`&&typeof navigator.product===`string`&&navigator.product.toLowerCase()===`reactnative`;var BaseWS=class extends Transport{get name(){return`websocket`}doOpen(){const uri=this.uri();const protocols=this.opts.protocols;const opts=isReactNative?{}:pick(this.opts,`agent`,`perMessageDeflate`,`pfx`,`key`,`passphrase`,`cert`,`ca`,`ciphers`,`rejectUnauthorized`,`localAddress`,`protocolVersion`,`origin`,`maxPayload`,`family`,`checkServerIdentity`);if(this.opts.extraHeaders)opts.headers=this.opts.extraHeaders;try{this.ws=this.createSocket(uri,protocols,opts)}catch(err){return this.emitReserved(`error`,err)}this.ws.binaryType=this.socket.binaryType;this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{if(this.opts.autoUnref)this.ws._socket.unref();this.onOpen()};this.ws.onclose=closeEvent=>this.onClose({description:`websocket connection closed`,context:closeEvent});this.ws.onmessage=ev=>this.onData(ev.data);this.ws.onerror=e=>this.onError(`websocket error`,e)}write(packets){this.writable=false;for(let i=0;i<packets.length;i++){const packet=packets[i];const lastPacket=i===packets.length-1;encodePacket(packet,this.supportsBinary,data=>{try{this.doWrite(packet,data)}catch(e){}if(lastPacket)nextTick(()=>{this.writable=true;this.emitReserved(`drain`)},this.setTimeoutFn)})}}doClose(){if(typeof this.ws!==`undefined`){this.ws.onerror=()=>{};this.ws.close();this.ws=null}}uri(){const schema=this.opts.secure?`wss`:`ws`;const query=this.query||{};if(this.opts.timestampRequests)query[this.opts.timestampParam]=randomString();if(!this.supportsBinary)query.b64=1;return this.createUri(schema,query)}};var WebSocketCtor=globalThisShim.WebSocket||globalThisShim.MozWebSocket;var WS=class extends BaseWS{createSocket(uri,protocols,opts){return!isReactNative?protocols?new WebSocketCtor(uri,protocols):new WebSocketCtor(uri):new WebSocketCtor(uri,protocols,opts)}doWrite(_packet,data){this.ws.send(data)}};var WT=class extends Transport{get name(){return`webtransport`}doOpen(){try{this._transport=new WebTransport(this.createUri(`https`),this.opts.transportOptions[this.name])}catch(err){return this.emitReserved(`error`,err)}this._transport.closed.then(()=>{this.onClose()}).catch(err=>{this.onError(`webtransport error`,err)});this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(stream=>{const decoderStream=createPacketDecoderStream(Number.MAX_SAFE_INTEGER,this.socket.binaryType);const reader=stream.readable.pipeThrough(decoderStream).getReader();const encoderStream=createPacketEncoderStream();encoderStream.readable.pipeTo(stream.writable);this._writer=encoderStream.writable.getWriter();const read=()=>{reader.read().then(({done,value})=>{if(done)return;this.onPacket(value);read()}).catch(err=>{})};read();const packet={type:`open`};if(this.query.sid)packet.data=`{"sid":"${this.query.sid}"}`;this._writer.write(packet).then(()=>this.onOpen())})})}write(packets){this.writable=false;for(let i=0;i<packets.length;i++){const packet=packets[i];const lastPacket=i===packets.length-1;this._writer.write(packet).then(()=>{if(lastPacket)nextTick(()=>{this.writable=true;this.emitReserved(`drain`)},this.setTimeoutFn)})}}doClose(){var _a;(_a=this._transport)===null||_a===void 0||_a.close()}};var transports={websocket:WS,webtransport:WT,polling:XHR};var re=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;var parts=[`source`,`protocol`,`authority`,`userInfo`,`user`,`password`,`host`,`port`,`relative`,`path`,`directory`,`file`,`query`,`anchor`];function parse(str){if(str.length>8e3)throw`URI too long`;const src=str,b=str.indexOf(`[`),e=str.indexOf(`]`);if(b!=-1&&e!=-1)str=str.substring(0,b)+str.substring(b,e).replace(/:/g,`;`)+str.substring(e,str.length);let m=re.exec(str||``),uri={},i=14;while(i--)uri[parts[i]]=m[i]||``;if(b!=-1&&e!=-1){uri.source=src;uri.host=uri.host.substring(1,uri.host.length-1).replace(/;/g,`:`);uri.authority=uri.authority.replace(`[`,``).replace(`]`,``).replace(/;/g,`:`);uri.ipv6uri=true}uri.pathNames=pathNames(uri,uri[`path`]);uri.queryKey=queryKey(uri,uri[`query`]);return uri}function pathNames(obj,path){const names=path.replace(/\/{2,9}/g,`/`).split(`/`);if(path.slice(0,1)==`/`||path.length===0)names.splice(0,1);if(path.slice(-1)==`/`)names.splice(names.length-1,1);return names}function queryKey(uri,query){const data={};query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function($0,$1,$2){if($1)data[$1]=$2});return data}var withEventListeners=typeof addEventListener===`function`&&typeof removeEventListener===`function`;var OFFLINE_EVENT_LISTENERS=[];if(withEventListeners)addEventListener(`offline`,()=>{OFFLINE_EVENT_LISTENERS.forEach(listener=>listener())},false);var SocketWithoutUpgrade=class SocketWithoutUpgrade extends Emitter{constructor(uri,opts){super();this.binaryType=defaultBinaryType;this.writeBuffer=[];this._prevBufferLen=0;this._pingInterval=-1;this._pingTimeout=-1;this._maxPayload=-1;this._pingTimeoutTime=Infinity;if(uri&&`object`===typeof uri){opts=uri;uri=null}if(uri){const parsedUri=parse(uri);opts.hostname=parsedUri.host;opts.secure=parsedUri.protocol===`https`||parsedUri.protocol===`wss`;opts.port=parsedUri.port;if(parsedUri.query)opts.query=parsedUri.query}else if(opts.host)opts.hostname=parse(opts.host).host;installTimerFunctions(this,opts);this.secure=null!=opts.secure?opts.secure:typeof location!==`undefined`&&`https:`===location.protocol;if(opts.hostname&&!opts.port)opts.port=this.secure?`443`:`80`;this.hostname=opts.hostname||(typeof location!==`undefined`?location.hostname:`localhost`);this.port=opts.port||(typeof location!==`undefined`&&location.port?location.port:this.secure?`443`:`80`);this.transports=[];this._transportsByName={};opts.transports.forEach(t=>{const transportName=t.prototype.name;this.transports.push(transportName);this._transportsByName[transportName]=t});this.opts=Object.assign({path:`/engine.io`,agent:false,withCredentials:false,upgrade:true,timestampParam:`t`,rememberUpgrade:false,addTrailingSlash:true,rejectUnauthorized:true,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:false},opts);this.opts.path=this.opts.path.replace(/\/$/,``)+(this.opts.addTrailingSlash?`/`:``);if(typeof this.opts.query===`string`)this.opts.query=decode(this.opts.query);if(withEventListeners){if(this.opts.closeOnBeforeunload){this._beforeunloadEventListener=()=>{if(this.transport){this.transport.removeAllListeners();this.transport.close()}};addEventListener(`beforeunload`,this._beforeunloadEventListener,false)}if(this.hostname!==`localhost`){this._offlineEventListener=()=>{this._onClose(`transport close`,{description:`network connection lost`})};OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener)}}if(this.opts.withCredentials)this._cookieJar=createCookieJar();this._open()}createTransport(name){const query=Object.assign({},this.opts.query);query.EIO=4;query.transport=name;if(this.id)query.sid=this.id;const opts=Object.assign({},this.opts,{query,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[name]);return new this._transportsByName[name](opts)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved(`error`,`No transports available`)},0);return}const transportName=this.opts.rememberUpgrade&&SocketWithoutUpgrade.priorWebsocketSuccess&&this.transports.indexOf(`websocket`)!==-1?`websocket`:this.transports[0];this.readyState=`opening`;const transport=this.createTransport(transportName);transport.open();this.setTransport(transport)}setTransport(transport){if(this.transport)this.transport.removeAllListeners();this.transport=transport;transport.on(`drain`,this._onDrain.bind(this)).on(`packet`,this._onPacket.bind(this)).on(`error`,this._onError.bind(this)).on(`close`,reason=>this._onClose(`transport close`,reason))}onOpen(){this.readyState=`open`;SocketWithoutUpgrade.priorWebsocketSuccess=`websocket`===this.transport.name;this.emitReserved(`open`);this.flush()}_onPacket(packet){if(`opening`===this.readyState||`open`===this.readyState||`closing`===this.readyState){this.emitReserved(`packet`,packet);this.emitReserved(`heartbeat`);switch(packet.type){case`open`:this.onHandshake(JSON.parse(packet.data));break;case`ping`:this._sendPacket(`pong`);this.emitReserved(`ping`);this.emitReserved(`pong`);this._resetPingTimeout();break;case`error`:const err=new Error(`server error`);err.code=packet.data;this._onError(err);break;case`message`:this.emitReserved(`data`,packet.data);this.emitReserved(`message`,packet.data)}}}onHandshake(data){this.emitReserved(`handshake`,data);this.id=data.sid;this.transport.query.sid=data.sid;this._pingInterval=data.pingInterval;this._pingTimeout=data.pingTimeout;this._maxPayload=data.maxPayload;this.onOpen();if(`closed`===this.readyState)return;this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);const delay=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+delay;this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose(`ping timeout`)},delay);if(this.opts.autoUnref)this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen);this._prevBufferLen=0;if(0===this.writeBuffer.length)this.emitReserved(`drain`);else this.flush()}flush(){if(`closed`!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const packets=this._getWritablePackets();this.transport.send(packets);this._prevBufferLen=packets.length;this.emitReserved(`flush`)}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name===`polling`&&this.writeBuffer.length>1))return this.writeBuffer;let payloadSize=1;for(let i=0;i<this.writeBuffer.length;i++){const data=this.writeBuffer[i].data;if(data)payloadSize+=byteLength(data);if(i>0&&payloadSize>this._maxPayload)return this.writeBuffer.slice(0,i);payloadSize+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return true;const hasExpired=Date.now()>this._pingTimeoutTime;if(hasExpired){this._pingTimeoutTime=0;nextTick(()=>{this._onClose(`ping timeout`)},this.setTimeoutFn)}return hasExpired}write(msg,options,fn){this._sendPacket(`message`,msg,options,fn);return this}send(msg,options,fn){this._sendPacket(`message`,msg,options,fn);return this}_sendPacket(type,data,options,fn){if(`function`===typeof data){fn=data;data=void 0}if(`function`===typeof options){fn=options;options=null}if(`closing`===this.readyState||`closed`===this.readyState)return;options=options||{};options.compress=false!==options.compress;const packet={type,data,options};this.emitReserved(`packetCreate`,packet);this.writeBuffer.push(packet);if(fn)this.once(`flush`,fn);this.flush()}close(){const close=()=>{this._onClose(`forced close`);this.transport.close()};const cleanupAndClose=()=>{this.off(`upgrade`,cleanupAndClose);this.off(`upgradeError`,cleanupAndClose);close()};const waitForUpgrade=()=>{this.once(`upgrade`,cleanupAndClose);this.once(`upgradeError`,cleanupAndClose)};if(`opening`===this.readyState||`open`===this.readyState){this.readyState=`closing`;if(this.writeBuffer.length)this.once(`drain`,()=>{if(this.upgrading)waitForUpgrade();else close()});else if(this.upgrading)waitForUpgrade();else close()}return this}_onError(err){SocketWithoutUpgrade.priorWebsocketSuccess=false;if(this.opts.tryAllTransports&&this.transports.length>1&&this.readyState===`opening`){this.transports.shift();return this._open()}this.emitReserved(`error`,err);this._onClose(`transport error`,err)}_onClose(reason,description){if(`opening`===this.readyState||`open`===this.readyState||`closing`===this.readyState){this.clearTimeoutFn(this._pingTimeoutTimer);this.transport.removeAllListeners(`close`);this.transport.close();this.transport.removeAllListeners();if(withEventListeners){if(this._beforeunloadEventListener)removeEventListener(`beforeunload`,this._beforeunloadEventListener,false);if(this._offlineEventListener){const i=OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);if(i!==-1)OFFLINE_EVENT_LISTENERS.splice(i,1)}}this.readyState=`closed`;this.id=null;this.emitReserved(`close`,reason,description);this.writeBuffer=[];this._prevBufferLen=0}}};SocketWithoutUpgrade.protocol=4;var SocketWithUpgrade=class extends SocketWithoutUpgrade{constructor(){super(...arguments);this._upgrades=[]}onOpen(){super.onOpen();if(`open`===this.readyState&&this.opts.upgrade)for(let i=0;i<this._upgrades.length;i++)this._probe(this._upgrades[i])}_probe(name){let transport=this.createTransport(name);let failed=false;SocketWithoutUpgrade.priorWebsocketSuccess=false;const onTransportOpen=()=>{if(failed)return;transport.send([{type:`ping`,data:`probe`}]);transport.once(`packet`,msg=>{if(failed)return;if(`pong`===msg.type&&`probe`===msg.data){this.upgrading=true;this.emitReserved(`upgrading`,transport);if(!transport)return;SocketWithoutUpgrade.priorWebsocketSuccess=`websocket`===transport.name;this.transport.pause(()=>{if(failed)return;if(`closed`===this.readyState)return;cleanup();this.setTransport(transport);transport.send([{type:`upgrade`}]);this.emitReserved(`upgrade`,transport);transport=null;this.upgrading=false;this.flush()})}else{const err=new Error(`probe error`);err.transport=transport.name;this.emitReserved(`upgradeError`,err)}})};function freezeTransport(){if(failed)return;failed=true;cleanup();transport.close();transport=null}const onerror=err=>{const error=new Error(`probe error: `+err);error.transport=transport.name;freezeTransport();this.emitReserved(`upgradeError`,error)};function onTransportClose(){onerror(`transport closed`)}function onclose(){onerror(`socket closed`)}function onupgrade(to){if(transport&&to.name!==transport.name)freezeTransport()}const cleanup=()=>{transport.removeListener(`open`,onTransportOpen);transport.removeListener(`error`,onerror);transport.removeListener(`close`,onTransportClose);this.off(`close`,onclose);this.off(`upgrading`,onupgrade)};transport.once(`open`,onTransportOpen);transport.once(`error`,onerror);transport.once(`close`,onTransportClose);this.once(`close`,onclose);this.once(`upgrading`,onupgrade);if(this._upgrades.indexOf(`webtransport`)!==-1&&name!==`webtransport`)this.setTimeoutFn(()=>{if(!failed)transport.open()},200);else transport.open()}onHandshake(data){this._upgrades=this._filterUpgrades(data.upgrades);super.onHandshake(data)}_filterUpgrades(upgrades){const filteredUpgrades=[];for(let i=0;i<upgrades.length;i++)if(~this.transports.indexOf(upgrades[i]))filteredUpgrades.push(upgrades[i]);return filteredUpgrades}};var Socket$1=class extends SocketWithUpgrade{constructor(uri,opts={}){const isOptionsOnly=typeof uri===`object`;const o=isOptionsOnly?{...uri}:{...opts};if(!o.transports||o.transports&&typeof o.transports[0]===`string`)o.transports=(o.transports||[`polling`,`websocket`,`webtransport`]).map(transportName=>transports[transportName]).filter(t=>!!t);super(isOptionsOnly?o:uri,o)}};var protocol$1=Socket$1.protocol;function url(uri,path=``,loc){let obj=uri;loc=loc||typeof location!==`undefined`&&location;if(null==uri)uri=loc.protocol+`//`+loc.host;if(typeof uri===`string`){if(`/`===uri.charAt(0)){if(`/`===uri.charAt(1))uri=loc.protocol+uri;else uri=loc.host+uri}if(!/^(https?|wss?):\/\//.test(uri)){if(`undefined`!==typeof loc)uri=loc.protocol+`//`+uri;else uri=`https://`+uri}obj=parse(uri)}if(!obj.port){if(/^(http|ws)$/.test(obj.protocol))obj.port=`80`;else if(/^(http|ws)s$/.test(obj.protocol))obj.port=`443`}obj.path=obj.path||`/`;const host=obj.host.indexOf(`:`)!==-1?`[`+obj.host+`]`:obj.host;obj.id=obj.protocol+`://`+host+`:`+obj.port+path;obj.href=obj.protocol+`://`+host+(loc&&loc.port===obj.port?``:`:`+obj.port);return obj}var withNativeArrayBuffer=typeof ArrayBuffer===`function`;var isView=obj=>{return typeof ArrayBuffer.isView===`function`?ArrayBuffer.isView(obj):obj.buffer instanceof ArrayBuffer};var toString=Object.prototype.toString;var withNativeBlob=typeof Blob===`function`||typeof Blob!==`undefined`&&toString.call(Blob)===`[object BlobConstructor]`;var withNativeFile=typeof File===`function`||typeof File!==`undefined`&&toString.call(File)===`[object FileConstructor]`;function isBinary(obj){return withNativeArrayBuffer&&(obj instanceof ArrayBuffer||isView(obj))||withNativeBlob&&obj instanceof Blob||withNativeFile&&obj instanceof File}function hasBinary(obj,toJSON){if(!obj||typeof obj!==`object`)return false;if(Array.isArray(obj)){for(let i=0,l=obj.length;i<l;i++)if(hasBinary(obj[i]))return true;return false}if(isBinary(obj))return true;if(obj.toJSON&&typeof obj.toJSON===`function`&&arguments.length===1)return hasBinary(obj.toJSON(),true);for(const key in obj)if(Object.prototype.hasOwnProperty.call(obj,key)&&hasBinary(obj[key]))return true;return false}function deconstructPacket(packet){const buffers=[];const packetData=packet.data;const pack=packet;pack.data=_deconstructPacket(packetData,buffers);pack.attachments=buffers.length;return{packet:pack,buffers}}function _deconstructPacket(data,buffers,toJSON){if(!data)return data;if(isBinary(data)){const placeholder={_placeholder:true,num:buffers.length};buffers.push(data);return placeholder}else if(Array.isArray(data)){const newData=new Array(data.length);for(let i=0;i<data.length;i++)newData[i]=_deconstructPacket(data[i],buffers);return newData}else if(typeof data===`object`&&!(data instanceof Date)){if(data.toJSON&&typeof data.toJSON===`function`&&!toJSON)return _deconstructPacket(data.toJSON(),buffers,true);const newData={};for(const key in data)if(Object.prototype.hasOwnProperty.call(data,key))newData[key]=_deconstructPacket(data[key],buffers);return newData}return data}function reconstructPacket(packet,buffers){packet.data=_reconstructPacket(packet.data,buffers);delete packet.attachments;return packet}function _reconstructPacket(data,buffers){if(!data)return data;if(data&&data._placeholder===true){if(typeof data.num===`number`&&data.num>=0&&data.num<buffers.length)return buffers[data.num];else throw new Error(`illegal attachments`)}else if(Array.isArray(data))for(let i=0;i<data.length;i++)data[i]=_reconstructPacket(data[i],buffers);else if(typeof data===`object`){for(const key in data)if(Object.prototype.hasOwnProperty.call(data,key))data[key]=_reconstructPacket(data[key],buffers)}return data}var esm_exports=__exportAll({Decoder:()=>Decoder,Encoder:()=>Encoder,PacketType:()=>PacketType,isPacketValid:()=>isPacketValid,protocol:()=>5});var RESERVED_EVENTS$1=[`connect`,`connect_error`,`disconnect`,`disconnecting`,`newListener`,`removeListener`];var protocol=5;var PacketType;(function(PacketType){PacketType[PacketType[`CONNECT`]=0]=`CONNECT`;PacketType[PacketType[`DISCONNECT`]=1]=`DISCONNECT`;PacketType[PacketType[`EVENT`]=2]=`EVENT`;PacketType[PacketType[`ACK`]=3]=`ACK`;PacketType[PacketType[`CONNECT_ERROR`]=4]=`CONNECT_ERROR`;PacketType[PacketType[`BINARY_EVENT`]=5]=`BINARY_EVENT`;PacketType[PacketType[`BINARY_ACK`]=6]=`BINARY_ACK`})(PacketType||(PacketType={}));var Encoder=class{constructor(replacer){this.replacer=replacer}encode(obj){if(obj.type===PacketType.EVENT||obj.type===PacketType.ACK){if(hasBinary(obj))return this.encodeAsBinary({type:obj.type===PacketType.EVENT?PacketType.BINARY_EVENT:PacketType.BINARY_ACK,nsp:obj.nsp,data:obj.data,id:obj.id})}return[this.encodeAsString(obj)]}encodeAsString(obj){let str=``+obj.type;if(obj.type===PacketType.BINARY_EVENT||obj.type===PacketType.BINARY_ACK)str+=obj.attachments+`-`;if(obj.nsp&&`/`!==obj.nsp)str+=obj.nsp+`,`;if(null!=obj.id)str+=obj.id;if(null!=obj.data)str+=JSON.stringify(obj.data,this.replacer);return str}encodeAsBinary(obj){const deconstruction=deconstructPacket(obj);const pack=this.encodeAsString(deconstruction.packet);const buffers=deconstruction.buffers;buffers.unshift(pack);return buffers}};var Decoder=class Decoder extends Emitter{constructor(opts){super();this.opts=Object.assign({reviver:void 0,maxAttachments:10},typeof opts===`function`?{reviver:opts}:opts)}add(obj){let packet;if(typeof obj===`string`){if(this.reconstructor)throw new Error(`got plaintext data when reconstructing a packet`);packet=this.decodeString(obj);const isBinaryEvent=packet.type===PacketType.BINARY_EVENT;if(isBinaryEvent||packet.type===PacketType.BINARY_ACK){packet.type=isBinaryEvent?PacketType.EVENT:PacketType.ACK;this.reconstructor=new BinaryReconstructor(packet)}else super.emitReserved(`decoded`,packet)}else if(isBinary(obj)||obj.base64){if(!this.reconstructor)throw new Error(`got binary data when not reconstructing a packet`);else{packet=this.reconstructor.takeBinaryData(obj);if(packet){this.reconstructor=null;super.emitReserved(`decoded`,packet)}}}else throw new Error(`Unknown type: `+obj)}decodeString(str){let i=0;const p={type:Number(str.charAt(0))};if(PacketType[p.type]===void 0)throw new Error(`unknown packet type `+p.type);if(p.type===PacketType.BINARY_EVENT||p.type===PacketType.BINARY_ACK){const start=i+1;while(str.charAt(++i)!==`-`&&i!=str.length);const buf=str.substring(start,i);if(buf!=Number(buf)||str.charAt(i)!==`-`)throw new Error(`Illegal attachments`);const n=Number(buf);if(!isInteger(n)||n<1)throw new Error(`Illegal attachments`);else if(n>this.opts.maxAttachments)throw new Error(`too many attachments`);p.attachments=n}if(`/`===str.charAt(i+1)){const start=i+1;while(++i){if(`,`===str.charAt(i))break;if(i===str.length)break}p.nsp=str.substring(start,i)}else p.nsp=`/`;const next=str.charAt(i+1);if(``!==next&&Number(next)==next){const start=i+1;while(++i){const c=str.charAt(i);if(null==c||Number(c)!=c){--i;break}if(i===str.length)break}p.id=Number(str.substring(start,i+1))}if(str.charAt(++i)){const payload=this.tryParse(str.substr(i));if(Decoder.isPayloadValid(p.type,payload))p.data=payload;else throw new Error(`invalid payload`)}return p}tryParse(str){try{return JSON.parse(str,this.opts.reviver)}catch(e){return false}}static isPayloadValid(type,payload){switch(type){case PacketType.CONNECT:return isObject(payload);case PacketType.DISCONNECT:return payload===void 0;case PacketType.CONNECT_ERROR:return typeof payload===`string`||isObject(payload);case PacketType.EVENT:case PacketType.BINARY_EVENT:return Array.isArray(payload)&&(typeof payload[0]===`number`||typeof payload[0]===`string`&&RESERVED_EVENTS$1.indexOf(payload[0])===-1);case PacketType.ACK:case PacketType.BINARY_ACK:return Array.isArray(payload)}}destroy(){if(this.reconstructor){this.reconstructor.finishedReconstruction();this.reconstructor=null}}};var BinaryReconstructor=class{constructor(packet){this.packet=packet;this.buffers=[];this.reconPack=packet}takeBinaryData(binData){this.buffers.push(binData);if(this.buffers.length===this.reconPack.attachments){const packet=reconstructPacket(this.reconPack,this.buffers);this.finishedReconstruction();return packet}return null}finishedReconstruction(){this.reconPack=null;this.buffers=[]}};function isNamespaceValid(nsp){return typeof nsp===`string`}var isInteger=Number.isInteger||function(value){return typeof value===`number`&&isFinite(value)&&Math.floor(value)===value};function isAckIdValid(id){return id===void 0||isInteger(id)}function isObject(value){return Object.prototype.toString.call(value)===`[object Object]`}function isDataValid(type,payload){switch(type){case PacketType.CONNECT:return payload===void 0||isObject(payload);case PacketType.DISCONNECT:return payload===void 0;case PacketType.EVENT:return Array.isArray(payload)&&(typeof payload[0]===`number`||typeof payload[0]===`string`&&RESERVED_EVENTS$1.indexOf(payload[0])===-1);case PacketType.ACK:return Array.isArray(payload);case PacketType.CONNECT_ERROR:return typeof payload===`string`||isObject(payload);default:return false}}function isPacketValid(packet){return isNamespaceValid(packet.nsp)&&isAckIdValid(packet.id)&&isDataValid(packet.type,packet.data)}function on(obj,ev,fn){obj.on(ev,fn);return function subDestroy(){obj.off(ev,fn)}}var RESERVED_EVENTS=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});var Socket=class extends Emitter{constructor(io,nsp,opts){super();this.connected=false;this.recovered=false;this.receiveBuffer=[];this.sendBuffer=[];this._queue=[];this._queueSeq=0;this.ids=0;this.acks={};this.flags={};this.io=io;this.nsp=nsp;if(opts&&opts.auth)this.auth=opts.auth;this._opts=Object.assign({},opts);if(this.io._autoConnect)this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const io=this.io;this.subs=[on(io,`open`,this.onopen.bind(this)),on(io,`packet`,this.onpacket.bind(this)),on(io,`error`,this.onerror.bind(this)),on(io,`close`,this.onclose.bind(this))]}get active(){return!!this.subs}connect(){if(this.connected)return this;this.subEvents();if(!this.io[`_reconnecting`])this.io.open();if(`open`===this.io._readyState)this.onopen();return this}open(){return this.connect()}send(...args){args.unshift(`message`);this.emit.apply(this,args);return this}emit(ev,...args){var _a,_b,_c;if(RESERVED_EVENTS.hasOwnProperty(ev))throw new Error(`"`+ev.toString()+`" is a reserved event name`);args.unshift(ev);if(this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile){this._addToQueue(args);return this}const packet={type:PacketType.EVENT,data:args};packet.options={};packet.options.compress=this.flags.compress!==false;if(`function`===typeof args[args.length-1]){const id=this.ids++;const ack=args.pop();this._registerAckCallback(id,ack);packet.id=id}const isTransportWritable=(_b=(_a=this.io.engine)===null||_a===void 0?void 0:_a.transport)===null||_b===void 0?void 0:_b.writable;const isConnected=this.connected&&!((_c=this.io.engine)===null||_c===void 0?void 0:_c._hasPingExpired());if(this.flags.volatile&&!isTransportWritable){}else if(isConnected){this.notifyOutgoingListeners(packet);this.packet(packet)}else this.sendBuffer.push(packet);this.flags={};return this}_registerAckCallback(id,ack){var _a;const timeout=(_a=this.flags.timeout)!==null&&_a!==void 0?_a:this._opts.ackTimeout;if(timeout===void 0){this.acks[id]=ack;return}const timer=this.io.setTimeoutFn(()=>{delete this.acks[id];for(let i=0;i<this.sendBuffer.length;i++)if(this.sendBuffer[i].id===id)this.sendBuffer.splice(i,1);ack.call(this,new Error(`operation has timed out`))},timeout);const fn=(...args)=>{this.io.clearTimeoutFn(timer);ack.apply(this,args)};fn.withError=true;this.acks[id]=fn}emitWithAck(ev,...args){return new Promise((resolve,reject)=>{const fn=(arg1,arg2)=>{return arg1?reject(arg1):resolve(arg2)};fn.withError=true;args.push(fn);this.emit(ev,...args)})}_addToQueue(args){let ack;if(typeof args[args.length-1]===`function`)ack=args.pop();const packet={id:this._queueSeq++,tryCount:0,pending:false,args,flags:Object.assign({fromQueue:true},this.flags)};args.push((err,...responseArgs)=>{if(packet!==this._queue[0]){}if(err!==null){if(packet.tryCount>this._opts.retries){this._queue.shift();if(ack)ack(err)}}else{this._queue.shift();if(ack)ack(null,...responseArgs)}packet.pending=false;return this._drainQueue()});this._queue.push(packet);this._drainQueue()}_drainQueue(force=false){if(!this.connected||this._queue.length===0)return;const packet=this._queue[0];if(packet.pending&&!force)return;packet.pending=true;packet.tryCount++;this.flags=packet.flags;this.emit.apply(this,packet.args)}packet(packet){packet.nsp=this.nsp;this.io._packet(packet)}onopen(){if(typeof this.auth==`function`)this.auth(data=>{this._sendConnectPacket(data)});else this._sendConnectPacket(this.auth)}_sendConnectPacket(data){this.packet({type:PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},data):data})}onerror(err){if(!this.connected)this.emitReserved(`connect_error`,err)}onclose(reason,description){this.connected=false;delete this.id;this.emitReserved(`disconnect`,reason,description);this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(id=>{if(!this.sendBuffer.some(packet=>String(packet.id)===id)){const ack=this.acks[id];delete this.acks[id];if(ack.withError)ack.call(this,new Error(`socket has been disconnected`))}})}onpacket(packet){if(!(packet.nsp===this.nsp))return;switch(packet.type){case PacketType.CONNECT:if(packet.data&&packet.data.sid)this.onconnect(packet.data.sid,packet.data.pid);else this.emitReserved(`connect_error`,new Error(`It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)`));break;case PacketType.EVENT:case PacketType.BINARY_EVENT:this.onevent(packet);break;case PacketType.ACK:case PacketType.BINARY_ACK:this.onack(packet);break;case PacketType.DISCONNECT:this.ondisconnect();break;case PacketType.CONNECT_ERROR:this.destroy();const err=new Error(packet.data.message);err.data=packet.data.data;this.emitReserved(`connect_error`,err)}}onevent(packet){const args=packet.data||[];if(null!=packet.id)args.push(this.ack(packet.id));if(this.connected)this.emitEvent(args);else this.receiveBuffer.push(Object.freeze(args))}emitEvent(args){if(this._anyListeners&&this._anyListeners.length){const listeners=this._anyListeners.slice();for(const listener of listeners)listener.apply(this,args)}super.emit.apply(this,args);if(this._pid&&args.length&&typeof args[args.length-1]===`string`)this._lastOffset=args[args.length-1]}ack(id){const self=this;let sent=false;return function(...args){if(sent)return;sent=true;self.packet({type:PacketType.ACK,id,data:args})}}onack(packet){const ack=this.acks[packet.id];if(typeof ack!==`function`)return;delete this.acks[packet.id];if(ack.withError)packet.data.unshift(null);ack.apply(this,packet.data)}onconnect(id,pid){this.id=id;this.recovered=pid&&this._pid===pid;this._pid=pid;this.connected=true;this.emitBuffered();this._drainQueue(true);this.emitReserved(`connect`)}emitBuffered(){this.receiveBuffer.forEach(args=>this.emitEvent(args));this.receiveBuffer=[];this.sendBuffer.forEach(packet=>{this.notifyOutgoingListeners(packet);this.packet(packet)});this.sendBuffer=[]}ondisconnect(){this.destroy();this.onclose(`io server disconnect`)}destroy(){if(this.subs){this.subs.forEach(subDestroy=>subDestroy());this.subs=void 0}this.io[`_destroy`](this)}disconnect(){if(this.connected)this.packet({type:PacketType.DISCONNECT});this.destroy();if(this.connected)this.onclose(`io client disconnect`);return this}close(){return this.disconnect()}compress(compress){this.flags.compress=compress;return this}get volatile(){this.flags.volatile=true;return this}timeout(timeout){this.flags.timeout=timeout;return this}onAny(listener){this._anyListeners=this._anyListeners||[];this._anyListeners.push(listener);return this}prependAny(listener){this._anyListeners=this._anyListeners||[];this._anyListeners.unshift(listener);return this}offAny(listener){if(!this._anyListeners)return this;if(listener){const listeners=this._anyListeners;for(let i=0;i<listeners.length;i++)if(listener===listeners[i]){listeners.splice(i,1);return this}}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(listener){this._anyOutgoingListeners=this._anyOutgoingListeners||[];this._anyOutgoingListeners.push(listener);return this}prependAnyOutgoing(listener){this._anyOutgoingListeners=this._anyOutgoingListeners||[];this._anyOutgoingListeners.unshift(listener);return this}offAnyOutgoing(listener){if(!this._anyOutgoingListeners)return this;if(listener){const listeners=this._anyOutgoingListeners;for(let i=0;i<listeners.length;i++)if(listener===listeners[i]){listeners.splice(i,1);return this}}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(packet){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const listeners=this._anyOutgoingListeners.slice();for(const listener of listeners)listener.apply(this,packet.data)}}};function Backoff(opts){opts=opts||{};this.ms=opts.min||100;this.max=opts.max||1e4;this.factor=opts.factor||2;this.jitter=opts.jitter>0&&opts.jitter<=1?opts.jitter:0;this.attempts=0}Backoff.prototype.duration=function(){var ms=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var rand=Math.random();var deviation=Math.floor(rand*this.jitter*ms);ms=(Math.floor(rand*10)&1)==0?ms-deviation:ms+deviation}return Math.min(ms,this.max)|0};Backoff.prototype.reset=function(){this.attempts=0};Backoff.prototype.setMin=function(min){this.ms=min};Backoff.prototype.setMax=function(max){this.max=max};Backoff.prototype.setJitter=function(jitter){this.jitter=jitter};var Manager=class extends Emitter{constructor(uri,opts){var _a;super();this.nsps={};this.subs=[];if(uri&&`object`===typeof uri){opts=uri;uri=void 0}opts=opts||{};opts.path=opts.path||`/socket.io`;this.opts=opts;installTimerFunctions(this,opts);this.reconnection(opts.reconnection!==false);this.reconnectionAttempts(opts.reconnectionAttempts||Infinity);this.reconnectionDelay(opts.reconnectionDelay||1e3);this.reconnectionDelayMax(opts.reconnectionDelayMax||5e3);this.randomizationFactor((_a=opts.randomizationFactor)!==null&&_a!==void 0?_a:.5);this.backoff=new Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()});this.timeout(null==opts.timeout?2e4:opts.timeout);this._readyState=`closed`;this.uri=uri;const _parser=opts.parser||esm_exports;this.encoder=new _parser.Encoder;this.decoder=new _parser.Decoder;this._autoConnect=opts.autoConnect!==false;if(this._autoConnect)this.open()}reconnection(v){if(!arguments.length)return this._reconnection;this._reconnection=!!v;if(!v)this.skipReconnect=true;return this}reconnectionAttempts(v){if(v===void 0)return this._reconnectionAttempts;this._reconnectionAttempts=v;return this}reconnectionDelay(v){var _a;if(v===void 0)return this._reconnectionDelay;this._reconnectionDelay=v;(_a=this.backoff)===null||_a===void 0||_a.setMin(v);return this}randomizationFactor(v){var _a;if(v===void 0)return this._randomizationFactor;this._randomizationFactor=v;(_a=this.backoff)===null||_a===void 0||_a.setJitter(v);return this}reconnectionDelayMax(v){var _a;if(v===void 0)return this._reconnectionDelayMax;this._reconnectionDelayMax=v;(_a=this.backoff)===null||_a===void 0||_a.setMax(v);return this}timeout(v){if(!arguments.length)return this._timeout;this._timeout=v;return this}maybeReconnectOnOpen(){if(!this._reconnecting&&this._reconnection&&this.backoff.attempts===0)this.reconnect()}open(fn){if(~this._readyState.indexOf(`open`))return this;this.engine=new Socket$1(this.uri,this.opts);const socket=this.engine;const self=this;this._readyState=`opening`;this.skipReconnect=false;const openSubDestroy=on(socket,`open`,function(){self.onopen();fn&&fn()});const onError=err=>{this.cleanup();this._readyState=`closed`;this.emitReserved(`error`,err);if(fn)fn(err);else this.maybeReconnectOnOpen()};const errorSub=on(socket,`error`,onError);if(false!==this._timeout){const timeout=this._timeout;const timer=this.setTimeoutFn(()=>{openSubDestroy();onError(new Error(`timeout`));socket.close()},timeout);if(this.opts.autoUnref)timer.unref();this.subs.push(()=>{this.clearTimeoutFn(timer)})}this.subs.push(openSubDestroy);this.subs.push(errorSub);return this}connect(fn){return this.open(fn)}onopen(){this.cleanup();this._readyState=`open`;this.emitReserved(`open`);const socket=this.engine;this.subs.push(on(socket,`ping`,this.onping.bind(this)),on(socket,`data`,this.ondata.bind(this)),on(socket,`error`,this.onerror.bind(this)),on(socket,`close`,this.onclose.bind(this)),on(this.decoder,`decoded`,this.ondecoded.bind(this)))}onping(){this.emitReserved(`ping`)}ondata(data){try{this.decoder.add(data)}catch(e){this.onclose(`parse error`,e)}}ondecoded(packet){nextTick(()=>{this.emitReserved(`packet`,packet)},this.setTimeoutFn)}onerror(err){this.emitReserved(`error`,err)}socket(nsp,opts){let socket=this.nsps[nsp];if(!socket){socket=new Socket(this,nsp,opts);this.nsps[nsp]=socket}else if(this._autoConnect&&!socket.active)socket.connect();return socket}_destroy(socket){const nsps=Object.keys(this.nsps);for(const nsp of nsps)if(this.nsps[nsp].active)return;this._close()}_packet(packet){const encodedPackets=this.encoder.encode(packet);for(let i=0;i<encodedPackets.length;i++)this.engine.write(encodedPackets[i],packet.options)}cleanup(){this.subs.forEach(subDestroy=>subDestroy());this.subs.length=0;this.decoder.destroy()}_close(){this.skipReconnect=true;this._reconnecting=false;this.onclose(`forced close`)}disconnect(){return this._close()}onclose(reason,description){var _a;this.cleanup();(_a=this.engine)===null||_a===void 0||_a.close();this.backoff.reset();this._readyState=`closed`;this.emitReserved(`close`,reason,description);if(this._reconnection&&!this.skipReconnect)this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const self=this;if(this.backoff.attempts>=this._reconnectionAttempts){this.backoff.reset();this.emitReserved(`reconnect_failed`);this._reconnecting=false}else{const delay=this.backoff.duration();this._reconnecting=true;const timer=this.setTimeoutFn(()=>{if(self.skipReconnect)return;this.emitReserved(`reconnect_attempt`,self.backoff.attempts);if(self.skipReconnect)return;self.open(err=>{if(err){self._reconnecting=false;self.reconnect();this.emitReserved(`reconnect_error`,err)}else self.onreconnect()})},delay);if(this.opts.autoUnref)timer.unref();this.subs.push(()=>{this.clearTimeoutFn(timer)})}}onreconnect(){const attempt=this.backoff.attempts;this._reconnecting=false;this.backoff.reset();this.emitReserved(`reconnect`,attempt)}};var cache={};function lookup(uri,opts){if(typeof uri===`object`){opts=uri;uri=void 0}opts=opts||{};const parsed=url(uri,opts.path||`/socket.io`);const source=parsed.source;const id=parsed.id;const path=parsed.path;const sameNamespace=cache[id]&&path in cache[id][`nsps`];const newConnection=opts.forceNew||opts[`force new connection`]||false===opts.multiplex||sameNamespace;let io;if(newConnection)io=new Manager(source,opts);else{if(!cache[id])cache[id]=new Manager(source,opts);io=cache[id]}if(parsed.query&&!opts.query)opts.query=parsed.queryKey;return io.socket(parsed.path,opts)}Object.assign(lookup,{Manager,Socket,io:lookup,connect:lookup});var SOCKET_IO_PATH=`/socket.io`;function createSocketIoClient({url=``,options={},connect=lookup}={}){if(typeof connect!==`function`)throw new Error(`createSocketIoClient requires a valid socket.io client connect function.`);const normalizedUrl=normalizeText$3(url);const normalizedOptions={...options&&typeof options===`object`&&!Array.isArray(options)?options:{},path:SOCKET_IO_PATH};if(normalizedUrl)return connect(normalizedUrl,normalizedOptions);return connect(normalizedOptions)}function disconnectSocketIoClient(socket){if(!socket||typeof socket.disconnect!==`function`)return;socket.disconnect()}function attachSocketConnectionRecovery(socket){let timer=null;let delay=1e3;let recovering=false;const document=globalThis.document;const window=globalThis.window;function clearRetry(){clearTimeout(timer);timer=null}function canRetry(){return recovering&&!socket.connected&&!socket.active&&socket.io.reconnection()&&!document?.hidden&&window?.navigator?.onLine!==false}function scheduleRetry(){if(timer!==null||!canRetry())return;timer=setTimeout(()=>{timer=null;if(canRetry())socket.connect()},delay);delay=Math.min(delay*2,3e4)}function onConnect(){clearRetry();recovering=false;delay=1e3}function onDisconnect(reason){clearRetry();recovering=reason===`io server disconnect`;scheduleRetry()}function onConnectError(){recovering=true;scheduleRetry()}function onAvailable(){if(!canRetry())return;clearRetry();socket.connect()}socket.on(`connect`,onConnect);socket.on(`disconnect`,onDisconnect);socket.on(`connect_error`,onConnectError);document?.addEventListener(`visibilitychange`,onAvailable);window?.addEventListener(`online`,onAvailable);return()=>{recovering=false;clearRetry();socket.off(`connect`,onConnect);socket.off(`disconnect`,onDisconnect);socket.off(`connect_error`,onConnectError);document?.removeEventListener(`visibilitychange`,onAvailable);window?.removeEventListener(`online`,onAvailable)}}var RealtimeClientProvider_exports=__exportAll({RealtimeClientProvider:()=>RealtimeClientProvider,resolveRealtimeClientConfig:()=>resolveRealtimeClientConfig});var REALTIME_RUNTIME_CLIENT_API=Object.freeze({createSocketIoClient,disconnectSocketIoClient});function resolveRealtimeClientConfig({env={},mobile=null}={}){const appConfig=normalizeObject$1(getClientAppConfig());const realtime=normalizeObject$1(appConfig.realtime);const realtimeClient=normalizeObject$1(appConfig.realtimeClient);const mobileConfig=resolveMobileConfig({mobile:normalizeObject$1(appConfig.mobile)});const url=normalizeText$3(realtimeClient.url||(mobileConfig.enabled===true&&mobile?.adapter?.available===true?mobileConfig.apiBaseUrl:``));const options=normalizeObject$1(realtimeClient.options);const explicitDebugEnabled=typeof realtimeClient.debug===`boolean`?realtimeClient.debug:typeof realtime.debug===`boolean`?realtime.debug:void 0;const debugEnabled=Object.hasOwn(normalizeObject$1(env),`VITE_REALTIME_DEBUG`)?resolveClientBootstrapDebugEnabled({env,debugEnabled:void 0,debugEnvKey:`VITE_REALTIME_DEBUG`}):resolveClientBootstrapDebugEnabled({env,debugEnabled:explicitDebugEnabled,debugEnvKey:`VITE_REALTIME_DEBUG`});return Object.freeze({url,options,debugEnabled})}function createRealtimeClient({config,loggerInput}={}){const logger=createProviderLogger(loggerInput,{debugEnabled:config.debugEnabled});const socket=createSocketIoClient({url:config.url,options:config.options});const detach=[];let initialized=false;function initialize(vueApp=null){if(initialized)return;initialized=true;if(typeof socket.on===`function`){detach.push(attachSocketConnectionRecovery(socket));const onConnect=()=>logger.debug({socketConnected:true},`Realtime client socket connected.`);const onDisconnect=reason=>logger.debug({socketConnected:false,reason:String(reason||``)},`Realtime client socket disconnected.`);const onConnectError=error=>logger.warn({error:String(error?.message||error||`unknown error`)},`Realtime client socket connect error.`);socket.on(`connect`,onConnect);socket.on(`disconnect`,onDisconnect);socket.on(`connect_error`,onConnectError);detach.push(()=>{socket.off?.(`connect`,onConnect);socket.off?.(`disconnect`,onDisconnect);socket.off?.(`connect_error`,onConnectError)});if(config.debugEnabled===true&&typeof socket.onAny===`function`){const onAny=(eventName,payload)=>logger.debug({event:String(eventName||``),payloadScope:payload?.scope||null,payloadEntityId:payload?.entityId||null},`Realtime client received socket event.`);socket.onAny(onAny);detach.push(()=>socket.offAny?.(onAny))}}vueApp?.provide?.(`jskit.realtime.runtime.client.socket`,socket)}function dispose(){for(const release of detach.splice(0,detach.length))try{release()}catch{}disconnectSocketIoClient(socket);initialized=false}return Object.freeze({...REALTIME_RUNTIME_CLIENT_API,config,dispose,initialize,socket})}var RealtimeClientProvider=defineProvider({id:`runtime.realtime.client`,requires:{components:`client.components`,env:`client.env`,logger:`client.logger`,vueApp:`client.vue`},optional:{mobile:`client.mobile`},provides:{realtime:`client.realtime`},setup({components,env,logger,mobile}){components.register(`realtime.web.connection.indicator`,RealtimeConnectionIndicator);return{realtime:createRealtimeClient({config:resolveRealtimeClientConfig({env,mobile}),loggerInput:logger})}},boot({vueApp},{outputs}){outputs.realtime.initialize(vueApp)},shutdown(_dependencies,{outputs}){outputs.realtime.dispose()}});function isMissingDynamicModule(error,moduleSpecifier){const message=String(error?.message||error||``);return message.includes(moduleSpecifier)&&(message.includes(`Cannot find module`)||message.includes(`ERR_MODULE_NOT_FOUND`))}function notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label=`App module`}={}){if(!isDynamicImportError(error)||typeof asyncModuleRecoveryRuntime?.notify!==`function`)return;asyncModuleRecoveryRuntime.notify(error,{label})}var SHELL_REQUEST_RECOVERY_RUNTIME_KEY=`jskit.shell-web.runtime.web-request-recovery.client`;function isShellRequestRecoveryRuntime(value){return Boolean(value&&typeof value.report===`function`&&typeof value.reload===`function`)}function useShellRequestRecoveryRuntime(){if(!hasInjectionContext())return null;const runtime=inject$1(SHELL_REQUEST_RECOVERY_RUNTIME_KEY,null);return isShellRequestRecoveryRuntime(runtime)?runtime:null}var REQUEST_RECOVERY_RELOAD_FAILURE_MESSAGE=`The app cannot reload because the app server is not reachable. Restart the server, then click Reload.`;var RECOVERABLE_REQUEST_ERROR_MESSAGES=Object.freeze([/Failed to fetch/iu,/Load failed/iu,/Network request failed/iu,/NetworkError when attempting to fetch resource/iu,/The Internet connection appears to be offline/iu]);var RECOVERABLE_REQUEST_ERROR_CODES=Object.freeze(new Set([`EAI_AGAIN`,`ECONNABORTED`,`ECONNREFUSED`,`ECONNRESET`,`ENETDOWN`,`ENETUNREACH`,`ENOTFOUND`,`ERR_NETWORK`,`ETIMEDOUT`]));var CANCELED_REQUEST_ERROR_CODES=Object.freeze(new Set([`ABORT_ERR`,`ERR_ABORTED`,`ERR_CANCELED`]));var SAFE_REQUEST_RECOVERY_METHODS=Object.freeze(new Set([`GET`,`HEAD`]));function normalizeText$1(value,fallback=``){return String(value||``).trim()||String(fallback||``).trim()}function errorMessage(error=null){return normalizeText$1(error?.message||error?.cause?.message||error)}function errorCode(error=null){return normalizeText$1(error?.code||error?.cause?.code).toUpperCase()}function errorName(error=null){return normalizeText$1(error?.name||error?.cause?.name)}function normalizeRequestErrorStatus(error=null){if(!isRecord$2(error))return null;const hasStatus=Object.prototype.hasOwnProperty.call(error,`status`);const hasStatusCode=Object.prototype.hasOwnProperty.call(error,`statusCode`);if(!hasStatus&&!hasStatusCode)return null;const status=Number(hasStatus?error.status:error.statusCode);return Number.isInteger(status)?status:null}function isCanceledRequestError(error=null){const name=errorName(error).toLowerCase();if(name===`aborterror`||name===`cancelederror`)return true;return CANCELED_REQUEST_ERROR_CODES.has(errorCode(error))}function isRecoverableRequestError(error=null){if(!error||isCanceledRequestError(error))return false;if(normalizeRequestErrorStatus(error)===0)return true;if(RECOVERABLE_REQUEST_ERROR_CODES.has(errorCode(error)))return true;const message=errorMessage(error);return Boolean(message&&RECOVERABLE_REQUEST_ERROR_MESSAGES.some(pattern=>pattern.test(message)))}function requestRecoveryMessage(error=null,{label=`Request`,message=``}={}){const explicitMessage=normalizeText$1(message);if(explicitMessage)return explicitMessage;const requestLabel=normalizeText$1(label,`Request`);if(requestLabel===`Request`)return`The app could not reach the server or network. Check the connection and try again.`;return`${requestLabel} could not reach the server or network. Check the connection and try again.`}function resolveQueryMeta(query=null){if(isRecord$2(query?.meta))return query.meta;if(isRecord$2(query?.options?.meta))return query.options.meta;return{}}function isRequestRecoveryDisabled(query=null){const meta=resolveQueryMeta(query);return(isRecord$2(meta.jskit)?meta.jskit:{}).requestRecovery===false}function resolveQueryRecoveryLabel(query=null){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryLabel,`Request`)}function resolveQueryRecoverySource(query=null){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoverySource,`shell-web.request-recovery.query`)}function resolveQueryRecoveryDedupeKey(query=null,fallback=``){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryDedupeKey,fallback)}function resolveQueryRecoveryDedupeWindowMs(query=null){const meta=resolveQueryMeta(query);const value=(isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryDedupeWindowMs;return Number.isFinite(Number(value))?Math.max(0,Number(value)):null}function resolveQueryRecoveryMethod(query=null){const meta=resolveQueryMeta(query);return normalizeText$1((isRecord$2(meta.jskit)?meta.jskit:{}).requestRecoveryMethod).toUpperCase()}function isSafeQueryRecoveryMethod(query=null){return SAFE_REQUEST_RECOVERY_METHODS.has(resolveQueryRecoveryMethod(query))}function isActiveQuery(query=null){if(typeof query?.isActive===`function`)return Boolean(query.isActive());if(typeof query?.getObserversCount===`function`)return Number(query.getObserversCount())>0;return true}function recoverableQueryError(query=null){const state=isRecord$2(query?.state)?query.state:{};if(state.status!==`error`||state.fetchStatus!==`idle`)return null;const error=state.error||state.fetchFailureReason||null;return isRecoverableRequestError(error)?error:null}function createQueryRetry(queryClient,query=null){if(!queryClient||typeof queryClient.refetchQueries!==`function`)return null;const queryKey=query?.queryKey;if(!Array.isArray(queryKey))return null;return()=>queryClient.refetchQueries({queryKey,exact:true,type:`active`},{throwOnError:false})}function resolveQueryHash(query=null){const explicitHash=normalizeText$1(query?.queryHash);if(explicitHash)return explicitHash;try{return normalizeText$1(JSON.stringify(query?.queryKey||[]))}catch{return normalizeText$1(String(query?.queryKey||``))}}function installRecoverableQueryObserver({queryClient,runtime,logger}={}){const queryCache=queryClient&&typeof queryClient.getQueryCache===`function`?queryClient.getQueryCache():null;if(!queryCache||typeof queryCache.subscribe!==`function`)return Object.freeze({dispose(){}});const reportedErrorUpdateByQueryHash=new Map;function dismissReportedQueryRecovery(queryHash=``){const reported=reportedErrorUpdateByQueryHash.get(queryHash);if(!reported)return;reportedErrorUpdateByQueryHash.delete(queryHash);if(reported.presentationId&&typeof runtime.dismiss===`function`)runtime.dismiss(reported.presentationId,{presenterId:reported.presenterId})}function dismissReportedQueryRecoveries(){for(const queryHash of[...reportedErrorUpdateByQueryHash.keys()])dismissReportedQueryRecovery(queryHash)}function inspectQuery(query=null){const queryHash=resolveQueryHash(query);if(!query||isRequestRecoveryDisabled(query)||!isSafeQueryRecoveryMethod(query)||!isActiveQuery(query)){if(queryHash)dismissReportedQueryRecovery(queryHash);return}const error=recoverableQueryError(query);if(!error||!queryHash){if(queryHash)dismissReportedQueryRecovery(queryHash);return}const errorUpdateCount=Number(query?.state?.errorUpdateCount||0);const reportKey=`${errorUpdateCount}:${errorMessage(error)}`;const reported=reportedErrorUpdateByQueryHash.get(queryHash);if(reported?.reportKey===reportKey)return;const source=resolveQueryRecoverySource(query);const dedupeKey=resolveQueryRecoveryDedupeKey(query,`shell-web.request-recovery.query.${queryHash}.${errorUpdateCount}`);const dedupeWindowMs=resolveQueryRecoveryDedupeWindowMs(query);const result=runtime.report(error,{label:resolveQueryRecoveryLabel(query),retry:createQueryRetry(queryClient,query),source,stale:query?.state?.data!==void 0,dedupeKey,...dedupeWindowMs!==null?{dedupeWindowMs}:{}});const presentationId=normalizeText$1(result?.presentationId||reported?.presentationId);const presenterId=normalizeText$1(result?.decision?.presenterId||reported?.presenterId);if(reported?.presentationId&&reported.presentationId!==presentationId)dismissReportedQueryRecovery(queryHash);reportedErrorUpdateByQueryHash.set(queryHash,{reportKey,presentationId,presenterId})}try{if(typeof queryCache.getAll===`function`)for(const query of queryCache.getAll())inspectQuery(query)}catch(error){logger.warn({error:errorMessage(error)||`unknown error`},`Shell request recovery could not inspect existing queries.`)}const unsubscribe=queryCache.subscribe((event={})=>{try{inspectQuery(event?.query)}catch(error){logger.warn({error:errorMessage(error)||`unknown error`},`Shell request recovery query observer failed.`)}});return Object.freeze({dispose(){dismissReportedQueryRecoveries();if(typeof unsubscribe===`function`)unsubscribe()}})}function createShellRequestRecoveryRuntime({queryClient=null,errorRuntime=null,logger=null}={}){const runtimeLogger=createProviderLogger(logger);let installedQueryObserver=null;let reloadAttempt=0;async function reload({label=`App`,message=REQUEST_RECOVERY_RELOAD_FAILURE_MESSAGE}={}){const reloaded=await guardedReloadApp({label,message});if(!reloaded){reloadAttempt+=1;report(new Error(`Network request failed.`),{label,message,reload:true,force:true,source:`shell-web.request-recovery.reload`,dedupeKey:`shell-web.request-recovery.reload.${reloadAttempt}`})}return reloaded}function retryAction(error,options,retry){return{label:normalizeText$1(options.actionLabel,`Retry`),dismissOnRun:true,async handler(){try{return await retry()}catch(retryError){if(isRecoverableRequestError(retryError))return report(retryError,options);throw retryError}}}}function reloadAction(options){return{label:normalizeText$1(options.actionLabel,`Reload`),dismissOnRun:true,handler(){return reload({label:options.label,message:options.reloadFailureMessage||REQUEST_RECOVERY_RELOAD_FAILURE_MESSAGE})}}}function dismiss(presentationId=``,options={}){if(!errorRuntime||typeof errorRuntime.dismiss!==`function`)return 0;return errorRuntime.dismiss(presentationId,options)}function report(error=null,options={}){if(!isRecoverableRequestError(error)&&options.force!==true)return null;const source=normalizeText$1(options.source,`shell-web.request-recovery`);if(!errorRuntime||typeof errorRuntime.report!==`function`){runtimeLogger.warn({source,error:errorMessage(error)||`unknown error`},`Shell request recovery could not report because the shell error runtime is unavailable.`);return null}const retry=typeof options.retry===`function`?options.retry:null;const action=retry?retryAction(error,options,retry):options.reload===true?reloadAction(options):null;try{return errorRuntime.report({source,message:requestRecoveryMessage(error,options),cause:error||null,intent:`app-recoverable`,severity:normalizeText$1(options.severity,options.stale?`warning`:`error`),dedupeKey:normalizeText$1(options.dedupeKey),dedupeWindowMs:Number.isFinite(Number(options.dedupeWindowMs))?Math.max(0,Number(options.dedupeWindowMs)):2e3,action})}catch(reportError){runtimeLogger.error({source,error:errorMessage(reportError)||`unknown error`},`Shell request recovery could not report through the shell error runtime.`);return null}}function install(){if(installedQueryObserver)return installedQueryObserver;installedQueryObserver=installRecoverableQueryObserver({queryClient,runtime:api,logger:runtimeLogger});return installedQueryObserver}function dispose(){installedQueryObserver?.dispose?.();installedQueryObserver=null}const api=Object.freeze({dismiss,dispose,install,isRecoverableRequestError,reload,report});return api}function createStoreBackedPresenter({id,channel,store,defaultPersist=false}={}){const normalizedId=normalizeText$2(id);const normalizedChannel=normalizeText$2(channel).toLowerCase();if(!normalizedId)throw new Error(`createStoreBackedPresenter requires id.`);if(!normalizedChannel)throw new Error(`createStoreBackedPresenter("${normalizedId}") requires channel.`);if(!store||typeof store.present!==`function`||typeof store.dismiss!==`function`)throw new Error(`createStoreBackedPresenter("${normalizedId}") requires a presentation store.`);return Object.freeze({id:normalizedId,supports(requestedChannel=``){return String(requestedChannel||``).trim().toLowerCase()===normalizedChannel},present(payload={}){return store.present(normalizedChannel,{...payload,persist:typeof payload.persist===`boolean`?payload.persist:defaultPersist,presenterId:normalizedId})},dismiss(presentationId=``){return store.dismiss(normalizedChannel,String(presentationId||``))}})}function createMaterialSnackbarPresenter({store}={}){return createStoreBackedPresenter({id:`material.snackbar`,channel:`snackbar`,store,defaultPersist:false})}function createMaterialBannerPresenter({store}={}){return createStoreBackedPresenter({id:`material.banner`,channel:`banner`,store,defaultPersist:true})}function createMaterialDialogPresenter({store}={}){return createStoreBackedPresenter({id:`material.dialog`,channel:`dialog`,store,defaultPersist:true})}function createDefaultMaterialErrorPresenters({store}={}){return Object.freeze([createMaterialSnackbarPresenter({store}),createMaterialBannerPresenter({store}),createMaterialDialogPresenter({store})])}function subscribeListener(listeners,listener){if(!(listeners instanceof Set))throw new TypeError(`subscribeListener requires a Set.`);if(typeof listener!==`function`)return()=>{};listeners.add(listener);return()=>{listeners.delete(listener)}}function createListenerSubscription(listeners){if(!(listeners instanceof Set))throw new TypeError(`createListenerSubscription requires a Set.`);return function subscribe(listener){return subscribeListener(listeners,listener)}}function createRuntimeLogger$1(logger=null){const source=isRecord$2(logger)?logger:null;return Object.freeze({warn:typeof source?.warn===`function`?source.warn.bind(source):()=>{},error:typeof source?.error===`function`?source.error.bind(source):()=>{}})}function normalizeErrorEvent(rawEvent={}){const source=isRecord$2(rawEvent)?rawEvent:{message:rawEvent};const cause=source.cause!==void 0?source.cause:source.error;const statusCandidate=Number(source.status||source.statusCode||cause?.status||cause?.statusCode||0);const status=Number.isFinite(statusCandidate)?Math.trunc(statusCandidate):0;const fieldErrors=isRecord$2(source.fieldErrors)?Object.freeze({...source.fieldErrors}):isRecord$2(source.details?.fieldErrors)?Object.freeze({...source.details.fieldErrors}):null;const details=isRecord$2(source.details)?Object.freeze({...source.details}):null;const userMessage=normalizeText$2(source.userMessage);const runtimeMessage=normalizeText$2(source.message||cause?.message);return Object.freeze({code:normalizeText$2(source.code||cause?.code),status,source:normalizeText$2(source.source,`app`),message:normalizeText$2(userMessage||runtimeMessage,`Request failed.`),userMessage,intent:normalizeErrorIntent(source.intent||source.kind),severity:normalizeSeverity(source.severity,`error`),channel:normalizeChannel(source.channel),presenterId:normalizeText$2(source.presenterId),action:normalizeAction(source.action),additionalActions:normalizeAdditionalActions(source.additionalActions),persist:typeof source.persist===`boolean`?source.persist:null,blocking:source.blocking===true,dedupeKey:normalizeText$2(source.dedupeKey),dedupeWindowMs:normalizeNonNegativeInteger(source.dedupeWindowMs,0),traceId:normalizeText$2(source.traceId),fieldErrors,details,cause:cause||null,timestamp:Number(Date.now())})}function normalizePolicyDecision(policyDecision={},event={}){const source=isRecord$2(policyDecision)?policyDecision:{};const channel=normalizeChannel(source.channel||event.channel,`snackbar`)||`snackbar`;return Object.freeze({channel,presenterId:normalizeText$2(source.presenterId||event.presenterId),message:normalizeText$2(source.message||event.userMessage||event.message,`Request failed.`),severity:normalizeSeverity(source.severity||event.severity,`error`),action:normalizeAction(source.action||event.action),additionalActions:normalizeAdditionalActions(source.additionalActions??event.additionalActions),persist:typeof source.persist===`boolean`?source.persist:typeof event.persist===`boolean`?event.persist:channel!==`snackbar`,dedupeKey:normalizeText$2(source.dedupeKey||event.dedupeKey),dedupeWindowMs:normalizeNonNegativeInteger(source.dedupeWindowMs,event.dedupeWindowMs||0)})}function normalizePresenter(candidate={}){const source=isRecord$2(candidate)?candidate:{};const id=normalizeText$2(source.id);if(!id)throw new Error(`Error presenter requires id.`);if(typeof source.present!==`function`)throw new Error(`Error presenter "${id}" requires present(payload).`);return Object.freeze({id,supports:typeof source.supports===`function`?source.supports.bind(source):()=>true,present:source.present.bind(source),dismiss:typeof source.dismiss===`function`?source.dismiss.bind(source):null})}function createErrorRuntime({presenters=[],policy=null,defaultPresenterId=``,moduleDefaultPresenterId=``,logger=null}={}){const runtimeLogger=createRuntimeLogger$1(logger);const byPresenterId=new Map;const listeners=new Set;const subscribe=createListenerSubscription(listeners);const dedupeWindowByKey=new Map;let activePolicy=typeof policy===`function`?policy:createDefaultErrorPolicy();let activeAppDefaultPresenterId=normalizeText$2(defaultPresenterId);const activeModuleDefaultPresenterId=normalizeText$2(moduleDefaultPresenterId);function getPresenterIds(){return Object.freeze([...byPresenterId.keys()].sort((left,right)=>left.localeCompare(right)))}function assertPresenterExists(presenterId,label){if(!byPresenterId.has(presenterId))throw new Error(`${label} presenter "${presenterId}" is not registered.`)}function resolveDefaultPresenterId(){if(activeAppDefaultPresenterId){assertPresenterExists(activeAppDefaultPresenterId,`App default error`);return activeAppDefaultPresenterId}if(activeModuleDefaultPresenterId){assertPresenterExists(activeModuleDefaultPresenterId,`Module default error`);return activeModuleDefaultPresenterId}throw new Error(`Error runtime requires app default presenter or module default presenter.`)}function assertBootReady(){resolveDefaultPresenterId()}function registerPresenter(presenter){const normalized=normalizePresenter(presenter);if(byPresenterId.has(normalized.id))throw new Error(`Error presenter "${normalized.id}" is already registered.`);byPresenterId.set(normalized.id,normalized);return normalized.id}function registerPresenters(nextPresenters=[]){const source=Array.isArray(nextPresenters)?nextPresenters:[];const ids=[];for(const presenter of source)ids.push(registerPresenter(presenter));return Object.freeze(ids)}function setPolicy(nextPolicy){if(typeof nextPolicy!==`function`)throw new TypeError(`Error policy must be a function.`);activePolicy=nextPolicy}function setAppDefaultPresenterId(nextDefaultPresenterId=``){const normalized=normalizeText$2(nextDefaultPresenterId);if(normalized)assertPresenterExists(normalized,`App default error`);activeAppDefaultPresenterId=normalized;return activeAppDefaultPresenterId}function notify(event={}){const payload=Object.freeze({...event});for(const listener of listeners)try{listener(payload)}catch(error){runtimeLogger.warn({error:String(error?.message||error||`unknown error`)},`Error runtime subscriber failed.`)}}function resolveChannelCompatiblePresenter(channel=``){for(const presenter of byPresenterId.values())if(presenter.supports(channel))return presenter;return null}function resolvePresenterForDecision(decision){const explicitPresenterId=normalizeText$2(decision.presenterId);if(explicitPresenterId){assertPresenterExists(explicitPresenterId,`Policy-selected error`);return byPresenterId.get(explicitPresenterId)}const defaultPresenterId=resolveDefaultPresenterId();const defaultPresenter=byPresenterId.get(defaultPresenterId);if(defaultPresenter?.supports(decision.channel))return defaultPresenter;const compatiblePresenter=resolveChannelCompatiblePresenter(decision.channel);if(!compatiblePresenter)throw new Error(`No error presenter supports channel "${decision.channel}".`);return compatiblePresenter}function shouldSkipByDedupe(decision){if(!decision.dedupeKey||decision.dedupeWindowMs<1)return false;const now=Number(Date.now());if(now-Number(dedupeWindowByKey.get(decision.dedupeKey)||0)<decision.dedupeWindowMs)return true;dedupeWindowByKey.set(decision.dedupeKey,now);return false}function report(rawEvent={},rawContext={}){const event=normalizeErrorEvent(rawEvent);const context=isRecord$2(rawContext)?Object.freeze({...rawContext}):Object.freeze({});let policyDecision;try{policyDecision=activePolicy(event,Object.freeze({context,runtime:Object.freeze({presenterIds:getPresenterIds(),appDefaultPresenterId:activeAppDefaultPresenterId,moduleDefaultPresenterId:activeModuleDefaultPresenterId})}))}catch(error){runtimeLogger.error({source:event.source,error:String(error?.message||error||`unknown error`)},`Error policy threw while evaluating error event.`);throw error}const decision=normalizePolicyDecision(policyDecision,event);if(decision.channel===`silent`){const silentResult=Object.freeze({event,decision,skipped:true,reason:`silent`});notify({type:`reported.silent`,result:silentResult});return silentResult}if(shouldSkipByDedupe(decision)){const dedupedResult=Object.freeze({event,decision,skipped:true,reason:`dedupe`});notify({type:`reported.deduped`,result:dedupedResult});return dedupedResult}const presenter=resolvePresenterForDecision(decision);if(!presenter.supports(decision.channel))throw new Error(`Error presenter "${presenter.id}" does not support channel "${decision.channel}".`);const payload=Object.freeze({...decision,presenterId:presenter.id,event,context});const presentationId=normalizeText$2(presenter.present(payload));const result=Object.freeze({event,decision:Object.freeze({...decision,presenterId:presenter.id}),presentationId,skipped:false});notify({type:`reported`,result});return result}function dismiss(presentationId=``,options={}){const normalizedPresentationId=normalizeText$2(presentationId);const source=isRecord$2(options)?options:{};const presenterId=normalizeText$2(source.presenterId);if(presenterId){const presenter=byPresenterId.get(presenterId);if(!presenter||typeof presenter.dismiss!==`function`)return 0;return Number(presenter.dismiss(normalizedPresentationId)||0)}let total=0;for(const presenter of byPresenterId.values()){if(typeof presenter.dismiss!==`function`)continue;total+=Number(presenter.dismiss(normalizedPresentationId)||0)}return total}function configure(options={}){const source=isRecord$2(options)?options:{};if(Array.isArray(source.presenters)&&source.presenters.length>0)registerPresenters(source.presenters);if(Object.prototype.hasOwnProperty.call(source,`policy`))setPolicy(source.policy);if(Object.prototype.hasOwnProperty.call(source,`defaultPresenterId`))setAppDefaultPresenterId(source.defaultPresenterId);assertBootReady();return getSnapshot()}function getSnapshot(){return Object.freeze({presenterIds:getPresenterIds(),appDefaultPresenterId:activeAppDefaultPresenterId,moduleDefaultPresenterId:activeModuleDefaultPresenterId,resolvedDefaultPresenterId:resolveDefaultPresenterId()})}registerPresenters(presenters);assertBootReady();return Object.freeze({report,dismiss,configure,registerPresenter,registerPresenters,setPolicy,setAppDefaultPresenterId,assertBootReady,getSnapshot,subscribe,normalizeErrorEvent})}var PRESENTATION_CHANNELS=Object.freeze([`snackbar`,`banner`,`dialog`]);var SINGLETON_CHANNELS=new Set([`banner`]);function createEmptyChannelState(){return{snackbar:[],banner:[],dialog:[]}}function cloneEntry(entry={}){return Object.freeze({id:String(entry.id||``).trim(),channel:String(entry.channel||``).trim(),message:String(entry.message||``).trim(),severity:String(entry.severity||`error`).trim(),persist:Boolean(entry.persist),action:entry.action||null,additionalActions:entry.additionalActions,presenterId:String(entry.presenterId||``).trim(),dedupeKey:String(entry.dedupeKey||``).trim(),timestamp:Number(entry.timestamp||0)})}function createErrorPresentationStore({now=()=>Date.now()}={}){const listeners=new Set;const subscribe=createListenerSubscription(listeners);const channelState=createEmptyChannelState();let sequence=0;let revision=0;function getChannelEntries(channel){if(!PRESENTATION_CHANNELS.includes(channel))throw new Error(`Unknown presentation channel "${channel}".`);return channelState[channel]}function getState(){return Object.freeze({revision,channels:Object.freeze({snackbar:Object.freeze(channelState.snackbar.map(cloneEntry)),banner:Object.freeze(channelState.banner.map(cloneEntry)),dialog:Object.freeze(channelState.dialog.map(cloneEntry))})})}function notify(event={}){const snapshot=getState();for(const listener of listeners)try{listener(snapshot,Object.freeze({...event}))}catch{}}function present(channel,payload={}){const normalizedChannel=String(channel||``).trim();const entries=getChannelEntries(normalizedChannel);sequence+=1;const entry=Object.freeze({id:normalizeText$2(payload.id,`${normalizedChannel}-${sequence}`),channel:normalizedChannel,message:normalizeText$2(payload.message,`Request failed.`),severity:normalizeSeverity(payload.severity,`error`),persist:typeof payload.persist===`boolean`?payload.persist:normalizedChannel!==`snackbar`,action:normalizeAction(payload.action),additionalActions:normalizeAdditionalActions(payload.additionalActions),presenterId:normalizeText$2(payload.presenterId),dedupeKey:normalizeText$2(payload.dedupeKey),timestamp:Number(now())});if(SINGLETON_CHANNELS.has(normalizedChannel)&&entries.length>0)entries.splice(0,entries.length);entries.push(entry);revision+=1;notify({type:`presented`,channel:normalizedChannel,id:entry.id});return entry.id}function dismiss(channel,presentationId=``){const normalizedChannel=String(channel||``).trim();const entries=getChannelEntries(normalizedChannel);const normalizedPresentationId=normalizeText$2(presentationId);if(!normalizedPresentationId){if(entries.length<1)return 0;const removed=entries.length;entries.splice(0,entries.length);revision+=1;notify({type:`dismissed`,channel:normalizedChannel,id:``,count:removed});return removed}const index=entries.findIndex(entry=>entry.id===normalizedPresentationId);if(index<0)return 0;entries.splice(index,1);revision+=1;notify({type:`dismissed`,channel:normalizedChannel,id:normalizedPresentationId,count:1});return 1}function clear(channel=``){const normalizedChannel=normalizeText$2(channel).toLowerCase();if(!normalizedChannel){let removedCount=0;for(const candidateChannel of PRESENTATION_CHANNELS)removedCount+=dismiss(candidateChannel,``);return removedCount}return dismiss(normalizedChannel,``)}return Object.freeze({getState,subscribe,present,dismiss,clear})}var DEFAULT_DEBUG_DEPTH=4;function describeFunction(fn){return`[Function ${fn?.name||`anonymous`}]`}function describeSymbol(value){return value?.toString?value.toString():`[Symbol]`}function explodePayload(value,depth=4){const visited=new WeakSet;function walk(node,remaining){if(node===null||typeof node!==`object`){if(typeof node===`function`)return describeFunction(node);if(typeof node===`symbol`)return describeSymbol(node);return node}if(visited.has(node))return`[Circular]`;visited.add(node);if(remaining<=0)return Array.isArray(node)?`[Array]`:`[Object]`;if(Array.isArray(node))return node.map(entry=>walk(entry,remaining-1));if(node instanceof Date)return node.toISOString();const next={};for(const[key,child]of Object.entries(node))next[key]=walk(child,remaining-1);return next}return walk(value,depth)}function ensureArray(value){if(Array.isArray(value))return value;if(value===void 0||value===null)return[];return[value]}var PLACEMENT_DEBUG_PREFIX=`[placement-debug]`;var PLACEMENT_DEBUG_FLAG=`__JSKIT_PLACEMENT_DEBUG__`;var WEB_PLACEMENT_SURFACE_ANY=`*`;var NOOP=()=>{};function isPlacementDebugEnabled(){if(typeof globalThis!==`object`||!globalThis)return false;return globalThis[PLACEMENT_DEBUG_FLAG]===true}function debugLog(message,payload=null){if(!isPlacementDebugEnabled())return;if(payload===null||payload===void 0){console.log(`${PLACEMENT_DEBUG_PREFIX} ${message}`);return}const terminalPayload=explodePayload(payload,4);const rendered=JSON.stringify(terminalPayload,null,2);console.log(`${PLACEMENT_DEBUG_PREFIX} ${message}\n${rendered}`)}function createRuntimeLogger(logger){const runtimeLogger=isRecord$2(logger)?logger:{};let warn=NOOP;let error=NOOP;if(typeof runtimeLogger.warn===`function`)warn=runtimeLogger.warn.bind(runtimeLogger);if(typeof runtimeLogger.error===`function`)error=runtimeLogger.error.bind(runtimeLogger);return Object.freeze({warn,error})}function normalizePlacementList(placements,context={}){const normalized=[];for(const candidate of ensureArray(placements)){const placement=normalizePlacementDefinition(candidate,{strict:false,source:`app placement`});if(!placement||placement.enabled===false)continue;normalized.push(placement)}const byId=new Map;for(const placement of normalized){if(byId.has(placement.id))throw new Error(`Duplicate placement id "${placement.id}" in ${context.source||`placement list`}.`);byId.set(placement.id,placement)}return[...byId.values()].map((placement,index)=>({placement,index})).sort((left,right)=>{const orderCompare=left.placement.order-right.placement.order;if(orderCompare!==0)return orderCompare;return left.index-right.index}).map(entry=>entry.placement)}function normalizeTopologyList(topology,context={}){if(Array.isArray(topology))return normalizeTopologyList(normalizePlacementTopologyDefinition({placements:topology},{context:context.source||`placement topology`}),context);const candidates=ensureArray(topology);const entries=[];for(const candidate of candidates){const normalized=normalizePlacementTopologyDefinition(candidate,{context:context.source||`placement topology`});entries.push(...normalized.placements)}const byKey=new Map;for(const entry of entries){const key=`${entry.id}::${entry.owner||``}`;if(byKey.has(key))throw new Error(`Duplicate semantic placement "${entry.id}"${entry.owner?` for owner "${entry.owner}"`:``} in ${context.source||`placement topology`}.`);byKey.set(key,entry)}return Object.freeze([...byKey.values()])}function matchesSurface(placementSurfaces,requestedSurface){if(requestedSurface===WEB_PLACEMENT_SURFACE_ANY)return true;const surfaces=Array.isArray(placementSurfaces)?placementSurfaces:[WEB_PLACEMENT_SURFACE_ANY];return surfaces.includes(WEB_PLACEMENT_SURFACE_ANY)||surfaces.includes(requestedSurface)}function resolveTopologyPlacement(topologyEntries=[],placement={},requestedSurface=WEB_PLACEMENT_SURFACE_ANY){const semanticTarget=String(placement.target||``).trim();const owner=String(placement.owner||``).trim();const matches=topologyEntries.filter(entry=>{if(entry.id!==semanticTarget)return false;if(owner&&entry.owner!==owner)return false;if(!owner&&entry.owner)return false;return matchesSurface(entry.surfaces,requestedSurface)});if(matches.length===1)return matches[0];return null}function resolveRenderablePlacement({placement={},topologyEntries=[],requestedSurface=WEB_PLACEMENT_SURFACE_ANY,requestedTarget=``,requestedLayoutClass=`compact`}={}){if(placement.targetType===`concrete`){if(placement.target!==requestedTarget)return null;return placement}const topologyPlacement=resolveTopologyPlacement(topologyEntries,placement,requestedSurface);if(!topologyPlacement)return null;const variant=topologyPlacement.variants?.[requestedLayoutClass]||null;if(!variant||variant.outlet!==requestedTarget)return null;const componentToken=String(placement.componentToken||variant.renderers?.[placement.kind]||``).trim();if(!componentToken)return null;return Object.freeze({...placement,target:requestedTarget,semanticTarget:placement.target,topologyOwner:topologyPlacement.owner||``,layoutClass:requestedLayoutClass,componentToken})}function resolveContextContributors(contributors,baseContext={},logger){let merged={};for(const contributor of ensureArray(contributors))try{const resolved=typeof contributor===`function`?contributor(Object.freeze({...baseContext})):contributor;if(isRecord$2(resolved))merged={...merged,...resolved}}catch(error){logger.warn({contributor,error:String(error?.message||error||`unknown error`)},`Failed to evaluate web placement context contributor.`)}return merged}function resolvePlacementComponent(components,placement,logger,missingTokens,invalidComponentTokens,failedTokens){const componentToken=String(placement.componentToken||``).trim();if(!componentToken)return null;if(invalidComponentTokens.has(componentToken)||failedTokens.has(componentToken))return null;if(!components.has(componentToken)){if(!missingTokens.has(componentToken)){missingTokens.add(componentToken);logger.warn({placementId:placement.id,componentToken},`Skipping placement because component token is not bound.`)}return null}let component=null;try{component=components.get(componentToken)}catch(error){if(!failedTokens.has(componentToken)){failedTokens.add(componentToken);logger.error({placementId:placement.id,componentToken,error:String(error?.message||error||`unknown error`)},`Skipping placement because component token resolution threw.`)}return null}if(!isRenderableComponent(component)){if(!invalidComponentTokens.has(componentToken)){invalidComponentTokens.add(componentToken);logger.warn({placementId:placement.id,componentToken},`Skipping placement because component token did not resolve to a Vue component.`)}return null}return component}function shouldIncludePlacement(placement,placementContext,logger){if(typeof placement.when!==`function`)return true;try{return placement.when(Object.freeze({...placementContext}))===true}catch(error){logger.warn({placementId:placement.id,error:String(error?.message||error||`unknown error`)},`Placement when() predicate failed; placement was skipped.`);return false}}function createWebPlacementRuntime({components,contextContributors=[],logger=null}={}){if(!components||typeof components.has!==`function`||typeof components.get!==`function`)throw new Error(`createWebPlacementRuntime requires a client component registry.`);const runtimeLogger=createRuntimeLogger(logger);const missingTokens=new Set;const invalidComponentTokens=new Set;const failedTokens=new Set;const listeners=new Set;const subscribe=createListenerSubscription(listeners);let placementDefinitions=Object.freeze([]);let placementTopology=Object.freeze([]);let sharedContext=Object.freeze({});let revision=0;function notify(event={}){revision+=1;debugLog(`notify`,{revision,event});for(const listener of listeners)try{listener(Object.freeze({revision,...event}))}catch(error){runtimeLogger.warn({error:String(error?.message||error||`unknown error`)},`Web placement runtime listener threw during notification.`)}}function replacePlacements(entries=[],{source=`app placement registry`}={}){missingTokens.clear();invalidComponentTokens.clear();failedTokens.clear();placementDefinitions=Object.freeze(normalizePlacementList(entries,{source}));debugLog(`replacePlacements`,{source,count:placementDefinitions.length,ids:placementDefinitions.map(entry=>entry.id)});notify({type:`placements.replaced`,source})}function replacePlacementTopology(topology=[],{source=`app placement topology`}={}){missingTokens.clear();invalidComponentTokens.clear();failedTokens.clear();placementTopology=normalizeTopologyList(topology,{source});debugLog(`replacePlacementTopology`,{source,count:placementTopology.length,ids:placementTopology.map(entry=>entry.owner?`${entry.id}#${entry.owner}`:entry.id)});notify({type:`placement-topology.replaced`,source})}function getContext(){return sharedContext}function setContext(value={},{replace=false,source=`placement-context`}={}){const next=isRecord$2(value)?{...value}:{};let nextContext=next;if(!replace)nextContext={...sharedContext,...next};sharedContext=Object.freeze(nextContext);debugLog(`setContext`,{replace,source,keys:Object.keys(sharedContext)});notify({type:`context.updated`,source});return sharedContext}function getRevision(){return revision}function getPlacements({surface=WEB_PLACEMENT_SURFACE_ANY,target=``,layoutClass=``,context={}}={}){const normalizedTarget=normalizePlacementTarget(target,{strict:false});if(!normalizedTarget)return Object.freeze([]);const normalizedSurface=normalizeSurface(surface);const normalizedLayoutClass=normalizePlacementLayoutClass(layoutClass)||normalizePlacementLayoutClass(sharedContext?.layoutClass)||`compact`;const baseContext=isRecord$2(context)?{...context}:{};const contextFromRuntime=isRecord$2(sharedContext)?sharedContext:{};const placementContext={...resolveContextContributors(contextContributors,{surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass,context:{...contextFromRuntime,...baseContext}},runtimeLogger),...contextFromRuntime,...baseContext,surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass};debugLog(`getPlacements:start`,{surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass,contextKeys:Object.keys(baseContext),sharedContextKeys:Object.keys(contextFromRuntime),placementCount:placementDefinitions.length,topologyCount:placementTopology.length});const matches=[];for(const placement of placementDefinitions){const renderablePlacement=resolveRenderablePlacement({placement,topologyEntries:placementTopology,requestedSurface:normalizedSurface,requestedTarget:normalizedTarget,requestedLayoutClass:normalizedLayoutClass});if(!renderablePlacement)continue;const placementSurfaces=Array.isArray(renderablePlacement.surfaces)?renderablePlacement.surfaces:[WEB_PLACEMENT_SURFACE_ANY];if(!matchesSurface(placementSurfaces,normalizedSurface)){debugLog(`getPlacements:skip-surfaces`,{placementId:renderablePlacement.id,placementSurfaces,requestedSurface:normalizedSurface});continue}if(!shouldIncludePlacement(renderablePlacement,placementContext,runtimeLogger)){debugLog(`getPlacements:skip-when`,{placementId:renderablePlacement.id});continue}const component=resolvePlacementComponent(components,renderablePlacement,runtimeLogger,missingTokens,invalidComponentTokens,failedTokens);if(!component){debugLog(`getPlacements:skip-component`,{placementId:renderablePlacement.id,componentToken:renderablePlacement.componentToken});continue}debugLog(`getPlacements:include`,{placementId:renderablePlacement.id,componentToken:renderablePlacement.componentToken,placementSurfaces,order:renderablePlacement.order});matches.push(Object.freeze({...renderablePlacement,component}))}debugLog(`getPlacements:done`,{surface:normalizedSurface,target:normalizedTarget,layoutClass:normalizedLayoutClass,resultIds:matches.map(entry=>entry.id)});return Object.freeze(matches)}return Object.freeze({replacePlacements,replacePlacementTopology,getPlacements,getContext,setContext,subscribe,getRevision})}var DEFAULT_BOOTSTRAP_PATH=`/api/bootstrap`;function normalizeObject(value){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function buildBootstrapUrl({path=DEFAULT_BOOTSTRAP_PATH,query={}}={}){const normalizedPath=String(path||DEFAULT_BOOTSTRAP_PATH).trim()||DEFAULT_BOOTSTRAP_PATH;const params=new URLSearchParams;for(const[key,value]of Object.entries(normalizeObject(query))){const normalizedKey=String(key||``).trim();const normalizedValue=String(value||``).trim();if(!normalizedKey||!normalizedValue)continue;params.set(normalizedKey,normalizedValue)}const queryString=params.toString();return queryString?`${normalizedPath}?${queryString}`:normalizedPath}function normalizeBootstrapResponseError(response,url){const error=new Error(`Bootstrap payload request failed with status ${response.status}.`);error.statusCode=Number(response.status||0);error.url=url;return error}function createShellBootstrapRuntime({handlers,placementRuntime,requestRecoveryRuntime=null,router=null,logger,fetchImplementation=globalThis.fetch,bootstrapPath=DEFAULT_BOOTSTRAP_PATH}={}){if(!handlers||typeof handlers.list!==`function`)throw new Error(`createShellBootstrapRuntime requires a bootstrap handler registry.`);if(!placementRuntime||typeof placementRuntime.setContext!==`function`)throw new Error(`createShellBootstrapRuntime requires a placement runtime.`);const runtimeLogger=createProviderLogger(logger);let initialized=false;let refreshQueue=Promise.resolve();async function resolveBootstrapRequest(reason=`manual`){const payloadHandlers=handlers.list();let request={path:bootstrapPath,query:{},meta:{}};for(const handler of payloadHandlers){if(typeof handler.resolveBootstrapRequest!==`function`)continue;const contribution=normalizeObject(await handler.resolveBootstrapRequest({router,placementRuntime,reason,request:Object.freeze({path:request.path,query:Object.freeze({...request.query}),meta:Object.freeze({...request.meta})})}));request={path:String(contribution.path||request.path||bootstrapPath).trim()||bootstrapPath,query:{...request.query,...normalizeObject(contribution.query)},meta:{...request.meta,...normalizeObject(contribution.meta)}}}return Object.freeze({path:request.path,query:Object.freeze({...request.query}),meta:Object.freeze({...request.meta})})}async function applyBootstrapPayload(payload,reason=`manual`,request=Object.freeze({})){const payloadHandlers=handlers.list();const source=`shell-web.bootstrap.${String(reason||`manual`).trim()||`manual`}`;for(const handler of payloadHandlers)await handler.applyBootstrapPayload({router,placementRuntime,payload,request,reason,source});return payload}async function applyBootstrapError(error,reason=`manual`,request=Object.freeze({})){const payloadHandlers=handlers.list();const source=`shell-web.bootstrap.${String(reason||`manual`).trim()||`manual`}`;for(const handler of payloadHandlers){if(typeof handler.handleBootstrapError!==`function`)continue;await handler.handleBootstrapError({router,placementRuntime,error,request,reason,source})}}async function performRefresh(reason=`manual`){if(typeof fetchImplementation!==`function`)throw new Error(`Bootstrap payload fetch requires a fetch implementation.`);const request=await resolveBootstrapRequest(reason);const url=buildBootstrapUrl(request);try{const response=await fetchImplementation(url,{method:`GET`,credentials:`include`,headers:{accept:`application/json`}});if(!response.ok)throw normalizeBootstrapResponseError(response,url);return applyBootstrapPayload(await response.json(),reason,request)}catch(error){await applyBootstrapError(error,reason,request);requestRecoveryRuntime?.report?.(error,{label:`App data`,retry:()=>refresh(reason),source:`shell-web.bootstrap`,dedupeKey:`shell-web.bootstrap.${String(reason||`manual`).trim()||`manual`}.request-failed`});runtimeLogger.warn({reason,error:String(error?.message||error||`unknown error`)},`shell-web bootstrap refresh failed.`);return null}}function refresh(reason=`manual`){refreshQueue=refreshQueue.then(()=>performRefresh(reason));return refreshQueue}async function initialize(){if(initialized)return null;initialized=true;return refresh(`init`)}return Object.freeze({initialize,refresh})}function normalizeBootstrapPayloadHandler(entry){if(typeof entry===`function`)return Object.freeze({handlerId:String(entry.name||`anonymous`),order:0,applyBootstrapPayload:entry});if(!entry||typeof entry!==`object`||typeof entry.applyBootstrapPayload!==`function`)throw new TypeError(`Bootstrap payload handlers require applyBootstrapPayload().`);const handlerId=String(entry.handlerId||``).trim();if(!handlerId)throw new TypeError(`Bootstrap payload handlers require handlerId.`);return Object.freeze({...entry,handlerId,order:Number.isFinite(entry.order)?Number(entry.order):0})}function createBootstrapPayloadHandlerRegistry(){const handlers=new Map;function register(entry){const handler=normalizeBootstrapPayloadHandler(entry);if(handlers.has(handler.handlerId))throw new Error(`Bootstrap payload handler "${handler.handlerId}" is duplicated.`);handlers.set(handler.handlerId,handler);return api}function list(){return Object.freeze([...handlers.values()].sort((left,right)=>{if(left.order!==right.order)return left.order-right.order;return left.handlerId.localeCompare(right.handlerId)}))}const api=Object.freeze({register,list});return api}function resolveBootstrapErrorStatusCode(error){const statusCode=Number(error?.statusCode||error?.status||0);return Number.isInteger(statusCode)&&statusCode>0?statusCode:0}var APP_PLACEMENT_MODULE_SPECIFIER=`/src/placement.js`;var APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER=`/src/placementTopology.js`;var APP_ERROR_MODULE_SPECIFIER=`/src/error.js`;var ASYNC_MODULE_RELOAD_FAILURE_MESSAGE=`The app cannot reload because the app server is not reachable. Restart the server, then click Reload.`;async function loadAppPlacementDefinitions(logger,asyncModuleRecoveryRuntime=null){try{const exported=(await __vitePreload(()=>import(`./placement-CQy46H3H.js`).then(n=>n.n),__vite__mapDeps([116,7,79,1,53,45,18,109,117,46])))?.default;const resolved=typeof exported===`function`?exported():exported;if(Array.isArray(resolved))return resolved;logger.warn({module:APP_PLACEMENT_MODULE_SPECIFIER,exportedType:typeof exported},`App placement module default export did not resolve to an array; using empty list.`)}catch(error){if(isMissingDynamicModule(error,APP_PLACEMENT_MODULE_SPECIFIER))return[];notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label:`Placement config`});logger.warn({module:APP_PLACEMENT_MODULE_SPECIFIER,error:String(error?.message||error||`unknown error`)},`Failed to load app placement module; using empty list.`)}return[]}async function loadAppPlacementTopology(logger,asyncModuleRecoveryRuntime=null){try{const exported=(await __vitePreload(()=>import(`./placementTopology-CDhUIK6L.js`),[]))?.default;return resolveAppPlacementTopologyExport(exported,logger)}catch(error){if(isMissingDynamicModule(error,APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER))return[];notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label:`Placement topology`});logger.warn({module:APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER,error:String(error?.message||error||`unknown error`)},`Failed to load app placement topology module; using empty topology.`)}return[]}function resolveAppPlacementTopologyExport(exported,logger){const resolved=typeof exported===`function`?exported():exported;if(Array.isArray(resolved))return resolved;if(resolved&&typeof resolved===`object`)return resolved;logger.warn({module:APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER,exportedType:typeof exported},`App placement topology module default export did not resolve to an object or array; using empty topology.`);return[]}function createErrorConfigToolkit(errorRuntime){return Object.freeze({createDefaultErrorPolicy,moduleDefaultPresenterId:`material.snackbar`,presenterFactories:Object.freeze({createMaterialSnackbarPresenter,createMaterialBannerPresenter,createMaterialDialogPresenter}),runtime:errorRuntime})}async function loadAppErrorConfig(logger,errorRuntime,asyncModuleRecoveryRuntime=null){try{const exported=(await __vitePreload(()=>import(`./error-DgrgRbJJ.js`),__vite__mapDeps([163,78,1,45])))?.default;const toolkit=createErrorConfigToolkit(errorRuntime);const resolved=typeof exported===`function`?await exported(toolkit):exported;if(isRecord$2(resolved))return resolved;logger.warn({module:APP_ERROR_MODULE_SPECIFIER,exportedType:typeof exported},`App error module default export did not resolve to an object; using shell-web defaults.`)}catch(error){if(isMissingDynamicModule(error,APP_ERROR_MODULE_SPECIFIER))return{};notifyDynamicImportFailure(asyncModuleRecoveryRuntime,error,{label:`Error config`});logger.warn({module:APP_ERROR_MODULE_SPECIFIER,error:String(error?.message||error||`unknown error`)},`Failed to load app error module; using shell-web defaults.`)}return{}}function applyAppErrorConfig(errorRuntime,errorConfig={}){const source=isRecord$2(errorConfig)?errorConfig:{};const configPayload={};if(Array.isArray(source.presenters)&&source.presenters.length>0)configPayload.presenters=source.presenters;if(Object.prototype.hasOwnProperty.call(source,`policy`))configPayload.policy=source.policy;if(Object.prototype.hasOwnProperty.call(source,`defaultPresenterId`))configPayload.defaultPresenterId=source.defaultPresenterId;if(Object.keys(configPayload).length>0){errorRuntime.configure(configPayload);return}errorRuntime.assertBootReady()}function isPullRefreshQuery(query=null){const meta=isRecord$2(query?.meta)?query.meta:{};if(meta.jskitRefresh===`pull`)return true;if(meta.jskitRefresh===false)return false;return(isRecord$2(meta.jskit)?meta.jskit:{}).refreshOnPull!==false}function createShellRefreshRuntime({bootstrapRuntime=null,queryClient=null,errorRuntime=null,logger=null}={}){const runtimeLogger=createProviderLogger(logger);let refreshQueue=Promise.resolve(null);async function refreshBootstrap(reason){if(!bootstrapRuntime||typeof bootstrapRuntime.refresh!==`function`)return false;await bootstrapRuntime.refresh(reason);return true}async function refetchPullQueries(){if(!queryClient||typeof queryClient.refetchQueries!==`function`)return false;await queryClient.refetchQueries({type:`active`,predicate:isPullRefreshQuery},{throwOnError:false});return true}function reportRefreshFailure(error){runtimeLogger.warn({error:String(error?.message||error||`unknown error`)},`Shell refresh failed.`);if(!errorRuntime||typeof errorRuntime.report!==`function`)return;errorRuntime.report({source:`shell-web.refresh`,message:`Unable to refresh. Check the connection and try again.`,intent:`app-recoverable`,severity:`error`,dedupeKey:`shell-web.refresh.failed`,dedupeWindowMs:2e3,action:{label:`Retry`,dismissOnRun:true,handler(){refresh(`retry`)}}})}async function performRefresh(reason=`manual`){const normalizedReason=String(reason||`manual`).trim()||`manual`;try{const[bootstrapRefreshed,queriesRefetched]=await Promise.all([refreshBootstrap(normalizedReason),refetchPullQueries()]);return Object.freeze({reason:normalizedReason,bootstrapRefreshed,queriesRefetched})}catch(error){reportRefreshFailure(error);return Object.freeze({reason:normalizedReason,bootstrapRefreshed:false,queriesRefetched:false,error})}}function refresh(reason=`manual`){refreshQueue=refreshQueue.catch(()=>null).then(()=>performRefresh(reason));return refreshQueue}return Object.freeze({refresh})}function installVueErrorBridge(vueApp,errorRuntime,logger){if(!vueApp||!isRecord$2(vueApp.config))return;const previousHandler=typeof vueApp.config.errorHandler===`function`?vueApp.config.errorHandler:null;vueApp.config.errorHandler=(error,instance,info)=>{try{errorRuntime.report({source:`shell-web.vue.error-handler`,message:String(error?.message||`Unexpected UI error.`),cause:error,intent:`blocking`,severity:`error`,details:{info:String(info||``)}})}catch(reportError){logger.error({source:`shell-web.vue.error-handler`,error:String(reportError?.message||reportError||`unknown error`)},`Shell web error runtime failed to report a Vue error.`)}if(previousHandler)previousHandler(error,instance,info)}}function installRouterErrorBridge(router,errorRuntime,logger){if(!router||typeof router.onError!==`function`)return;router.onError(error=>{if(isDynamicImportError(error))return;try{errorRuntime.report({source:`shell-web.router.on-error`,message:String(error?.message||`Navigation failed.`),cause:error,intent:`app-recoverable`,severity:`error`,dedupeKey:String(error?.message||`navigation-failed`),dedupeWindowMs:2e3})}catch(reportError){logger.error({source:`shell-web.router.on-error`,error:String(reportError?.message||reportError||`unknown error`)},`Shell web error runtime failed to report a router error.`)}})}function createShellAsyncModuleRecoveryRuntime({router=null,errorRuntime=null,logger=null}={}){const runtimeLogger=createProviderLogger(logger);const state=createAsyncModuleRecoveryState();let installedRecovery=null;function report(nextState=state){if(!errorRuntime||typeof errorRuntime.report!==`function`){runtimeLogger.warn({label:String(nextState?.label||``)},`Async module recovery could not report because the shell error runtime is unavailable.`);return null}try{return errorRuntime.report({source:`shell-web.async-module-recovery`,message:String(nextState?.message||`A required app module could not load.`),cause:nextState?.error||null,intent:`app-recoverable`,severity:`warning`,dedupeKey:`shell-web.async-module-recovery.${Number(nextState?.attempt||0)}`,action:{label:`Reload`,dismissOnRun:true,handler(){return reload()}}})}catch(error){runtimeLogger.error({label:String(nextState?.label||``),error:String(error?.message||error||`unknown error`)},`Async module recovery could not report through the shell error runtime.`);return null}}async function reload(){const reloaded=await guardedReloadApp({state,label:`App`,message:ASYNC_MODULE_RELOAD_FAILURE_MESSAGE});if(!reloaded)report(state);return reloaded}function notify(error=null,{label=`App module`,message=``,stale=isDynamicImportError(error)}={}){notifyAsyncModuleLoadError(state,error,{label,message,retry:state.retry,stale});return report(state)}function install(){if(installedRecovery)return installedRecovery;installedRecovery=installAsyncModuleRecoveryHandlers({state,label:`App module`,router,onNotify:report});return installedRecovery}function dispose(){installedRecovery?.dispose?.();installedRecovery=null}return Object.freeze({dispose,install,notify,reload,report,state})}var ShellWebClientProvider=defineProvider({id:`shell.web.client`,requires:{components:`client.components`,loggerInput:`client.logger`,pinia:`client.pinia`,queryClient:`client.query`,router:`client.router`,surfaceRuntime:`client.surface`,vueApp:`client.vue`},provides:{shell:`client.shell`},setup({components,loggerInput,queryClient,router}){const logger=createProviderLogger(loggerInput);const bootstrapHandlers=createBootstrapPayloadHandlerRegistry();bootstrapHandlers.register(Object.freeze({handlerId:`shell.web.bootstrap.surface-access`,order:0,applyBootstrapPayload({payload={},placementRuntime,source}={}){placementRuntime.setContext({surfaceAccess:payload?.surfaceAccess&&typeof payload.surfaceAccess===`object`?payload.surfaceAccess:{}},{source})},handleBootstrapError({error,placementRuntime,source}={}){if(resolveBootstrapErrorStatusCode(error)!==401)return;placementRuntime.setContext({surfaceAccess:{}},{source})}}));const errorPresentationStore=createErrorPresentationStore();const errorRuntime=createErrorRuntime({presenters:createDefaultMaterialErrorPresenters({store:errorPresentationStore}),policy:createDefaultErrorPolicy(),moduleDefaultPresenterId:`material.snackbar`,logger});const placementRuntime=createWebPlacementRuntime({components,logger});const asyncModuleRecoveryRuntime=createShellAsyncModuleRecoveryRuntime({router,errorRuntime,logger});const requestRecoveryRuntime=createShellRequestRecoveryRuntime({queryClient,errorRuntime,logger});const bootstrapRuntime=createShellBootstrapRuntime({handlers:bootstrapHandlers,placementRuntime,requestRecoveryRuntime,router,logger});const refreshRuntime=createShellRefreshRuntime({bootstrapRuntime,queryClient,errorRuntime,logger});return{shell:Object.freeze({asyncModuleRecovery:asyncModuleRecoveryRuntime,bootstrap:bootstrapRuntime,bootstrapHandlers,error:errorRuntime,errorPresentationStore,placement:placementRuntime,refresh:refreshRuntime,requestRecovery:requestRecoveryRuntime})}},async boot({loggerInput,pinia,router,surfaceRuntime,vueApp},{outputs}){const logger=createProviderLogger(loggerInput);const{asyncModuleRecovery:asyncModuleRecoveryRuntime,bootstrap:bootstrapRuntime,error:errorRuntime,errorPresentationStore,placement:placementRuntime,refresh:refreshRuntime,requestRecovery:requestRecoveryRuntime}=outputs.shell;asyncModuleRecoveryRuntime.install();if(placementRuntime&&typeof placementRuntime.replacePlacements===`function`){const placementTopology=await loadAppPlacementTopology(logger,asyncModuleRecoveryRuntime);if(typeof placementRuntime.replacePlacementTopology===`function`)placementRuntime.replacePlacementTopology(placementTopology,{source:APP_PLACEMENT_TOPOLOGY_MODULE_SPECIFIER});const placements=await loadAppPlacementDefinitions(logger,asyncModuleRecoveryRuntime);placementRuntime.replacePlacements(placements,{source:APP_PLACEMENT_MODULE_SPECIFIER});const appConfig=getClientAppConfig();const surfaceConfig=buildSurfaceConfigContext(surfaceRuntime,{tenancyMode:appConfig?.tenancyMode});const surfaceAccessPolicies=appConfig?.surfaceAccessPolicies&&typeof appConfig.surfaceAccessPolicies===`object`?appConfig.surfaceAccessPolicies:{};placementRuntime.setContext({surfaceConfig,surfaceAccessPolicies},{source:`shell-web.surface-config`})}applyAppErrorConfig(errorRuntime,await loadAppErrorConfig(logger,errorRuntime,asyncModuleRecoveryRuntime));requestRecoveryRuntime.install();if(bootstrapRuntime&&typeof bootstrapRuntime.initialize===`function`)await bootstrapRuntime.initialize();if(!vueApp||typeof vueApp.provide!==`function`||typeof vueApp.use!==`function`)return;if(!pinia)throw new Error(`ShellWebClientProvider requires Pinia installed in the client app.`);useShellErrorPresentationStore(pinia).attachRuntimeStore(errorPresentationStore);vueApp.provide(`jskit.shell-web.runtime.web-placement.client`,placementRuntime);vueApp.provide(`jskit.shell-web.runtime.web-refresh.client`,refreshRuntime);vueApp.provide(`jskit.shell-web.runtime.web-error.client`,errorRuntime);vueApp.provide(SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,asyncModuleRecoveryRuntime);vueApp.provide(SHELL_REQUEST_RECOVERY_RUNTIME_KEY,requestRecoveryRuntime);vueApp.provide(`jskit.shell-web.runtime.web-error.presentation-store.client`,errorPresentationStore);installVueErrorBridge(vueApp,errorRuntime,logger);installRouterErrorBridge(router,errorRuntime,logger)},shutdown(_dependencies,{outputs}){outputs.shell.requestRecovery.dispose();outputs.shell.asyncModuleRecovery.dispose()}});var SHELL_LAYOUT_DRAWER_DEFAULT_OPEN_STORAGE_KEY=`jskit.shell-web.drawer-default-open`;function readDrawerDefaultOpenPreference({storage=typeof window===`object`?window?.localStorage:null}={}){if(!storage||typeof storage.getItem!==`function`)return true;try{const storedValue=String(storage.getItem(`jskit.shell-web.drawer-default-open`)||``).trim().toLowerCase();if(storedValue===`false`)return false;if(storedValue===`true`)return true}catch{return true}return true}function writeDrawerDefaultOpenPreference(open,{storage=typeof window===`object`?window?.localStorage:null}={}){if(!storage||typeof storage.setItem!==`function`)return;try{storage.setItem(SHELL_LAYOUT_DRAWER_DEFAULT_OPEN_STORAGE_KEY,open?`true`:`false`)}catch{}}var useShellLayoutStore=defineStore(`jskit.shell-web.layout`,()=>{const drawerDefaultOpen=ref(readDrawerDefaultOpenPreference());const drawerOpen=ref(drawerDefaultOpen.value);const supportingContentOpen=ref(false);const supportingContentTitle=ref(``);function setDrawerDefaultOpen(open){const normalized=Boolean(open);drawerDefaultOpen.value=normalized;drawerOpen.value=normalized;writeDrawerDefaultOpenPreference(normalized)}function setDrawerOpen(open){drawerOpen.value=Boolean(open)}function toggleDrawer(){drawerOpen.value=!drawerOpen.value}function openSupportingContent({title=``}={}){supportingContentTitle.value=String(title||``).trim();supportingContentOpen.value=true}function closeSupportingContent(){supportingContentOpen.value=false}function setSupportingContentOpen(open){supportingContentOpen.value=Boolean(open)}return{drawerDefaultOpen,drawerOpen,supportingContentOpen,supportingContentTitle,setDrawerDefaultOpen,setDrawerOpen,toggleDrawer,openSupportingContent,closeSupportingContent,setSupportingContentOpen}});function toSurfaceLabel(surfaceId=``){const normalizedSurfaceId=String(surfaceId||``).trim().toLowerCase();if(!normalizedSurfaceId)return`Surface`;return normalizedSurfaceId.split(/[^a-z0-9]+/g).filter(Boolean).map(segment=>`${segment.slice(0,1).toUpperCase()}${segment.slice(1)}`).join(` `)}function useShellLayoutState(props={}){const shellLayoutStore=useShellLayoutStore();const{drawerDefaultOpen,drawerOpen,supportingContentOpen,supportingContentTitle}=storeToRefs(shellLayoutStore);let route=null;try{route=useRoute()}catch{route=null}const{context:placementContext}=useWebPlacementContext();function toggleDrawer(){shellLayoutStore.toggleDrawer()}const resolvedSurface=computed(()=>{const explicitSurface=normalizeSurfaceId$1(props?.surface);if(explicitSurface)return explicitSurface;const pathname=String(route?.path||``).trim()||(typeof window===`object`&&window?.location?.pathname?String(window.location.pathname).trim():`/`);const contextValue=placementContext?.value||null;const resolvedSurfaceFromPath=resolveSurfaceIdFromPlacementPathname(contextValue,pathname);if(resolvedSurfaceFromPath)return resolvedSurfaceFromPath;const surfaceConfig=readPlacementSurfaceConfig(contextValue);if(surfaceConfig.defaultSurfaceId)return surfaceConfig.defaultSurfaceId;return`surface`});const resolvedSurfaceLabel=computed(()=>{const explicitLabel=String(props?.surfaceLabel||``).trim();if(explicitLabel)return explicitLabel;const surfaceDefinition=resolveSurfaceDefinitionFromPlacementContext(placementContext?.value||null,resolvedSurface.value);const configuredLabel=String(surfaceDefinition?.label||``).trim();if(configuredLabel)return configuredLabel;return toSurfaceLabel(resolvedSurface.value)});return Object.freeze({drawerDefaultOpen,drawerOpen,supportingContentOpen,supportingContentTitle,setDrawerDefaultOpen:shellLayoutStore.setDrawerDefaultOpen,setDrawerOpen:shellLayoutStore.setDrawerOpen,setSupportingContentOpen:shellLayoutStore.setSupportingContentOpen,openSupportingContent:shellLayoutStore.openSupportingContent,closeSupportingContent:shellLayoutStore.closeSupportingContent,toggleDrawer,resolvedSurface,resolvedSurfaceLabel})}var DESKTOP_DRAWER_CLOSED_MODES=Object.freeze([`rail`,`hidden`]);function normalizeDesktopDrawerClosedMode(value=`rail`){const normalized=String(value||`rail`).trim().toLowerCase();return DESKTOP_DRAWER_CLOSED_MODES.includes(normalized)?normalized:`rail`}function resolveShellDrawerPresentation({compact=false,open=false,desktopClosedMode=`rail`}={}){const closedMode=normalizeDesktopDrawerClosedMode(desktopClosedMode);if(compact)return Object.freeze({visible:Boolean(open),rail:false,kind:`modal`,closedMode});if(open)return Object.freeze({visible:true,rail:false,kind:`drawer`,closedMode});if(closedMode===`hidden`)return Object.freeze({visible:false,rail:false,kind:`hidden`,closedMode});return Object.freeze({visible:true,rail:true,kind:`rail`,closedMode})}function resolveShellDrawerToggleLabel({compact=false,open=false}={}){if(compact)return open?`Close navigation menu`:`Open navigation menu`;return open?`Collapse navigation drawer`:`Expand navigation drawer`}var DEFAULT_SHELL_DRAWER_WIDTH=248;var DEFAULT_SHELL_RAIL_WIDTH=80;var MINIMUM_SHELL_DRAWER_WIDTH=120;var MAXIMUM_SHELL_DRAWER_WIDTH=360;var MINIMUM_SHELL_RAIL_WIDTH=48;var MAXIMUM_SHELL_RAIL_WIDTH=160;var DEFAULT_SHELL_NAVIGATION_ITEM_SPACING=12;var MINIMUM_SHELL_NAVIGATION_ITEM_SPACING=8;var MAXIMUM_SHELL_NAVIGATION_ITEM_SPACING=24;function clampNumber(value,minimum,maximum){return Math.min(maximum,Math.max(minimum,value))}function normalizeShellDrawerWidth(value,fallback=248){const parsed=Number(value);if(!Number.isFinite(parsed)||parsed<=0)return fallback;return clampNumber(parsed,120,360)}function normalizeShellRailWidth(value,fallback=80){const parsed=Number(value);if(!Number.isFinite(parsed)||parsed<=0)return fallback;return clampNumber(Math.round(parsed),MINIMUM_SHELL_RAIL_WIDTH,MAXIMUM_SHELL_RAIL_WIDTH)}function normalizeShellNavigationItemSpacing(value,fallback=12){const parsed=Number(value);if(!Number.isFinite(parsed)||parsed<=0)return fallback;return clampNumber(Math.round(parsed),MINIMUM_SHELL_NAVIGATION_ITEM_SPACING,MAXIMUM_SHELL_NAVIGATION_ITEM_SPACING)}function resolveContentAwareDrawerWidth(measurements=[],{endGap=12,minimum=120,maximum=360,fallback=248}={}){let requiredWidth=0;for(const measurement of measurements){const logicalStart=Number(measurement?.logicalStart);const textWidth=Number(measurement?.textWidth);if(!Number.isFinite(logicalStart)||logicalStart<0||!Number.isFinite(textWidth)||textWidth<=0)continue;requiredWidth=Math.max(requiredWidth,logicalStart+textWidth+Number(endGap||0))}if(requiredWidth<=0)return normalizeShellDrawerWidth(fallback);return clampNumber(Math.ceil(requiredWidth*4)/4,minimum,maximum)}var _sfc_main$12={__name:`ShellOutlet`,props:{target:{type:String,default:``},default:{type:Boolean,default:false},context:{type:Object,default:()=>({})}},setup(__props){const props=__props;let route=null;try{route=useRoute()}catch{route=null}let display=null;try{display=useDisplay()}catch{display=null}const placementRuntime=useWebPlacementRuntime();const{context:placementContext}=useWebPlacementContext();const revision=ref(typeof placementRuntime.getRevision===`function`?placementRuntime.getRevision():0);let unsubscribe=null;onMounted(()=>{if(typeof placementRuntime.subscribe!==`function`)return;unsubscribe=placementRuntime.subscribe(event=>{const next=Number(event?.revision);revision.value=Number.isInteger(next)?next:revision.value+1})});onBeforeUnmount(()=>{if(typeof unsubscribe===`function`){unsubscribe();unsubscribe=null}});const resolvedSurface=computed(()=>{const contextValue=placementContext?.value||null;const pathname=resolveRuntimePathname(route?.path);const surfaceFromPathname=resolveSurfaceIdFromPlacementPathname(contextValue,pathname);if(surfaceFromPathname)return surfaceFromPathname;const surfaceConfig=readPlacementSurfaceConfig(contextValue);if(surfaceConfig.defaultSurfaceId)return surfaceConfig.defaultSurfaceId;return`*`});const resolvedTargetId=computed(()=>{return String(props.target||``).trim()});const resolvedLayoutClass=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();if(displayName===`xs`||displayName===`sm`)return`compact`;if(displayName===`md`)return`medium`;if(displayName===`lg`||displayName===`xl`||displayName===`xxl`)return`expanded`;const viewportWidth=typeof window===`object`&&window?.innerWidth?Number(window.innerWidth):0;if(viewportWidth>0&&viewportWidth<600)return`compact`;if(viewportWidth>0&&viewportWidth<1280)return`medium`;return`expanded`});const placements=computed(()=>{revision.value;return placementRuntime.getPlacements({surface:resolvedSurface.value,target:resolvedTargetId.value,layoutClass:resolvedLayoutClass.value,context:props.context})});return(_ctx,_cache)=>{return openBlock(true),createElementBlock(Fragment,null,renderList(placements.value,entry=>{return openBlock(),createBlock(resolveDynamicComponent(entry.component),mergeProps({key:entry.id},{ref_for:true},entry.props),null,16)}),128)}}};function normalizeMenuLinkPathname(pathname=``){const source=String(pathname||``).trim();if(!source)return``;const queryIndex=source.indexOf(`?`);const hashIndex=source.indexOf(`#`);const cutoff=queryIndex<0?hashIndex:hashIndex<0?queryIndex:Math.min(queryIndex,hashIndex);return cutoff<0?source:source.slice(0,cutoff)}function resolveMenuLinkSurfaceId(surface=``,fallbackSurfaceId=``){const explicitSurface=normalizeText$3(surface).toLowerCase();if(explicitSurface&&explicitSurface!==`*`)return explicitSurface;return normalizeText$3(fallbackSurfaceId).toLowerCase()}function interpolateBracketParams(pathTemplate=``,params={}){const source=String(pathTemplate||``).trim();if(!source)return``;return source.replace(/\[([^\]]+)\]/g,(_match,rawKey)=>{const key=String(rawKey||``).trim();if(!key)return``;const value=params?.[key];return value==null?`[${key}]`:encodeURIComponent(String(value))})}function isRelativeMenuLinkTarget(target=``){const normalizedTarget=normalizeText$3(target);return normalizedTarget.startsWith(`./`)||normalizedTarget.startsWith(`../`)}function surfaceRequiresWorkspaceFromPlacementContext(contextValue=null,surfaceId=``){return Boolean(resolveSurfaceDefinitionFromPlacementContext(contextValue,surfaceId)?.requiresWorkspace)}function resolveMenuLinkTarget({to=``,surface=``,currentSurfaceId=``,placementContext=null,scopedSuffix=`/`,unscopedSuffix=`/`,routeParams={},resolvePagePath=null}={}){const explicitTarget=normalizeText$3(to);const targetSurfaceId=resolveMenuLinkSurfaceId(surface,currentSurfaceId);const scopedRouteRequired=surfaceRequiresWorkspaceFromPlacementContext(placementContext,targetSurfaceId);const interpolatedSuffix=interpolateBracketParams(normalizeText$3(scopedRouteRequired?scopedSuffix:unscopedSuffix)||`/`,routeParams);const resolvedSuffixTarget=typeof resolvePagePath===`function`&&targetSurfaceId&&interpolatedSuffix&&!interpolatedSuffix.includes(`[`)?normalizeText$3(resolvePagePath(interpolatedSuffix,{surface:targetSurfaceId,mode:`auto`})):``;if(!explicitTarget)return resolvedSuffixTarget;if(isRelativeMenuLinkTarget(explicitTarget))return resolvedSuffixTarget;return explicitTarget}function normalizeText(value=``){return String(value||``).trim()}function resolveShellRouteTransitionKey({routePathKey=``,routeTransitionName=``,surfaceId=``}={}){if(normalizeText(routeTransitionName))return normalizeText(routePathKey)||`/`;const surfaceKey=normalizeText(surfaceId);if(surfaceKey&&surfaceKey!==`*`)return`surface:${surfaceKey}`;return`stable`}var _hoisted_1$4={class:`shell-route-transition`};var SWIPE_MIN_DISTANCE=36;var SWIPE_MAX_VERTICAL_DRIFT=120;var SWIPE_MIN_VELOCITY=.08;var _sfc_main$11={__name:`ShellRouteTransition`,props:{enabled:{type:Boolean,default:true},target:{type:String,default:`shell-layout:primary-bottom-nav`},semanticTarget:{type:String,default:`shell.primary-nav`},swipeEnabled:{type:Boolean,default:true}},setup(__props){const props=__props;const route=useRoute();const router=useRouter$1();const display=useDisplay();const placementRuntime=useWebPlacementRuntime();const{context:placementContext}=useWebPlacementContext();const revision=ref(typeof placementRuntime.getRevision===`function`?placementRuntime.getRevision():0);const transitionDirection=ref(`none`);let unsubscribe=null;let activeSwipe=null;let stopSwipeClassWatch=null;onMounted(()=>{if(typeof placementRuntime.subscribe!==`function`)unsubscribe=null;else unsubscribe=placementRuntime.subscribe(event=>{const next=Number(event?.revision);revision.value=Number.isInteger(next)?next:revision.value+1});if(typeof window===`object`){window.addEventListener(`pointerdown`,handlePointerDown,{capture:true,passive:true});window.addEventListener(`pointermove`,handlePointerMove,{capture:true,passive:false});window.addEventListener(`pointerup`,handlePointerEnd,{capture:true,passive:true});window.addEventListener(`pointercancel`,handlePointerCancel,{capture:true,passive:true})}stopSwipeClassWatch=watch(swipeNavigationEnabled,enabled=>{if(typeof document!==`object`)return;document.documentElement.classList.toggle(`shell-route-swipe-enabled`,enabled)},{immediate:true})});onBeforeUnmount(()=>{if(typeof unsubscribe===`function`){unsubscribe();unsubscribe=null}if(typeof stopSwipeClassWatch===`function`){stopSwipeClassWatch();stopSwipeClassWatch=null}if(typeof document===`object`)document.documentElement.classList.remove(`shell-route-swipe-enabled`);if(typeof window===`object`){window.removeEventListener(`pointerdown`,handlePointerDown,{capture:true});window.removeEventListener(`pointermove`,handlePointerMove,{capture:true});window.removeEventListener(`pointerup`,handlePointerEnd,{capture:true});window.removeEventListener(`pointercancel`,handlePointerCancel,{capture:true})}});const resolvedLayoutClass=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();if(displayName===`xs`||displayName===`sm`)return`compact`;if(displayName===`md`)return`medium`;return`expanded`});const currentPathname=computed(()=>normalizeComparablePathname(resolveRuntimePathname(route?.path||route?.fullPath||`/`)));const currentSurfaceId=computed(()=>{const contextValue=placementContext?.value||null;const surfaceFromPathname=resolveSurfaceIdFromPlacementPathname(contextValue,currentPathname.value);if(surfaceFromPathname)return surfaceFromPathname;return readPlacementSurfaceConfig(contextValue).defaultSurfaceId||`*`});const primaryNavEntries=computed(()=>{revision.value;const contextValue=placementContext?.value||null;const routeParams=route?.params||{};return placementRuntime.getPlacements({surface:currentSurfaceId.value,target:props.target,layoutClass:`compact`}).filter(entry=>String(entry.semanticTarget||entry.target||``).trim()===props.semanticTarget).map((entry,index)=>{const entryProps=entry?.props&&typeof entry.props===`object`?entry.props:{};const target=resolveMenuLinkTarget({to:entryProps.to,surface:entryProps.surface,currentSurfaceId:currentSurfaceId.value,placementContext:contextValue,scopedSuffix:entryProps.scopedSuffix,unscopedSuffix:entryProps.unscopedSuffix,routeParams,resolvePagePath(relativePath,options={}){return resolveShellLinkPath({context:contextValue,surface:options.surface,relativePath,params:routeParams,strictParams:options.strictParams!==false})}});const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(contextValue,{path:target,surfaceId:entryProps.surface||currentSurfaceId.value});return Object.freeze({id:entry.id,index,exact:entryProps.exact===true,href:navigationTarget.href,pathname:normalizeComparablePathname(navigationTarget.href),sameOrigin:navigationTarget.sameOrigin})}).filter(entry=>entry.pathname&&entry.sameOrigin)});const activePrimaryNavIndex=computed(()=>{const pathname=currentPathname.value;let bestMatch=null;for(const entry of primaryNavEntries.value){if(!pathMatchesNavigationEntry(pathname,entry))continue;if(!bestMatch||entry.pathname.length>bestMatch.pathname.length)bestMatch=entry}return bestMatch?bestMatch.index:-1});watch(activePrimaryNavIndex,(nextIndex,previousIndex)=>{if(!Number.isInteger(previousIndex)||previousIndex<0||nextIndex<0||nextIndex===previousIndex){transitionDirection.value=`none`;return}transitionDirection.value=nextIndex>previousIndex?`forward`:`reverse`},{flush:`sync`});const routeTransitionName=computed(()=>{if(!props.enabled||resolvedLayoutClass.value!==`compact`)return``;if(transitionDirection.value===`forward`)return`shell-route-slide-forward`;if(transitionDirection.value===`reverse`)return`shell-route-slide-reverse`;return``});const routeTransitionKey=ref(``);watch([()=>normalizeComparablePathname(route?.path||route?.fullPath||`/`),currentSurfaceId],([routePathKey,surfaceId])=>{routeTransitionKey.value=resolveShellRouteTransitionKey({routePathKey,routeTransitionName:routeTransitionName.value,surfaceId})},{immediate:true,flush:`sync`});const swipeNavigationEnabled=computed(()=>Boolean(props.enabled&&props.swipeEnabled&&resolvedLayoutClass.value===`compact`&&primaryNavEntries.value.length>1&&activePrimaryNavIndex.value>=0));function handlePointerDown(event){if(!swipeNavigationEnabled.value||!isPrimaryPointerEvent(event)||isSwipeIgnoredTarget(event.target)){activeSwipe=null;return}activeSwipe={pointerId:event.pointerId,startX:event.clientX,startY:event.clientY,startTime:performance.now(),cancelled:false};try{event.target?.setPointerCapture?.(event.pointerId)}catch{}}function handlePointerMove(event){if(!activeSwipe||event.pointerId!==activeSwipe.pointerId)return;const deltaX=event.clientX-activeSwipe.startX;const deltaY=event.clientY-activeSwipe.startY;const absX=Math.abs(deltaX);const absY=Math.abs(deltaY);if(absY>SWIPE_MAX_VERTICAL_DRIFT||absY>28&&absY>absX*1.3){activeSwipe.cancelled=true;return}if(absX>10&&absX>absY)event.preventDefault();if(isAcceptedSwipe({deltaX,deltaY,elapsed:Math.max(performance.now()-activeSwipe.startTime,1)})){const offset=deltaX<0?1:-1;activeSwipe=null;navigateBySwipe(offset)}}function handlePointerEnd(event){if(!activeSwipe||event.pointerId!==activeSwipe.pointerId)return;const swipe=activeSwipe;activeSwipe=null;if(swipe.cancelled||!swipeNavigationEnabled.value)return;const deltaX=event.clientX-swipe.startX;const deltaY=event.clientY-swipe.startY;const elapsed=Math.max(performance.now()-swipe.startTime,1);if(!isAcceptedSwipe({deltaX,deltaY,elapsed,velocity:Math.abs(deltaX)/elapsed}))return;navigateBySwipe(deltaX<0?1:-1)}function handlePointerCancel(event){if(activeSwipe&&event.pointerId===activeSwipe.pointerId)activeSwipe=null}function navigateBySwipe(offset=0){const currentIndex=activePrimaryNavIndex.value;const nextEntry=primaryNavEntries.value[currentIndex+offset];if(!nextEntry?.href||normalizeComparablePathname(nextEntry.href)===currentPathname.value)return;router.push(nextEntry.href).catch(()=>{})}function isAcceptedSwipe({deltaX=0,deltaY=0,elapsed=1,velocity=null}={}){const absX=Math.abs(deltaX);const absY=Math.abs(deltaY);const resolvedVelocity=velocity==null?absX/Math.max(elapsed,1):velocity;return Boolean(absX>=SWIPE_MIN_DISTANCE&&absY<=SWIPE_MAX_VERTICAL_DRIFT&&absX>absY&&resolvedVelocity>=SWIPE_MIN_VELOCITY)}function normalizeComparablePathname(value=``){const raw=String(value||``).trim();if(!raw)return``;try{const parsed=new URL(raw,window.location.href);if(parsed.origin!==window.location.origin)return``;return normalizePathname$1(parsed.pathname)}catch{return normalizePathname$1(normalizeMenuLinkPathname(raw))}}function pathMatchesNavigationEntry(pathname=``,entry={}){const target=String(entry.pathname||``).trim();if(!target)return false;if(entry.exact||target===`/`)return pathname===target;return pathname===target||pathname.startsWith(`${target}/`)}function isPrimaryPointerEvent(event){return event?.isPrimary!==false&&event?.button===0&&event?.pointerType!==`mouse`}function isSwipeIgnoredTarget(target){return Boolean(target?.closest?.([`a`,`button`,`input`,`select`,`textarea`,`summary`,`[role='button']`,`[role='link']`,`[role='slider']`,`[contenteditable='true']`,`[data-shell-swipe-ignore]`].join(`,`)))}return(_ctx,_cache)=>{return openBlock(),createElementBlock(`div`,_hoisted_1$4,[createVNode(Transition,{name:routeTransitionName.value,css:Boolean(routeTransitionName.value)},{default:withCtx(()=>[(openBlock(),createElementBlock(`div`,{key:routeTransitionKey.value,class:`shell-route-transition__pane`},[renderSlot(_ctx.$slots,`default`,{},void 0,true)]))]),_:3},8,[`name`,`css`])])}}};var ShellRouteTransition_default=_plugin_vue_export_helper_default(_sfc_main$11,[[`__scopeId`,`data-v-d1a1f5bc`]]);var _hoisted_1$3={class:`shell-layout__top-left d-flex align-center ga-2`};var _hoisted_2$1={class:`shell-layout__surface-label`};var _hoisted_3$1={class:`shell-layout__top-right d-flex align-center ga-2`};var _hoisted_4={class:`shell-layout__pull-refresh-label`};var _hoisted_5={key:0,class:`shell-layout__title text-h5`};var _hoisted_6={key:1,class:`shell-layout__subtitle text-body-2 text-medium-emphasis`};var _hoisted_7={class:`shell-layout__supporting-side-panel`};var _hoisted_8={class:`shell-layout__supporting-title`};var PULL_REFRESH_TRIGGER_DISTANCE=72;var PULL_REFRESH_MAX_DISTANCE=112;var _sfc_main$10={__name:`ShellLayout`,props:{surface:{type:String,default:``},surfaceLabel:{type:String,default:``},title:{type:String,default:``},subtitle:{type:String,default:``},desktopDrawerClosedMode:{type:String,default:`rail`},drawerWidth:{type:Number,default:null},railWidth:{type:Number,default:80},navigationItemSpacing:{type:Number,default:12}},setup(__props){const props=__props;const{drawerDefaultOpen,drawerOpen,setDrawerOpen,supportingContentOpen,supportingContentTitle,setSupportingContentOpen,closeSupportingContent,toggleDrawer,resolvedSurface,resolvedSurfaceLabel}=useShellLayoutState(props);const display=useDisplay();const refreshRuntime=inject$1(`jskit.shell-web.runtime.web-refresh.client`,null);const pullDistance=ref(0);const pullRefreshing=ref(false);const wideDrawerOpen=ref(Boolean(drawerDefaultOpen.value));const navigationToggle=ref(null);const navigationDrawer=ref(null);const measuredDrawerWidth=ref(248);let activePull=null;let drawerContentObserver=null;let drawerMeasurementFrame=null;let shellMounted=false;const layoutClass=computed(()=>{const displayName=String(display?.name?.value||``).trim().toLowerCase();if(displayName===`xs`||displayName===`sm`)return`compact`;if(displayName===`md`)return`medium`;return`expanded`});const isCompactLayout=computed(()=>layoutClass.value===`compact`);const drawerPresentation=computed(()=>resolveShellDrawerPresentation({compact:isCompactLayout.value,open:drawerOpen.value,desktopClosedMode:props.desktopDrawerClosedMode}));const drawerToggleLabel=computed(()=>resolveShellDrawerToggleLabel({compact:isCompactLayout.value,open:drawerOpen.value}));const resolvedDrawerWidth=computed(()=>{if(props.drawerWidth!==null&&props.drawerWidth!==void 0)return normalizeShellDrawerWidth(props.drawerWidth);return normalizeShellDrawerWidth(measuredDrawerWidth.value)});const resolvedRailWidth=computed(()=>normalizeShellRailWidth(props.railWidth));const resolvedNavigationItemSpacing=computed(()=>normalizeShellNavigationItemSpacing(props.navigationItemSpacing));const pullProgress=computed(()=>Math.min(100,Math.round(pullDistance.value/PULL_REFRESH_TRIGGER_DISTANCE*100)));const pullIndicatorVisible=computed(()=>Boolean(isCompactLayout.value&&(pullDistance.value>0||pullRefreshing.value)));const pullRefreshLabel=computed(()=>{if(pullRefreshing.value)return`Refreshing`;return pullProgress.value>=100?`Release to refresh`:`Pull to refresh`});const pullRefreshStyle=computed(()=>({"--shell-pull-refresh-distance":`${Math.round(Math.min(pullDistance.value,PULL_REFRESH_MAX_DISTANCE))}px`}));watch(drawerOpen,handleDrawerOpenChange);watch(isCompactLayout,handleLayoutClassChange,{immediate:true});watch(drawerPresentation,scheduleDrawerWidthMeasurement,{flush:`post`});watch(resolvedSurface,scheduleDrawerWidthMeasurement,{flush:`post`});watch(resolvedNavigationItemSpacing,scheduleDrawerWidthMeasurement,{flush:`post`});onMounted(attachShellListeners);onBeforeUnmount(detachShellListeners);function attachShellListeners(){shellMounted=true;if(typeof window!==`object`)return;window.addEventListener(`keydown`,handleShellKeydown);window.addEventListener(`resize`,scheduleDrawerWidthMeasurement,{passive:true});window.addEventListener(`pointerdown`,handlePullPointerDown,{capture:true,passive:true});window.addEventListener(`pointermove`,handlePullPointerMove,{capture:true,passive:false});window.addEventListener(`pointerup`,handlePullPointerEnd,{capture:true,passive:true});window.addEventListener(`pointercancel`,handlePullPointerCancel,{capture:true,passive:true});window.addEventListener(`touchstart`,handlePullTouchStart,{capture:true,passive:true});window.addEventListener(`touchmove`,handlePullTouchMove,{capture:true,passive:false});window.addEventListener(`touchend`,handlePullTouchEnd,{capture:true,passive:true});window.addEventListener(`touchcancel`,handlePullTouchCancel,{capture:true,passive:true});if(document?.fonts){document.fonts.ready.then(scheduleDrawerWidthMeasurement);document.fonts.addEventListener?.(`loadingdone`,scheduleDrawerWidthMeasurement)}nextTick$1().then(initializeDrawerMeasurement)}function detachShellListeners(){shellMounted=false;if(typeof window!==`object`)return;window.removeEventListener(`keydown`,handleShellKeydown);window.removeEventListener(`resize`,scheduleDrawerWidthMeasurement);window.removeEventListener(`pointerdown`,handlePullPointerDown,{capture:true});window.removeEventListener(`pointermove`,handlePullPointerMove,{capture:true});window.removeEventListener(`pointerup`,handlePullPointerEnd,{capture:true});window.removeEventListener(`pointercancel`,handlePullPointerCancel,{capture:true});window.removeEventListener(`touchstart`,handlePullTouchStart,{capture:true});window.removeEventListener(`touchmove`,handlePullTouchMove,{capture:true});window.removeEventListener(`touchend`,handlePullTouchEnd,{capture:true});window.removeEventListener(`touchcancel`,handlePullTouchCancel,{capture:true});document?.fonts?.removeEventListener?.(`loadingdone`,scheduleDrawerWidthMeasurement);drawerContentObserver?.disconnect();drawerContentObserver=null;if(drawerMeasurementFrame!==null){window.cancelAnimationFrame(drawerMeasurementFrame);drawerMeasurementFrame=null}}function handleDrawerOpenChange(open){if(!isCompactLayout.value)wideDrawerOpen.value=Boolean(open)}function handleLayoutClassChange(compact){setDrawerOpen(compact?false:wideDrawerOpen.value)}function handleShellKeydown(event){if(event?.defaultPrevented||event?.key!==`Escape`||!isCompactLayout.value||!drawerOpen.value)return;event.preventDefault();setDrawerOpen(false);nextTick$1().then(focusNavigationToggle)}function focusNavigationToggle(){(navigationToggle.value?.$el||navigationToggle.value)?.focus?.({preventScroll:true})}function initializeDrawerMeasurement(){const drawerElement=resolveNavigationDrawerElement();const drawerContent=drawerElement?.querySelector?.(`.v-navigation-drawer__content`)||drawerElement;if(typeof MutationObserver===`function`&&drawerContent){drawerContentObserver?.disconnect();drawerContentObserver=new MutationObserver(scheduleDrawerWidthMeasurement);drawerContentObserver.observe(drawerContent,{childList:true,characterData:true,subtree:true})}scheduleDrawerWidthMeasurement()}function resolveNavigationDrawerElement(){const exposedElement=navigationDrawer.value?.$el||navigationDrawer.value||null;if(typeof exposedElement?.getBoundingClientRect===`function`)return exposedElement;if(typeof document===`object`)return document.getElementById(`jskit-shell-drawer`);return null}function scheduleDrawerWidthMeasurement(){if(!shellMounted||props.drawerWidth!==null&&props.drawerWidth!==void 0||!drawerPresentation.value.visible||drawerPresentation.value.rail||typeof window!==`object`)return;if(drawerMeasurementFrame!==null)window.cancelAnimationFrame(drawerMeasurementFrame);drawerMeasurementFrame=window.requestAnimationFrame(measureDrawerContentWidth)}function measureDrawerContentWidth(){drawerMeasurementFrame=null;const drawerElement=resolveNavigationDrawerElement();if(!drawerElement||typeof document!==`object`)return;const drawerRect=drawerElement.getBoundingClientRect();const drawerStyle=window.getComputedStyle(drawerElement);const rightToLeft=drawerStyle.direction===`rtl`;const endBorderWidth=Number.parseFloat(rightToLeft?drawerStyle.borderLeftWidth:drawerStyle.borderRightWidth)||0;const measurements=[];for(const label of drawerElement.querySelectorAll(`.v-list-item-title`)){const labelStyle=window.getComputedStyle(label);if(labelStyle.display===`none`||labelStyle.visibility===`hidden`)continue;const textRect=measureRenderedText(label);if(!textRect||textRect.width<=0)continue;measurements.push({logicalStart:rightToLeft?drawerRect.right-textRect.right:textRect.left-drawerRect.left,textWidth:textRect.width})}const nextWidth=resolveContentAwareDrawerWidth(measurements,{endGap:resolvedNavigationItemSpacing.value+endBorderWidth});if(Math.abs(nextWidth-measuredDrawerWidth.value)>=.25)measuredDrawerWidth.value=nextWidth}function measureRenderedText(element){const range=document.createRange();range.selectNodeContents(element);const rect=range.getBoundingClientRect();range.detach?.();return rect}function handlePullPointerDown(event){if(!canStartPullRefresh(event)){activePull=null;return}activePull={pointerId:event.pointerId,touchIdentifier:null,startX:event.clientX,startY:event.clientY,pointerCancelled:false}}function handleDrawerVisibilityChange(open){if(isCompactLayout.value||drawerPresentation.value.closedMode===`hidden`||open===false)setDrawerOpen(open)}function handlePullPointerMove(event){if(!activePull||event.pointerId!==activePull.pointerId)return;updatePullGesture(event.clientX,event.clientY,event)}function handlePullPointerEnd(event){if(!activePull||event.pointerId!==activePull.pointerId)return;finishPullGesture()}function handlePullPointerCancel(event){if(!activePull||event.pointerId!==activePull.pointerId)return;activePull.pointerId=null;activePull.pointerCancelled=true}function handlePullTouchStart(event){if(activePull||!canStartTouchPullRefresh(event))return;const touch=event.touches?.[0]||null;if(!touch)return;activePull={pointerId:null,touchIdentifier:touch.identifier,startX:touch.clientX,startY:touch.clientY,pointerCancelled:false}}function handlePullTouchMove(event){const touch=findActiveTouch(event.touches);if(!activePull||!touch)return;updatePullGesture(touch.clientX,touch.clientY,event)}function handlePullTouchEnd(event){if(!activePull||!touchListIncludesActiveTouch(event.changedTouches))return;finishPullGesture()}function handlePullTouchCancel(event){if(activePull&&touchListIncludesActiveTouch(event.changedTouches))cancelPullRefresh()}function updatePullGesture(clientX,clientY,event){if(!activePull)return;const deltaX=clientX-activePull.startX;const deltaY=clientY-activePull.startY;const absX=Math.abs(deltaX);if(deltaY<-4||absX>24&&absX>deltaY*1.15){cancelPullRefresh();return}if(deltaY<=6||!isAtPageTop())return;if(event?.cancelable)event.preventDefault();pullDistance.value=Math.min(PULL_REFRESH_MAX_DISTANCE,Math.round(deltaY*.55))}function finishPullGesture(){const shouldRefresh=pullDistance.value>=PULL_REFRESH_TRIGGER_DISTANCE;activePull=null;if(!shouldRefresh){pullDistance.value=0;return}refreshFromPullGesture()}function cancelPullRefresh(){activePull=null;if(!pullRefreshing.value)pullDistance.value=0}async function refreshFromPullGesture(){if(!refreshRuntime||typeof refreshRuntime.refresh!==`function`||pullRefreshing.value){pullDistance.value=0;return}pullRefreshing.value=true;pullDistance.value=PULL_REFRESH_TRIGGER_DISTANCE;try{await refreshRuntime.refresh(`pull-to-refresh`)}finally{pullRefreshing.value=false;pullDistance.value=0}}function canStartPullRefresh(event){return Boolean(canStartPullRefreshFromTarget(event.target)&&isPrimaryTouchPointer(event))}function canStartTouchPullRefresh(event){return Boolean(event?.touches?.length===1&&canStartPullRefreshFromTarget(event.target))}function canStartPullRefreshFromTarget(target){return Boolean(isCompactLayout.value&&refreshRuntime&&typeof refreshRuntime.refresh===`function`&&!pullRefreshing.value&&isAtPageTop()&&!isPullRefreshIgnoredTarget(target))}function isPrimaryTouchPointer(event){return event?.isPrimary!==false&&event?.button===0&&event?.pointerType!==`mouse`}function isAtPageTop(){if(typeof window!==`object`||typeof document!==`object`)return false;const documentScrollTop=Number(document.documentElement?.scrollTop||0);const bodyScrollTop=Number(document.body?.scrollTop||0);return Math.max(Number(window.scrollY||0),documentScrollTop,bodyScrollTop)<=0}function isPullRefreshIgnoredTarget(target){return Boolean(target?.closest?.([`a`,`button`,`input`,`select`,`textarea`,`summary`,`[role='button']`,`[role='link']`,`[role='slider']`,`[contenteditable='true']`,`[data-shell-pull-refresh-ignore]`,`[data-shell-swipe-ignore]`].join(`,`)))}function findActiveTouch(touchList){if(!activePull||!touchList||touchList.length<1)return null;if(activePull.touchIdentifier===null&&touchList.length===1)return touchList[0];for(const touch of touchList)if(touch.identifier===activePull.touchIdentifier)return touch;return null}function touchListIncludesActiveTouch(touchList){if(!activePull)return false;if(activePull.touchIdentifier===null)return!touchList||touchList.length<=1;return Boolean(findActiveTouch(touchList))}return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[createVNode(VAppBar,{density:isCompactLayout.value?`compact`:`comfortable`,elevation:`0`,class:`shell-layout__app-bar`,"data-testid":`jskit-shell-app-bar`},{default:withCtx(()=>[createVNode(VAppBarNavIcon,{ref_key:`navigationToggle`,ref:navigationToggle,class:`shell-layout__nav-toggle`,"data-testid":`jskit-shell-nav-toggle`,"aria-label":drawerToggleLabel.value,"aria-expanded":unref(drawerOpen),"aria-controls":`jskit-shell-drawer`,onClick:unref(toggleDrawer)},null,8,[`aria-label`,`aria-expanded`,`onClick`]),renderSlot(_ctx.$slots,`top-left`,{surface:unref(resolvedSurface)},()=>[createBaseVNode(`div`,_hoisted_1$3,[createBaseVNode(`span`,_hoisted_2$1,toDisplayString(unref(resolvedSurfaceLabel)),1),createVNode(_sfc_main$12,{target:`shell-layout:top-left`})])],true),createVNode(VSpacer),renderSlot(_ctx.$slots,`top-right`,{surface:unref(resolvedSurface)},()=>[createBaseVNode(`div`,_hoisted_3$1,[createVNode(_sfc_main$12,{target:`shell-layout:top-right`})])],true)]),_:3},8,[`density`]),pullIndicatorVisible.value?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`shell-layout__pull-refresh`,{"shell-layout__pull-refresh--refreshing":pullRefreshing.value}]),style:normalizeStyle(pullRefreshStyle.value),"data-testid":`jskit-shell-pull-refresh`,"aria-live":`polite`},[createVNode(VProgressCircular,{"model-value":pullProgress.value,indeterminate:pullRefreshing.value,color:`primary`,size:`22`,width:`3`},null,8,[`model-value`,`indeterminate`]),createBaseVNode(`span`,_hoisted_4,toDisplayString(pullRefreshLabel.value),1)],6)):createCommentVNode(``,true),createVNode(VNavigationDrawer,{ref_key:`navigationDrawer`,ref:navigationDrawer,id:`jskit-shell-drawer`,"model-value":drawerPresentation.value.visible,class:`shell-layout__drawer`,"data-testid":`jskit-shell-drawer`,"data-layout":layoutClass.value,"data-presentation":drawerPresentation.value.kind,"data-drawer-width-mode":props.drawerWidth===null||props.drawerWidth===void 0?`content`:`fixed`,"data-drawer-width":resolvedDrawerWidth.value,"data-navigation-item-spacing":resolvedNavigationItemSpacing.value,"data-rail-width":resolvedRailWidth.value,style:normalizeStyle({"--shell-navigation-item-spacing":`${resolvedNavigationItemSpacing.value}px`,"--shell-navigation-rail-width":`${resolvedRailWidth.value}px`}),temporary:isCompactLayout.value,permanent:!isCompactLayout.value,width:resolvedDrawerWidth.value,rail:drawerPresentation.value.rail,"rail-width":resolvedRailWidth.value,"onUpdate:modelValue":handleDrawerVisibilityChange},{default:withCtx(()=>[renderSlot(_ctx.$slots,`menu`,{surface:unref(resolvedSurface),rail:drawerPresentation.value.rail},()=>[createVNode(VList,{nav:``,density:`comfortable`,class:`pt-2`,"prepend-gap":resolvedNavigationItemSpacing.value},{default:withCtx(()=>[createVNode(_sfc_main$12,{target:`shell-layout:primary-menu`,default:``}),createVNode(VDivider,{class:`my-2`}),createVNode(_sfc_main$12,{target:`shell-layout:secondary-menu`})]),_:1},8,[`prepend-gap`])],true)]),_:3},8,[`model-value`,`data-layout`,`data-presentation`,`data-drawer-width-mode`,`data-drawer-width`,`data-navigation-item-spacing`,`data-rail-width`,`style`,`temporary`,`permanent`,`width`,`rail`,`rail-width`]),createVNode(VMain,{class:`bg-background`},{default:withCtx(()=>[createVNode(VContainer,{fluid:``,class:`shell-layout__content`},{default:withCtx(()=>[__props.title?(openBlock(),createElementBlock(`h1`,_hoisted_5,toDisplayString(__props.title),1)):createCommentVNode(``,true),__props.subtitle?(openBlock(),createElementBlock(`p`,_hoisted_6,toDisplayString(__props.subtitle),1)):createCommentVNode(``,true),createVNode(ShellRouteTransition_default,null,{default:withCtx(()=>[renderSlot(_ctx.$slots,`default`,{},void 0,true)]),_:3})]),_:3})]),_:3}),isCompactLayout.value?(openBlock(),createBlock(VBottomNavigation,{key:1,class:`shell-layout__bottom-nav`,"data-testid":`jskit-shell-bottom-nav`,color:`primary`,density:`comfortable`,grow:``,mandatory:``},{default:withCtx(()=>[createVNode(_sfc_main$12,{target:`shell-layout:primary-bottom-nav`})]),_:1})):createCommentVNode(``,true),isCompactLayout.value?(openBlock(),createBlock(VBottomSheet,{key:2,"model-value":unref(supportingContentOpen),"onUpdate:modelValue":unref(setSupportingContentOpen)},{default:withCtx(()=>[createVNode(VCard,{rounded:`t-xl`,class:`shell-layout__supporting-sheet`,"data-testid":`jskit-shell-supporting-bottom-sheet`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`shell-layout__supporting-title`},{default:withCtx(()=>[createBaseVNode(`span`,null,toDisplayString(unref(supportingContentTitle)||`Details`),1),createVNode(VBtn,{variant:`text`,onClick:unref(closeSupportingContent)},{default:withCtx(()=>[..._cache[0]||(_cache[0]=[createTextVNode(`Close`,-1)])]),_:1},8,[`onClick`])]),_:1}),createVNode(VCardText,null,{default:withCtx(()=>[createVNode(_sfc_main$12,{target:`shell-layout:supporting-bottom-sheet`})]),_:1})]),_:1})]),_:1},8,[`model-value`,`onUpdate:modelValue`])):createCommentVNode(``,true),!isCompactLayout.value?(openBlock(),createBlock(VNavigationDrawer,{key:3,"model-value":unref(supportingContentOpen),border:``,temporary:``,location:`right`,width:384,"data-testid":`jskit-shell-supporting-side-panel`,"onUpdate:modelValue":unref(setSupportingContentOpen)},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_7,[createBaseVNode(`div`,_hoisted_8,[createBaseVNode(`strong`,null,toDisplayString(unref(supportingContentTitle)||`Details`),1),createVNode(VBtn,{variant:`text`,onClick:unref(closeSupportingContent)},{default:withCtx(()=>[..._cache[1]||(_cache[1]=[createTextVNode(`Close`,-1)])]),_:1},8,[`onClick`])]),createVNode(_sfc_main$12,{target:`shell-layout:supporting-side-panel`})])]),_:1},8,[`model-value`,`onUpdate:modelValue`])):createCommentVNode(``,true)],64)}}};var ShellLayout_default=_plugin_vue_export_helper_default(_sfc_main$10,[[`__scopeId`,`data-v-9fa6d5f1`]]);var _sfc_main$9={__name:`ShellOutletMenuWidget`,props:{target:{type:String,required:true},icon:{type:String,default:mdiCogOutline},ariaLabel:{type:String,default:`Tools`},location:{type:String,default:`bottom end`},offset:{type:[Number,String],default:10},minWidth:{type:[Number,String],default:220}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createBlock(VMenu,{location:props.location,offset:props.offset,eager:``},{activator:withCtx(({props:activatorProps})=>[createVNode(VBtn,mergeProps(activatorProps,{icon:``,variant:`text`,"aria-label":props.ariaLabel}),{default:withCtx(()=>[createVNode(VIcon,{icon:props.icon},null,8,[`icon`])]),_:1},16,[`aria-label`])]),default:withCtx(()=>[createVNode(VList,{"min-width":props.minWidth,density:`comfortable`,class:`py-1`},{default:withCtx(()=>[createVNode(_sfc_main$12,{target:props.target},null,8,[`target`])]),_:1},8,[`min-width`])]),_:1},8,[`location`,`offset`])}}};var SURFACE_SWITCH_ICON_BY_ID=Object.freeze({home:mdiHomeVariantOutline,app:mdiViewDashboardOutline,admin:mdiShieldCrownOutline,console:mdiConsoleNetworkOutline});var SUPPORTED_EXPLICIT_MDI_ICON_BY_NAME=Object.freeze({"mdi-account-circle-outline":mdiAccountCircleOutline,"mdi-account-cog-outline":mdiAccountCogOutline,"mdi-account-group-outline":mdiAccountGroupOutline,"mdi-arrow-right-circle-outline":mdiArrowRightCircleOutline,"mdi-clipboard-list-outline":mdiClipboardListOutline,"mdi-cog-outline":mdiCogOutline,"mdi-console-network-outline":mdiConsoleNetworkOutline,"mdi-folder-outline":mdiFolderOutline,"mdi-home-variant-outline":mdiHomeVariantOutline,"mdi-login":mdiLogin,"mdi-logout":mdiLogout,"mdi-robot-outline":mdiRobotOutline,"mdi-shield-crown-outline":mdiShieldCrownOutline,"mdi-view-dashboard-outline":mdiViewDashboardOutline,"mdi-view-list-outline":mdiViewListOutline});function resolveExplicitIconValue(explicitIcon=``){const normalizedExplicitIcon=normalizeText$3(explicitIcon);if(!normalizedExplicitIcon)return``;if(!normalizedExplicitIcon.startsWith(`mdi-`))return normalizedExplicitIcon;const resolvedIcon=SUPPORTED_EXPLICIT_MDI_ICON_BY_NAME[normalizedExplicitIcon];return typeof resolvedIcon===`string`&&resolvedIcon?resolvedIcon:normalizedExplicitIcon}function normalizePathname(value=``){const normalizedValue=normalizeText$3(value);if(!normalizedValue)return``;if(isExternalLinkTarget(normalizedValue)){if(!(normalizedValue.startsWith(`http://`)||normalizedValue.startsWith(`https://`)))return``;let parsedPathname=``;try{parsedPathname=String(new URL(normalizedValue).pathname||``)}catch{return``}const normalizedPathname=normalizeText$3(parsedPathname);if(!normalizedPathname)return``;return normalizePathname$1(normalizedPathname).toLowerCase()}const{pathname}=splitPathQueryHash(normalizedValue);const normalizedPathname=normalizeText$3(pathname);if(!normalizedPathname)return``;return normalizePathname$1(normalizedPathname).toLowerCase()}function resolveSurfaceSwitchIdFromLabel(label=``){const normalizedLabel=normalizeText$3(label).toLowerCase();if(!normalizedLabel.startsWith(`go to `))return``;return normalizeText$3(normalizedLabel.slice(6))}function resolveSurfaceSwitchIcon(surfaceId=``,explicitIcon=``){const resolvedExplicitIcon=resolveExplicitIconValue(explicitIcon);if(resolvedExplicitIcon)return resolvedExplicitIcon;const normalizedSurfaceId=normalizeText$3(surfaceId).toLowerCase();return SURFACE_SWITCH_ICON_BY_ID[normalizedSurfaceId]||`M6,13V11H14L10.5,7.5L11.92,6.08L17.84,12L11.92,17.92L10.5,16.5L14,13H6M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12Z`}function resolveMenuLinkIcon({icon=``,label=``,to=``}={}){const resolvedExplicitIcon=resolveExplicitIconValue(icon);if(resolvedExplicitIcon)return resolvedExplicitIcon;const normalizedLabel=normalizeText$3(label).toLowerCase();const normalizedPathname=normalizePathname(to);if(!normalizedLabel&&!normalizedPathname)return``;const surfaceSwitchSurfaceId=resolveSurfaceSwitchIdFromLabel(normalizedLabel);if(surfaceSwitchSurfaceId)return resolveSurfaceSwitchIcon(surfaceSwitchSurfaceId);if(normalizedLabel.includes(`sign in`)||normalizedPathname.includes(`/auth/login`))return mdiLogin;if(normalizedLabel.includes(`sign out`)||normalizedPathname.includes(`/auth/signout`))return mdiLogout;if(normalizedLabel.includes(`account`)||normalizedPathname.includes(`/account`)){if(normalizedLabel.includes(`settings`)||normalizedPathname.includes(`/settings`)||normalizedPathname===`/account`)return mdiAccountCogOutline;return mdiAccountCircleOutline}if(normalizedLabel.includes(`members`)||normalizedLabel.includes(`team`)||normalizedPathname.includes(`/members`))return mdiAccountGroupOutline;if(normalizedLabel.includes(`assistant`)||normalizedPathname.includes(`/assistant`))return mdiRobotOutline;if(normalizedLabel.includes(`console`)||normalizedPathname.startsWith(`/console`))return mdiConsoleNetworkOutline;if(normalizedLabel.includes(`admin`)||normalizedPathname.includes(`/admin`))return mdiShieldCrownOutline;if(normalizedLabel.includes(`settings`)||normalizedPathname.includes(`/settings`))return mdiCogOutline;if(normalizedLabel.includes(`home`)||normalizedPathname===`/`)return mdiHomeVariantOutline;if(normalizedLabel.includes(`workspace`)||normalizedLabel.includes(`dashboard`)||normalizedPathname.includes(`/w/`))return mdiViewDashboardOutline;if(normalizedPathname){if(normalizedPathname.split(`/`).filter(Boolean).length===1)return mdiFolderOutline}if(normalizedLabel.includes(`list`))return mdiClipboardListOutline;return mdiViewListOutline}function activateShellNavigationLinkOnSpace(event){if(event?.key!==` `||typeof event.currentTarget?.click!==`function`)return;event.preventDefault();event.stopPropagation();event.currentTarget.click()}var _sfc_main$8={__name:`ShellNavigationTooltip`,props:{label:{type:String,default:``}},setup(__props){const props=__props;const theme=useTheme();return(_ctx,_cache)=>{return openBlock(),createBlock(VTooltip,{text:props.label,theme:unref(theme).name.value,location:`end`,"content-class":`shell-navigation-tooltip`,"open-delay":400,"open-on-focus":true,"open-on-hover":true},{activator:withCtx(({props:activatorProps})=>[renderSlot(_ctx.$slots,`default`,{activatorProps})]),_:3},8,[`text`,`theme`])}}};var _sfc_main$7={__name:`ShellMenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;const{context:placementContext}=useWebPlacementContext();const resolvedTarget=computed(()=>{const target=String(props.to||``).trim();if(!target)return{href:``,sameOrigin:true};const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(placementContext.value,{path:target});return{href:navigationTarget.href,sameOrigin:navigationTarget.sameOrigin}});const resolvedIcon=computed(()=>resolveMenuLinkIcon({icon:props.icon,label:props.label,to:resolvedTarget.value.href||props.to}));return(_ctx,_cache)=>{return resolvedTarget.value.href?(openBlock(),createBlock(_sfc_main$8,{key:0,label:props.label},{default:withCtx(({activatorProps})=>[createVNode(VListItem,mergeProps(activatorProps,{class:`shell-menu-link-item`,title:props.label,to:resolvedTarget.value.sameOrigin?resolvedTarget.value.href:void 0,href:resolvedTarget.value.sameOrigin?void 0:resolvedTarget.value.href,"prepend-icon":resolvedIcon.value||void 0,disabled:props.disabled,exact:props.exact,"aria-label":props.label,onKeydown:withKeys(unref(activateShellNavigationLinkOnSpace),[`space`])}),null,16,[`title`,`to`,`href`,`prepend-icon`,`disabled`,`exact`,`aria-label`,`onKeydown`])]),_:1},8,[`label`])):createCommentVNode(``,true)}}};var ShellMenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$7,[[`__scopeId`,`data-v-aa34cf36`]]);var _sfc_main$6={__name:`ShellSurfaceAwareMenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;const route=useRoute();const{context:placementContext}=useWebPlacementContext();const currentSurfaceId=computed(()=>{return resolveSurfaceIdFromPlacementPathname(placementContext.value,String(route?.path||route?.fullPath||``).trim())});const resolvedTo=computed(()=>{return resolveMenuLinkTarget({to:props.to,surface:props.surface,currentSurfaceId:currentSurfaceId.value,placementContext:placementContext.value,scopedSuffix:props.scopedSuffix,unscopedSuffix:props.unscopedSuffix,routeParams:route.params||{},resolvePagePath(relativePath,options={}){return resolveShellLinkPath({context:placementContext.value,surface:options.surface,relativePath,params:route.params||{},strictParams:options.strictParams!==false})}})});const resolvedTarget=computed(()=>{const target=String(resolvedTo.value||``).trim();if(!target)return{href:``,sameOrigin:true};const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(placementContext.value,{path:target});return{href:navigationTarget.href,sameOrigin:navigationTarget.sameOrigin}});const resolvedIcon=computed(()=>resolveMenuLinkIcon({icon:props.icon,label:props.label,to:resolvedTarget.value.href||resolvedTo.value}));return(_ctx,_cache)=>{return resolvedTarget.value.href?(openBlock(),createBlock(_sfc_main$8,{key:0,label:props.label},{default:withCtx(({activatorProps})=>[createVNode(VListItem,mergeProps(activatorProps,{class:`shell-menu-link-item`,title:props.label,to:resolvedTarget.value.sameOrigin?resolvedTarget.value.href:void 0,href:resolvedTarget.value.sameOrigin?void 0:resolvedTarget.value.href,"prepend-icon":resolvedIcon.value||void 0,disabled:props.disabled,exact:props.exact,"aria-label":props.label,onKeydown:withKeys(unref(activateShellNavigationLinkOnSpace),[`space`])}),null,16,[`title`,`to`,`href`,`prepend-icon`,`disabled`,`exact`,`aria-label`,`onKeydown`])]),_:1},8,[`label`])):createCommentVNode(``,true)}}};var ShellSurfaceAwareMenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$6,[[`__scopeId`,`data-v-8e70b4dd`]]);var _hoisted_1$2={class:`tab-link-item__label`};var _sfc_main$5={__name:`ShellTabLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;const route=useRoute();const{context:placementContext}=useWebPlacementContext();const currentSurfaceId=computed(()=>{return resolveSurfaceIdFromPlacementPathname(placementContext.value,String(route?.path||route?.fullPath||``).trim())});const resolvedTo=computed(()=>{return resolveMenuLinkTarget({to:props.to,surface:props.surface,currentSurfaceId:currentSurfaceId.value,placementContext:placementContext.value,scopedSuffix:props.scopedSuffix,unscopedSuffix:props.unscopedSuffix,routeParams:route.params||{},resolvePagePath(relativePath,options={}){return resolveShellLinkPath({context:placementContext.value,surface:options.surface,relativePath,params:route.params||{},strictParams:options.strictParams!==false})}})});const resolvedTarget=computed(()=>{const target=String(resolvedTo.value||``).trim();if(!target)return{href:``,sameOrigin:true};const navigationTarget=resolveSurfaceNavigationTargetFromPlacementContext(placementContext.value,{path:target});return{href:navigationTarget.href,sameOrigin:navigationTarget.sameOrigin}});const resolvedIcon=computed(()=>resolveMenuLinkIcon({icon:props.icon,label:props.label,to:resolvedTarget.value.href||resolvedTo.value}));return(_ctx,_cache)=>{return resolvedTarget.value.href?(openBlock(),createBlock(VBtn,{key:0,class:`tab-link-item text-none`,to:resolvedTarget.value.sameOrigin?resolvedTarget.value.href:void 0,href:resolvedTarget.value.sameOrigin?void 0:resolvedTarget.value.href,disabled:props.disabled,exact:props.exact,"min-width":`72`,stacked:``},{default:withCtx(()=>[resolvedIcon.value?(openBlock(),createBlock(VIcon,{key:0,icon:resolvedIcon.value},null,8,[`icon`])):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_1$2,toDisplayString(props.label||`Tab`),1)]),_:1},8,[`to`,`href`,`disabled`,`exact`])):createCommentVNode(``,true)}}};var ShellTabLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$5,[[`__scopeId`,`data-v-1c3e59c0`]]);var client_exports$4=__exportAll({SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY:()=>SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,SHELL_REQUEST_RECOVERY_RUNTIME_KEY:()=>SHELL_REQUEST_RECOVERY_RUNTIME_KEY,ShellErrorHost:()=>ShellErrorHost_default,ShellLayout:()=>ShellLayout_default,ShellMenuLinkItem:()=>ShellMenuLinkItem_default,ShellOutlet:()=>_sfc_main$12,ShellOutletMenuWidget:()=>_sfc_main$9,ShellRouteTransition:()=>ShellRouteTransition_default,ShellSurfaceAwareMenuLinkItem:()=>ShellSurfaceAwareMenuLinkItem_default,ShellTabLinkItem:()=>ShellTabLinkItem_default,ShellWebClientProvider:()=>ShellWebClientProvider,createBootstrapPayloadHandlerRegistry:()=>createBootstrapPayloadHandlerRegistry,isRecoverableRequestError:()=>isRecoverableRequestError,normalizeBootstrapPayloadHandler:()=>normalizeBootstrapPayloadHandler,requestRecoveryMessage:()=>requestRecoveryMessage,useShellAsyncModuleRecoveryRuntime:()=>useShellAsyncModuleRecoveryRuntime,useShellErrorPresentationStore:()=>useShellErrorPresentationStore,useShellLayoutState:()=>useShellLayoutState,useShellLayoutStore:()=>useShellLayoutStore,useShellRequestRecoveryRuntime:()=>useShellRequestRecoveryRuntime});var client_exports$3=__exportAll({});var _sfc_main$4={__name:`MenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createBlock(unref(ShellMenuLinkItem_default),normalizeProps(guardReactiveProps(props)),null,16)}}};var MenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$4,[[`__scopeId`,`data-v-8cffb0ff`]]);var _hoisted_1$1=[`data-vibe64-guide`];var _sfc_main$3={__name:`SurfaceAwareMenuLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false},guideId:{type:String,default:``}},setup(__props){const props=__props;const linkProps=computed(()=>{const{guideId,...value}=props;return value});const incomingCount=inject$1(`vibe64.incoming.pendingCount`,null);const incomingLink=computed(()=>props.scopedSuffix.endsWith(`/dashboard/incoming`));return(_ctx,_cache)=>{return incomingLink.value?(openBlock(),createBlock(VBadge,{key:0,class:`incoming-menu-link`,"model-value":unref(incomingCount)>0,content:unref(incomingCount),max:`99`,inline:``},{default:withCtx(()=>[createVNode(unref(ShellSurfaceAwareMenuLinkItem_default),normalizeProps(guardReactiveProps(linkProps.value)),null,16)]),_:1},8,[`model-value`,`content`])):__props.guideId?(openBlock(),createElementBlock(`div`,{key:1,class:`surface-aware-menu-link-guide`,"data-vibe64-guide":__props.guideId},[createVNode(unref(ShellSurfaceAwareMenuLinkItem_default),normalizeProps(guardReactiveProps(linkProps.value)),null,16)],8,_hoisted_1$1)):(openBlock(),createBlock(unref(ShellSurfaceAwareMenuLinkItem_default),normalizeProps(mergeProps({key:2},linkProps.value)),null,16))}}};var SurfaceAwareMenuLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$3,[[`__scopeId`,`data-v-3bac1736`]]);var _sfc_main$2={__name:`TabLinkItem`,props:{label:{type:String,default:``},to:{type:String,default:``},icon:{type:String,default:``},surface:{type:String,default:``},scopedSuffix:{type:String,default:`/`},unscopedSuffix:{type:String,default:`/`},disabled:{type:Boolean,default:false},exact:{type:Boolean,default:false}},setup(__props){const props=__props;return(_ctx,_cache)=>{return openBlock(),createBlock(unref(ShellTabLinkItem_default),normalizeProps(guardReactiveProps(props)),null,16)}}};var TabLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$2,[[`__scopeId`,`data-v-49a92b2f`]]);var _sfc_main$1={__name:`TopActionLinkItem`,props:{disabled:{default:false,type:Boolean},exact:{default:false,type:Boolean},icon:{default:``,type:String},label:{default:``,type:String},returnToCurrent:{default:false,type:Boolean},to:{default:``,type:String}},setup(__props){const props=__props;const route=useRoute();const resolvedIcon=computed(()=>mdiLinkVariant);const active=computed(()=>{const target=String(props.to||``).trim();const path=String(route.path||``).trim();if(!target||!path)return false;return props.exact?path===target:path===target||path.startsWith(`${target}/`)});const resolvedTo=computed(()=>{const target=String(props.to||``).trim();if(!target||!props.returnToCurrent||active.value)return target;return{path:target,query:{returnTo:route.fullPath||route.path||`/app`}}});return(_ctx,_cache)=>{return props.to?(openBlock(),createBlock(VBtn,{key:0,class:normalizeClass([`top-action-link-item text-none`,{"top-action-link-item--active":active.value}]),disabled:props.disabled,"prepend-icon":resolvedIcon.value||void 0,to:resolvedTo.value,variant:`tonal`,color:`primary`,density:`comfortable`},{default:withCtx(()=>[createTextVNode(toDisplayString(props.label||`Open`),1)]),_:1},8,[`class`,`disabled`,`prepend-icon`,`to`])):createCommentVNode(``,true)}}};var TopActionLinkItem_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-3900100a`]]);var VIBE64_ACTIVE_SESSION_NAV_KEY=Symbol(`vibe64.activeSessionNav`);var _hoisted_1={key:0,class:`vibe64-active-session-nav-item vibe64-active-session-nav-item--heading`,"aria-label":`Active session navigation`};var _hoisted_2=[`title`];var _hoisted_3={class:`vibe64-active-session-nav-item__label`};var _sfc_main={__name:`Vibe64ActiveSessionNavItem`,props:{disabled:{default:false,type:Boolean},icon:{default:``,type:String},guideId:{default:``,type:String},label:{default:``,type:String},role:{default:``,type:String},title:{default:``,type:String},to:{default:``,type:String},toolId:{default:``,type:String}},setup(__props){const props=__props;const injectedSessionNav=inject$1(VIBE64_ACTIVE_SESSION_NAV_KEY,null);const sessionNav=computed(()=>{const value=unref(injectedSessionNav);return value&&typeof value===`object`?value:{}});const tools=computed(()=>Array.isArray(sessionNav.value.tools)?sessionNav.value.tools:[]);const tool=computed(()=>{const toolId=String(props.toolId||``).trim();return tools.value.find(candidate=>String(candidate?.id||``)===toolId)||{}});const navVisible=computed(()=>Boolean(sessionNav.value.visible!==false&&sessionNav.value.label));const headerVisible=computed(()=>Boolean(navVisible.value&&props.role===`heading`));const itemVisible=computed(()=>Boolean(navVisible.value&&props.role!==`heading`&&props.toolId));const itemLabel=computed(()=>String(tool.value.label||props.label||``));const itemIcon=computed(()=>String(tool.value.icon||props.icon||``));const itemTitle=computed(()=>String(tool.value.title||props.title||``));const itemTo=computed(()=>String(tool.value.to||props.to||``).trim());const itemDisabled=computed(()=>Boolean(props.disabled||tool.value.disabled));const itemDisabledReason=computed(()=>String(tool.value.disabledReason||itemTitle.value||``));const statusClass=computed(()=>`vibe64-active-session-nav-item__status--${String(sessionNav.value.status||`unknown`).trim()||`unknown`}`);function selectTool(){if(itemDisabled.value||typeof sessionNav.value.selectTool!==`function`)return;if(itemTo.value)return;sessionNav.value.selectTool(String(props.toolId||``))}return(_ctx,_cache)=>{return headerVisible.value?(openBlock(),createElementBlock(`div`,_hoisted_1,[createVNode(VDivider,{class:`vibe64-active-session-nav-item__divider`}),_cache[0]||(_cache[0]=createBaseVNode(`span`,{class:`vibe64-dashboard-nav-group-label`},`Session`,-1)),createBaseVNode(`div`,{class:`vibe64-active-session-nav-item__heading`,title:sessionNav.value.label},[createBaseVNode(`span`,{class:normalizeClass([`vibe64-active-session-nav-item__status`,statusClass.value])},null,2),createBaseVNode(`span`,_hoisted_3,toDisplayString(sessionNav.value.label),1)],8,_hoisted_2)])):itemVisible.value?(openBlock(),createBlock(VListItem,{key:1,class:`vibe64-active-session-nav-item`,active:tool.value.active,disabled:itemDisabled.value,"prepend-icon":itemIcon.value,title:itemLabel.value,"data-vibe64-guide":props.guideId||void 0,subtitle:itemDisabled.value?itemDisabledReason.value:``,to:itemTo.value||void 0,onClick:selectTool},null,8,[`active`,`disabled`,`prepend-icon`,`title`,`data-vibe64-guide`,`subtitle`,`to`])):createCommentVNode(``,true)}}};var Vibe64ActiveSessionNavItem_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-e4e39c7a`]]);function isVibe64LiveQuery(query={}){return(Array.isArray(query?.queryKey)?query.queryKey:[])[0]===`vibe64`}function invalidateVibe64LiveQueries(queryClient){if(!queryClient||typeof queryClient.invalidateQueries!==`function`)return null;return queryClient.invalidateQueries({predicate:isVibe64LiveQuery,refetchType:`active`})}function attachVibe64RealtimeQueryRecovery({queryClient,realtime}={}){const socket=realtime?.socket;if(!socket||typeof socket.on!==`function`)throw new TypeError(`Vibe64 realtime query recovery requires a realtime socket.`);const recoverQueries=()=>invalidateVibe64LiveQueries(queryClient);socket.on(`connect`,recoverQueries);return()=>socket.off?.(`connect`,recoverQueries)}var detachQueryRecoveryByRealtime=new WeakMap;var MainClientProvider=defineProvider({id:`local.main.client`,requires:{components:`client.components`,queryClient:`client.query`,realtime:`client.realtime`},setup({components,queryClient,realtime}){components.register(`local.main.ui.menu-link-item`,MenuLinkItem_default);components.register(`local.main.ui.surface-aware-menu-link-item`,SurfaceAwareMenuLinkItem_default);components.register(`local.main.ui.tab-link-item`,TabLinkItem_default);components.register(`local.main.ui.top-action-link-item`,TopActionLinkItem_default);components.register(`local.main.vibe64.active-session-nav-item`,Vibe64ActiveSessionNavItem_default);detachQueryRecoveryByRealtime.set(realtime,attachVibe64RealtimeQueryRecovery({queryClient,realtime}))},shutdown({realtime}){detachQueryRecoveryByRealtime.get(realtime)?.();detachQueryRecoveryByRealtime.delete(realtime)}});var client_exports$2=__exportAll({MainClientProvider:()=>MainClientProvider});var client_exports$1=__exportAll({loadLocalDatabaseServer:()=>loadLocalDatabaseServer,loadVibe64DatabaseWorkspace:()=>loadVibe64DatabaseWorkspace,useVibe64DatabaseTools:()=>useVibe64DatabaseTools});async function loadVibe64DatabaseWorkspace(){return(await __vitePreload(()=>import(`./Vibe64DatabaseWorkspace-BCEIOlSg.js`),__vite__mapDeps([164,1,6,7,8,2,48,24,25,26,23,27,28,15,16,29,30,31,32,14,17,33,34,49,50,19,20,51,35,18,5,9,54,55,56,57,58,59,36,37,38,39,40,41,64,65,10,11,69,70,92,93,12,94,95,96,75,82,78,45,43,44,46,47,165,42,52,53,60,61,62,63,66,67,68,71,72,13,21,73,74,76,77,79,80,81,83,84,85,86,100,166,167]))).default}async function loadLocalDatabaseServer(){return(await __vitePreload(()=>import(`./LocalDatabaseServer-CVsGChHh.js`),__vite__mapDeps([168,1,6,7,8,43,44,45,46,47,33,24,25,26,34,18,5,9,62,63,66,12,67,68,80,2,53,79,81,77,78,82,85,52,169]))).default}var client_exports=__exportAll({loadVibe64ArchitectureView:()=>loadVibe64ArchitectureView,useVibe64SystemGraph:()=>useVibe64SystemGraph});async function loadVibe64ArchitectureView(){return(await __vitePreload(async()=>{const{default:__vite_default__}=await import(`./Vibe64UiStoryboardView-Bp9STItF.js`);return{default:__vite_default__}},__vite__mapDeps([170,1,6,7,8,23,24,25,26,27,28,15,16,29,30,31,32,18,5,9,54,55,36,37,38,39,12,98,43,44,45,46,47,80,2,53,79,81,99,166,171]))).default}function normalizeComponentId(value){const id=String(value||``).trim();if(!id)throw new TypeError(`Client component id is required.`);return id}function createClientComponentRegistry(){const components=new Map;function register(id,component){const componentId=normalizeComponentId(id);if(component==null)throw new TypeError(`Client component "${componentId}" is required.`);if(components.has(componentId))throw new Error(`Client component "${componentId}" is duplicated.`);components.set(componentId,component);return api}function has(id){return components.has(normalizeComponentId(id))}function get(id){const componentId=normalizeComponentId(id);if(!components.has(componentId))throw new Error(`Client component "${componentId}" is not registered.`);return components.get(componentId)}function ids(){return Object.freeze([...components.keys()].sort())}const api=Object.freeze({register,has,get,ids});return api}function normalizePackageMetadataUiRoutes(value){const routeEntries=Array.isArray(value)?value:[];const normalizedRoutes=[];for(const routeEntry of routeEntries){if(!isRecord$2(routeEntry))continue;try{normalizedRoutes.push(Object.freeze(JSON.parse(JSON.stringify(routeEntry))))}catch{}}return Object.freeze(normalizedRoutes)}function normalizePackageMetadataClientProviders(value){const entries=Array.isArray(value)?value:[];const providers=[];for(const entry of entries){if(!isRecord$2(entry))continue;const exportName=String(entry.export||``).trim();if(!exportName)continue;providers.push(Object.freeze({export:exportName,entrypoint:String(entry.entrypoint||``).trim()}))}return Object.freeze(providers)}function normalizePackageId(value){return String(value||``).trim()}function toRouteSnapshot(route){const metaJskit=isRecord$2(route?.meta?.jskit)?route.meta.jskit:{};return Object.freeze({id:String(route?.id||``).trim(),name:String(route?.name||``).trim(),path:String(route?.path||``).trim(),scope:String(route?.scope||``).trim(),surface:String(route?.surface||``).trim(),metaScope:String(metaJskit.scope||``).trim(),metaSurface:String(metaJskit.surface||``).trim()})}function isRouteComponent(value){if(typeof value===`function`)return true;return Boolean(value&&typeof value===`object`&&!Array.isArray(value))}function normalizeRoute(route,{packageId,index}){if(!isRecord$2(route))throw new TypeError(`Client route #${index} from ${packageId} must be an object.`);const id=String(route.id||``).trim();const path=String(route.path||``).trim();if(!id)throw new Error(`Client route #${index} from ${packageId} requires id.`);if(!path||!path.startsWith(`/`)||path.startsWith(`//`))throw new Error(`Client route "${id}" from ${packageId} must use an absolute path.`);if(!isRouteComponent(route.component))throw new Error(`Client route "${id}" from ${packageId} requires component.`);const scope=String(route.scope||`surface`).trim().toLowerCase();if(scope!==`global`&&scope!==`surface`)throw new Error(`Client route "${id}" from ${packageId} has invalid scope "${scope}".`);const surface=String(route.surface||``).trim().toLowerCase();const baseMeta=isRecord$2(route.meta)?route.meta:{};const baseMetaJskit=isRecord$2(baseMeta.jskit)?baseMeta.jskit:{};return Object.freeze({...route,id,path,scope,...surface?{surface}:{},meta:{...baseMeta,jskit:{...baseMetaJskit,packageId,routeId:id,scope,...surface?{surface}:{}}}})}function normalizeRouteList(routes,{packageId}){return Object.freeze((Array.isArray(routes)?routes:[]).map((route,index)=>normalizeRoute(route,{packageId,index:index+1})))}function toVueRouteRecord(route){const nextMeta=isRecord$2(route.meta)?{...route.meta}:void 0;const routeRecord={path:route.path,component:route.component,...route.name?{name:route.name}:{},...route.props!==void 0?{props:route.props}:{},...route.redirect!==void 0?{redirect:route.redirect}:{},...route.children!==void 0?{children:route.children}:{},...nextMeta?{meta:nextMeta}:{}};return Object.freeze(routeRecord)}function registerClientModuleRoutes({packageId,routes=[],router,surfaceRuntime,surfaceMode,seenRoutePaths,seenRouteNames,logger=null,source=`module`,packageMetadataRouteDeclarations=null}={}){const normalizedPackageId=normalizePackageId(packageId);if(!normalizedPackageId)throw new TypeError(`registerClientModuleRoutes requires packageId.`);if(!router||typeof router.addRoute!==`function`)throw new TypeError(`registerClientModuleRoutes requires router.addRoute().`);if(!surfaceRuntime||typeof surfaceRuntime!==`object`)throw new TypeError(`registerClientModuleRoutes requires surfaceRuntime.`);const normalizedRoutes=normalizeRouteList(routes,{packageId:normalizedPackageId});assertRoutesDeclaredInPackageMetadata({packageId:normalizedPackageId,source,normalizedRoutes,packageMetadataRouteDeclarations});const activeRoutes=filterRoutesBySurface(normalizedRoutes,{surfaceRuntime,surfaceMode});const log=createStructuredLogger(logger);log.debug({packageId:normalizedPackageId,source,surfaceMode:String(surfaceMode||``).trim(),declaredRoutes:normalizedRoutes.map(toRouteSnapshot),activeRoutes:activeRoutes.map(toRouteSnapshot)},`Client route registration analysis.`);const declaredPaths=normalizedRoutes.map(route=>route.path);const activePaths=activeRoutes.map(route=>route.path);let registeredCount=0;for(const route of activeRoutes){const normalizedPath=String(route.path||``).trim();if(seenRoutePaths.has(normalizedPath))throw new Error(`Client route path "${normalizedPath}" is duplicated (package ${normalizedPackageId}).`);const normalizedName=String(route.name||``).trim();if(normalizedName){if(seenRouteNames.has(normalizedName))throw new Error(`Client route name "${normalizedName}" is duplicated (package ${normalizedPackageId}).`);seenRouteNames.add(normalizedName)}seenRoutePaths.add(normalizedPath);router.addRoute(toVueRouteRecord(route));log.debug({packageId:normalizedPackageId,source,route:toRouteSnapshot(route)},`Added client route to router.`);registeredCount+=1}return Object.freeze({packageId:normalizedPackageId,source,declaredCount:normalizedRoutes.length,registeredCount,declaredPaths:Object.freeze(declaredPaths),activePaths:Object.freeze(activePaths)})}function resolvePackageMetadataProviders(moduleNamespace,packageId,packageMetadataClientProviders=[]){const providers=[];const seenProviderIds=new Set;for(const providerDeclaration of packageMetadataClientProviders){const exportName=String(providerDeclaration?.export||``).trim();if(!exportName)continue;const providerValue=moduleNamespace?.[exportName];let provider=null;try{provider=defineProvider(providerValue)}catch(error){throw new TypeError(`Client module ${packageId} packageMetadata provider export "${exportName}" must be a capability provider: ${error.message}`,{cause:error})}const providerId=provider.id;if(seenProviderIds.has(providerId))continue;seenProviderIds.add(providerId);providers.push(provider)}return providers}function resolveModuleProviders(moduleNamespace,packageId,packageMetadataClientProviders=[]){if(!isRecord$2(moduleNamespace))return[];return resolvePackageMetadataProviders(moduleNamespace,packageId,packageMetadataClientProviders)}function buildPackageMetadataRouteDeclarationIndex({packageId,packageMetadataUiRoutes=[]}={}){const normalizedPackageId=normalizePackageId(packageId);const packageMetadataRoutes=normalizePackageMetadataUiRoutes(packageMetadataUiRoutes);const byId=new Map;for(const packageMetadataRoute of packageMetadataRoutes){const routeId=String(packageMetadataRoute.id||``).trim();const routePath=String(packageMetadataRoute.path||``).trim();const routeScope=String(packageMetadataRoute.scope||`surface`).trim().toLowerCase();if(!routeId||!routePath)continue;if(byId.has(routeId)){const existingRoute=byId.get(routeId);if(existingRoute.path!==routePath||existingRoute.scope!==routeScope)throw new Error(`PackageMetadata ui routes for ${normalizedPackageId} define duplicate id "${routeId}" with conflicting declarations.`);continue}byId.set(routeId,Object.freeze({id:routeId,path:routePath,scope:routeScope}))}return Object.freeze({byId})}function assertRoutesDeclaredInPackageMetadata({packageId,source,normalizedRoutes=[],packageMetadataRouteDeclarations=null}={}){if(String(source||``).trim()!==`clientRoutes`)return;const byId=packageMetadataRouteDeclarations?.byId instanceof Map?packageMetadataRouteDeclarations.byId:new Map;const normalizedPackageId=normalizePackageId(packageId);for(const route of normalizedRoutes){const routeId=String(route?.id||``).trim();const routePath=String(route?.path||``).trim();if(String(route?.scope||`surface`).trim().toLowerCase()!==`global`)continue;const declaredRoute=byId.get(routeId);if(!declaredRoute)throw new Error(`Global client route "${routeId}" from ${normalizedPackageId} (${source}) must be declared in metadata.ui.routes (id "${routeId}", path "${routePath}") with scope:"global" and autoRegister:false.`);if(String(declaredRoute.path||``).trim()!==routePath)throw new Error(`Global client route "${routeId}" from ${normalizedPackageId} (${source}) path "${routePath}" does not match packageMetadata metadata.ui.routes path "${declaredRoute.path}".`);if(String(declaredRoute.scope||``).trim().toLowerCase()!==`global`)throw new Error(`Global client route "${routeId}" from ${normalizedPackageId} (${source}) must be declared with scope:"global" in metadata.ui.routes.`)}}function resolvePackageMetadataClientRoutes({packageId,packageMetadataUiRoutes=[],routeComponents={},logger=null}={}){const normalizedPackageId=normalizePackageId(packageId);const packageMetadataRoutes=normalizePackageMetadataUiRoutes(packageMetadataUiRoutes);if(packageMetadataRoutes.length<1)return Object.freeze([]);if(!isRecord$2(routeComponents))throw new TypeError(`Client module ${normalizedPackageId} declares packageMetadata ui routes but does not export a routeComponents map.`);const log=createStructuredLogger(logger);const routes=[];const skippedRoutes=[];for(const packageMetadataRoute of packageMetadataRoutes){const routeId=String(packageMetadataRoute.id||``).trim();const routePath=String(packageMetadataRoute.path||``).trim();if(!(packageMetadataRoute.autoRegister!==false)){skippedRoutes.push(Object.freeze({id:routeId,path:routePath,reason:`autoRegister=false`}));continue}if(!routeId||!routePath)throw new Error(`PackageMetadata ui route from ${normalizedPackageId} requires id and path when autoRegister is enabled.`);const componentKey=String(packageMetadataRoute.componentKey||``).trim();if(!componentKey)throw new Error(`PackageMetadata ui route "${routeId}" from ${normalizedPackageId} requires componentKey when autoRegister is enabled.`);const routeComponent=routeComponents[componentKey];if(!isRouteComponent(routeComponent))throw new Error(`PackageMetadata ui route "${routeId}" from ${normalizedPackageId} references unknown routeComponents key "${componentKey}".`);const scope=String(packageMetadataRoute.scope||`surface`).trim().toLowerCase();const surface=String(packageMetadataRoute.surface||``).trim().toLowerCase();const guard=isRecord$2(packageMetadataRoute.guard)?{...packageMetadataRoute.guard}:{};const baseMeta=isRecord$2(packageMetadataRoute.meta)?{...packageMetadataRoute.meta}:{};const baseMetaJskit=isRecord$2(baseMeta.jskit)?{...baseMeta.jskit}:{};routes.push(Object.freeze({id:routeId,path:routePath,scope,...surface?{surface}:{},...String(packageMetadataRoute.name||``).trim()?{name:String(packageMetadataRoute.name||``).trim()}:{},component:routeComponent,meta:{...baseMeta,...Object.keys(guard).length>0?{guard}:{},jskit:{...baseMetaJskit,packageId:normalizedPackageId,routeId,scope,componentKey,source:`packageMetadata.ui.routes`,...surface?{surface}:{}}}}))}log.debug({packageId:normalizedPackageId,packageMetadataRouteCount:packageMetadataRoutes.length,autoRegisterRouteCount:routes.length,skippedRoutes},`Processed packageMetadata ui routes.`);return Object.freeze(routes)}function normalizeClientModuleEntries(clientModules){if(!Array.isArray(clientModules))return[];return clientModules.map(entry=>{const packageId=normalizePackageId(entry?.packageId);const moduleNamespace=isRecord$2(entry?.module)?entry.module:null;if(!packageId||!moduleNamespace)return null;return Object.freeze({packageId,module:moduleNamespace,packageMetadataUiRoutes:normalizePackageMetadataUiRoutes(entry?.packageMetadataUiRoutes),packageMetadataClientProviders:normalizePackageMetadataClientProviders(entry?.packageMetadataClientProviders)})}).filter(Boolean).sort((left,right)=>left.packageId.localeCompare(right.packageId))}function createClientRuntime({profile=`client`,providers=[],app,pinia=null,queryClient=null,router,env,logger,surfaceRuntime,surfaceMode}={}){const components=createClientComponentRegistry();const runtime=createCapabilityRuntime({profile,providers,inputs:{"client.vue":app||null,"client.router":router||null,"client.pinia":pinia,"client.query":queryClient,"client.env":Object.freeze({...isRecord$2(env)?env:{}}),"client.surface":surfaceRuntime||null,"client.surface-mode":String(surfaceMode||``).trim(),"client.logger":logger,"client.components":components}});return Object.freeze({runtime,components})}async function bootClientModules({clientModules=[],app,pinia=null,queryClient=null,router,surfaceRuntime,surfaceMode,env,logger=console}={}){if(!router||typeof router.addRoute!==`function`)throw new TypeError(`bootClientModules requires router.addRoute().`);if(!surfaceRuntime||typeof surfaceRuntime.normalizeSurfaceMode!==`function`)throw new TypeError(`bootClientModules requires surfaceRuntime.normalizeSurfaceMode().`);const log=createStructuredLogger(logger);const moduleEntries=normalizeClientModuleEntries(clientModules);const providers=[];const seenProviderIds=new Set;log.debug({surfaceMode:String(surfaceMode||``).trim(),normalizedSurfaceMode:String(surfaceRuntime.normalizeSurfaceMode(surfaceMode)||``).trim(),moduleCount:moduleEntries.length,modules:moduleEntries.map(entry=>entry.packageId)},`Starting JSKIT client module bootstrap.`);for(const entry of moduleEntries){const moduleProviders=resolveModuleProviders(entry.module,entry.packageId,entry.packageMetadataClientProviders);log.debug({packageId:entry.packageId,providerExports:moduleProviders.map(provider=>provider.id),hasClientRoutes:Array.isArray(entry.module.clientRoutes)&&entry.module.clientRoutes.length>0},`Discovered client module capabilities.`);for(const provider of moduleProviders){const providerId=provider.id;if(seenProviderIds.has(providerId))throw new Error(`Client provider id "${providerId}" is duplicated.`);seenProviderIds.add(providerId);providers.push(provider)}}const clientRuntime=createClientRuntime({profile:String(surfaceRuntime.normalizeSurfaceMode(surfaceMode)||`client`),providers,app,pinia,queryClient,router,env,logger:log,surfaceRuntime,surfaceMode});await clientRuntime.runtime.start();const seenRoutePaths=new Set;const seenRouteNames=new Set;const routeResults=[];const registerRoutesForEntry=(routeList,packageId,source=`module`,packageMetadataRouteDeclarations=null)=>{if(!routeList||routeList.length===0)return null;const result=registerClientModuleRoutes({packageId,routes:routeList,router,surfaceRuntime,surfaceMode,seenRoutePaths,seenRouteNames,logger:log,source,packageMetadataRouteDeclarations});log.debug({packageId,source,declaredPaths:result.declaredPaths,activePaths:result.activePaths,registeredCount:result.registeredCount},`Registered client module routes.`);log.debug({packageId,source,routerRoutes:summarizeRouterRoutes(router)},`Router route table after client route registration.`);routeResults.push(result);return result};for(const entry of moduleEntries){const packageMetadataRouteDeclarations=buildPackageMetadataRouteDeclarationIndex({packageId:entry.packageId,packageMetadataUiRoutes:entry.packageMetadataUiRoutes});registerRoutesForEntry(resolvePackageMetadataClientRoutes({packageId:entry.packageId,packageMetadataUiRoutes:entry.packageMetadataUiRoutes,routeComponents:entry.module.routeComponents,logger:log}),entry.packageId,`packageMetadata.ui.routes`,packageMetadataRouteDeclarations);registerRoutesForEntry(Array.isArray(entry.module.clientRoutes)?entry.module.clientRoutes:[],entry.packageId,`clientRoutes`,packageMetadataRouteDeclarations)}const registeredRouteCount=routeResults.reduce((sum,result)=>sum+result.registeredCount,0);if(moduleEntries.length>0){log.debug({modules:moduleEntries.map(entry=>entry.packageId),providerCount:providers.length,routeCount:registeredRouteCount},`Booted JSKIT client modules.`);log.debug({routerRoutes:summarizeRouterRoutes(router),currentPath:typeof window!==`undefined`?String(window.location?.pathname||``):``},`JSKIT client bootstrap final route table.`)}return Object.freeze({runtime:clientRuntime.runtime,components:clientRuntime.components,modules:Object.freeze(moduleEntries.map(entry=>entry.packageId)),providerCount:providers.length,routeResults:Object.freeze(routeResults),routeCount:registeredRouteCount})}var installedClientModules=Object.freeze([{packageId:`@jskit-ai/assistant-core`,module:client_exports$9,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/assistant-runtime`,module:client_exports$8,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`AssistantClientProvider`,"entrypoint":`src/client/providers/AssistantClientProvider.js`}]},{packageId:`@jskit-ai/assistant-voice`,module:client_exports$11,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/connectors-web`,module:client_exports$6,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/http-runtime`,module:client_exports$12,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`HttpValidatorsClientProvider`,"entrypoint":`src/client/providers/HttpValidatorsClientProvider.js`},{"export":`HttpClientRuntimeClientProvider`,"entrypoint":`src/client/providers/HttpClientRuntimeClientProvider.js`}]},{packageId:`@jskit-ai/http-web`,module:client_exports$5,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@jskit-ai/realtime`,module:RealtimeClientProvider_exports,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`RealtimeClientProvider`,"entrypoint":`src/client/RealtimeClientProvider.js`}]},{packageId:`@jskit-ai/shell-web`,module:client_exports$4,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`ShellWebClientProvider`,"entrypoint":`src/client/providers/ShellWebClientProvider.js`}]},{packageId:`@jskit-ai/uploads-runtime`,module:client_exports$3,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/main`,module:client_exports$2,packageMetadataUiRoutes:[],packageMetadataClientProviders:[{"export":`MainClientProvider`,"entrypoint":`src/client/providers/MainClientProvider.js`}]},{packageId:`@local/vibe64-accounts`,module:client_exports$13,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-colleague`,module:client_exports$7,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-database-tools`,module:client_exports$1,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-system-graph`,module:client_exports,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]},{packageId:`@local/vibe64-voice`,module:client_exports$10,packageMetadataUiRoutes:[],packageMetadataClientProviders:[]}]);async function bootInstalledClientModules(context={}){return bootClientModules({...context,clientModules:installedClientModules})}var surfaceAccessPolicies={};surfaceAccessPolicies.public={};var config={};config.tenancyMode=`none`;config.realtimeClient={options:{transports:[`websocket`]}};config.surfaceModeAll=`all`;config.surfaceDefaultId=`app`;config.webRootAllowed=`yes`;config.surfaceAccessPolicies=surfaceAccessPolicies;config.mobile={enabled:false,strategy:``,appId:``,appName:``,assetMode:`bundled`,devServerUrl:``,apiBaseUrl:``,auth:{callbackPath:`/auth/login`,customScheme:``,appLinkDomains:[]},android:{packageName:``,minSdk:26,targetSdk:35,versionCode:1,versionName:`1.0.0`}};config.surfaceDefinitions={};config.surfaceDefinitions.app={id:`app`,label:`Sessions`,pagesRoot:`app`,enabled:true,requiresAuth:false,requiresWorkspace:false,accessPolicyId:`public`,origin:``};config.assistantSurfaces={app:{settingsSurfaceId:`app`,configScope:`global`}};var BROWSER_LIFECYCLE_WEBSOCKET_PATH=`/api/studio/browser-lifecycle/ws`;var BROWSER_LIFECYCLE_DISCONNECTED_EVENT=`vibe64:browser-lifecycle-disconnected`;function noopLifecycleConnection(){return{close(){}}}function createBrowserLifecycleDisconnectedEvent(browserWindow,detail={}){const CustomEventCtor=browserWindow?.CustomEvent||globalThis.CustomEvent;if(typeof CustomEventCtor===`function`)return new CustomEventCtor(BROWSER_LIFECYCLE_DISCONNECTED_EVENT,{detail});const EventCtor=browserWindow?.Event||globalThis.Event;if(typeof EventCtor===`function`){const event=new EventCtor(BROWSER_LIFECYCLE_DISCONNECTED_EVENT);event.detail=detail;return event}return{detail,type:BROWSER_LIFECYCLE_DISCONNECTED_EVENT}}function connectBrowserLifecycleSocket({browserWindow=typeof window!==`undefined`?window:null,WebSocketCtor=typeof WebSocket!==`undefined`?WebSocket:null}={}){if(!browserWindow||typeof WebSocketCtor!==`function`)return noopLifecycleConnection();let socket=null;let connected=false;let closeBrowserOnDisconnect=false;let pageUnloading=false;let stopped=false;const markPageUnloading=()=>{pageUnloading=true};const removeUnloadListeners=()=>{browserWindow.removeEventListener?.(`beforeunload`,markPageUnloading);browserWindow.removeEventListener?.(`pagehide`,markPageUnloading)};const closeWindowIfServerDisconnected=()=>{removeUnloadListeners();if(connected&&!stopped&&!pageUnloading)browserWindow.dispatchEvent?.(createBrowserLifecycleDisconnectedEvent(browserWindow,{closeBrowserOnDisconnect}));if(connected&&closeBrowserOnDisconnect&&!stopped&&!pageUnloading)browserWindow.close?.()};const receiveLifecycleState=event=>{try{const message=JSON.parse(String(event?.data||``));if(message?.type===`browser-lifecycle-state`)closeBrowserOnDisconnect=message.closeBrowserOnDisconnect===true}catch{}};browserWindow.addEventListener?.(`beforeunload`,markPageUnloading);browserWindow.addEventListener?.(`pagehide`,markPageUnloading);try{socket=new WebSocketCtor(resolveWebSocketUrl$1(BROWSER_LIFECYCLE_WEBSOCKET_PATH,browserWindow))}catch{removeUnloadListeners();return noopLifecycleConnection()}socket.addEventListener?.(`open`,()=>{connected=true});socket.addEventListener?.(`message`,receiveLifecycleState);socket.addEventListener?.(`close`,closeWindowIfServerDisconnected);return{close(){stopped=true;removeUnloadListeners();socket?.close?.()}}}function bootBrowserLifecycle(options={}){return connectBrowserLifecycleSocket(options)}var APPEARANCE_STORAGE_KEY=`vibe64.appearance`;var APPEARANCE_CHOICES=Object.freeze([`light`,`dark`,`system`]);function readAppearance(){const value=readLocalStorageJson(APPEARANCE_STORAGE_KEY,`light`);return APPEARANCE_CHOICES.includes(value)?value:`light`}function writeAppearance(value){if(APPEARANCE_CHOICES.includes(value))writeLocalStorageJson(APPEARANCE_STORAGE_KEY,value)}configureHttpWebClient({csrf:{enabled:false},resolveRequestUrl(url){return resolveStudioRequestUrl(url)}});bootBrowserLifecycle();var surfaceRuntime=createSurfaceRuntime({allMode:config.surfaceModeAll,surfaces:config.surfaceDefinitions,defaultSurfaceId:config.surfaceDefaultId});var surfaceMode=surfaceRuntime.normalizeSurfaceMode(void 0);var{router,fallbackRoute}=createSurfaceShellRouter({createRouter,history:createWebHistory(),routes,surfaceRuntime,surfaceMode,notFoundComponent:_sfc_main$22,guard:{surfaceDefinitions:config.surfaceDefinitions,defaultSurfaceId:config.surfaceDefaultId,webRootAllowed:config.webRootAllowed}});var vuetify=createVuetify({theme:{defaultTheme:readAppearance(),themes:{light:{colors:{"surface-variant":`#EEF3FA`,"on-surface-variant":`#1F2937`,warning:`#725C0C`,"on-warning":`#FFFFFF`,"warning-container":`#F5F0E3`,"on-warning-container":`#252117`}},dark:{colors:{background:`#111318`,surface:`#1A1C21`,"surface-bright":`#37393F`,"surface-light":`#2A2D33`,"surface-variant":`#243342`,"on-surface-variant":`#EDF4FC`,warning:`#DFC477`,"on-warning":`#3D2F00`,"warning-container":`#353126`,"on-warning-container":`#EAE1CF`}}}},defaults:{VCard:{rounded:`lg`},VAlert:{rounded:`lg`}},icons:{defaultSet:`mdi`,aliases,sets:{mdi}}});var pinia=createPinia();var queryClient=new QueryClient({defaultOptions:{queries:{refetchOnWindowFocus:false,refetchOnReconnect:true,retry:shouldRetryTransientQueryFailure,retryDelay:transientQueryRetryDelay}}});bootstrapClientShellApp({createApp,rootComponent:_sfc_main$23,appConfig:config,appPlugins:[pinia,[VueQueryPlugin,{queryClient}],vuetify],pinia,queryClient,router,bootClientModules:bootInstalledClientModules,surfaceRuntime,surfaceMode,env:{"BASE_URL":`/`,"DEV":false,"MODE":`production`,"PROD":true,"SSR":false},fallbackRoute}).catch(error=>{console.error(`Failed to bootstrap client app.`,error);const status=document.getElementById(`startup-status`);if(status)status.textContent=`Vibe64 could not open. Reload the page to try again.`});export{vibe64SessionEventMatchesScope as $,VCombobox as $t,VIBE64_SOURCE_EDITOR_SYNC_ERROR_EVENT as A,normalizeConversationLogPage as At,vibe64GlobalCodexTerminalPath as B,VoiceConversationHost_default as Bt,useVibe64AssistantCatalog as C,useAssistantConversationFactory as Ct,VIBE64_SESSIONS_API_SUFFIX as D,normalizeConversationTurn as Dt,VIBE64_CURRENT_SESSION_API_SUFFIX as E,normalizeConversationMessage as Et,vibe64AgentAttachmentPath as F,createProjectVoiceBinding as Ft,vibe64OutputsQueryKey as G,unmatchedOptimisticMessages as Gt,vibe64OutputRunPath as H,VoiceConversationControls_default as Ht,vibe64AgentTerminalControlTextPath as I,mainConversationId as It,vibe64RepositoryVersionDiffPath as J,VTab as Jt,vibe64PreviewIdentityPath as K,useAssistantQuestions as Kt,vibe64AgentTerminalPath as L,mainConversationTarget as Lt,agentTurnControlPayloadFromContext as M,latestAssistantMessageAwaitingUserReply as Mt,selectedSessionStorageKey as N,mergeConversationStream as Nt,VIBE64_SESSION_CHANGED_EVENT as O,conversationLogReadQuery as Ot,vibe64AgentAttachmentFilePath as P,VIBE64_TRAINING_LEARNER_CHANGED_EVENT as Pt,vibe64SessionCheckUpdatesPath as Q,VTable as Qt,vibe64ConversationLogPath as R,temporaryConversationId as Rt,requestVibe64AccountConnectionsDialog as S,useAssistantConversation as St,VIBE64_ARCHIVED_SESSIONS_API_SUFFIX as T,applyConversationLogPatch as Tt,vibe64OutputRunStopPath as U,useVoiceLauncher as Ut,vibe64OutputResultPath as V,VoiceConversationSettings_default as Vt,vibe64OutputsPath as W,VoiceAvatar_default as Wt,vibe64SessionChangeDiffPath as X,VMain as Xt,vibe64RepositoryVersionFilesPath as Y,VSnackbar as Yt,vibe64SessionChangesPath as Z,VContainer as Zt,useVibe64LearningCourses as _,vibe64SourceEditorSearchPath as _t,VIBE64_ACTIVE_SESSION_NAV_KEY as a,VIBE64_LEARNING_ROUTES as an,vibe64SessionsQueryKey as at,readRefOrGetterValue as b,vibe64TemporaryConversationPath as bt,IntegrationConfigurationFields_default as c,withoutLesson as cn,vibe64SourceEditorDownloadPath as ct,secretReference as d,projectSubtitle as dn,vibe64SourceEditorExplanationStopPath as dt,VBottomSheet as en,vibe64SessionPath as et,validateIntegrationConfiguration as f,RouterView as fn,vibe64SourceEditorExplanationsCleanupPath as ft,courseProgress as g,vibe64SourceEditorResolvePathPath as gt,F as h,vibe64SourceEditorFilesPath as ht,client_exports$1 as i,VIBE64_LEARNING_MODE_PROJECT_CODE as in,vibe64SessionQueryKey as it,VIBE64_SOURCE_EDITOR_SYNC_READY_EVENT as j,normalizeConversationLogPagination as jt,VIBE64_SOURCE_EDITOR_FILE_CHANGED_EVENT as k,mergeConversationLogPages as kt,getProviderClientAuthenticationMethods as l,isPracticeProjectSlug as ln,vibe64SourceEditorExplanationFollowupsStreamPath as lt,GithubMarkdown_default as m,vibe64SourceEditorFilePath as mt,writeAppearance as n,usePageActivity as nn,vibe64SessionPromptHintsCancelPath as nt,_sfc_main$12 as o,lessonShownIn as on,vibe64SourceEditorChangesStreamPath as ot,Vibe64LearningMarkdown_default as p,vibe64SourceEditorExplanationsStreamPath as pt,vibe64RepositoryHistoryPath as q,VTabs as qt,client_exports as r,VIBE64_LEARNING_MODE_NOTE as rn,vibe64SessionPromptHintsPath as rt,useShellLayoutState as s,revealCurrentStep as sn,vibe64SourceEditorCreateFilePath as st,readAppearance as t,VAppBar as tn,vibe64SessionPreviewStatePath as tt,getProviderScopes as u,projectDisplayName as un,vibe64SourceEditorExplanationPath as ut,useVibe64Learning as v,vibe64SourceEditorStarsPath as vt,VIBE64_API_SUFFIX as w,createAssistantApi as wt,onVibe64AccountConnectionsDialogRequested as x,vibe64TemporaryConversationsPath as xt,Vibe64SessionAssistantMenu_default as y,vibe64SourceEditorTreePath as yt,vibe64ConversationLogQueryKey as z,useVibe64Voice as zt};