@agent-canvas/cli 0.10.0 → 0.12.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 (131) hide show
  1. package/dist/commands/__tests__/create-folder.test.d.ts +1 -0
  2. package/dist/commands/__tests__/create-folder.test.js +82 -0
  3. package/dist/commands/__tests__/delete-folder.test.d.ts +1 -0
  4. package/dist/commands/__tests__/delete-folder.test.js +79 -0
  5. package/dist/commands/__tests__/list.test.js +90 -0
  6. package/dist/commands/__tests__/move-to-folder.test.d.ts +1 -0
  7. package/dist/commands/__tests__/move-to-folder.test.js +99 -0
  8. package/dist/commands/add-arrow.d.ts +1 -0
  9. package/dist/commands/add-arrow.js +1 -0
  10. package/dist/commands/add-line.d.ts +1 -0
  11. package/dist/commands/add-line.js +1 -0
  12. package/dist/commands/add-polygon.d.ts +1 -0
  13. package/dist/commands/add-polygon.js +1 -0
  14. package/dist/commands/add-shape.d.ts +1 -0
  15. package/dist/commands/add-shape.js +1 -0
  16. package/dist/commands/add-text.d.ts +1 -0
  17. package/dist/commands/add-text.js +1 -0
  18. package/dist/commands/create-folder.d.ts +20 -0
  19. package/dist/commands/create-folder.js +24 -0
  20. package/dist/commands/delete-folder.d.ts +20 -0
  21. package/dist/commands/delete-folder.js +24 -0
  22. package/dist/commands/list.d.ts +3 -1
  23. package/dist/commands/list.js +38 -12
  24. package/dist/commands/move-to-folder.d.ts +21 -0
  25. package/dist/commands/move-to-folder.js +29 -0
  26. package/dist/commands/start.d.ts +3 -1
  27. package/dist/commands/start.js +65 -2
  28. package/dist/index.js +58 -3
  29. package/dist/lib/protocol.d.ts +36 -0
  30. package/dist/server/index.d.ts +3 -1
  31. package/dist/server/index.js +52 -38
  32. package/dist/static/assets/{ar-SA-G6X2FPQ2-XEzZ0MM8.js → ar-SA-G6X2FPQ2-DBNnjE12.js} +1 -1
  33. package/dist/static/assets/{arc-DrFnHjo9.js → arc-6RZ6YUY1.js} +1 -1
  34. package/dist/static/assets/{az-AZ-76LH7QW2-miPGYjNv.js → az-AZ-76LH7QW2-CEisZhHx.js} +1 -1
  35. package/dist/static/assets/{bg-BG-XCXSNQG7-FKYgNI-z.js → bg-BG-XCXSNQG7-DTKl-Qhp.js} +1 -1
  36. package/dist/static/assets/{blockDiagram-38ab4fdb-DDVs3kx8.js → blockDiagram-38ab4fdb-BOQCxa-J.js} +1 -1
  37. package/dist/static/assets/{bn-BD-2XOGV67Q-DxZpSMDT.js → bn-BD-2XOGV67Q-IHdqEEiU.js} +1 -1
  38. package/dist/static/assets/{c4Diagram-3d4e48cf-z1ySwFoq.js → c4Diagram-3d4e48cf-BsfS6bbA.js} +1 -1
  39. package/dist/static/assets/{ca-ES-6MX7JW3Y-BAULR9eC.js → ca-ES-6MX7JW3Y-BvXW96-a.js} +1 -1
  40. package/dist/static/assets/channel-CxlHPNx-.js +1 -0
  41. package/dist/static/assets/{classDiagram-70f12bd4-CcflZaLB.js → classDiagram-70f12bd4-DtEBciUO.js} +1 -1
  42. package/dist/static/assets/{classDiagram-v2-f2320105-4s1YEUJ7.js → classDiagram-v2-f2320105-DhstM95e.js} +1 -1
  43. package/dist/static/assets/clone-CLXPdWxD.js +1 -0
  44. package/dist/static/assets/{createText-2e5e7dd3-CG8XFIhs.js → createText-2e5e7dd3-CMwfBpkf.js} +1 -1
  45. package/dist/static/assets/{cs-CZ-2BRQDIVT-CtyhBcGZ.js → cs-CZ-2BRQDIVT-CEO7-ad3.js} +1 -1
  46. package/dist/static/assets/{da-DK-5WZEPLOC-BRuHhKp8.js → da-DK-5WZEPLOC--SyHMiIr.js} +1 -1
  47. package/dist/static/assets/{de-DE-XR44H4JA-CLsnZ_4A.js → de-DE-XR44H4JA-DFhdbiqr.js} +1 -1
  48. package/dist/static/assets/{edges-e0da2a9e-zcuQ77XI.js → edges-e0da2a9e-Dt6wNpzA.js} +1 -1
  49. package/dist/static/assets/{el-GR-BZB4AONW-DsoaT9EY.js → el-GR-BZB4AONW-BtqKxae0.js} +1 -1
  50. package/dist/static/assets/{erDiagram-9861fffd-Bgs9cpyD.js → erDiagram-9861fffd-D8dTYLmG.js} +1 -1
  51. package/dist/static/assets/{es-ES-U4NZUMDT-Bw2E0XBb.js → es-ES-U4NZUMDT-CQECcRJK.js} +1 -1
  52. package/dist/static/assets/{eu-ES-A7QVB2H4-CQ1kuGle.js → eu-ES-A7QVB2H4-DMCSZcU_.js} +1 -1
  53. package/dist/static/assets/{fa-IR-HGAKTJCU-DS5nNDFX.js → fa-IR-HGAKTJCU-CuWGTo8O.js} +1 -1
  54. package/dist/static/assets/{fi-FI-Z5N7JZ37-DDV9MnZL.js → fi-FI-Z5N7JZ37-B48P0yVO.js} +1 -1
  55. package/dist/static/assets/{flowDb-956e92f1-BD6rTiXG.js → flowDb-956e92f1-DjuJ2RsZ.js} +1 -1
  56. package/dist/static/assets/{flowDiagram-66a62f08-D-fj1twH.js → flowDiagram-66a62f08-CGxdWcr1.js} +1 -1
  57. package/dist/static/assets/flowDiagram-v2-96b9c2cf-AVP-y8Wc.js +1 -0
  58. package/dist/static/assets/{flowchart-elk-definition-4a651766-DQwlXyNj.js → flowchart-elk-definition-4a651766-CwrQg8bQ.js} +1 -1
  59. package/dist/static/assets/{fr-FR-RHASNOE6-CX7gK2yH.js → fr-FR-RHASNOE6-kC-2LYF7.js} +1 -1
  60. package/dist/static/assets/{ganttDiagram-c361ad54-CcT8r-Dv.js → ganttDiagram-c361ad54-BKeezv9l.js} +1 -1
  61. package/dist/static/assets/{gitGraphDiagram-72cf32ee-B-fu77nl.js → gitGraphDiagram-72cf32ee-Dj-thy84.js} +1 -1
  62. package/dist/static/assets/{gl-ES-HMX3MZ6V-DmSRu7KL.js → gl-ES-HMX3MZ6V-Dqb5t32o.js} +1 -1
  63. package/dist/static/assets/{graph-Xozq0y74.js → graph-BVXcMiT7.js} +1 -1
  64. package/dist/static/assets/{he-IL-6SHJWFNN-ioUktrzK.js → he-IL-6SHJWFNN-sQ-x56Z1.js} +1 -1
  65. package/dist/static/assets/{hi-IN-IWLTKZ5I-DSd_IEtU.js → hi-IN-IWLTKZ5I-D3YHTvwR.js} +1 -1
  66. package/dist/static/assets/{hu-HU-A5ZG7DT2-vfe7InOJ.js → hu-HU-A5ZG7DT2-C7N2rM7-.js} +1 -1
  67. package/dist/static/assets/{id-ID-SAP4L64H-drkdhw09.js → id-ID-SAP4L64H-CquleGuo.js} +1 -1
  68. package/dist/static/assets/{index-3862675e-BsSoycVK.js → index-3862675e-C20q-vC5.js} +1 -1
  69. package/dist/static/assets/{index-DxNzWq2L.js → index-CPaVz_o7.js} +73 -73
  70. package/dist/static/assets/{index-CD2XG8u2.js → index-n9PxF2n7.js} +4 -4
  71. package/dist/static/assets/{infoDiagram-f8f76790-Db3XQGPS.js → infoDiagram-f8f76790-DTzqBsX9.js} +1 -1
  72. package/dist/static/assets/{it-IT-JPQ66NNP-Dfrm9f2z.js → it-IT-JPQ66NNP-DgQ1I_rS.js} +1 -1
  73. package/dist/static/assets/{ja-JP-DBVTYXUO-d3XoxutP.js → ja-JP-DBVTYXUO-BDDHsohK.js} +1 -1
  74. package/dist/static/assets/{journeyDiagram-49397b02-ChsXwRn8.js → journeyDiagram-49397b02-DDWDe9VT.js} +1 -1
  75. package/dist/static/assets/{kaa-6HZHGXH3-Dv5PRO2z.js → kaa-6HZHGXH3-7kU2MZDG.js} +1 -1
  76. package/dist/static/assets/{kab-KAB-ZGHBKWFO-B2Vj6PNf.js → kab-KAB-ZGHBKWFO-DxLZR8Xc.js} +1 -1
  77. package/dist/static/assets/{kk-KZ-P5N5QNE5-Dv70gIrO.js → kk-KZ-P5N5QNE5-CrjN6SZo.js} +1 -1
  78. package/dist/static/assets/{km-KH-HSX4SM5Z-D1adujaO.js → km-KH-HSX4SM5Z-fXBCY1PI.js} +1 -1
  79. package/dist/static/assets/{ko-KR-MTYHY66A-MZXJ1wNa.js → ko-KR-MTYHY66A-r0fEGl_8.js} +1 -1
  80. package/dist/static/assets/{ku-TR-6OUDTVRD-DaWBrq1c.js → ku-TR-6OUDTVRD-QiwK8NVD.js} +1 -1
  81. package/dist/static/assets/{layout-BTPFVak9.js → layout-DDTwsdmP.js} +1 -1
  82. package/dist/static/assets/{line-t41n6zRi.js → line-vXc1x1Ab.js} +1 -1
  83. package/dist/static/assets/{linear-DkELI7NI.js → linear-BjjGEUdO.js} +1 -1
  84. package/dist/static/assets/{lt-LT-XHIRWOB4-WJQQKy4Q.js → lt-LT-XHIRWOB4-BRXBv4jU.js} +1 -1
  85. package/dist/static/assets/{lv-LV-5QDEKY6T-N3YNfIM0.js → lv-LV-5QDEKY6T-B_Md2FV-.js} +1 -1
  86. package/dist/static/assets/{mindmap-definition-fc14e90a-CVim-b_D.js → mindmap-definition-fc14e90a-C_Rv7XkC.js} +1 -1
  87. package/dist/static/assets/{mr-IN-CRQNXWMA-c_mnxx8Z.js → mr-IN-CRQNXWMA-BBosvXx_.js} +1 -1
  88. package/dist/static/assets/{my-MM-5M5IBNSE--joRx6Yq.js → my-MM-5M5IBNSE-bOGsKksC.js} +1 -1
  89. package/dist/static/assets/{nb-NO-T6EIAALU-DmXOFlIn.js → nb-NO-T6EIAALU-Sq_cBGBN.js} +1 -1
  90. package/dist/static/assets/{nl-NL-IS3SIHDZ-ITIWpYJK.js → nl-NL-IS3SIHDZ-D2C0R6Ta.js} +1 -1
  91. package/dist/static/assets/{nn-NO-6E72VCQL-C3OADWCu.js → nn-NO-6E72VCQL-gS3iXfeO.js} +1 -1
  92. package/dist/static/assets/{oc-FR-POXYY2M6-DdHJcrgt.js → oc-FR-POXYY2M6-CExAQbrv.js} +1 -1
  93. package/dist/static/assets/{pa-IN-N4M65BXN-DDAJ9pij.js → pa-IN-N4M65BXN-8dS4bEav.js} +1 -1
  94. package/dist/static/assets/{pica-B_6ofXXN.js → pica-DmOZUjq-.js} +1 -1
  95. package/dist/static/assets/{pieDiagram-8a3498a8-BYt2x9MC.js → pieDiagram-8a3498a8-NdIgX8Qu.js} +1 -1
  96. package/dist/static/assets/{pl-PL-T2D74RX3-DshGI3Tz.js → pl-PL-T2D74RX3-CyaePQAI.js} +1 -1
  97. package/dist/static/assets/{pt-BR-5N22H2LF-HGo88nQV.js → pt-BR-5N22H2LF-DCElnIPA.js} +1 -1
  98. package/dist/static/assets/{pt-PT-UZXXM6DQ-cTNSPqAn.js → pt-PT-UZXXM6DQ-fiz3tL4V.js} +1 -1
  99. package/dist/static/assets/{quadrantDiagram-120e2f19-2mxX1_wl.js → quadrantDiagram-120e2f19-SzZ20uL9.js} +1 -1
  100. package/dist/static/assets/{requirementDiagram-deff3bca-BNfiqDe7.js → requirementDiagram-deff3bca-BkESiM5P.js} +1 -1
  101. package/dist/static/assets/{ro-RO-JPDTUUEW-Bf70y6xU.js → ro-RO-JPDTUUEW-B7Ks_bu3.js} +1 -1
  102. package/dist/static/assets/{ru-RU-B4JR7IUQ-C7f4z-21.js → ru-RU-B4JR7IUQ-BCkgHOqG.js} +1 -1
  103. package/dist/static/assets/{sankeyDiagram-04a897e0-BgjE-O06.js → sankeyDiagram-04a897e0-DO-VaUSa.js} +1 -1
  104. package/dist/static/assets/{sequenceDiagram-704730f1-B_79WsQL.js → sequenceDiagram-704730f1-BvITw4ii.js} +1 -1
  105. package/dist/static/assets/{si-LK-N5RQ5JYF-CkDp-HPU.js → si-LK-N5RQ5JYF-DXMX6jRF.js} +1 -1
  106. package/dist/static/assets/{sk-SK-C5VTKIMK-CMUQ8-wE.js → sk-SK-C5VTKIMK-mVkvwInm.js} +1 -1
  107. package/dist/static/assets/{sl-SI-NN7IZMDC-BGSJyP5v.js → sl-SI-NN7IZMDC-yqb-5JGK.js} +1 -1
  108. package/dist/static/assets/{stateDiagram-587899a1-B2EiD02Y.js → stateDiagram-587899a1-Cb555UUm.js} +1 -1
  109. package/dist/static/assets/{stateDiagram-v2-d93cdb3a-BVKX7Q0H.js → stateDiagram-v2-d93cdb3a-BnSTRfdW.js} +1 -1
  110. package/dist/static/assets/{styles-6aaf32cf-DX6VLmBC.js → styles-6aaf32cf-DmM-xNbN.js} +1 -1
  111. package/dist/static/assets/{styles-9a916d00-ZObg1EjO.js → styles-9a916d00-CQp9r-zI.js} +1 -1
  112. package/dist/static/assets/{styles-c10674c1-B2QdbJXH.js → styles-c10674c1-DukJEX99.js} +1 -1
  113. package/dist/static/assets/{subset-shared.chunk-CFNHXLul.js → subset-shared.chunk-DxGqiA-P.js} +1 -1
  114. package/dist/static/assets/{subset-worker.chunk-BdzGxI7D.js → subset-worker.chunk-CgfLr-3s.js} +1 -1
  115. package/dist/static/assets/{sv-SE-XGPEYMSR-CBqB_zcB.js → sv-SE-XGPEYMSR-D4OA9xsC.js} +1 -1
  116. package/dist/static/assets/{svgDrawCommon-08f97a94-zaLFrg17.js → svgDrawCommon-08f97a94-CKUw9D3R.js} +1 -1
  117. package/dist/static/assets/{ta-IN-2NMHFXQM-BngjSe7_.js → ta-IN-2NMHFXQM-CGYGb5ad.js} +1 -1
  118. package/dist/static/assets/{th-TH-HPSO5L25-hC8JL2xm.js → th-TH-HPSO5L25-C4-hGx1K.js} +1 -1
  119. package/dist/static/assets/{timeline-definition-85554ec2-zp_zvxKY.js → timeline-definition-85554ec2-BGkqW2cy.js} +1 -1
  120. package/dist/static/assets/{tr-TR-DEFEU3FU-CgMVUbEX.js → tr-TR-DEFEU3FU-qfQO0kyM.js} +1 -1
  121. package/dist/static/assets/{uk-UA-QMV73CPH-C7YkH2lC.js → uk-UA-QMV73CPH-Dim8QSj6.js} +1 -1
  122. package/dist/static/assets/{vi-VN-M7AON7JQ-B3j43PFt.js → vi-VN-M7AON7JQ-DI9wHHg_.js} +1 -1
  123. package/dist/static/assets/{xychartDiagram-e933f94c-Cf364fl1.js → xychartDiagram-e933f94c-C9PQpTDy.js} +1 -1
  124. package/dist/static/assets/{zh-CN-LNUGB5OW-CB5Bs8hi.js → zh-CN-LNUGB5OW-Y-ZGqBc2.js} +1 -1
  125. package/dist/static/assets/{zh-HK-E62DVLB3-Cq_xqGWq.js → zh-HK-E62DVLB3-D56waEAR.js} +1 -1
  126. package/dist/static/assets/{zh-TW-RAJ6MFWO-B2_BLWCE.js → zh-TW-RAJ6MFWO-B1JfV8AH.js} +1 -1
  127. package/dist/static/index.html +1 -1
  128. package/package.json +2 -4
  129. package/dist/static/assets/channel-DEbp799J.js +0 -1
  130. package/dist/static/assets/clone-C5amchTr.js +0 -1
  131. package/dist/static/assets/flowDiagram-v2-96b9c2cf-DvE5NWu3.js +0 -1
