@zhanguym/chatroom 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +52 -0
  3. package/assets/chatroom.svg +15 -0
  4. package/chatroom.config.example.json +24 -0
  5. package/dist/app/application.d.ts +20 -0
  6. package/dist/app/application.js +75 -0
  7. package/dist/app/event-bus.d.ts +25 -0
  8. package/dist/app/event-bus.js +11 -0
  9. package/dist/app/external-access-registry.d.ts +17 -0
  10. package/dist/app/external-access-registry.js +41 -0
  11. package/dist/app/lifecycle.d.ts +14 -0
  12. package/dist/app/lifecycle.js +130 -0
  13. package/dist/auth/auth-service.d.ts +88 -0
  14. package/dist/auth/auth-service.js +221 -0
  15. package/dist/auth/ingress-policy.d.ts +23 -0
  16. package/dist/auth/ingress-policy.js +61 -0
  17. package/dist/auth/passkey-service.d.ts +39 -0
  18. package/dist/auth/passkey-service.js +145 -0
  19. package/dist/cli/index.d.ts +2 -0
  20. package/dist/cli/index.js +10 -0
  21. package/dist/cli/run-cli.d.ts +1 -0
  22. package/dist/cli/run-cli.js +41 -0
  23. package/dist/config/load-config.d.ts +7 -0
  24. package/dist/config/load-config.js +197 -0
  25. package/dist/config/platform-paths.d.ts +7 -0
  26. package/dist/config/platform-paths.js +34 -0
  27. package/dist/config/types.d.ts +24 -0
  28. package/dist/config/types.js +1 -0
  29. package/dist/core/auth/passkey-repository.d.ts +18 -0
  30. package/dist/core/auth/passkey-repository.js +1 -0
  31. package/dist/core/auth/repository.d.ts +36 -0
  32. package/dist/core/auth/repository.js +1 -0
  33. package/dist/core/auth/session-repository.d.ts +6 -0
  34. package/dist/core/auth/session-repository.js +1 -0
  35. package/dist/core/errors/chatroom-error.d.ts +9 -0
  36. package/dist/core/errors/chatroom-error.js +31 -0
  37. package/dist/core/logging/types.d.ts +31 -0
  38. package/dist/core/logging/types.js +1 -0
  39. package/dist/core/operations/bounded-value.d.ts +6 -0
  40. package/dist/core/operations/bounded-value.js +57 -0
  41. package/dist/core/operations/redactor.d.ts +4 -0
  42. package/dist/core/operations/redactor.js +69 -0
  43. package/dist/core/operations/repository.d.ts +18 -0
  44. package/dist/core/operations/repository.js +1 -0
  45. package/dist/core/operations/types.d.ts +28 -0
  46. package/dist/core/operations/types.js +8 -0
  47. package/dist/core/runtime/child-environment.d.ts +1 -0
  48. package/dist/core/runtime/child-environment.js +39 -0
  49. package/dist/core/runtime/command-runner.d.ts +16 -0
  50. package/dist/core/runtime/command-runner.js +48 -0
  51. package/dist/core/runtime/identity.d.ts +2 -0
  52. package/dist/core/runtime/identity.js +9 -0
  53. package/dist/infrastructure/database/app-database.d.ts +6 -0
  54. package/dist/infrastructure/database/app-database.js +22 -0
  55. package/dist/infrastructure/database/mcp-tool-settings-repository.d.ts +8 -0
  56. package/dist/infrastructure/database/mcp-tool-settings-repository.js +22 -0
  57. package/dist/infrastructure/database/oauth-repository.d.ts +20 -0
  58. package/dist/infrastructure/database/oauth-repository.js +140 -0
  59. package/dist/infrastructure/database/operation-repository.d.ts +16 -0
  60. package/dist/infrastructure/database/operation-repository.js +120 -0
  61. package/dist/infrastructure/database/passkey-repository.d.ts +11 -0
  62. package/dist/infrastructure/database/passkey-repository.js +57 -0
  63. package/dist/infrastructure/database/schema.d.ts +1 -0
  64. package/dist/infrastructure/database/schema.js +90 -0
  65. package/dist/infrastructure/database/web-session-repository.d.ts +10 -0
  66. package/dist/infrastructure/database/web-session-repository.js +26 -0
  67. package/dist/infrastructure/http/http-server.d.ts +28 -0
  68. package/dist/infrastructure/http/http-server.js +146 -0
  69. package/dist/infrastructure/http/ingress-middleware.d.ts +6 -0
  70. package/dist/infrastructure/http/ingress-middleware.js +58 -0
  71. package/dist/infrastructure/logging/file-log-store.d.ts +9 -0
  72. package/dist/infrastructure/logging/file-log-store.js +173 -0
  73. package/dist/infrastructure/logging/system-log.d.ts +22 -0
  74. package/dist/infrastructure/logging/system-log.js +117 -0
  75. package/dist/mcp/server/create-mcp-server.d.ts +3 -0
  76. package/dist/mcp/server/create-mcp-server.js +16 -0
  77. package/dist/mcp/server/plugin-mcp-registrar.d.ts +31 -0
  78. package/dist/mcp/server/plugin-mcp-registrar.js +70 -0
  79. package/dist/mcp/server/request-context.d.ts +3 -0
  80. package/dist/mcp/server/request-context.js +8 -0
  81. package/dist/mcp/server/tool-control.d.ts +31 -0
  82. package/dist/mcp/server/tool-control.js +76 -0
  83. package/dist/mcp/server/tool-support.d.ts +44 -0
  84. package/dist/mcp/server/tool-support.js +72 -0
  85. package/dist/native/linux/chatroom-computer-helper +0 -0
  86. package/dist/native/macos/ChatRoomComputerHelper.app/Contents/Info.plist +14 -0
  87. package/dist/native/macos/ChatRoomComputerHelper.app/Contents/MacOS/chatroom-computer-helper +0 -0
  88. package/dist/native/macos/ChatRoomComputerHelper.app/Contents/_CodeSignature/CodeResources +115 -0
  89. package/dist/native/windows/chatroom-computer-helper.exe +0 -0
  90. package/dist/operations/operation-log.d.ts +24 -0
  91. package/dist/operations/operation-log.js +98 -0
  92. package/dist/plugins/cloud/api-client.d.ts +50 -0
  93. package/dist/plugins/cloud/api-client.js +112 -0
  94. package/dist/plugins/cloud/controller.d.ts +58 -0
  95. package/dist/plugins/cloud/controller.js +425 -0
  96. package/dist/plugins/cloud/device-proof.d.ts +9 -0
  97. package/dist/plugins/cloud/device-proof.js +17 -0
  98. package/dist/plugins/cloud/plugin.d.ts +4 -0
  99. package/dist/plugins/cloud/plugin.js +17 -0
  100. package/dist/plugins/cloud/state-store.d.ts +7 -0
  101. package/dist/plugins/cloud/state-store.js +79 -0
  102. package/dist/plugins/cloud/tunnel-client.d.ts +84 -0
  103. package/dist/plugins/cloud/tunnel-client.js +427 -0
  104. package/dist/plugins/cloud/types.d.ts +72 -0
  105. package/dist/plugins/cloud/types.js +60 -0
  106. package/dist/plugins/computer/audit.d.ts +34 -0
  107. package/dist/plugins/computer/audit.js +42 -0
  108. package/dist/plugins/computer/computer-native-backend.d.ts +11 -0
  109. package/dist/plugins/computer/computer-native-backend.js +58 -0
  110. package/dist/plugins/computer/computer-native-host.d.ts +30 -0
  111. package/dist/plugins/computer/computer-native-host.js +411 -0
  112. package/dist/plugins/computer/computer-protocol.d.ts +22 -0
  113. package/dist/plugins/computer/computer-protocol.js +74 -0
  114. package/dist/plugins/computer/computer-schemas.d.ts +285 -0
  115. package/dist/plugins/computer/computer-schemas.js +152 -0
  116. package/dist/plugins/computer/computer-service.d.ts +29 -0
  117. package/dist/plugins/computer/computer-service.js +117 -0
  118. package/dist/plugins/computer/computer-settings-repository.d.ts +8 -0
  119. package/dist/plugins/computer/computer-settings-repository.js +41 -0
  120. package/dist/plugins/computer/mcp.d.ts +3 -0
  121. package/dist/plugins/computer/mcp.js +126 -0
  122. package/dist/plugins/computer/plugin.d.ts +4 -0
  123. package/dist/plugins/computer/plugin.js +29 -0
  124. package/dist/plugins/computer/types.d.ts +174 -0
  125. package/dist/plugins/computer/types.js +1 -0
  126. package/dist/plugins/git/git-service.d.ts +30 -0
  127. package/dist/plugins/git/git-service.js +428 -0
  128. package/dist/plugins/git/plugin.d.ts +4 -0
  129. package/dist/plugins/git/plugin.js +12 -0
  130. package/dist/plugins/git/types.d.ts +32 -0
  131. package/dist/plugins/git/types.js +1 -0
  132. package/dist/plugins/plugin-manager.d.ts +11 -0
  133. package/dist/plugins/plugin-manager.js +63 -0
  134. package/dist/plugins/process/backend.d.ts +18 -0
  135. package/dist/plugins/process/backend.js +1 -0
  136. package/dist/plugins/process/head-tail-buffer.d.ts +17 -0
  137. package/dist/plugins/process/head-tail-buffer.js +49 -0
  138. package/dist/plugins/process/infrastructure/pipe-process-backend.d.ts +8 -0
  139. package/dist/plugins/process/infrastructure/pipe-process-backend.js +71 -0
  140. package/dist/plugins/process/infrastructure/pty-process-backend.d.ts +8 -0
  141. package/dist/plugins/process/infrastructure/pty-process-backend.js +51 -0
  142. package/dist/plugins/process/mcp.d.ts +3 -0
  143. package/dist/plugins/process/mcp.js +58 -0
  144. package/dist/plugins/process/plugin.d.ts +4 -0
  145. package/dist/plugins/process/plugin.js +25 -0
  146. package/dist/plugins/process/process-supervisor.d.ts +39 -0
  147. package/dist/plugins/process/process-supervisor.js +244 -0
  148. package/dist/plugins/process/types.d.ts +30 -0
  149. package/dist/plugins/process/types.js +1 -0
  150. package/dist/plugins/types.d.ts +35 -0
  151. package/dist/plugins/types.js +17 -0
  152. package/dist/plugins/web/api-types.d.ts +56 -0
  153. package/dist/plugins/web/api-types.js +1 -0
  154. package/dist/plugins/web/http/api-router.d.ts +13 -0
  155. package/dist/plugins/web/http/api-router.js +47 -0
  156. package/dist/plugins/web/http/auth-api-router.d.ts +8 -0
  157. package/dist/plugins/web/http/auth-api-router.js +123 -0
  158. package/dist/plugins/web/http/cloud-api-router.d.ts +4 -0
  159. package/dist/plugins/web/http/cloud-api-router.js +29 -0
  160. package/dist/plugins/web/http/computer-api-router.d.ts +5 -0
  161. package/dist/plugins/web/http/computer-api-router.js +69 -0
  162. package/dist/plugins/web/http/git-api-router.d.ts +3 -0
  163. package/dist/plugins/web/http/git-api-router.js +85 -0
  164. package/dist/plugins/web/http/logs-api-router.d.ts +3 -0
  165. package/dist/plugins/web/http/logs-api-router.js +49 -0
  166. package/dist/plugins/web/http/process-api-router.d.ts +3 -0
  167. package/dist/plugins/web/http/process-api-router.js +16 -0
  168. package/dist/plugins/web/http/runtime-api-router.d.ts +10 -0
  169. package/dist/plugins/web/http/runtime-api-router.js +34 -0
  170. package/dist/plugins/web/http/workspace-api-router.d.ts +3 -0
  171. package/dist/plugins/web/http/workspace-api-router.js +91 -0
  172. package/dist/plugins/web/plugin.d.ts +8 -0
  173. package/dist/plugins/web/plugin.js +17 -0
  174. package/dist/plugins/web/runtime.d.ts +18 -0
  175. package/dist/plugins/web/runtime.js +31 -0
  176. package/dist/plugins/workspace/mcp.d.ts +3 -0
  177. package/dist/plugins/workspace/mcp.js +24 -0
  178. package/dist/plugins/workspace/metadata.d.ts +6 -0
  179. package/dist/plugins/workspace/metadata.js +111 -0
  180. package/dist/plugins/workspace/plugin.d.ts +4 -0
  181. package/dist/plugins/workspace/plugin.js +22 -0
  182. package/dist/plugins/workspace/types.d.ts +23 -0
  183. package/dist/plugins/workspace/types.js +1 -0
  184. package/dist/plugins/workspace/workspace-fs.d.ts +28 -0
  185. package/dist/plugins/workspace/workspace-fs.js +200 -0
  186. package/dist/plugins/workspace/workspace-service.d.ts +15 -0
  187. package/dist/plugins/workspace/workspace-service.js +140 -0
  188. package/dist/presentation/http/http-utils.d.ts +9 -0
  189. package/dist/presentation/http/http-utils.js +89 -0
  190. package/dist/presentation/http/oauth-router.d.ts +5 -0
  191. package/dist/presentation/http/oauth-router.js +172 -0
  192. package/dist/web/assets/CloudView-CHjVbp-5.css +1 -0
  193. package/dist/web/assets/CloudView-CvX0dkgu.js +1 -0
  194. package/dist/web/assets/CodeViewer-CH1DEJge.css +1 -0
  195. package/dist/web/assets/CodeViewer.vue_vue_type_script_setup_true_lang-B5TxGkUW.js +3 -0
  196. package/dist/web/assets/ComputerView-91Z9Cefw.css +1 -0
  197. package/dist/web/assets/ComputerView-OOyEqWml.js +1 -0
  198. package/dist/web/assets/McpToolsView-BTnolyS6.css +1 -0
  199. package/dist/web/assets/McpToolsView-DjXWTKrZ.js +1 -0
  200. package/dist/web/assets/OperationsView-DqTY51Cr.js +4 -0
  201. package/dist/web/assets/ProcessesView-C13BykIa.js +4 -0
  202. package/dist/web/assets/StateChip.vue_vue_type_script_setup_true_lang-DyOhJmR6.js +1 -0
  203. package/dist/web/assets/SystemLogsView-Ci0u4BTb.js +1 -0
  204. package/dist/web/assets/VSelect-CAxEESw-.css +1 -0
  205. package/dist/web/assets/VSelect-DrRpKyYI.js +1 -0
  206. package/dist/web/assets/VSpacer-C3wAY3F0.js +1 -0
  207. package/dist/web/assets/VSpacer-DfbUir7X.css +1 -0
  208. package/dist/web/assets/VSwitch-Cos8PNSP.css +1 -0
  209. package/dist/web/assets/VSwitch-CxusR4iO.js +1 -0
  210. package/dist/web/assets/VTabs-DSWgbwhc.css +1 -0
  211. package/dist/web/assets/VTabs-qBcuuXh3.js +1 -0
  212. package/dist/web/assets/WorkspacesView-BzQ0aH74.css +1 -0
  213. package/dist/web/assets/WorkspacesView-CijIvfsp.js +2 -0
  214. package/dist/web/assets/_plugin-vue_export-helper-DlAUqK2U.js +1 -0
  215. package/dist/web/assets/chatroom-B5p-5n3y.svg +15 -0
  216. package/dist/web/assets/index-BDkarAkX.js +2 -0
  217. package/dist/web/assets/index-BegKQ3Yd.js +19 -0
  218. package/dist/web/assets/index-CkjqXRSj.css +1 -0
  219. package/dist/web/assets/syntax-highlight-B5ArnyrC.js +3 -0
  220. package/dist/web/assets/useOperationLabels-BDjzGDkT.js +1 -0
  221. package/dist/web/assets/utils-rtPwWNel.js +1 -0
  222. package/dist/web/index.html +19 -0
  223. package/package.json +125 -0
