collabmd 0.1.42 → 0.1.44

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 (603) hide show
  1. package/bin/collabmd.js +1 -2
  2. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-CbSISC1w.js +1 -0
  3. package/dist/client/assets/{abnfDiagram-VRR7QNED-C-CM0mGi.js → abnfDiagram-N423BO3Z-CUMTFJhI.js} +1 -1
  4. package/dist/client/assets/ar-SA-PQUY64WN-xjXgbW6d.js +10 -0
  5. package/dist/client/assets/arc-DgcGdgmL.js +1 -0
  6. package/dist/client/assets/architecture-TIHT7OUA-CsHfPErM.js +1 -0
  7. package/dist/client/assets/architectureDiagram-T3A2C74G-w25m71oV.js +36 -0
  8. package/dist/client/assets/asciiarmor-C_eisQCp.js +1 -0
  9. package/dist/client/assets/{asn1-Dr8qZg38.js → asn1-DCl_8MCW.js} +1 -1
  10. package/dist/client/assets/{asterisk-Bja0s6e1.js → asterisk-BEn0Cwpx.js} +1 -1
  11. package/dist/client/assets/az-AZ-OXJXL76K-4JkO4Pca.js +1 -0
  12. package/dist/client/assets/bases-preview-controller-2pLHk0uk.js +143 -0
  13. package/dist/client/assets/bg-BG-W2GKIJDF-DnkH_o81.js +5 -0
  14. package/dist/client/assets/{blockDiagram-677ZJIJ3-BLomrZyt.js → blockDiagram-VBNYF7ZC-CipJt9Jl.js} +5 -5
  15. package/dist/client/assets/bn-BD-TGL7M4PJ-CG4JkmtP.js +3 -0
  16. package/dist/client/assets/bn-IN-BKETKYEH-CG4JkmtP.js +3 -0
  17. package/dist/client/assets/browser-utils-CKtI_rZl.js +1 -0
  18. package/dist/client/assets/button-BCEiw4Rw.js +1 -0
  19. package/dist/client/assets/c4Diagram-5PPSVZJV-B5ktVx6g.js +10 -0
  20. package/dist/client/assets/ca-ES-LD5SCRVV-U6_TVMX9.js +8 -0
  21. package/dist/client/assets/channel-4Jkmq93I.js +1 -0
  22. package/dist/client/assets/{chunk-32BRIVSS-BD6LQmvI.js → chunk-2GRJ4B5K-DhnlUv3F.js} +1 -1
  23. package/dist/client/assets/chunk-3NCLNEKW-Y2Jf_LI-.js +1 -0
  24. package/dist/client/assets/{chunk-HOUHSVGY-DX1huN9x.js → chunk-4I5QYGJK-CCB2YcIH.js} +1 -1
  25. package/dist/client/assets/{chunk-5FCAYU7R-DNtJmW0j.js → chunk-5FCAYU7R-Dh5nylU8.js} +1 -1
  26. package/dist/client/assets/{chunk-5HE753X5-o8-OCfIL.js → chunk-5HE753X5-Bw-yg4kO.js} +1 -1
  27. package/dist/client/assets/{chunk-5JV3BV7I-DKfYBAeY.js → chunk-5JV3BV7I-Cy5pj3QY.js} +1 -1
  28. package/dist/client/assets/{chunk-EX3LRPZG-DNVm3Wj1.js → chunk-5RXB4S5H-BWrwFqMI.js} +3 -3
  29. package/dist/client/assets/{chunk-5TONJI2A-DOX2waSJ.js → chunk-5TONJI2A-DQOY3q1H.js} +1 -1
  30. package/dist/client/assets/{chunk-MOJQB5TN-BEEcDvmL.js → chunk-6Q2QTUOP-CPlWzBtc.js} +1 -1
  31. package/dist/client/assets/chunk-7XWMRXBY-CfMzEq80.js +1 -0
  32. package/dist/client/assets/chunk-7Z6QIM7H-BP9Pdsm9.js +10 -0
  33. package/dist/client/assets/chunk-AXR3VHVW-0GTk_evH.js +41 -0
  34. package/dist/client/assets/{chunk-BIQX33UG-CuPbkyWp.js → chunk-BIQX33UG-DZEsGuSn.js} +1 -1
  35. package/dist/client/assets/{chunk-CQNSW5MT-BbEh_krl.js → chunk-CQNSW5MT-B8S09OIh.js} +1 -1
  36. package/dist/client/assets/{chunk-CYSBUYHQ-CbOq7Rc1.js → chunk-CYSBUYHQ-C1Rf4art.js} +1 -1
  37. package/dist/client/assets/{chunk-Z24UKHUO-BQ6-bK37.js → chunk-CZQZEIFA-DT3N9fo7.js} +4 -4
  38. package/dist/client/assets/{chunk-EMLP6XTP-BoneA0Uo.js → chunk-EMLP6XTP-RLD4nXpI.js} +1 -1
  39. package/dist/client/assets/{chunk-V7JOEXUC-Bo_5WqHt.js → chunk-GF5L2VYU-DkJpO7ff.js} +3 -3
  40. package/dist/client/assets/chunk-I66GZJ75-CVFiiffQ.js +127 -0
  41. package/dist/client/assets/{chunk-FWX5IMBZ-Ch9_j2qF.js → chunk-J7OUQ5F2-4CEb7pvH.js} +2 -2
  42. package/dist/client/assets/{chunk-JG7HCLWE-Dk4_aECj.js → chunk-JG7HCLWE-BYfiSaVt.js} +1 -1
  43. package/dist/client/assets/{chunk-PUDLZKDR-C-JwZaMh.js → chunk-JQJVKLGR-cx8X_24v.js} +5 -5
  44. package/dist/client/assets/{chunk-VR4S4FIN-uXjSaaA7.js → chunk-KBJHAD2P-CB_3zWUf.js} +1 -1
  45. package/dist/client/assets/{chunk-KEIR6QF5-Dj-OpFgW.js → chunk-KEIR6QF5-BICK3FdT.js} +31 -31
  46. package/dist/client/assets/{chunk-MOZMSUNE-BgA8jCvb.js → chunk-MOZMSUNE-XVucA-n6.js} +1 -1
  47. package/dist/client/assets/chunk-NSK5VX7P-TLH37VXI.js +2 -0
  48. package/dist/client/assets/{chunk-OSBZ3O6U-CX9EQ5t2.js → chunk-OSBZ3O6U-CrKZOUOr.js} +1 -1
  49. package/dist/client/assets/{chunk-QBLGF6JB-C9zGMqvP.js → chunk-QBLGF6JB-CxAyS2mW.js} +1 -1
  50. package/dist/client/assets/{chunk-ZGVPDNZ5-Bmet6b46.js → chunk-QR6OTTB3-CDAA_5Ib.js} +3 -3
  51. package/dist/client/assets/{chunk-R7FJI6CG-BpBhcF6R.js → chunk-R7FJI6CG-Cnn3gE-Y.js} +1 -1
  52. package/dist/client/assets/chunk-RYQCIY6F-D-a0zH8K.js +1 -0
  53. package/dist/client/assets/{chunk-SRAX5OIU-Bpn6XoyU.js → chunk-SRAX5OIU-KFQikY-4.js} +1 -1
  54. package/dist/client/assets/{chunk-U6XO7XAA-CR0BSRFR.js → chunk-U6XO7XAA-BFxjP5U3.js} +1 -1
  55. package/dist/client/assets/chunk-UBXNYLIW-Bhk-PbFK.js +1 -0
  56. package/dist/client/assets/{chunk-C7G6YPKG-C97QUAKv.js → chunk-W5SLKNZC-BdNSCxZ9.js} +1 -1
  57. package/dist/client/assets/{chunk-Q4XR5HBZ-Dyewsidf.js → chunk-WRU74C26-h6_XkD3_.js} +7 -7
  58. package/dist/client/assets/{chunk-XXDRQBXY-Bq6zMMOx.js → chunk-XXDRQBXY-BvKO0v-W.js} +1 -1
  59. package/dist/client/assets/{chunk-YOTPTUD7-CjHV8V6f.js → chunk-YOTPTUD7-D0vRKqYp.js} +1 -1
  60. package/dist/client/assets/{chunk-Z5NKEFVG-DC2Lcs-4.js → chunk-Z5NKEFVG-q6fHH75m.js} +2 -2
  61. package/dist/client/assets/{chunk-ZIRB5QZD-C6fEPe3t.js → chunk-ZIRB5QZD-O39ZBUk3.js} +5 -5
  62. package/dist/client/assets/classDiagram-JCYQIIEL-L7lsyW_w.js +1 -0
  63. package/dist/client/assets/classDiagram-v2-OCEON4UE-L7lsyW_w.js +1 -0
  64. package/dist/client/assets/clike-D_6L3tnO.js +1 -0
  65. package/dist/client/assets/cmake-84nbDH0I.js +1 -0
  66. package/dist/client/assets/coffeescript-De_zI4J0.js +1 -0
  67. package/dist/client/assets/{room-BhC-3iml.js → comment-threads-D-iKphIp.js} +2 -2
  68. package/dist/client/assets/commonlisp-DgAKBe0r.js +1 -0
  69. package/dist/client/assets/cose-bilkent-JH36ORCC-Cm_QF_yb.js +1 -0
  70. package/dist/client/assets/crystal-Bsdphhtm.js +1 -0
  71. package/dist/client/assets/cs-CZ-OFPU5DBV-BmFAIhqX.js +7 -0
  72. package/dist/client/assets/css-CnaYoQib.js +1 -0
  73. package/dist/client/assets/cynefin-VYW2F7L2-Ds2Fw2Y0.js +1 -0
  74. package/dist/client/assets/cynefinDiagram-MW4NZA55-CJxXfJek.js +62 -0
  75. package/dist/client/assets/cytoscape.esm-B-NFISlW.js +321 -0
  76. package/dist/client/assets/{d-BhMjBjQP.js → d-DWkQyNnU.js} +1 -1
  77. package/dist/client/assets/da-DK-FRDJFYWF-H387Jw8B.js +2 -0
  78. package/dist/client/assets/dagre-Buvkdvvj.js +1 -0
  79. package/dist/client/assets/{dagre-VKFMJZFB-CSQjHsP2.js → dagre-VZM6K2ZE-L1xArOGs.js} +2 -2
  80. package/dist/client/assets/de-CH-ZG7H3QK3-C_groygo.js +11 -0
  81. package/dist/client/assets/de-DE-SIJYH4IH-C_groygo.js +11 -0
  82. package/dist/client/assets/defaultLocale-BFoDCU3G.js +1 -0
  83. package/dist/client/assets/{diagram-OA4YK3LP-ruJmRhl8.js → diagram-7IWD3JNH-B2d2Bm15.js} +1 -1
  84. package/dist/client/assets/{diagram-FQU43EPY-D0RPbiE5.js → diagram-B4RE2ZJO-NP4UAwjR.js} +1 -1
  85. package/dist/client/assets/{diagram-NH7WQ7WH-CaTayrXM.js → diagram-LBJQPF4R-D1FJQV8t.js} +1 -1
  86. package/dist/client/assets/{diagram-G47NLZAW-XriksZQN.js → diagram-Q27KOJAE-DylDuwor.js} +13 -13
  87. package/dist/client/assets/diagram-UB23O5K3-DJcKCwv9.js +41 -0
  88. package/dist/client/assets/dist-3bgCp7iY.js +1 -0
  89. package/dist/client/assets/dist-BH87JoHx.js +11 -0
  90. package/dist/client/assets/{dist-BUxzPC-Q.js → dist-BIkPRZO7.js} +3 -3
  91. package/dist/client/assets/{dist-qx0Iv9vM.js → dist-B_J_HbC0.js} +1 -1
  92. package/dist/client/assets/dist-BqCsFpx4.js +1 -0
  93. package/dist/client/assets/dist-C11hHqv_.js +13 -0
  94. package/dist/client/assets/{dist-YCtFk_v0.js → dist-C2JHCt8U.js} +1 -1
  95. package/dist/client/assets/{dist-D3Tmtejd.js → dist-CYZmbokb.js} +2 -2
  96. package/dist/client/assets/dist-CZjTtmTu.js +1 -0
  97. package/dist/client/assets/{dist-C__bPRpd.js → dist-Cig4Ov_X.js} +1 -1
  98. package/dist/client/assets/{dist-DXTgEdvE.js → dist-CnL7Y2sM.js} +1 -1
  99. package/dist/client/assets/dist-CqQEC8gR.js +1 -0
  100. package/dist/client/assets/{dist-CQTo4Y46.js → dist-D2AQ-76g.js} +1 -1
  101. package/dist/client/assets/dist-D4Rzqod1.js +1 -0
  102. package/dist/client/assets/dist-D5sn-mwk.js +9 -0
  103. package/dist/client/assets/dist-D7G-n87v.js +1 -0
  104. package/dist/client/assets/dist-DCzuX1AF.js +1 -0
  105. package/dist/client/assets/dist-DGb27Dl6.js +1 -0
  106. package/dist/client/assets/{dist-CHJCI2AN.js → dist-DK5Gs2wa.js} +1 -1
  107. package/dist/client/assets/dist-DRqOrNgN.js +1 -0
  108. package/dist/client/assets/{dist-B0NFuQC3.js → dist-DetkMS_4.js} +1 -1
  109. package/dist/client/assets/dist-DhLvC8DS.js +2 -0
  110. package/dist/client/assets/{dist-D1W8XQvM.js → dist-Dp6FVkQ1.js} +1 -1
  111. package/dist/client/assets/{dist-D4MWz_rC.js → dist-Drp8uu5J.js} +1 -1
  112. package/dist/client/assets/dist-DtbjNB28.js +1 -0
  113. package/dist/client/assets/dist-DyrYcvpo2.js +1 -0
  114. package/dist/client/assets/dist-GrygD2zE.js +1 -0
  115. package/dist/client/assets/{dist-CzNyYE-S.js → dist-HmEpWUow.js} +1 -1
  116. package/dist/client/assets/{dist-D7-13adP.js → dist-JYEDRrPT.js} +1 -1
  117. package/dist/client/assets/dist-MvcV4190.js +1 -0
  118. package/dist/client/assets/{dist-gGmuzNio.js → dist-RTa81Km7.js} +1 -1
  119. package/dist/client/assets/{dockerfile-BLkNEvjs.js → dockerfile-DJkHQgkl.js} +1 -1
  120. package/dist/client/assets/drawio-editor-DDvFoarP.js +9 -0
  121. package/dist/client/assets/drawio-embed-controller-BD1GTRwn.js +1 -0
  122. package/dist/client/assets/drawioEditor-Bu5grlH5.js +2 -0
  123. package/dist/client/assets/{dylan-C6jEEEk-.js → dylan-BCDoL_-p.js} +1 -1
  124. package/dist/client/assets/{ebnfDiagram-CCIWWBDH-exNgBUy6.js → ebnfDiagram-BXEA7PRR-nw0wmA6y.js} +1 -1
  125. package/dist/client/assets/{ecl-BSZaIHnp.js → ecl-BVIeWmwY.js} +1 -1
  126. package/dist/client/assets/editor-session-DGlpiAsK.js +16 -0
  127. package/dist/client/assets/el-GR-IEE2CGI2-BkT6YT54.js +7 -0
  128. package/dist/client/assets/embedded-editor-base-C9roKYpW.css +1 -0
  129. package/dist/client/assets/en-GADW4C6J-DQ6zyCEM.js +1 -0
  130. package/dist/client/assets/{erDiagram-Q63AITRT-CoYS49kY.js → erDiagram-JOGREHBK-cYUpEKpf.js} +3 -3
  131. package/dist/client/assets/{erlang-DaB2Rkuy.js → erlang-BV0c4Hdn.js} +1 -1
  132. package/dist/client/assets/es-ES-TVVPWKV5-CpPKJXTM.js +12 -0
  133. package/dist/client/assets/eu-ES-CGBMFQDT-Bu3N2493.js +8 -0
  134. package/dist/client/assets/eventmodeling-45OFAUF4-CLEiVx5s.js +1 -0
  135. package/dist/client/assets/excalidraw-editor-BHu6k8d4.js +9 -0
  136. package/dist/client/assets/excalidraw-editor-Cr_184EF.css +1 -0
  137. package/dist/client/assets/excalidraw-embed-controller-y2fenN_g.js +1 -0
  138. package/dist/client/assets/excalidraw-scene-BvsQ6mLP.js +176 -0
  139. package/dist/client/assets/excalidrawEditor-4vFE--Uw.js +2 -0
  140. package/dist/client/assets/export-page-Cby8JzPO.js +39 -0
  141. package/dist/client/assets/exportDocument-C9v-bc7I.css +1 -0
  142. package/dist/client/assets/exportDocument-CRHCfsdo.js +2 -0
  143. package/dist/client/assets/fa-IR-IE6XAPR4-BEvLCORD.js +9 -0
  144. package/dist/client/assets/{factor-D7LVTn2l.js → factor-LKH5gN8L.js} +1 -1
  145. package/dist/client/assets/fi-FI-P7TKNHRM-DI0q8iSX.js +6 -0
  146. package/dist/client/assets/{file-history-view-controller-CK3oHDCT.js → file-history-view-controller-BDjEV9xJ.js} +11 -11
  147. package/dist/client/assets/flowDiagram-UKHOOZJN-D0ypP0Ez.js +1 -0
  148. package/dist/client/assets/fr-FR-QI2XZNT7-y8kXd8LA.js +12 -0
  149. package/dist/client/assets/ganttDiagram-PKOTCBZU-BnM97BCT.js +292 -0
  150. package/dist/client/assets/{git-diff-view-controller-qorJ_Quo.js → git-diff-view-controller-DgdM1aqb.js} +24 -24
  151. package/dist/client/assets/git-panel-controller-BDTR2HVp.js +207 -0
  152. package/dist/client/assets/gitGraph-TEB2WS4Q-CZFBqwW-.js +1 -0
  153. package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-x3NetpXU.js → gitGraphDiagram-DS77QQ5N-BQpQhjuN.js} +3 -3
  154. package/dist/client/assets/gl-ES-TLYCNOZZ-Br-Fhff-.js +6 -0
  155. package/dist/client/assets/groovy-CUpZ7dEl.js +1 -0
  156. package/dist/client/assets/he-IL-ZX43XLGP-qKQq6V9X.js +9 -0
  157. package/dist/client/assets/hi-IN-UTYRMTUF-DOUcwrDO.js +3 -0
  158. package/dist/client/assets/hu-HU-AJOSEBW6-FqTyvHlD.js +3 -0
  159. package/dist/client/assets/id-ID-ETLTVG6C-CQqh3CLS.js +8 -0
  160. package/dist/client/assets/image-XGD7JQR6-XDUWHRpO.js +1 -0
  161. package/dist/client/assets/image-blob-reduce.esm-Dj7YBvMv.js +2 -0
  162. package/dist/client/assets/index-7xOyXDhP.css +1 -0
  163. package/dist/client/assets/index-Bz1KuQ6y.js +2 -0
  164. package/dist/client/assets/info-DKCQHKI2--1InqQeT.js +1 -0
  165. package/dist/client/assets/{infoDiagram-FWYZ7A6U-DyfGrH8z.js → infoDiagram-6WML65LV-DYB8HCDQ.js} +1 -1
  166. package/dist/client/assets/init-C-OQMol4.js +1 -0
  167. package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-BOts527_.js → ishikawaDiagram-WSZJBQD7-Coz_P3t6.js} +2 -2
  168. package/dist/client/assets/it-IT-B4B6TP6L-V-yK3SZz.js +12 -0
  169. package/dist/client/assets/ja-JP-IYKVURR5-BQKBXRpX.js +12 -0
  170. package/dist/client/assets/javascript-BWjar7HY.js +1 -0
  171. package/dist/client/assets/javascript-D-FtdkNC.js +1 -0
  172. package/dist/client/assets/{journeyDiagram-5HDEW3XC-DF37OVrZ.js → journeyDiagram-NVQOT4AX-B6edChce.js} +3 -3
  173. package/dist/client/assets/{react-lCSYwAWP.js → jsx-runtime-BpzPEenQ.js} +1 -1
  174. package/dist/client/assets/kaa-SE2BUIKX-CZ5kfwPg.js +1 -0
  175. package/dist/client/assets/kab-KAB-Y3GLKXLR-Do7GWfuN.js +4 -0
  176. package/dist/client/assets/{kanban-definition-HUTT4EX6-nCjbm1T6.js → kanban-definition-27J2QSJJ-BFd9-cLc.js} +3 -3
  177. package/dist/client/assets/{katex-B7rAX3Vi.js → katex-CXMH3UgJ.js} +3 -3
  178. package/dist/client/assets/kk-KZ-ABWUFVOH-BpqVciQz.js +1 -0
  179. package/dist/client/assets/{km-KH-PBSJLZ2M-Bh1DsarT.js → km-KH-PCWDKPHP-DSmy5shj.js} +3 -3
  180. package/dist/client/assets/ko-KR-7JQDXKGM-N42lep78.js +5 -0
  181. package/dist/client/assets/ku-TR-NAH2Q5B7-K8LLl9fk.js +6 -0
  182. package/dist/client/assets/{line-h44YiLOQ.js → line-B_S_S8kV.js} +1 -1
  183. package/dist/client/assets/linear-n-3HSMUF.js +1 -0
  184. package/dist/client/assets/lt-LT-VQFYRSNQ-BmOd0ALn.js +3 -0
  185. package/dist/client/assets/lv-LV-T62VSYUM-B22WdPhp.js +4 -0
  186. package/dist/client/assets/main-Ci07m9oP.js +152 -0
  187. package/dist/client/assets/{mermaid-parser.core-ygm3cZ_w.js → mermaid-parser.core-CUVdebAV.js} +2 -2
  188. package/dist/client/assets/mermaid.core-DN-lF51U.js +11 -0
  189. package/dist/client/assets/{mindmap-definition-LN4V7U3C-CTpHMYFE.js → mindmap-definition-FAOFIHXS-C9PQ38Al.js} +3 -3
  190. package/dist/client/assets/mr-IN-V4FHLCJE-XX069tpm.js +9 -0
  191. package/dist/client/assets/{mumps-CW_TBmxz.js → mumps-BSzj6Xyz.js} +1 -1
  192. package/dist/client/assets/my-MM-E3SQ6E54-cst_-5SB.js +1 -0
  193. package/dist/client/assets/nb-NO-MLNOFN5H-Bu2URWko.js +8 -0
  194. package/dist/client/assets/nl-NL-D5L3ZV4M-BqrV0btt.js +13 -0
  195. package/dist/client/assets/nn-NO-NNHDGPKB-DK-xZaWM.js +4 -0
  196. package/dist/client/assets/{nsis-AQ_alPln.js → nsis-CfSuhXs5.js} +1 -1
  197. package/dist/client/assets/{ntriples-d28e9m0E.js → ntriples-B9h1VB_g.js} +1 -1
  198. package/dist/client/assets/oc-FR-DWCRF55G-BZ5Po5R6.js +4 -0
  199. package/dist/client/assets/{ordinal-hYBb2elL.js → ordinal-BDEzSJ7C.js} +1 -1
  200. package/dist/client/assets/pa-IN-3JSAY44M-BZQSjKrS.js +4 -0
  201. package/dist/client/assets/packet-7NZHBO7P-BGMXB0XL.js +1 -0
  202. package/dist/client/assets/path-fybaL0A-.js +1 -0
  203. package/dist/client/assets/{pegDiagram-2B236MQR-Bq9qITsk.js → pegDiagram-VL7TDLO6-BMZUrSaU.js} +1 -1
  204. package/dist/client/assets/percentages-ETZPVQEE-DFxFqXgH.js +1 -0
  205. package/dist/client/assets/perl-BkSkiI9m.js +1 -0
  206. package/dist/client/assets/{pica-D0pwGKw7.js → pica-xkWDouSg.js} +2 -2
  207. package/dist/client/assets/pie-RZYD4A2V-DgYg3tCt.js +1 -0
  208. package/dist/client/assets/{pieDiagram-ENE6RG2P--ax2FUc8.js → pieDiagram-7S7Q4E2Y-h8kbCL9o.js} +2 -2
  209. package/dist/client/assets/{pl-PL-EERMMCTN-dIzrbxJt.js → pl-PL-ACURYKP3-qcEOSfCk.js} +4 -4
  210. package/dist/client/assets/{powershell-CzG71I4L.js → powershell-BcIto6Sf.js} +1 -1
  211. package/dist/client/assets/preview-diagram-utils-n_bbJA9V.js +1 -0
  212. package/dist/client/assets/preview-render-compiler-BSaQO_p3.js +35 -0
  213. package/dist/client/assets/preview-render-compiler-csGM5ZFz.js +1 -0
  214. package/dist/client/assets/preview-render-profile-BZzGSg6K.js +22 -0
  215. package/dist/client/assets/preview-render-worker-B42LWvrD.js +60 -0
  216. package/dist/client/assets/pt-BR-LOX7MLGD-DLueHSyZ.js +10 -0
  217. package/dist/client/assets/pt-PT-CZ2U2RFQ-BJ-GAEm6.js +12 -0
  218. package/dist/client/assets/{pug-Ck0YjsGM.js → pug-Wky5Dnfy.js} +1 -1
  219. package/dist/client/assets/puppet-BZyAS7I4.js +1 -0
  220. package/dist/client/assets/python-B_1Jd8HM.js +1 -0
  221. package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-f0PUv7DH.js → quadrantDiagram-CIZ2JOQS-CkElyfMi.js} +2 -2
  222. package/dist/client/assets/{quick-switcher-controller-CVRUPEKp.js → quick-switcher-controller-CoiYvllm.js} +4 -4
  223. package/dist/client/assets/r-CxDmU1I4.js +1 -0
  224. package/dist/client/assets/radar-I7S5WNFK-Ag-zp_Rq.js +1 -0
  225. package/dist/client/assets/railroad-3IZDKUUU-aibJDIDV.js +1 -0
  226. package/dist/client/assets/railroad-abnf-AHOZXSZD-BBMEuvIl.js +1 -0
  227. package/dist/client/assets/railroad-ebnf-EBAXGLYW-Be1nseej.js +1 -0
  228. package/dist/client/assets/railroad-peg-LSFZ7HO6-DIvD-Eyb.js +1 -0
  229. package/dist/client/assets/{railroadDiagram-RFXS5EU6-CZD_9g-4.js → railroadDiagram-AXF67PYL-c75gnikD.js} +1 -1
  230. package/dist/client/assets/{requirementDiagram-TGXJPOKE-C4Jwr3TE.js → requirementDiagram-LRYGKXZP-mNxKLuHS.js} +2 -2
  231. package/dist/client/assets/ro-RO-2HECL2X6-CJUvKAf0.js +12 -0
  232. package/dist/client/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
  233. package/dist/client/assets/room-CDrmIdDt.js +1 -0
  234. package/dist/client/assets/{rough.esm-CSKSodPl.js → rough.esm-Dy-Kn_BL.js} +1 -1
  235. package/dist/client/assets/ru-RU-HAYNXO46-BWSlvTrt.js +10 -0
  236. package/dist/client/assets/ruby-BjXV7-Qa.js +1 -0
  237. package/dist/client/assets/runtime-config-loader-BHGniHP5.js +1 -0
  238. package/dist/client/assets/{sankeyDiagram-HTMAVEWB-B2B2mdB6.js → sankeyDiagram-W5VNT64P-0OhplksI.js} +2 -2
  239. package/dist/client/assets/{scheme-tChLYBuY.js → scheme-D9qYN0V5.js} +1 -1
  240. package/dist/client/assets/{segmented-control-DhUkW6ro.js → segmented-control-DJrHSz8M.js} +1 -1
  241. package/dist/client/assets/sequenceDiagram-SI44F4Z6-BJ_yAocC.js +162 -0
  242. package/dist/client/assets/{shell-Du5Qg9im.js → shell-DwuoZtxw.js} +1 -1
  243. package/dist/client/assets/si-LK-W5KNS4H6-DGGCsn7k.js +1 -0
  244. package/dist/client/assets/{simple-mode-DRpGK0lJ.js → simple-mode-DXiLM1-G.js} +1 -1
  245. package/dist/client/assets/sk-SK-7K2CFGDV-CY4uTYgQ.js +7 -0
  246. package/dist/client/assets/sl-SI-OXV2QZWW-2-weqaBY.js +6 -0
  247. package/dist/client/assets/sql-DuQMFDvy.js +1 -0
  248. package/dist/client/assets/src-oBChb5qS.js +1 -0
  249. package/dist/client/assets/{stateDiagram-2N3HPSRC-B1niwAq-.js → stateDiagram-OKZ733FA-Cc83O86s.js} +1 -1
  250. package/dist/client/assets/stateDiagram-v2-UEYNNEHI-B1-BufUk.js +1 -0
  251. package/dist/client/assets/{stex-sDrdk2BW.js → stex-DNzd62Q_.js} +1 -1
  252. package/dist/client/assets/{stylus-DLLZ8dgm.js → stylus-BOVgKnng.js} +1 -1
  253. package/dist/client/assets/subset-shared.chunk-BXlA-9CO.js +1 -0
  254. package/dist/client/assets/{subset-worker.chunk-Cuw2UvhD.js → subset-worker.chunk-CoaGye2U.js} +1 -1
  255. package/dist/client/assets/sv-SE-JTOBZRGL-9-IUtVkO.js +12 -0
  256. package/dist/client/assets/swimlanes-SLNWSIFB-oVTWEJIj.js +2 -0
  257. package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-C5OTVwEu.js +8 -0
  258. package/dist/client/assets/ta-IN-KFAVKXGT-gHO6Q_DH.js +6 -0
  259. package/dist/client/assets/{textile-CyzeGT9J.js → textile-C4jVoHG1.js} +1 -1
  260. package/dist/client/assets/th-TH-VDMSCPDL-BvJuw6PJ.js +1 -0
  261. package/dist/client/assets/tiki-AK6FwT8q.js +1 -0
  262. package/dist/client/assets/timeline-definition-Z64GVDOM-BWDAGTHz.js +120 -0
  263. package/dist/client/assets/toml-BPTmHmyx.js +1 -0
  264. package/dist/client/assets/tr-TR-CEZ6GX45-CG6UU3Su.js +4 -0
  265. package/dist/client/assets/treeView-QDETBFTQ-uHZ-3Fz8.js +1 -0
  266. package/dist/client/assets/treemap-6X3UGDF4-BnUKyy3l.js +1 -0
  267. package/dist/client/assets/{ttcn-BePYh-hG.js → ttcn-PPSTk1ow.js} +1 -1
  268. package/dist/client/assets/{ttcn-cfg-CY0aot7Q.js → ttcn-cfg-2b4Gb5sE.js} +1 -1
  269. package/dist/client/assets/uk-UA-Q3H3OXQC-CSuIg_DY.js +6 -0
  270. package/dist/client/assets/uz-UZ-NGCSWWPX-mom7rxSP.js +1 -0
  271. package/dist/client/assets/vault-api-client-C3mlS_4N.css +1 -0
  272. package/dist/client/assets/vault-api-client-sLB2bo56.js +1 -0
  273. package/dist/client/assets/vault-paths-CVkuh0j-.js +5 -0
  274. package/dist/client/assets/vault-utils-wdQ0RNR9.js +1 -0
  275. package/dist/client/assets/{vennDiagram-L72KCM5P-DPQ9kbN2.js → vennDiagram-T6HMQDX7-LOSsnlMB.js} +3 -3
  276. package/dist/client/assets/{verilog-BKSQ5RMB.js → verilog-7LoJAqYT.js} +1 -1
  277. package/dist/client/assets/{vhdl-CBDDcIJ_.js → vhdl-kS471soi.js} +1 -1
  278. package/dist/client/assets/vi-VN-P3NDEVPS-BB0Fu9ck.js +7 -0
  279. package/dist/client/assets/wardley-OPB4EBWU-Da7TLC2F.js +1 -0
  280. package/dist/client/assets/{wardleyDiagram-EHGQE667-5VW6_Csg.js → wardleyDiagram-T6FBY63Y-BxII3foY.js} +35 -35
  281. package/dist/client/assets/{xquery-Cda5K8Gy.js → xquery-BKJx4mf9.js} +1 -1
  282. package/dist/client/assets/{xychartDiagram-FW5EYKEG-Bj0UwltS.js → xychartDiagram-ELKLHX3M-B-pTEjju.js} +4 -4
  283. package/dist/client/assets/yjs-provider-reset-guard-Cox4nxwu.js +4 -0
  284. package/dist/client/assets/z80-Co3PbHdE.js +1 -0
  285. package/dist/client/assets/zh-CN-SS3O57GA-Bj8wsiMe.js +11 -0
  286. package/dist/client/assets/zh-HK-LWJT3VCF-DOTquTCh.js +1 -0
  287. package/dist/client/assets/zh-TW-VJXC72RT-B48PRo-l.js +13 -0
  288. package/dist/client/drawio-editor.html +2 -2
  289. package/dist/client/excalidraw-editor.html +2 -2
  290. package/dist/client/export-document.html +3 -3
  291. package/dist/client/index.html +655 -4
  292. package/package.json +19 -20
  293. package/src/client/app/index.html +652 -1
  294. package/src/client/app/main-entry.js +0 -2
  295. package/src/client/application/app-shell/git-feature.js +3 -8
  296. package/src/client/application/app-shell/ui-feature-shell.js +13 -0
  297. package/src/client/application/app-shell/ui-feature-toolbar.js +1 -8
  298. package/src/client/application/diagram-chrome.js +126 -8
  299. package/src/client/application/diagram-preview-export.js +6 -24
  300. package/src/client/application/diagram-preview-hydrator.js +217 -22
  301. package/src/client/application/mermaid-preview-hydrator.js +46 -14
  302. package/src/client/application/plantuml-preview-hydrator.js +34 -10
  303. package/src/client/application/preview-diagram-utils.js +71 -62
  304. package/src/client/application/preview-render-compiler.js +4 -2
  305. package/src/client/application/preview-render-profile.js +9 -1
  306. package/src/client/application/preview-renderer.js +30 -164
  307. package/src/client/application/wiki-link-file-controller.js +2 -2
  308. package/src/client/application/workspace-coordinator.js +76 -54
  309. package/src/client/application/workspace-route-controller.js +31 -1
  310. package/src/client/bootstrap/collabmd-app-shell.js +180 -149
  311. package/src/client/bootstrap/lazy-controller-feature.js +4 -5
  312. package/src/client/browser-utils.js +77 -0
  313. package/src/client/domain/excalidraw-api-scene-sync.js +7 -3
  314. package/src/client/domain/excalidraw-collaboration.js +3 -7
  315. package/src/client/domain/excalidraw-diagnostics.js +111 -0
  316. package/src/client/domain/excalidraw-scene.js +2 -3
  317. package/src/client/domain/room.js +2 -2
  318. package/src/client/domain/vault-paths.js +14 -0
  319. package/src/client/domain/vault-utils.js +0 -64
  320. package/src/client/excalidraw-editor.js +250 -44
  321. package/src/client/export/export-pipeline.js +6 -9
  322. package/src/client/infrastructure/api-client-utils.js +23 -0
  323. package/src/client/infrastructure/app-version-monitor.js +0 -1
  324. package/src/client/infrastructure/backlinks-api-client.js +3 -5
  325. package/src/client/infrastructure/browser-notification-port.js +6 -10
  326. package/src/client/infrastructure/browser-preferences-port.js +25 -40
  327. package/src/client/infrastructure/excalidraw-room-client.js +115 -16
  328. package/src/client/infrastructure/git-api-client.js +9 -32
  329. package/src/client/infrastructure/plantuml-api-client.js +3 -5
  330. package/src/client/infrastructure/vault-api-client.js +6 -56
  331. package/src/client/presentation/bases-preview-controller.js +6 -22
  332. package/src/client/presentation/comment-overview-controller.js +3 -15
  333. package/src/client/presentation/comment-ui/comment-ui-card.js +31 -25
  334. package/src/client/presentation/comment-ui/comment-ui-layout.js +54 -0
  335. package/src/client/presentation/comment-ui/comment-ui-render.js +1 -0
  336. package/src/client/presentation/comment-ui/comment-ui-shared.js +86 -5
  337. package/src/client/presentation/comment-ui/comment-ui-state.js +3 -0
  338. package/src/client/presentation/comment-ui-controller.js +17 -1
  339. package/src/client/presentation/components/ui/button.js +0 -25
  340. package/src/client/presentation/components/ui/class-names.js +8 -27
  341. package/src/client/presentation/drawio-embed-controller.js +8 -33
  342. package/src/client/presentation/excalidraw-embed-controller.js +50 -43
  343. package/src/client/presentation/file-action-controller.js +8 -27
  344. package/src/client/presentation/file-explorer-controller.js +1 -2
  345. package/src/client/presentation/file-explorer-view.js +4 -17
  346. package/src/client/presentation/file-history-view-controller.js +3 -12
  347. package/src/client/presentation/git-diff-view-controller.js +8 -17
  348. package/src/client/presentation/git-panel-controller.js +3 -12
  349. package/src/client/presentation/quick-switcher-controller.js +4 -7
  350. package/src/client/presentation/scroll-sync-controller.js +5 -30
  351. package/src/client/styles/components/navigation.css +1 -1
  352. package/src/client/styles/features/auth-gate.css +4 -13
  353. package/src/client/styles/features/backlinks.css +0 -1
  354. package/src/client/styles/features/collaboration-dialogs.css +2 -2
  355. package/src/client/styles/features/comment-card.css +31 -18
  356. package/src/client/styles/features/comment-overlays.css +15 -0
  357. package/src/client/styles/features/comment-overview.css +9 -4
  358. package/src/client/styles/features/comments-drawer.css +0 -1
  359. package/src/client/styles/features/diagram-preview.css +20 -0
  360. package/src/client/styles/features/diff-commit.css +0 -2
  361. package/src/client/styles/features/git-history.css +0 -2
  362. package/src/client/styles/features/quick-switcher.css +0 -8
  363. package/src/client/styles/foundation/themes.css +9 -18
  364. package/src/client/styles/layout/responsive.css +1 -1
  365. package/src/client/styles/layout/sidebar.css +17 -21
  366. package/src/client/styles/style.css +25 -7
  367. package/src/client/styles/surfaces/excalidraw-editor.css +25 -0
  368. package/src/domain/excalidraw-room-codec.js +1 -9
  369. package/src/domain/vault-paths.js +41 -0
  370. package/src/server/config/env.js +1 -5
  371. package/src/server/domain/bases/base-expression-runtime.js +1 -46
  372. package/src/server/domain/collaboration/collaboration-document-store.js +12 -115
  373. package/src/server/domain/collaboration/collaboration-room.js +21 -10
  374. package/src/server/domain/markdown-reference-extractor.js +1 -46
  375. package/src/server/domain/workspace-state.js +0 -8
  376. package/src/server/infrastructure/git/git-service.js +10 -34
  377. package/src/server/infrastructure/git/history-service.js +51 -56
  378. package/src/server/infrastructure/git/parsers.js +42 -24
  379. package/src/server/infrastructure/git/responses.js +0 -23
  380. package/src/server/infrastructure/git/untracked-files.js +1 -1
  381. package/src/server/infrastructure/http/create-git-api-command-handler.js +7 -28
  382. package/src/server/infrastructure/http/create-git-api-query-handler.js +8 -24
  383. package/src/server/infrastructure/http/create-request-handler.js +37 -12
  384. package/src/server/infrastructure/http/create-vault-api-command-handler.js +17 -41
  385. package/src/server/infrastructure/http/create-vault-api-query-handler.js +7 -14
  386. package/src/server/infrastructure/http/http-request-helpers.js +23 -0
  387. package/src/server/infrastructure/http/http-response.js +13 -0
  388. package/src/server/infrastructure/persistence/vault-file-store.js +22 -60
  389. package/src/server/infrastructure/workspace/file-system-sync-service.js +3 -3
  390. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-Fb3TgxXK.js +0 -1
  391. package/dist/client/assets/actions-XO29hEzr.css +0 -1
  392. package/dist/client/assets/ar-SA-YLAB6A27-B9ogj_Jh.js +0 -8
  393. package/dist/client/assets/arc-DqK6O3qL.js +0 -1
  394. package/dist/client/assets/architecture-TIHT7OUA-BWqzHezU.js +0 -1
  395. package/dist/client/assets/architectureDiagram-ZJ3FMSHR-DL35gHTu.js +0 -36
  396. package/dist/client/assets/asciiarmor-qTkVPQu6.js +0 -1
  397. package/dist/client/assets/az-AZ-5JXPK2I2-C6Se5-4R.js +0 -1
  398. package/dist/client/assets/bases-preview-controller-CBHDzzot.js +0 -143
  399. package/dist/client/assets/bg-BG-NIQ2RVNG-xrf33IaO.js +0 -5
  400. package/dist/client/assets/bn-BD-BN65R3DE-YVZWNN-c.js +0 -3
  401. package/dist/client/assets/bn-IN-2YT4KVKB-YVZWNN-c.js +0 -3
  402. package/dist/client/assets/button-2ZnWQkWV.js +0 -1
  403. package/dist/client/assets/c4Diagram-LMCZKHZV-al3Umu1D.js +0 -10
  404. package/dist/client/assets/ca-ES-KSERGC3M-CoMtV4dM.js +0 -8
  405. package/dist/client/assets/channel-XzBGGMWh.js +0 -1
  406. package/dist/client/assets/chunk-52WLFC77-BjzXVnqm.js +0 -10
  407. package/dist/client/assets/chunk-6GK3VUBP-ChzWImvX.js +0 -41
  408. package/dist/client/assets/chunk-CJTDIR4C-DvUbqeGR.js +0 -1
  409. package/dist/client/assets/chunk-ICXQ74PX-DGYhuP6g.js +0 -2
  410. package/dist/client/assets/chunk-OGEWGWER-Xh5bvoYs.js +0 -1
  411. package/dist/client/assets/chunk-RYQCIY6F-Dtr3kkSR.js +0 -1
  412. package/dist/client/assets/chunk-VAUOI2AC-EcvKeBKU.js +0 -1
  413. package/dist/client/assets/chunk-WYO6CB5R-HgTPu1OL.js +0 -127
  414. package/dist/client/assets/classDiagram-OUVF2IWQ-vy5bnN3c.js +0 -1
  415. package/dist/client/assets/classDiagram-v2-EOCWNBFH-vy5bnN3c.js +0 -1
  416. package/dist/client/assets/clike-CVjTFI47.js +0 -1
  417. package/dist/client/assets/cmake-CyVbuzPu.js +0 -1
  418. package/dist/client/assets/coffeescript-B2pKbFk8.js +0 -1
  419. package/dist/client/assets/commonlisp-CcllspGY.js +0 -1
  420. package/dist/client/assets/controls-LYQrRFSF.css +0 -1
  421. package/dist/client/assets/cose-bilkent-JH36ORCC-ClqQrHIF.js +0 -1
  422. package/dist/client/assets/crystal-M5-qzICs.js +0 -1
  423. package/dist/client/assets/cs-CZ-EOMS3IHD-Bo0hDCLX.js +0 -7
  424. package/dist/client/assets/css-CYpP4FRV.js +0 -1
  425. package/dist/client/assets/cynefin-VYW2F7L2-4m18BxUG.js +0 -1
  426. package/dist/client/assets/cynefinDiagram-TSTJHNR4-BNlZcGFF.js +0 -62
  427. package/dist/client/assets/cytoscape.esm-CQFVGiJu.js +0 -321
  428. package/dist/client/assets/da-DK-AVL3DJQK-s5-TpkxN.js +0 -2
  429. package/dist/client/assets/dagre-dpRSp0QF.js +0 -1
  430. package/dist/client/assets/de-CH-M25HCZK4-B0r4rx6B.js +0 -7
  431. package/dist/client/assets/de-DE-BEN6XGXY-B0r4rx6B.js +0 -7
  432. package/dist/client/assets/defaultLocale-C8Fc0cco.js +0 -1
  433. package/dist/client/assets/diagram-WEI45ONY-C18MNAQv.js +0 -41
  434. package/dist/client/assets/dist-0x9D2TFD.js +0 -1
  435. package/dist/client/assets/dist-BA633xb4.js +0 -11
  436. package/dist/client/assets/dist-Bx-T__Lj.js +0 -1
  437. package/dist/client/assets/dist-ByYtm-FJ.js +0 -1
  438. package/dist/client/assets/dist-CCrwHjeP.js +0 -1
  439. package/dist/client/assets/dist-CHokDUN_.js +0 -1
  440. package/dist/client/assets/dist-CI1X-CJ2.js +0 -9
  441. package/dist/client/assets/dist-CPim1xdZ.js +0 -1
  442. package/dist/client/assets/dist-CZG184W2.js +0 -1
  443. package/dist/client/assets/dist-Cd1BXkVC.js +0 -1
  444. package/dist/client/assets/dist-CeEU6QwA.js +0 -2
  445. package/dist/client/assets/dist-DG2HpWvu.js +0 -1
  446. package/dist/client/assets/dist-DUj7Xwud.js +0 -13
  447. package/dist/client/assets/dist-DnbVQL2z.js +0 -1
  448. package/dist/client/assets/dist-QiKOmE2-.js +0 -1
  449. package/dist/client/assets/dist-du6QqIs42.js +0 -1
  450. package/dist/client/assets/dist-snK6kYA_.js +0 -1
  451. package/dist/client/assets/drawio-editor-Z2u5UkLg.js +0 -9
  452. package/dist/client/assets/drawio-embed-controller-BtzURctK.js +0 -1
  453. package/dist/client/assets/drawioEditor-B_kenUdu.js +0 -2
  454. package/dist/client/assets/editor-session-MbnP-AVK.js +0 -16
  455. package/dist/client/assets/el-GR-UBGIF2NW-DRoYAN8w.js +0 -7
  456. package/dist/client/assets/embedded-editor-base-DziW8fkY.css +0 -1
  457. package/dist/client/assets/en-PCJ7LJZ2-1SKiH5y3.js +0 -1
  458. package/dist/client/assets/es-ES-SQEM5MNY-D5EtY06q.js +0 -7
  459. package/dist/client/assets/eu-ES-YG5N2JAG-CZ0xKIU4.js +0 -7
  460. package/dist/client/assets/eventmodeling-45OFAUF4-Dp0gpjhg.js +0 -1
  461. package/dist/client/assets/excalidraw-editor-CN3Wpa0D.css +0 -1
  462. package/dist/client/assets/excalidraw-editor-kQEbzoXi.js +0 -9
  463. package/dist/client/assets/excalidraw-embed-controller-BKx05cjZ.js +0 -1
  464. package/dist/client/assets/excalidraw-scene-qiXFUZvq.js +0 -176
  465. package/dist/client/assets/excalidrawEditor-fUB8lhQG.js +0 -2
  466. package/dist/client/assets/export-page-CbIrJ_oK.js +0 -39
  467. package/dist/client/assets/exportDocument-DdfKM4AY.js +0 -2
  468. package/dist/client/assets/exportDocument-cl8dlTx1.css +0 -1
  469. package/dist/client/assets/fa-IR-EVNM7MAJ-olht-LEH.js +0 -9
  470. package/dist/client/assets/fi-FI-MW7ZEZ64-D1PIXbLy.js +0 -6
  471. package/dist/client/assets/flowDiagram-23GEKE2U-DgaZtMXJ.js +0 -1
  472. package/dist/client/assets/fr-FR-Q7ZPXBDE-B0DjjyfT.js +0 -12
  473. package/dist/client/assets/ganttDiagram-NO4QXBWP-DaBgmYw5.js +0 -292
  474. package/dist/client/assets/git-panel-controller-CzgJWqbB.js +0 -207
  475. package/dist/client/assets/gitGraph-TEB2WS4Q-Do0SQOtM.js +0 -1
  476. package/dist/client/assets/gl-ES-O5B74VQL-DH5u_ADp.js +0 -6
  477. package/dist/client/assets/groovy-BC3IOsC8.js +0 -1
  478. package/dist/client/assets/he-IL-QGC2WXJA-BSBR1RcG.js +0 -8
  479. package/dist/client/assets/hi-IN-DEZ33NMQ-CorD0_d0.js +0 -3
  480. package/dist/client/assets/hu-HU-2ZPNVYSC-BlqNXhNG.js +0 -3
  481. package/dist/client/assets/id-ID-W65WM5EO-SkLgeJLx.js +0 -8
  482. package/dist/client/assets/image-QEDDDPDB-DtzL4Wgr.js +0 -1
  483. package/dist/client/assets/image-blob-reduce.esm-DLFdRAwc.js +0 -2
  484. package/dist/client/assets/index-Burthu48.js +0 -2
  485. package/dist/client/assets/index-CYVmRVJX.css +0 -1
  486. package/dist/client/assets/info-DKCQHKI2-DIc7uC4I.js +0 -1
  487. package/dist/client/assets/init-D6jRqBbL.js +0 -1
  488. package/dist/client/assets/input-CXk9Zxz9.js +0 -1
  489. package/dist/client/assets/it-IT-GAWJM2XW-CDZugsE0.js +0 -12
  490. package/dist/client/assets/ja-JP-FOAUPTH5-DkKXnwj8.js +0 -12
  491. package/dist/client/assets/javascript-B9TABJff.js +0 -1
  492. package/dist/client/assets/javascript-BRzqD9BA.js +0 -1
  493. package/dist/client/assets/jsx-runtime-DKdBMi_L.js +0 -1
  494. package/dist/client/assets/kaa-UEDB54S7-C0Sv0drM.js +0 -1
  495. package/dist/client/assets/kab-KAB-CTLMBVE3-QfxUgzL5.js +0 -4
  496. package/dist/client/assets/keyboard-shortcuts-CLixkZxp.css +0 -1
  497. package/dist/client/assets/keyboard-shortcuts-CLyuDeFZ.js +0 -1
  498. package/dist/client/assets/kk-KZ-XZK63ADD-CMZObxxP.js +0 -1
  499. package/dist/client/assets/ko-KR-YNTPN6WQ-DPBaHnwT.js +0 -5
  500. package/dist/client/assets/ku-TR-XUD5BUEU-75pMUQoD.js +0 -6
  501. package/dist/client/assets/linear-DhAcoVP9.js +0 -1
  502. package/dist/client/assets/lt-LT-LYCDYH7O-BeKUsKuy.js +0 -3
  503. package/dist/client/assets/lv-LV-7ROPDEEI-CrA6QOtq.js +0 -4
  504. package/dist/client/assets/main-DdqVKzQ4.js +0 -813
  505. package/dist/client/assets/mermaid-runtime-2fJoRo49.js +0 -11
  506. package/dist/client/assets/mr-IN-TU6BXRKP-mIvXG0bt.js +0 -9
  507. package/dist/client/assets/my-MM-SJ3RWIEQ-CeEN5n4z.js +0 -1
  508. package/dist/client/assets/navigation-ChYBdSlq.css +0 -1
  509. package/dist/client/assets/nb-NO-GONF2AKR-IChp6OiI.js +0 -8
  510. package/dist/client/assets/nl-NL-UZF6UEKB-DfPPXXjo.js +0 -13
  511. package/dist/client/assets/nn-NO-ZVFRXEEO-BtpjNSGp.js +0 -4
  512. package/dist/client/assets/oc-FR-MBF2Z56W-CBl14QBM.js +0 -4
  513. package/dist/client/assets/pa-IN-3JCDVKKL-D95A1XFb.js +0 -4
  514. package/dist/client/assets/packet-7NZHBO7P-D2duWGIK.js +0 -1
  515. package/dist/client/assets/path-BWPyau1x.js +0 -1
  516. package/dist/client/assets/percentages-WBIPKLEE-bhlTAhiB.js +0 -1
  517. package/dist/client/assets/perl-CdEHsPfU.js +0 -1
  518. package/dist/client/assets/pie-RZYD4A2V-CynqTUkZ.js +0 -1
  519. package/dist/client/assets/preview-diagram-utils-BPaXsmlV.js +0 -1
  520. package/dist/client/assets/preview-render-compiler-C8wbmTyE.js +0 -1
  521. package/dist/client/assets/preview-render-compiler-CrQBxqqa.js +0 -35
  522. package/dist/client/assets/preview-render-profile-C89_PyT3.js +0 -23
  523. package/dist/client/assets/preview-render-worker-D84F1vpn.js +0 -59
  524. package/dist/client/assets/pt-BR-W4AF5QMX-DIJs8D4M.js +0 -6
  525. package/dist/client/assets/pt-PT-GNPUWAHX-BopN284Y.js +0 -8
  526. package/dist/client/assets/puppet-B4hC2X4m.js +0 -1
  527. package/dist/client/assets/python-2zlmcyof.js +0 -1
  528. package/dist/client/assets/r-DADKenSm.js +0 -1
  529. package/dist/client/assets/radar-I7S5WNFK-fIKE12aT.js +0 -1
  530. package/dist/client/assets/railroad-3IZDKUUU-Bgx8HJTj.js +0 -1
  531. package/dist/client/assets/railroad-abnf-AHOZXSZD-Nh6k60mH.js +0 -1
  532. package/dist/client/assets/railroad-ebnf-EBAXGLYW-C74h3s_I.js +0 -1
  533. package/dist/client/assets/railroad-peg-LSFZ7HO6-0hT-lN-u.js +0 -1
  534. package/dist/client/assets/ro-RO-DXHP33S5-PGxfl-ng.js +0 -12
  535. package/dist/client/assets/rolldown-runtime-aKtaBQYM.js +0 -1
  536. package/dist/client/assets/ru-RU-TTW2P7NF-Dwnn0sc5.js +0 -10
  537. package/dist/client/assets/ruby-DsYpTuWg.js +0 -1
  538. package/dist/client/assets/runtime-config-loader-BUK56BZz.js +0 -1
  539. package/dist/client/assets/sequenceDiagram-DBY2YBRQ-DonUqDnp.js +0 -162
  540. package/dist/client/assets/si-LK-BE6O7LVF-QO9nybVB.js +0 -1
  541. package/dist/client/assets/sk-SK-OI3KJLWQ-BAKIEIig.js +0 -7
  542. package/dist/client/assets/sl-SI-HF74RBGV-CnS5z7V_.js +0 -6
  543. package/dist/client/assets/sql-DcCJ9jop.js +0 -1
  544. package/dist/client/assets/src-UMNXGZaF.js +0 -1
  545. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-C4YrlXQg.js +0 -1
  546. package/dist/client/assets/states-DYMshUe2.css +0 -1
  547. package/dist/client/assets/subset-shared.chunk-D3olxosN.js +0 -1
  548. package/dist/client/assets/sv-SE-TXR2SQGA-CNgv7xeJ.js +0 -8
  549. package/dist/client/assets/swimlanes-5IMT3BWC-DP1GREXh.js +0 -2
  550. package/dist/client/assets/swimlanesDiagram-G3AALYLV-CN_iOXin.js +0 -8
  551. package/dist/client/assets/ta-IN-Y2DOZGBR-DYzsfax7.js +0 -6
  552. package/dist/client/assets/th-TH-JUAISFQR-BAZHUCM7.js +0 -1
  553. package/dist/client/assets/tiki-CxVlf5KZ.js +0 -1
  554. package/dist/client/assets/timeline-definition-FHXFAJF6-C-QK9sME.js +0 -120
  555. package/dist/client/assets/toml-LvoKBwCs.js +0 -1
  556. package/dist/client/assets/tr-TR-U3HGKQXH-DTYupb_4.js +0 -4
  557. package/dist/client/assets/treeView-QDETBFTQ-CygwzEgj.js +0 -1
  558. package/dist/client/assets/treemap-6X3UGDF4-BbCXbaXr.js +0 -1
  559. package/dist/client/assets/uk-UA-FP2TKAFK-Bcxd6wgd.js +0 -6
  560. package/dist/client/assets/uz-UZ-WY5QKWXJ-B5N6xPud.js +0 -1
  561. package/dist/client/assets/vault-api-client-BPVNCJZC.js +0 -1
  562. package/dist/client/assets/vault-api-client-VAfZ8okg.js +0 -1
  563. package/dist/client/assets/vault-utils-kIbqyWPm.js +0 -1
  564. package/dist/client/assets/vi-VN-DE5I4H6K-BdlcTH5l.js +0 -7
  565. package/dist/client/assets/wardley-OPB4EBWU-BjXxCRf_.js +0 -1
  566. package/dist/client/assets/yjs-provider-reset-guard-DSfwdXS9.js +0 -4
  567. package/dist/client/assets/z80-CL1naaMV.js +0 -1
  568. package/dist/client/assets/zh-CN-VWHOHS7G-b12eD2L4.js +0 -11
  569. package/dist/client/assets/zh-HK-KQF7FW7H-Bvr6xExo.js +0 -1
  570. package/dist/client/assets/zh-TW-6VHVWZKW-B-KCOPyt.js +0 -13
  571. package/server.js +0 -1
  572. package/src/client/application/app-shell/ui-feature.js +0 -13
  573. package/src/client/application/file-open-lifecycle.js +0 -26
  574. package/src/client/application/workspace-chrome-controller.js +0 -109
  575. package/src/client/application/workspace-state-store.js +0 -48
  576. package/src/client/bootstrap/app-shell-feature-surface.js +0 -67
  577. package/src/client/domain/excalidraw-document-switch.js +0 -3
  578. package/src/client/domain/vault-api-client.js +0 -1
  579. package/src/client/domain/workspace-request-id.js +0 -7
  580. package/src/client/infrastructure/browser-navigation-port.js +0 -39
  581. package/src/client/mermaid-runtime.js +0 -3
  582. package/src/client/presentation/app-shell-renderer.js +0 -13
  583. package/src/client/presentation/app-shell-template.js +0 -675
  584. package/src/client/presentation/comments-panel.js +0 -578
  585. package/src/client/presentation/components/ui/badge.js +0 -24
  586. package/src/client/presentation/components/ui/ensure-ui-component-styles.js +0 -18
  587. package/src/client/presentation/components/ui/input.js +0 -9
  588. package/src/client/styles/features/collaboration-ui.css +0 -3
  589. package/src/client/styles/features/comments.css +0 -5
  590. package/src/client/styles/features/diff.css +0 -3
  591. package/src/client/styles/features/git.css +0 -3
  592. package/src/client/styles/features/preview-content.css +0 -3
  593. package/src/client/styles/features/preview-sidebars.css +0 -2
  594. package/src/client/styles/overrides/vendor.css +0 -2
  595. package/src/server/domain/collaboration/room-client-state-store.js +0 -29
  596. package/src/server/domain/git-service.js +0 -1
  597. package/src/server/domain/plantuml-renderer.js +0 -1
  598. package/src/server/index.js +0 -74
  599. package/src/server/infrastructure/git/concurrency.js +0 -19
  600. package/src/server/infrastructure/http/create-git-api-handler.js +0 -44
  601. package/src/server/infrastructure/http/create-vault-api-handler.js +0 -54
  602. package/src/server/infrastructure/persistence/vault-content-adapter.js +0 -61
  603. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +0 -20
