@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,89 @@
1
+ import { ZodError } from "zod";
2
+ import { asChatRoomError, ChatRoomError } from "#core/errors/chatroom-error";
3
+ export function asyncRoute(handler) {
4
+ return (req, res, next) => {
5
+ void handler(req, res, next).catch(next);
6
+ };
7
+ }
8
+ export function errorMiddleware(error, _req, res, _next) {
9
+ const normalized = error instanceof ZodError
10
+ ? new ChatRoomError("INVALID_INPUT", "Invalid request", {
11
+ issues: error.issues,
12
+ })
13
+ : isBodyParseError(error)
14
+ ? new ChatRoomError("INVALID_INPUT", "Invalid JSON request body")
15
+ : asChatRoomError(error);
16
+ res.status(statusForErrorCode(normalized.code)).json({
17
+ error: {
18
+ code: normalized.code,
19
+ message: normalized.message,
20
+ details: normalized.details ?? null,
21
+ },
22
+ });
23
+ }
24
+ function isBodyParseError(error) {
25
+ if (!(error instanceof SyntaxError))
26
+ return false;
27
+ const value = error;
28
+ return value.status === 400 && value.type === "entity.parse.failed";
29
+ }
30
+ function statusForErrorCode(code) {
31
+ switch (code) {
32
+ case "INVALID_INPUT":
33
+ return 400;
34
+ case "FORBIDDEN":
35
+ return 403;
36
+ case "NOT_FOUND":
37
+ return 404;
38
+ case "CONFLICT":
39
+ return 409;
40
+ case "UNSUPPORTED":
41
+ return 501;
42
+ case "PROCESS_FAILED":
43
+ return 422;
44
+ case "INTERNAL":
45
+ return 500;
46
+ }
47
+ }
48
+ export function requireString(value, name) {
49
+ if (typeof value !== "string" || !value)
50
+ throw new ChatRoomError("INVALID_INPUT", `${name} is required`);
51
+ return value;
52
+ }
53
+ export function boundedIntegerQuery(value, fallback, min, max) {
54
+ const parsed = Number(value);
55
+ return Number.isInteger(parsed) && parsed >= min
56
+ ? Math.min(parsed, max)
57
+ : fallback;
58
+ }
59
+ export function bodyRecord(value) {
60
+ return value && typeof value === "object" && !Array.isArray(value)
61
+ ? value
62
+ : {};
63
+ }
64
+ export function requireStringArray(value, name) {
65
+ if (!Array.isArray(value) ||
66
+ value.length === 0 ||
67
+ value.some((item) => typeof item !== "string" || !item))
68
+ throw new ChatRoomError("INVALID_INPUT", `${name} must be a non-empty array of strings`);
69
+ return value;
70
+ }
71
+ export function parseCookie(header, name) {
72
+ if (!header)
73
+ return null;
74
+ for (const pair of header.split(";")) {
75
+ const [key, ...rest] = pair.trim().split("=");
76
+ if (key !== name)
77
+ continue;
78
+ try {
79
+ return decodeURIComponent(rest.join("="));
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ return null;
86
+ }
87
+ export function escapeHtml(value) {
88
+ return value.replace(/[&<>"']/g, (char) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[char] ?? char);
89
+ }
@@ -0,0 +1,5 @@
1
+ import { Router } from "express";
2
+ import type { AuthService } from "#auth/auth-service";
3
+ import type { IngressPolicy } from "#auth/ingress-policy";
4
+ import type { LogWriter } from "#core/logging/types";
5
+ export declare function createOAuthRouter(auth: AuthService, ingress: IngressPolicy, logs: LogWriter): Router;
@@ -0,0 +1,172 @@
1
+ import { Router } from "express";
2
+ import { asChatRoomError, ChatRoomError } from "#core/errors/chatroom-error";
3
+ import { bodyRecord, escapeHtml, requireString } from "./http-utils.js";
4
+ export function createOAuthRouter(auth, ingress, logs) {
5
+ const router = Router();
6
+ router.get("/.well-known/oauth-authorization-server", (req, res) => res.json(auth.authorizationServerMetadata(ingress.mcpBaseUrl(req))));
7
+ router.get("/.well-known/oauth-protected-resource", (req, res) => res.json(auth.protectedResourceMetadata(ingress.mcpBaseUrl(req))));
8
+ router.get("/.well-known/oauth-protected-resource/mcp", (req, res) => res.json(auth.protectedResourceMetadata(ingress.mcpBaseUrl(req))));
9
+ router.post("/oauth/register", (req, res) => {
10
+ const body = bodyRecord(req.body);
11
+ const name = typeof body.client_name === "string" ? body.client_name : "MCP Client";
12
+ const redirects = Array.isArray(body.redirect_uris)
13
+ ? body.redirect_uris.filter((value) => typeof value === "string")
14
+ : [];
15
+ res.status(201).json(auth.registerClient(name, redirects));
16
+ });
17
+ router.get("/oauth/authorize", (req, res) => {
18
+ const request = authorizationRequest(req.query);
19
+ if (req.query.response_type !== "code")
20
+ throw new ChatRoomError("INVALID_INPUT", "Only response_type=code is supported");
21
+ auth.validateAuthorizationRequest(request);
22
+ res.type("html").send(authorizationPage(request));
23
+ });
24
+ router.post("/oauth/authorize", (req, res) => {
25
+ const body = bodyRecord(req.body);
26
+ const request = authorizationRequest(body);
27
+ const code = auth.approveAuthorization(request, requireString(body.owner_token, "owner_token"));
28
+ logs.info("auth", "oauth.success", "OAuth authorization approved", {
29
+ flow: "authorization",
30
+ });
31
+ const redirect = new URL(request.redirectUri);
32
+ redirect.searchParams.set("code", code);
33
+ if (request.state)
34
+ redirect.searchParams.set("state", request.state);
35
+ res.redirect(303, redirect.toString());
36
+ });
37
+ router.post("/oauth/token", (req, res) => {
38
+ const body = bodyRecord(req.body);
39
+ let result;
40
+ if (body.grant_type === "authorization_code") {
41
+ result = auth.exchangeCode({
42
+ code: requireString(body.code, "code"),
43
+ clientId: requireString(body.client_id, "client_id"),
44
+ redirectUri: requireString(body.redirect_uri, "redirect_uri"),
45
+ codeVerifier: requireString(body.code_verifier, "code_verifier"),
46
+ });
47
+ }
48
+ else if (body.grant_type === "refresh_token") {
49
+ result = auth.exchangeRefreshToken({
50
+ refreshToken: requireString(body.refresh_token, "refresh_token"),
51
+ ...(typeof body.client_id === "string"
52
+ ? { clientId: body.client_id }
53
+ : {}),
54
+ });
55
+ }
56
+ else {
57
+ throw new ChatRoomError("INVALID_INPUT", "Unsupported OAuth grant_type");
58
+ }
59
+ logs.info("auth", "oauth.success", "OAuth token issued", {
60
+ flow: typeof body.grant_type === "string" ? body.grant_type : "unknown",
61
+ });
62
+ res.setHeader("Cache-Control", "no-store");
63
+ res.json(result);
64
+ });
65
+ router.post("/oauth/revoke", (req, res) => {
66
+ const body = bodyRecord(req.body);
67
+ const token = typeof body.token === "string" ? body.token : "";
68
+ if (token)
69
+ auth.revoke(token);
70
+ res.status(200).end();
71
+ });
72
+ router.use(oauthErrorMiddleware(logs));
73
+ return router;
74
+ }
75
+ function oauthErrorMiddleware(logs) {
76
+ return (error, req, res, _next) => {
77
+ const normalized = asChatRoomError(error);
78
+ let code = "invalid_request";
79
+ if (req.path === "/oauth/token" && normalized.code === "FORBIDDEN")
80
+ code = "invalid_grant";
81
+ else if (req.path === "/oauth/register" &&
82
+ /redirect/i.test(normalized.message))
83
+ code = "invalid_redirect_uri";
84
+ else if (normalized.code === "FORBIDDEN")
85
+ code = "access_denied";
86
+ logs.warn("auth", "oauth.failed", "OAuth request failed", {
87
+ path: req.path,
88
+ reason: code,
89
+ });
90
+ res.setHeader("Cache-Control", "no-store");
91
+ res
92
+ .status(400)
93
+ .json({ error: code, error_description: normalized.message });
94
+ };
95
+ }
96
+ function authorizationRequest(value) {
97
+ const state = typeof value.state === "string" ? value.state : undefined;
98
+ const scopes = typeof value.scope === "string" && value.scope.trim()
99
+ ? [...new Set(value.scope.trim().split(/\s+/))]
100
+ : ["mcp"];
101
+ return {
102
+ clientId: requireString(value.client_id, "client_id"),
103
+ redirectUri: requireString(value.redirect_uri, "redirect_uri"),
104
+ codeChallenge: requireString(value.code_challenge, "code_challenge"),
105
+ codeChallengeMethod: requireString(value.code_challenge_method, "code_challenge_method"),
106
+ scopes,
107
+ ...(state ? { state } : {}),
108
+ };
109
+ }
110
+ function authorizationPage(request) {
111
+ const hidden = (name, value) => `<input type="hidden" name="${name}" value="${escapeHtml(value)}">`;
112
+ const fields = [
113
+ hidden("client_id", request.clientId),
114
+ hidden("redirect_uri", request.redirectUri),
115
+ hidden("code_challenge", request.codeChallenge),
116
+ hidden("code_challenge_method", request.codeChallengeMethod),
117
+ hidden("scope", request.scopes.join(" ")),
118
+ request.state ? hidden("state", request.state) : "",
119
+ ].join("");
120
+ return `<!doctype html>
121
+ <html>
122
+ <head>
123
+ <meta charset="utf-8">
124
+ <meta name="viewport" content="width=device-width">
125
+ <title>Authorize ChatRoom</title>
126
+ <style>
127
+ body { font: 15px system-ui; margin: 0; background: #0b0d10; color: #edf1f5; display: grid; place-items: center; min-height: 100vh; }
128
+ .card {
129
+ width: min(440px, calc(100% - 32px));
130
+ background: #14181d;
131
+ border: 1px solid #2a3038;
132
+ border-radius: 14px;
133
+ padding: 24px;
134
+ box-sizing: border-box;
135
+ }
136
+ h1 { font-size: 20px; margin: 0 0 8px; }
137
+ p { color: #aeb8c4; line-height: 1.5; }
138
+ label { display: block; font-size: 12px; color: #aeb8c4; margin: 18px 0 7px; }
139
+ input[type=password] {
140
+ width: 100%;
141
+ box-sizing: border-box;
142
+ background: #0c0f13;
143
+ color: white;
144
+ border: 1px solid #39414b;
145
+ border-radius: 8px;
146
+ padding: 10px;
147
+ }
148
+ button {
149
+ margin-top: 16px;
150
+ width: 100%;
151
+ border: 0;
152
+ border-radius: 8px;
153
+ padding: 10px;
154
+ background: #edf1f5;
155
+ color: #111;
156
+ font-weight: 650;
157
+ cursor: pointer;
158
+ }
159
+ </style>
160
+ </head>
161
+ <body>
162
+ <form class="card" method="post" action="/oauth/authorize">
163
+ <h1>Authorize MCP client</h1>
164
+ <p>Approve this client to access ChatRoom through the MCP endpoint.</p>
165
+ ${fields}
166
+ <label for="owner_token">Owner token</label>
167
+ <input id="owner_token" name="owner_token" type="password" autocomplete="current-password" required>
168
+ <button type="submit">Authorize</button>
169
+ </form>
170
+ </body>
171
+ </html>`;
172
+ }
@@ -0,0 +1 @@
1
+ @layer vuetify-components{.v-snackbar{justify-content:center;z-index:10000;margin:8px;margin-inline-end:calc(8px + var(--v-scrollbar-offset));padding:var(--v-layout-top) var(--v-layout-right) var(--v-layout-bottom) var(--v-layout-left);--v-snackbar-current-offset: var(--v-snackbar-offset);transform:translateY(calc(var(--v-snackbar-direction) * (var(--v-snackbar-current-offset) + var(--v-snackbar-mobile-notch, 0px))));transition:transform .2s cubic-bezier(.4,0,.2,1)}.v-snackbar:not(.v-snackbar--center):not(.v-snackbar--top){align-items:flex-end}.v-snackbar__wrapper{align-items:center;display:flex;flex-wrap:wrap;max-width:672px;min-height:48px;min-width:344px;overflow:hidden;padding:0;transition:.35s cubic-bezier(.4,0,.2,1);transition-property:height,width}.v-snackbar__wrapper{border-radius:4px}.v-snackbar--variant-plain,.v-snackbar--variant-outlined,.v-snackbar--variant-text,.v-snackbar--variant-tonal{background:transparent;color:inherit}.v-snackbar--variant-plain{opacity:.62}.v-snackbar--variant-plain:focus,.v-snackbar--variant-plain:hover{opacity:1}.v-snackbar--variant-plain .v-snackbar__overlay{display:none}.v-snackbar--variant-elevated,.v-snackbar--variant-flat{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-snackbar--variant-elevated{box-shadow:0 1px 2px rgba(var(--v-shadow-color),var(--v-shadow-key-opacity, .3)),0 2px 6px 2px rgba(var(--v-shadow-color),var(--v-shadow-ambient-opacity, .15));--v-elevation-overlay: color-mix(in srgb, var(--v-elevation-overlay-color) 4%, transparent)}.v-snackbar--variant-flat{box-shadow:0 0 rgba(var(--v-shadow-color),var(--v-shadow-key-opacity, .3)),0 0 rgba(var(--v-shadow-color),var(--v-shadow-ambient-opacity, .15));--v-elevation-overlay: color-mix(in srgb, var(--v-elevation-overlay-color) 0%, transparent)}.v-snackbar--variant-outlined{border:thin solid currentColor}.v-snackbar--variant-text .v-snackbar__overlay{background:currentColor}.v-snackbar--variant-tonal .v-snackbar__underlay{background:currentColor;opacity:var(--v-activated-opacity);border-radius:inherit;inset:0;pointer-events:none}.v-snackbar .v-snackbar__underlay{position:absolute}.v-snackbar--variant-outlined,.v-snackbar--variant-tonal{background:rgb(var(--v-theme-surface))}@media(forced-colors:active){.v-snackbar__wrapper{border:thick solid}}.v-snackbar__header{flex-basis:100%}.v-snackbar__header:after{content:"";display:block;flex-basis:100%}.v-snackbar__prepend{align-self:center;display:flex;margin-inline:16px 12px}.v-snackbar__prepend+.v-snackbar__content{padding-inline-start:0}.v-snackbar__title{font-weight:700}.v-snackbar__content{flex:1 1;font-size:.875rem;font-weight:400;letter-spacing:.0178571429em;line-height:1.4285714286;margin-right:auto;padding:14px 16px;text-align:initial}.v-snackbar__actions{align-items:center;align-self:center;display:flex;margin-inline-end:8px}.v-snackbar__actions>.v-btn{padding:0 8px;min-width:auto}.v-snackbar__timer{width:100%;position:absolute}.v-snackbar__timer--top{top:0}.v-snackbar__timer--bottom{bottom:0}.v-snackbar__timer .v-progress-linear{transition:.2s linear}.v-snackbar--absolute{position:absolute;z-index:1}.v-snackbar--vertical .v-snackbar__actions{flex-basis:100%;justify-content:end;margin-bottom:8px}.v-snackbar--vertical .v-snackbar__actions:before{content:"";display:block;flex-basis:100%}.v-snackbar--center{align-items:center;justify-content:center}.v-snackbar--top{align-items:flex-start}@media(max-width:839.98px){.v-snackbar--top{--v-snackbar-mobile-notch: max(env(safe-area-inset-top), 0px)}}.v-snackbar--bottom{align-items:flex-end}@media(max-width:839.98px){.v-snackbar--bottom{--v-snackbar-mobile-notch: max(env(safe-area-inset-bottom), 0px)}}.v-snackbar--left,.v-snackbar--start{justify-content:flex-start}.v-snackbar--right,.v-snackbar--end{justify-content:flex-end}.v-snackbar--collapsed{--v-snackbar-current-offset: calc(var(--v-snackbar-gap) * var(--v-snackbar-index, 0))}.v-snackbar--collapsed .v-snackbar__wrapper{min-width:0;width:calc(var(--v-snackbar-collapsed-width) - 2 * var(--v-snackbar-gap) * var(--v-snackbar-index, 0));height:var(--v-snackbar-collapsed-height)}.v-snackbar--collapsed .v-snackbar__wrapper>*{opacity:0}.v-snackbar--collapsed.v-snackbar--start .v-snackbar__wrapper,.v-snackbar--collapsed.v-snackbar--left .v-snackbar__wrapper{transform:translate(calc(var(--v-snackbar-gap) * var(--v-snackbar-index, 0)))}.v-snackbar--collapsed.v-snackbar--end .v-snackbar__wrapper,.v-snackbar--collapsed.v-snackbar--right .v-snackbar__wrapper{transform:translate(calc(-1 * var(--v-snackbar-gap) * var(--v-snackbar-index, 0)))}.v-snackbar--collapsed .v-progress-linear{opacity:0}.v-snackbar .v-avatar{background:transparent}}@layer vuetify-final.transitions{.v-snackbar-transition-enter-active,.v-snackbar-transition-leave-active{transition-duration:.15s;transition-timing-function:cubic-bezier(0,0,.2,1)}.v-snackbar-transition-enter-active{transition-property:opacity,transform}@media(prefers-reduced-motion:reduce){.v-snackbar-transition-enter-active{transition-property:opacity}}.v-snackbar-transition-enter-from{opacity:0;transform:scale(.8)}.v-snackbar-transition-leave-active{transition-property:opacity}.v-snackbar-transition-leave-to{opacity:0}}
@@ -0,0 +1 @@
1
+ import{ax as ae,ay as fe,a9 as ye,w as M,az as he,z as w,A as be,a4 as _e,aA as ge,aB as we,B as ke,aC as pe,aD as Ve,aE as Se,aF as Ce,aG as Te,a7 as $e,a8 as le,aH as xe,ab as oe,E as Pe,aa as Ie,ah as j,aI as De,y as g,F as Be,I as Ae,ae as Ne,aJ as Oe,G as Ue,aK as Fe,aL as Me,aM as Re,aN as qe,aO as H,aP as ze,e as n,aQ as Ee,g as s,_ as Le,R as Ke,O as Q,L as F,au as ne,aR as We,N as Ge,am as X,P as W,d as je,a as Je,T as Ye,U,o as C,n as $,b as c,c as He,q as Qe,r as _,t as i,p as Z,h as d,a2 as Xe,i as D,j as G,l as Ze,m as et,V as ee,f as tt,k as at,s as lt,v as ot,a1 as nt,W as st}from"./index-BegKQ3Yd.js";import{V as te}from"./VSwitch-CxusR4iO.js";import{V as it}from"./VSpacer-C3wAY3F0.js";const rt=Symbol.for("vuetify:v-snackbar-queue");function ut(e,t){const a=ae(rt,null);if(!a)return null;const u=fe();a.register(u),ye(()=>a.unregister(u)),M(e,v=>!v&&a.unregister(u),{flush:"sync"});const{resizeRef:k,contentRect:h}=he();M(t,v=>{k.value=v??null}),M(h,v=>{v?.width&&a.setSize(u,v.height,v.width)});const p=w(()=>a.getOffset(u));return{id:u,offset:p}}function ct(e){const t=j(e());let a=-1;function u(){clearInterval(a)}function k(){u(),oe(()=>t.value=e())}function h(p){const v=p?getComputedStyle(p):{transitionDuration:.2},f=parseFloat(v.transitionDuration)*1e3||200;if(u(),t.value<=0)return;const y=performance.now();a=window.setInterval(()=>{const x=performance.now()-y+f;t.value=Math.max(e()-x,0),t.value<=0&&u()},f)}return De(u),{clear:u,time:t,start:h,reset:k}}const dt=Be({collapsed:Object,loading:Boolean,prependAvatar:String,prependIcon:Ae,queueGap:Number,queueIndex:Number,title:String,text:String,reverseTimer:Boolean,timer:{type:[Boolean,String],default:!1},timerColor:String,timeout:{type:[Number,String],default:5e3},vertical:Boolean,...qe({location:"bottom center"}),...Re(),...Me(),...Fe(),...Ue(),...Ne(Oe({closeOnBack:!1,locationStrategy:null,transition:"v-snackbar-transition"}),["persistent","noClickAnimation","offset","retainFocus","captureFocus","disableInitialFocus","location","scrim","scrollStrategy","stickToTarget","viewportMargin"])},"VSnackbar"),vt=be()({name:"VSnackbar",props:dt(),emits:{"update:modelValue":e=>!0},setup(e,{slots:t}){const a=_e(e,"modelValue"),{positionClasses:u}=ge(e),{scopeId:k}=we(),{themeClasses:h}=ke(e),{colorClasses:p,colorStyles:v,variantClasses:f}=pe(e),{roundedClasses:y,roundedStyles:x}=Ve(e),T=ct(()=>Number(e.timeout)),P=g(),B=ut(a,()=>P.value?.contentEl);let R;const q=g(),V=j(!1),S=j(!1),z=j(0),E=g(),L=ae(Se,void 0);Ce(()=>!!L,()=>{const r=Te();$e(()=>{E.value=r.mainStyles.value})}),M(a,I),M(()=>e.timeout,I),le(()=>{a.value&&I()});let A=-1;function I(){T.clear(),window.clearTimeout(A);const r=Number(e.timeout);if(!a.value||r===-1)return;T.reset();const b=xe(q.value);oe(()=>T.start(b)),A=window.setTimeout(()=>{a.value=!1},r)}function N(){T.reset(),window.clearTimeout(A)}function K(){V.value=!0,N()}function l(){V.value=!1,S.value||I()}function o(){S.value=!0,N()}function m(r){P.value?.contentEl?.contains(r.relatedTarget)||(S.value=!1,V.value||I())}function se(r){z.value=r.touches[0].clientY}function ie(r){Math.abs(z.value-r.changedTouches[0].clientY)>50&&(a.value=!1)}function re(){V.value&&l(),S.value=!1}const ue=w(()=>e.location.split(" ").reduce((r,b)=>(r[`v-snackbar--${b}`]=!0,r),{})),ce=w(()=>{const[r,b]=e.location.split(" ");return r==="bottom"||["left","right"].includes(r)&&b==="end"?-1:1}),de=w(()=>e.collapsed?{"--v-snackbar-collapsed-height":W(e.collapsed.height),"--v-snackbar-collapsed-width":W(e.collapsed.width)}:null),ve=w(()=>{if(B)return B.offset.value===null?R:R=W(B.offset.value)}),me=w(()=>{if(typeof e.transition!="string"||!e.transition.endsWith("-auto"))return e.transition;const r=e.transition.replace("-auto",""),[b,O]=e.location.split(" "),J=["start","end","left","right"].includes(O)||["left","right"].includes(b)?"x":"y",Y=["end","right"].includes(O)||!["start","left"].includes(O)&&["bottom","right"].includes(b)?"-reverse":"";return`${r}-${J}${Y}-transition`});return Pe(()=>{const r=H.filterProps({...e,location:e.location,locationStrategy:e.locationStrategy??ze}),b=!!(e.prependAvatar||e.prependIcon),O=!!(b||e.loading||t.prepend),J=!!(t.default||t.text||t.title||e.text||e.title);return n(H,X({ref:P,class:["v-snackbar",{"v-snackbar--active":a.value,"v-snackbar--collapsed":!!e.collapsed,"v-snackbar--timer":!!e.timer,"v-snackbar--vertical":e.vertical},ue.value,u.value,e.class],style:[E.value,{"--v-snackbar-offset":ve.value,"--v-snackbar-gap":W(e.queueGap),"--v-snackbar-index":e.queueIndex,"--v-snackbar-direction":ce.value},de.value,e.style]},r,{transition:me.value,modelValue:a.value,"onUpdate:modelValue":Y=>a.value=Y,contentProps:X({class:["v-snackbar__wrapper",h.value,p.value,y.value,f.value],style:[v.value,x.value],onPointerenter:K,onPointerleave:l,onFocusin:o,onFocusout:m},r.contentProps),persistent:!0,noClickAnimation:!0,scrim:!1,scrollStrategy:"none",onTouchstartPassive:se,onTouchend:ie,onAfterLeave:re},k),{default:()=>[Ee(!1,"v-snackbar"),t.header&&s("div",{class:"v-snackbar__header"},[t.header?.()]),e.timer&&Number(e.timeout)>0&&!V.value&&s("div",{key:"timer",class:Ke(["v-snackbar__timer",`v-snackbar__timer--${e.timer==="bottom"?"bottom":"top"}`])},[n(Le,{ref:q,color:e.timerColor??"info",max:e.timeout,modelValue:e.reverseTimer?Number(e.timeout)-T.time.value:T.time.value},null)]),O&&n(Q,{key:"prepend-defaults",disabled:!b&&!e.loading,defaults:{VAvatar:{image:e.prependAvatar},VIcon:{icon:e.prependIcon},VProgressCircular:{indeterminate:!0,size:24,width:3}}},{default:()=>[s("div",{class:"v-snackbar__prepend"},[t.prepend?t.prepend():s(F,null,[e.loading&&n(ne,null,null),!e.loading&&e.prependAvatar&&n(We,null,null),!e.loading&&e.prependIcon&&n(Ge,null,null)])])]}),J&&s("div",{key:"content",class:"v-snackbar__content",role:"status","aria-live":"polite"},[t.title?.()??(e.title?s("div",{class:"v-snackbar__title",key:"title"},[e.title]):""),t.text?.()??e.text,t.default?.()]),t.actions&&n(Q,{defaults:{VBtn:{variant:"text",ripple:!1,slim:!0}}},{default:()=>[s("div",{class:"v-snackbar__actions"},[t.actions({isActive:a})])]})],activator:t.activator})}),Ie({},P)}}),mt={class:"cloud-view"},ft={class:"cloud-row"},yt={class:"cloud-row-main"},ht={class:"cloud-row-title"},bt={class:"cloud-row-value"},_t={class:"cloud-row-actions"},gt={class:"cloud-row"},wt={class:"cloud-row-main"},kt={class:"cloud-row-title"},pt={key:0,class:"cloud-row-value mono"},Vt={key:1,class:"cloud-row-value"},St={class:"cloud-row"},Ct={class:"cloud-row-main"},Tt={class:"cloud-row-title"},$t={key:0,class:"cloud-row-value mono"},xt={key:1,class:"cloud-row-value"},Pt={class:"cloud-row"},It={class:"cloud-row-main"},Dt={class:"cloud-row-title"},Bt={class:"cloud-row-value"},At={class:"cloud-restore-row"},Nt={key:3,class:"cloud-loading"},Ot={class:"cloud-row cloud-installation-row"},Ut={class:"cloud-row-main"},Ft={class:"cloud-row-title"},Mt={class:"cloud-row-value mono installation-id"},Et=je({__name:"CloudView",setup(e){const t=Je(),a=g(null),u=g(""),k=g(!1),h=g(""),p=g(!1),v=g(!1),f=g(null),y=g(null),x=Ye(),T=w(()=>{const l=new Set(a.value?.entitlements.map(o=>o.service)??[]);return l.has("remote_mcp")&&l.has("remote_web")}),P=w(()=>{const l=(a.value?.entitlements??[]).map(o=>o.validUntil).filter(o=>!!o).map(o=>Date.parse(o)).filter(Number.isFinite);return l.length?Math.min(...l):null}),B=w(()=>T.value?P.value===null?t.t("$vuetify.chatroom.cloud.active"):`${t.t("$vuetify.chatroom.cloud.expires")} ${new Intl.DateTimeFormat(nt(t.current.value),{dateStyle:"medium",timeStyle:"short"}).format(new Date(P.value))}`:t.t("$vuetify.chatroom.cloud.inactiveDescription")),R=w(()=>f.value==="remote_web"?t.t("$vuetify.chatroom.cloud.disableWebTitle"):t.t("$vuetify.chatroom.cloud.disableMcpTitle")),q=w(()=>f.value==="remote_web"?t.t("$vuetify.chatroom.cloud.disableWebDescription"):t.t("$vuetify.chatroom.cloud.disableMcpDescription"));le(z);function V(l){a.value=l}function S(l){u.value=st(l),k.value=!0}async function z(){const l=x.begin();try{const o=await U("/cloud/status",{signal:l.signal});x.isCurrent(l)&&V(o)}catch(o){x.isCurrent(l)&&S(o)}}async function E(){v.value=!0;try{V(await U("/cloud/sync",{method:"POST"}))}catch(l){S(l)}finally{v.value=!1}}async function L(){try{const l=await U("/cloud/management",{method:"POST"});window.open(l.url,"_blank","noopener,noreferrer")}catch(l){S(l)}}function A(l,o){if(o){N(l,!0);return}f.value=l}async function I(){const l=f.value;l&&(await N(l,!1),y.value===null&&(f.value=null))}async function N(l,o){if(!(!a.value||y.value)){y.value=l;try{V(await U(`/cloud/services/${l}`,{method:"POST",body:JSON.stringify({enabled:o})}))}catch(m){S(m)}finally{y.value=null}}}async function K(){if(h.value.trim()){p.value=!0;try{const l=await U("/cloud/restore",{method:"POST",body:JSON.stringify({recoveryKey:h.value.trim()}),timeoutMs:12e4});V(l.status),h.value=""}catch(l){S(l)}finally{p.value=!1}}}return(l,o)=>(C(),$(F,null,[s("div",mt,[n(ee,{class:"panel-card cloud-panel"},{default:c(()=>[a.value?.lastError?(C(),He(Qe,{key:0,type:"error",variant:"tonal",density:"compact",class:"ma-3"},{default:c(()=>[_(i(a.value.lastError),1)]),_:1})):Z("",!0),a.value&&T.value?(C(),$(F,{key:1},[s("div",ft,[s("div",yt,[s("div",ht,i(d(t).t("$vuetify.chatroom.cloud.subscription")),1),s("div",bt,i(B.value),1)]),s("div",_t,[n(Xe,{color:"success",size:"small",variant:"tonal"},{default:c(()=>[_(i(d(t).t("$vuetify.chatroom.cloud.active")),1)]),_:1}),n(D,{icon:"$mdiRefresh",size:"small",variant:"text",loading:v.value,"aria-label":d(t).t("$vuetify.chatroom.cloud.refresh"),onClick:E},null,8,["loading","aria-label"]),n(D,{variant:"text",size:"small",disabled:!a.value.installationId,onClick:L},{default:c(()=>[_(i(d(t).t("$vuetify.chatroom.cloud.manage")),1)]),_:1},8,["disabled"])])]),n(G),s("div",gt,[s("div",wt,[s("div",kt,i(d(t).t("$vuetify.chatroom.cloud.remoteMcp")),1),a.value.mcpUrl?(C(),$("div",pt,i(a.value.mcpUrl),1)):(C(),$("div",Vt,i(d(t).t("$vuetify.chatroom.cloud.remoteMcpDescription")),1))]),n(te,{"model-value":a.value.desiredServices.remote_mcp,loading:y.value==="remote_mcp",disabled:y.value!==null,"onUpdate:modelValue":o[0]||(o[0]=m=>A("remote_mcp",!!m))},null,8,["model-value","loading","disabled"])]),n(G),s("div",St,[s("div",Ct,[s("div",Tt,i(d(t).t("$vuetify.chatroom.cloud.remoteWeb")),1),a.value.webUrl?(C(),$("div",$t,i(a.value.webUrl),1)):(C(),$("div",xt,i(d(t).t("$vuetify.chatroom.cloud.remoteWebDescription")),1))]),n(te,{"model-value":a.value.desiredServices.remote_web,loading:y.value==="remote_web",disabled:y.value!==null,"onUpdate:modelValue":o[1]||(o[1]=m=>A("remote_web",!!m))},null,8,["model-value","loading","disabled"])])],64)):a.value?(C(),$(F,{key:2},[s("div",Pt,[s("div",It,[s("div",Dt,i(d(t).t("$vuetify.chatroom.cloud.subscription")),1),s("div",Bt,i(B.value),1)]),n(D,{color:"primary",variant:"flat",size:"small",disabled:!a.value.installationId,onClick:L},{default:c(()=>[_(i(d(t).t("$vuetify.chatroom.cloud.purchase")),1)]),_:1},8,["disabled"])]),n(G),s("div",At,[n(Ze,{modelValue:h.value,"onUpdate:modelValue":o[2]||(o[2]=m=>h.value=m),placeholder:d(t).t("$vuetify.chatroom.cloud.recoveryKey"),type:"password",density:"compact",variant:"outlined","hide-details":"",autocomplete:"off",onKeyup:et(K,["enter"])},null,8,["modelValue","placeholder"]),n(D,{loading:p.value,disabled:!a.value.installationId||!h.value.trim(),variant:"tonal",size:"small",onClick:K},{default:c(()=>[_(i(d(t).t("$vuetify.chatroom.cloud.restoreAction")),1)]),_:1},8,["loading","disabled"])])],64)):(C(),$("div",Nt,[n(ne,{indeterminate:"",size:"20",width:"2"})])),a.value?(C(),$(F,{key:4},[n(G),s("div",Ot,[s("div",Ut,[s("div",Ft,i(d(t).t("$vuetify.chatroom.cloud.installationId")),1),s("div",Mt,i(a.value.installationId||"—"),1)])])],64)):Z("",!0)]),_:1})]),n(ot,{"model-value":f.value!==null,"max-width":"480","onUpdate:modelValue":o[4]||(o[4]=m=>!m&&(f.value=null))},{default:c(()=>[n(ee,null,{default:c(()=>[n(tt,null,{default:c(()=>[_(i(R.value),1)]),_:1}),n(at,null,{default:c(()=>[_(i(q.value),1)]),_:1}),n(lt,null,{default:c(()=>[n(it),n(D,{variant:"text",disabled:y.value!==null,onClick:o[3]||(o[3]=m=>f.value=null)},{default:c(()=>[_(i(d(t).t("$vuetify.chatroom.common.cancel")),1)]),_:1},8,["disabled"]),n(D,{color:"error",variant:"flat",loading:y.value===f.value,onClick:I},{default:c(()=>[_(i(d(t).t("$vuetify.chatroom.cloud.disableConfirm")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model-value"]),n(vt,{modelValue:k.value,"onUpdate:modelValue":o[6]||(o[6]=m=>k.value=m),color:"error",location:"top",timeout:6e3},{actions:c(()=>[n(D,{variant:"text",onClick:o[5]||(o[5]=m=>k.value=!1)},{default:c(()=>[_(i(d(t).t("$vuetify.chatroom.common.close")),1)]),_:1})]),default:c(()=>[_(i(u.value)+" ",1)]),_:1},8,["modelValue"])],64))}});export{Et as default};
@@ -0,0 +1 @@
1
+ @layer vuetify-components{.v-sheet{display:block}.v-sheet{border-color:rgba(var(--v-border-color),var(--v-border-opacity));border-style:solid;border-width:0}.v-sheet--border{border-width:thin;box-shadow:none}.v-sheet{box-shadow:0 0 rgba(var(--v-shadow-color),var(--v-shadow-key-opacity, .3)),0 0 rgba(var(--v-shadow-color),var(--v-shadow-ambient-opacity, .15));--v-elevation-overlay: color-mix(in srgb, var(--v-elevation-overlay-color) 0%, transparent)}.v-sheet--absolute{position:absolute}.v-sheet--fixed{position:fixed}.v-sheet--relative{position:relative}.v-sheet--sticky{position:sticky}.v-sheet{border-radius:0}.v-sheet{background:rgb(var(--v-theme-surface));color:color-mix(in srgb,rgb(var(--v-theme-on-surface)) calc(var(--v-high-emphasis-opacity) * 100%),transparent)}.v-sheet--rounded{border-radius:4px}}
@@ -0,0 +1,3 @@
1
+ import{A as _,B as x,C as B,bN as R,bO as T,aA as $,aD as E,E as D,F as O,G as A,b7 as H,aL as N,aM as U,aN as j,bP as z,J as M,K as F,bQ as G,e as i,Q as I,R as w,S as Q,bR as W,d as J,a as q,w as S,bS as K,a9 as X,o as g,c as Y,b as Z,n as b,L as ee,g as p,l as ae,h as v,i as C,j as oe,p as te,t as le,y as k,ah as se,z as L}from"./index-BegKQ3Yd.js";import{V as ne}from"./VSpacer-C3wAY3F0.js";const ie=O({color:String,...G(),...F(),...M(),...z(),...j(),...U(),...N(),...H(),...A()},"VSheet"),re=_()({name:"VSheet",props:ie(),setup(e,{slots:o}){const{themeClasses:u}=x(e),{backgroundColorClasses:h,backgroundColorStyles:s}=B(()=>e.color),{borderClasses:r}=R(e),{dimensionStyles:n}=Q(e),{elevationClasses:l}=W(e),{locationStyles:d}=T(e),{positionClasses:c}=$(e),{roundedClasses:m,roundedStyles:y}=E(e);return D(()=>i(e.tag,{class:w(["v-sheet",u.value,h.value,r.value,l.value,c.value,m.value,e.class]),style:I([s.value,n.value,d.value,y.value,e.style])},o)),{}}}),ce={class:"code-toolbar"},ue={class:"code-actions"},de=["innerHTML"],me={key:1},ve=2e5,he=120,ye=J({__name:"CodeViewer",props:{value:{},text:{},filename:{default:"chatroom-output.txt"},language:{},toolbar:{type:Boolean,default:!0}},setup(e){const o=e,u=k(""),h=k(""),s=k(!0),r=se(null),n=q();let l=null,d=0;const c=L(()=>o.text??JSON.stringify(o.value??null,null,2)),m=L(()=>{const t=h.value.toLocaleLowerCase();return t?c.value.split(`
2
+ `).filter(a=>a.toLocaleLowerCase().includes(t)).join(`
3
+ `):c.value});S(u,t=>{l&&clearTimeout(l),l=setTimeout(()=>{h.value=t,l=null},he)}),S([m,()=>o.filename,()=>o.language,()=>o.value!==void 0],async()=>{const t=++d,a=m.value;if(!a||a.length>ve){r.value=null;return}const{highlightSource:f}=await K(async()=>{const{highlightSource:P}=await import("./syntax-highlight-B5ArnyrC.js");return{highlightSource:P}},[]);t===d&&(r.value=f(a,{filename:o.filename,language:o.language??(o.value!==void 0?"json":null)}))},{immediate:!0}),X(()=>{l&&clearTimeout(l),d+=1});async function y(){await navigator.clipboard.writeText(c.value)}function V(){const t=URL.createObjectURL(new Blob([c.value],{type:"text/plain;charset=utf-8"})),a=document.createElement("a");a.href=t,a.download=o.filename,a.click(),URL.revokeObjectURL(t)}return(t,a)=>(g(),Y(re,{border:e.toolbar,rounded:e.toolbar?"lg":0,"overflow-hidden":"",class:w(["code-viewer",{"code-viewer-plain":!e.toolbar}])},{default:Z(()=>[e.toolbar?(g(),b(ee,{key:0},[p("div",ce,[i(ae,{modelValue:u.value,"onUpdate:modelValue":a[0]||(a[0]=f=>u.value=f),placeholder:v(n).t("$vuetify.chatroom.code.search"),"prepend-inner-icon":"$mdiMagnify",density:"compact","hide-details":"",class:"code-search"},null,8,["modelValue","placeholder"]),i(ne),p("div",ue,[i(C,{icon:"$mdiContentCopy",size:"small",variant:"text","aria-label":v(n).t("$vuetify.chatroom.code.copy"),onClick:y},null,8,["aria-label"]),i(C,{icon:s.value?"$mdiWrap":"$mdiFormatAlignLeft",size:"small",variant:"text","aria-label":v(n).t(s.value?"$vuetify.chatroom.code.disableWrap":"$vuetify.chatroom.code.enableWrap"),onClick:a[1]||(a[1]=f=>s.value=!s.value)},null,8,["icon","aria-label"]),i(C,{icon:"$mdiDownloadOutline",size:"small",variant:"text","aria-label":v(n).t("$vuetify.chatroom.code.download"),onClick:V},null,8,["aria-label"])])]),i(oe)],64)):te("",!0),p("pre",{class:w(["code-block",{wrap:s.value}])},[r.value?(g(),b("code",{key:0,class:"hljs",innerHTML:r.value},null,8,de)):(g(),b("code",me,le(m.value||v(n).t("$vuetify.chatroom.code.noOutput")),1))],2)]),_:1},8,["border","rounded","class"]))}});export{re as V,ye as _};
@@ -0,0 +1 @@
1
+ .computer-operation-scroll[data-v-5fb7b261]{max-height:min(280px,36dvh);overflow-y:auto;overscroll-behavior:contain}.computer-operation-list[data-v-5fb7b261]{padding-block:4px}.computer-operation-list[data-v-5fb7b261] .v-list-item{min-height:52px;padding-inline:18px}.computer-operation-list[data-v-5fb7b261] .v-list-item-title,.computer-operation-list[data-v-5fb7b261] .v-list-item-subtitle{font-size:12px}.computer-preview-heading[data-v-78483d0f]{min-width:0}.computer-preview-time[data-v-78483d0f]{margin-top:2px;color:rgb(var(--v-theme-on-surface),.52);font-size:11px}.computer-preview-content[data-v-78483d0f]{padding:14px}.computer-screen-shell[data-v-78483d0f]{overflow:hidden;border:1px solid rgba(var(--v-border-color),var(--v-border-opacity));border-radius:10px;background:rgb(var(--v-theme-surface));line-height:0}.computer-screen-shell img[data-v-78483d0f]{display:block;width:100%;height:auto;max-height:62vh;object-fit:contain}.computer-screen-empty[data-v-78483d0f]{display:flex;min-height:250px;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px;border:1px dashed rgba(var(--v-border-color),var(--v-border-opacity));border-radius:10px;background:rgb(var(--v-theme-surface));color:rgb(var(--v-theme-on-surface),.68);text-align:center}.computer-preview-meta[data-v-78483d0f]{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(140px,100%),1fr));gap:10px;margin-top:10px}.computer-preview-meta>div[data-v-78483d0f]{display:flex;min-width:0;flex-direction:column;gap:2px;padding:8px 10px;border-radius:8px;background:rgb(var(--v-theme-on-surface),.04)}.computer-preview-meta span[data-v-78483d0f]{color:rgb(var(--v-theme-on-surface),.7);font-size:11px}.computer-preview-meta strong[data-v-78483d0f]{color:rgb(var(--v-theme-on-surface),.92);font-size:12px;font-weight:650}@media(max-width:900px){.computer-preview-meta[data-v-78483d0f]{grid-template-columns:1fr}.computer-screen-empty[data-v-78483d0f]{min-height:190px}}.computer-status-list[data-v-d7b81c3a]{display:flex;flex-direction:column;gap:2px;padding:12px 18px}.computer-status-row[data-v-d7b81c3a]{display:flex;min-height:36px;align-items:center;justify-content:space-between;gap:16px}.computer-status-label[data-v-d7b81c3a]{color:rgb(var(--v-theme-on-surface),.76);font-size:13px;font-weight:500}.computer-status-value[data-v-d7b81c3a]{color:rgb(var(--v-theme-on-surface),.94);font-size:13px;font-weight:600}.computer-permission-value[data-v-d7b81c3a]{display:flex;min-width:0;align-items:center;justify-content:flex-end;gap:10px}.computer-permission-state[data-v-d7b81c3a]{font-size:13px;font-weight:600;white-space:nowrap}.computer-permission-state.is-granted[data-v-d7b81c3a]{color:rgb(var(--v-theme-success))}.computer-permission-state.is-denied[data-v-d7b81c3a]{color:rgb(var(--v-theme-warning))}.computer-permission-state.is-muted[data-v-d7b81c3a]{color:rgb(var(--v-theme-on-surface),.72)}.computer-permission-btn[data-v-d7b81c3a]{min-width:64px;height:30px;font-size:12px;font-weight:650}.computer-permission-alert[data-v-d7b81c3a]{margin-top:8px}.computer-settings-list[data-v-d7b81c3a],.computer-display-list[data-v-d7b81c3a]{padding-block:4px}.computer-settings-list[data-v-d7b81c3a] .v-list-item,.computer-display-list[data-v-d7b81c3a] .v-list-item{min-height:48px;padding-inline:18px}.computer-settings-list[data-v-d7b81c3a] .v-list-item-title,.computer-display-list[data-v-d7b81c3a] .v-list-item-title,.computer-display-list[data-v-d7b81c3a] .v-list-item-subtitle{font-size:12px}@media(max-width:900px){.computer-status-row[data-v-d7b81c3a]{min-height:40px}}.computer-view[data-v-25e35a6d]{display:flex;flex-direction:column;gap:14px;font-size:14px}
@@ -0,0 +1 @@
1
+ import{u as ae}from"./useOperationLabels-BDjzGDkT.js";import{d as I,a as E,o as p,c as g,b as d,g as r,t as n,h as s,e as m,i as V,j as x,Y as N,n as S,L as D,X,Z as P,$ as oe,r as B,a0 as re,a1 as Z,k as W,V as L,p as k,q as j,N as ie,z as U,R as H,T as z,w as ne,a8 as ce,a9 as ue,U as C,W as le,y as _,as as me}from"./index-BegKQ3Yd.js";import{d as K}from"./utils-rtPwWNel.js";import{_ as de}from"./StateChip.vue_vue_type_script_setup_true_lang-DyOhJmR6.js";import{_ as O}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{V as J}from"./VSwitch-CxusR4iO.js";const pe={class:"panel-header compact-header"},ve={class:"panel-title"},fe={class:"computer-operation-scroll"},ye=I({__name:"ComputerOperations",props:{operations:{},busy:{type:Boolean}},emits:["refresh"],setup(e,{emit:y}){const i=y,t=E(),{sourceLabel:l}=ae();function w(o){if(o.action==="snapshot")return t.t("$vuetify.chatroom.computer.log.snapshot");if(o.action==="settings.set")return t.t("$vuetify.chatroom.computer.log.settings");if(o.action!=="action")return o.action;const a=$(o.input),c=Array.isArray(a.actions)?a.actions:[];return c.length?c.map(b).join(" · "):t.t("$vuetify.chatroom.computer.log.action")}function b(o){const a=$(o),c=String(a.type??"action"),h=typeof a.elementId=="number"?` #${a.elementId}`:"";switch(c){case"activate_app":return t.t("$vuetify.chatroom.computer.log.activateApp",String(a.app??""));case"activate_window":return t.t("$vuetify.chatroom.computer.log.activateWindow",h.trim());case"click":return t.t("$vuetify.chatroom.computer.log.click",h.trim()||v(a));case"double_click":return t.t("$vuetify.chatroom.computer.log.doubleClick",h.trim()||v(a));case"right_click":return t.t("$vuetify.chatroom.computer.log.rightClick",h.trim()||v(a));case"move":return t.t("$vuetify.chatroom.computer.log.move",v(a));case"drag":return t.t("$vuetify.chatroom.computer.log.drag");case"scroll":return t.t("$vuetify.chatroom.computer.log.scroll",String(a.deltaY??0));case"keypress":return t.t("$vuetify.chatroom.computer.log.keypress",Array.isArray(a.keys)?a.keys.join("+"):"");case"type_text":case"set_value":return t.t("$vuetify.chatroom.computer.log.typeText",String(a.characters??0));case"invoke":return t.t("$vuetify.chatroom.computer.log.invoke",h.trim());case"select_text":return t.t("$vuetify.chatroom.computer.log.selectText",h.trim());case"move_window":return t.t("$vuetify.chatroom.computer.log.moveWindow",h.trim());case"resize_window":return t.t("$vuetify.chatroom.computer.log.resizeWindow",h.trim());case"wait":return t.t("$vuetify.chatroom.computer.log.wait",String(a.ms??0));default:return c}}function v(o){return`(${Math.round(Number(o.x??0))}, ${Math.round(Number(o.y??0))})`}function $(o){return o&&typeof o=="object"?o:{}}return(o,a)=>(p(),g(L,{rounded:"xl",variant:"flat",border:"",class:"panel-card"},{default:d(()=>[r("div",pe,[r("div",ve,n(s(t).t("$vuetify.chatroom.computer.recentOperations")),1),m(V,{size:"small",variant:"text",icon:"$mdiRefresh",loading:e.busy,"aria-label":s(t).t("$vuetify.chatroom.computer.refreshOperations"),onClick:a[0]||(a[0]=c=>i("refresh"))},null,8,["loading","aria-label"])]),m(x),r("div",fe,[e.operations.length?(p(),g(N,{key:0,lines:"two",density:"compact",class:"computer-operation-list"},{default:d(()=>[(p(!0),S(D,null,X(e.operations,c=>(p(),g(P,{key:c.operationId},{append:d(()=>[m(de,{value:c.status},null,8,["value"])]),default:d(()=>[m(oe,null,{default:d(()=>[B(n(w(c)),1)]),_:2},1024),m(re,null,{default:d(()=>[B(n(s(K)(c.startedAt,s(Z)(s(t).current.value)))+" · "+n(s(l)(c.source)),1)]),_:2},1024)]),_:2},1024))),128))]),_:1})):(p(),g(W,{key:1,class:"muted"},{default:d(()=>[B(n(s(t).t("$vuetify.chatroom.computer.noOperations")),1)]),_:1}))])]),_:1}))}}),he=O(ye,[["__scopeId","data-v-5fb7b261"]]),ge={class:"panel-header compact-header"},be={class:"computer-preview-heading"},$e={class:"panel-title"},we={key:0,class:"computer-preview-time"},_e={key:1,class:"computer-screen-shell"},ke=["src","alt"],Be={key:2,class:"computer-screen-empty"},Se={key:3,class:"computer-preview-meta"},Ce={class:"text-truncate"},Re=I({__name:"ComputerPreview",props:{preview:{},enabled:{type:Boolean},busy:{type:Boolean},remotePreviewBlocked:{type:Boolean}},emits:["refresh"],setup(e,{emit:y}){const i=e,t=y,l=E(),w=U(()=>{const v=i.preview?.screenshot;return v?`data:${v.mimeType};base64,${v.data}`:""}),b=U(()=>{const v=i.preview?.capturedAt;return v?K(v,Z(l.current.value)):""});return(v,$)=>(p(),g(L,{rounded:"xl",variant:"flat",border:"",class:"panel-card"},{default:d(()=>[r("div",ge,[r("div",be,[r("div",$e,n(s(l).t("$vuetify.chatroom.computer.latestScreen")),1),b.value?(p(),S("div",we,n(s(l).t("$vuetify.chatroom.computer.capturedAt",b.value)),1)):k("",!0)]),m(V,{size:"small",variant:"tonal","prepend-icon":"$mdiRefresh",loading:e.busy,disabled:!e.enabled,onClick:$[0]||($[0]=o=>t("refresh"))},{default:d(()=>[B(n(s(l).t("$vuetify.chatroom.computer.refreshScreen")),1)]),_:1},8,["loading","disabled"])]),m(x),m(W,{class:"computer-preview-content"},{default:d(()=>[e.remotePreviewBlocked?(p(),g(j,{key:0,type:"info",variant:"tonal",density:"compact",class:"mb-3"},{default:d(()=>[B(n(s(l).t("$vuetify.chatroom.computer.remoteDisabled")),1)]),_:1})):k("",!0),w.value?(p(),S("div",_e,[r("img",{src:w.value,alt:s(l).t("$vuetify.chatroom.computer.latestScreen")},null,8,ke)])):(p(),S("div",Be,[m(ie,{icon:"$mdiMonitorScreenshot",size:"42"}),r("span",null,n(s(l).t("$vuetify.chatroom.computer.noSnapshot")),1)])),e.preview?(p(),S("div",Se,[r("div",null,[r("span",null,n(s(l).t("$vuetify.chatroom.computer.activeApp")),1),r("strong",null,n(e.preview.activeApp||"—"),1)]),r("div",null,[r("span",null,n(s(l).t("$vuetify.chatroom.computer.activeWindow")),1),r("strong",Ce,n(e.preview.activeWindow||"—"),1)]),r("div",null,[r("span",null,n(s(l).t("$vuetify.chatroom.computer.elements")),1),r("strong",null,n(e.preview.elementCount),1)])])):k("",!0)]),_:1})]),_:1}))}}),qe=O(Re,[["__scopeId","data-v-78483d0f"]]),xe={class:"panel-header compact-header"},Ae={class:"panel-title"},Pe={class:"computer-status-row"},Ve={class:"computer-status-label"},Le={class:"computer-status-value"},Ie={class:"computer-status-row"},Oe={class:"computer-status-label"},Te={class:"computer-status-value"},ze={class:"computer-status-row"},Ne={class:"computer-status-label"},De={class:"computer-permission-value"},Ue={class:"computer-status-row"},Ee={class:"computer-status-label"},We={class:"computer-permission-value"},je={class:"panel-header compact-header"},Me={class:"panel-title"},Fe=I({__name:"ComputerStatus",props:{status:{},settingsBusy:{type:Boolean},permissionBusy:{},permissionRequestsAllowed:{type:Boolean}},emits:["updateSetting","requestPermission"],setup(e,{emit:y}){const i=y,t=E();function l(o){return t.t(`$vuetify.chatroom.computer.platformStates.${o}`)}function w(o){return t.t(`$vuetify.chatroom.computer.helperStates.${o}`)}function b(o){return t.t(`$vuetify.chatroom.computer.permissionStates.${o}`)}function v(o){return o==="granted"?"is-granted":o==="denied"?"is-denied":"is-muted"}function $(o){const a=o.primary?` · ${t.t("$vuetify.chatroom.computer.primaryDisplay")}`:"";return`${o.width}×${o.height} · ${o.scale}x${a}`}return(o,a)=>e.status?(p(),S(D,{key:0},[m(L,{rounded:"xl",variant:"flat",border:"",class:"panel-card"},{default:d(()=>[r("div",xe,[r("div",Ae,n(s(t).t("$vuetify.chatroom.computer.title")),1)]),m(x),m(W,{class:"computer-status-list"},{default:d(()=>[r("div",Pe,[r("span",Ve,n(s(t).t("$vuetify.chatroom.computer.platform")),1),r("strong",Le,n(l(e.status.platform)),1)]),r("div",Ie,[r("span",Oe,n(s(t).t("$vuetify.chatroom.computer.helper")),1),r("strong",Te,n(w(e.status.helper)),1)]),r("div",ze,[r("span",Ne,n(s(t).t("$vuetify.chatroom.computer.accessibility")),1),r("div",De,[r("strong",{class:H(["computer-permission-state",v(e.status.permissions.accessibility)])},n(b(e.status.permissions.accessibility)),3),e.status.platform==="macos"&&e.status.permissions.accessibility!=="granted"?(p(),g(V,{key:0,class:"computer-permission-btn",color:"primary",size:"small",variant:"tonal",loading:e.permissionBusy==="accessibility",disabled:!e.permissionRequestsAllowed||e.permissionBusy!==null,onClick:a[0]||(a[0]=c=>i("requestPermission","accessibility"))},{default:d(()=>[B(n(s(t).t("$vuetify.chatroom.computer.requestPermission")),1)]),_:1},8,["loading","disabled"])):k("",!0)])]),r("div",Ue,[r("span",Ee,n(s(t).t("$vuetify.chatroom.computer.screenRecording")),1),r("div",We,[r("strong",{class:H(["computer-permission-state",v(e.status.permissions.screenRecording)])},n(b(e.status.permissions.screenRecording)),3),e.status.platform==="macos"&&e.status.permissions.screenRecording!=="granted"?(p(),g(V,{key:0,class:"computer-permission-btn",color:"primary",size:"small",variant:"tonal",loading:e.permissionBusy==="screenRecording",disabled:!e.permissionRequestsAllowed||e.permissionBusy!==null,onClick:a[1]||(a[1]=c=>i("requestPermission","screenRecording"))},{default:d(()=>[B(n(s(t).t("$vuetify.chatroom.computer.requestPermission")),1)]),_:1},8,["loading","disabled"])):k("",!0)])]),e.status.platform==="macos"&&!e.permissionRequestsAllowed&&(e.status.permissions.accessibility!=="granted"||e.status.permissions.screenRecording!=="granted")?(p(),g(j,{key:0,type:"info",variant:"tonal",density:"compact",class:"computer-permission-alert"},{default:d(()=>[B(n(s(t).t("$vuetify.chatroom.computer.permissionLocalOnly")),1)]),_:1})):k("",!0)]),_:1}),m(x),m(N,{density:"compact",class:"computer-settings-list"},{default:d(()=>[m(P,{title:s(t).t("$vuetify.chatroom.computer.enabled")},{append:d(()=>[m(J,{"model-value":e.status.settings.enabled,disabled:e.settingsBusy,"onUpdate:modelValue":a[2]||(a[2]=c=>i("updateSetting","enabled",!!c))},null,8,["model-value","disabled"])]),_:1},8,["title"]),m(P,{title:s(t).t("$vuetify.chatroom.computer.remoteAccess")},{append:d(()=>[m(J,{"model-value":e.status.settings.remoteAccess,disabled:e.settingsBusy,"onUpdate:modelValue":a[3]||(a[3]=c=>i("updateSetting","remoteAccess",!!c))},null,8,["model-value","disabled"])]),_:1},8,["title"])]),_:1})]),_:1}),e.status.displays.length?(p(),g(L,{key:0,rounded:"xl",variant:"flat",border:"",class:"panel-card"},{default:d(()=>[r("div",je,[r("div",Me,n(s(t).t("$vuetify.chatroom.computer.displays")),1)]),m(x),m(N,{density:"compact",class:"computer-display-list"},{default:d(()=>[(p(!0),S(D,null,X(e.status.displays,c=>(p(),g(P,{key:c.id,title:c.name,subtitle:$(c)},null,8,["title","subtitle"]))),128))]),_:1})]),_:1})):k("",!0)],64)):k("",!0)}}),Ye=O(Fe,[["__scopeId","data-v-d7b81c3a"]]);function Ge(e){const y=_(null),i=_(null),t=_([]),l=_(""),w=_(!1),b=_(!1),v=_(!1),$=_(!1),o=_(null),a=z(),c=z(),h=z(),M=U(()=>["localhost","127.0.0.1","::1","[::1]"].includes(window.location.hostname));ne(e,()=>{T()}),ce(()=>{window.addEventListener("focus",G),T()}),ue(()=>{window.removeEventListener("focus",G)});async function T(){l.value="",await Promise.all([F(),A(),Y()])}async function F(){const u=a.begin();try{const f=await C("/computer/status",{signal:u.signal});a.isCurrent(u)&&(y.value=f)}catch(f){a.isCurrent(u)&&R(f)}}async function A(){const u=h.begin();try{const f=await C("/operations?pluginId=computer&limit=50",{signal:u.signal});h.isCurrent(u)&&(t.value=f)}catch(f){h.isCurrent(u)&&R(f)}}async function Y(){const u=c.begin();w.value=!1;try{const f=await C("/computer/preview",{signal:u.signal});c.isCurrent(u)&&(i.value=f)}catch(f){if(!c.isCurrent(u))return;if(He(f)){i.value=null,w.value=!0;return}R(f)}}async function G(){if(y.value?.platform!=="macos"||y.value.permissions.accessibility==="granted"&&y.value.permissions.screenRecording==="granted")return;const u=a.begin();try{const f=await C("/computer/status",{signal:u.signal});a.isCurrent(u)&&(y.value=f)}catch{}}async function Q(u,f){v.value=!0,l.value="",a.invalidate(),c.invalidate(),h.invalidate();try{await C("/computer/settings",{method:"PATCH",body:JSON.stringify({[u]:f})}),await Promise.all([F(),Y(),A()])}catch(q){R(q)}finally{v.value=!1}}async function ee(u){if(!M.value)return;o.value=u,l.value="";const f=u==="accessibility"?"/computer/permissions/accessibility/request":"/computer/permissions/screen-recording/request";a.invalidate();try{const q=await C(f,{method:"POST"});y.value=q}catch(q){R(q)}finally{o.value=null}}async function te(){b.value=!0,l.value="",c.invalidate();try{const u=await C("/computer/snapshot",{method:"POST"});i.value=u,await A()}catch(u){R(u)}finally{b.value=!1}}async function se(){$.value=!0,l.value="",await A(),$.value=!1}function R(u){l.value||(l.value=le(u))}return{status:y,preview:i,operations:t,error:l,remotePreviewBlocked:w,snapshotBusy:b,settingsBusy:v,operationsBusy:$,permissionBusy:o,permissionRequestsAllowed:M,load:T,updateSetting:Q,requestPermission:ee,refreshSnapshot:te,refreshOperations:se}}function He(e){return!(e instanceof me)||e.code!=="FORBIDDEN"||!e.details||typeof e.details!="object"?!1:"reason"in e.details&&e.details.reason==="remote_computer_disabled"}const Je={class:"computer-view"},Xe=I({__name:"ComputerView",props:{revision:{}},setup(e){const y=e,i=Ge(()=>y.revision);return(t,l)=>(p(),S("div",Je,[s(i).error.value?(p(),g(j,{key:0,type:"error",variant:"tonal"},{default:d(()=>[B(n(s(i).error.value),1)]),_:1})):k("",!0),m(qe,{preview:s(i).preview.value,enabled:s(i).status.value?.settings.enabled??!1,busy:s(i).snapshotBusy.value,"remote-preview-blocked":s(i).remotePreviewBlocked.value,onRefresh:s(i).refreshSnapshot},null,8,["preview","enabled","busy","remote-preview-blocked","onRefresh"]),m(he,{operations:s(i).operations.value,busy:s(i).operationsBusy.value,onRefresh:s(i).refreshOperations},null,8,["operations","busy","onRefresh"]),m(Ye,{status:s(i).status.value,"settings-busy":s(i).settingsBusy.value,"permission-busy":s(i).permissionBusy.value,"permission-requests-allowed":s(i).permissionRequestsAllowed.value,onUpdateSetting:s(i).updateSetting,onRequestPermission:s(i).requestPermission},null,8,["status","settings-busy","permission-busy","permission-requests-allowed","onUpdateSetting","onRequestPermission"])]))}}),at=O(Xe,[["__scopeId","data-v-25e35a6d"]]);export{at as default};
@@ -0,0 +1 @@
1
+ .mcp-tools-view[data-v-4147e542]{display:grid;gap:14px}.mcp-tools-refresh[data-v-4147e542]{flex:0 0 auto}.mcp-tool-group-header[data-v-4147e542],.mcp-tool-row[data-v-4147e542]{display:grid;grid-template-columns:minmax(0,1fr) 52px;align-items:center;column-gap:18px}.mcp-tool-group-header[data-v-4147e542]{min-height:56px;padding:10px 18px}.mcp-tool-list[data-v-4147e542]{display:grid}.mcp-tool-row[data-v-4147e542]{min-width:0;min-height:54px;padding:8px 18px;border-bottom:1px solid rgb(var(--v-theme-outline),.08)}.mcp-tool-row[data-v-4147e542]:last-child{border-bottom:0}.mcp-tool-copy[data-v-4147e542]{width:100%;min-width:0}.mcp-tool-heading[data-v-4147e542]{display:flex;min-width:0;align-items:baseline;gap:12px}.mcp-tool-heading strong[data-v-4147e542],.mcp-tool-heading code[data-v-4147e542]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mcp-tool-heading strong[data-v-4147e542]{flex:0 1 auto;font-size:13px;font-weight:650}.mcp-tool-heading code[data-v-4147e542]{flex:1 1 0;color:rgb(var(--v-theme-on-surface),.52);font-size:11px}.mcp-tool-switch[data-v-4147e542]{width:52px;min-width:52px;max-width:52px;justify-self:end}.mcp-tool-switch[data-v-4147e542] .v-input__control,.mcp-tool-switch[data-v-4147e542] .v-selection-control{width:52px;min-width:52px;max-width:52px}.mcp-tool-switch[data-v-4147e542] .v-selection-control{flex:0 0 52px}@media(max-width:640px){.mcp-tools-view[data-v-4147e542]{gap:12px}.mcp-tool-group-header[data-v-4147e542],.mcp-tool-row[data-v-4147e542]{column-gap:10px;padding-inline:14px}.mcp-tool-group-header[data-v-4147e542]{min-height:54px}.mcp-tool-row[data-v-4147e542]{min-height:52px;padding-block:7px}.mcp-tool-heading[data-v-4147e542]{gap:8px}}@media(max-width:380px){.mcp-tool-group-header[data-v-4147e542],.mcp-tool-row[data-v-4147e542]{column-gap:8px;padding-inline:12px}.mcp-tool-heading[data-v-4147e542]{gap:6px}}
@@ -0,0 +1 @@
1
+ import{d as N,a as q,T as P,a8 as R,U as x,W as $,o as n,n as v,c as f,b as h,r as S,t as r,q as z,p as g,e as m,g as l,h as _,i as A,V as b,L as B,X as I,y as w,z as D,_ as G,j,aw as F}from"./index-BegKQ3Yd.js";import{V as U}from"./VSwitch-CxusR4iO.js";import{_ as H}from"./_plugin-vue_export-helper-DlAUqK2U.js";const J={class:"mcp-tools-view"},O={class:"panel-header"},W={class:"panel-title"},X={class:"mcp-tool-group-header"},K={class:"min-w-0"},Q={class:"panel-title"},Y={class:"mcp-tool-list"},Z=["title"],ee={class:"mcp-tool-heading"},ae={class:"empty-inline"},te=N({__name:"McpToolsView",setup(se){const d=q(),o=w([]),u=w(!1),i=w(""),c=F(new Set),p=P(),E=D(()=>{const e=new Map;for(const a of o.value){const t=e.get(a.pluginId)??[];t.push(a),e.set(a.pluginId,t)}return[...e.entries()].map(([a,t])=>({pluginId:a,tools:t}))});R(()=>{V()});async function V(){const e=p.begin();u.value=!0,i.value="";try{const a=await x("/mcp/tools",{signal:e.signal});p.isCurrent(e)&&(o.value=a)}catch(a){p.isCurrent(e)&&(i.value=$(a))}finally{p.isCurrent(e)&&(u.value=!1)}}async function k(e,a){if(!(c.has(e.name)||e.enabled===a)){c.add(e.name),i.value="";try{const t=await x(`/mcp/tools/${encodeURIComponent(e.name)}`,{method:"PATCH",body:JSON.stringify({enabled:a})}),s=o.value.findIndex(y=>y.name===t.name);s>=0&&(o.value[s]=t)}catch(t){i.value=$(t)}finally{c.delete(e.name)}}}async function L(e,a){const t=e.tools.filter(s=>s.enabled!==a&&!c.has(s.name));await Promise.all(t.map(s=>k(s,a)))}function C(e){return["workspace","process","computer"].includes(e)?d.t(`$vuetify.chatroom.mcpTools.plugins.${e}`):e}function M(e){return e.tools.some(a=>a.enabled)}function T(e){return e.tools.every(a=>a.enabled)}return(e,a)=>(n(),v("div",J,[i.value?(n(),f(z,{key:0,type:"error",variant:"tonal",density:"compact"},{default:h(()=>[S(r(i.value),1)]),_:1})):g("",!0),m(b,{class:"panel-card"},{default:h(()=>[l("div",O,[l("div",null,[l("div",W,r(_(d).t("$vuetify.chatroom.mcpTools.title")),1)]),m(A,{class:"mcp-tools-refresh",icon:"$mdiRefresh",size:"small",variant:"text",loading:u.value,"aria-label":_(d).t("$vuetify.chatroom.mcpTools.refresh"),onClick:V},null,8,["loading","aria-label"])])]),_:1}),u.value&&!o.value.length?(n(),f(G,{key:1,indeterminate:"",rounded:""})):g("",!0),(n(!0),v(B,null,I(E.value,t=>(n(),f(b,{key:t.pluginId,class:"panel-card mcp-tool-group"},{default:h(()=>[l("div",X,[l("div",K,[l("div",Q,r(C(t.pluginId)),1)]),m(U,{class:"mcp-tool-switch","model-value":T(t),indeterminate:M(t)&&!T(t),color:"primary",density:"compact","hide-details":"",inset:"",disabled:t.tools.some(s=>c.has(s.name)),"aria-label":_(d).t("$vuetify.chatroom.mcpTools.togglePlugin",C(t.pluginId)),"onUpdate:modelValue":s=>L(t,!!s)},null,8,["model-value","indeterminate","disabled","aria-label","onUpdate:modelValue"])]),m(j),l("div",Y,[(n(!0),v(B,null,I(t.tools,s=>(n(),v("div",{key:s.name,class:"mcp-tool-row"},[l("div",{class:"mcp-tool-copy",title:s.description},[l("div",ee,[l("strong",null,r(s.title),1),l("code",null,r(s.name),1)])],8,Z),m(U,{class:"mcp-tool-switch","model-value":s.enabled,color:"primary",density:"compact","hide-details":"",inset:"",loading:c.has(s.name),"aria-label":s.name,"onUpdate:modelValue":y=>k(s,!!y)},null,8,["model-value","loading","aria-label","onUpdate:modelValue"])]))),128))])]),_:2},1024))),128)),!u.value&&!o.value.length?(n(),f(b,{key:2,class:"panel-card"},{default:h(()=>[l("div",ae,r(_(d).t("$vuetify.chatroom.mcpTools.empty")),1)]),_:1})):g("",!0)]))}}),ie=H(te,[["__scopeId","data-v-4147e542"]]);export{ie as default};
@@ -0,0 +1,4 @@
1
+ import{d as P,a as Z,o as v,n as C,L as te,X as re,t as a,h as e,R as ue,g as s,e as l,c as _,b as o,i as I,p as k,a1 as ce,j as H,r as y,V as U,y as g,D as de,T as Q,w as z,a9 as ve,U as B,W as D,ab as Y,aZ as fe,q as ee,au as me,f as pe,k as ye,s as he,v as ge}from"./index-BegKQ3Yd.js";import{u as ae}from"./useOperationLabels-BDjzGDkT.js";import{c as $e,a as _e,d as ke}from"./utils-rtPwWNel.js";import{_ as le}from"./StateChip.vue_vue_type_script_setup_true_lang-DyOhJmR6.js";import{_ as O}from"./CodeViewer.vue_vue_type_script_setup_true_lang-B5TxGkUW.js";import{V as be,a as j,b as Ve,c as G}from"./VTabs-qBcuuXh3.js";import{V as we}from"./VSpacer-C3wAY3F0.js";const Ce={key:0,class:"responsive-record-list"},xe=["onClick"],Ie={class:"responsive-record-main"},Te={class:"responsive-record-title"},Le={class:"responsive-record-subtitle mono"},Be={class:"responsive-record-meta"},De={class:"responsive-record-side"},Me={key:1,class:"empty-inline"},Ae=P({__name:"OperationTable",props:{events:{},selected:{}},emits:["select"],setup(i){const b=Z(),{actionLabel:c,sourceLabel:m}=ae();return(V,w)=>i.events.length?(v(),C("div",Ce,[(v(!0),C(te,null,re(i.events,u=>(v(),C("button",{key:u.operationId,type:"button",class:ue(["responsive-record-row",{"selected-row":i.selected===u.operationId}]),onClick:d=>V.$emit("select",u)},[s("div",Ie,[s("div",Te,a(e(c)(u.action)),1),s("div",Le,a(u.pluginId),1)]),s("div",Be,[s("span",null,a(e($e)(u.startedAt)),1),s("span",null,a(e(m)(u.source)),1),s("span",null,a(u.durationMs===null?e(b).t("$vuetify.chatroom.statuses.running"):e(_e)(u.durationMs)),1)]),s("div",De,[l(le,{value:u.status},null,8,["value"])])],10,xe))),128))])):(v(),C("div",Me,a(e(b).t("$vuetify.chatroom.operations.empty")),1))}}),qe={class:"panel-header operation-detail-header"},ze={class:"min-w-0 detail-header-title"},Oe={class:"panel-title text-truncate"},Ue={class:"panel-subtitle"},Se={class:"detail-facts"},Ee={class:"mono"},Re={key:0},Ne={class:"mono"},We={class:"empty-panel"},je=P({__name:"OperationDetail",props:{event:{},showBack:{type:Boolean}},emits:["back"],setup(i){const b=g("input"),c=Z(),{actionLabel:m,sourceLabel:V}=ae();function w(u){if(!u||typeof u!="object"||Array.isArray(u))return null;const d=u;if(typeof d.stdout!="string"&&typeof d.stderr!="string")return null;const f=typeof d.stdout=="string"?d.stdout:"",x=typeof d.stderr=="string"&&d.stderr?`
2
+
3
+ [stderr]
4
+ ${d.stderr}`:"";return`${f}${x}`}return(u,d)=>i.event?(v(),_(U,{key:0,class:"panel-card"},{default:o(()=>[s("div",qe,[i.showBack?(v(),_(I,{key:0,icon:"$mdiArrowLeft",size:"small",variant:"text","aria-label":e(c).t("$vuetify.chatroom.operations.back"),onClick:d[0]||(d[0]=f=>u.$emit("back"))},null,8,["aria-label"])):k("",!0),s("div",ze,[s("div",Oe,a(e(m)(i.event.action)),1),s("div",Ue,a(e(V)(i.event.source))+" · "+a(e(ke)(i.event.startedAt,e(ce)(e(c).current.value))),1)]),l(le,{value:i.event.status},null,8,["value"])]),l(H),s("div",Se,[s("div",null,[s("span",null,a(e(c).t("$vuetify.chatroom.detail.plugin")),1),s("strong",Ee,a(i.event.pluginId),1)]),s("div",null,[s("span",null,a(e(c).t("$vuetify.chatroom.detail.duration")),1),s("strong",null,a(i.event.durationMs===null?e(c).t("$vuetify.chatroom.statuses.running"):`${i.event.durationMs} ms`),1)]),i.event.processId?(v(),C("div",Re,[s("span",null,a(e(c).t("$vuetify.chatroom.detail.process")),1),s("strong",Ne,a(i.event.processId.slice(0,16)),1)])):k("",!0)]),l(be,{modelValue:b.value,"onUpdate:modelValue":d[1]||(d[1]=f=>b.value=f),density:"compact",class:"detail-tabs"},{default:o(()=>[l(j,{value:"input"},{default:o(()=>[y(a(e(c).t("$vuetify.chatroom.detail.input")),1)]),_:1}),l(j,{value:"output"},{default:o(()=>[y(a(e(c).t("$vuetify.chatroom.detail.output")),1)]),_:1}),i.event.error?(v(),_(j,{key:0,value:"failure"},{default:o(()=>[y(a(e(c).t("$vuetify.chatroom.detail.error")),1)]),_:1})):k("",!0)]),_:1},8,["modelValue"]),l(H),l(Ve,{modelValue:b.value,"onUpdate:modelValue":d[2]||(d[2]=f=>b.value=f),touch:!1},{default:o(()=>[l(G,{value:"input",class:"pa-3"},{default:o(()=>[l(O,{value:i.event.input},null,8,["value"])]),_:1}),l(G,{value:"output",class:"pa-3"},{default:o(()=>[w(i.event.output)!==null?(v(),_(O,{key:0,text:w(i.event.output)??"",filename:"operation-terminal.txt"},null,8,["text"])):(v(),_(O,{key:1,value:i.event.output},null,8,["value"]))]),_:1}),i.event.error?(v(),_(G,{key:0,value:"failure",class:"pa-3"},{default:o(()=>[l(O,{value:i.event.error},null,8,["value"])]),_:1})):k("",!0)]),_:1},8,["modelValue"])]),_:1})):(v(),_(U,{key:1,class:"panel-card"},{default:o(()=>[s("div",We,a(e(c).t("$vuetify.chatroom.operations.select")),1)]),_:1}))}}),Ge={key:0,class:"master-pane"},He={class:"panel-header operations-header"},Pe={class:"panel-title"},Ze={class:"panel-subtitle"},Fe={class:"operations-controls"},Xe={key:1,class:"detail-pane"},M=50,lt=P({__name:"OperationsView",props:{revision:{}},setup(i){const b=i,c=g([]),m=g(null),V=g(null),w=g("all"),u=g(!1),d=g(!1),f=g(!1),x=g(!1),h=g(""),S=g(null),$=Z(),{mdAndDown:T}=de(),F=g(null),p=Q(),A=Q();let L=null;z(w,()=>{X()},{immediate:!0}),z(()=>b.revision,()=>{se()}),z(m,()=>{N()}),z(S,t=>{L?.disconnect(),L=null,t&&(L=new IntersectionObserver(n=>{n.some(r=>r.isIntersecting)&&J()},{rootMargin:"240px 0px"}),L.observe(t))},{flush:"post"}),ve(()=>L?.disconnect());function E(t,n=0){const r=w.value==="all"?"":`&status=${encodeURIComponent(w.value)}`;return`/operations?limit=${t}&offset=${n}${r}`}async function X(){const t=p.begin();f.value=!0,h.value="";try{const n=await B(E(M),{signal:t.signal});if(!p.isCurrent(t))return;c.value=n,x.value=n.length===M,m.value&&await N()}catch(n){p.isCurrent(t)&&(h.value=D(n))}finally{p.isCurrent(t)&&(f.value=!1)}await R()}async function J(){if(f.value||!x.value)return;const t=p.begin(),n=c.value.length;f.value=!0;try{const r=await B(E(M,n),{signal:t.signal});if(!p.isCurrent(t))return;c.value.push(...r),x.value=r.length===M}catch(r){p.isCurrent(t)&&(h.value=D(r))}finally{p.isCurrent(t)&&(f.value=!1)}await R()}async function se(){const t=p.begin();f.value=!0,h.value="";const n=Math.max(c.value.length,M),r=[];let K=0;try{for(;r.length<n;){const q=Math.min(500,n-r.length),W=await B(E(q,K),{signal:t.signal});if(!p.isCurrent(t))return;if(r.push(...W),W.length<q)break;K+=W.length}c.value=r,x.value=r.length>=n,m.value&&await N()}catch(q){p.isCurrent(t)&&(h.value=D(q))}finally{p.isCurrent(t)&&(f.value=!1)}p.isCurrent(t)&&await R()}async function R(){await Y();const t=S.value;!t||f.value||!x.value||t.getBoundingClientRect().top<=window.innerHeight+240&&J()}async function N(){const t=A.begin(),n=m.value;if(!n){V.value=null;return}try{const r=await B(`/operations/${n}`,{signal:t.signal});A.isCurrent(t)&&m.value===n&&(V.value=r)}catch(r){A.isCurrent(t)&&(h.value=D(r))}}function ne(t){m.value=t.operationId,T.value&&Y(()=>F.value?.scrollIntoView({behavior:"smooth",block:"start"}))}function oe(){m.value=null,V.value=null}async function ie(){d.value=!0,h.value="",p.invalidate(),A.invalidate(),f.value=!1;try{await B("/operations",{method:"DELETE"}),m.value=null,V.value=null,u.value=!1,await X()}catch(t){h.value=D(t)}finally{d.value=!1}}return(t,n)=>(v(),C(te,null,[s("div",{ref_key:"layout",ref:F,class:"master-detail-layout operations-layout"},[!e(T)||!m.value?(v(),C("div",Ge,[l(U,{class:"panel-card"},{default:o(()=>[s("div",He,[s("div",null,[s("div",Pe,a(e($).t("$vuetify.chatroom.operations.title")),1),s("div",Ze,a(e($).t("$vuetify.chatroom.operations.subtitle")),1)]),s("div",Fe,[l(fe,{modelValue:w.value,"onUpdate:modelValue":n[0]||(n[0]=r=>w.value=r),mandatory:"",variant:"text",class:"operation-filters"},{default:o(()=>[l(I,{value:"all",size:"small"},{default:o(()=>[y(a(e($).t("$vuetify.chatroom.operations.all")),1)]),_:1}),l(I,{value:"running",size:"small"},{default:o(()=>[y(a(e($).t("$vuetify.chatroom.operations.running")),1)]),_:1}),l(I,{value:"error",size:"small"},{default:o(()=>[y(a(e($).t("$vuetify.chatroom.operations.errors")),1)]),_:1}),l(I,{value:"success",size:"small"},{default:o(()=>[y(a(e($).t("$vuetify.chatroom.operations.success")),1)]),_:1})]),_:1},8,["modelValue"]),l(I,{"prepend-icon":"$mdiDeleteSweepOutline",variant:"text",size:"small",class:"operations-clear",disabled:!c.value.length,onClick:n[1]||(n[1]=r=>u.value=!0)},{default:o(()=>[y(a(e($).t("$vuetify.chatroom.operations.clear")),1)]),_:1},8,["disabled"])])]),l(H),h.value?(v(),_(ee,{key:0,type:"error",variant:"tonal",density:"compact"},{default:o(()=>[y(a(h.value),1)]),_:1})):k("",!0),l(Ae,{events:c.value,selected:m.value,onSelect:ne},null,8,["events","selected"]),x.value||f.value?(v(),C("div",{key:1,ref_key:"loadSentinel",ref:S,class:"operation-load-sentinel","aria-hidden":"true"},[f.value?(v(),_(me,{key:0,indeterminate:"",size:"20",width:"2"})):k("",!0)],512)):k("",!0)]),_:1})])):k("",!0),!e(T)||m.value?(v(),C("div",Xe,[e(T)&&m.value&&h.value?(v(),_(ee,{key:0,type:"error",variant:"tonal",density:"compact"},{default:o(()=>[y(a(h.value),1)]),_:1})):k("",!0),l(je,{event:V.value,"show-back":e(T),onBack:oe},null,8,["event","show-back"])])):k("",!0)],512),l(ge,{modelValue:u.value,"onUpdate:modelValue":n[3]||(n[3]=r=>u.value=r),"max-width":"430"},{default:o(()=>[l(U,null,{default:o(()=>[l(pe,null,{default:o(()=>[y(a(e($).t("$vuetify.chatroom.operations.clearTitle")),1)]),_:1}),l(ye,null,{default:o(()=>[y(a(e($).t("$vuetify.chatroom.operations.clearDescription")),1)]),_:1}),l(he,null,{default:o(()=>[l(we),l(I,{variant:"text",onClick:n[2]||(n[2]=r=>u.value=!1)},{default:o(()=>[y(a(e($).t("$vuetify.chatroom.common.cancel")),1)]),_:1}),l(I,{color:"error",variant:"flat",loading:d.value,onClick:ie},{default:o(()=>[y(a(e($).t("$vuetify.chatroom.operations.clearConfirm")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}});export{lt as default};
@@ -0,0 +1,4 @@
1
+ import{d as Q,a as ee,D as se,T as N,w as T,U as z,W as O,as as te,o as c,n as p,h as t,e as i,b as u,g as e,t as o,j as w,N as S,p as m,L as ae,X as oe,m as q,at as B,R as j,a1 as le,c as _,i as h,au as re,av as M,Y as R,Z as E,am as F,V as D,r as ne,y,z as K,ab as ie}from"./index-BegKQ3Yd.js";import{d as ce,a as de}from"./utils-rtPwWNel.js";import{_ as H}from"./CodeViewer.vue_vue_type_script_setup_true_lang-B5TxGkUW.js";import{_ as U}from"./StateChip.vue_vue_type_script_setup_true_lang-DyOhJmR6.js";import"./VSpacer-C3wAY3F0.js";const ue={key:0,class:"master-pane"},pe={class:"panel-header"},ve={class:"panel-title"},me={class:"panel-subtitle"},_e={key:0,class:"processes-error",role:"alert"},fe={key:1,class:"process-record-list",role:"grid"},he={class:"process-record-header",role:"row"},ye={role:"columnheader"},$e={role:"columnheader"},ge={role:"columnheader"},ke={class:"process-record-duration",role:"columnheader"},Ce={role:"columnheader"},be=["aria-selected","onClick","onKeydown"],we={class:"process-record-main"},xe=["title"],Ie=["title"],Ve={class:"process-record-meta"},ze={class:"process-record-started",role:"gridcell"},Oe={class:"process-record-duration",role:"gridcell"},De={class:"process-record-side",role:"gridcell"},Ae={key:2,class:"empty-inline"},Pe={key:1,class:"detail-pane"},Le={class:"panel-header process-detail-header"},Ne={class:"min-w-0 detail-header-title"},Te={class:"panel-title text-truncate"},Se={class:"panel-subtitle mono text-truncate"},qe={class:"process-detail-actions"},Be={class:"process-output"},je={class:"process-full-command"},Me={class:"process-full-command-label"},Re={class:"detail-facts"},Ee={class:"empty-panel"},Ge=Q({__name:"ProcessesView",props:{revision:{}},setup(Z){const G=Z,x=y([]),d=y(null),l=y(null),v=y(""),r=ee(),{mdAndDown:$}=se(),A=y(null),g=N(),k=N(),W=K(()=>{if(!l.value)return"";const a=l.value.stderr?`
2
+
3
+ [stderr]
4
+ ${l.value.stderr}`:"";return`${l.value.stdout}${a}`}),X=K(()=>l.value?[l.value.command,...l.value.args].map(Y).join(" "):"");function Y(a){return a?/^[A-Za-z0-9_@%+=:,./-]+$/.test(a)?a:`'${a.replaceAll("'","'\\''")}'`:"''"}T(()=>G.revision,()=>{C()},{immediate:!0}),T(d,()=>{P()});async function C(){const a=g.begin();v.value="";try{const n=await z("/processes",{signal:a.signal});if(!g.isCurrent(a))return;if(x.value=n,d.value&&!n.some(s=>s.processId===d.value)){V();return}d.value&&await P()}catch(n){g.isCurrent(a)&&(v.value=O(n))}}async function P(){const a=k.begin(),n=d.value;if(!n){l.value=null;return}try{const s=await z(`/processes/${n}`,{signal:a.signal});k.isCurrent(a)&&d.value===n&&(l.value=s)}catch(s){if(!k.isCurrent(a))return;if(L(s)){V(),C();return}v.value=O(s)}}function I(a){d.value=a,$.value&&ie(()=>A.value?.scrollIntoView({behavior:"smooth",block:"start"}))}function V(){d.value=null,l.value=null}function J(){V()}async function b(a,n){g.invalidate(),k.invalidate(),v.value="";try{await z(`/processes/${a}/${n?"kill":"terminate"}`,{method:"POST"}),await C()}catch(s){if(L(s)){await C();return}v.value=O(s)}}function L(a){return a instanceof te&&(a.code==="NOT_FOUND"||a.code==="CONFLICT")}return(a,n)=>(c(),p("div",{ref_key:"layout",ref:A,class:"master-detail-layout processes-layout"},[!t($)||!d.value?(c(),p("div",ue,[i(D,{class:"panel-card"},{default:u(()=>[e("div",pe,[e("div",null,[e("div",ve,o(t(r).t("$vuetify.chatroom.processes.title")),1),e("div",me,o(t(r).t("$vuetify.chatroom.processes.subtitle")),1)])]),i(w),v.value?(c(),p("div",_e,[i(S,{icon:"$mdiAlertCircleOutline",size:"18"}),e("span",null,o(v.value),1)])):m("",!0),x.value.length?(c(),p("div",fe,[e("div",he,[e("span",ye,o(t(r).t("$vuetify.chatroom.processes.command")),1),e("span",$e,o(t(r).t("$vuetify.chatroom.processes.arguments")),1),e("span",ge,o(t(r).t("$vuetify.chatroom.processes.started")),1),e("span",ke,o(t(r).t("$vuetify.chatroom.processes.duration")),1),e("span",Ce,o(t(r).t("$vuetify.chatroom.processes.state")),1)]),(c(!0),p(ae,null,oe(x.value,s=>(c(),p("div",{key:s.processId,role:"row",tabindex:"0",class:j(["process-record-row",{"selected-row":d.value===s.processId}]),"aria-selected":d.value===s.processId,onClick:f=>I(s.processId),onKeydown:[q(f=>I(s.processId),["enter"]),q(B(f=>I(s.processId),["prevent"]),["space"])]},[e("div",we,[e("div",{class:"process-record-command mono",role:"gridcell",title:s.command},o(s.command),9,xe),e("div",{class:j(["process-record-args mono",{muted:!s.args.length}]),role:"gridcell",title:s.args.join(" ")},o(s.args.length?s.args.join(" "):"—"),11,Ie)]),e("div",Ve,[e("div",ze,o(t(ce)(s.startedAt,t(le)(t(r).current.value))),1),e("div",Oe,o(t(de)(s.durationMs)),1)]),e("div",De,[s.state!=="running"?(c(),_(U,{key:0,value:s.state},null,8,["value"])):(c(),p("div",{key:1,class:"process-actions",onClick:n[0]||(n[0]=B(()=>{},["stop"]))},[i(h,{size:"x-small",variant:"text",class:"table-action-btn","aria-label":t(r).t("$vuetify.chatroom.processes.terminate"),onClick:f=>b(s.processId,!1)},{default:u(()=>[i(re,{indeterminate:"",color:"warning",size:22,width:2},{default:u(()=>[i(S,{icon:"$mdiStop",size:"12"})]),_:1})]),_:1},8,["aria-label","onClick"]),i(M,null,{activator:u(({props:f})=>[i(h,F({ref_for:!0},f,{icon:"$mdiDotsHorizontal",size:"x-small",variant:"text",class:"table-action-btn","aria-label":t(r).t("$vuetify.chatroom.processes.moreActions")}),null,16,["aria-label"])]),default:u(()=>[i(R,{density:"compact"},{default:u(()=>[i(E,{title:t(r).t("$vuetify.chatroom.processes.kill"),"prepend-icon":"$mdiCloseOctagonOutline",onClick:f=>b(s.processId,!0)},null,8,["title","onClick"])]),_:2},1024)]),_:2},1024)]))])],42,be))),128))])):(c(),p("div",Ae,o(t(r).t("$vuetify.chatroom.processes.empty")),1))]),_:1})])):m("",!0),!t($)||d.value?(c(),p("div",Pe,[l.value?(c(),_(D,{key:0,class:"panel-card process-detail-card"},{default:u(()=>[e("div",Le,[t($)?(c(),_(h,{key:0,icon:"$mdiArrowLeft",size:"small",variant:"text","aria-label":t(r).t("$vuetify.chatroom.processes.back"),onClick:J},null,8,["aria-label"])):m("",!0),e("div",Ne,[e("div",Te,o(l.value.command),1),e("div",Se,o(l.value.processId),1)]),e("div",qe,[l.value.state!=="running"?(c(),_(U,{key:0,value:l.value.state},null,8,["value"])):m("",!0),l.value.state==="running"?(c(),_(h,{key:1,"prepend-icon":"$mdiStopCircleOutline",size:"x-small",variant:"tonal",color:"warning",class:"detail-action-btn",onClick:n[1]||(n[1]=s=>b(l.value.processId,!1))},{default:u(()=>[ne(o(t(r).t("$vuetify.chatroom.processes.terminate")),1)]),_:1})):m("",!0),l.value.state==="running"?(c(),_(M,{key:2},{activator:u(({props:s})=>[i(h,F(s,{icon:"$mdiDotsHorizontal",size:"x-small",variant:"text",class:"detail-icon-btn","aria-label":t(r).t("$vuetify.chatroom.processes.moreActions")}),null,16,["aria-label"])]),default:u(()=>[i(R,{density:"compact"},{default:u(()=>[i(E,{title:t(r).t("$vuetify.chatroom.processes.kill"),"prepend-icon":"$mdiCloseOctagonOutline",onClick:n[2]||(n[2]=s=>b(l.value.processId,!0))},null,8,["title"])]),_:1})]),_:1})):m("",!0)])]),i(w),e("div",Be,[i(H,{text:W.value,filename:"output.txt"},null,8,["text"])]),i(w),e("div",je,[e("div",Me,o(t(r).t("$vuetify.chatroom.processes.fullCommand")),1),i(H,{text:X.value,filename:"command.sh",language:"bash",toolbar:!1},null,8,["text"])]),i(w),e("div",Re,[e("div",null,[n[3]||(n[3]=e("span",null,"PID",-1)),e("strong",null,o(l.value.pid??"—"),1)]),e("div",null,[e("span",null,o(t(r).t("$vuetify.chatroom.processes.exit")),1),e("strong",null,o(l.value.exitCode??"—"),1)]),e("div",null,[e("span",null,o(t(r).t("$vuetify.chatroom.processes.timeout")),1),e("strong",null,o(l.value.timedOut?t(r).t("$vuetify.chatroom.processes.yes"):t(r).t("$vuetify.chatroom.processes.no")),1)])])]),_:1})):(c(),_(D,{key:1,class:"panel-card"},{default:u(()=>[e("div",Ee,o(t(r).t("$vuetify.chatroom.processes.select")),1)]),_:1}))])):m("",!0)],512))}});export{Ge as default};
@@ -0,0 +1 @@
1
+ import{d as n,a as i,o as u,c as d,b as p,r as v,t as m,a2 as f,z as s,br as C}from"./index-BegKQ3Yd.js";const h=n({__name:"StateChip",props:{value:{}},setup(l){const e=l,r=i(),t=s(()=>({running:"warning",success:"success",exited:"success",error:"error",failed:"error",cancelled:"default",killed:"default"})[e.value]??"default"),c=s(()=>e.value==="running"?"$mdiProgressClock":e.value==="success"||e.value==="exited"?"$mdiCheckCircleOutline":e.value==="error"||e.value==="failed"?"$mdiAlertCircleOutline":"$mdiCircleOutline"),o=s(()=>{const a=C(e.value);return a?r.t(a):e.value});return(a,_)=>(u(),d(f,{class:"state-chip",color:t.value,"prepend-icon":c.value,size:"small",variant:"tonal"},{default:p(()=>[v(m(o.value),1)]),_:1},8,["color","prepend-icon"]))}});export{h as _};
@@ -0,0 +1 @@
1
+ import{d as X,a as H,D as Q,T as I,w as Y,a8 as ee,a9 as te,U as O,W as q,o as u,n as r,h as o,e as c,b as y,g as e,t as a,i as b,aZ as le,L as E,X as A,c as x,r as R,j as U,N as se,p as g,R as ae,a2 as oe,V as z,a1 as ne,y as v,z as B}from"./index-BegKQ3Yd.js";import{c as ie,d as ue}from"./utils-rtPwWNel.js";import{_ as re}from"./CodeViewer.vue_vue_type_script_setup_true_lang-B5TxGkUW.js";import{V as ce}from"./VSelect-DrRpKyYI.js";import"./VSpacer-C3wAY3F0.js";const de={class:"master-detail-layout system-logs-layout"},me={key:0,class:"master-pane"},ve={class:"panel-header system-logs-header"},fe={class:"panel-title"},ye={class:"panel-subtitle"},ge={class:"system-log-controls"},pe={key:0,class:"processes-error",role:"alert"},_e={key:1,class:"system-log-list",role:"grid"},he={class:"system-log-header",role:"row"},Le={role:"columnheader"},Ce={role:"columnheader"},ke={role:"columnheader"},$e={role:"columnheader"},we=["aria-selected","onClick"],Ve=["title"],be={class:"system-log-level",role:"gridcell"},xe={class:"system-log-module mono",role:"gridcell"},Se={class:"system-log-message",role:"gridcell"},Ne={class:"mono"},Ee={key:2,class:"empty-inline"},Re={key:3,class:"system-log-load-more"},Ue={key:1,class:"detail-pane"},ze={class:"panel-header compact-header"},Be={class:"min-w-0 detail-header-title"},De={class:"panel-title text-truncate"},Me={class:"panel-subtitle mono text-truncate"},Ie={class:"detail-facts system-log-facts"},Oe={class:"system-log-detail-data"},qe={class:"process-full-command-label"},Ae={class:"empty-panel"},Te=100,Ze=X({__name:"SystemLogsView",setup(je){const T=["app","http","auth","cloud","plugin","mcp"],n=H(),{mdAndDown:S}=Q(),m=v([]),i=v(null),f=v("all"),d=v("all"),_=v(null),h=v(!1),L=v(!1),p=v(""),$=I(),C=I();let k=null,w=!1;const j=B(()=>[{title:n.t("$vuetify.chatroom.systemLogs.allLevels"),value:"all"},{title:"INFO",value:"info"},{title:"WARN",value:"warn"},{title:"ERROR",value:"error"},{title:"DEBUG",value:"debug"}]),F=B(()=>{const l=new Set(T);for(const t of m.value)l.add(t.module);return d.value!=="all"&&l.add(d.value),[{title:n.t("$vuetify.chatroom.systemLogs.allModules"),value:"all"},...[...l].sort((t,s)=>t.localeCompare(s)).map(t=>({title:t,value:t}))]}),D=B(()=>i.value?.data?JSON.stringify(i.value.data,null,2):"");Y([f,d],()=>{w&&N()}),ee(()=>{w=!0,N().finally(()=>{w&&W()})}),te(()=>{w=!1,k?.close(),k=null});async function N(){C.invalidate(),L.value=!1;const l=$.begin();h.value=!0,p.value="";try{const t=await O(M(),{signal:l.signal});if(!$.isCurrent(l))return;m.value=t.items,_.value=t.nextCursor,i.value&&(i.value=t.items.find(s=>s.id===i.value?.id)??null)}catch(t){$.isCurrent(l)&&(p.value=q(t))}finally{$.isCurrent(l)&&(h.value=!1)}}async function G(){if(h.value||!_.value||L.value)return;const l=C.begin();L.value=!0,p.value="";try{const t=await O(M(_.value),{signal:l.signal});if(!C.isCurrent(l))return;const s=new Set(m.value.map(V=>V.id));m.value.push(...t.items.filter(V=>!s.has(V.id))),_.value=t.nextCursor}catch(t){C.isCurrent(l)&&(p.value=q(t))}finally{C.isCurrent(l)&&(L.value=!1)}}function M(l){const t=new URLSearchParams({limit:String(Te)});return f.value!=="all"&&t.set("level",f.value),d.value!=="all"&&t.set("module",d.value),l&&t.set("cursor",l),`/logs?${t}`}function W(){k?.close(),k=new EventSource("/api/logs/stream"),k.addEventListener("log",l=>{const t=J(l);!t||!P(t)||m.value.some(s=>s.id===t.id)||m.value.unshift(t)})}function J(l){if(!(l instanceof MessageEvent)||typeof l.data!="string")return null;try{const t=JSON.parse(l.data);return typeof t?.id=="string"&&typeof t?.message=="string"?t:null}catch{return null}}function P(l){return(f.value==="all"||l.level===f.value)&&(d.value==="all"||l.module===d.value)}function Z(l){if(l==="error")return"error";if(l==="warn")return"warning";if(l==="info")return"primary"}function K(){i.value=null}return(l,t)=>(u(),r("div",de,[!o(S)||!i.value?(u(),r("div",me,[c(z,{class:"panel-card"},{default:y(()=>[e("div",ve,[e("div",null,[e("div",fe,a(o(n).t("$vuetify.chatroom.systemLogs.title")),1),e("div",ye,a(o(n).t("$vuetify.chatroom.systemLogs.subtitle")),1)]),c(b,{icon:"$mdiRefresh",size:"small",variant:"text",loading:h.value,"aria-label":o(n).t("$vuetify.chatroom.systemLogs.refresh"),onClick:N},null,8,["loading","aria-label"])]),e("div",ge,[c(le,{modelValue:f.value,"onUpdate:modelValue":t[0]||(t[0]=s=>f.value=s),mandatory:"",variant:"text",class:"operation-filters"},{default:y(()=>[(u(!0),r(E,null,A(j.value,s=>(u(),x(b,{key:s.value,value:s.value,size:"small"},{default:y(()=>[R(a(s.title),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue"]),c(ce,{modelValue:d.value,"onUpdate:modelValue":t[1]||(t[1]=s=>d.value=s),items:F.value,"item-title":"title","item-value":"value",density:"compact",variant:"outlined","hide-details":"",class:"system-log-module-filter"},null,8,["modelValue","items"])]),c(U),p.value?(u(),r("div",pe,[c(se,{icon:"$mdiAlertCircleOutline",size:"18"}),e("span",null,a(p.value),1)])):g("",!0),m.value.length?(u(),r("div",_e,[e("div",he,[e("span",Le,a(o(n).t("$vuetify.chatroom.systemLogs.time")),1),e("span",Ce,a(o(n).t("$vuetify.chatroom.systemLogs.level")),1),e("span",ke,a(o(n).t("$vuetify.chatroom.systemLogs.module")),1),e("span",$e,a(o(n).t("$vuetify.chatroom.systemLogs.message")),1)]),(u(!0),r(E,null,A(m.value,s=>(u(),r("button",{key:s.id,type:"button",class:ae(["system-log-row",{"selected-row":i.value?.id===s.id}]),"aria-selected":i.value?.id===s.id,onClick:V=>i.value=s},[e("span",{class:"system-log-time mono",role:"gridcell",title:s.timestamp},a(o(ie)(s.timestamp)),9,Ve),e("span",be,[c(oe,{size:"x-small",variant:"tonal",color:Z(s.level)},{default:y(()=>[R(a(s.level.toUpperCase()),1)]),_:2},1032,["color"])]),e("span",xe,a(s.module),1),e("span",Se,[e("strong",null,a(s.message),1),e("small",Ne,a(s.event),1)])],10,we))),128))])):h.value?g("",!0):(u(),r("div",Ee,a(o(n).t("$vuetify.chatroom.systemLogs.empty")),1)),_.value?(u(),r("div",Re,[c(b,{variant:"text",size:"small",loading:L.value,onClick:G},{default:y(()=>[R(a(o(n).t("$vuetify.chatroom.systemLogs.loadMore")),1)]),_:1},8,["loading"])])):g("",!0)]),_:1})])):g("",!0),!o(S)||i.value?(u(),r("div",Ue,[i.value?(u(),x(z,{key:0,class:"panel-card"},{default:y(()=>[e("div",ze,[o(S)?(u(),x(b,{key:0,icon:"$mdiArrowLeft",size:"small",variant:"text","aria-label":o(n).t("$vuetify.chatroom.systemLogs.back"),onClick:K},null,8,["aria-label"])):g("",!0),e("div",Be,[e("div",De,a(i.value.message),1),e("div",Me,a(i.value.event),1)])]),c(U),e("div",Ie,[e("div",null,[e("span",null,a(o(n).t("$vuetify.chatroom.systemLogs.time")),1),e("strong",null,a(o(ue)(i.value.timestamp,o(ne)(o(n).current.value))),1)]),e("div",null,[e("span",null,a(o(n).t("$vuetify.chatroom.systemLogs.level")),1),e("strong",null,a(i.value.level.toUpperCase()),1)]),e("div",null,[e("span",null,a(o(n).t("$vuetify.chatroom.systemLogs.module")),1),e("strong",null,a(i.value.module),1)]),e("div",null,[e("span",null,a(o(n).t("$vuetify.chatroom.systemLogs.event")),1),e("strong",null,a(i.value.event),1)])]),D.value?(u(),r(E,{key:0},[c(U),e("div",Oe,[e("div",qe,a(o(n).t("$vuetify.chatroom.systemLogs.data")),1),c(re,{text:D.value,filename:"log.json",language:"json",toolbar:!1},null,8,["text"])])],64)):g("",!0)]),_:1})):(u(),x(z,{key:1,class:"panel-card"},{default:y(()=>[e("div",Ae,a(o(n).t("$vuetify.chatroom.systemLogs.select")),1)]),_:1}))])):g("",!0)]))}});export{Ze as default};
@@ -0,0 +1 @@
1
+ @layer vuetify-components{.v-select--chips.v-input--density-compact .v-field--variant-solo .v-label.v-field-label--floating,.v-select--chips.v-input--density-compact .v-field--variant-solo-inverted .v-label.v-field-label--floating,.v-select--chips.v-input--density-compact .v-field--variant-filled .v-label.v-field-label--floating,.v-select--chips.v-input--density-compact .v-field--variant-solo-filled .v-label.v-field-label--floating{top:0}.v-select .v-field .v-text-field__prefix,.v-select .v-field .v-text-field__suffix,.v-select .v-field .v-field__input,.v-select .v-field.v-field{cursor:pointer}.v-select .v-field .v-field__input>input{align-self:flex-start;opacity:1;flex:0 0;position:absolute;left:0;right:0;width:100%;transition:none;pointer-events:none;caret-color:transparent;padding-inline:inherit}.v-select .v-field--dirty .v-select__selection{margin-inline-end:2px}.v-select .v-select__selection-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-select__content{overflow:hidden}.v-select__content{box-shadow:0 1px 2px rgba(var(--v-shadow-color),var(--v-shadow-key-opacity, .3)),0 2px 6px 2px rgba(var(--v-shadow-color),var(--v-shadow-ambient-opacity, .15));--v-elevation-overlay: color-mix(in srgb, var(--v-elevation-overlay-color) 4%, transparent)}.v-menu>.v-overlay__content.v-select__content{border-radius:4px}.v-select__content>.v-sheet{display:flex;flex-direction:column}.v-select__mask{background:rgb(var(--v-theme-surface-light))}.v-select__selection{display:inline-flex;align-items:center;letter-spacing:inherit;line-height:inherit;max-width:100%}.v-select .v-select__selection:first-child{margin-inline-start:0}.v-select--selected .v-field .v-field__input>input{opacity:0}.v-select__menu-icon{margin-inline-start:4px;transition:.2s cubic-bezier(.4,0,.2,1)}.v-select--active-menu .v-select__menu-icon{transform:rotate(180deg)}}@layer vuetify-components{.v-virtual-scroll{display:block;flex:1 1 auto;max-width:100%;overflow:auto;position:relative}.v-virtual-scroll__container{display:block}}@layer vuetify-components{.v-highlight__mark{background:var(--v-highlight-background, color-mix(in srgb, currentColor var(--v-highlight-opacity, 8%), transparent));border-radius:var(--v-highlight-border-radius, 2px);color:var(--v-highlight-color, inherit)}@media(forced-colors:active){.v-highlight__mark{background:buttontext!important}}}
@@ -0,0 +1 @@
1
+ import{A as Ae,az as Ee,w as ae,E as xe,g as x,L as fe,am as j,F as Z,K as Le,D as Qe,a7 as Ie,ah as G,aI as Be,ac as ce,y as Q,bs as Xe,z as B,ab as Ce,b5 as ge,bt as Ke,bu as Ze,aF as et,a8 as tt,b6 as lt,e as A,P as ve,Q as He,R as ze,aY as pe,S as nt,J as at,bv as X,bw as ye,bx as ot,a_ as rt,b7 as ut,by as Ne,h as me,ay as st,a as it,bz as ct,a4 as ke,bA as ft,a6 as dt,bB as vt,aa as mt,bC as Se,bD as ht,bE as gt,ae as pt,bF as yt,I as bt,bG as wt,l as Pe,N as Te,av as kt,Y as St,Z as Re,bH as Vt,j as It,bI as Ct,bJ as At,aR as xt,a2 as Me,bK as Ft,O as Pt,r as Tt,ar as Rt,bL as _e,bM as De}from"./index-BegKQ3Yd.js";import{V as Mt}from"./CodeViewer.vue_vue_type_script_setup_true_lang-B5TxGkUW.js";const _t=Z({renderless:Boolean,...Le()},"VVirtualScrollItem"),Dt=Ae()({name:"VVirtualScrollItem",inheritAttrs:!1,props:_t(),emits:{"update:height":e=>!0},setup(e,{attrs:t,emit:o,slots:l}){const{resizeRef:a,contentRect:s}=Ee(void 0,"border");ae(()=>s.value?.height,i=>{i!=null&&o("update:height",i)}),xe(()=>e.renderless?x(fe,null,[l.default?.({itemRef:a})]):x("div",j({ref:a,class:["v-virtual-scroll__item",e.class],style:e.style},t),[l.default?.()]))}}),Ot=-1,Et=1,he=100,Lt=Z({itemHeight:{type:[Number,String],default:null},itemKey:{type:[String,Array,Function],default:null},height:[Number,String]},"virtual");function Bt(e,t){const o=Qe(),l=G(0);Ie(()=>{l.value=parseFloat(e.itemHeight||0)});const a=G(0),s=G(Math.ceil((parseInt(e.height)||o.height.value)/(l.value||16))||1),i=G(0),r=G(0),u=Q(),c=Q();let w=0;const{resizeRef:g,contentRect:h}=Ee();Ie(()=>{g.value=u.value});const m=B(()=>u.value===document.documentElement?o.height.value:h.value?.height||parseInt(e.height)||0),d=B(()=>!!(u.value&&c.value&&m.value&&l.value));let S=Array.from({length:t.value.length}),p=Array.from({length:t.value.length});const q=G(0);let P=-1;function T(f){return S[f]||l.value}const K=Xe(()=>{const f=performance.now();p[0]=0;const b=t.value.length;for(let V=1;V<=b;V++)p[V]=(p[V-1]||0)+T(V-1);q.value=Math.max(q.value,performance.now()-f),H()},q),be=ae(d,f=>{f&&(be(),w=c.value.offsetTop,K.immediate(),H(),~P&&Ce(()=>{ge&&window.requestAnimationFrame(()=>{~P&&oe(P)})}))});Be(()=>{K.clear()});function N(f,b){const V=S[f],C=l.value;b>0&&(l.value=C?Math.min(C,b):b),(V!==b||C!==l.value)&&(S[f]=b,K())}function I(f){f=ce(f,0,t.value.length);const b=Math.floor(f),V=f%1,C=b+1,W=p[b]||0,R=p[C]||W;return W+(R-W)*V}function re(f){return Kt(p,f)}let $=0,O=0,_=0;ae(m,(f,b)=>{H(),f<b&&requestAnimationFrame(()=>{O=0,H()})});let ee=-1;function ue(){if(!u.value||!c.value)return;const f=u.value.scrollTop,b=performance.now();b-_>500?(O=Math.sign(f-$),w=c.value.offsetTop):O=f-$,$=f,_=b,window.clearTimeout(ee),ee=window.setTimeout(k,500),H()}function k(){!u.value||!c.value||(O=0,_=0,window.clearTimeout(ee),H())}let de=-1;function H(){cancelAnimationFrame(de),de=requestAnimationFrame(we)}function we(){if(!u.value||!m.value||!l.value)return;const f=$-w,b=Math.sign(O),V=Math.max(0,f-he),C=ce(re(V),0,t.value.length),W=f+m.value+he,R=ce(re(W)+1,C+1,t.value.length);if((b!==Ot||C<a.value)&&(b!==Et||R>s.value)){const te=I(a.value)-I(C),Y=I(R)-I(s.value);Math.max(te,Y)>he?(a.value=C,s.value=R):(C<=0&&(a.value=C),R>=t.value.length&&(s.value=R,a.value=C))}i.value=I(a.value),r.value=I(t.value.length)-I(s.value)}function oe(f){const b=I(f);if(!u.value||f&&!b){P=f;return}const V=l.value||16,C=Math.ceil(he/V),W=Math.max(1,Math.ceil((m.value||0)/V));a.value=ce(f-C,0,Math.max(0,t.value.length-1)),s.value=ce(f+W+C,a.value+1,t.value.length),i.value=I(a.value),r.value=I(t.value.length)-I(s.value),O=0,_=0,P=f,Ce(()=>{const R=u.value;if(!R||!~P||P!==f)return;const te=I(f);R.scrollTop=te,$=R.scrollTop;const Y=I(t.value.length)+w;f&&R.scrollTop<te-1&&R.scrollHeight<Y-1?ge&&requestAnimationFrame(()=>{P===f&&oe(f)}):(P=-1,H())})}const D=B(()=>t.value.slice(a.value,s.value).map((f,b)=>{const V=b+a.value;return{raw:f,index:V,key:Ke(f,e.itemKey,V)}}));return ae(t,()=>{S=Array.from({length:t.value.length}),p=Array.from({length:t.value.length}),K.immediate(),H()},{deep:1}),{calculateVisibleItems:H,containerRef:u,markerRef:c,computedItems:D,paddingTop:i,paddingBottom:r,scrollToIndex:oe,handleScroll:ue,handleScrollend:k,handleItemResize:N}}function Kt(e,t){let o=e.length-1,l=0,a=0,s=null,i=-1;if(e[o]<t)return o;for(;l<=o;)if(a=l+o>>1,s=e[a],s>t)o=a-1;else if(s<t)i=a,l=a+1;else return s===t?a:l;return i}const Ht=Z({items:{type:Array,default:()=>[]},renderless:Boolean,...Lt(),...Le(),...at()},"VVirtualScroll"),zt=Ae()({name:"VVirtualScroll",props:Ht(),setup(e,{slots:t}){const o=Ze("VVirtualScroll"),{dimensionStyles:l}=nt(e),{calculateVisibleItems:a,containerRef:s,markerRef:i,handleScroll:r,handleScrollend:u,handleItemResize:c,scrollToIndex:w,paddingTop:g,paddingBottom:h,computedItems:m}=Bt(e,pe(()=>e.items));return et(()=>e.renderless,()=>{function d(S=!1){const p=S?"addEventListener":"removeEventListener";ge&&(s.value===document.documentElement?(document[p]("scroll",r,{passive:!0}),document[p]("scrollend",u)):(s.value?.[p]("scroll",r,{passive:!0}),s.value?.[p]("scrollend",u)))}tt(()=>{s.value=lt(o.vnode.el,!0),d(!0)}),Be(d)}),xe(()=>{const d=m.value.map(S=>A(Dt,{key:S.key,renderless:e.renderless,"onUpdate:height":p=>c(S.index,p)},{default:p=>t.default?.({item:S.raw,index:S.index,...p})}));return e.renderless?x(fe,null,[x("div",{ref:i,class:"v-virtual-scroll__spacer",style:{paddingTop:ve(g.value)}},null),d,x("div",{class:"v-virtual-scroll__spacer",style:{paddingBottom:ve(h.value)}},null)]):x("div",{ref:s,class:ze(["v-virtual-scroll",e.class]),onScrollPassive:r,onScrollend:u,style:He([l.value,e.style])},[x("div",{ref:i,class:"v-virtual-scroll__container",style:{paddingTop:ve(g.value),paddingBottom:ve(h.value)}},[d])])}),{calculateVisibleItems:a,scrollToIndex:w}}});function $e(e){const t=e.filter(l=>l[0]<l[1]).toSorted((l,a)=>l[0]-a[0]),o=[];for(const l of t){const a=o.at(-1);a&&l[0]<=a[1]?a[1]=Math.max(a[1],l[1]):o.push([l[0],l[1]])}return o}function Oe(e,t){const o=[];let l=0;for(const[a,s]of t)l<a&&o.push({text:e.slice(l,a),match:!1}),o.push({text:e.slice(a,s),match:!0}),l=s;return l<e.length&&o.push({text:e.slice(l),match:!1}),o}function Nt(e,t,o,l){const a=ye(t).filter(Boolean),s=l?e.toLocaleLowerCase():e,i=[];for(const r of a){const u=l?r.toLocaleLowerCase():r;let c=s.indexOf(u);if(c!==-1&&(i.push([c,c+r.length]),o))for(c=s.indexOf(u,c+r.length);c!==-1;)i.push([c,c+r.length]),c=s.indexOf(u,c+r.length)}return $e(i)}function $t(e,t,o={}){const l=X(e),a=X(t),s=X(o.matches),i=X(o.matchAll)??!1,r=X(o.ignoreCase)??!1;if(s?.length)return Oe(l,$e(s));if(a){const u=Nt(l,a,i,r);return u.length>0?Oe(l,u):[{text:l,match:!1}]}return[{text:l,match:!1}]}const Ut=Z({text:{type:String,default:""},query:[String,Array],matches:Array,matchAll:Boolean,ignoreCase:Boolean,color:String,opacity:[String,Number],markClass:String,...ut({tag:"span"})},"VHighlight"),jt=ot({name:"VHighlight",props:Ut(),setup(e){const t=B(()=>$t(()=>e.text,()=>e.query,{matches:()=>e.matches,matchAll:()=>e.matchAll,ignoreCase:()=>e.ignoreCase})),{textColorClasses:o,textColorStyles:l}=rt(()=>e.color);return()=>A(e.tag,{class:"v-highlight"},{default:()=>[t.value.map((a,s)=>a.match?x("mark",{key:s,class:ze(["v-highlight__mark",o.value,e.markClass]),style:He([l.value,{"--v-highlight-opacity":e.opacity}])},[a.text]):x("span",{key:s},[a.text]))]})}});function Gt(e,t,o){return function(a){return!a.relatedTarget&&document.activeElement===document.body&&e.value?(requestAnimationFrame(()=>{if(!e.value)return;const s=t();((s&&Ne(s)[0])??o())?.focus({preventScroll:!0})}),!0):!1}}function Wt(e,t){const o=G(!1);let l;function a(r){cancelAnimationFrame(l),o.value=!0,l=requestAnimationFrame(()=>{l=requestAnimationFrame(()=>{o.value=!1})})}async function s(){await new Promise(r=>requestAnimationFrame(r)),await new Promise(r=>requestAnimationFrame(r)),await new Promise(r=>requestAnimationFrame(r)),await new Promise(r=>{if(o.value){const u=ae(o,()=>{u(),r()})}else r()})}async function i(r){if(r.key==="Tab"&&t.value?.focus(),!["PageDown","PageUp","Home","End"].includes(r.key))return;const u=e.value?.$el;if(!u)return;(r.key==="Home"||r.key==="End")&&u.scrollTo({top:r.key==="Home"?0:u.scrollHeight,behavior:"smooth"}),await s();const c=u.querySelectorAll(":scope > :not(.v-virtual-scroll__spacer)");if(r.key==="PageDown"||r.key==="Home"){const w=u.getBoundingClientRect().top;for(const g of c)if(g.getBoundingClientRect().top>=w){g.focus();break}}else{const w=u.getBoundingClientRect().bottom;for(const g of[...c].reverse())if(g.getBoundingClientRect().bottom<=w){g.focus();break}}}return{onScrollPassive:a,onKeydown:i}}function qt({groups:e,onLeave:t}){function o(i){return i.type==="list"?i.contentRef.value?.$el:i.contentRef.value}function l(i){const r=o(i);return r?Ne(r):[]}function a(i){const r=i.target,u=i.shiftKey?"backward":"forward",c=e.map(l),w=e.map(h=>h.type==="list"?h.contentRef.value?.$el:h.contentRef.value).findIndex(h=>h?.contains(r)),g=s(c,w,u,r);if(g===null){const h=e[w],m=c[w];(h.type==="list"||(u==="forward"?m.at(-1)===i.target:m.at(0)===i.target))&&t()}else{i.preventDefault(),i.stopImmediatePropagation();const h=e[g];if(h.type==="list"&&X(h.displayItemsCount)>0)h.contentRef.value?.focus(0);else{const m=u==="forward";c[g].at(m?0:-1).focus()}}}function s(i,r,u,c){const w=e[r],g=i[r];if(w.type!=="list"&&!(u==="forward"?g.at(-1)===c:g.at(0)===c))return null;const h=u==="forward"?1:-1;for(let m=r+h;m>=0&&m<e.length;m+=h){const d=e[m];if(i[m].length>0||d.type==="list"&&X(d.displayItemsCount)>0)return m}return null}return{onTabKeydown:a}}const Yt=(e,t,o)=>{if(e==null||t==null)return-1;if(!t.length)return 0;e=e.toString().toLocaleLowerCase(),t=t.toString().toLocaleLowerCase();const l=[];let a=e.indexOf(t);for(;~a;)l.push([a,a+t.length]),a=e.indexOf(t,a+t.length);return l.length?l:-1};function Ve(e,t){if(!(e==null||typeof e=="boolean"||e===-1))return typeof e=="number"?[[e,e+t.length]]:Array.isArray(e[0])?e:[e]}const Jt=Z({customFilter:Function,customKeyFilter:Object,filterKeys:[Array,String],filterMode:{type:String,default:"intersection"},noFilter:Boolean},"filter");function Qt(e,t,o){const l=[],a=o?.default??Yt,s=o?.filterKeys?ye(o.filterKeys):!1,i=Object.keys(o?.customKeyFilter??{}).length;if(!e?.length)return l;let r=[];e:for(let u=0;u<e.length;u++){const[c,w=c]=ye(e[u]),g={},h={};let m=-1;if((t||i>0)&&!o?.noFilter){let d=!1;if(typeof c=="object"){if(c.type==="divider"||c.type==="subheader"){(r.at(-1)?.type!=="divider"||c.type!=="subheader")&&(r=[]),r.push({index:u,matches:{},type:c.type});continue}const q=s||Object.keys(w);d=q.length===i;for(const P of q){const T=Ke(w,P),K=o?.customKeyFilter?.[P];if(m=K?K(T,t,c):a(T,t,c),m!==-1&&m!==!1)K?g[P]=Ve(m,t):h[P]=Ve(m,t);else if(o?.filterMode==="every")continue e}}else m=a(c,t,c),m!==-1&&m!==!1&&(h.title=Ve(m,t));const S=Object.keys(h).length,p=Object.keys(g).length;if(!S&&!p||o?.filterMode==="union"&&p!==i&&!S||o?.filterMode==="intersection"&&(p!==i||!S&&i>0&&!d))continue}r.length&&(l.push(...r),r=[]),l.push({index:u,matches:{...h,...g}})}return l}function Xt(e,t,o,l){const a=G([]),s=G(new Map),i=B(()=>me(t));Ie(()=>{const u=typeof o=="function"?o():me(o),c=typeof u!="string"&&typeof u!="number"?"":String(u),w=Qt(i.value,c,{customKeyFilter:{...e.customKeyFilter,...me(l?.customKeyFilter)},default:e.customFilter,filterKeys:e.filterKeys,filterMode:e.filterMode,noFilter:e.noFilter}),g=me(t),h=[],m=new Map;w.forEach(({index:d,matches:S})=>{const p=g[d];h.push(p),p.value!==void 0&&m.set(p.value,S)}),a.value=h,s.value=m});function r(u){return s.value.get(u.value)}return{filteredItems:a,filteredMatches:s,getMatches:r}}const Zt=Z({closeText:{type:String,default:"$vuetify.close"},openText:{type:String,default:"$vuetify.open"}},"autocomplete");function el(e,t){const o=st(),l=B(()=>`menu-${o}`),a=pe(()=>X(t)),s=pe(()=>l.value);return{menuId:l,ariaExpanded:a,ariaControls:s}}const tl=Z({chips:Boolean,closableChips:Boolean,eager:Boolean,hideNoData:Boolean,hideSelected:Boolean,listProps:{type:Object},menu:Boolean,menuElevation:[Number,String],menuIcon:{type:bt,default:"$dropdown"},menuProps:{type:Object},multiple:Boolean,noDataText:{type:String,default:"$vuetify.noDataText"},openOnClear:Boolean,itemColor:String,noAutoScroll:Boolean,...Zt(),...wt({itemChildren:!1})},"Select"),ll=Z({search:String,...Jt({filterKeys:["title"]}),...tl(),...pt(yt({modelValue:null,role:"combobox"}),["validationValue","dirty"]),...ht({transition:{component:gt}})},"VSelect"),ol=Ae()({name:"VSelect",props:ll(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:menu":e=>!0,"update:search":e=>!0},setup(e,{slots:t}){const{t:o}=it(),l=Q(),a=Q(),s=Q(),i=Q(),r=Q(),{items:u,transformIn:c,transformOut:w}=ct(e),g=ke(e,"search",""),{filteredItems:h,getMatches:m}=Xt(e,u,()=>g.value),d=ke(e,"modelValue",[],n=>c(n===null?[null]:ye(n)),n=>{const y=w(n);return e.multiple?y:y[0]??null}),S=B(()=>typeof e.counterValue=="function"?e.counterValue(d.value):typeof e.counterValue=="number"?e.counterValue:d.value.length),p=ft(e),q=dt(e),P=B(()=>d.value.map(n=>n.value)),T=G(!1),K=pe(()=>e.closableChips&&!p.isReadonly.value&&!p.isDisabled.value),{InputIcon:be}=vt(e);let N="",I=0,re,$=!1,O=null;const _=B(()=>{const n=g.value?h.value:u.value;return e.hideSelected?n.filter(y=>!d.value.some(M=>(e.valueComparator||Se)(M,y))):n}),ee=B(()=>e.hideNoData&&!_.value.length||p.isReadonly.value||p.isDisabled.value),ue=ke(e,"menu"),k=B({get:()=>ue.value,set:n=>{ue.value&&!n&&a.value?.ΨopenChildren.size||n&&ee.value||(ue.value=n)}}),{menuId:de,ariaExpanded:H,ariaControls:we}=el(e,k),oe=B(()=>({...e.menuProps,activatorProps:{...e.menuProps?.activatorProps||{},"aria-haspopup":"listbox"}})),D=Q(),f=Wt(D,l),b=Gt(k,()=>a.value?.contentEl,()=>l.value?.controlRef),{onTabKeydown:V}=qt({groups:[{type:"element",contentRef:s},{type:"list",contentRef:D,displayItemsCount:()=>_.value.length},{type:"element",contentRef:i}],onLeave:()=>{k.value=!1,l.value?.focus()}});function C(n){e.openOnClear&&(k.value=!0)}function W(){ee.value||($=!1,O=null,k.value=!k.value)}function R(n){n.key==="Tab"&&V(n),D.value?.$el.contains(n.target)&&_e(n)&&te(n)}function te(n){if(!n.key||p.isReadonly.value)return;if(["Enter"," ","ArrowDown","ArrowUp","Home","End"].includes(n.key)&&n.preventDefault(),["ArrowDown","ArrowUp"].includes(n.key)?O=n.key==="ArrowDown"?"next":"prev":["Enter"," "].includes(n.key)&&(O=null),["Enter","ArrowDown"," "].includes(n.key)&&($=!0,k.value=!0),["Escape","Tab"].includes(n.key)&&(k.value=!1),e.clearable&&n.key==="Backspace"){n.preventDefault(),d.value=[],C();return}n.key==="Home"?D.value?.focus("first"):n.key==="End"&&D.value?.focus("last");const y=1e3;if(!_e(n))return;const M=performance.now();M-re>y&&(N="",I=0),N+=n.key.toLowerCase(),re=M;const le=_.value;function J(){let F=ne();return F||N.at(-1)===N.at(-2)&&(N=N.slice(0,-1),I++,F=ne(),F)||(I=0,F=ne(),F)?F:(N=n.key.toLowerCase(),ne())}function ne(){for(let F=I;F<le.length;F++){const U=le[F];if(U.title.toLowerCase().startsWith(N))return[U,F]}}const z=J();if(!z)return;const[v,E]=z;I=E,D.value?.focus(E),e.multiple||(d.value=[v])}function Y(n,y=!0){if(!n.props.disabled)if(e.multiple){const M=d.value.findIndex(J=>(e.valueComparator||Se)(J.value,n.value)),le=y??!~M;if(~M){const J=le?[...d.value,n]:[...d.value];J.splice(M,1),d.value=J}else le&&(d.value=[...d.value,n])}else{const M=y!==!1;d.value=M?[n]:[],Ce(()=>{k.value=!1})}}function Fe(n){const y=n.target;l.value?.$el.contains(y)||(k.value=!1)}function Ue(){return _.value.findIndex(n=>d.value.some(y=>(e.valueComparator||Se)(y.value,n.value)))}function je(n){const y=D.value?.$el?.querySelector?.('[aria-selected="true"]');return y?(y.focus(n),!0):!1}function Ge(){if(e.eager&&r.value?.calculateVisibleItems(),!D.value||!T.value||D.value.$el?.contains(Rt()))return;const n={focusVisible:!1,preventScroll:e.noAutoScroll};if(O){D.value.focus(O,n);return}je(n)||$&&D.value.focus("first",n)}function We(){g.value="",T.value&&(a.value?.contentEl?._clickOutside?.lastMousedownWasOutside?T.value=!1:l.value?.focus())}function qe(n){T.value=!0}function Ye(n){if(!l.value?.$el.contains(n.relatedTarget)&&!n.currentTarget.contains(n.relatedTarget)){if(b(n))return;T.value=!1}}function Je(n){if(n==null)d.value=[];else if(De(l.value,":autofill")||De(l.value,":-webkit-autofill")){const y=u.value.find(M=>M.title===n);y&&Y(y)}else l.value&&(l.value.value="")}return ae(k,n=>{if(n||($=!1,O=null),!e.hideSelected&&k.value&&d.value.length){const y=Ue();ge&&!e.noAutoScroll&&window.requestAnimationFrame(()=>{y>=0&&r.value?.scrollToIndex(y)})}}),ae(u,(n,y)=>{k.value||T.value&&e.hideNoData&&!y.length&&n.length&&(k.value=!0)}),xe(()=>{const n=!!(e.chips||t.chip),y=!!(!e.hideNoData||_.value.length||t["prepend-item"]||t["append-item"]||t["no-data"]),M=d.value.length>0,le=Pe.filterProps(e),J=M||!T.value&&e.label&&!e.persistentPlaceholder?void 0:e.placeholder,ne={search:g,filteredItems:h.value};return A(Pe,j({ref:l},le,{modelValue:d.value.map(z=>z.props.title).join(", "),name:void 0,"onUpdate:modelValue":Je,focused:T.value,"onUpdate:focused":z=>T.value=z,validationValue:d.externalValue,counterValue:S.value,dirty:M,class:["v-select",{"v-select--active-menu":k.value,"v-select--chips":!!e.chips,[`v-select--${e.multiple?"multiple":"single"}`]:!0,"v-select--selected":d.value.length,"v-select--selection-slot":!!t.selection},e.class],style:e.style,inputmode:"none",placeholder:J,"onClick:clear":C,"onMousedown:control":W,onBlur:Fe,onKeydown:te,"aria-expanded":H.value,"aria-controls":we.value}),{...t,default:({id:z})=>x(fe,null,[x("select",{hidden:!0,multiple:e.multiple,name:q.fieldName.value},[u.value.map(v=>x("option",{key:v.value,value:v.value,selected:P.value.includes(v.value)},null))]),A(kt,j({id:de.value,ref:a,modelValue:k.value,"onUpdate:modelValue":v=>k.value=v,activator:"parent",captureFocus:!1,disabled:ee.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,transition:e.transition,onAfterEnter:Ge,onAfterLeave:We},oe.value,{contentClass:["v-select__content",oe.value.contentClass]}),{default:()=>[A(Mt,{elevation:e.menuElevation,onFocusin:qe,onFocusout:Ye,onKeydown:R},{default:()=>[t["menu-header"]&&x("header",{ref:s},[t["menu-header"](ne)]),y&&A(St,j({key:"select-list",ref:D,selected:P.value,selectStrategy:e.multiple?"independent":"single-independent",tabindex:"-1",selectable:!!_.value.length,"aria-live":"polite","aria-labelledby":`${z.value}-label`,"aria-multiselectable":e.multiple,color:e.itemColor??e.color},f,e.listProps),{default:()=>[t["prepend-item"]?.(),!_.value.length&&!e.hideNoData&&(t["no-data"]?.()??A(Re,{key:"no-data",title:o(e.noDataText)},null)),A(zt,{ref:r,renderless:!0,items:_.value,itemKey:"value"},{default:({item:v,index:E,itemRef:F})=>{const U=Vt(v.props),se=j(v.props,{ref:F,key:v.value,onClick:()=>Y(v,null),"aria-posinset":E+1,"aria-setsize":_.value.length});return v.type==="divider"?t.divider?.({props:v.raw,index:E})??A(It,j(v.props,{key:`divider-${E}`}),null):v.type==="subheader"?t.subheader?.({props:v.raw,index:E})??A(Ct,j(v.props,{key:`subheader-${E}`}),null):t.item?.({item:v.raw,internalItem:v,index:E,props:se})??A(Re,j(se,{role:"option"}),{prepend:({isSelected:ie})=>x(fe,null,[e.multiple&&!e.hideSelected?A(At,{key:v.value,modelValue:ie,ripple:!1,tabindex:"-1","aria-hidden":!0,onClick:L=>L.preventDefault()},null):void 0,U.prependAvatar&&A(xt,{image:U.prependAvatar},null),U.prependIcon&&A(Te,{icon:U.prependIcon},null)]),title:()=>g.value?A(jt,{text:v.title,matches:m(v)?.title,markClass:"v-select__mask",matchAll:!0,ignoreCase:!0},null):v.title})}}),t["append-item"]?.()]}),t["menu-footer"]&&x("footer",{ref:i},[t["menu-footer"](ne)])]})]}),d.value.map((v,E)=>{function F(L){L.stopPropagation(),L.preventDefault(),Y(v,!1)}const U=j(Me.filterProps(v.props),{"onClick:close":F,onKeydown(L){L.key!=="Enter"&&L.key!==" "||(L.preventDefault(),L.stopPropagation(),F(L))},onMousedown(L){L.preventDefault(),L.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0}),se=n?!!t.chip:!!t.selection,ie=se?Ft(n?t.chip({item:v.raw,internalItem:v,index:E,props:U}):t.selection({item:v.raw,internalItem:v,index:E})):void 0;if(!(se&&!ie))return x("div",{key:v.value,class:"v-select__selection"},[n?t.chip?A(Pt,{key:"chip-defaults",defaults:{VChip:{closable:K.value,size:"small",text:v.title}}},{default:()=>[ie]}):A(Me,j({key:"chip",closable:K.value,size:"small",text:v.title,disabled:v.props.disabled},U),null):ie??x("span",{class:"v-select__selection-text"},[v.title,e.multiple&&E<d.value.length-1&&x("span",{class:"v-select__selection-comma"},[Tt(",")])])])})]),"append-inner":(...z)=>x(fe,null,[t["append-inner"]?.(...z),e.menuIcon?A(Te,{class:"v-select__menu-icon",color:l.value?.fieldIconColor,icon:e.menuIcon,"aria-hidden":!0},null):void 0,e.appendInnerIcon&&A(be,{key:"append-icon",name:"appendInner",color:z[0].iconColor.value},null)])})}),mt({isFocused:T,menu:k,search:g,filteredItems:h,select:Y},l)}});export{ol as V};
@@ -0,0 +1 @@
1
+ import{bT as a}from"./index-BegKQ3Yd.js";const r=a("v-spacer","div","VSpacer");export{r as V};
@@ -0,0 +1 @@
1
+ @layer vuetify-components{.v-spacer{flex-grow:1}}
@@ -0,0 +1 @@
1
+ @layer vuetify-components{.v-switch{--v-switch-scale: 1}.v-switch .v-label{padding-inline-start:10px}.v-switch--size-x-small{--v-switch-scale: .6428571429;--v-switch-track-height: 9px;--v-switch-thumb-height: 13px;--v-switch-thumb-width: 13px}.v-switch--size-small{--v-switch-scale: .7857142857;--v-switch-track-height: 11px;--v-switch-thumb-height: 16px;--v-switch-thumb-width: 16px}.v-switch--size-default{--v-switch-scale: 1;--v-switch-track-height: 14px;--v-switch-thumb-height: 20px;--v-switch-thumb-width: 20px}.v-switch--size-large{--v-switch-scale: 1.2142857143;--v-switch-track-height: 17px;--v-switch-thumb-height: 24px;--v-switch-thumb-width: 24px}.v-switch--size-x-large{--v-switch-scale: 1.3571428571;--v-switch-track-height: 19px;--v-switch-thumb-height: 28px;--v-switch-thumb-width: 28px}.v-switch--inset.v-switch--size-x-small{--v-switch-scale: .625;--v-switch-track-height: 20px;--v-switch-thumb-height: 15px;--v-switch-thumb-width: 15px}.v-switch--inset.v-switch--size-small{--v-switch-scale: .8125;--v-switch-track-height: 26px;--v-switch-thumb-height: 20px;--v-switch-thumb-width: 20px}.v-switch--inset.v-switch--size-default{--v-switch-scale: 1;--v-switch-track-height: 32px;--v-switch-thumb-height: 24px;--v-switch-thumb-width: 24px}.v-switch--inset.v-switch--size-large{--v-switch-scale: 1.1875;--v-switch-track-height: 38px;--v-switch-thumb-height: 30px;--v-switch-thumb-width: 30px}.v-switch--inset.v-switch--size-x-large{--v-switch-scale: 1.375;--v-switch-track-height: 44px;--v-switch-thumb-height: 34px;--v-switch-thumb-width: 34px}.v-switch__loader{display:flex}.v-switch__loader .v-progress-circular{color:rgb(var(--v-theme-surface))}.v-switch__track,.v-switch__thumb{transition:none}.v-selection-control--error:not(.v-selection-control--disabled) .v-switch__track,.v-selection-control--error:not(.v-selection-control--disabled) .v-switch__thumb{background-color:rgb(var(--v-theme-error));color:rgb(var(--v-theme-on-error))}.v-switch__track-true{margin-inline-end:auto}.v-selection-control:not(.v-selection-control--dirty) .v-switch__track-true{opacity:0}.v-switch__track-false{margin-inline-start:auto}.v-selection-control--dirty .v-switch__track-false{opacity:0}.v-switch__track{display:inline-flex;align-items:center;font-size:.5rem;padding:0 5px;background-color:rgb(var(--v-theme-surface-variant));border-radius:9999px;height:var(--v-switch-track-height);opacity:.6;min-width:calc(36px * var(--v-switch-scale));cursor:pointer;transition:.2s background-color cubic-bezier(.4,0,.2,1)}.v-switch--inset .v-switch__track{border-radius:9999px;font-size:.75rem;min-width:calc(52px * var(--v-switch-scale))}.v-switch__thumb{align-items:center;background-color:rgb(var(--v-theme-surface-bright));color:rgb(var(--v-theme-on-surface-bright));border-radius:50%;display:flex;font-size:.75rem;height:var(--v-switch-thumb-height);justify-content:center;width:var(--v-switch-thumb-width);pointer-events:none;transition:.15s .05s transform cubic-bezier(0,0,.2,1),.2s color cubic-bezier(.4,0,.2,1),.2s background-color cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden}.v-switch:not(.v-switch--inset) .v-switch__thumb{box-shadow:0 1px 2px rgba(var(--v-shadow-color),var(--v-shadow-key-opacity, .3)),0 2px 6px 2px rgba(var(--v-shadow-color),var(--v-shadow-ambient-opacity, .15));--v-elevation-overlay: color-mix(in srgb, var(--v-elevation-overlay-color) 4%, transparent)}.v-switch.v-switch--flat:not(.v-switch--inset) .v-switch__thumb{background:rgb(var(--v-theme-surface-variant));color:rgb(var(--v-theme-on-surface-variant))}.v-switch.v-switch--flat:not(.v-switch--inset) .v-switch__thumb{box-shadow:0 0 rgba(var(--v-shadow-color),var(--v-shadow-key-opacity, .3)),0 0 rgba(var(--v-shadow-color),var(--v-shadow-ambient-opacity, .15));--v-elevation-overlay: color-mix(in srgb, var(--v-elevation-overlay-color) 0%, transparent)}.v-switch--inset .v-switch__thumb{transform:scale(var(--v-switch-inset-thumb-off-scale, .6666666667))}.v-switch--inset .v-switch__thumb--filled{transform:none}.v-switch--inset .v-selection-control--dirty .v-switch__thumb{transform:none;transition:.15s .05s transform cubic-bezier(0,0,.2,1)}.v-switch--inset-material .v-switch__track{opacity:1;background-color:color-mix(in srgb,rgb(var(--v-theme-on-surface-variant)) 73%,#ccc);border:2px solid color-mix(in srgb,rgb(var(--v-theme-surface-variant)) 20%,#888)}.v-switch--inset-material .v-switch__thumb{background-color:color-mix(in srgb,rgb(var(--v-theme-surface-variant)) 20%,#888);color:color-mix(in srgb,rgb(var(--v-theme-on-surface-variant)) 73%,#ccc)}.v-switch--inset-material .v-selection-control--dirty .v-switch__track{border-color:transparent;background-color:color-mix(in srgb,rgb(var(--v-theme-surface-variant)) 90%,white)}.v-switch--inset-material .v-selection-control--dirty .v-switch__thumb{background-color:color-mix(in srgb,rgb(var(--v-theme-on-surface-variant)) 80%,white);color:color-mix(in srgb,rgb(var(--v-theme-surface-variant)) 90%,white)}.v-switch--inset-material .v-selection-control__input:active .v-switch__thumb{transform:scale(var(--v-switch-inset-thumb-pressed-scale, 1.1666666667))}.v-switch--inset-material .v-selection-control__input:before{--v-hover-opacity: .08;z-index:1}.v-switch--inset-material .v-selection-control--focus-visible .v-selection-control__input:before{opacity:0}.v-switch--inset-material .v-selection-control--focus-visible .v-switch__track{outline:2px solid rgb(var(--v-theme-surface-variant));outline-offset:2px}.v-switch--inset-material .v-selection-control--disabled{opacity:1}.v-switch--inset-material .v-selection-control--disabled .v-label{opacity:var(--v-disabled-opacity)}.v-switch--inset-material .v-selection-control--disabled .v-switch__track{background-color:color-mix(in srgb,color-mix(in srgb,rgb(var(--v-theme-on-surface-variant)) 73%,#ccc) 12%,transparent);border-color:rgba(var(--v-theme-on-surface),.12)}.v-switch--inset-material .v-selection-control--disabled .v-switch__thumb{background-color:rgba(var(--v-theme-on-surface),.38)}.v-switch--inset-material .v-selection-control--disabled .v-switch__thumb .v-icon{opacity:.8}.v-switch--inset-material .v-selection-control--disabled.v-selection-control--dirty .v-switch__track{background-color:rgba(var(--v-theme-on-surface),.12);border-color:transparent}.v-switch--inset-material .v-selection-control--disabled.v-selection-control--dirty .v-switch__thumb{background-color:rgb(var(--v-theme-surface))}.v-switch--inset-material .v-selection-control--disabled.v-selection-control--dirty .v-switch__thumb .v-icon{opacity:.4}.v-switch--inset-square .v-switch__track{border-radius:6px}.v-switch--inset-square .v-switch__thumb{border-radius:4px}.v-switch.v-input{flex:0 1 auto}.v-switch .v-selection-control{min-height:var(--v-input-control-height)}.v-switch .v-selection-control__input{border-radius:50%;transition:.2s transform cubic-bezier(.4,0,.2,1);position:absolute;height:calc(var(--v-switch-thumb-height) * 1.666666667);width:calc(var(--v-switch-thumb-height) * 1.666666667)}.v-locale--is-ltr.v-switch .v-selection-control__input,.v-locale--is-ltr .v-switch .v-selection-control__input{transform:translate(calc(-10px * var(--v-switch-scale)))}.v-locale--is-rtl.v-switch .v-selection-control__input,.v-locale--is-rtl .v-switch .v-selection-control__input{transform:translate(calc(10px * var(--v-switch-scale)))}.v-switch .v-selection-control__input .v-icon{position:absolute}.v-switch .v-selection-control__input input{margin:0}.v-locale--is-ltr.v-switch .v-selection-control--dirty .v-selection-control__input,.v-locale--is-ltr .v-switch .v-selection-control--dirty .v-selection-control__input{transform:translate(calc(10px * var(--v-switch-scale)))}.v-locale--is-rtl.v-switch .v-selection-control--dirty .v-selection-control__input,.v-locale--is-rtl .v-switch .v-selection-control--dirty .v-selection-control__input{transform:translate(calc(-10px * var(--v-switch-scale)))}.v-switch.v-switch--indeterminate .v-selection-control__input{transform:scale(.8)}.v-switch.v-switch--indeterminate .v-switch__thumb{transform:scale(.75);box-shadow:none}.v-switch.v-switch--inset .v-selection-control__wrapper{width:auto}.v-switch.v-input--vertical .v-label{min-width:max-content}.v-switch.v-input--vertical .v-selection-control__wrapper{transform:rotate(-90deg)}@media(forced-colors:active){.v-switch .v-switch__loader .v-progress-circular{color:currentColor}.v-switch .v-switch__thumb{background-color:buttontext}.v-switch .v-switch__track,.v-switch .v-switch__thumb{border:1px solid;color:buttontext}.v-switch:not(.v-switch--loading):not(.v-input--disabled) .v-selection-control--dirty .v-switch__thumb{background-color:highlight}.v-switch:not(.v-input--disabled) .v-selection-control--dirty .v-switch__track{background-color:highlight}.v-switch:not(.v-input--disabled) .v-selection-control--dirty .v-switch__track,.v-switch:not(.v-input--disabled) .v-selection-control--dirty .v-switch__thumb{color:highlight}.v-switch.v-switch--inset .v-switch__track{border-width:2px}.v-switch.v-switch--inset:not(.v-switch--loading):not(.v-input--disabled) .v-selection-control--dirty .v-switch__thumb{background-color:highlighttext;color:highlighttext}.v-switch.v-input--disabled .v-switch__thumb{background-color:graytext}.v-switch.v-input--disabled .v-switch__track,.v-switch.v-input--disabled .v-switch__thumb{color:graytext}.v-switch.v-switch--loading .v-switch__thumb{background-color:canvas}.v-switch.v-switch--loading.v-switch--inset .v-switch__thumb,.v-switch.v-switch--loading.v-switch--indeterminate .v-switch__thumb{border-width:0}}}
@@ -0,0 +1 @@
1
+ import{A as K,a4 as _,aS as Z,a5 as p,C as ee,aT as ae,ay as te,E as le,aa as ne,F as ue,H as ie,aU as se,ae as oe,af as re,ai as de,aj as x,aV as A,e as n,am as F,g as s,Q as k,R as C,O as ce,aW as ve,N as fe,aX as me,au as he,L as ge,y as I,aY as d}from"./index-BegKQ3Yd.js";const we=ue({inset:{type:[Boolean,String],default:!1},flat:Boolean,thumbColor:String,loading:{type:[Boolean,String],default:!1},...oe(re(),["glow"]),...se(),...ie()},"VSwitch"),ke=["x-small","small","default","large","x-large"],Ce={"x-small":11,small:14,default:16,large:18,"x-large":22},Ve=K()({name:"VSwitch",inheritAttrs:!1,props:we(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:indeterminate":e=>!0},setup(e,{attrs:M,slots:a}){const o=_(e,"indeterminate"),u=_(e,"modelValue"),{loaderClasses:B}=Z(e),{isFocused:R,focus:T,blur:N}=p(e),{backgroundColorClasses:U,backgroundColorStyles:q}=ee(()=>e.thumbColor),S=I(),V=I(),c=ae&&window.matchMedia("(forced-colors: active)").matches,D=d(()=>typeof e.loading=="string"&&e.loading!==""?e.loading:e.color),L=te(),E=d(()=>e.id||`switch-${L}`),v=d(()=>ke.includes(e.size)),f=d(()=>v.value?Ce[e.size]:Math.round(16*Number(e.size)/32));function H(){o.value&&(o.value=!1)}function O(r){r.stopPropagation(),r.preventDefault(),S.value?.input?.click()}return le(()=>{const[r,$]=de(M),j=x.filterProps(e),Q=A.filterProps(e),l=["material","square"].includes(String(e.inset)),y=!c&&!!e.thumbColor;return n(x,F({ref:V,class:["v-switch",{"v-switch--flat":e.flat},{"v-switch--inset":!!e.inset},{"v-switch--inset-material":l},{"v-switch--inset-square":e.inset==="square"},{"v-switch--indeterminate":o.value},v.value?`v-switch--size-${e.size}`:void 0,B.value,e.class]},r,j,{modelValue:u.value,"onUpdate:modelValue":m=>u.value=m,id:E.value,focused:R.value,style:[{"--v-switch-scale":v.value?void 0:Number(e.size)/32},e.style]}),{...a,default:({id:m,messagesId:W,isDisabled:X,isReadonly:Y,isValid:b})=>{const h={model:u,isValid:b};return n(A,F({ref:S},Q,{modelValue:u.value,"onUpdate:modelValue":[i=>u.value=i,H],id:m.value,"aria-describedby":W.value,type:"checkbox","aria-checked":o.value?"mixed":void 0,disabled:X.value,readonly:Y.value,onFocus:T,onBlur:N},$),{...a,default:({backgroundColorClasses:i,backgroundColorStyles:t})=>s("div",{class:C(["v-switch__track",c?void 0:i.value]),style:k(t.value),onClick:O},[a["track-true"]&&s("div",{key:"prepend",class:"v-switch__track-true"},[a["track-true"](h)]),a["track-false"]&&s("div",{key:"append",class:"v-switch__track-false"},[a["track-false"](h)])]),input:({inputNode:i,icon:t,model:z,backgroundColorClasses:g,backgroundColorStyles:P,textColorClasses:G,textColorStyles:J})=>s(ge,null,[i,s("div",{class:C(["v-switch__thumb",{"v-switch__thumb--filled":t||e.loading},c?void 0:y&&z.value?U.value:l?g.value:e.inset?void 0:g.value]),style:k([y&&z.value?q.value:l?g.value.length||P.value.backgroundColor?{backgroundColor:"currentColor"}:void 0:e.inset?void 0:P.value])},[a.thumb?n(ce,{defaults:{VIcon:{icon:t,size:l?f.value:"x-small"}}},{default:()=>[a.thumb({...h,icon:t})]}):n(ve,null,{default:()=>[e.loading?n(me,{name:"v-switch",active:!0,color:b.value===!1?void 0:D.value},{default:w=>a.loader?a.loader(w):n(he,{active:w.isActive,color:w.color,indeterminate:!0,size:f.value,width:"2"},null)}):t&&n(fe,{key:String(t),class:C(l?G.value:void 0),style:k(l?J.value:void 0),icon:t,size:l?f.value:"x-small"},null)]})])])})}})}),ne({},V)}});export{Ve as V};