@@ -0,0 +1,29 @@
1
+ import { connectToCanvas, generateId } from '../lib/ws-client.js';
2
+ export const defaultDeps = {
3
+ connectToCanvas,
4
+ generateId,
5
+ log: console.log,
6
+ error: console.error,
7
+ exit: process.exit,
8
+ };
9
+ export async function moveToFolder(options, deps = defaultDeps) {
10
+ const client = await deps.connectToCanvas();
11
+ const result = await client.send({
12
+ type: 'moveCanvasToFolder',
13
+ id: deps.generateId(),
14
+ params: { canvasName: options.canvasName, folderName: options.folderName },
15
+ });
16
+ if (result.success) {
17
+ if (options.folderName) {
18
+ deps.log(`Canvas "${options.canvasName}" moved to folder "${options.folderName}"`);
19
+ }
20
+ else {
21
+ deps.log(`Canvas "${options.canvasName}" moved to ungrouped`);
22
+ }
23
+ }
24
+ else {
25
+ deps.error(`Failed: ${result.error}`);
26
+ deps.exit(1);
27
+ }
28
+ client.close();
29
+ }
@@ -1 +1,3 @@
1
- export declare function start(): Promise<void>;
1
+ export declare function start(options?: {
2
+ dev?: boolean;
3
+ }): Promise<void>;
@@ -1,7 +1,11 @@
1
- import { exec } from 'child_process';
1
+ import { exec, spawn } from 'child_process';
2
2
  import { promisify } from 'util';
3
+ import { existsSync } from 'fs';
4
+ import { join, dirname } from 'path';
5
+ import { fileURLToPath } from 'url';
3
6
  import { startServer, isBrowserServerRunning, isBrowserConnected } from '../server/index.js';