@@ -1,4 +1,4 @@
1
- import { getRequestErrorStatusCode } from './http-errors.js';
1
+ import { handleApiError } from './http-request-helpers.js';
2
2
  import { jsonResponse } from './http-response.js';
3
3
 
4
4
  function resolveDiffScope(requestUrl) {
@@ -28,22 +28,6 @@ function readHistoryOffset(value) {
28
28
  return Number.isFinite(parsed) ? parsed : 0;
29
29
  }
30
30
 
31
- function handleGitError(req, res, error, message, fallback) {
32
- const statusCode = getRequestErrorStatusCode(error);
33
- if (statusCode) {
34
- const payload = { error: error.message };
35
- if (typeof error?.requestCode === 'string') {
36
- payload.code = error.requestCode;
37
- }
38
- jsonResponse(req, res, statusCode, payload);
39
- return true;
40
- }
41
-
42
- console.error(message, error.message);
43
- jsonResponse(req, res, 500, { error: fallback });
44
- return true;
45
- }
46
-
47
31
  export function createGitApiQueryHandler({ gitService }) {
48
32
  return async function handleGitApiQuery(req, res, requestUrl) {
49
33
  if (requestUrl.pathname === '/api/git/status' && req.method === 'GET') {
@@ -52,7 +36,7 @@ export function createGitApiQueryHandler({ gitService }) {
52
36
  force: isTruthyParam(requestUrl.searchParams.get('force')),
53
37
  }));
54
38
  } catch (error) {
55
- handleGitError(req, res, error, '[api] Failed to read git status:', 'Failed to read git status');
39
+ handleApiError(req, res, error, '[api] Failed to read git status:', 'Failed to read git status');
56
40
  }
57
41
  return true;
58
42
  }