@@ -0,0 +1 @@
1
+ @layer vuetify-components;@layer vuetify-overrides{.v-tab{height:var(--v-tabs-height);border-radius:0;min-width:90px}}@layer vuetify-components{.v-slide-group--horizontal .v-tab{max-width:360px}.v-slide-group--vertical .v-tab{justify-content:start}.v-tab__slider{position:absolute;bottom:0;left:0;height:2px;width:100%;background:currentColor;pointer-events:none;opacity:0}.v-tab--selected .v-tab__slider{opacity:1}.v-slide-group--vertical .v-tab__slider{top:0;height:100%;width:2px}}@layer vuetify-final.trumps{@media(forced-colors:active){.v-tab--selected.v-btn{color:highlight}.v-tab__slider{background:highlight}}}@layer vuetify-components{.v-tabs{display:flex;height:var(--v-tabs-height)}.v-tabs--density-default{--v-tabs-height: 48px}.v-tabs--density-default.v-tabs--stacked{--v-tabs-height: 72px}.v-tabs--density-comfortable{--v-tabs-height: 44px}.v-tabs--density-comfortable.v-tabs--stacked{--v-tabs-height: 68px}.v-tabs--density-compact{--v-tabs-height: 36px}.v-tabs--density-compact.v-tabs--stacked{--v-tabs-height: 60px}.v-tabs.v-slide-group--vertical{height:auto;flex:none;--v-tabs-height: 48px}.v-tabs--align-tabs-title:not(.v-slide-group--has-affixes) .v-tab:first-child{margin-inline-start:42px}.v-tabs--fixed-tabs .v-slide-group__content>*:last-child,.v-tabs--align-tabs-center .v-slide-group__content>*:last-child{margin-inline-end:auto}.v-tabs--fixed-tabs .v-slide-group__content>*:first-child,.v-tabs--align-tabs-center .v-slide-group__content>*:first-child{margin-inline-start:auto}.v-tabs--grow{flex-grow:1}.v-tabs--grow .v-tab{flex:1 0 auto;max-width:none}.v-tabs--align-tabs-end .v-tab:first-child{margin-inline-start:auto}.v-tabs--align-tabs-end .v-tab:last-child{margin-inline-end:0}.v-tabs--inset{--v-tabs-inset-radius: 4px;--v-tabs-inset-padding: 4px;--v-tabs-slider-background: rgba(var(--v-theme-on-surface), .2);background:color-mix(in srgb,rgb(var(--v-theme-on-surface)) 6%,transparent);box-shadow:inset 0 0 0 2px rgba(var(--v-border-color),var(--v-border-opacity));border-radius:calc(var(--v-tabs-inset-radius) + var(--v-tabs-inset-padding))}.v-tabs--inset .v-tab{margin:var(--v-tabs-inset-padding);transition-property:box-shadow,transform,opacity,background,color}.v-tabs--inset .v-tab.v-tab.v-btn{border-radius:var(--v-tabs-inset-radius)}.v-tabs--inset .v-tab:focus-visible{outline:2px solid rgb(var(--v-border-color));outline-offset:2px}.v-tabs--inset .v-tab:focus-visible:after{opacity:0}.v-tabs--inset:not(.v-tabs--fixed-tabs,.v-tabs--grow){max-width:max-content}.v-tabs--inset.v-tabs--fixed-tabs .v-slide-group__content{padding-inline:var(--v-tabs-inset-padding)}.v-tabs--inset .v-tab__slider{background:var(--v-tabs-slider-background);inset:0;border-radius:var(--v-tabs-inset-radius);z-index:-1;width:auto}.v-tabs--inset.v-tabs--horizontal{height:calc(var(--v-tabs-height) + var(--v-tabs-inset-padding) * 2);--v-tabs-inset-tab-radius: calc(var(--v-tabs-outer-radius) - var(--v-tabs-inset-padding) + 4px)}.v-tabs--inset.v-tabs--horizontal .v-tab__slider{height:auto}.v-tabs--inset .v-btn__overlay{display:none}.v-tabs--inset.v-tabs--vertical .v-tab{grid-template-columns:max-content 1fr max-content}.v-tabs--inset.v-tabs--vertical .v-tab>.v-btn__content{justify-content:start}.v-tabs--inset.v-tabs--vertical .v-tab .v-tab__slider{width:auto}@media(max-width:1144.98px){.v-tabs.v-slide-group--is-overflowing.v-slide-group--horizontal:not(.v-slide-group--has-affixes) .v-tab:first-child{margin-inline-start:52px}.v-tabs.v-slide-group--is-overflowing.v-slide-group--horizontal:not(.v-slide-group--has-affixes) .v-tab:last-child{margin-inline-end:52px}}}@layer vuetify-components{.v-window{overflow:hidden}.v-window__container{display:flex;flex-direction:column;height:inherit;position:relative;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-window__controls{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;align-items:center;justify-content:space-between;padding:0 16px;pointer-events:none}.v-window__controls>*{pointer-events:auto}.v-window--show-arrows-on-hover{overflow:hidden}.v-window--show-arrows-on-hover .v-window__left{transform:translate(-200%)}:has(.v-window__controls--right).v-window--show-arrows-on-hover .v-window__left{transform:translate(200%)}.v-window--show-arrows-on-hover .v-window__right{transform:translate(200%)}:has(.v-window__controls--left).v-window--show-arrows-on-hover .v-window__right{transform:translate(-200%)}.v-window--show-arrows-on-hover:hover .v-window__left,.v-window--show-arrows-on-hover:hover .v-window__right{transform:translate(0)}.v-window--vertical-arrows .v-window__controls{flex-direction:column;justify-content:center;gap:12px}.v-window--vertical-arrows .v-window__controls--left{align-items:start}.v-window--vertical-arrows .v-window__controls--right{align-items:end}.v-window--vertical-arrows .v-window__controls .v-window__left .v-icon,.v-window--vertical-arrows .v-window__controls .v-window__right .v-icon{transform:rotate(90deg)}.v-window--crossfade>.v-window__container{isolation:isolate}.v-window--crossfade>.v-window__container>.v-window-item{mix-blend-mode:plus-lighter}}@layer vuetify-overrides{.v-window-item{transition-duration:var(--v-window-transition-duration, revert-layer)}}@layer vuetify-final.transitions{.v-window-x-transition-enter-active,.v-window-x-transition-leave-active,.v-window-x-reverse-transition-enter-active,.v-window-x-reverse-transition-leave-active,.v-window-y-transition-enter-active,.v-window-y-transition-leave-active,.v-window-y-reverse-transition-enter-active,.v-window-y-reverse-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)}@media(prefers-reduced-motion:reduce){.v-window-x-transition-enter-active,.v-window-x-transition-leave-active,.v-window-x-reverse-transition-enter-active,.v-window-x-reverse-transition-leave-active,.v-window-y-transition-enter-active,.v-window-y-transition-leave-active,.v-window-y-reverse-transition-enter-active,.v-window-y-reverse-transition-leave-active{transition-duration:0s}}.v-window-x-transition-leave-from,.v-window-x-transition-leave-to,.v-window-x-reverse-transition-leave-from,.v-window-x-reverse-transition-leave-to,.v-window-y-transition-leave-from,.v-window-y-transition-leave-to,.v-window-y-reverse-transition-leave-from,.v-window-y-reverse-transition-leave-to{position:absolute;top:0;width:100%}.v-window-x-transition-enter-from{transform:translate(100%)}.v-window-x-transition-leave-to,.v-window-x-reverse-transition-enter-from{transform:translate(-100%)}.v-window-x-reverse-transition-leave-to{transform:translate(100%)}.v-window-y-transition-enter-from{transform:translateY(100%)}.v-window-y-transition-leave-to,.v-window-y-reverse-transition-enter-from{transform:translateY(-100%)}.v-window-y-reverse-transition-leave-to{transform:translateY(100%)}.v-window-crossfade-transition-enter-active,.v-window-crossfade-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)}.v-window-crossfade-transition-leave-from,.v-window-crossfade-transition-leave-to{position:absolute;top:0;width:100%}.v-window-crossfade-transition-enter-from,.v-window-crossfade-transition-leave-to{opacity:0}}
@@ -0,0 +1 @@
1
+ import{A as R,a_ as ve,C as J,E as W,aa as fe,F as $,ae as Z,a$ as he,i as D,e as x,g as P,Q as O,R as H,L as p,am as _,y as M,b0 as me,b1 as be,z as C,b2 as z,B as ge,b3 as we,a as ye,b4 as Te,w as Se,b5 as U,b6 as Ce,ab as X,ah as L,G as xe,b7 as ee,K as te,an as ne,b8 as Ve,P as I,aY as S,b9 as ke,ax as oe,a4 as ae,ba as Be,bb as Pe,bc as Ee,bd as _e,be as Ie,bf as Re,bg as We,bh as $e,aB as Ye,bi as Ae,bj as Xe,bk as De,bl as He,bm as K,bn as Me}from"./index-BegKQ3Yd.js";const F=Symbol.for("vuetify:v-tabs"),se=$({fixed:Boolean,sliderColor:String,sliderTransition:String,sliderTransitionDuration:[String,Number],hideSlider:Boolean,inset:Boolean,direction:{type:String,default:"horizontal"},...Z(he({selectedClass:"v-tab--selected",variant:"text"}),["active","block","flat","location","position","symbol"])},"VTab"),ze=R()({name:"VTab",props:se(),setup(e,{slots:n,attrs:t}){const{textColorClasses:a,textColorStyles:i}=ve(()=>e.sliderColor),{backgroundColorClasses:o,backgroundColorStyles:u}=J(()=>e.sliderColor),c=M(),v=M(),f=C(()=>e.direction==="horizontal"),m=C(()=>c.value?.group?.isSelected.value??!1);function l(g,w){return{opacity:[0,1]}}function E(g,w){return e.direction==="vertical"?{transform:["scaleY(0)","scaleY(1)"]}:{transform:["scaleX(0)","scaleX(1)"]}}function b(g,w){const h=w.getBoundingClientRect(),y=g.getBoundingClientRect(),k=f.value?"x":"y",T=f.value?"X":"Y",s=f.value?"right":"bottom",r=f.value?"width":"height",d=h[k],B=y[k],V=d>B?h[s]-y[s]:h[k]-y[k],A=Math.sign(V)>0?f.value?"right":"bottom":Math.sign(V)<0?f.value?"left":"top":"center",N=(Math.abs(V)+(Math.sign(V)<0?h[r]:y[r]))/Math.max(h[r],y[r])||0,de=h[r]/y[r]||0,j=1.5;return{transform:[`translate${T}(${V}px) scale${T}(${de})`,`translate${T}(${V/j}px) scale${T}(${(N-1)/j+1})`,"none"],transformOrigin:Array(3).fill(A)}}function Y({value:g}){if(g){const w=c.value?.$el.parentElement?.querySelector(".v-tab--selected .v-tab__slider"),h=v.value;if(!w||!h)return;const y=getComputedStyle(w).backgroundColor,k={fade:l,grow:E,shift:b}[e.sliderTransition??"shift"]??b,T=Number(e.sliderTransitionDuration)||({fade:400,grow:350,shift:225}[e.sliderTransition??"shift"]??225);me(h,{backgroundColor:[y,y],...k(h,w)},{duration:T,easing:be})}}return W(()=>{const g=D.filterProps(e);return x(D,_({symbol:F,ref:c,class:["v-tab",e.class,m.value&&e.inset?o.value:[]],style:[e.style,m.value&&e.inset?u.value:[],{backgroundColor:m.value&&e.inset?"transparent !important":void 0}],tabindex:m.value?0:-1,role:"tab","aria-selected":String(m.value),active:!1},g,t,{block:e.fixed,maxWidth:e.fixed?300:void 0,"onGroup:selected":Y}),{...n,default:()=>P(p,null,[n.default?.()??e.text,!e.hideSlider&&P("div",{ref:v,class:H(["v-tab__slider",e.inset?o.value:a.value]),style:O([i.value,e.inset?u.value:a.value])},null)])})}),fe({},c)}}),Le=e=>{const{touchstartX:n,touchendX:t,touchstartY:a,touchendY:i}=e,o=.5,u=16;e.offsetX=t-n,e.offsetY=i-a,Math.abs(e.offsetY)<o*Math.abs(e.offsetX)&&(e.left&&t<n-u&&e.left(e),e.right&&t>n+u&&e.right(e)),Math.abs(e.offsetX)<o*Math.abs(e.offsetY)&&(e.up&&i<a-u&&e.up(e),e.down&&i>a+u&&e.down(e))};function Ge(e,n){const t=e.changedTouches[0];n.touchstartX=t.clientX,n.touchstartY=t.clientY,n.start?.({originalEvent:e,...n})}function Oe(e,n){const t=e.changedTouches[0];n.touchendX=t.clientX,n.touchendY=t.clientY,n.end?.({originalEvent:e,...n}),Le(n)}function Fe(e,n){const t=e.changedTouches[0];n.touchmoveX=t.clientX,n.touchmoveY=t.clientY,n.move?.({originalEvent:e,...n})}function Ne(e={}){const n={touchstartX:0,touchstartY:0,touchendX:0,touchendY:0,touchmoveX:0,touchmoveY:0,offsetX:0,offsetY:0,left:e.left,right:e.right,up:e.up,down:e.down,start:e.start,move:e.move,end:e.end};return{touchstart:t=>Ge(t,n),touchend:t=>Oe(t,n),touchmove:t=>Fe(t,n)}}function je(e,n){const t=n.value,a=t?.parent?e.parentElement:e,i=t?.options??{passive:!0},o=n.instance?.$.uid;if(!a||o===void 0)return;const u=Ne(n.value);a._touchHandlers=a._touchHandlers??Object.create(null),a._touchHandlers[o]=u,z(u).forEach(c=>{a.addEventListener(c,u[c],i)})}function Ue(e,n){const t=n.value?.parent?e.parentElement:e,a=n.instance?.$.uid;if(!t?._touchHandlers||a===void 0)return;const i=t._touchHandlers[a];i&&(z(i).forEach(o=>{t.removeEventListener(o,i[o])}),delete t._touchHandlers[a],z(t._touchHandlers).length||delete t._touchHandlers)}const G={mounted:je,unmounted:Ue},ie=Symbol.for("vuetify:v-window"),le=Symbol.for("vuetify:v-window-group"),re=$({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:e=>typeof e=="boolean"||e==="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,...te(),...ee(),...xe()},"VWindow"),q=R()({name:"VWindow",directives:{vTouch:G},props:re(),emits:{"update:modelValue":e=>!0},setup(e,{slots:n}){const{themeClasses:t}=ge(e),{isRtl:a}=we(),{t:i}=ye(),o=Te(e,le),u=M(),c=C(()=>a.value?!e.reverse:e.reverse),v=L(!1),f=C(()=>{if(e.crossfade)return"v-window-crossfade-transition";const s=e.direction==="vertical"?"y":"x",d=(c.value?!v.value:v.value)?"-reverse":"";return`v-window-${s}${d}-transition`}),m=L(0),l=M(void 0),E=C(()=>o.items.value.findIndex(s=>o.selected.value.includes(s.id)));Se(E,(s,r)=>{let d;const B={left:0,top:0};U&&r>=0&&(d=Ce(u.value),B.left=d?.scrollLeft,B.top=d?.scrollTop);const V=o.items.value.length,A=V-1;V<=2?v.value=s<r:s===A&&r===0?v.value=!1:s===0&&r===A?v.value=!0:v.value=s<r,X(()=>{if(!U||!d)return;d.scrollTop!==B.top&&d.scrollTo({...B,behavior:"instant"}),requestAnimationFrame(()=>{if(!d)return;d.scrollTop!==B.top&&d.scrollTo({...B,behavior:"instant"})})})},{flush:"sync"}),ke(ie,{transition:f,isReversed:v,transitionCount:m,transitionHeight:l,rootRef:u});const b=S(()=>e.continuous||E.value!==0),Y=S(()=>e.continuous||E.value!==o.items.value.length-1);function g(){b.value&&o.prev()}function w(){Y.value&&o.next()}const h=C(()=>{const s=[],r={icon:a.value?e.nextIcon:e.prevIcon,class:`v-window__${c.value?"right":"left"}`,onClick:o.prev,"aria-label":i("$vuetify.carousel.prev")};s.push(b.value?n.prev?n.prev({props:r}):x(D,r,null):P("div",null,null));const d={icon:a.value?e.prevIcon:e.nextIcon,class:`v-window__${c.value?"left":"right"}`,onClick:o.next,"aria-label":i("$vuetify.carousel.next")};return s.push(Y.value?n.next?n.next({props:d}):x(D,d,null):P("div",null,null)),s}),y=C(()=>e.touch===!1?e.touch:{...{left:()=>{c.value?g():w()},right:()=>{c.value?w():g()},start:({originalEvent:r})=>{r.stopPropagation()}},...e.touch===!0?{}:e.touch});function k(s){(e.direction==="horizontal"&&s.key==="ArrowLeft"||e.direction==="vertical"&&s.key==="ArrowUp")&&(s.preventDefault(),g(),X(()=>{b.value?T(0):T(1)})),(e.direction==="horizontal"&&s.key==="ArrowRight"||e.direction==="vertical"&&s.key==="ArrowDown")&&(s.preventDefault(),w(),X(()=>{Y.value?T(1):T(0)}))}function T(s){const r=h.value[s];if(!r)return;(Array.isArray(r)?r[0]:r).el?.focus()}return W(()=>ne(x(e.tag,{ref:u,class:H(["v-window",{"v-window--show-arrows-on-hover":e.showArrows==="hover","v-window--vertical-arrows":!!e.verticalArrows,"v-window--crossfade":!!e.crossfade},t.value,e.class]),style:O([e.style,{"--v-window-transition-duration":Ve()?null:I(e.transitionDuration,"ms")}])},{default:()=>[P("div",{class:"v-window__container",style:{height:l.value}},[n.default?.({group:o}),e.showArrows!==!1&&P("div",{class:H(["v-window__controls",{"v-window__controls--left":e.verticalArrows==="left"||e.verticalArrows===!0},{"v-window__controls--right":e.verticalArrows==="right"}]),onKeydown:k},[h.value])]),n.additional?.({group:o})]}),[[G,y.value]])),{group:o}}}),Ke=$({...Z(re(),["continuous","nextIcon","prevIcon","showArrows","touch","mandatory"])},"VTabsWindow"),qe=R()({name:"VTabsWindow",props:Ke(),emits:{"update:modelValue":e=>!0},setup(e,{slots:n}){const t=oe(F,null),a=ae(e,"modelValue"),i=C({get(){return a.value!=null||!t?a.value:t.items.value.find(o=>t.selected.value.includes(o.id))?.value},set(o){a.value=o}});return W(()=>{const o=q.filterProps(e);return x(q,_({_as:"VTabsWindow"},o,{modelValue:i.value,"onUpdate:modelValue":u=>i.value=u,class:["v-tabs-window",e.class],style:e.style,mandatory:!1,touch:!1}),n)}),{}}}),ue=$({reverseTransition:{type:[Boolean,String],default:void 0},transition:{type:[Boolean,String],default:void 0},...te(),...Ie(),..._e()},"VWindowItem"),Q=R()({name:"VWindowItem",directives:{vTouch:G},props:ue(),emits:{"group:selected":e=>!0},setup(e,{slots:n}){const t=oe(ie),a=Be(e,le),{isBooted:i}=Pe();if(!t||!a)throw new Error("[Vuetify] VWindowItem must be used inside VWindow");const o=L(!1),u=C(()=>i.value&&(t.isReversed.value?e.reverseTransition!==!1:e.transition!==!1));function c(){!o.value||!t||(o.value=!1,t.transitionCount.value>0&&(t.transitionCount.value-=1,t.transitionCount.value===0&&(t.transitionHeight.value=void 0)))}function v(){o.value||!t||(o.value=!0,t.transitionCount.value===0&&(t.transitionHeight.value=I(t.rootRef.value?.clientHeight)),t.transitionCount.value+=1)}function f(){c()}function m(b){o.value&&X(()=>{!u.value||!o.value||!t||(t.transitionHeight.value=I(b.clientHeight))})}const l=C(()=>{const b=t.isReversed.value?e.reverseTransition:e.transition;return u.value?{name:typeof b!="string"?t.transition.value:b,onBeforeEnter:v,onAfterEnter:c,onEnterCancelled:f,onBeforeLeave:v,onAfterLeave:c,onLeaveCancelled:f,onEnter:m}:!1}),{hasContent:E}=Ee(e,a.isSelected);return W(()=>x(We,{transition:l.value,disabled:!i.value},{default:()=>[ne(P("div",{class:H(["v-window-item",a.selectedClass.value,e.class]),style:O(e.style)},[E.value&&n.default?.()]),[[Re,a.isSelected.value]])]})),{groupItem:a}}}),Qe=$({...ue()},"VTabsWindowItem"),Je=R()({name:"VTabsWindowItem",props:Qe(),setup(e,{slots:n}){return W(()=>{const t=Q.filterProps(e);return x(Q,_({_as:"VTabsWindowItem"},t,{class:["v-tabs-window-item",e.class],style:e.style}),n)}),{}}});function Ze(e){return e?e.map(n=>Me(n)?n:{text:n,value:n}):[]}const pe=$({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,...He(se(),["spaced","sliderTransition","sliderTransitionDuration"]),...De({mandatory:"force",selectedClass:"v-tab-item--selected"}),...Xe(),...ee()},"VTabs"),tt=R()({name:"VTabs",props:pe(),emits:{"update:modelValue":e=>!0},setup(e,{attrs:n,slots:t}){const a=ae(e,"modelValue"),i=C(()=>Ze(e.items)),{densityClasses:o}=$e(e),{backgroundColorClasses:u,backgroundColorStyles:c}=J(()=>e.bgColor),{scopeId:v}=Ye();return Ae({VTab:{color:S(e,"color"),direction:S(e,"direction"),stacked:S(e,"stacked"),fixed:S(e,"fixedTabs"),inset:S(e,"inset"),sliderColor:S(e,"sliderColor"),sliderTransition:S(e,"sliderTransition"),sliderTransitionDuration:S(e,"sliderTransitionDuration"),hideSlider:S(e,"hideSlider")}}),W(()=>{const f=K.filterProps(e),m=!!(t.window||e.items.length>0);return P(p,null,[x(K,_(f,{modelValue:a.value,"onUpdate:modelValue":l=>a.value=l,class:["v-tabs",`v-tabs--${e.direction}`,`v-tabs--align-tabs-${e.alignTabs}`,{"v-tabs--fixed-tabs":e.fixedTabs,"v-tabs--grow":e.grow,"v-tabs--inset":e.inset,"v-tabs--stacked":e.stacked},o.value,u.value,e.class],style:[{"--v-tabs-height":I(e.height),"--v-tabs-inset-padding":e.inset?I(e.insetPadding):void 0,"--v-tabs-inset-radius":e.inset?I(e.insetRadius):void 0},c.value,e.style],role:"tablist",symbol:F},v,n),{default:t.default??(()=>i.value.map(l=>t.tab?.({item:l})??x(ze,_(l,{key:l.text,value:l.value,spaced:e.spaced}),{default:t[`tab.${l.value}`]?()=>t[`tab.${l.value}`]?.({item:l}):void 0}))),prev:t.prev,next:t.next}),m&&x(qe,_({modelValue:a.value,"onUpdate:modelValue":l=>a.value=l,key:"tabs-window"},v),{default:()=>[i.value.map(l=>t.item?.({item:l})??x(Je,{value:l.value},{default:()=>t[`item.${l.value}`]?.({item:l})})),t.window?.()]})])}),{}}});export{tt as V,ze as a,q as b,Q as c};
@@ -0,0 +1 @@
1
+ @layer vuetify-components{.v-empty-state{align-items:center;display:flex;flex-direction:column;justify-content:center;min-height:100%;padding:16px}.v-empty-state--start{align-items:flex-start}.v-empty-state--center{align-items:center}.v-empty-state--end{align-items:flex-end}.v-empty-state__media{text-align:center;width:100%}.v-empty-state__media .v-icon{color:color-mix(in srgb,rgb(var(--v-theme-on-surface)) calc(var(--v-medium-emphasis-opacity) * 100%),transparent)}.v-empty-state__headline{color:color-mix(in srgb,rgb(var(--v-theme-on-surface)) calc(var(--v-medium-emphasis-opacity) * 100%),transparent);font-size:3.5625rem;font-weight:400;line-height:1.1228070175;text-align:center;margin-bottom:8px}.v-empty-state--mobile .v-empty-state__headline{font-size:2rem}.v-empty-state__title{font-size:1.375rem;font-weight:400;line-height:1.2727272727;margin-bottom:4px;text-align:center}.v-empty-state__text{font-size:.875rem;font-weight:400;line-height:1.4285714286;padding:0 16px;text-align:center}.v-empty-state__content{padding:24px 0}.v-empty-state__actions{display:flex;gap:8px;padding:16px}.v-empty-state__action-btn.v-btn{background-color:initial;color:initial}}@layer vuetify-components{.v-textarea{--v-textarea-max-height: initial}.v-textarea .v-field{--v-textarea-control-height: var(--v-input-control-height)}.v-textarea .v-field:not(.v-field--no-label,.v-field--active) textarea::placeholder{opacity:0}.v-textarea .v-field__field{--v-input-control-height: var(--v-textarea-control-height)}.v-textarea .v-field__input{max-height:var(--v-textarea-max-height);flex:1 1 auto;outline:none;-webkit-mask-image:linear-gradient(to bottom,transparent,transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px),black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px)),linear-gradient(to right,transparent,transparent calc(100% - var(--v-textarea-scroll-bar-width, 16px)),black calc(100% - var(--v-textarea-scroll-bar-width, 16px)));mask-image:linear-gradient(to bottom,transparent,transparent calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) - 6px),black calc(var(--v-field-padding-top, 0) + var(--v-input-padding-top, 0) + 4px)),linear-gradient(to right,transparent,transparent calc(100% - var(--v-textarea-scroll-bar-width, 16px)),black calc(100% - var(--v-textarea-scroll-bar-width, 16px)))}.v-textarea .v-field__input.v-textarea__sizer{visibility:hidden;position:absolute;top:0;left:0;pointer-events:none}}@layer vuetify-overrides{.v-textarea .v-field__input.v-textarea__sizer{height:0;min-height:0}}@layer vuetify-components{.v-textarea--no-resize .v-field__input{resize:none}.v-textarea textarea{flex:1;min-width:0;height:100%;transition:.15s opacity cubic-bezier(.4,0,.2,1)}.v-textarea textarea:focus,.v-textarea textarea:active{outline:none}.v-textarea textarea:invalid{box-shadow:none}}
@@ -0,0 +1,2 @@
1
+ import{d as ue,u as Xe,a as ce,w as G,o as u,c as P,b as n,e as a,V as ve,f as pe,g as i,t as s,h as t,i as F,j as xe,k as ge,l as Ie,m as ze,n as O,p as A,q as ne,r as _,s as ye,v as ke,x as Ue,y as p,z as K,A as He,B as Ze,C as et,D as Me,E as je,F as Ee,I as tt,G as at,H as lt,J as ot,K as nt,L as E,M as it,N as Ge,O as Fe,P as _e,Q as st,R as Ce,S as rt,T as ie,U as J,W as te,X as se,Y as we,Z as $e,_ as be,$ as Se,a0 as Pe,a1 as ut,a2 as Ke,a3 as Le,a4 as ct,a5 as dt,a6 as vt,a7 as ft,a8 as Je,a9 as mt,aa as ht,ab as fe,ac as pt,ad as gt,ae as yt,af as kt,ag as _t,ah as wt,ai as $t,aj as Oe,ak as We,al as xt,am as Re,an as Ae,ao as bt,ap as Ct,aq as Vt,ar as St}from"./index-BegKQ3Yd.js";import{V as Qe}from"./VSelect-DrRpKyYI.js";import{b as Pt}from"./utils-rtPwWNel.js";import{_ as Rt,V as Tt}from"./CodeViewer.vue_vue_type_script_setup_true_lang-B5TxGkUW.js";import{V as Te}from"./VSpacer-C3wAY3F0.js";import{V as It,a as me,b as zt,c as he}from"./VTabs-qBcuuXh3.js";const Bt={key:1,class:"workspace-create-location"},Ut={key:2,class:"workspace-create-location"},Ft=ue({__name:"WorkspaceCreateDialog",props:Ue({roots:{},busy:{type:Boolean},error:{}},{modelValue:{type:Boolean,required:!0},modelModifiers:{}}),emits:Ue(["create"],["update:modelValue"]),setup(e,{emit:$}){const l=e,c=$,o=Xe(e,"modelValue"),m=p(""),h=p(""),r=ce();G(()=>[o.value,l.roots],()=>{o.value&&(l.roots.includes(h.value)||(h.value=l.roots[0]??""))},{immediate:!0,deep:!0}),G(o,k=>{k&&(m.value="")});const b=K(()=>{const k=h.value.replace(/[\\/]+$/,""),d=k.includes("\\")&&!k.includes("/")?"\\":"/";return m.value.trim()?`${k}${d}${m.value.trim()}`:k});function y(){!h.value||!m.value.trim()||c("create",h.value,m.value.trim())}return(k,d)=>(u(),P(ke,{modelValue:o.value,"onUpdate:modelValue":d[4]||(d[4]=x=>o.value=x),"max-width":"560"},{default:n(()=>[a(ve,null,{default:n(()=>[a(pe,{class:"d-flex align-center justify-space-between"},{default:n(()=>[i("span",null,s(t(r).t("$vuetify.chatroom.workspaces.createTitle")),1),a(F,{icon:"$mdiClose",variant:"text",size:"small","aria-label":t(r).t("$vuetify.chatroom.common.close"),onClick:d[0]||(d[0]=x=>o.value=!1)},null,8,["aria-label"])]),_:1}),a(xe),a(ge,{class:"workspace-create-form"},{default:n(()=>[a(Ie,{modelValue:m.value,"onUpdate:modelValue":d[1]||(d[1]=x=>m.value=x),label:t(r).t("$vuetify.chatroom.workspaces.projectName"),autofocus:"","hide-details":"auto",onKeyup:ze(y,["enter"])},null,8,["modelValue","label"]),e.roots.length>1?(u(),P(Qe,{key:0,modelValue:h.value,"onUpdate:modelValue":d[2]||(d[2]=x=>h.value=x),items:e.roots,label:t(r).t("$vuetify.chatroom.workspaces.createLocation"),"hide-details":"auto"},null,8,["modelValue","items","label"])):h.value?(u(),O("div",Bt,[i("span",null,s(t(r).t("$vuetify.chatroom.workspaces.createLocation")),1),i("code",null,s(h.value),1)])):A("",!0),h.value?(u(),O("div",Ut,[i("span",null,s(t(r).t("$vuetify.chatroom.workspaces.projectPath")),1),i("code",null,s(b.value),1)])):A("",!0),e.error?(u(),P(ne,{key:3,type:"error",variant:"tonal",density:"compact"},{default:n(()=>[_(s(e.error),1)]),_:1})):A("",!0)]),_:1}),a(xe),a(ye,{class:"justify-end"},{default:n(()=>[a(F,{variant:"text",onClick:d[3]||(d[3]=x=>o.value=!1)},{default:n(()=>[_(s(t(r).t("$vuetify.chatroom.workspaces.cancel")),1)]),_:1}),a(F,{color:"primary",variant:"flat",loading:e.busy,disabled:!h.value||!m.value.trim(),onClick:y},{default:n(()=>[_(s(t(r).t("$vuetify.chatroom.workspaces.create")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),_:1},8,["modelValue"]))}}),Lt=Ee({actionText:String,bgColor:String,color:String,icon:tt,image:String,justify:{type:String,default:"center"},headline:String,title:String,text:String,textWidth:{type:[Number,String],default:500},href:String,to:String,...nt(),...ot(),...lt({size:void 0}),...at()},"VEmptyState"),re=He()({name:"VEmptyState",props:Lt(),emits:{"click:action":e=>!0},setup(e,{emit:$,slots:l}){const{themeClasses:c}=Ze(e),{backgroundColorClasses:o,backgroundColorStyles:m}=et(()=>e.bgColor),{dimensionStyles:h}=rt(e),{displayClasses:r}=Me();function b(y){$("click:action",y)}return je(()=>{const y=!!(l.actions||e.actionText),k=!!(l.headline||e.headline),d=!!(l.title||e.title),x=!!(l.text||e.text),R=!!(l.media||e.image||e.icon),g=e.size||(e.image?200:96);return i("div",{class:Ce(["v-empty-state",{[`v-empty-state--${e.justify}`]:!0},c.value,o.value,r.value,e.class]),style:st([m.value,h.value,e.style])},[R&&i("div",{key:"media",class:"v-empty-state__media"},[l.media?a(Fe,{key:"media-defaults",defaults:{VImg:{src:e.image,height:g},VIcon:{size:g,icon:e.icon}}},{default:()=>[l.media()]}):i(E,null,[e.image?a(it,{key:"image",src:e.image,height:g},null):e.icon?a(Ge,{key:"icon",color:e.color,size:g,icon:e.icon},null):void 0])]),k&&i("div",{key:"headline",class:"v-empty-state__headline"},[l.headline?.()??e.headline]),d&&i("div",{key:"title",class:"v-empty-state__title"},[l.title?.()??e.title]),x&&i("div",{key:"text",class:"v-empty-state__text",style:{maxWidth:_e(e.textWidth)}},[l.text?.()??e.text]),l.default&&i("div",{key:"content",class:"v-empty-state__content"},[l.default()]),y&&i("div",{key:"actions",class:"v-empty-state__actions"},[a(Fe,{defaults:{VBtn:{class:"v-empty-state__action-btn",color:e.color??"surface-variant",href:e.href,text:e.actionText,to:e.to}}},{default:()=>[l.actions?.({props:{onClick:b}})??a(F,{onClick:b},null)]})])])}),{}}}),Ot={class:"workspace-files-pane"},Wt={class:"workspace-files-layout"},At={class:"workspace-file-browser"},Dt={class:"workspace-file-breadcrumbs"},Nt={class:"workspace-breadcrumb-items"},qt={key:0,class:"workspace-breadcrumb-separator"},Ht=["onClick"],Mt={class:"workspace-file-preview"},jt={class:"workspace-image-header mono"},Et={class:"workspace-image-stage"},Gt=["src","alt"],Kt=ue({__name:"WorkspaceFilesPane",props:{root:{}},setup(e){const $=e,l=p([]),c=p("."),o=p(null),m=p(!1),h=p(""),r=ce(),b=ie(),y=ie(),k=K(()=>[...l.value].sort((v,C)=>v.type==="directory"&&C.type!=="directory"?-1:v.type!=="directory"&&C.type==="directory"?1:B(v.path).localeCompare(B(C.path)))),d=K(()=>{const v=c.value==="."?[]:c.value.split("/");return[{title:"/",path:"."},...v.map((C,I)=>({title:C,path:v.slice(0,I+1).join("/")}))]}),x=K(()=>{if(c.value===".")return null;const v=c.value.split("/");return v.pop(),v.join("/")||"."});G(()=>$.root,()=>{b.invalidate(),y.invalidate(),c.value=".",o.value=null,R()},{immediate:!0});async function R(){const v=b.begin(),C=$.root,I=c.value;m.value=!0,h.value="";try{const M=await J(`/workspace/files?root=${encodeURIComponent(C)}&path=${encodeURIComponent(I)}`,{signal:v.signal});if(!b.isCurrent(v)||$.root!==C||c.value!==I)return;l.value=M}catch(M){b.isCurrent(v)&&(h.value=te(M))}finally{b.isCurrent(v)&&(m.value=!1)}}async function g(v){c.value=v||".",o.value=null,await R()}async function V(v){const C=y.begin(),I=$.root;if(v.type==="directory"){await g(v.path);return}if(v.type!=="file"){o.value={kind:"unsupported",path:v.path};return}if(D(v.path)){o.value={kind:"image",path:v.path,url:`/api/workspace/file/image?root=${encodeURIComponent(I)}&path=${encodeURIComponent(v.path)}`};return}if(!W(v.path)){o.value={kind:"unsupported",path:v.path};return}h.value="";try{const M=await J(`/workspace/file?root=${encodeURIComponent(I)}&path=${encodeURIComponent(v.path)}`,{signal:C.signal});if(!y.isCurrent(C)||$.root!==I)return;o.value={kind:"text",path:v.path,content:M.content}}catch(M){y.isCurrent(C)&&(h.value=te(M))}}function B(v){return v.split("/").pop()??v}function L(v){return v==="file"?r.t("$vuetify.chatroom.files.file"):v==="directory"?r.t("$vuetify.chatroom.files.directory"):v==="symlink"?r.t("$vuetify.chatroom.files.symlink"):v}function D(v){return/\.(png|jpe?g|gif|webp|avif|bmp|ico)$/i.test(v)}function W(v){const C=v.split("/").pop()?.toLowerCase()??"";return["dockerfile","makefile","license","readme",".gitignore",".gitattributes",".editorconfig",".env"].includes(C)?!0:/\.(txt|md|markdown|json|jsonc|ya?ml|toml|ini|conf|config|xml|html?|css|scss|less|vue|[cm]?[jt]sx?|py|rs|go|java|kt|kts|c|cc|cpp|cxx|h|hpp|sh|bash|zsh|fish|ps1|sql|graphql|gql|proto|diff|patch|csv|tsv|log)$/i.test(v)}return(v,C)=>(u(),O("div",Ot,[h.value?(u(),P(ne,{key:0,type:"error",variant:"tonal",density:"compact"},{default:n(()=>[_(s(h.value),1)]),_:1})):A("",!0),i("div",Wt,[i("div",At,[i("div",Dt,[a(F,{icon:"$mdiArrowUp",size:"x-small",variant:"text",disabled:x.value===null,"aria-label":t(r).t("$vuetify.chatroom.files.parentDirectory"),onClick:C[0]||(C[0]=I=>x.value&&g(x.value))},null,8,["disabled","aria-label"]),i("div",Nt,[(u(!0),O(E,null,se(d.value,(I,M)=>(u(),O(E,{key:I.path},[M?(u(),O("span",qt,"/")):A("",!0),i("button",{type:"button",class:Ce(["workspace-breadcrumb",{active:M===d.value.length-1}]),onClick:Y=>g(I.path)},s(I.title),11,Ht)],64))),128))]),a(F,{icon:"$mdiRefresh",size:"x-small",variant:"text",loading:m.value,"aria-label":t(r).t("$vuetify.chatroom.files.refresh"),onClick:R},null,8,["loading","aria-label"])]),a(we,{density:"compact",border:"",rounded:"lg",class:"workspace-file-list"},{default:n(()=>[(u(!0),O(E,null,se(k.value.slice(0,500),I=>(u(),P($e,{key:I.path,active:o.value?.path===I.path,title:B(I.path),subtitle:I.type==="file"?`${L(I.type)} · ${t(Pt)(I.size)}`:L(I.type),"prepend-icon":I.type==="directory"?"$mdiFolderOutline":I.type==="symlink"?"$mdiLinkVariant":"$mdiFileOutline","append-icon":I.type==="directory"?"$mdiChevronRight":void 0,onClick:M=>V(I)},null,8,["active","title","subtitle","prepend-icon","append-icon","onClick"]))),128))]),_:1})]),i("div",Mt,[o.value?.kind==="text"?(u(),P(Rt,{key:0,text:o.value.content,filename:o.value.path},null,8,["text","filename"])):o.value?.kind==="image"?(u(),P(Tt,{key:1,border:"",rounded:"lg",class:"workspace-image-preview"},{default:n(()=>[i("div",jt,s(o.value.path),1),a(xe),i("div",Et,[i("img",{src:o.value.url,alt:o.value.path},null,8,Gt)])]),_:1})):o.value?.kind==="unsupported"?(u(),P(re,{key:2,icon:"$mdiFileQuestionOutline",title:t(r).t("$vuetify.chatroom.files.previewUnavailable"),text:o.value.path},null,8,["title","text"])):(u(),P(re,{key:3,icon:"$mdiFileEyeOutline",title:t(r).t("$vuetify.chatroom.files.select"),text:t(r).t("$vuetify.chatroom.files.readOnly")},null,8,["title","text"]))])])]))}});function Jt(e){const $=p(null),l=p([]),c=p([]),o=p(null),m=p(null),h=p(!1),r=p(!1),b=p(null),y=p("");let k=0;const d=ie(),x=ie(),R=()=>typeof e=="function"?e():String(e.value??""),g=K(()=>$.value?.changes??[]),V=K(()=>g.value.find(f=>f.path===o.value)??null),B=K(()=>g.value.filter(De).map(f=>f.path)),L=K(()=>g.value.filter(Ne).map(f=>f.path));G(e,()=>{k+=1,d.invalidate(),x.invalidate(),b.value=null,o.value=null,m.value=null,D()},{immediate:!0}),G(o,()=>{v()});async function D(){const f=++k,T=d.begin(),z=R();h.value=!0,y.value="";try{const q=await J(`/git/status?root=${encodeURIComponent(z)}`,{signal:T.signal});if(f!==k||!d.isCurrent(T)||R()!==z)return;if($.value=q,!q){l.value=[],c.value=[],o.value=null,m.value=null;return}if(await W(f,z,T.signal),f!==k||!d.isCurrent(T)||R()!==z)return;N(),await v()}catch(q){f===k&&d.isCurrent(T)&&R()===z&&(y.value=te(q))}finally{f===k&&d.isCurrent(T)&&R()===z&&(h.value=!1)}}async function W(f,T,z){const q=encodeURIComponent(T),ee=z?{signal:z}:{},[H,Q]=await Promise.all([J(`/git/branches?root=${q}`,ee),J(`/git/log?root=${q}&limit=20`,ee)]);f!==k||R()!==T||(l.value=H,c.value=Q)}async function v(){const f=o.value,T=R();if(!f||!$.value?.head){x.invalidate(),r.value=!1,m.value=null;return}const z=x.begin();r.value=!0;try{const q=await J(`/git/diff?root=${encodeURIComponent(T)}&path=${encodeURIComponent(f)}`,{signal:z.signal});x.isCurrent(z)&&R()===T&&o.value===f&&(m.value=q)}catch(q){x.isCurrent(z)&&R()===T&&(m.value=null,y.value=te(q))}finally{x.isCurrent(z)&&R()===T&&(r.value=!1)}}async function C(f,T,z,q,ee=6e4){if(b.value)return!1;const H=R(),Q=++k;d.invalidate(),x.invalidate(),h.value=!1,r.value=!1,b.value=f,y.value="";try{const oe=await J(T,{method:z,body:JSON.stringify({root:H,...q}),timeoutMs:ee});return Q!==k||R()!==H||($.value=oe,N(),await W(Q,H),Q!==k||R()!==H)?!1:(await v(),!0)}catch(oe){return Q===k&&R()===H&&(y.value=te(oe)),!1}finally{Q===k&&R()===H&&(b.value=null)}}async function I(f){return f.length?C("stage","/git/stage","POST",{paths:f}):!1}async function M(f){return f.length?C("unstage","/git/unstage","POST",{paths:f}):!1}function Y(f){return C("restore","/git/restore","POST",{path:f})}function X(f){return C("commit","/git/commit","POST",{message:f})}function ae(f){return C("branch","/git/branches","POST",{name:f})}function Z(f){return C("branch","/git/switch","POST",{name:f})}function le(f){return C("branch","/git/branches","DELETE",{name:f})}function U(f){return C(f,`/git/${f}`,"POST",{},5*6e4)}function N(){g.value.some(f=>f.path===o.value)||(o.value=g.value[0]?.path??null)}return{status:$,branches:l,commits:c,selectedPath:o,diff:m,loading:h,diffLoading:r,busy:b,error:y,changes:g,selectedChange:V,stagedPaths:B,unstagedPaths:L,load:D,stage:I,unstage:M,restore:Y,commit:X,createBranch:ae,switchBranch:Z,deleteBranch:le,remote:U,isStaged:De,isUnstaged:Ne,statusCode:Qt}}function De(e){return e.indexStatus!==" "&&e.indexStatus!=="?"}function Ne(e){return e.indexStatus==="?"||e.workingTreeStatus!==" "&&e.workingTreeStatus!=="?"}function Qt(e){return`${e.indexStatus}${e.workingTreeStatus}`.replaceAll(" ","·")}const Yt={class:"git-diff-viewer"},Xt={class:"git-diff-content"},Zt={class:"git-diff-line-number"},ea={class:"git-diff-line-number"},ta={class:"git-diff-line"},aa=ue({__name:"GitDiffViewer",props:{text:{}},setup(e){const $=e,l=K(()=>{const c=[];let o=0,m=0,h=!1;for(const r of $.text.split(`
2
+ `)){const b=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(r);if(b){o=Number(b[1]),m=Number(b[2]),h=!0,c.push({text:r,kind:"hunk",oldLine:null,newLine:null});continue}if(!h||r.startsWith("diff --git ")||r.startsWith("index ")||r.startsWith("--- ")||r.startsWith("+++ ")||r.startsWith("new file mode ")||r.startsWith("deleted file mode ")||r.startsWith("Binary files ")||r.startsWith("GIT binary patch")||r.startsWith("\\ No newline")){c.push({text:r,kind:"meta",oldLine:null,newLine:null});continue}r.startsWith("+")?(c.push({text:r,kind:"add",oldLine:null,newLine:m}),m+=1):r.startsWith("-")?(c.push({text:r,kind:"delete",oldLine:o,newLine:null}),o+=1):(c.push({text:r,kind:"context",oldLine:o,newLine:m}),o+=1,m+=1)}return c});return(c,o)=>(u(),O("div",Yt,[i("div",Xt,[(u(!0),O(E,null,se(l.value,(m,h)=>(u(),O("div",{key:h,class:Ce(["git-diff-row",`git-diff-row-${m.kind}`])},[i("span",Zt,s(m.oldLine??""),1),i("span",ea,s(m.newLine??""),1),i("code",ta,s(m.text),1)],2))),128))])]))}}),la={class:"workspace-git-pane"},oa={class:"git-toolbar"},na={class:"git-facts"},ia={class:"mono"},sa={class:"mono"},ra={class:"mono"},ua={key:0},ca={class:"git-toolbar-actions"},da={class:"git-section-header"},va={class:"git-section-actions"},fa={key:0,class:"git-workbench"},ma={class:"git-change-code mono"},ha={class:"git-diff-pane"},pa={class:"git-file-toolbar"},ga={class:"mono git-selected-path"},ya={class:"git-file-actions"},ka={class:"git-commit-bar"},_a={class:"git-history"},wa={class:"git-section-header"},$a={class:"git-commit-hash mono"},xa={class:"git-new-branch"},ba={class:"mono mt-2"},Ca={class:"mono mt-2"},Va=ue({__name:"WorkspaceGitPane",props:{root:{}},setup(e){const $=e,l=ce(),c=Jt(()=>$.root),{status:o,branches:m,commits:h,selectedPath:r,diff:b,loading:y,diffLoading:k,busy:d,error:x,changes:R,selectedChange:g,stagedPaths:V,unstagedPaths:B,load:L,stage:D,unstage:W,restore:v,commit:C,createBranch:I,switchBranch:M,deleteBranch:Y,remote:X,isStaged:ae,isUnstaged:Z,statusCode:le}=c,U=p(""),N=p(!1),f=p(""),T=p(null),z=p(null);async function q(){const j=T.value;j&&await v(j.path)&&(T.value=null)}async function ee(){const j=U.value.trim();j&&await C(j)&&(U.value="")}async function H(){const j=f.value.trim();j&&await I(j)&&(f.value="",N.value=!1)}async function Q(j){j.current||await M(j.name)&&(N.value=!1)}async function oe(){const j=z.value;j&&await Y(j.name)&&(z.value=null)}return(j,S)=>(u(),O("div",la,[t(y)?(u(),P(be,{key:0,indeterminate:""})):A("",!0),t(x)?(u(),P(ne,{key:1,type:"error",variant:"tonal",density:"compact"},{default:n(()=>[_(s(t(x)),1)]),_:1})):A("",!0),!t(y)&&!t(o)?(u(),P(re,{key:2,icon:"$mdiSourceBranch",title:t(l).t("$vuetify.chatroom.git.notRepository")},null,8,["title"])):t(o)?(u(),O(E,{key:3},[i("div",oa,[i("div",na,[i("div",null,[i("span",null,s(t(l).t("$vuetify.chatroom.git.branch")),1),i("strong",ia,s(t(o).branch??"—"),1)]),i("div",null,[S[15]||(S[15]=i("span",null,"HEAD",-1)),i("strong",sa,s(t(o).head?.slice(0,12)??"—"),1)]),i("div",null,[i("span",null,s(t(l).t("$vuetify.chatroom.git.upstream")),1),i("strong",ra,s(t(o).upstream??"—"),1)]),t(o).upstream?(u(),O("div",ua,[i("span",null,s(t(l).t("$vuetify.chatroom.git.sync")),1),i("strong",null,"↑ "+s(t(o).ahead)+" · ↓ "+s(t(o).behind),1)])):A("",!0)]),i("div",ca,[a(F,{icon:"$mdiRefresh",size:"small",variant:"text",loading:t(y),"aria-label":t(l).t("$vuetify.chatroom.git.refresh"),onClick:t(L)},null,8,["loading","aria-label","onClick"]),a(F,{"prepend-icon":"$mdiSourceBranch",size:"small",variant:"tonal",onClick:S[0]||(S[0]=w=>N.value=!0)},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.branches")),1)]),_:1}),a(F,{size:"small",variant:"text",loading:t(d)==="fetch",onClick:S[1]||(S[1]=w=>t(X)("fetch"))},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.fetch")),1)]),_:1},8,["loading"]),a(F,{size:"small",variant:"text",disabled:!t(o).upstream,loading:t(d)==="pull",onClick:S[2]||(S[2]=w=>t(X)("pull"))},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.pull")),1)]),_:1},8,["disabled","loading"]),a(F,{size:"small",variant:"text",loading:t(d)==="push",onClick:S[3]||(S[3]=w=>t(X)("push"))},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.push")),1)]),_:1},8,["loading"])])]),i("div",da,[i("div",null,[i("strong",null,s(t(l).t("$vuetify.chatroom.git.changes")),1),i("span",null,s(t(R).length),1)]),i("div",va,[a(F,{size:"small",variant:"text",disabled:!t(B).length,loading:t(d)==="stage",onClick:S[4]||(S[4]=w=>t(D)(t(B)))},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.stageAll")),1)]),_:1},8,["disabled","loading"]),a(F,{size:"small",variant:"text",disabled:!t(V).length,loading:t(d)==="unstage",onClick:S[5]||(S[5]=w=>t(W)(t(V)))},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.unstageAll")),1)]),_:1},8,["disabled","loading"])])]),t(R).length?(u(),O("div",fa,[a(we,{density:"compact",class:"git-change-list"},{default:n(()=>[(u(!0),O(E,null,se(t(R),w=>(u(),P($e,{key:w.path,active:t(r)===w.path,onClick:de=>r.value=w.path},{prepend:n(()=>[i("span",ma,s(t(le)(w)),1)]),default:n(()=>[a(Se,{class:"mono"},{default:n(()=>[_(s(w.path),1)]),_:2},1024),w.originalPath?(u(),P(Pe,{key:0,class:"mono"},{default:n(()=>[_(s(w.originalPath)+" → "+s(w.path),1)]),_:2},1024)):A("",!0)]),_:2},1032,["active","onClick"]))),128))]),_:1}),i("div",ha,[t(g)?(u(),O(E,{key:0},[i("div",pa,[i("div",ga,s(t(g).path),1),i("div",ya,[t(Z)(t(g))?(u(),P(F,{key:0,size:"small",variant:"text",loading:t(d)==="stage",onClick:S[6]||(S[6]=w=>t(D)([t(g).path]))},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.stage")),1)]),_:1},8,["loading"])):A("",!0),t(ae)(t(g))?(u(),P(F,{key:1,size:"small",variant:"text",loading:t(d)==="unstage",onClick:S[7]||(S[7]=w=>t(W)([t(g).path]))},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.unstage")),1)]),_:1},8,["loading"])):A("",!0),a(F,{color:"error",size:"small",variant:"text",disabled:!t(o).head&&t(g).kind!=="untracked",onClick:S[8]||(S[8]=w=>T.value=t(g))},{default:n(()=>[_(s(t(g).kind==="untracked"?t(l).t("$vuetify.chatroom.git.deleteFile"):t(l).t("$vuetify.chatroom.git.restore")),1)]),_:1},8,["disabled"])])]),t(k)?(u(),P(be,{key:0,indeterminate:""})):A("",!0),t(b)?.truncated?(u(),P(ne,{key:1,type:"info",variant:"tonal",density:"compact"},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.diffTruncated")),1)]),_:1})):A("",!0),t(b)?.diff?(u(),P(aa,{key:2,text:t(b).diff},null,8,["text"])):t(k)?A("",!0):(u(),P(re,{key:3,icon:"$mdiFileCompare",title:t(o).head?t(l).t("$vuetify.chatroom.git.noDiff"):t(l).t("$vuetify.chatroom.git.noHead")},null,8,["title"]))],64)):A("",!0)])])):(u(),P(re,{key:1,icon:"$mdiCheckCircleOutline",title:t(l).t("$vuetify.chatroom.git.clean")},null,8,["title"])),i("div",ka,[a(Ie,{modelValue:U.value,"onUpdate:modelValue":S[9]||(S[9]=w=>U.value=w),label:t(l).t("$vuetify.chatroom.git.commitMessage"),density:"compact",variant:"outlined","hide-details":"",disabled:!t(V).length,onKeyup:ze(ee,["enter"])},null,8,["modelValue","label","disabled"]),a(F,{color:"primary",variant:"flat",disabled:!t(V).length||!U.value.trim(),loading:t(d)==="commit",onClick:ee},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.commit")),1)]),_:1},8,["disabled","loading"])]),i("div",_a,[i("div",wa,[i("strong",null,s(t(l).t("$vuetify.chatroom.git.recentCommits")),1)]),t(h).length?(u(),P(we,{key:0,density:"compact"},{default:n(()=>[(u(!0),O(E,null,se(t(h),w=>(u(),P($e,{key:w.hash},{prepend:n(()=>[i("span",$a,s(w.shortHash),1)]),default:n(()=>[a(Se,null,{default:n(()=>[_(s(w.subject),1)]),_:2},1024),a(Pe,null,{default:n(()=>[_(s(w.author)+" · "+s(new Date(w.date).toLocaleString(t(ut)(t(l).current.value))),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})):A("",!0)])],64)):A("",!0),a(ke,{modelValue:N.value,"onUpdate:modelValue":S[12]||(S[12]=w=>N.value=w),"max-width":"560"},{default:n(()=>[a(ve,null,{default:n(()=>[a(pe,null,{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.branches")),1)]),_:1}),a(ge,null,{default:n(()=>[i("div",xa,[a(Ie,{modelValue:f.value,"onUpdate:modelValue":S[10]||(S[10]=w=>f.value=w),label:t(l).t("$vuetify.chatroom.git.newBranch"),density:"compact",variant:"outlined","hide-details":"",onKeyup:ze(H,["enter"])},null,8,["modelValue","label"]),a(F,{color:"primary",variant:"flat",disabled:!f.value.trim(),loading:t(d)==="branch",onClick:H},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.create")),1)]),_:1},8,["disabled","loading"])]),a(we,{class:"mt-3",density:"compact",border:"",rounded:"lg"},{default:n(()=>[(u(!0),O(E,null,se(t(m),w=>(u(),P($e,{key:w.name},{append:n(()=>[w.current?(u(),P(Ke,{key:0,size:"x-small",variant:"tonal"},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.current")),1)]),_:1})):(u(),O(E,{key:1},[a(F,{size:"x-small",variant:"text",onClick:de=>Q(w)},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.switch")),1)]),_:1},8,["onClick"]),a(F,{icon:"$mdiDeleteOutline",size:"x-small",color:"error",variant:"text","aria-label":t(l).t("$vuetify.chatroom.git.deleteBranch"),onClick:de=>z.value=w},null,8,["aria-label","onClick"])],64))]),default:n(()=>[a(Se,{class:"mono"},{default:n(()=>[_(s(w.name),1)]),_:2},1024),w.upstream?(u(),P(Pe,{key:0,class:"mono"},{default:n(()=>[_(s(w.upstream),1)]),_:2},1024)):A("",!0)]),_:2},1024))),128))]),_:1})]),_:1}),a(ye,null,{default:n(()=>[a(Te),a(F,{variant:"text",onClick:S[11]||(S[11]=w=>N.value=!1)},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.common.close")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),a(ke,{"model-value":T.value!==null,"max-width":"500"},{default:n(()=>[a(ve,null,{default:n(()=>[a(pe,null,{default:n(()=>[_(s(T.value?.kind==="untracked"?t(l).t("$vuetify.chatroom.git.deleteTitle"):t(l).t("$vuetify.chatroom.git.restoreTitle")),1)]),_:1}),a(ge,null,{default:n(()=>[_(s(T.value?.kind==="untracked"?t(l).t("$vuetify.chatroom.git.deleteDescription"):t(l).t("$vuetify.chatroom.git.restoreDescription"))+" ",1),i("div",ba,s(T.value?.path),1)]),_:1}),a(ye,null,{default:n(()=>[a(Te),a(F,{variant:"text",onClick:S[13]||(S[13]=w=>T.value=null)},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.common.cancel")),1)]),_:1}),a(F,{color:"error",variant:"flat",loading:t(d)==="restore",onClick:q},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.confirm")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model-value"]),a(ke,{"model-value":z.value!==null,"max-width":"460"},{default:n(()=>[a(ve,null,{default:n(()=>[a(pe,null,{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.deleteBranchTitle")),1)]),_:1}),a(ge,null,{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.deleteBranchDescription"))+" ",1),i("div",Ca,s(z.value?.name),1)]),_:1}),a(ye,null,{default:n(()=>[a(Te),a(F,{variant:"text",onClick:S[14]||(S[14]=w=>z.value=null)},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.common.cancel")),1)]),_:1}),a(F,{color:"error",variant:"flat",loading:t(d)==="branch",onClick:oe},{default:n(()=>[_(s(t(l).t("$vuetify.chatroom.git.confirm")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model-value"])]))}}),Sa=Ee({autoGrow:Boolean,autofocus:Boolean,counter:[Boolean,Number,String],counterValue:Function,prefix:String,placeholder:String,persistentPlaceholder:Boolean,persistentCounter:Boolean,noResize:Boolean,rows:{type:[Number,String],default:5,validator:e=>!isNaN(parseFloat(e))},maxHeight:{type:[Number,String],validator:e=>!isNaN(parseFloat(e))},maxRows:{type:[Number,String],validator:e=>!isNaN(parseFloat(e))},suffix:String,modelModifiers:Object,..._t(),...yt(kt(),["direction"]),...gt()},"VTextarea"),qe=He()({name:"VTextarea",directives:{vIntersect:Le},inheritAttrs:!1,props:Sa(),emits:{"click:control":e=>!0,"mousedown:control":e=>!0,"update:focused":e=>!0,"update:modelValue":e=>!0,"update:rows":e=>!0},setup(e,{attrs:$,emit:l,slots:c}){const o=ct(e,"modelValue"),{isFocused:m,focus:h,blur:r}=dt(e),{onIntersect:b}=Vt(e),y=K(()=>typeof e.counterValue=="function"?e.counterValue(o.value):(o.value||"").toString().length),k=K(()=>{if($.maxlength)return $.maxlength;if(!(!e.counter||typeof e.counter!="number"&&typeof e.counter!="string"))return e.counter}),d=p(),x=p(),R=wt(""),g=p(),V=p(0),{platform:B}=Me(),L=vt(e),D=K(()=>e.persistentPlaceholder||m.value||e.active);function W(){L.isSuppressing.value&&L.update(),g.value!==St()&&g.value?.focus(),m.value||h()}function v(U){W(),l("click:control",U)}function C(U){l("mousedown:control",U)}function I(U){U.stopPropagation(),W(),fe(()=>{o.value="",Ct(e["onClick:clear"],U)})}function M(U){const N=U.target;if(!e.modelModifiers?.trim){o.value=N.value;return}const f=N.value,T=N.selectionStart,z=N.selectionEnd;o.value=f,fe(()=>{let q=0;f.trimStart().length===N.value.length&&(q=f.length-N.value.length),T!=null&&(N.selectionStart=T-q),z!=null&&(N.selectionEnd=z-q)})}const Y=p(),X=p(Number(e.rows)),ae=K(()=>["plain","underlined"].includes(e.variant));ft(()=>{e.autoGrow||(X.value=Number(e.rows))});function Z(){fe(()=>{if(!g.value)return;if(B.value.firefox){V.value=12;return}const{offsetWidth:U,clientWidth:N}=g.value;V.value=Math.max(0,U-N)}),e.autoGrow&&fe(()=>{if(!Y.value||!x.value)return;const U=getComputedStyle(Y.value),N=getComputedStyle(x.value.$el),f=parseFloat(U.getPropertyValue("--v-field-padding-top"))+parseFloat(U.getPropertyValue("--v-input-padding-top"))+parseFloat(U.getPropertyValue("--v-field-padding-bottom")),T=Y.value.scrollHeight,z=parseFloat(U.lineHeight),q=Math.max(parseFloat(e.rows)*z+f,parseFloat(N.getPropertyValue("--v-input-control-height"))),ee=e.maxHeight?parseFloat(e.maxHeight):parseFloat(e.maxRows)*z+f||1/0,H=pt(T??0,q,ee);X.value=Math.floor((H-f)/z),R.value=_e(H)})}Je(Z),G(o,Z),G(()=>e.rows,Z),G(()=>e.maxHeight,Z),G(()=>e.maxRows,Z),G(()=>e.density,Z),G(X,U=>{l("update:rows",U)});let le;return G(Y,U=>{U?(le=new ResizeObserver(Z),le.observe(Y.value)):le?.disconnect()}),mt(()=>{le?.disconnect()}),je(()=>{const U=!!(c.counter||e.counter||e.counterValue),N=e.hideDetails!==!0&&!!(c.details||U&&(e.persistentCounter||e.hideDetails===!1||m.value)),[f,T]=$t($),{modelValue:z,...q}=Oe.filterProps(e),ee={...We.filterProps(e),"onClick:clear":I};return a(Oe,Re({ref:d,modelValue:o.value,"onUpdate:modelValue":H=>o.value=H,class:["v-textarea v-text-field",{"v-textarea--prefixed":e.prefix,"v-textarea--suffixed":e.suffix,"v-text-field--prefixed":e.prefix,"v-text-field--suffixed":e.suffix,"v-textarea--auto-grow":e.autoGrow,"v-textarea--no-resize":e.noResize||e.autoGrow,"v-input--plain-underlined":ae.value},e.class],style:[{"--v-textarea-max-height":e.maxHeight?_e(e.maxHeight):void 0,"--v-textarea-scroll-bar-width":_e(V.value)},e.style]},f,q,{centerAffix:X.value===1&&!ae.value,focused:m.value,indentDetails:e.indentDetails??!ae.value}),{...c,default:({id:H,isDisabled:Q,isDirty:oe,isReadonly:j,isValid:S,hasDetails:w})=>a(We,Re({ref:x,style:{"--v-textarea-control-height":R.value},onClick:v,onMousedown:C,"onClick:prependInner":e["onClick:prependInner"],"onClick:appendInner":e["onClick:appendInner"]},ee,{id:H.value,active:D.value||oe.value,labelId:`${H.value}-label`,centerAffix:X.value===1&&!ae.value,dirty:oe.value||e.dirty,disabled:Q.value,focused:m.value,details:w.value,error:S.value===!1}),{...c,default:({props:{class:de,...Be},controlRef:Ye})=>i(E,null,[e.prefix&&i("span",{class:"v-text-field__prefix"},[e.prefix]),Ae(i("textarea",Re({ref:Ve=>g.value=Ye.value=Ve,class:de,value:o.value,onInput:M,autofocus:e.autofocus,readonly:j.value,disabled:Q.value,placeholder:e.placeholder,rows:e.rows,name:L.fieldName.value,autocomplete:L.fieldAutocomplete.value,onFocus:W,onBlur:r,"aria-labelledby":`${H.value}-label`},Be,T),null),[[Le,{handler:b},null,{once:!0}]]),e.autoGrow&&Ae(i("textarea",{class:Ce([de,"v-textarea__sizer"]),id:`${Be.id}-sizer`,"onUpdate:modelValue":Ve=>o.value=Ve,ref:Y,readonly:!0,"aria-hidden":"true"},null),[[bt,o.value]]),e.suffix&&i("span",{class:"v-text-field__suffix"},[e.suffix])])}),details:N?H=>i(E,null,[c.details?.(H),U&&i(E,null,[i("span",null,null),a(xt,{active:e.persistentCounter||m.value,value:y.value,max:k.value,disabled:e.disabled},c.counter)])]):void 0})}),ht({},d,x,g)}}),Pa={class:"workspace-prompt-pane"},Ra={class:"workspace-prompt-form"},Ta={class:"workspace-prompt-actions"},Ia=".chatroom/summary.md",za=".chatroom/prompt.md",Ba=ue({__name:"WorkspacePromptPane",props:{root:{}},setup(e){const $=e,l=p(""),c=p(""),o=p(""),m=p(""),h=p(!1),r=p(!1),b=p(!1),y=p(""),k=ce(),d=ie(),x=ie(),R=K(()=>l.value!==o.value||c.value!==m.value);G(()=>$.root,()=>{x.invalidate(),r.value=!1,g()},{immediate:!0});async function g(){const L=d.begin(),D=$.root;h.value=!0,y.value="",b.value=!1;try{const W=await J(`/workspace?root=${encodeURIComponent(D)}`,{signal:L.signal});if(!d.isCurrent(L)||$.root!==D)return;l.value=W.summary??"",c.value=W.presetPrompt??"",o.value=l.value,m.value=c.value}catch(W){d.isCurrent(L)&&(y.value=te(W))}finally{d.isCurrent(L)&&(h.value=!1)}}async function V(L,D,W,v){await J("/workspace/file",{method:"PUT",body:JSON.stringify({root:L,path:D,content:W}),signal:v})}async function B(){if(!R.value||r.value)return;const L=x.begin(),D=$.root,W=l.value,v=c.value;r.value=!0,y.value="",b.value=!1;try{const C=[];if(W!==o.value&&C.push(V(D,Ia,W,L.signal)),v!==m.value&&C.push(V(D,za,v,L.signal)),await Promise.all(C),!x.isCurrent(L)||$.root!==D)return;o.value=W,m.value=v,b.value=!0}catch(C){x.isCurrent(L)&&$.root===D&&(y.value=te(C))}finally{x.isCurrent(L)&&$.root===D&&(r.value=!1)}}return(L,D)=>(u(),O("div",Pa,[h.value?(u(),P(be,{key:0,indeterminate:""})):A("",!0),i("div",Ra,[a(qe,{modelValue:l.value,"onUpdate:modelValue":D[0]||(D[0]=W=>l.value=W),label:t(k).t("$vuetify.chatroom.workspaces.summary"),rows:"3","auto-grow":"",maxlength:"2048",counter:"",disabled:h.value},null,8,["modelValue","label","disabled"]),a(qe,{modelValue:c.value,"onUpdate:modelValue":D[1]||(D[1]=W=>c.value=W),label:t(k).t("$vuetify.chatroom.workspaces.presetPrompt"),rows:"10","auto-grow":"",maxlength:"16384",counter:"",disabled:h.value},null,8,["modelValue","label","disabled"]),y.value?(u(),P(ne,{key:0,type:"error",variant:"tonal",density:"compact"},{default:n(()=>[_(s(y.value),1)]),_:1})):b.value?(u(),P(ne,{key:1,type:"success",variant:"tonal",density:"compact"},{default:n(()=>[_(s(t(k).t("$vuetify.chatroom.workspaces.saved")),1)]),_:1})):A("",!0),i("div",Ta,[a(F,{color:"primary",variant:"flat",loading:r.value,disabled:h.value||!R.value,onClick:B},{default:n(()=>[_(s(t(k).t("$vuetify.chatroom.workspaces.save")),1)]),_:1},8,["loading","disabled"])])])]))}}),Ua={class:"workspace-skills-pane"},Fa={key:2,class:"workspace-skill-grid"},La={class:"workspace-skill-header"},Oa={class:"workspace-skill-title"},Wa={class:"workspace-skill-description"},Aa={class:"workspace-skill-path"},Da=ue({__name:"WorkspaceSkillsPane",props:{root:{}},setup(e){const $=e,l=p(null),c=p(!1),o=p(""),m=ce(),h=ie();G(()=>$.root,()=>{r()},{immediate:!0});async function r(){const y=h.begin(),k=$.root;c.value=!0,o.value="";try{const d=await J(`/workspace?root=${encodeURIComponent(k)}`,{signal:y.signal});if(!h.isCurrent(y)||$.root!==k)return;l.value=d}catch(d){h.isCurrent(y)&&(o.value=te(d))}finally{h.isCurrent(y)&&(c.value=!1)}}function b(y){return y.path.startsWith(".claude/skills/")?"Claude":y.path.startsWith(".chatroom/skills/")?"ChatRoom":"Agent"}return(y,k)=>(u(),O("div",Ua,[c.value?(u(),P(be,{key:0,indeterminate:""})):A("",!0),o.value?(u(),P(ne,{key:1,type:"error",variant:"tonal",density:"compact"},{default:n(()=>[_(s(o.value),1)]),_:1})):A("",!0),l.value?.skills.length?(u(),O("div",Fa,[(u(!0),O(E,null,se(l.value.skills,d=>(u(),O("div",{key:d.path,class:"workspace-skill-card"},[i("div",La,[i("div",Oa,[a(Ge,{icon:"$mdiPuzzleOutline",size:"18"}),i("strong",null,s(d.name),1)]),a(Ke,{size:"x-small",variant:"tonal"},{default:n(()=>[_(s(b(d)),1)]),_:2},1024)]),i("div",Wa,s(d.description||t(m).t("$vuetify.chatroom.skills.noDescription")),1),i("div",Aa,s(d.path),1)]))),128))])):!c.value&&!o.value?(u(),P(re,{key:3,icon:"$mdiPuzzleOutline",title:t(m).t("$vuetify.chatroom.skills.empty")},null,8,["title"])):A("",!0)]))}}),Na={class:"workspace-layout"},qa={class:"workspace-header"},Ha={class:"workspace-identity min-w-0"},Ma={class:"workspace-meta-row"},ja=["title"],Ea={class:"workspace-actions"},Za=ue({__name:"WorkspacesView",setup(e){const $=p([]),l=p([]),c=p(window.localStorage.getItem("chatroom.workspace.root")),o=p("git"),m=p(!1),h=p(""),r=p(!1),b=p(!1),y=p(""),k=ce(),d=ie();Je(()=>{x()}),G(c,g=>{g?window.localStorage.setItem("chatroom.workspace.root",g):window.localStorage.removeItem("chatroom.workspace.root")});async function x(){const g=d.begin();m.value=!0,h.value="";try{const[V,B]=await Promise.all([J("/workspaces",{signal:g.signal}),J("/workspace/roots",{signal:g.signal})]);if(!d.isCurrent(g))return;$.value=V,l.value=B,$.value.some(L=>L.root===c.value)||(c.value=$.value[0]?.root??null)}catch(V){d.isCurrent(g)&&(h.value=te(V))}finally{d.isCurrent(g)&&(m.value=!1)}}async function R(g,V){b.value=!0,y.value="";try{const B=await J("/workspaces",{method:"POST",body:JSON.stringify({parent:g,name:V})});await x(),c.value=B.root,r.value=!1}catch(B){y.value=te(B)}finally{b.value=!1}}return(g,V)=>(u(),O("div",Na,[a(ve,{class:"workspace-detail panel-card"},{default:n(()=>[i("div",qa,[i("div",Ha,[a(Qe,{modelValue:c.value,"onUpdate:modelValue":V[0]||(V[0]=B=>c.value=B),items:$.value.map(B=>({title:B.name,value:B.root})),loading:m.value,density:"compact",variant:"outlined","hide-details":"","prepend-inner-icon":"$mdiFolderOutline",class:"workspace-switcher"},null,8,["modelValue","items","loading"]),i("div",Ma,[c.value?(u(),O("div",{key:0,class:"workspace-path",title:c.value},s(c.value),9,ja)):A("",!0),i("div",Ea,[a(F,{icon:"$mdiPlus",size:"small",variant:"text","aria-label":t(k).t("$vuetify.chatroom.workspaces.createTitle"),onClick:V[1]||(V[1]=B=>{y.value="",r.value=!0})},null,8,["aria-label"]),a(F,{icon:"$mdiRefresh",size:"small",variant:"text",loading:m.value,"aria-label":t(k).t("$vuetify.chatroom.workspaces.refresh"),onClick:x},null,8,["loading","aria-label"])])])])]),h.value?(u(),P(ne,{key:0,type:"error",variant:"tonal",density:"compact"},{default:n(()=>[_(s(h.value),1)]),_:1})):A("",!0),c.value?(u(),O(E,{key:1},[a(It,{modelValue:o.value,"onUpdate:modelValue":V[2]||(V[2]=B=>o.value=B),density:"compact",class:"workspace-tabs"},{default:n(()=>[a(me,{value:"git"},{default:n(()=>[...V[5]||(V[5]=[_("Git",-1)])]),_:1}),a(me,{value:"prompt"},{default:n(()=>[_(s(t(k).t("$vuetify.chatroom.workspaces.prompt")),1)]),_:1}),a(me,{value:"files"},{default:n(()=>[_(s(t(k).t("$vuetify.chatroom.workspaces.files")),1)]),_:1}),a(me,{value:"skills"},{default:n(()=>[_(s(t(k).t("$vuetify.chatroom.workspaces.skills")),1)]),_:1})]),_:1},8,["modelValue"]),a(xe),a(zt,{modelValue:o.value,"onUpdate:modelValue":V[3]||(V[3]=B=>o.value=B),touch:!1},{default:n(()=>[a(he,{value:"git"},{default:n(()=>[a(Va,{root:c.value},null,8,["root"])]),_:1}),a(he,{value:"prompt"},{default:n(()=>[a(Ba,{root:c.value},null,8,["root"])]),_:1}),a(he,{value:"files"},{default:n(()=>[a(Kt,{root:c.value},null,8,["root"])]),_:1}),a(he,{value:"skills"},{default:n(()=>[a(Da,{root:c.value},null,8,["root"])]),_:1})]),_:1},8,["modelValue"])],64)):m.value?A("",!0):(u(),P(re,{key:2,icon:"$mdiFolderOutline",title:t(k).t("$vuetify.chatroom.workspaces.empty")},null,8,["title"]))]),_:1}),a(Ft,{modelValue:r.value,"onUpdate:modelValue":V[4]||(V[4]=B=>r.value=B),roots:l.value,busy:b.value,error:y.value,onCreate:R},null,8,["modelValue","roots","busy","error"])]))}});export{Za as default};
@@ -0,0 +1 @@
1
+ const s=(t,r)=>{const o=t.__vccOpts||t;for(const[c,e]of r)o[c]=e;return o};export{s as _};
@@ -0,0 +1,15 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48" height="48">
2
+ <defs>
3
+ <linearGradient id="grad3" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" stop-color="#4F46E5" />
5
+ <stop offset="100%" stop-color="#0EA5E9" />
6
+ </linearGradient>
7
+ </defs>
8
+ <circle cx="24" cy="24" r="22" fill="#F8FAFC" />
9
+ <path d="M 16 34 L 16 22 Q 16 16 24 16 Q 32 16 32 22 L 32 34 Z" fill="url(#grad3)" opacity="0.1" />
10
+ <path d="M 12 22 L 36 22" stroke="url(#grad3)" stroke-width="3" stroke-linecap="round" />
11
+ <circle cx="19" cy="28" r="3" fill="url(#grad3)" />
12
+ <circle cx="28" cy="28" r="3" fill="url(#grad3)" />
13
+ <path d="M 33 26 Q 36 28 33 32" stroke="url(#grad3)" stroke-width="2.5" stroke-linecap="round" fill="none" />
14
+ <path d="M 36 23 Q 40 28 36 34" stroke="url(#grad3)" stroke-width="2" stroke-linecap="round" fill="none" opacity="0.6" />
15
+ </svg>
@@ -0,0 +1,2 @@
1
+ function u(e){const t=new Uint8Array(e);let n="";for(const r of t)n+=String.fromCharCode(r);return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function g(e){const t=e.replace(/-/g,"+").replace(/_/g,"/"),n=(4-t.length%4)%4,a=t.padEnd(t.length+n,"="),r=atob(a),l=new ArrayBuffer(r.length),d=new Uint8Array(l);for(let o=0;o<r.length;o++)d[o]=r.charCodeAt(o);return l}function R(){return S.stubThis(globalThis?.PublicKeyCredential!==void 0&&typeof globalThis.PublicKeyCredential=="function")}const S={stubThis:e=>e};function m(e){const{id:t}=e;return{...e,id:g(t),transports:e.transports}}function y(e){return e==="localhost"||/^((xn--[a-z0-9-]+|[a-z0-9]+(-[a-z0-9]+)*)\.)+([a-z]{2,}|xn--[a-z0-9-]+)$/i.test(e)}class i extends Error{constructor({message:t,code:n,cause:a,name:r}){super(t,{cause:a}),Object.defineProperty(this,"code",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.name=r??a.name,this.code=n}}function I({error:e,options:t}){const{publicKey:n}=t;if(!n)throw Error("options was missing required publicKey property");if(e.name==="AbortError"){if(t.signal instanceof AbortSignal)return new i({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:e})}else if(e.name==="ConstraintError"){if(n.authenticatorSelection?.requireResidentKey===!0)return new i({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:e});if(t.mediation==="conditional"&&n.authenticatorSelection?.userVerification==="required")return new i({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:e});if(n.authenticatorSelection?.userVerification==="required")return new i({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:e})}else{if(e.name==="InvalidStateError")return new i({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:e});if(e.name==="NotAllowedError")return new i({message:e.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:e});if(e.name==="NotSupportedError")return n.pubKeyCredParams.filter(r=>r.type==="public-key").length===0?new i({message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:e}):new i({message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:e});if(e.name==="SecurityError"){const a=globalThis.location.hostname;if(y(a)){if(n.rp.id!==a)return new i({message:`The RP ID "${n.rp.id}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:e})}else return new i({message:`${globalThis.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:e})}else if(e.name==="TypeError"){if(n.user.id.byteLength<1||n.user.id.byteLength>64)return new i({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:e})}else if(e.name==="UnknownError")return new i({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:e})}return e}class T{constructor(){Object.defineProperty(this,"controller",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}createNewAbortSignal(){if(this.controller){const n=new Error("Cancelling existing WebAuthn API call for new one");n.name="AbortError",this.controller.abort(n)}const t=new AbortController;return this.controller=t,t.signal}cancelCeremony(){if(this.controller){const t=new Error("Manually cancelling existing WebAuthn API call");t.name="AbortError",this.controller.abort(t),this.controller=void 0}}}const O=new T,P=["cross-platform","platform"];function _(e){if(e&&!(P.indexOf(e)<0))return e}async function D(e){!e.optionsJSON&&e.challenge&&(console.warn("startRegistration() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."),e={optionsJSON:e});const{optionsJSON:t,useAutoRegister:n=!1}=e;if(!R())throw new Error("WebAuthn is not supported in this browser");const a={...t,challenge:g(t.challenge),user:{...t.user,id:g(t.user.id)},excludeCredentials:t.excludeCredentials?.map(m)},r={};n&&(r.mediation="conditional"),r.publicKey=a,r.signal=O.createNewAbortSignal();let l;try{l=await navigator.credentials.create(r)}catch(c){throw I({error:c,options:r})}if(!l)throw new Error("Registration was not completed");const{id:d,rawId:o,response:s,type:w}=l;let h;typeof s.getTransports=="function"&&(h=s.getTransports());let p;if(typeof s.getPublicKeyAlgorithm=="function")try{p=s.getPublicKeyAlgorithm()}catch(c){A("getPublicKeyAlgorithm()",c)}let f;if(typeof s.getPublicKey=="function")try{const c=s.getPublicKey();c!==null&&(f=u(c))}catch(c){A("getPublicKey()",c)}let b;if(typeof s.getAuthenticatorData=="function")try{b=u(s.getAuthenticatorData())}catch(c){A("getAuthenticatorData()",c)}return{id:d,rawId:u(o),response:{attestationObject:u(s.attestationObject),clientDataJSON:u(s.clientDataJSON),transports:h,publicKeyAlgorithm:p,publicKey:f,authenticatorData:b},type:w,clientExtensionResults:l.getClientExtensionResults(),authenticatorAttachment:_(l.authenticatorAttachment)}}function A(e,t){console.warn(`The browser extension that intercepted this WebAuthn API call incorrectly implemented ${e}. You should report this error to them.
2
+ `,t)}function C(){if(!R())return E.stubThis(new Promise(t=>t(!1)));const e=globalThis.PublicKeyCredential;return e?.isConditionalMediationAvailable===void 0?E.stubThis(new Promise(t=>t(!1))):E.stubThis(e.isConditionalMediationAvailable())}const E={stubThis:e=>e};function N({error:e,options:t}){const{publicKey:n}=t;if(!n)throw Error("options was missing required publicKey property");if(e.name==="AbortError"){if(t.signal instanceof AbortSignal)return new i({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:e})}else{if(e.name==="NotAllowedError")return new i({message:e.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:e});if(e.name==="SecurityError"){const a=globalThis.location.hostname;if(y(a)){if(n.rpId!==a)return new i({message:`The RP ID "${n.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:e})}else return new i({message:`${globalThis.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:e})}else if(e.name==="UnknownError")return new i({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:e})}return e}async function v(e){!e.optionsJSON&&e.challenge&&(console.warn("startAuthentication() was not called correctly. It will try to continue with the provided options, but this call should be refactored to use the expected call structure instead. See https://simplewebauthn.dev/docs/packages/browser#typeerror-cannot-read-properties-of-undefined-reading-challenge for more information."),e={optionsJSON:e});const{optionsJSON:t,useBrowserAutofill:n=!1,verifyBrowserAutofillInput:a=!0}=e;if(!R())throw new Error("WebAuthn is not supported in this browser");let r;t.allowCredentials?.length!==0&&(r=t.allowCredentials?.map(m));const l={...t,challenge:g(t.challenge),allowCredentials:r},d={};if(n){if(!await C())throw Error("Browser does not support WebAuthn autofill");if(document.querySelectorAll("input[autocomplete$='webauthn']").length<1&&a)throw Error('No <input> with "webauthn" as the only or last value in its `autocomplete` attribute was detected');d.mediation="conditional",l.allowCredentials=[]}d.publicKey=l,d.signal=O.createNewAbortSignal();let o;try{o=await navigator.credentials.get(d)}catch(b){throw N({error:b,options:d})}if(!o)throw new Error("Authentication was not completed");const{id:s,rawId:w,response:h,type:p}=o;let f;return h.userHandle&&(f=u(h.userHandle)),{id:s,rawId:u(w),response:{authenticatorData:u(h.authenticatorData),clientDataJSON:u(h.clientDataJSON),signature:u(h.signature),userHandle:f},type:p,clientExtensionResults:o.getClientExtensionResults(),authenticatorAttachment:_(o.authenticatorAttachment)}}function K(){return R()?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():new Promise(e=>e(!1))}export{O as WebAuthnAbortService,i as WebAuthnError,E as _browserSupportsWebAuthnAutofillInternals,S as _browserSupportsWebAuthnInternals,g as base64URLStringToBuffer,R as browserSupportsWebAuthn,C as browserSupportsWebAuthnAutofill,u as bufferToBase64URLString,K as platformAuthenticatorIsAvailable,v as startAuthentication,D as startRegistration};