4
7
  const execAsync = promisify(exec);
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
9
  async function openBrowser(url) {
6
10
  const platform = process.platform;
7
11
  try {
@@ -19,7 +23,66 @@ async function openBrowser(url) {
19
23
  console.log(`Please open ${url} in your browser`);
20
24
  }
21
25
  }
22
- export async function start() {
26
+ function findWebAppDir() {
27
+ const possiblePaths = [
28
+ join(__dirname, '../../../web-app'),
29
+ join(__dirname, '../../../../packages/web-app'),
30
+ ];
31
+ for (const p of possiblePaths) {
32
+ if (existsSync(join(p, 'package.json'))) {
33
+ return p;
34
+ }
35
+ }
36
+ throw new Error('web-app package not found. --dev mode must be run from the source repository.');
37
+ }
38
+ export async function start(options) {
39
+ if (options?.dev) {
40
+ // Set dev port defaults
41
+ if (!process.env.AGENT_CANVAS_WS_PORT) {
42
+ process.env.AGENT_CANVAS_WS_PORT = '7900';
43
+ }
44
+ // Start WS-only server
45
+ console.log('Starting dev mode...');
46
+ await startServer({ wsOnly: true });
47
+ // Start Vite dev server
48
+ const webAppDir = findWebAppDir();
49
+ const viteProcess = spawn('npx', ['vite', '--host'], {
50
+ cwd: webAppDir,
51
+ env: { ...process.env, VITE_WS_PORT: process.env.AGENT_CANVAS_WS_PORT },
52
+ stdio: 'pipe',
53
+ });
54
+ // Parse Vite output to get URL, then open browser
55
+ let opened = false;
56
+ viteProcess.stdout?.on('data', (data) => {
57
+ const output = data.toString();
58
+ process.stdout.write(output);
59
+ if (!opened) {
60
+ // Vite prints "Local: http://localhost:5173/" — extract the URL
61
+ const match = output.match(/Local:\s+(https?:\/\/\S+)/);
62
+ if (match) {
63
+ opened = true;
64
+ openBrowser(match[1]);
65
+ }
66
+ }
67
+ });
68
+ viteProcess.stderr?.on('data', (data) => {
69
+ process.stderr.write(data);
70
+ });
71
+ viteProcess.on('close', (code) => {
72
+ console.log(`Vite dev server exited with code ${code}`);
73
+ process.exit(code ?? 0);
74
+ });
75
+ // Cleanup: kill Vite on Ctrl+C
76
+ const cleanup = () => {
77
+ viteProcess.kill();
78
+ process.exit(0);
79
+ };
80
+ process.on('SIGINT', cleanup);
81
+ process.on('SIGTERM', cleanup);
82
+ console.log('\nDev mode is ready. Press Ctrl+C to stop.');
83
+ await new Promise(() => { }); // Block forever
84
+ return;
85
+ }
23
86
  const running = await isBrowserServerRunning();
24
87
  if (!running) {
25
88
  console.log('Starting canvas server...');
package/dist/index.js CHANGED
@@ -21,16 +21,20 @@ import { list, defaultDeps as listDeps } from './commands/list.js';
21
21
  import { newCanvas, defaultDeps as newCanvasDeps } from './commands/new-canvas.js';
22
22
  import { useCanvas, defaultDeps as useCanvasDeps } from './commands/use-canvas.js';
23
23
  import { renameCanvas, defaultDeps as renameCanvasDeps } from './commands/rename-canvas.js';
24
+ import { createFolder, defaultDeps as createFolderDeps } from './commands/create-folder.js';
25
+ import { deleteFolder, defaultDeps as deleteFolderDeps } from './commands/delete-folder.js';
26
+ import { moveToFolder, defaultDeps as moveToFolderDeps } from './commands/move-to-folder.js';
24
27
  const program = new Command();
25
28
  program
26
29
  .name('agent-canvas')
27
30
  .description('CLI for Agent Canvas - Excalidraw interface for AI agents')
28
- .version('0.10.0');
31
+ .version('0.12.0');
29
32
  program
30
33
  .command('start')
31
34
  .description('Start the canvas server and open in browser')
32
- .action(async () => {
33
- await start();
35
+ .option('--dev', 'Development mode: use Vite dev server with HMR')
36
+ .action(async (options) => {
37
+ await start({ dev: options.dev });
34
38
  });
35
39
  program
36
40
  .command('load [filepath]')
@@ -58,6 +62,7 @@ program
58
62
  .option('--label-font-size <number>', 'Label font size', parseFloat)
59
63
  .option('--label-stroke-color <color>', 'Label text color (hex, defaults to --stroke-color)')
60
64
  .option('-n, --note <text>', 'Note for this element (stored in customData)')
65
+ .option('--animated', 'Zoom to element after adding')
61
66
  .action(async (options) => {
62
67
  await addShape({
63
68
  type: options.type,
@@ -74,6 +79,7 @@ program
74
79
  labelFontSize: options.labelFontSize,
75
80
  labelStrokeColor: options.labelStrokeColor,
76
81
  note: options.note,
82
+ animated: options.animated,
77
83
  }, addShapeDeps);
78
84
  });
79
85
  // ============================================================================
@@ -90,6 +96,7 @@ program
90
96
  .option('-a, --anchor <anchor>', 'Anchor point: topLeft, topCenter, topRight, leftCenter, center, rightCenter, bottomLeft, bottomCenter, bottomRight')
91
97
  .option('--stroke-color <color>', 'Text color (hex)')
92
98
  .option('-n, --note <text>', 'Note for this element (stored in customData)')
99
+ .option('--animated', 'Zoom to element after adding')
93
100
  .action(async (options) => {
94
101
  await addText({
95
102
  text: options.text,
@@ -100,6 +107,7 @@ program
100
107
  anchor: options.anchor,
101
108
  strokeColor: options.strokeColor,
102
109
  note: options.note,
110
+ animated: options.animated,
103
111
  }, addTextDeps);
104
112
  });
105
113
  // ============================================================================
@@ -116,6 +124,7 @@ program
116
124
  .option('--stroke-width <number>', 'Line width in pixels', parseFloat)
117
125
  .option('--stroke-style <style>', 'Line style: solid, dashed, or dotted')
118
126
  .option('-n, --note <text>', 'Note for this element (stored in customData)')
127
+ .option('--animated', 'Zoom to element after adding')
119
128
  .action(async (options) => {
120
129
  await addLine({
121
130
  x: options.x,
@@ -126,6 +135,7 @@ program
126
135
  strokeWidth: options.strokeWidth,
127
136
  strokeStyle: options.strokeStyle,
128
137
  note: options.note,
138
+ animated: options.animated,
129
139
  }, addLineDeps);
130
140
  });
131
141
  // ============================================================================
@@ -146,6 +156,7 @@ program
146
156
  .option('--arrow-type <type>', 'Arrow type: sharp (straight), round (curved), elbow (90° angles)')
147
157
  .option('--via <points>', 'Intermediate points as "x1,y1;x2,y2;..." (absolute coordinates). For round: 1 control point. For elbow: multiple turn points.')
148
158
  .option('-n, --note <text>', 'Note for this element (stored in customData)')
159
+ .option('--animated', 'Zoom to element after adding')
149
160
  .action(async (options) => {
150
161
  await addArrow({
151
162
  x: options.x,
@@ -160,6 +171,7 @@ program
160
171
  arrowType: options.arrowType,
161
172
  via: options.via,
162
173
  note: options.note,
174
+ animated: options.animated,
163
175
  }, addArrowDeps);
164
176
  });
165
177
  // ============================================================================
@@ -175,6 +187,7 @@ program
175
187
  .option('--stroke-style <style>', 'Stroke style: solid, dashed, or dotted')
176
188
  .option('--fill-style <style>', 'Fill style: hachure, cross-hatch, solid, or zigzag')
177
189
  .option('-n, --note <text>', 'Note for this element (stored in customData)')
190
+ .option('--animated', 'Zoom to element after adding')
178
191
  .action(async (options) => {
179
192
  await addPolygon({
180
193
  points: options.points,
@@ -184,6 +197,7 @@ program
184
197
  strokeStyle: options.strokeStyle,
185
198
  fillStyle: options.fillStyle,
186
199
  note: options.note,
200
+ animated: options.animated,
187
201
  }, addPolygonDeps);
188
202
  });
189
203
  // ============================================================================
@@ -377,4 +391,45 @@ program
377
391
  .action(async (name) => {
378
392
  await renameCanvas({ newName: name }, renameCanvasDeps);
379
393
  });
394
+ // ============================================================================
395
+ // Create Folder
396
+ // ============================================================================
397
+ program
398
+ .command('create-folder')
399
+ .description('Create a new folder for organizing canvases')
400
+ .requiredOption('-n, --name <name>', 'Folder name')
401
+ .action(async (options) => {
402
+ await createFolder({ name: options.name }, createFolderDeps);
403
+ });
404
+ // ============================================================================
405
+ // Delete Folder
406
+ // ============================================================================
407
+ program
408
+ .command('delete-folder')
409
+ .description('Delete a folder (canvases in it become ungrouped)')
410
+ .argument('<name>', 'Folder name to delete')
411
+ .action(async (name) => {
412
+ await deleteFolder({ name }, deleteFolderDeps);
413
+ });
414
+ // ============================================================================
415
+ // Move to Folder
416
+ // ============================================================================
417
+ program
418
+ .command('move-to-folder')
419
+ .description('Move a canvas to a folder, or to ungrouped')
420
+ .argument('<canvas-name>', 'Canvas name to move')
421
+ .argument('[folder-name]', 'Target folder name (omit with --ungrouped to remove from folder)')
422
+ .option('--ungrouped', 'Move canvas out of its folder to ungrouped')
423
+ .action(async (canvasName, folderName, options) => {
424
+ if (options.ungrouped) {
425
+ await moveToFolder({ canvasName, folderName: null }, moveToFolderDeps);
426
+ }
427
+ else if (folderName) {
428
+ await moveToFolder({ canvasName, folderName }, moveToFolderDeps);
429
+ }
430
+ else {
431
+ console.error('Error: provide a folder name or use --ungrouped');
432
+ process.exit(1);
433
+ }
434
+ });
380
435
  program.parse();
@@ -24,6 +24,8 @@ export interface ListCanvasesResponse {
24
24
  activeCanvasId?: string;
25
25
  agentActiveCanvasId?: string;
26
26
  canvases?: CanvasMetadata[];
27
+ categories?: CanvasCategory[];
28
+ canvasCategoryMap?: Record<string, string>;
27
29
  error?: string;
28
30
  }
29
31
  export interface CreateCanvasParams {
@@ -76,6 +78,7 @@ export interface AddShapeParams {
76
78
  strokeColor?: string;
77
79
  };
78
80
  customData?: Record<string, unknown>;
81
+ animated?: boolean;
79
82
  }
80
83
  export interface AddShapeResponse {
81
84
  type: 'addShapeResult';
@@ -98,6 +101,7 @@ export interface AddTextParams {
98
101
  anchor?: TextAnchor;
99
102
  strokeColor?: string;
100
103
  customData?: Record<string, unknown>;
104
+ animated?: boolean;
101
105
  }
102
106
  export interface AddTextResponse {
103
107
  type: 'addTextResult';
@@ -119,6 +123,7 @@ export interface AddLineParams {
119
123
  strokeWidth?: number;
120
124
  strokeStyle?: 'solid' | 'dashed' | 'dotted';
121
125
  customData?: Record<string, unknown>;
126
+ animated?: boolean;
122
127
  }
123
128
  export interface AddLineResponse {
124
129
  type: 'addLineResult';
@@ -143,6 +148,7 @@ export interface AddArrowParams {
143
148
  y: number;
144
149
  }>;
145
150
  customData?: Record<string, unknown>;
151
+ animated?: boolean;
146
152
  }
147
153
  export interface AddArrowResponse {
148
154
  type: 'addArrowResult';
@@ -162,6 +168,7 @@ export interface AddPolygonParams {
162
168
  strokeStyle?: 'solid' | 'dashed' | 'dotted';
163
169
  fillStyle?: 'hachure' | 'cross-hatch' | 'solid' | 'zigzag';
164
170
  customData?: Record<string, unknown>;
171
+ animated?: boolean;
165
172
  }
166
173
  export interface AddPolygonResponse {
167
174
  type: 'addPolygonResult';
@@ -330,3 +337,32 @@ export interface ClearCanvasResponse {
330
337
  success: boolean;
331
338
  error?: string;
332
339
  }
340
+ export interface CreateFolderParams {
341
+ name: string;
342
+ }
343
+ export interface CreateFolderResponse {
344
+ type: 'createFolderResult';
345
+ id: string;
346
+ success: boolean;
347
+ category?: CanvasCategory;
348
+ error?: string;
349
+ }
350
+ export interface DeleteFolderParams {
351
+ name: string;
352
+ }
353
+ export interface DeleteFolderResponse {
354
+ type: 'deleteFolderResult';
355
+ id: string;
356
+ success: boolean;
357
+ error?: string;
358
+ }
359
+ export interface MoveCanvasToFolderParams {
360
+ canvasName: string;
361
+ folderName: string | null;
362
+ }
363
+ export interface MoveCanvasToFolderResponse {
364
+ type: 'moveCanvasToFolderResult';
365
+ id: string;
366
+ success: boolean;
367
+ error?: string;
368
+ }
@@ -1,4 +1,6 @@
1
- export declare function startServer(): Promise<{
1
+ export declare function startServer(options?: {
2
+ wsOnly?: boolean;
3
+ }): Promise<{
2
4
  httpUrl: string;
3
5
  wsPort: number;
4
6
  close: () => void;
@@ -43,46 +43,50 @@ function getStaticDir() {
43
43
  }
44
44
  throw new Error('Static files not found. Please run "bun run build" first.');
45
45
  }
46
- export function startServer() {
46
+ export function startServer(options) {
47
47
  return new Promise((resolve) => {
48
- const staticDir = getStaticDir();
49
- console.log(`Serving static files from: ${staticDir}`);
50
- // HTTP Server for static files
51
- const httpServer = createServer((req, res) => {
52
- let filePath = req.url || '/';
53
- // Remove query string
54
- filePath = filePath.split('?')[0];
55
- // Default to index.html
56
- if (filePath === '/') {
57
- filePath = '/index.html';
58
- }
59
- const fullPath = join(staticDir, filePath);
60
- if (existsSync(fullPath)) {
61
- const ext = extname(fullPath);
62
- const contentType = MIME_TYPES[ext] || 'application/octet-stream';
63
- const content = readFileSync(fullPath);
64
- res.writeHead(200, { 'Content-Type': contentType });
65
- res.end(content);
66
- }
67
- else {
68
- // For SPA, fallback to index.html for non-asset paths
69
- const indexPath = join(staticDir, 'index.html');
70
- if (existsSync(indexPath) && !filePath.includes('.')) {
71
- const content = readFileSync(indexPath);
72
- res.writeHead(200, { 'Content-Type': 'text/html' });
48
+ const wsOnly = options?.wsOnly ?? false;
49
+ let httpServer = null;
50
+ if (!wsOnly) {
51
+ const staticDir = getStaticDir();
52
+ console.log(`Serving static files from: ${staticDir}`);
53
+ // HTTP Server for static files
54
+ httpServer = createServer((req, res) => {
55
+ let filePath = req.url || '/';
56
+ // Remove query string
57
+ filePath = filePath.split('?')[0];
58
+ // Default to index.html
59
+ if (filePath === '/') {
60
+ filePath = '/index.html';
61
+ }
62
+ const fullPath = join(staticDir, filePath);
63
+ if (existsSync(fullPath)) {
64
+ const ext = extname(fullPath);
65
+ const contentType = MIME_TYPES[ext] || 'application/octet-stream';
66
+ const content = readFileSync(fullPath);
67
+ res.writeHead(200, { 'Content-Type': contentType });
73
68
  res.end(content);
74
69
  }
75
70
  else {
76
- res.writeHead(404);
77
- res.end('Not Found');
71
+ // For SPA, fallback to index.html for non-asset paths
72
+ const indexPath = join(staticDir, 'index.html');
73
+ if (existsSync(indexPath) && !filePath.includes('.')) {
74
+ const content = readFileSync(indexPath);
75
+ res.writeHead(200, { 'Content-Type': 'text/html' });
76
+ res.end(content);
77
+ }
78
+ else {
79
+ res.writeHead(404);
80
+ res.end('Not Found');
81
+ }
78
82
  }
79
- }
80
- });
83
+ });
84
+ }
81
85
  // WebSocket Server
82
86
  const wss = new WebSocketServer({ port: WS_PORT });
83
87
  const closeServer = () => {
84
88
  wss.close();
85
- httpServer.close();
89
+ httpServer?.close();
86
90
  };
87
91
  // Idle auto-shutdown
88
92
  function resetIdleTimer() {
@@ -156,17 +160,27 @@ export function startServer() {
156
160
  }
157
161
  });
158
162
  });
159
- httpServer.listen(HTTP_PORT, () => {
160
- const httpUrl = `http://localhost:${HTTP_PORT}`;
161
- console.log(`Canvas server running:`);
162
- console.log(` - Web UI: ${httpUrl}`);
163
- console.log(` - WebSocket: ws://localhost:${WS_PORT}`);
163
+ if (wsOnly) {
164
+ console.log(`WebSocket server running on ws://localhost:${WS_PORT}`);
164
165
  resolve({
165
- httpUrl,
166
+ httpUrl: '',
166
167
  wsPort: WS_PORT,
167
168
  close: closeServer,
168
169
  });
169
- });
170
+ }
171
+ else {
172
+ httpServer.listen(HTTP_PORT, () => {
173
+ const httpUrl = `http://localhost:${HTTP_PORT}`;
174
+ console.log(`Canvas server running:`);
175
+ console.log(` - Web UI: ${httpUrl}`);
176
+ console.log(` - WebSocket: ws://localhost:${WS_PORT}`);
177
+ resolve({
178
+ httpUrl,
179
+ wsPort: WS_PORT,
180
+ close: closeServer,
181
+ });
182
+ });
183
+ }
170
184
  });
171
185
  }
172
186
  export function isBrowserServerRunning() {
@@ -1,4 +1,4 @@
1
- import"./index-DxNzWq2L.js";var u={paste:"لصق",pasteAsPlaintext:"اللصق كنص عادي",pasteCharts:"لصق الرسوم البيانية",selectAll:"تحديد الكل",multiSelect:"إضافة عنصر للتحديد",moveCanvas:"نقل لوح الرسم",cut:"قص",copy:"نسخ",copyAsPng:"نسخ إلى الحافظة بصيغة PNG",copyAsSvg:"نسخ إلى الحافظة بصيغة SVG",copyText:"نسخ إلى الحافظة كنص",copySource:"",convertToCode:"",bringForward:"جلب للأمام",sendToBack:"أرسل للخلف",bringToFront:"أحضر للأمام",sendBackward:"أرسل للخلف",delete:"حذف",copyStyles:"نسخ الأنماط",pasteStyles:"لصق الأنماط",stroke:"الخط",background:"الخلفية",fill:"التعبئة",strokeWidth:"سُمك الخط",strokeStyle:"نمط الخط",strokeStyle_solid:"متصل",strokeStyle_dashed:"متقطع",strokeStyle_dotted:"منقط",sloppiness:"الإمالة",opacity:"الشفافية",textAlign:"محاذاة النص",edges:"الحواف",sharp:"حادة",round:"دائرية",arrowheads:"رؤوس الأسهم",arrowhead_none:"لا شيء",arrowhead_arrow:"سهم",arrowhead_bar:"شريط",arrowhead_circle:"",arrowhead_circle_outline:"",arrowhead_triangle:"مثلث",arrowhead_triangle_outline:"",arrowhead_diamond:"",arrowhead_diamond_outline:"",fontSize:"حجم الخط",fontFamily:"نوع الخط",addWatermark:'إضافة "مصنوعة بواسطة Excalidraw"',handDrawn:"رسم باليد",normal:"عادي",code:"رمز",small:"صغير",medium:"متوسط",large:"كبير",veryLarge:"كبير جدا",solid:"كامل",hachure:"خطوط",zigzag:"متعرج",crossHatch:"خطوط متقطعة",thin:"نحيف",bold:"داكن",left:"الـيسار",center:"وسط",right:"يمين",extraBold:"عريض",architect:"معماري",artist:"رسام",cartoonist:"كرتوني",fileTitle:"إسم الملف",colorPicker:"منتقي اللون",canvasColors:"تستخدم على القماش",canvasBackground:"خلفية اللوحة",drawingCanvas:"لوحة الرسم",layers:"الطبقات",actions:"الإجراءات",language:"اللغة",liveCollaboration:"التعاون المباشر...",duplicateSelection:"تكرار",untitled:"غير معنون",name:"الاسم",yourName:"اسمك",madeWithExcalidraw:"مصنوعة بواسطة Excalidraw",group:"تحديد مجموعة",ungroup:"إلغاء تحديد مجموعة",collaborators:"المتعاونون",showGrid:"إظهار الشبكة",addToLibrary:"أضف إلى المكتبة",removeFromLibrary:"حذف من المكتبة",libraryLoadingMessage:"جارٍ تحميل المكتبة…",libraries:"تصفح المكتبات",loadingScene:"جاري تحميل المشهد…",align:"محاذاة",alignTop:"محاذاة إلى اﻷعلى",alignBottom:"محاذاة إلى اﻷسفل",alignLeft:"محاذاة إلى اليسار",alignRight:"محاذاة إلى اليمين",centerVertically:"توسيط عمودي",centerHorizontally:"توسيط أفقي",distributeHorizontally:"التوزيع الأفقي",distributeVertically:"التوزيع عمودياً",flipHorizontal:"قلب عامودي",flipVertical:"قلب أفقي",viewMode:"نمط العرض",share:"مشاركة",showStroke:"إظهار منتقي لون الخط",showBackground:"إظهار منتقي لون الخلفية",toggleTheme:"غير النمط",personalLib:"المكتبة الشخصية",excalidrawLib:"مكتبتنا",decreaseFontSize:"تصغير حجم الخط",increaseFontSize:"تكبير حجم الخط",unbindText:"فك ربط النص",bindText:"ربط النص بالحاوية",createContainerFromText:"نص مغلف في حاوية",link:{edit:"تعديل الرابط",editEmbed:"تحرير الرابط وإدراجه",create:"إنشاء رابط",createEmbed:"إنشاء رابط و إدراجه",label:"رابط",labelEmbed:"رابط و إدراج",empty:"لم يتم تعيين رابط"},lineEditor:{edit:"تحرير السطر",exit:"الخروج من المُحرر"},elementLock:{lock:"قفل",unlock:"فتح",lockAll:"قفل الكل",unlockAll:"فتح الكل"},statusPublished:"نُشر",sidebarLock:"إبقاء الشريط الجانبي مفتوح",selectAllElementsInFrame:"تحديد جميع العناصر في الإطار",removeAllElementsFromFrame:"إزالة جميع العناصر من الإطار",eyeDropper:"اختيار اللون من القماش",textToDiagram:"",prompt:""},A={noItems:"لا توجد عناصر أضيفت بعد...",hint_emptyLibrary:"حدد عنصر على القماش لإضافته هنا، أو تثبيت مكتبة من المستودع العام أدناه.",hint_emptyPrivateLibrary:"حدد عنصر على القماش لإضافته هنا."},e={clearReset:"إعادة تعيين اللوحة",exportJSON:"صدر الملف",exportImage:"تصدير الصورة...",export:"حفظ إلى...",copyToClipboard:"نسخ إلى الحافظة",save:"احفظ للملف الحالي",saveAs:"حفظ كـ",load:"فتح",getShareableLink:"احصل على رابط المشاركة",close:"غلق",selectLanguage:"اختر اللغة",scrollBackToContent:"الرجوع إلى المحتوى",zoomIn:"تكبير",zoomOut:"تصغير",resetZoom:"إعادة تعيين الشاشة",menu:"القائمة",done:"تم",edit:"تعديل",undo:"تراجع",redo:"إعادة تنفيذ",resetLibrary:"إعادة ضبط المكتبة",createNewRoom:"إنشاء غرفة جديدة",fullScreen:"شاشة كاملة",darkMode:"الوضع المظلم",lightMode:"الوضع المضيء",zenMode:"وضع التأمل",objectsSnapMode:"التقط إلى العناصر",exitZenMode:"إلغاء الوضع الليلى",cancel:"إلغاء",clear:"مسح",remove:"إزالة",embed:"تبديل الإدراج",publishLibrary:"انشر",submit:"أرسل",confirm:"تأكيد",embeddableInteractionButton:"اضغط للتفاعل"},a={clearReset:"هذا سيُزيل كامل اللوحة. هل أنت متأكد؟",couldNotCreateShareableLink:"تعذر إنشاء رابطة المشاركة.",couldNotCreateShareableLinkTooBig:"تعذر إنشاء رابط قابل للمشاركة: المشهد كبير جدًا",couldNotLoadInvalidFile:"تعذر التحميل، الملف غير صالح",importBackendFailed:"فشل الاستيراد من الخادوم.",cannotExportEmptyCanvas:"لا يمكن تصدير لوحة فارغة.",couldNotCopyToClipboard:"تعذر النسخ إلى الحافظة.",decryptFailed:"تعذر فك تشفير البيانات.",uploadedSecurly:"تم تأمين التحميل بتشفير النهاية إلى النهاية، مما يعني أن خادوم Excalidraw والأطراف الثالثة لا يمكنها قراءة المحتوى.",loadSceneOverridePrompt:"تحميل الرسم الخارجي سيحل محل المحتوى الموجود لديك. هل ترغب في المتابعة؟",collabStopOverridePrompt:`إيقاف الجلسة سيؤدي إلى الكتابة فوق رسومك السابقة المخزنة داخليا. هل أنت متأكد؟
1
+ import"./index-CPaVz_o7.js";var u={paste:"لصق",pasteAsPlaintext:"اللصق كنص عادي",pasteCharts:"لصق الرسوم البيانية",selectAll:"تحديد الكل",multiSelect:"إضافة عنصر للتحديد",moveCanvas:"نقل لوح الرسم",cut:"قص",copy:"نسخ",copyAsPng:"نسخ إلى الحافظة بصيغة PNG",copyAsSvg:"نسخ إلى الحافظة بصيغة SVG",copyText:"نسخ إلى الحافظة كنص",copySource:"",convertToCode:"",bringForward:"جلب للأمام",sendToBack:"أرسل للخلف",bringToFront:"أحضر للأمام",sendBackward:"أرسل للخلف",delete:"حذف",copyStyles:"نسخ الأنماط",pasteStyles:"لصق الأنماط",stroke:"الخط",background:"الخلفية",fill:"التعبئة",strokeWidth:"سُمك الخط",strokeStyle:"نمط الخط",strokeStyle_solid:"متصل",strokeStyle_dashed:"متقطع",strokeStyle_dotted:"منقط",sloppiness:"الإمالة",opacity:"الشفافية",textAlign:"محاذاة النص",edges:"الحواف",sharp:"حادة",round:"دائرية",arrowheads:"رؤوس الأسهم",arrowhead_none:"لا شيء",arrowhead_arrow:"سهم",arrowhead_bar:"شريط",arrowhead_circle:"",arrowhead_circle_outline:"",arrowhead_triangle:"مثلث",arrowhead_triangle_outline:"",arrowhead_diamond:"",arrowhead_diamond_outline:"",fontSize:"حجم الخط",fontFamily:"نوع الخط",addWatermark:'إضافة "مصنوعة بواسطة Excalidraw"',handDrawn:"رسم باليد",normal:"عادي",code:"رمز",small:"صغير",medium:"متوسط",large:"كبير",veryLarge:"كبير جدا",solid:"كامل",hachure:"خطوط",zigzag:"متعرج",crossHatch:"خطوط متقطعة",thin:"نحيف",bold:"داكن",left:"الـيسار",center:"وسط",right:"يمين",extraBold:"عريض",architect:"معماري",artist:"رسام",cartoonist:"كرتوني",fileTitle:"إسم الملف",colorPicker:"منتقي اللون",canvasColors:"تستخدم على القماش",canvasBackground:"خلفية اللوحة",drawingCanvas:"لوحة الرسم",layers:"الطبقات",actions:"الإجراءات",language:"اللغة",liveCollaboration:"التعاون المباشر...",duplicateSelection:"تكرار",untitled:"غير معنون",name:"الاسم",yourName:"اسمك",madeWithExcalidraw:"مصنوعة بواسطة Excalidraw",group:"تحديد مجموعة",ungroup:"إلغاء تحديد مجموعة",collaborators:"المتعاونون",showGrid:"إظهار الشبكة",addToLibrary:"أضف إلى المكتبة",removeFromLibrary:"حذف من المكتبة",libraryLoadingMessage:"جارٍ تحميل المكتبة…",libraries:"تصفح المكتبات",loadingScene:"جاري تحميل المشهد…",align:"محاذاة",alignTop:"محاذاة إلى اﻷعلى",alignBottom:"محاذاة إلى اﻷسفل",alignLeft:"محاذاة إلى اليسار",alignRight:"محاذاة إلى اليمين",centerVertically:"توسيط عمودي",centerHorizontally:"توسيط أفقي",distributeHorizontally:"التوزيع الأفقي",distributeVertically:"التوزيع عمودياً",flipHorizontal:"قلب عامودي",flipVertical:"قلب أفقي",viewMode:"نمط العرض",share:"مشاركة",showStroke:"إظهار منتقي لون الخط",showBackground:"إظهار منتقي لون الخلفية",toggleTheme:"غير النمط",personalLib:"المكتبة الشخصية",excalidrawLib:"مكتبتنا",decreaseFontSize:"تصغير حجم الخط",increaseFontSize:"تكبير حجم الخط",unbindText:"فك ربط النص",bindText:"ربط النص بالحاوية",createContainerFromText:"نص مغلف في حاوية",link:{edit:"تعديل الرابط",editEmbed:"تحرير الرابط وإدراجه",create:"إنشاء رابط",createEmbed:"إنشاء رابط و إدراجه",label:"رابط",labelEmbed:"رابط و إدراج",empty:"لم يتم تعيين رابط"},lineEditor:{edit:"تحرير السطر",exit:"الخروج من المُحرر"},elementLock:{lock:"قفل",unlock:"فتح",lockAll:"قفل الكل",unlockAll:"فتح الكل"},statusPublished:"نُشر",sidebarLock:"إبقاء الشريط الجانبي مفتوح",selectAllElementsInFrame:"تحديد جميع العناصر في الإطار",removeAllElementsFromFrame:"إزالة جميع العناصر من الإطار",eyeDropper:"اختيار اللون من القماش",textToDiagram:"",prompt:""},A={noItems:"لا توجد عناصر أضيفت بعد...",hint_emptyLibrary:"حدد عنصر على القماش لإضافته هنا، أو تثبيت مكتبة من المستودع العام أدناه.",hint_emptyPrivateLibrary:"حدد عنصر على القماش لإضافته هنا."},e={clearReset:"إعادة تعيين اللوحة",exportJSON:"صدر الملف",exportImage:"تصدير الصورة...",export:"حفظ إلى...",copyToClipboard:"نسخ إلى الحافظة",save:"احفظ للملف الحالي",saveAs:"حفظ كـ",load:"فتح",getShareableLink:"احصل على رابط المشاركة",close:"غلق",selectLanguage:"اختر اللغة",scrollBackToContent:"الرجوع إلى المحتوى",zoomIn:"تكبير",zoomOut:"تصغير",resetZoom:"إعادة تعيين الشاشة",menu:"القائمة",done:"تم",edit:"تعديل",undo:"تراجع",redo:"إعادة تنفيذ",resetLibrary:"إعادة ضبط المكتبة",createNewRoom:"إنشاء غرفة جديدة",fullScreen:"شاشة كاملة",darkMode:"الوضع المظلم",lightMode:"الوضع المضيء",zenMode:"وضع التأمل",objectsSnapMode:"التقط إلى العناصر",exitZenMode:"إلغاء الوضع الليلى",cancel:"إلغاء",clear:"مسح",remove:"إزالة",embed:"تبديل الإدراج",publishLibrary:"انشر",submit:"أرسل",confirm:"تأكيد",embeddableInteractionButton:"اضغط للتفاعل"},a={clearReset:"هذا سيُزيل كامل اللوحة. هل أنت متأكد؟",couldNotCreateShareableLink:"تعذر إنشاء رابطة المشاركة.",couldNotCreateShareableLinkTooBig:"تعذر إنشاء رابط قابل للمشاركة: المشهد كبير جدًا",couldNotLoadInvalidFile:"تعذر التحميل، الملف غير صالح",importBackendFailed:"فشل الاستيراد من الخادوم.",cannotExportEmptyCanvas:"لا يمكن تصدير لوحة فارغة.",couldNotCopyToClipboard:"تعذر النسخ إلى الحافظة.",decryptFailed:"تعذر فك تشفير البيانات.",uploadedSecurly:"تم تأمين التحميل بتشفير النهاية إلى النهاية، مما يعني أن خادوم Excalidraw والأطراف الثالثة لا يمكنها قراءة المحتوى.",loadSceneOverridePrompt:"تحميل الرسم الخارجي سيحل محل المحتوى الموجود لديك. هل ترغب في المتابعة؟",collabStopOverridePrompt:`إيقاف الجلسة سيؤدي إلى الكتابة فوق رسومك السابقة المخزنة داخليا. هل أنت متأكد؟
2
2
 
3
3
  (إذا كنت ترغب في الاحتفاظ برسمك المخزن داخليا، ببساطة أغلق علامة تبويب المتصفح بدلاً من ذلك.)`,errorAddingToLibrary:"تعذر إضافة العنصر للمكتبة",errorRemovingFromLibrary:"تعذر إزالة العنصر من المكتبة",confirmAddLibrary:"هذا سيضيف {{numShapes}} شكل إلى مكتبتك. هل أنت متأكد؟",imageDoesNotContainScene:"يبدو أن هذه الصورة لا تحتوي على أي بيانات مشهد. هل قمت بتمكين تضمين المشهد أثناء التصدير؟",cannotRestoreFromImage:"تعذر استعادة المشهد من ملف الصورة",invalidSceneUrl:"تعذر استيراد المشهد من عنوان URL المتوفر. إما أنها مشوهة، أو لا تحتوي على بيانات Excalidraw JSON صالحة.",resetLibrary:"هذا سوف يمسح مكتبتك. هل أنت متأكد؟",removeItemsFromsLibrary:"حذف {{count}} عنصر (عناصر) من المكتبة؟",invalidEncryptionKey:"مفتاح التشفير يجب أن يكون من 22 حرفاً. التعاون المباشر معطل.",collabOfflineWarning:`لا يوجد اتصال بالانترنت.
4
4
  لن يتم حفظ التغييرات التي قمت بها!`},r={unsupportedFileType:"نوع الملف غير مدعوم.",imageInsertError:"تعذر إدراج الصورة. حاول مرة أخرى لاحقاً...",fileTooBig:"الملف كبير جداً. الحد الأقصى المسموح به للحجم هو {{maxSize}}.",svgImageInsertError:"تعذر إدراج صورة SVG. يبدو أن ترميز SVG غير صحيح.",failedToFetchImage:"",invalidSVGString:"SVG غير صالح.",cannotResolveCollabServer:"تعذر الاتصال بخادم التعاون. الرجاء إعادة تحميل الصفحة والمحاولة مرة أخرى.",importLibraryError:"تعذر تحميل المكتبة",collabSaveFailed:"تعذر الحفظ في قاعدة البيانات. إذا استمرت المشاكل، يفضل أن تحفظ ملفك محليا كي لا تفقد عملك.",collabSaveFailed_sizeExceeded:"تعذر الحفظ في قاعدة البيانات، يبدو أن القماش كبير للغاية، يفضّل حفظ الملف محليا كي لا تفقد عملك.",imageToolNotSupported:"",brave_measure_text_error:{line1:"يبدو أنك تستخدم متصفح Brave مع إعداد <bold>حظر صارم لتتبع البصمة</bold>.",line2:"قد يؤدي هذا إلى كسر <bold>عناصر النص</bold> في الرسومات الخاصة بك.",line3:"من المستحسن إلغاء تفعيل هذا الإعداد. يمكنك اتباع <link>هذه الخطوات</link> لفعل ذلك.",line4:"إذا لم يصلح تعطيل هذا الإعداد طريقة عرض النصوص، الرجاء كتابة <issueLink>بلاغ</issueLink> على حسابنا في GitHub، أو راسلنا على <discordLink>Discord</discordLink>"},libraryElementTypeError:{embeddable:"لا يمكن إضافة العناصر القابلة للتضمين في المكتبة.",iframe:"",image:"سوف يتم دعم إضافة صور إلى المكتبة قريباً!"},asyncPasteFailedOnRead:"",asyncPasteFailedOnParse:"",copyToSystemClipboardFailed:""},o={selection:"تحديد",image:"إدراج صورة",rectangle:"مستطيل",diamond:"مضلع",ellipse:"دائرة",arrow:"سهم",line:"خط",freedraw:"رسم",text:"نص",library:"مكتبة",lock:"الحفاظ على أداة التحديد نشطة بعد الرسم",penMode:"وضع القلم - امنع اللمس",link:"إضافة/تحديث الرابط للشكل المحدد",eraser:"ممحاة",frame:"أداة الإطار",magicframe:"",embeddable:"تضمين ويب",laser:"مؤشر ليزر",hand:"يد (أداة الإزاحة)",extraTools:"المزيد من أﻷدوات",mermaidToExcalidraw:"",magicSettings:""},t={canvasActions:"إجراءات اللوحة",selectedShapeActions:"إجراءات الشكل المحدد",shapes:"الأشكال"},i={canvasPanning:"لتحريك القماش، اضغط على عجلة الفأرة أو مفتاح المسافة أثناء السحب، أو استخدم أداة اليد",linearElement:"انقر لبدء نقاط متعددة، اسحب لخط واحد",freeDraw:"انقر واسحب، افرج عند الانتهاء",text:"نصيحة: يمكنك أيضًا إضافة نص بالنقر المزدوج في أي مكان بأداة الاختيار",embeddable:"اضغط مع السحب لإنشاء موقع ويب مضمّن",text_selected:"انقر نقراً مزدوجاً أو اضغط ادخال لتعديل النص",text_editing:"اضغط على Esc أو (Ctrl أو Cmd) + Enter لإنهاء التعديل",linearElementMulti:"انقر فوق النقطة الأخيرة أو اضغط على Esc أو Enter للإنهاء",lockAngle:"يمكنك تقييد الزاوية بالضغط على SHIFT",resize:`يمكنك تقييد النسب بالضغط على SHIFT أثناء تغيير الحجم،
@@ -1 +1 @@
1
- import{w as ln,c as H}from"./path-CbwjOpE9.js";import{B as rn,D as M,E as D,F as an,G as y,H as on,I as j,J as _,K as un,L as t,M as sn,N as tn,O as fn}from"./index-CD2XG8u2.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function dn(l,h,O,E,v,A,J,r){var q=O-l,i=E-h,n=J-v,m=r-A,a=m*q-n*i;if(!(a*a<y))return a=(n*(h-A)-m*(l-v))/a,[l+a*q,h+a*i]}function W(l,h,O,E,v,A,J){var r=l-O,q=h-E,i=(J?A:-A)/j(r*r+q*q),n=i*q,m=-i*r,a=l+n,s=h+m,f=O+n,c=E+m,K=(a+f)/2,o=(s+c)/2,p=f-a,g=c-s,R=p*p+g*g,T=v-A,P=a*c-f*s,B=(g<0?-1:1)*j(tn(0,T*T*R-P*P)),F=(P*g-p*B)/R,G=(-P*p-g*B)/R,w=(P*g+p*B)/R,d=(-P*p+g*B)/R,x=F-K,e=G-o,u=w-K,L=d-o;return x*x+e*e>u*u+L*L&&(F=w,G=d),{cx:F,cy:G,x01:-n,y01:-m,x11:F*(v/T-1),y11:G*(v/T-1)}}function vn(){var l=cn,h=yn,O=H(0),E=null,v=gn,A=mn,J=pn,r=null,q=ln(i);function i(){var n,m,a=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,K=un(c-f),o=c>f;if(r||(r=n=q()),s<a&&(m=s,s=a,a=m),!(s>y))r.moveTo(0,0);else if(K>on-y)r.moveTo(s*M(f),s*D(f)),r.arc(0,0,s,f,c,!o),a>y&&(r.moveTo(a*M(c),a*D(c)),r.arc(0,0,a,c,f,o));else{var p=f,g=c,R=f,T=c,P=K,B=K,F=J.apply(this,arguments)/2,G=F>y&&(E?+E.apply(this,arguments):j(a*a+s*s)),w=_(un(s-a)/2,+O.apply(this,arguments)),d=w,x=w,e,u;if(G>y){var L=sn(G/a*D(F)),z=sn(G/s*D(F));(P-=L*2)>y?(L*=o?1:-1,R+=L,T-=L):(P=0,R=T=(f+c)/2),(B-=z*2)>y?(z*=o?1:-1,p+=z,g-=z):(B=0,p=g=(f+c)/2)}var N=s*M(p),S=s*D(p),C=a*M(T),Q=a*D(T);if(w>y){var U=s*M(g),V=s*D(g),X=a*M(R),Y=a*D(R),I;if(K<rn)if(I=dn(N,S,X,Y,U,V,C,Q)){var Z=N-I[0],$=S-I[1],k=U-I[0],b=V-I[1],nn=1/D(fn((Z*k+$*b)/(j(Z*Z+$*$)*j(k*k+b*b)))/2),en=j(I[0]*I[0]+I[1]*I[1]);d=_(w,(a-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else d=x=0}B>y?x>y?(e=W(X,Y,N,S,s,x,o),u=W(U,V,C,Q,s,x,o),r.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?r.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(e.y11,e.x11),!o),r.arc(0,0,s,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),!o),r.arc(u.cx,u.cy,x,t(u.y11,u.x11),t(u.y01,u.x01),!o))):(r.moveTo(N,S),r.arc(0,0,s,p,g,!o)):r.moveTo(N,S),!(a>y)||!(P>y)?r.lineTo(C,Q):d>y?(e=W(C,Q,U,V,a,-d,o),u=W(N,S,X,Y,a,-d,o),r.lineTo(e.cx+e.x01,e.cy+e.y01),d<w?r.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(e.y11,e.x11),!o),r.arc(0,0,a,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),o),r.arc(u.cx,u.cy,d,t(u.y11,u.x11),t(u.y01,u.x01),!o))):r.arc(0,0,a,T,R,o)}if(r.closePath(),n)return r=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,m=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[M(m)*n,D(m)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:H(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:H(+n),i):h},i.cornerRadius=function(n){return arguments.length?(O=typeof n=="function"?n:H(+n),i):O},i.padRadius=function(n){return arguments.length?(E=n==null?null:typeof n=="function"?n:H(+n),i):E},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:H(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:H(+n),i):A},i.padAngle=function(n){return arguments.length?(J=typeof n=="function"?n:H(+n),i):J},i.context=function(n){return arguments.length?(r=n??null,i):r},i}export{vn as a};
1
+ import{w as ln,c as H}from"./path-CbwjOpE9.js";import{B as rn,D as M,E as D,F as an,G as y,H as on,I as j,J as _,K as un,L as t,M as sn,N as tn,O as fn}from"./index-n9PxF2n7.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function dn(l,h,O,E,v,A,J,r){var q=O-l,i=E-h,n=J-v,m=r-A,a=m*q-n*i;if(!(a*a<y))return a=(n*(h-A)-m*(l-v))/a,[l+a*q,h+a*i]}function W(l,h,O,E,v,A,J){var r=l-O,q=h-E,i=(J?A:-A)/j(r*r+q*q),n=i*q,m=-i*r,a=l+n,s=h+m,f=O+n,c=E+m,K=(a+f)/2,o=(s+c)/2,p=f-a,g=c-s,R=p*p+g*g,T=v-A,P=a*c-f*s,B=(g<0?-1:1)*j(tn(0,T*T*R-P*P)),F=(P*g-p*B)/R,G=(-P*p-g*B)/R,w=(P*g+p*B)/R,d=(-P*p+g*B)/R,x=F-K,e=G-o,u=w-K,L=d-o;return x*x+e*e>u*u+L*L&&(F=w,G=d),{cx:F,cy:G,x01:-n,y01:-m,x11:F*(v/T-1),y11:G*(v/T-1)}}function vn(){var l=cn,h=yn,O=H(0),E=null,v=gn,A=mn,J=pn,r=null,q=ln(i);function i(){var n,m,a=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,K=un(c-f),o=c>f;if(r||(r=n=q()),s<a&&(m=s,s=a,a=m),!(s>y))r.moveTo(0,0);else if(K>on-y)r.moveTo(s*M(f),s*D(f)),r.arc(0,0,s,f,c,!o),a>y&&(r.moveTo(a*M(c),a*D(c)),r.arc(0,0,a,c,f,o));else{var p=f,g=c,R=f,T=c,P=K,B=K,F=J.apply(this,arguments)/2,G=F>y&&(E?+E.apply(this,arguments):j(a*a+s*s)),w=_(un(s-a)/2,+O.apply(this,arguments)),d=w,x=w,e,u;if(G>y){var L=sn(G/a*D(F)),z=sn(G/s*D(F));(P-=L*2)>y?(L*=o?1:-1,R+=L,T-=L):(P=0,R=T=(f+c)/2),(B-=z*2)>y?(z*=o?1:-1,p+=z,g-=z):(B=0,p=g=(f+c)/2)}var N=s*M(p),S=s*D(p),C=a*M(T),Q=a*D(T);if(w>y){var U=s*M(g),V=s*D(g),X=a*M(R),Y=a*D(R),I;if(K<rn)if(I=dn(N,S,X,Y,U,V,C,Q)){var Z=N-I[0],$=S-I[1],k=U-I[0],b=V-I[1],nn=1/D(fn((Z*k+$*b)/(j(Z*Z+$*$)*j(k*k+b*b)))/2),en=j(I[0]*I[0]+I[1]*I[1]);d=_(w,(a-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else d=x=0}B>y?x>y?(e=W(X,Y,N,S,s,x,o),u=W(U,V,C,Q,s,x,o),r.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?r.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(e.y11,e.x11),!o),r.arc(0,0,s,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),!o),r.arc(u.cx,u.cy,x,t(u.y11,u.x11),t(u.y01,u.x01),!o))):(r.moveTo(N,S),r.arc(0,0,s,p,g,!o)):r.moveTo(N,S),!(a>y)||!(P>y)?r.lineTo(C,Q):d>y?(e=W(C,Q,U,V,a,-d,o),u=W(N,S,X,Y,a,-d,o),r.lineTo(e.cx+e.x01,e.cy+e.y01),d<w?r.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(e.y11,e.x11),!o),r.arc(0,0,a,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),o),r.arc(u.cx,u.cy,d,t(u.y11,u.x11),t(u.y01,u.x01),!o))):r.arc(0,0,a,T,R,o)}if(r.closePath(),n)return r=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,m=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[M(m)*n,D(m)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:H(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:H(+n),i):h},i.cornerRadius=function(n){return arguments.length?(O=typeof n=="function"?n:H(+n),i):O},i.padRadius=function(n){return arguments.length?(E=n==null?null:typeof n=="function"?n:H(+n),i):E},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:H(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:H(+n),i):A},i.padAngle=function(n){return arguments.length?(J=typeof n=="function"?n:H(+n),i):J},i.context=function(n){return arguments.length?(r=n??null,i):r},i}export{vn as a};
@@ -1 +1 @@
1
- import"./index-DxNzWq2L.js";var e={paste:"Yapışdır",pasteAsPlaintext:"Düz mətn kimi yapışdırın",pasteCharts:"Diaqramları yapışdırın",selectAll:"Hamısını seç",multiSelect:"Seçimə element əlavə edin",moveCanvas:"Kanvası köçürün",cut:"Kəs",copy:"Kopyala",copyAsPng:"PNG olaraq panoya kopyala",copyAsSvg:"SVG olaraq panoya kopyala",copyText:"Mətn olaraq panoya kopyala",copySource:"",convertToCode:"",bringForward:"Önə daşı",sendToBack:"Geriyə göndərin",bringToFront:"Önə gətirin",sendBackward:"Geriyə göndərin",delete:"Sil",copyStyles:"Stilləri kopyalayın",pasteStyles:"Stilləri yapışdırın",stroke:"Strok rəngi",background:"Arxa fon",fill:"Doldur",strokeWidth:"Strok eni",strokeStyle:"Strok stili",strokeStyle_solid:"Solid",strokeStyle_dashed:"Kəsik",strokeStyle_dotted:"Nöqtəli",sloppiness:"Səliqəsizlik",opacity:"Şəffaflıq",textAlign:"Mətni uyğunlaşdır",edges:"Kənarlar",sharp:"Kəskin",round:"Dəyirmi",arrowheads:"Ox ucları",arrowhead_none:"Heç biri",arrowhead_arrow:"Ox",arrowhead_bar:"Çubuq",arrowhead_circle:"",arrowhead_circle_outline:"",arrowhead_triangle:"Üçbucaq",arrowhead_triangle_outline:"",arrowhead_diamond:"",arrowhead_diamond_outline:"",fontSize:"Şrift ölçüsü",fontFamily:"Şrift qrupu",addWatermark:'"Made with Excalidraw" əlavə et',handDrawn:"Əllə çəkilmiş",normal:"Normal",code:"Kod",small:"Kiçik",medium:"Orta",large:"Böyük",veryLarge:"Çox böyük",solid:"Solid",hachure:"Ştrix",zigzag:"Ziqzaq",crossHatch:"Çarpaz dəlik",thin:"İncə",bold:"Qalın",left:"Sol",center:"Mərkəz",right:"Sağ",extraBold:"Ekstra qalın",architect:"Memar",artist:"Rəssam",cartoonist:"Karikaturaçı",fileTitle:"Fayl adı",colorPicker:"Rəng seçən",canvasColors:"Kanvas üzərində istifadə olunur",canvasBackground:"Kanvas arxa fonu",drawingCanvas:"Kanvas çəkmək",layers:"Qatlar",actions:"Hərəkətlər",language:"Dil",liveCollaboration:"Canlı əməkdaşlıq...",duplicateSelection:"Dublikat",untitled:"Başlıqsız",name:"Ad",yourName:"Adınız",madeWithExcalidraw:"Excalidraw ilə hazırlanmışdır",group:"Qrup şəklində seçim",ungroup:"Qrupsuz seçim",collaborators:"",showGrid:"",addToLibrary:"",removeFromLibrary:"",libraryLoadingMessage:"",libraries:"",loadingScene:"",align:"",alignTop:"",alignBottom:"",alignLeft:"",alignRight:"",centerVertically:"",centerHorizontally:"",distributeHorizontally:"",distributeVertically:"",flipHorizontal:"",flipVertical:"",viewMode:"",share:"",showStroke:"",showBackground:"",toggleTheme:"",personalLib:"",excalidrawLib:"",decreaseFontSize:"",increaseFontSize:"",unbindText:"",bindText:"",createContainerFromText:"",link:{edit:"",editEmbed:"",create:"",createEmbed:"",label:"",labelEmbed:"",empty:""},lineEditor:{edit:"",exit:""},elementLock:{lock:"",unlock:"",lockAll:"",unlockAll:""},statusPublished:"",sidebarLock:"",selectAllElementsInFrame:"",removeAllElementsFromFrame:"",eyeDropper:"",textToDiagram:"",prompt:""},a={noItems:"",hint_emptyLibrary:"",hint_emptyPrivateLibrary:""},r={clearReset:"",exportJSON:"",exportImage:"",export:"",copyToClipboard:"",save:"",saveAs:"",load:"",getShareableLink:"",close:"",selectLanguage:"",scrollBackToContent:"",zoomIn:"",zoomOut:"",resetZoom:"",menu:"",done:"",edit:"",undo:"",redo:"",resetLibrary:"",createNewRoom:"",fullScreen:"",darkMode:"",lightMode:"",zenMode:"",objectsSnapMode:"",exitZenMode:"",cancel:"",clear:"",remove:"",embed:"",publishLibrary:"",submit:"",confirm:"",embeddableInteractionButton:""},o={clearReset:"",couldNotCreateShareableLink:"",couldNotCreateShareableLinkTooBig:"",couldNotLoadInvalidFile:"",importBackendFailed:"",cannotExportEmptyCanvas:"",couldNotCopyToClipboard:"",decryptFailed:"",uploadedSecurly:"",loadSceneOverridePrompt:"",collabStopOverridePrompt:"",errorAddingToLibrary:"",errorRemovingFromLibrary:"",confirmAddLibrary:"",imageDoesNotContainScene:"",cannotRestoreFromImage:"",invalidSceneUrl:"",resetLibrary:"",removeItemsFromsLibrary:"",invalidEncryptionKey:"",collabOfflineWarning:""},t={unsupportedFileType:"",imageInsertError:"",fileTooBig:"",svgImageInsertError:"",failedToFetchImage:"",invalidSVGString:"",cannotResolveCollabServer:"",importLibraryError:"",collabSaveFailed:"",collabSaveFailed_sizeExceeded:"",imageToolNotSupported:"",brave_measure_text_error:{line1:"",line2:"",line3:"",line4:""},libraryElementTypeError:{embeddable:"",iframe:"",image:""},asyncPasteFailedOnRead:"",asyncPasteFailedOnParse:"",copyToSystemClipboardFailed:""},i={selection:"",image:"",rectangle:"",diamond:"",ellipse:"",arrow:"",line:"",freedraw:"",text:"",library:"",lock:"",penMode:"",link:"",eraser:"",frame:"",magicframe:"",embeddable:"",laser:"",hand:"",extraTools:"",mermaidToExcalidraw:"",magicSettings:""},l={canvasActions:"",selectedShapeActions:"",shapes:""},n={canvasPanning:"",linearElement:"",freeDraw:"",text:"",embeddable:"",text_selected:"",text_editing:"",linearElementMulti:"",lockAngle:"",resize:"",resizeImage:"",rotate:"",lineEditor_info:"",lineEditor_pointSelected:"",lineEditor_nothingSelected:"",placeImage:"",publishLibrary:"",bindTextToElement:"",deepBoxSelect:"",eraserRevert:"",firefox_clipboard_write:"",disableSnapping:""},s={cannotShowPreview:"",canvasTooBig:"",canvasTooBigTip:""},d={headingMain:"",clearCanvasMessage:"",clearCanvasCaveat:"",trackedToSentry:"",openIssueMessage:"",sceneContent:""},u={desc_intro:"",desc_privacy:"",button_startSession:"",button_stopSession:"",desc_inProgressIntro:"",desc_shareLink:"",desc_exitSession:"",shareTitle:""},c={title:""},m={disk_title:"",disk_details:"",disk_button:"",link_title:"",link_details:"",link_button:"",excalidrawplus_description:"",excalidrawplus_button:"",excalidrawplus_exportError:""},p={blog:"",click:"",deepSelect:"",deepBoxSelect:"",curvedArrow:"",curvedLine:"",documentation:"",doubleClick:"",drag:"",editor:"",editLineArrowPoints:"",editText:"",github:"",howto:"",or:"",preventBinding:"",tools:"",shortcuts:"",textFinish:"",textNewLine:"",title:"",view:"",zoomToFit:"",zoomToSelection:"",toggleElementLock:"",movePageUpDown:"",movePageLeftRight:""},g={title:""},b={title:"",itemName:"",authorName:"",githubUsername:"",twitterUsername:"",libraryName:"",libraryDesc:"",website:"",placeholder:{authorName:"",libraryName:"",libraryDesc:"",githubHandle:"",twitterHandle:"",website:""},errors:{required:"",website:""},noteDescription:"",noteGuidelines:"",noteLicense:"",noteItems:"",atleastOneLibItem:"",republishWarning:""},y={title:"",content:""},x={resetLibrary:"",removeItemsFromLib:""},h={header:"",label:{withBackground:"",onlySelected:"",darkMode:"",embedScene:"",scale:"",padding:""},tooltip:{embedScene:""},title:{exportToPng:"",exportToSvg:"",copyPngToClipboard:""},button:{exportToPng:"",exportToSvg:"",copyPngToClipboard:""}},k={tooltip:"",link:""},S={angle:"",element:"",elements:"",height:"",scene:"",selected:"",storage:"",title:"",total:"",version:"",versionCopy:"",versionNotAvailable:"",width:""},v={addedToLibrary:"",copyStyles:"",copyToClipboard:"",copyToClipboardAsPng:"",fileSaved:"",fileSavedToFilename:"",canvas:"",selection:"",pasteAsSingleElement:"",unableToEmbed:"",unrecognizedLinkFormat:""},F={transparent:"",black:"",white:"",red:"",pink:"",grape:"",violet:"",gray:"",blue:"",cyan:"",teal:"",green:"",yellow:"",orange:"",bronze:""},w={app:{center_heading:"",center_heading_plus:"",menuHint:""},defaults:{menuHint:"",center_heading:"",toolbarHint:"",helpHint:""}},E={mostUsedCustomColors:"",colors:"",shades:"",hexCode:"",noShades:""},T={action:{exportToImage:{title:"",button:"",description:""},saveToDisk:{title:"",button:"",description:""},excalidrawPlus:{title:"",button:"",description:""}},modal:{loadFromFile:{title:"",button:"",description:""},shareableLink:{title:"",button:"",description:""}}},_={title:"",button:"",description:"",syntax:"",preview:""},f={labels:e,library:a,buttons:r,alerts:o,errors:t,toolBar:i,headings:l,hints:n,canvasError:s,errorSplash:d,roomDialog:u,errorDialog:c,exportDialog:m,helpDialog:p,clearCanvasDialog:g,publishDialog:b,publishSuccessDialog:y,confirmDialog:x,imageExportDialog:h,encrypted:k,stats:S,toast:v,colors:F,welcomeScreen:w,colorPicker:E,overwriteConfirm:T,mermaid:_};export{o as alerts,r as buttons,s as canvasError,g as clearCanvasDialog,E as colorPicker,F as colors,x as confirmDialog,f as default,k as encrypted,c as errorDialog,d as errorSplash,t as errors,m as exportDialog,l as headings,p as helpDialog,n as hints,h as imageExportDialog,e as labels,a as library,_ as mermaid,T as overwriteConfirm,b as publishDialog,y as publishSuccessDialog,u as roomDialog,S as stats,v as toast,i as toolBar,w as welcomeScreen};
1
+ import"./index-CPaVz_o7.js";var e={paste:"Yapışdır",pasteAsPlaintext:"Düz mətn kimi yapışdırın",pasteCharts:"Diaqramları yapışdırın",selectAll:"Hamısını seç",multiSelect:"Seçimə element əlavə edin",moveCanvas:"Kanvası köçürün",cut:"Kəs",copy:"Kopyala",copyAsPng:"PNG olaraq panoya kopyala",copyAsSvg:"SVG olaraq panoya kopyala",copyText:"Mətn olaraq panoya kopyala",copySource:"",convertToCode:"",bringForward:"Önə daşı",sendToBack:"Geriyə göndərin",bringToFront:"Önə gətirin",sendBackward:"Geriyə göndərin",delete:"Sil",copyStyles:"Stilləri kopyalayın",pasteStyles:"Stilləri yapışdırın",stroke:"Strok rəngi",background:"Arxa fon",fill:"Doldur",strokeWidth:"Strok eni",strokeStyle:"Strok stili",strokeStyle_solid:"Solid",strokeStyle_dashed:"Kəsik",strokeStyle_dotted:"Nöqtəli",sloppiness:"Səliqəsizlik",opacity:"Şəffaflıq",textAlign:"Mətni uyğunlaşdır",edges:"Kənarlar",sharp:"Kəskin",round:"Dəyirmi",arrowheads:"Ox ucları",arrowhead_none:"Heç biri",arrowhead_arrow:"Ox",arrowhead_bar:"Çubuq",arrowhead_circle:"",arrowhead_circle_outline:"",arrowhead_triangle:"Üçbucaq",arrowhead_triangle_outline:"",arrowhead_diamond:"",arrowhead_diamond_outline:"",fontSize:"Şrift ölçüsü",fontFamily:"Şrift qrupu",addWatermark:'"Made with Excalidraw" əlavə et',handDrawn:"Əllə çəkilmiş",normal:"Normal",code:"Kod",small:"Kiçik",medium:"Orta",large:"Böyük",veryLarge:"Çox böyük",solid:"Solid",hachure:"Ştrix",zigzag:"Ziqzaq",crossHatch:"Çarpaz dəlik",thin:"İncə",bold:"Qalın",left:"Sol",center:"Mərkəz",right:"Sağ",extraBold:"Ekstra qalın",architect:"Memar",artist:"Rəssam",cartoonist:"Karikaturaçı",fileTitle:"Fayl adı",colorPicker:"Rəng seçən",canvasColors:"Kanvas üzərində istifadə olunur",canvasBackground:"Kanvas arxa fonu",drawingCanvas:"Kanvas çəkmək",layers:"Qatlar",actions:"Hərəkətlər",language:"Dil",liveCollaboration:"Canlı əməkdaşlıq...",duplicateSelection:"Dublikat",untitled:"Başlıqsız",name:"Ad",yourName:"Adınız",madeWithExcalidraw:"Excalidraw ilə hazırlanmışdır",group:"Qrup şəklində seçim",ungroup:"Qrupsuz seçim",collaborators:"",showGrid:"",addToLibrary:"",removeFromLibrary:"",libraryLoadingMessage:"",libraries:"",loadingScene:"",align:"",alignTop:"",alignBottom:"",alignLeft:"",alignRight:"",centerVertically:"",centerHorizontally:"",distributeHorizontally:"",distributeVertically:"",flipHorizontal:"",flipVertical:"",viewMode:"",share:"",showStroke:"",showBackground:"",toggleTheme:"",personalLib:"",excalidrawLib:"",decreaseFontSize:"",increaseFontSize:"",unbindText:"",bindText:"",createContainerFromText:"",link:{edit:"",editEmbed:"",create:"",createEmbed:"",label:"",labelEmbed:"",empty:""},lineEditor:{edit:"",exit:""},elementLock:{lock:"",unlock:"",lockAll:"",unlockAll:""},statusPublished:"",sidebarLock:"",selectAllElementsInFrame:"",removeAllElementsFromFrame:"",eyeDropper:"",textToDiagram:"",prompt:""},a={noItems:"",hint_emptyLibrary:"",hint_emptyPrivateLibrary:""},r={clearReset:"",exportJSON:"",exportImage:"",export:"",copyToClipboard:"",save:"",saveAs:"",load:"",getShareableLink:"",close:"",selectLanguage:"",scrollBackToContent:"",zoomIn:"",zoomOut:"",resetZoom:"",menu:"",done:"",edit:"",undo:"",redo:"",resetLibrary:"",createNewRoom:"",fullScreen:"",darkMode:"",lightMode:"",zenMode:"",objectsSnapMode:"",exitZenMode:"",cancel:"",clear:"",remove:"",embed:"",publishLibrary:"",submit:"",confirm:"",embeddableInteractionButton:""},o={clearReset:"",couldNotCreateShareableLink:"",couldNotCreateShareableLinkTooBig:"",couldNotLoadInvalidFile:"",importBackendFailed:"",cannotExportEmptyCanvas:"",couldNotCopyToClipboard:"",decryptFailed:"",uploadedSecurly:"",loadSceneOverridePrompt:"",collabStopOverridePrompt:"",errorAddingToLibrary:"",errorRemovingFromLibrary:"",confirmAddLibrary:"",imageDoesNotContainScene:"",cannotRestoreFromImage:"",invalidSceneUrl:"",resetLibrary:"",removeItemsFromsLibrary:"",invalidEncryptionKey:"",collabOfflineWarning:""},t={unsupportedFileType:"",imageInsertError:"",fileTooBig:"",svgImageInsertError:"",failedToFetchImage:"",invalidSVGString:"",cannotResolveCollabServer:"",importLibraryError:"",collabSaveFailed:"",collabSaveFailed_sizeExceeded:"",imageToolNotSupported:"",brave_measure_text_error:{line1:"",line2:"",line3:"",line4:""},libraryElementTypeError:{embeddable:"",iframe:"",image:""},asyncPasteFailedOnRead:"",asyncPasteFailedOnParse:"",copyToSystemClipboardFailed:""},i={selection:"",image:"",rectangle:"",diamond:"",ellipse:"",arrow:"",line:"",freedraw:"",text:"",library:"",lock:"",penMode:"",link:"",eraser:"",frame:"",magicframe:"",embeddable:"",laser:"",hand:"",extraTools:"",mermaidToExcalidraw:"",magicSettings:""},l={canvasActions:"",selectedShapeActions:"",shapes:""},n={canvasPanning:"",linearElement:"",freeDraw:"",text:"",embeddable:"",text_selected:"",text_editing:"",linearElementMulti:"",lockAngle:"",resize:"",resizeImage:"",rotate:"",lineEditor_info:"",lineEditor_pointSelected:"",lineEditor_nothingSelected:"",placeImage:"",publishLibrary:"",bindTextToElement:"",deepBoxSelect:"",eraserRevert:"",firefox_clipboard_write:"",disableSnapping:""},s={cannotShowPreview:"",canvasTooBig:"",canvasTooBigTip:""},d={headingMain:"",clearCanvasMessage:"",clearCanvasCaveat:"",trackedToSentry:"",openIssueMessage:"",sceneContent:""},u={desc_intro:"",desc_privacy:"",button_startSession:"",button_stopSession:"",desc_inProgressIntro:"",desc_shareLink:"",desc_exitSession:"",shareTitle:""},c={title:""},m={disk_title:"",disk_details:"",disk_button:"",link_title:"",link_details:"",link_button:"",excalidrawplus_description:"",excalidrawplus_button:"",excalidrawplus_exportError:""},p={blog:"",click:"",deepSelect:"",deepBoxSelect:"",curvedArrow:"",curvedLine:"",documentation:"",doubleClick:"",drag:"",editor:"",editLineArrowPoints:"",editText:"",github:"",howto:"",or:"",preventBinding:"",tools:"",shortcuts:"",textFinish:"",textNewLine:"",title:"",view:"",zoomToFit:"",zoomToSelection:"",toggleElementLock:"",movePageUpDown:"",movePageLeftRight:""},g={title:""},b={title:"",itemName:"",authorName:"",githubUsername:"",twitterUsername:"",libraryName:"",libraryDesc:"",website:"",placeholder:{authorName:"",libraryName:"",libraryDesc:"",githubHandle:"",twitterHandle:"",website:""},errors:{required:"",website:""},noteDescription:"",noteGuidelines:"",noteLicense:"",noteItems:"",atleastOneLibItem:"",republishWarning:""},y={title:"",content:""},x={resetLibrary:"",removeItemsFromLib:""},h={header:"",label:{withBackground:"",onlySelected:"",darkMode:"",embedScene:"",scale:"",padding:""},tooltip:{embedScene:""},title:{exportToPng:"",exportToSvg:"",copyPngToClipboard:""},button:{exportToPng:"",exportToSvg:"",copyPngToClipboard:""}},k={tooltip:"",link:""},S={angle:"",element:"",elements:"",height:"",scene:"",selected:"",storage:"",title:"",total:"",version:"",versionCopy:"",versionNotAvailable:"",width:""},v={addedToLibrary:"",copyStyles:"",copyToClipboard:"",copyToClipboardAsPng:"",fileSaved:"",fileSavedToFilename:"",canvas:"",selection:"",pasteAsSingleElement:"",unableToEmbed:"",unrecognizedLinkFormat:""},F={transparent:"",black:"",white:"",red:"",pink:"",grape:"",violet:"",gray:"",blue:"",cyan:"",teal:"",green:"",yellow:"",orange:"",bronze:""},w={app:{center_heading:"",center_heading_plus:"",menuHint:""},defaults:{menuHint:"",center_heading:"",toolbarHint:"",helpHint:""}},E={mostUsedCustomColors:"",colors:"",shades:"",hexCode:"",noShades:""},T={action:{exportToImage:{title:"",button:"",description:""},saveToDisk:{title:"",button:"",description:""},excalidrawPlus:{title:"",button:"",description:""}},modal:{loadFromFile:{title:"",button:"",description:""},shareableLink:{title:"",button:"",description:""}}},_={title:"",button:"",description:"",syntax:"",preview:""},f={labels:e,library:a,buttons:r,alerts:o,errors:t,toolBar:i,headings:l,hints:n,canvasError:s,errorSplash:d,roomDialog:u,errorDialog:c,exportDialog:m,helpDialog:p,clearCanvasDialog:g,publishDialog:b,publishSuccessDialog:y,confirmDialog:x,imageExportDialog:h,encrypted:k,stats:S,toast:v,colors:F,welcomeScreen:w,colorPicker:E,overwriteConfirm:T,mermaid:_};export{o as alerts,r as buttons,s as canvasError,g as clearCanvasDialog,E as colorPicker,F as colors,x as confirmDialog,f as default,k as encrypted,c as errorDialog,d as errorSplash,t as errors,m as exportDialog,l as headings,p as helpDialog,n as hints,h as imageExportDialog,e as labels,a as library,_ as mermaid,T as overwriteConfirm,b as publishDialog,y as publishSuccessDialog,u as roomDialog,S as stats,v as toast,i as toolBar,w as welcomeScreen};