@@ -66,7 +50,7 @@ export function createGitApiQueryHandler({ gitService }) {
66
50
  scope: resolveDiffScope(requestUrl),
67
51
  }));
68
52
  } catch (error) {
69
- handleGitError(req, res, error, '[api] Failed to read git diff:', 'Failed to read git diff');
53
+ handleApiError(req, res, error, '[api] Failed to read git diff:', 'Failed to read git diff');
70
54
  }
71
55
  return true;
72
56
  }
@@ -78,7 +62,7 @@ export function createGitApiQueryHandler({ gitService }) {
78
62
  offset: readHistoryOffset(requestUrl.searchParams.get('offset')),
79
63
  }));
80
64
  } catch (error) {
81
- handleGitError(req, res, error, '[api] Failed to read git history:', 'Failed to read git history');
65
+ handleApiError(req, res, error, '[api] Failed to read git history:', 'Failed to read git history');
82
66
  }
83
67
  return true;
84
68
  }
@@ -91,7 +75,7 @@ export function createGitApiQueryHandler({ gitService }) {
91
75
  path: requestUrl.searchParams.get('path'),
92
76
  }));
93
77
  } catch (error) {
94
- handleGitError(req, res, error, '[api] Failed to read git file history:', 'Failed to read git file history');
78
+ handleApiError(req, res, error, '[api] Failed to read git file history:', 'Failed to read git file history');
95
79
  }
96
80
  return true;
97
81
  }
@@ -105,7 +89,7 @@ export function createGitApiQueryHandler({ gitService }) {
105
89
  path: requestUrl.searchParams.get('path'),
106
90
  }));
107
91
  } catch (error) {
108
- handleGitError(req, res, error, '[api] Failed to read git commit:', 'Failed to read git commit');
92
+ handleApiError(req, res, error, '[api] Failed to read git commit:', 'Failed to read git commit');
109
93
  }
110
94
  return true;
111
95
  }
@@ -117,7 +101,7 @@ export function createGitApiQueryHandler({ gitService }) {
117
101
  path: requestUrl.searchParams.get('path'),
118
102
  }));
119
103
  } catch (error) {
120
- handleGitError(req, res, error, '[api] Failed to read git file snapshot:', 'Failed to read git file snapshot');
104
+ handleApiError(req, res, error, '[api] Failed to read git file snapshot:', 'Failed to read git file snapshot');
121
105
  }
122
106
  return true;
123
107
  }
@@ -128,7 +112,7 @@ export function createGitApiQueryHandler({ gitService }) {
128
112
  backups: await gitService.listPullBackups(),
129
113
  });
130
114
  } catch (error) {
131
- handleGitError(req, res, error, '[api] Failed to read pull backups:', 'Failed to read pull backups');
115
+ handleApiError(req, res, error, '[api] Failed to read pull backups:', 'Failed to read pull backups');
132
116
  }
133
117
  return true;
134
118
  }
@@ -1,9 +1,12 @@
1
1
  import { createAuthApiHandler } from './create-auth-api-handler.js';
2
- import { createGitApiHandler } from './create-git-api-handler.js';
2
+ import { createGitApiCommandHandler } from './create-git-api-command-handler.js';
3
+ import { createGitApiQueryHandler } from './create-git-api-query-handler.js';
3
4
  import { createHostedApiHandler } from './create-hosted-api-handler.js';
4
5
  import { createEsmProxyHandler } from './create-esm-proxy-handler.js';
6
+ import { createPlantUmlApiHandler } from './create-plantuml-api-handler.js';
5
7
  import { createStaticHandler } from './create-static-handler.js';
6
- import { createVaultApiHandler } from './create-vault-api-handler.js';
8
+ import { createVaultApiCommandHandler } from './create-vault-api-command-handler.js';
9
+ import { createVaultApiQueryHandler } from './create-vault-api-query-handler.js';
7
10
  import { parseJsonBody } from './request-body.js';
8
11
  import {
9
12
  applyCorsHeaders,
@@ -61,25 +64,28 @@ export function createRequestHandler(
61
64
  githubSetupFlow,
62
65
  hostedWorkspaceService,
63
66
  });
64
- const handleGitApi = createGitApiHandler({
67
+ const handleGitApiQuery = createGitApiQueryHandler({ gitService });
68
+ const handleGitApiCommand = createGitApiCommandHandler({
65
69
  authService,
66
- backlinkIndex,
67
70
  gitService,
68
- roomRegistry,
69
- vaultFileStore,
70
71
  workspaceMutationCoordinator,
71
72
  });
72
- const handleVaultApi = createVaultApiHandler({
73
+ const handleVaultApiQuery = createVaultApiQueryHandler({
73
74
  baseQueryService,
74
75
  backlinkIndex,
75
76
  config,
77
+ searchService,
78
+ vaultFileStore,
79
+ workspaceMutationCoordinator,
80
+ });
81
+ const handleVaultApiCommand = createVaultApiCommandHandler({
82
+ backlinkIndex,
76
83
  docxExporter,
77
- plantUmlRenderer,
78
84
  roomRegistry,
79
- searchService,
80
85
  vaultFileStore,
81
86
  workspaceMutationCoordinator,
82
87
  });
88
+ const handlePlantUmlApi = createPlantUmlApiHandler({ plantUmlRenderer });
83
89
 
84
90
  function handleBasePathRedirect(req, res, originalRequestUrl) {
85
91
  if (
@@ -209,11 +215,30 @@ export function createRequestHandler(
209
215
  }
210
216
  }
211
217
 
212
- if (await handleVaultApi(req, res, requestUrl)) {
213
- return;
218
+ if (requestUrl.pathname.startsWith('/api/')) {
219
+ if (await handleVaultApiQuery(req, res, requestUrl)) {
220
+ return;
221
+ }
222
+ if (await handleVaultApiCommand(req, res, requestUrl)) {
223
+ return;
224
+ }
225
+ if (await handlePlantUmlApi(req, res, requestUrl)) {
226
+ return;
227
+ }
214
228
  }
215
229
 
216
- if (await handleGitApi(req, res, requestUrl)) {
230
+ if (requestUrl.pathname.startsWith('/api/git')) {
231
+ if (!gitService) {
232
+ jsonResponse(req, res, 503, { error: 'Git integration is not configured' });
233
+ return;
234
+ }
235
+ if (await handleGitApiQuery(req, res, requestUrl)) {
236
+ return;
237
+ }
238
+ if (await handleGitApiCommand(req, res, requestUrl)) {
239
+ return;
240
+ }
241
+ jsonResponse(req, res, 404, { error: 'Git API endpoint not found' });
217
242
  return;
218
243
  }
219
244
 
@@ -1,30 +1,23 @@
1
1
  import { basename } from 'node:path';
2
- import { createRequestError, getRequestErrorStatusCode } from './http-errors.js';
3
- import { jsonResponse, sendResponse } from './http-response.js';
2
+ import { createRequestError } from './http-errors.js';
3
+ import { handleApiError, readRequestId } from './http-request-helpers.js';
4
+ import {
5
+ createSafeAsciiFilename,
6
+ encodeContentDispositionFilename,
7
+ jsonResponse,
8
+ sendResponse,
9
+ } from './http-response.js';
4
10
  import { parseJsonBody, readBinaryRequestBody } from './request-body.js';
5
11
 
6
12
  const DOCX_EXPORT_REQUEST_LIMIT_BYTES = 33_554_432;
7
13
  const DOCX_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
8
14
 
9
- function encodeContentDispositionFilename(fileName) {
10
- return encodeURIComponent(String(fileName ?? ''))
11
- .replace(/['()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
12
- }
13
-
14
- function createSafeAsciiFilename(fileName) {
15
- const fallback = String(fileName ?? '')
16
- .replace(/[^\x20-\x7E]+/g, '_')
17
- .replace(/["\\]/g, '_')
18
- .trim();
19
- return fallback || 'document';
20
- }
21
-
22
15
  function createDocxDownloadHeaders(filePath) {
23
16
  const fileName = basename(String(filePath ?? 'document')).replace(/\.[^.]+$/u, '') || 'document';
24
17
  const exportFileName = `${fileName}.docx`;
25
18
  return {
26
19
  'Cache-Control': 'no-store',
27
- 'Content-Disposition': `attachment; filename="${createSafeAsciiFilename(exportFileName)}"; filename*=UTF-8''${encodeContentDispositionFilename(exportFileName)}`,
20
+ 'Content-Disposition': `attachment; filename="${createSafeAsciiFilename(exportFileName, 'document')}"; filename*=UTF-8''${encodeContentDispositionFilename(exportFileName)}`,
28
21
  'Content-Type': DOCX_MIME_TYPE,
29
22
  'X-Content-Type-Options': 'nosniff',
30
23
  };
@@ -43,23 +36,6 @@ function decodeHeaderMetadata(value) {
43
36
  }
44
37
  }
45
38
 
46
- function readRequestId(req) {
47
- const value = String(req.headers['x-collabmd-request-id'] || '').trim();
48
- return value ? value.slice(0, 120) : null;
49
- }
50
-
51
- function handleVaultError(req, res, error, logMessage, fallbackMessage) {
52
- const statusCode = getRequestErrorStatusCode(error);
53
- if (statusCode) {
54
- jsonResponse(req, res, statusCode, { error: error.message });
55
- return true;
56
- }
57
-
58
- console.error(logMessage, error.message);
59
- jsonResponse(req, res, 500, { error: fallbackMessage });
60
- return true;
61
- }
62
-
63
39
  function getDirectoryDeleteStatusCode(message = '') {
64
40
  return String(message).includes('Directory is not empty') ? 409 : 400;
65
41
  }
@@ -88,7 +64,7 @@ async function handleExportDocx({ docxExporter }, req, res) {
88
64
  statusCode: 200,
89
65
  });
90
66
  } catch (error) {
91
- handleVaultError(req, res, error, '[api] Failed to export DOCX:', 'Failed to export DOCX');
67
+ handleApiError(req, res, error, '[api] Failed to export DOCX:', 'Failed to export DOCX');
92
68
  }
93
69
  return true;
94
70
  }
@@ -113,7 +89,7 @@ async function handleWriteFile({ workspaceMutationCoordinator }, req, res) {
113
89
 
114
90
  jsonResponse(req, res, 200, { ok: true });
115
91
  } catch (error) {
116
- handleVaultError(req, res, error, '[api] Failed to write file:', 'Failed to write file');
92
+ handleApiError(req, res, error, '[api] Failed to write file:', 'Failed to write file');
117
93
  }
118
94
  return true;
119
95
  }
@@ -148,7 +124,7 @@ async function handleUploadAttachment({ workspaceMutationCoordinator }, req, res
148
124
  path: result.path,
149
125
  });
150
126
  } catch (error) {
151
- handleVaultError(req, res, error, '[api] Failed to upload attachment:', 'Failed to upload attachment');
127
+ handleApiError(req, res, error, '[api] Failed to upload attachment:', 'Failed to upload attachment');
152
128
  }
153
129
  return true;
154
130
  }
@@ -172,7 +148,7 @@ async function handleCreateFile({ workspaceMutationCoordinator }, req, res) {
172
148
  }
173
149
  jsonResponse(req, res, 201, { ok: true, path: body.path });
174
150
  } catch (error) {
175
- handleVaultError(req, res, error, '[api] Failed to create file:', 'Failed to create file');
151
+ handleApiError(req, res, error, '[api] Failed to create file:', 'Failed to create file');
176
152
  }
177
153
  return true;
178
154
  }
@@ -220,7 +196,7 @@ async function handleRenameFile({ workspaceMutationCoordinator }, req, res) {
220
196
  }
221
197
  jsonResponse(req, res, 200, { ok: true, path: body.newPath });
222
198
  } catch (error) {
223
- handleVaultError(req, res, error, '[api] Failed to rename file:', 'Failed to rename file');
199
+ handleApiError(req, res, error, '[api] Failed to rename file:', 'Failed to rename file');
224
200
  }
225
201
  return true;
226
202
  }
@@ -244,7 +220,7 @@ async function handleCreateDirectory({ workspaceMutationCoordinator }, req, res)
244
220
 
245
221
  jsonResponse(req, res, 201, { ok: true });
246
222
  } catch (error) {
247
- handleVaultError(req, res, error, '[api] Failed to create directory:', 'Failed to create directory');
223
+ handleApiError(req, res, error, '[api] Failed to create directory:', 'Failed to create directory');
248
224
  }
249
225
  return true;
250
226
  }
@@ -269,7 +245,7 @@ async function handleRenameDirectory({ workspaceMutationCoordinator }, req, res)
269
245
 
270
246
  jsonResponse(req, res, 200, { ok: true, path: body.newPath });
271
247
  } catch (error) {
272
- handleVaultError(req, res, error, '[api] Failed to rename directory:', 'Failed to rename directory');
248
+ handleApiError(req, res, error, '[api] Failed to rename directory:', 'Failed to rename directory');
273
249
  }
274
250
  return true;
275
251
  }
@@ -295,7 +271,7 @@ async function handleDeleteDirectory({ workspaceMutationCoordinator }, req, res,
295
271
 
296
272
  jsonResponse(req, res, 200, { ok: true });
297
273
  } catch (error) {
298
- handleVaultError(req, res, error, '[api] Failed to delete directory:', 'Failed to delete directory');
274
+ handleApiError(req, res, error, '[api] Failed to delete directory:', 'Failed to delete directory');
299
275
  }
300
276
  return true;
301
277
  }
@@ -6,26 +6,19 @@ import { join } from 'node:path';
6
6
  import { isImageAttachmentFilePath } from '../../../domain/file-kind.js';
7
7
  import { isIgnoredVaultEntry } from '../persistence/path-utils.js';
8
8
  import { parseJsonBody } from './request-body.js';
9
- import { jsonResponse, sendResponse, sendStreamResponse } from './http-response.js';
9
+ import {
10
+ createSafeAsciiFilename,
11
+ encodeContentDispositionFilename,
12
+ jsonResponse,
13
+ sendResponse,
14
+ sendStreamResponse,
15
+ } from './http-response.js';
10
16
 
11
17
  const SVG_MIME_TYPE = 'image/svg+xml';
12
18
  const SVG_ATTACHMENT_CSP = "default-src 'none'; img-src 'self' data: blob:; style-src 'unsafe-inline'; sandbox";
13
19
  const DEFAULT_MAX_ARCHIVE_ENTRIES = 10_000;
14
20
  const DEFAULT_MAX_DOWNLOAD_FILE_BYTES = 268_435_456;
15
21
 
16
- function encodeContentDispositionFilename(fileName) {
17
- return encodeURIComponent(String(fileName ?? ''))
18
- .replace(/['()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
19
- }
20
-
21
- function createSafeAsciiFilename(fileName) {
22
- const fallback = String(fileName ?? '')
23
- .replace(/[^\x20-\x7E]+/g, '_')
24
- .replace(/["\\]/g, '_')
25
- .trim();
26
- return fallback || 'attachment';
27
- }
28
-
29
22
  function createAttachmentHeaders(attachment) {
30
23
  const fileName = basename(String(attachment?.path ?? 'attachment'));
31
24
  const headers = {
@@ -0,0 +1,23 @@
1
+ import { getRequestErrorStatusCode } from './http-errors.js';
2
+ import { jsonResponse } from './http-response.js';
3
+
4
+ export function readRequestId(req) {
5
+ const value = String(req.headers['x-collabmd-request-id'] || '').trim();
6
+ return value ? value.slice(0, 120) : null;
7
+ }
8
+
9
+ export function handleApiError(req, res, error, logMessage, fallbackMessage) {
10
+ const statusCode = getRequestErrorStatusCode(error);
11
+ if (statusCode) {
12
+ const payload = { error: error.message };
13
+ if (typeof error?.requestCode === 'string') {
14
+ payload.code = error.requestCode;
15
+ }
16
+ jsonResponse(req, res, statusCode, payload);
17
+ return true;
18
+ }
19
+
20
+ console.error(logMessage, error.message);
21
+ jsonResponse(req, res, 500, { error: fallbackMessage });
22
+ return true;
23
+ }
@@ -7,6 +7,19 @@ import {
7
7
  const COMPRESSIBLE_CONTENT_TYPE_PATTERN = /^(?:text\/|application\/(?:javascript|json|xml)|image\/svg\+xml)/i;
8
8
  const MIN_COMPRESSIBLE_BYTES = 1024;
9
9
 
10
+ export function encodeContentDispositionFilename(fileName) {
11
+ return encodeURIComponent(String(fileName ?? ''))
12
+ .replace(/['()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
13
+ }
14
+
15
+ export function createSafeAsciiFilename(fileName, fallback = 'attachment') {
16
+ const normalized = String(fileName ?? '')
17
+ .replace(/[^\x20-\x7E]+/g, '_')
18
+ .replace(/["\\]/g, '_')
19
+ .trim();
20
+ return normalized || fallback;
21
+ }
22
+
10
23
  export const SECURITY_HEADERS = {
11
24
  'Referrer-Policy': 'strict-origin-when-cross-origin',
12
25
  'X-Content-Type-Options': 'nosniff',
@@ -13,7 +13,6 @@ import {
13
13
  } from '../../../domain/file-kind.js';
14
14
  import { createCommentOverview } from '../../domain/comment-overview.js';
15
15
  import { scanWorkspaceState as scanWorkspaceStateFromAdapter } from '../../domain/workspace-state.js';
16
- import { getEditableVaultContentKind } from './vault-content-adapter.js';
17
16
  import {
18
17
  INVALID_VAULT_FILE_PATH_ERROR,
19
18
  isIgnoredVaultEntry,
@@ -24,6 +23,22 @@ import {
24
23
  sanitizeVaultPath,
25
24
  toVaultRelativePath,
26
25
  } from './path-utils.js';
26
+
27
+ const EDITABLE_VAULT_CONTENT_PATH_ERRORS = {
28
+ base: 'Invalid file path — must end in .base',
29
+ drawio: 'Invalid file path — must end in .drawio',
30
+ excalidraw: 'Invalid file path — must end in .excalidraw',
31
+ markdown: 'Invalid file path',
32
+ mermaid: 'Invalid file path — must end in .mmd or .mermaid',
33
+ plantuml: 'Invalid file path — must end in .puml or .plantuml',
34
+ };
35
+
36
+ function getEditableVaultContentKind(filePath) {
37
+ const kind = getVaultFileKind(filePath);
38
+ return EDITABLE_VAULT_CONTENT_PATH_ERRORS[kind]
39
+ ? { invalidPathError: EDITABLE_VAULT_CONTENT_PATH_ERRORS[kind], kind }
40
+ : null;
41
+ }
27
42
  import { SidecarStore } from './sidecar-store.js';
28
43
  import { createWorkspaceStateFileSystemAdapter } from '../workspace/workspace-state-file-system-adapter.js';
29
44
 
@@ -376,9 +391,9 @@ export class VaultFileStore {
376
391
  return { absolute, adapter };
377
392
  }
378
393
 
379
- async readContentFile(filePath, expectedKind) {
394
+ async readContentFile(filePath, expectedKind = null) {
380
395
  const resolved = this.resolveAdapter(filePath);
381
- if (!resolved || resolved.adapter.kind !== expectedKind) {
396
+ if (!resolved || (expectedKind && resolved.adapter.kind !== expectedKind)) {
382
397
  return null;
383
398
  }
384
399
 
@@ -394,20 +409,7 @@ export class VaultFileStore {
394
409
  }
395
410
 
396
411
  async readEditableVaultContent(filePath) {
397
- const resolved = this.resolveAdapter(filePath);
398
- if (!resolved) {
399
- return null;
400
- }
401
-
402
- try {
403
- return await readFile(resolved.absolute, 'utf-8');
404
- } catch (error) {
405
- if (error.code === 'ENOENT') {
406
- return null;
407
- }
408
-
409
- throw error;
410
- }
412
+ return this.readContentFile(filePath);
411
413
  }
412
414
 
413
415
  async writeResolvedContentFile(resolved, filePath, content, { invalidateCollaborationSnapshot = true } = {}) {
@@ -425,9 +427,9 @@ export class VaultFileStore {
425
427
  }
426
428
  }
427
429
 
428
- async writeContentFile(filePath, content, expectedKind, { invalidateCollaborationSnapshot = true } = {}) {
430
+ async writeContentFile(filePath, content, expectedKind = null, { invalidateCollaborationSnapshot = true } = {}) {
429
431
  const resolved = this.resolveAdapter(filePath);
430
- if (!resolved || resolved.adapter.kind !== expectedKind) {
432
+ if (!resolved || (expectedKind && resolved.adapter.kind !== expectedKind)) {
431
433
  return {
432
434
  ok: false,
433
435
  error: resolved?.adapter?.invalidPathError ?? getEditableVaultContentKind(filePath)?.invalidPathError ?? INVALID_VAULT_FILE_PATH_ERROR,
@@ -438,15 +440,7 @@ export class VaultFileStore {
438
440
  }
439
441
 
440
442
  async writeEditableVaultContent(filePath, content, { invalidateCollaborationSnapshot = true } = {}) {
441
- const resolved = this.resolveAdapter(filePath);
442
- if (!resolved) {
443
- return {
444
- ok: false,
445
- error: getEditableVaultContentKind(filePath)?.invalidPathError ?? INVALID_VAULT_FILE_PATH_ERROR,
446
- };
447
- }
448
-
449
- return this.writeResolvedContentFile(resolved, filePath, content, { invalidateCollaborationSnapshot });
443
+ return this.writeContentFile(filePath, content, null, { invalidateCollaborationSnapshot });
450
444
  }
451
445
 
452
446
  async readMarkdownFile(filePath) {
@@ -457,22 +451,6 @@ export class VaultFileStore {
457
451
  return this.readContentFile(filePath, 'base');
458
452
  }
459
453
 
460
- async readExcalidrawFile(filePath) {
461
- return this.readContentFile(filePath, 'excalidraw');
462
- }
463
-
464
- async readDrawioFile(filePath) {
465
- return this.readContentFile(filePath, 'drawio');
466
- }
467
-
468
- async readMermaidFile(filePath) {
469
- return this.readContentFile(filePath, 'mermaid');
470
- }
471
-
472
- async readPlantUmlFile(filePath) {
473
- return this.readContentFile(filePath, 'plantuml');
474
- }
475
-
476
454
  async readImageAttachmentFile(filePath) {
477
455
  const absolute = this.resolveContentPath(filePath, { requireVaultFile: false });
478
456
  if (!absolute || !isImageAttachmentFilePath(filePath)) {
@@ -533,22 +511,6 @@ export class VaultFileStore {
533
511
  return this.writeContentFile(filePath, content, 'base', options);
534
512
  }
535
513
 
536
- async writeExcalidrawFile(filePath, content, options = {}) {
537
- return this.writeContentFile(filePath, content, 'excalidraw', options);
538
- }
539
-
540
- async writeDrawioFile(filePath, content, options = {}) {
541
- return this.writeContentFile(filePath, content, 'drawio', options);
542
- }
543
-
544
- async writeMermaidFile(filePath, content, options = {}) {
545
- return this.writeContentFile(filePath, content, 'mermaid', options);
546
- }
547
-
548
- async writePlantUmlFile(filePath, content, options = {}) {
549
- return this.writeContentFile(filePath, content, 'plantuml', options);
550
- }
551
-
552
514
  async writeImageAttachmentForDocument(sourceDocumentPath, {
553
515
  content,
554
516
  mimeType,
@@ -2,10 +2,10 @@ import { watch } from 'node:fs';
2
2
  import { basename } from 'node:path';
3
3
 
4
4
  import { logPerfEvent } from '../../config/perf-logging.js';
5
+ import { hasWorkspaceMutation } from '../../../domain/workspace-change.js';
5
6
  import {
6
7
  deriveIncrementalWorkspaceState,
7
8
  detectWorkspaceStateChange,
8
- hasWorkspaceStatePaths,
9
9
  readWorkspacePathSnapshot as readWorkspacePathSnapshotFromAdapter,
10
10
  } from '../../domain/workspace-state.js';
11
11
  import { isIgnoredVaultEntry } from '../persistence/path-utils.js';
@@ -193,7 +193,7 @@ export class FileSystemSyncService {
193
193
  let filteredChange = this.mutationCoordinator.filterManagedWorkspaceChange(workspaceChange);
194
194
  if (!filteredChange) {
195
195
  const authoritativeChange = detectWorkspaceStateChange(authoritativePreviousState, nextState);
196
- if (hasWorkspaceStatePaths(authoritativeChange)) {
196
+ if (hasWorkspaceMutation(authoritativeChange)) {
197
197
  nextState = await this.vaultFileStore.scanWorkspaceState();
198
198
  workspaceChange = detectWorkspaceStateChange(authoritativePreviousState, nextState);
199
199
  this.lastState = nextState;
@@ -204,7 +204,7 @@ export class FileSystemSyncService {
204
204
  }
205
205
 
206
206
  if (!filteredChange) {
207
- if (this.mutationCoordinator.isGloballySuppressed?.() || hasWorkspaceStatePaths(workspaceChange)) {
207
+ if (this.mutationCoordinator.isGloballySuppressed?.() || hasWorkspaceMutation(workspaceChange)) {
208
208
  this.mutationCoordinator.syncWorkspaceEntries(nextState, {
209
209
  previousState: previousWorkspaceState,
210
210
  });
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{A as t,F as n,J as r,L as i,P as a,V as o,X as s,c,lt as l,q as u,st as d,t as f}from"./dist-DUj7Xwud.js";import"./chunk-SRAX5OIU-Bpn6XoyU.js";import{t as p}from"./react-lCSYwAWP.js";import{n as m,r as h,s as g,t as _}from"./dist-snK6kYA_.js";import{t as v}from"./jsx-runtime-DKdBMi_L.js";var y=e(p(),1),b=v(),x=c.define({token(e){return e.match(/^%%.*$/)?`comment`:e.match(/^"(?:[^"\\]|\\.)*"/)?`string`:e.match(/^(flowchart|graph|sequenceDiagram|classDiagram|stateDiagram|erDiagram|gantt|pie|mindmap|journey|gitGraph|timeline|quadrantChart|sankey|xychart)\b/i)||e.match(/^(TB|TD|BT|RL|LR)\b/)||e.match(/^(subgraph|end|participant|actor|loop|alt|else|opt|par|critical|break|rect|note|over|activate|deactivate|title|section|class|style|linkStyle|classDef|click)\b/i)?`keyword`:e.match(/^[-.=<>|ox]+>/)||e.match(/^<[-.=<>|ox]+/)||e.match(/^--+|\.\.+|==+/)?`operator`:e.match(/^[[\](){}|<>]/)?`bracket`:e.match(/^[A-Za-z_][A-Za-z0-9_]*/)?`variableName`:e.match(/^\d+(\.\d+)?/)?`number`:e.match(/^[,:;]/)?`punctuation`:(e.eatSpace()||e.next(),null)}});function S(){return x}var C=i.theme({"&":{backgroundColor:`#1e1e1e`,color:`#d4d4d4`},".cm-content":{caretColor:`#fff`},".cm-cursor":{borderLeftColor:`#fff`},".cm-gutters":{backgroundColor:`#1e1e1e`,color:`#858585`,border:`none`},".cm-activeLineGutter":{backgroundColor:`#2a2a2a`},".cm-activeLine":{backgroundColor:`#2a2a2a`},".cm-errorLine":{backgroundColor:`rgba(255, 0, 0, 0.15)`}},{dark:!0}),w=f.define([{tag:a.keyword,color:`#569cd6`},{tag:a.string,color:`#ce9178`},{tag:a.comment,color:`#6a9955`},{tag:a.number,color:`#b5cea8`},{tag:a.operator,color:`#d4d4d4`},{tag:a.punctuation,color:`#d4d4d4`},{tag:a.variableName,color:`#9cdcfe`},{tag:a.bracket,color:`#ffd700`}]),T=i.theme({"&":{backgroundColor:`#ffffff`,color:`#1e1e1e`},".cm-content":{caretColor:`#000`},".cm-cursor":{borderLeftColor:`#000`},".cm-gutters":{backgroundColor:`#fff`,color:`#999`,border:`none`},".cm-activeLineGutter":{backgroundColor:`#e8e8e8`},".cm-activeLine":{backgroundColor:`#e8e8e8`},".cm-errorLine":{backgroundColor:`rgba(255, 0, 0, 0.1)`}}),E=f.define([{tag:a.keyword,color:`#0000ff`},{tag:a.string,color:`#a31515`},{tag:a.comment,color:`#008000`},{tag:a.number,color:`#098658`},{tag:a.operator,color:`#1e1e1e`},{tag:a.punctuation,color:`#1e1e1e`},{tag:a.variableName,color:`#001080`},{tag:a.bracket,color:`#af00db`}]),D=n.line({class:`cm-errorLine`}),O=(e,t)=>{if(!e||e<1||e>t.lines)return i.decorations.of(n.none);let r=t.line(e);return i.decorations.of(n.set([D.range(r.from)]))},k=e=>e===`dark`?[C,t(w)]:[T,t(E)],A=({value:e,onChange:t,onKeyboardSubmit:n,placeholder:a,theme:c,errorLine:f})=>{let p=(0,y.useRef)(null),v=(0,y.useRef)(null),x=(0,y.useRef)(t),C=(0,y.useRef)(n),w=(0,y.useRef)(new d),T=(0,y.useRef)(new d);return x.current=t,C.current=n,(0,y.useEffect)(()=>{if(!p.current)return;let t=w.current,n=new i({state:l.create({doc:e,extensions:[u.of([{key:`Mod-Enter`,run:()=>(C.current?.(),!0)},{key:`Mod-Shift-z`,run:g,preventDefault:!0}]),i.updateListener.of(e=>{e.docChanged&&x.current(e.state.doc.toString())}),m(),u.of([..._,...h]),r(),i.lineWrapping,t.of(k(c)),T.current.of([]),S(),o({drawRangeCursor:!0}),...a?[s(a)]:[]]}),parent:p.current});return v.current=n,n.focus(),()=>{n.destroy(),v.current=null}},[]),(0,y.useEffect)(()=>{let e=v.current;e&&e.dispatch({effects:w.current.reconfigure(k(c))})},[c]),(0,y.useEffect)(()=>{let e=v.current;e&&e.dispatch({effects:T.current.reconfigure(O(f,e.state.doc))})},[f]),(0,y.useEffect)(()=>{let t=v.current;if(!t)return;let n=t.state.doc.toString();e!==n&&t.dispatch({changes:{from:0,to:n.length,insert:e}})},[e]),(0,b.jsx)(`div`,{ref:p,className:`ttd-dialog-input ttd-dialog-input--codemirror`})};export{A as default};
@@ -1 +0,0 @@
1
- .ui-button--action,.ui-toolbar-action{flex-shrink:0}.ui-button--action,.ui-action-button{min-height:var(--control-h-md);border-radius:var(--radius-lg-plus);font-size:var(--text-label);white-space:nowrap;padding:0 14px;font-weight:600}.ui-button--wide,.ui-action-button--wide{min-width:92px}.ui-button--surface,.ui-action-button--surface{background:var(--color-surface-offset)}.ui-button--surface:hover:not(:disabled),.ui-action-button--surface:hover:not(:disabled){background:var(--color-surface-dynamic)}.ui-button--pill,.ui-action-pill{flex-shrink:0;min-width:0}.ui-action-pill--surface{background:var(--color-surface-offset)}.ui-action-pill--surface:hover:not(:disabled){background:var(--color-surface-dynamic)}.ui-action-icon{flex-shrink:0}.ui-action-icon--surface{background:var(--surface-overlay-offset)}.ui-preview-action{border:1px solid var(--color-border);border-radius:var(--radius-xs);background:var(--color-surface-2);color:var(--color-text);box-shadow:inset 0 1px 0 oklch(from var(--color-text) l c h / .04);font-size:var(--text-xs);cursor:pointer;transition:background var(--transition-interactive), color var(--transition-interactive), border-color var(--transition-interactive);flex-shrink:0;justify-content:center;align-items:center;padding:2px 8px;display:inline-flex}.ui-preview-action:hover:not(:disabled){background:var(--color-surface-offset);border-color:oklch(from var(--color-border) calc(l + .08) c h)}.ui-preview-action:disabled{opacity:.5;cursor:not-allowed}.ui-preview-action--icon-only{width:30px;min-width:30px;height:30px;padding:0}.ui-preview-action--icon-only svg{width:14px;height:14px;display:block}
@@ -1,8 +0,0 @@
1
- import"./chunk-SRAX5OIU-Bpn6XoyU.js";var e={paste:`لصق`,pasteAsPlaintext:`اللصق كنص عادي`,pasteCharts:`لصق الرسوم البيانية`,chartType_bar:``,chartType_line:``,chartType_radar:``,chartType_plaintext:``,selectAll:`تحديد الكل`,multiSelect:`إضافة عنصر للتحديد`,moveCanvas:`نقل لوح الرسم`,cut:`قص`,copy:`نسخ`,copyAsPng:`نسخ إلى الحافظة بصيغة PNG`,copyAsSvg:`نسخ إلى الحافظة بصيغة SVG`,copyText:`نسخ إلى الحافظة كنص`,copySource:`نسخ المصدر إلى الحافظة`,convertToCode:`تحويل إلى كود`,bringForward:`جلب للأمام`,sendToBack:`أرسل للخلف`,bringToFront:`أحضر للأمام`,sendBackward:`أرسل للخلف`,delete:`حذف`,copyStyles:`نسخ الأنماط`,pasteStyles:`لصق الأنماط`,stroke:`الخط`,changeStroke:`تغيير لون القلم`,background:`الخلفية`,changeBackground:`تغيير لون الخلفية`,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:`ألماسة (مخططة)`,arrowhead_crowfoot_many:`Crow's foot (many)`,arrowhead_crowfoot_one:`Crow's foot (one)`,arrowhead_crowfoot_one_or_many:`Crow's foot (one or many)`,arrowhead_cardinality_one:``,arrowhead_cardinality_many:``,arrowhead_cardinality_one_or_many:``,arrowhead_cardinality_exactly_one:``,arrowhead_cardinality_zero_or_one:``,arrowhead_cardinality_zero_or_many:``,more_options:`خيارات إضافية`,cardinality:``,arrowtypes:`نوع السهم`,arrowtype_sharp:`سهم حاد`,arrowtype_round:`سهم منحني`,arrowtype_elbowed:`سهم زاوي`,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:`لوحة الرسم`,clearCanvas:`مسح اللوحة`,layers:`الطبقات`,actions:`الإجراءات`,language:`اللغة`,liveCollaboration:`التعاون المباشر...`,duplicateSelection:`تكرار`,untitled:`غير معنون`,name:`الاسم`,yourName:`اسمك`,madeWithExcalidraw:`مصنوعة بواسطة Excalidraw`,group:`تحديد مجموعة`,ungroup:`إلغاء تحديد مجموعة`,collaborators:`المتعاونون`,toggleGrid:`تبديل الشبكة`,addToLibrary:`أضف إلى المكتبة`,removeFromLibrary:`حذف من المكتبة`,libraryLoadingMessage:`جارٍ تحميل المكتبة...`,libraries:`تصفح المكتبات`,loadingScene:`جارٍ تحميل المشهد…`,loadScene:`تحميل المشهد من ملف`,align:`محاذاة`,alignTop:`محاذاة إلى الأعلى`,alignBottom:`محاذاة إلى الأسفل`,alignLeft:`محاذاة إلى اليسار`,alignRight:`محاذاة إلى اليمين`,centerVertically:`توسيط عمودي`,centerHorizontally:`توسيط أفقي`,distributeHorizontally:`التوزيع الأفقي`,distributeVertically:`التوزيع عموديًا`,flipHorizontal:`قلب أفقي`,flipVertical:`قلب عمودي`,viewMode:`نمط العرض`,share:`مشاركة`,showStroke:`إظهار منتقي لون الخط`,showBackground:`إظهار منتقي لون الخلفية`,showFonts:`إظهار منتقي الخط`,toggleTheme:`تبديل الوضع الفاتح/الداكن`,theme:`السمة`,personalLib:`المكتبة الشخصية`,excalidrawLib:`مكتبتنا`,decreaseFontSize:`تصغير حجم الخط`,increaseFontSize:`تكبير حجم الخط`,unbindText:`فك ربط النص`,bindText:`ربط النص بالحاوية`,createContainerFromText:`نص مغلف في حاوية`,link:{edit:`تعديل الرابط`,editEmbed:`تعديل الرابط القابل للتضمين`,create:`إضافة رابط`,label:`رابط`,labelEmbed:`رابط وإدراج`,empty:`لم يتم تعيين رابط`,hint:`اكتب أو الصق الرابط هنا`,goToElement:`الانتقال إلى العنصر المستهدف`},lineEditor:{edit:`تحرير السطر`,editArrow:`تحرير السهم`},polygon:{breakPolygon:``,convertToPolygon:``},elementLock:{lock:`قفل`,unlock:`فتح`,lockAll:`قفل الكل`,unlockAll:`فتح الكل`},statusPublished:`نُشر`,sidebarLock:`إبقاء الشريط الجانبي مفتوح`,selectAllElementsInFrame:`تحديد جميع العناصر في الإطار`,removeAllElementsFromFrame:`إزالة جميع العناصر من الإطار`,eyeDropper:`اختيار اللون من القماش`,textToDiagram:`نص إلى رسم بياني`,prompt:`تعليمات`,followUs:`تابعنا`,discordChat:`دردشة ديسكورد`,zoomToFitViewport:`التكبير لتناسب العرض`,zoomToFitSelection:`تكبير للعنصر المحدد`,zoomToFit:`تكبير لتلائم جميع العناصر`,installPWA:`تثبيت Excalidraw محليًا (PWA)`,autoResize:`تمكين تغيير حجم النص تلقائيًا`,imageCropping:`قص الصورة`,unCroppedDimension:`الأبعاد غير المقصوصة`,copyElementLink:`نسخ رابط الكائن`,linkToElement:`رابط إلى الكائن`,wrapSelectionInFrame:`تغليف التحديد في إطار`,tab:``,shapeSwitch:``,preferences:``,preferences_toolLock:``,arrowBinding:``,midpointSnapping:``},t={title:`رابط إلى الكائن`,desc:`انقر على شكل على اللوحة أو الصق رابطًا.`,notFound:`لم يتم العثور على الكائن المرتبط على اللوحة.`},n={noItems:`لا توجد عناصر أضيفت بعد...`,hint_emptyLibrary:`حدد عنصر على القماش لإضافته هنا، أو تثبيت مكتبة من المستودع العام أدناه.`,hint_emptyPrivateLibrary:`حدد عنصر على القماش لإضافته هنا.`,search:{inputPlaceholder:``,heading:``,noResults:``,clearSearch:``}},r={title:`البحث على اللوحة`,noMatch:`لم يتم العثور على تطابقات...`,singleResult:`نتيجة`,multipleResults:`نتائج`,placeholder:`ابحث عن نص على اللوحة...`,frames:``,texts:``},i={clearReset:`إعادة تعيين اللوحة`,exportJSON:`صدر الملف`,exportImage:`تصدير الصورة...`,export:`حفظ إلى...`,copyToClipboard:`نسخ إلى الحافظة`,copyLink:`نسخ الرابط`,save:`احفظ للملف الحالي`,saveAs:`حفظ كـ`,load:`فتح`,getShareableLink:`احصل على رابط المشاركة`,close:`إغلاق`,selectLanguage:`اختر اللغة`,scrollBackToContent:`الرجوع إلى المحتوى`,zoomIn:`تكبير`,zoomOut:`تصغير`,resetZoom:`إعادة تعيين التكبير`,menu:`القائمة`,done:`تم`,edit:`تعديل`,undo:`تراجع`,redo:`إعادة تنفيذ`,resetLibrary:`إعادة ضبط المكتبة`,createNewRoom:`إنشاء غرفة جديدة`,fullScreen:`شاشة كاملة`,darkMode:`الوضع المظلم`,lightMode:`الوضع المضيء`,systemMode:`وضع النظام`,zenMode:`وضع التأمل`,objectsSnapMode:`التقاط إلى العناصر`,exitZenMode:`إلغاء وضع التأمل`,cancel:`إلغاء`,saveLibNames:``,clear:`مسح`,remove:`إزالة`,embed:`تبديل الإدراج`,publishLibrary:``,submit:`إرسال`,confirm:`تأكيد`,embeddableInteractionButton:`اضغط للتفاعل`},a={clearReset:`هذا سيُزيل كامل اللوحة. هل أنت متأكد؟`,couldNotCreateShareableLink:`تعذر إنشاء رابط المشاركة.`,couldNotCreateShareableLinkTooBig:`تعذر إنشاء رابط قابل للمشاركة: المشهد كبير جدًا`,couldNotLoadInvalidFile:`تعذر التحميل، الملف غير صالح`,importBackendFailed:`فشل الاستيراد من الخادم.`,cannotExportEmptyCanvas:`لا يمكن تصدير لوحة فارغة.`,couldNotCopyToClipboard:`تعذر النسخ إلى الحافظة.`,decryptFailed:`تعذر فك تشفير البيانات.`,uploadedSecurly:`تم تأمين التحميل بتشفير النهاية إلى النهاية، مما يعني أن خادم Excalidraw والأطراف الثالثة لا يمكنها قراءة المحتوى.`,loadSceneOverridePrompt:`تحميل الرسم الخارجي سيحل محل المحتوى الموجود لديك. هل ترغب في المتابعة؟`,collabStopOverridePrompt:`إيقاف الجلسة سيؤدي إلى الكتابة فوق رسومك السابقة المخزنة داخليًا. هل أنت متأكد؟
2
-
3
- (إذا كنت ترغب في الاحتفاظ برسمك المخزن داخليًا، أغلق علامة تبويب المتصفح بدلاً من ذلك.)`,errorAddingToLibrary:`تعذر إضافة العنصر إلى المكتبة`,errorRemovingFromLibrary:`تعذر إزالة العنصر من المكتبة`,confirmAddLibrary:`هذا سيضيف {{numShapes}} شكل إلى مكتبتك. هل أنت متأكد؟`,imageDoesNotContainScene:`يبدو أن هذه الصورة لا تحتوي على أي بيانات مشهد. هل قمت بتمكين تضمين المشهد أثناء التصدير؟`,cannotRestoreFromImage:`تعذر استعادة المشهد من ملف الصورة`,invalidSceneUrl:`تعذر استيراد المشهد من عنوان URL المتوفر. إما أنها مشوهة، أو لا تحتوي على بيانات Excalidraw JSON صالحة.`,resetLibrary:`هذا سيؤدي إلى مسح مكتبتك. هل أنت متأكد؟`,removeItemsFromsLibrary:`حذف {{count}} عنصر (عناصر) من المكتبة؟`,invalidEncryptionKey:`مفتاح التشفير يجب أن يكون من 22 حرفًا. التعاون المباشر معطل.`,collabOfflineWarning:`لا يوجد اتصال بالإنترنت.
4
- لن يتم حفظ التغييرات التي قمت بها!`,localStorageQuotaExceeded:``},o={unsupportedFileType:`نوع الملف غير مدعوم.`,imageInsertError:`تعذر إدراج الصورة. حاول مرة أخرى لاحقًا...`,fileTooBig:`الملف كبير جدًا. الحد الأقصى المسموح به للحجم هو {{maxSize}}.`,svgImageInsertError:`تعذر إدراج صورة SVG. يبدو أن ترميز SVG غير صحيح.`,failedToFetchImage:`فشل تحميل الصورة.`,cannotResolveCollabServer:`تعذر الاتصال بخادم التعاون. الرجاء إعادة تحميل الصفحة والمحاولة مرة أخرى.`,importLibraryError:`تعذر تحميل المكتبة`,saveLibraryError:`تعذر حفظ المكتبة. الرجاء حفظ المكتبة الخاصة بك في ملف محلي للتأكد من أنك لا تفقد التغييرات.`,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:`لا يمكن إضافة عناصر IFrame إلى المكتبة.`,image:`سيتم دعم إضافة صور إلى المكتبة قريبًا!`},asyncPasteFailedOnRead:`تعذر اللصق (تعذر القراءة من حافظة النظام).`,asyncPasteFailedOnParse:`تعذر اللصق.`,copyToSystemClipboardFailed:`تعذر النسخ إلى الحافظة.`},s={selection:`تحديد`,lasso:``,image:`إدراج صورة`,rectangle:`مستطيل`,diamond:`مضلع`,ellipse:`دائرة`,arrow:`سهم`,line:`خط`,freedraw:`رسم`,text:`نص`,library:`مكتبة`,lock:`الحفاظ على أداة التحديد نشطة بعد الرسم`,penMode:`وضع القلم - منع اللمس`,link:`إضافة/تحديث الرابط للشكل المحدد`,eraser:`ممحاة`,frame:`أداة الإطار`,magicframe:`Wireframe إلى كود`,embeddable:`تضمين ويب`,laser:`مؤشر ليزر`,hand:`يد (أداة الإزاحة)`,extraTools:`المزيد من الأدوات`,mermaidToExcalidraw:`من Mermaid إلى Excalidraw`,convertElementType:``},c={rectangle:`مستطيل`,diamond:`مضلع`,ellipse:`دائرة`,arrow:`سهم`,line:`خط`,freedraw:`رسم حر`,text:`نص`,image:`صورة`,group:`مجموعة`,frame:`إطار`,magicframe:`Wireframe إلى كود`,embeddable:`تضمين ويب`,selection:`تحديد`,iframe:`IFrame`},l={canvasActions:`إجراءات اللوحة`,selectedShapeActions:`إجراءات الشكل المحدد`,shapes:`الأشكال`},u={dismissSearch:``,canvasPanning:``,linearElement:`انقر لبدء نقاط متعددة، اسحب لخط واحد`,arrowTool:``,arrowBindModifiers:``,freeDraw:`انقر واسحب، أفرج عند الانتهاء`,text:`نصيحة: يمكنك أيضًا إضافة نص بالنقر المزدوج في أي مكان بأداة الاختيار`,embeddable:`اضغط مع السحب لإنشاء موقع ويب مضمّن`,text_selected:``,text_editing:``,linearElementMulti:``,lockAngle:``,resize:``,resizeImage:``,rotate:``,lineEditor_info:``,lineEditor_line_info:``,lineEditor_pointSelected:``,lineEditor_nothingSelected:``,publishLibrary:`نشر مكتبتك`,bindTextToElement:``,createFlowchart:``,deepBoxSelect:``,eraserRevert:``,firefox_clipboard_write:`يمكن على الأرجح تمكين هذه الميزة عن طريق تعيين علم "dom.events.asyncClipboard.clipboardItem" إلى "true". لتغيير أعلام المتصفح في Firefox، قم بزيارة صفحة "about:config".`,disableSnapping:``,enterCropEditor:``,leaveCropEditor:``},d={cannotShowPreview:`تعذر عرض المعاينة`,canvasTooBig:`قد تكون اللوحة كبيرة جدًا.`,canvasTooBigTip:`نصيحة: حاول تحريك العناصر البعيدة بشكل أقرب قليلاً.`},f={headingMain:`حدث خطأ. حاول <button>تحديث الصفحة</button>.`,clearCanvasMessage:`إذا لم تعمل إعادة التحميل، حاول مرة أخرى `,clearCanvasCaveat:`هذا سيؤدي إلى فقدان العمل`,trackedToSentry:`تم تتبع الخطأ في المعرف {{eventId}} على نظامنا.`,openIssueMessage:`حرصنا على عدم إضافة معلومات المشهد في بلاغ الخطأ. في حال كون مشهدك لا يحمل أي معلومات خاصة، نرجو المتابعة على <button>نظام تتبع الأخطاء</button>. نرجو إضافة المعلومات أدناه بنسخها ولصقها في محتوى البلاغ على GitHub.`,sceneContent:`محتوى المشهد:`},p={or:`أو`},m={desc_intro:`ادعُ الأشخاص للتعاون في الرسم الخاص بك.`,desc_privacy:`لا تقلق، الجلسة مشفرة من النهاية إلى النهاية وخصوصية تمامًا. حتى خادمنا لا يستطيع رؤية ما ترسمه.`,button_startSession:`بدء الجلسة`,button_stopSession:`إيقاف الجلسة`,desc_inProgressIntro:`تجري الآن جلسة تعاون مباشرة.`,desc_shareLink:`شارك هذا الرابط مع أي شخص تريده أن يشاركك الجلسة:`,desc_exitSession:`إيقاف الجلسة سيؤدي إلى قطع الاتصال الخاص بك من الغرفة، ولكن ستتمكن من مواصلة العمل مع المشهد محليًا. لاحظ أن هذا لن يؤثر على الأشخاص الآخرين، وسيظلون قادرين على التعاون في إصدارهم.`,shareTitle:`الانضمام إلى جلسة تعاون مباشرة على Excalidraw`},h={title:`خطأ`},g={title:``,defaultMessage:``},_={disk_title:`حفظ الملف على الجهاز`,disk_details:`تصدير بيانات المشهد إلى ملف يمكنك الاستيراد منه لاحقًا.`,disk_button:`حفظ إلى ملف`,link_title:`رابط قابل للمشاركة`,link_details:`تصدير الملف للمشاهدة فقط.`,link_button:`تصدير كرابط`,excalidrawplus_description:`حفظ المشهد إلى مساحة العمل +Excalidraw الخاصة بك.`,excalidrawplus_button:`تصدير`,excalidrawplus_exportError:`تعذر التص несп في الوقت الحالي إلى +Excalidraw...`},v={blog:`اقرأ مدونتنا`,click:`انقر`,deepSelect:`تحديد عميق`,deepBoxSelect:`تحديد عميق داخل المربع، ومنع السحب`,createFlowchart:`إنشاء مخطط تدفق من عنصر عام`,navigateFlowchart:`التنقل في مخطط تدفق`,curvedArrow:`سهم منحني`,curvedLine:`خط منحني`,documentation:`دليل الاستخدام`,doubleClick:`انقر مرتين`,drag:`اسحب`,editor:`المحرر`,editLineArrowPoints:`تحرير نقاط السطر/السهم`,editText:`تعديل النص / إضافة تسمية`,github:`عثرت على مشكلة؟ أرسل`,howto:`اتبع التعليمات`,or:`أو`,preventBinding:`منع ارتباط السهم`,tools:`الأدوات`,shortcuts:`اختصارات لوحة المفاتيح`,textFinish:`إنهاء التعديل (محرر النص)`,textNewLine:`إضافة سطر جديد (محرر النص)`,title:`المساعدة`,view:`عرض`,zoomToFit:`تكبير للملائمة`,zoomToSelection:`تكبير للعنصر المحدد`,toggleElementLock:`قفل/فتح المحدد`,movePageUpDown:`نقل الصفحة أعلى/أسفل`,movePageLeftRight:`نقل الصفحة يسار/يمين`,cropStart:`بدء قص الصورة`,cropFinish:`إنهاء قص الصورة`},y={title:`مسح اللوحة`},b={title:`نشر المكتبة`,itemName:`اسم العنصر`,authorName:`اسم المؤلف`,githubUsername:`اسم المستخدم في GitHub`,twitterUsername:`اسم المستخدم في تويتر`,libraryName:`اسم المكتبة`,libraryDesc:`وصف المكتبة`,website:`الموقع`,placeholder:{authorName:`اسمك أو اسم المستخدم`,libraryName:`اسم مكتبتك`,libraryDesc:`وصف مكتبتك لمساعدة الناس على فهم استخدامها`,githubHandle:`معرف GitHub (اختياري)، حتى تتمكن من تحرير المكتبة عند إرسالها للمراجعة`,twitterHandle:`اسم مستخدم تويتر (اختياري)، حتى نعرف من الذي سيتم الإشارة إليه عند الترويج عبر تويتر`,website:`رابط إلى موقعك الشخصي أو مكان آخر (اختياري)`},errors:{required:`مطلوب`,website:`أدخل عنوان URL صالح`},noteDescription:`تقديم مكتبتك لتضمينها في مستودع المكتبة العامة <link></link> ليستخدمها الآخرون في رسوماتهم.`,noteGuidelines:`تحتاج المكتبة إلى الموافقة أولاً. يرجى قراءة <link>المعايير</link> قبل تقديمها. ستحتاج إلى حساب GitHub للتواصل وإجراء التغييرات عند الطلب، ولكنه ليس مطلوبًا بشكل صارم.`,noteLicense:`تقديمك يعني موافقتك على نشر المكتبة المقدمة تحت <link>ترخيص MIT</link>، مما يعني أن لأي شخص الحق في استخدامها دون قيود.`,noteItems:`يجب أن يكون لكل عنصر مكتبة اسم خاص به ليكون قابلًا للتصفية. سيتم تضمين عناصر المكتبة التالية:`,atleastOneLibItem:`يرجى تحديد عنصر مكتبة واحد على الأقل للبدء`,republishWarning:`ملاحظة: بعض العناصر المحددة معينة على أنها نُشرت أو قُدمت من قبل. يجب عليك فقط إعادة إرسال العناصر عند تحديث مكتبة موجودة أو إرسالها.`},x={title:`تم إرسال المكتبة`,content:`شكرًا لك {{authorName}}. لقد تم إرسال مكتبتك للمراجعة. يمكنك تتبع الحالة`},S={resetLibrary:`إعادة ضبط المكتبة`,removeItemsFromLib:`إزالة العناصر المحددة من المكتبة`},C={header:`تصدير الصورة`,label:{withBackground:`مع الخلفية`,onlySelected:`المحدد فقط`,darkMode:`الوضع الداكن`,embedScene:`تضمين المشهد`,scale:`المقياس`,padding:`الهوامش`},tooltip:{embedScene:`سيتم حفظ بيانات المشهد في ملف PNG/SVG المصدر بحيث يمكن استعادة المشهد منه.
5
- سيزيد هذا من حجم الملف المصدر.`},title:{exportToPng:`تصدير بصيغة PNG`,exportToSvg:`تصدير بصيغة SVG`,copyPngToClipboard:`نسخ الـ PNG إلى الحافظة`},button:{exportToPng:`PNG`,exportToSvg:`SVG`,copyPngToClipboard:`نسخ إلى الحافظة`}},w={tooltip:`رسوماتك مشفرة من النهاية إلى النهاية، لذا لا يمكن لخوادم Excalidraw رؤيتها أبدًا.`,link:`مشاركة المدونة حول التشفير من النهاية إلى النهاية في Excalidraw`},T={angle:`الزاوية`,shapes:`الأشكال`,height:`الارتفاع`,scene:`المشهد`,selected:`المحدد`,storage:`التخزين`,fullTitle:`خصائص اللوحة والأشكال`,title:`الخصائص`,generalStats:`عام`,elementProperties:`خصائص الشكل`,total:`المجموع`,version:`الإصدار`,versionCopy:`انقر للنسخ`,versionNotAvailable:`الإصدار غير متوفر`,width:`العرض`},E={addedToLibrary:`تمت الإضافة إلى المكتبة!`,copyStyles:`تم نسخ الأنماط.`,copyToClipboard:`تم النسخ إلى الحافظة.`,copyToClipboardAsPng:`تم نسخ {{exportSelection}} إلى الحافظة بصيغة PNG
6
- ({{exportColorScheme}})`,copyToClipboardAsSvg:`تم نسخ {{exportSelection}} إلى الحافظة بصيغة SVG
7
- ({{exportColorScheme}})`,fileSaved:`تم حفظ الملف.`,fileSavedToFilename:`تم الحفظ باسم {filename}`,canvas:`لوحة الرسم`,selection:`العنصر المحدد`,pasteAsSingleElement:`استخدم {{shortcut}} للصق كعنصر واحد،
8
- أو لصق في محرر نص موجود`,unableToEmbed:`تضمين هذا الرابط غير مسموح حاليًا. افتح بلاغًا على GitHub لطلب إدراج عنوان URL في القائمة البيضاء`,unrecognizedLinkFormat:`الرابط الذي أدرجته لا يتطابق مع التنسيق المتوقع. الرجاء محاولة لصق النص 'المضمن' المُزوَد من موقع المصدر`,elementLinkCopied:`تم نسخ الرابط إلى الحافظة`},D={transparent:`شفاف`,black:`أسود`,white:`أبيض`,red:`أحمر`,pink:`وردي`,grape:`عنبي`,violet:`بنفسجي`,gray:`رمادي`,blue:`أزرق`,cyan:`سماوي`,teal:`أزرق مخضر`,green:`أخضر`,yellow:`أصفر`,orange:`برتقالي`,bronze:`برونزي`},O={app:{center_heading:``,center_heading_line2:``,center_heading_line3:``,center_heading_plus:`هل تريد الانتقال إلى Excalidraw+ بدلاً من ذلك؟`,menuHint:`التصدير، التفضيلات، اللغات...`},defaults:{menuHint:`التصدير، التفضيلات، وغيرها...`,center_heading:`الرسم البياني التصويري، ببساطة.`,toolbarHint:`اختر أداة وابدأ الرسم!`,helpHint:`الاختصارات والمساعدة`}},k={color:``,mostUsedCustomColors:`الألوان المخصصة الأكثر استخدامًا`,colors:`الألوان`,shades:`الدرجات`,hexCode:`رمز Hex`,noShades:`لا تتوفر درجات لهذا اللون`},A={action:{exportToImage:{title:`تصدير كصورة`,button:`تصدير كصورة`,description:`تصدير بيانات المشهد إلى ملف يمكنك الاستيراد منه لاحقًا.`},saveToDisk:{title:`حفظ الملف على الجهاز`,button:`حفظ الملف على الجهاز`,description:`تصدير بيانات المشهد إلى ملف يمكنك الاستيراد منه لاحقًا.`},excalidrawPlus:{title:`Excalidraw+`,button:`تصدير إلى Excalidraw+`,description:`حفظ المشهد إلى مساحة العمل +Excalidraw الخاصة بك.`}},modal:{loadFromFile:{title:`تحميل من ملف`,button:`تحميل من ملف`,description:`سيتم التحميل من الملف <bold>استبدال المحتوى الموجود</bold>.<br></br>يمكنك النسخ الاحتياطي لرسمك أولاً باستخدام أحد الخيارات أدناه.`},shareableLink:{title:`تحميل من رابط`,button:`استبدال محتواي`,description:`سيتسبب تحميل رسمة خارجية <bold>باستبدال محتواك الموجود حاليًا</bold>.<br></br>بإمكانك إجراء النسخ الاحتياطي لرسمتك الحالية باستخدام أحد الخيارات أدناه.`}}},j={title:`Mermaid إلى Excalidraw`,button:`إدراج`,description:``,syntax:`صيغة Mermaid`,preview:`معاينة`,label:``,inputPlaceholder:``,autoFixAvailable:``},M={error:``},N={inputPlaceholder:``,inputPlaceholderWithMessages:``,generating:``,rateLimitRemaining:``,role:{user:``,assistant:``,system:``},aiBeta:``,label:``,menu:``,newChat:``,deleteChat:``,deleteMessage:``,viewAsMermaid:``,placeholder:{title:``,description:``,hint:``},preview:``,insert:``,retry:``,errors:{promptTooShort:``,promptTooLong:``,generationFailed:``,invalidDiagram:``,fixInMermaid:``,aiRepair:``,requestAborted:``,requestFailed:``,mermaidParseError:``},rateLimit:{messageLimit:``,generalRateLimit:``,messageLimitInputPlaceholder:``},upsellBtnLabel:``},P={placeholder:`بحث سريع`},F={badge:{old:`قديم`},sceneFonts:`في هذا المشهد`,availableFonts:`الخطوط المتوفرة`,empty:`لم يتم العثور على خطوط`},I={empty:`لم يتم العثور على مستخدمين`,hint:{text:`انقر على المستخدم للمتابعة`,followStatus:`أنت حاليًا تتابع هذا المستخدم`,inCall:`المستخدم في مكالمة صوتية`,micMuted:`ميكروفون المستخدم مكتم`,isSpeaking:`المستخدم يتحدث`}},L={title:`لوحة الأوامر`,shortcuts:{select:`اختر`,confirm:`تأكيد`,close:`إغلاق`},recents:`المستخدمة مؤخرًا`,search:{placeholder:`ابحث في القوائم، الأوامر، واكتشف الجواهر المخفية`,noMatch:`لا توجد أوامر مطابقة...`},itemNotAvailable:`الأمر غير متوفر...`,shortcutHint:`للحصول على لوحة الأوامر، استخدم {{shortcut}}`},R={ctrl:``,option:``,cmd:``,alt:``,escape:``,enter:``,shift:``,spacebar:``,delete:``,mmb:``},z={labels:e,elementLink:t,library:n,search:r,buttons:i,alerts:a,errors:o,toolBar:s,element:c,headings:l,hints:u,canvasError:d,errorSplash:f,shareDialog:p,roomDialog:m,errorDialog:h,progressDialog:g,exportDialog:_,helpDialog:v,clearCanvasDialog:y,publishDialog:b,publishSuccessDialog:x,confirmDialog:S,imageExportDialog:C,encrypted:w,stats:T,toast:E,colors:D,welcomeScreen:O,colorPicker:k,overwriteConfirm:A,mermaid:j,ttd:M,chat:N,quickSearch:P,fontList:F,userList:I,commandPalette:L,keys:R};export{a as alerts,i as buttons,d as canvasError,N as chat,y as clearCanvasDialog,k as colorPicker,D as colors,L as commandPalette,S as confirmDialog,z as default,c as element,t as elementLink,w as encrypted,h as errorDialog,f as errorSplash,o as errors,_ as exportDialog,F as fontList,l as headings,v as helpDialog,u as hints,C as imageExportDialog,R as keys,e as labels,n as library,j as mermaid,A as overwriteConfirm,g as progressDialog,b as publishDialog,x as publishSuccessDialog,P as quickSearch,m as roomDialog,r as search,p as shareDialog,T as stats,E as toast,s as toolBar,M as ttd,I as userList,O as welcomeScreen};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./path-BWPyau1x.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-qx0Iv9vM.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};