collabmd 0.1.43 → 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 (586) 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/en-GADW4C6J-DQ6zyCEM.js +1 -0
  129. package/dist/client/assets/{erDiagram-Q63AITRT-CoYS49kY.js → erDiagram-JOGREHBK-cYUpEKpf.js} +3 -3
  130. package/dist/client/assets/{erlang-DaB2Rkuy.js → erlang-BV0c4Hdn.js} +1 -1
  131. package/dist/client/assets/es-ES-TVVPWKV5-CpPKJXTM.js +12 -0
  132. package/dist/client/assets/eu-ES-CGBMFQDT-Bu3N2493.js +8 -0
  133. package/dist/client/assets/eventmodeling-45OFAUF4-CLEiVx5s.js +1 -0
  134. package/dist/client/assets/excalidraw-editor-BHu6k8d4.js +9 -0
  135. package/dist/client/assets/excalidraw-editor-Cr_184EF.css +1 -0
  136. package/dist/client/assets/excalidraw-embed-controller-y2fenN_g.js +1 -0
  137. package/dist/client/assets/excalidraw-scene-BvsQ6mLP.js +176 -0
  138. package/dist/client/assets/excalidrawEditor-4vFE--Uw.js +2 -0
  139. package/dist/client/assets/export-page-Cby8JzPO.js +39 -0
  140. package/dist/client/assets/exportDocument-CRHCfsdo.js +2 -0
  141. package/dist/client/assets/fa-IR-IE6XAPR4-BEvLCORD.js +9 -0
  142. package/dist/client/assets/{factor-D7LVTn2l.js → factor-LKH5gN8L.js} +1 -1
  143. package/dist/client/assets/fi-FI-P7TKNHRM-DI0q8iSX.js +6 -0
  144. package/dist/client/assets/{file-history-view-controller-CK3oHDCT.js → file-history-view-controller-BDjEV9xJ.js} +11 -11
  145. package/dist/client/assets/flowDiagram-UKHOOZJN-D0ypP0Ez.js +1 -0
  146. package/dist/client/assets/fr-FR-QI2XZNT7-y8kXd8LA.js +12 -0
  147. package/dist/client/assets/ganttDiagram-PKOTCBZU-BnM97BCT.js +292 -0
  148. package/dist/client/assets/{git-diff-view-controller-qorJ_Quo.js → git-diff-view-controller-DgdM1aqb.js} +24 -24
  149. package/dist/client/assets/git-panel-controller-BDTR2HVp.js +207 -0
  150. package/dist/client/assets/gitGraph-TEB2WS4Q-CZFBqwW-.js +1 -0
  151. package/dist/client/assets/{gitGraphDiagram-IHSO6WYX-x3NetpXU.js → gitGraphDiagram-DS77QQ5N-BQpQhjuN.js} +3 -3
  152. package/dist/client/assets/gl-ES-TLYCNOZZ-Br-Fhff-.js +6 -0
  153. package/dist/client/assets/groovy-CUpZ7dEl.js +1 -0
  154. package/dist/client/assets/he-IL-ZX43XLGP-qKQq6V9X.js +9 -0
  155. package/dist/client/assets/hi-IN-UTYRMTUF-DOUcwrDO.js +3 -0
  156. package/dist/client/assets/hu-HU-AJOSEBW6-FqTyvHlD.js +3 -0
  157. package/dist/client/assets/id-ID-ETLTVG6C-CQqh3CLS.js +8 -0
  158. package/dist/client/assets/image-XGD7JQR6-XDUWHRpO.js +1 -0
  159. package/dist/client/assets/image-blob-reduce.esm-Dj7YBvMv.js +2 -0
  160. package/dist/client/assets/index-7xOyXDhP.css +1 -0
  161. package/dist/client/assets/index-Bz1KuQ6y.js +2 -0
  162. package/dist/client/assets/info-DKCQHKI2--1InqQeT.js +1 -0
  163. package/dist/client/assets/{infoDiagram-FWYZ7A6U-DyfGrH8z.js → infoDiagram-6WML65LV-DYB8HCDQ.js} +1 -1
  164. package/dist/client/assets/init-C-OQMol4.js +1 -0
  165. package/dist/client/assets/{ishikawaDiagram-FXEZZL3T-BOts527_.js → ishikawaDiagram-WSZJBQD7-Coz_P3t6.js} +2 -2
  166. package/dist/client/assets/it-IT-B4B6TP6L-V-yK3SZz.js +12 -0
  167. package/dist/client/assets/ja-JP-IYKVURR5-BQKBXRpX.js +12 -0
  168. package/dist/client/assets/javascript-BWjar7HY.js +1 -0
  169. package/dist/client/assets/javascript-D-FtdkNC.js +1 -0
  170. package/dist/client/assets/{journeyDiagram-5HDEW3XC-DF37OVrZ.js → journeyDiagram-NVQOT4AX-B6edChce.js} +3 -3
  171. package/dist/client/assets/{react-lCSYwAWP.js → jsx-runtime-BpzPEenQ.js} +1 -1
  172. package/dist/client/assets/kaa-SE2BUIKX-CZ5kfwPg.js +1 -0
  173. package/dist/client/assets/kab-KAB-Y3GLKXLR-Do7GWfuN.js +4 -0
  174. package/dist/client/assets/{kanban-definition-HUTT4EX6-nCjbm1T6.js → kanban-definition-27J2QSJJ-BFd9-cLc.js} +3 -3
  175. package/dist/client/assets/{katex-B7rAX3Vi.js → katex-CXMH3UgJ.js} +3 -3
  176. package/dist/client/assets/kk-KZ-ABWUFVOH-BpqVciQz.js +1 -0
  177. package/dist/client/assets/{km-KH-PBSJLZ2M-Bh1DsarT.js → km-KH-PCWDKPHP-DSmy5shj.js} +3 -3
  178. package/dist/client/assets/ko-KR-7JQDXKGM-N42lep78.js +5 -0
  179. package/dist/client/assets/ku-TR-NAH2Q5B7-K8LLl9fk.js +6 -0
  180. package/dist/client/assets/{line-h44YiLOQ.js → line-B_S_S8kV.js} +1 -1
  181. package/dist/client/assets/linear-n-3HSMUF.js +1 -0
  182. package/dist/client/assets/lt-LT-VQFYRSNQ-BmOd0ALn.js +3 -0
  183. package/dist/client/assets/lv-LV-T62VSYUM-B22WdPhp.js +4 -0
  184. package/dist/client/assets/main-Ci07m9oP.js +152 -0
  185. package/dist/client/assets/{mermaid-parser.core-ygm3cZ_w.js → mermaid-parser.core-CUVdebAV.js} +2 -2
  186. package/dist/client/assets/mermaid.core-DN-lF51U.js +11 -0
  187. package/dist/client/assets/{mindmap-definition-LN4V7U3C-CTpHMYFE.js → mindmap-definition-FAOFIHXS-C9PQ38Al.js} +3 -3
  188. package/dist/client/assets/mr-IN-V4FHLCJE-XX069tpm.js +9 -0
  189. package/dist/client/assets/{mumps-CW_TBmxz.js → mumps-BSzj6Xyz.js} +1 -1
  190. package/dist/client/assets/my-MM-E3SQ6E54-cst_-5SB.js +1 -0
  191. package/dist/client/assets/nb-NO-MLNOFN5H-Bu2URWko.js +8 -0
  192. package/dist/client/assets/nl-NL-D5L3ZV4M-BqrV0btt.js +13 -0
  193. package/dist/client/assets/nn-NO-NNHDGPKB-DK-xZaWM.js +4 -0
  194. package/dist/client/assets/{nsis-AQ_alPln.js → nsis-CfSuhXs5.js} +1 -1
  195. package/dist/client/assets/{ntriples-d28e9m0E.js → ntriples-B9h1VB_g.js} +1 -1
  196. package/dist/client/assets/oc-FR-DWCRF55G-BZ5Po5R6.js +4 -0
  197. package/dist/client/assets/{ordinal-hYBb2elL.js → ordinal-BDEzSJ7C.js} +1 -1
  198. package/dist/client/assets/pa-IN-3JSAY44M-BZQSjKrS.js +4 -0
  199. package/dist/client/assets/packet-7NZHBO7P-BGMXB0XL.js +1 -0
  200. package/dist/client/assets/path-fybaL0A-.js +1 -0
  201. package/dist/client/assets/{pegDiagram-2B236MQR-Bq9qITsk.js → pegDiagram-VL7TDLO6-BMZUrSaU.js} +1 -1
  202. package/dist/client/assets/percentages-ETZPVQEE-DFxFqXgH.js +1 -0
  203. package/dist/client/assets/perl-BkSkiI9m.js +1 -0
  204. package/dist/client/assets/{pica-D0pwGKw7.js → pica-xkWDouSg.js} +2 -2
  205. package/dist/client/assets/pie-RZYD4A2V-DgYg3tCt.js +1 -0
  206. package/dist/client/assets/{pieDiagram-ENE6RG2P--ax2FUc8.js → pieDiagram-7S7Q4E2Y-h8kbCL9o.js} +2 -2
  207. package/dist/client/assets/{pl-PL-EERMMCTN-dIzrbxJt.js → pl-PL-ACURYKP3-qcEOSfCk.js} +4 -4
  208. package/dist/client/assets/{powershell-CzG71I4L.js → powershell-BcIto6Sf.js} +1 -1
  209. package/dist/client/assets/preview-diagram-utils-n_bbJA9V.js +1 -0
  210. package/dist/client/assets/preview-render-compiler-BSaQO_p3.js +35 -0
  211. package/dist/client/assets/preview-render-compiler-csGM5ZFz.js +1 -0
  212. package/dist/client/assets/preview-render-profile-BZzGSg6K.js +22 -0
  213. package/dist/client/assets/preview-render-worker-B42LWvrD.js +60 -0
  214. package/dist/client/assets/pt-BR-LOX7MLGD-DLueHSyZ.js +10 -0
  215. package/dist/client/assets/pt-PT-CZ2U2RFQ-BJ-GAEm6.js +12 -0
  216. package/dist/client/assets/{pug-Ck0YjsGM.js → pug-Wky5Dnfy.js} +1 -1
  217. package/dist/client/assets/puppet-BZyAS7I4.js +1 -0
  218. package/dist/client/assets/python-B_1Jd8HM.js +1 -0
  219. package/dist/client/assets/{quadrantDiagram-ABIIQ3AL-f0PUv7DH.js → quadrantDiagram-CIZ2JOQS-CkElyfMi.js} +2 -2
  220. package/dist/client/assets/{quick-switcher-controller-CVRUPEKp.js → quick-switcher-controller-CoiYvllm.js} +4 -4
  221. package/dist/client/assets/r-CxDmU1I4.js +1 -0
  222. package/dist/client/assets/radar-I7S5WNFK-Ag-zp_Rq.js +1 -0
  223. package/dist/client/assets/railroad-3IZDKUUU-aibJDIDV.js +1 -0
  224. package/dist/client/assets/railroad-abnf-AHOZXSZD-BBMEuvIl.js +1 -0
  225. package/dist/client/assets/railroad-ebnf-EBAXGLYW-Be1nseej.js +1 -0
  226. package/dist/client/assets/railroad-peg-LSFZ7HO6-DIvD-Eyb.js +1 -0
  227. package/dist/client/assets/{railroadDiagram-RFXS5EU6-CZD_9g-4.js → railroadDiagram-AXF67PYL-c75gnikD.js} +1 -1
  228. package/dist/client/assets/{requirementDiagram-TGXJPOKE-C4Jwr3TE.js → requirementDiagram-LRYGKXZP-mNxKLuHS.js} +2 -2
  229. package/dist/client/assets/ro-RO-2HECL2X6-CJUvKAf0.js +12 -0
  230. package/dist/client/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
  231. package/dist/client/assets/room-CDrmIdDt.js +1 -0
  232. package/dist/client/assets/{rough.esm-CSKSodPl.js → rough.esm-Dy-Kn_BL.js} +1 -1
  233. package/dist/client/assets/ru-RU-HAYNXO46-BWSlvTrt.js +10 -0
  234. package/dist/client/assets/ruby-BjXV7-Qa.js +1 -0
  235. package/dist/client/assets/runtime-config-loader-BHGniHP5.js +1 -0
  236. package/dist/client/assets/{sankeyDiagram-HTMAVEWB-B2B2mdB6.js → sankeyDiagram-W5VNT64P-0OhplksI.js} +2 -2
  237. package/dist/client/assets/{scheme-tChLYBuY.js → scheme-D9qYN0V5.js} +1 -1
  238. package/dist/client/assets/{segmented-control-DhUkW6ro.js → segmented-control-DJrHSz8M.js} +1 -1
  239. package/dist/client/assets/sequenceDiagram-SI44F4Z6-BJ_yAocC.js +162 -0
  240. package/dist/client/assets/{shell-Du5Qg9im.js → shell-DwuoZtxw.js} +1 -1
  241. package/dist/client/assets/si-LK-W5KNS4H6-DGGCsn7k.js +1 -0
  242. package/dist/client/assets/{simple-mode-DRpGK0lJ.js → simple-mode-DXiLM1-G.js} +1 -1
  243. package/dist/client/assets/sk-SK-7K2CFGDV-CY4uTYgQ.js +7 -0
  244. package/dist/client/assets/sl-SI-OXV2QZWW-2-weqaBY.js +6 -0
  245. package/dist/client/assets/sql-DuQMFDvy.js +1 -0
  246. package/dist/client/assets/src-oBChb5qS.js +1 -0
  247. package/dist/client/assets/{stateDiagram-2N3HPSRC-B1niwAq-.js → stateDiagram-OKZ733FA-Cc83O86s.js} +1 -1
  248. package/dist/client/assets/stateDiagram-v2-UEYNNEHI-B1-BufUk.js +1 -0
  249. package/dist/client/assets/{stex-sDrdk2BW.js → stex-DNzd62Q_.js} +1 -1
  250. package/dist/client/assets/{stylus-DLLZ8dgm.js → stylus-BOVgKnng.js} +1 -1
  251. package/dist/client/assets/subset-shared.chunk-BXlA-9CO.js +1 -0
  252. package/dist/client/assets/{subset-worker.chunk-Cuw2UvhD.js → subset-worker.chunk-CoaGye2U.js} +1 -1
  253. package/dist/client/assets/sv-SE-JTOBZRGL-9-IUtVkO.js +12 -0
  254. package/dist/client/assets/swimlanes-SLNWSIFB-oVTWEJIj.js +2 -0
  255. package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-C5OTVwEu.js +8 -0
  256. package/dist/client/assets/ta-IN-KFAVKXGT-gHO6Q_DH.js +6 -0
  257. package/dist/client/assets/{textile-CyzeGT9J.js → textile-C4jVoHG1.js} +1 -1
  258. package/dist/client/assets/th-TH-VDMSCPDL-BvJuw6PJ.js +1 -0
  259. package/dist/client/assets/tiki-AK6FwT8q.js +1 -0
  260. package/dist/client/assets/timeline-definition-Z64GVDOM-BWDAGTHz.js +120 -0
  261. package/dist/client/assets/toml-BPTmHmyx.js +1 -0
  262. package/dist/client/assets/tr-TR-CEZ6GX45-CG6UU3Su.js +4 -0
  263. package/dist/client/assets/treeView-QDETBFTQ-uHZ-3Fz8.js +1 -0
  264. package/dist/client/assets/treemap-6X3UGDF4-BnUKyy3l.js +1 -0
  265. package/dist/client/assets/{ttcn-BePYh-hG.js → ttcn-PPSTk1ow.js} +1 -1
  266. package/dist/client/assets/{ttcn-cfg-CY0aot7Q.js → ttcn-cfg-2b4Gb5sE.js} +1 -1
  267. package/dist/client/assets/uk-UA-Q3H3OXQC-CSuIg_DY.js +6 -0
  268. package/dist/client/assets/uz-UZ-NGCSWWPX-mom7rxSP.js +1 -0
  269. package/dist/client/assets/vault-api-client-sLB2bo56.js +1 -0
  270. package/dist/client/assets/vault-paths-CVkuh0j-.js +5 -0
  271. package/dist/client/assets/vault-utils-wdQ0RNR9.js +1 -0
  272. package/dist/client/assets/{vennDiagram-L72KCM5P-DPQ9kbN2.js → vennDiagram-T6HMQDX7-LOSsnlMB.js} +3 -3
  273. package/dist/client/assets/{verilog-BKSQ5RMB.js → verilog-7LoJAqYT.js} +1 -1
  274. package/dist/client/assets/{vhdl-CBDDcIJ_.js → vhdl-kS471soi.js} +1 -1
  275. package/dist/client/assets/vi-VN-P3NDEVPS-BB0Fu9ck.js +7 -0
  276. package/dist/client/assets/wardley-OPB4EBWU-Da7TLC2F.js +1 -0
  277. package/dist/client/assets/{wardleyDiagram-EHGQE667-5VW6_Csg.js → wardleyDiagram-T6FBY63Y-BxII3foY.js} +35 -35
  278. package/dist/client/assets/{xquery-Cda5K8Gy.js → xquery-BKJx4mf9.js} +1 -1
  279. package/dist/client/assets/{xychartDiagram-FW5EYKEG-Bj0UwltS.js → xychartDiagram-ELKLHX3M-B-pTEjju.js} +4 -4
  280. package/dist/client/assets/yjs-provider-reset-guard-Cox4nxwu.js +4 -0
  281. package/dist/client/assets/z80-Co3PbHdE.js +1 -0
  282. package/dist/client/assets/zh-CN-SS3O57GA-Bj8wsiMe.js +11 -0
  283. package/dist/client/assets/zh-HK-LWJT3VCF-DOTquTCh.js +1 -0
  284. package/dist/client/assets/zh-TW-VJXC72RT-B48PRo-l.js +13 -0
  285. package/dist/client/drawio-editor.html +2 -2
  286. package/dist/client/excalidraw-editor.html +2 -2
  287. package/dist/client/export-document.html +2 -2
  288. package/dist/client/index.html +655 -4
  289. package/package.json +19 -20
  290. package/src/client/app/index.html +652 -1
  291. package/src/client/app/main-entry.js +0 -2
  292. package/src/client/application/app-shell/git-feature.js +3 -8
  293. package/src/client/application/app-shell/ui-feature-shell.js +13 -0
  294. package/src/client/application/app-shell/ui-feature-toolbar.js +1 -8
  295. package/src/client/application/diagram-chrome.js +126 -8
  296. package/src/client/application/diagram-preview-export.js +6 -24
  297. package/src/client/application/diagram-preview-hydrator.js +217 -22
  298. package/src/client/application/mermaid-preview-hydrator.js +46 -14
  299. package/src/client/application/plantuml-preview-hydrator.js +34 -10
  300. package/src/client/application/preview-diagram-utils.js +71 -62
  301. package/src/client/application/preview-render-compiler.js +4 -2
  302. package/src/client/application/preview-render-profile.js +9 -1
  303. package/src/client/application/preview-renderer.js +30 -164
  304. package/src/client/application/wiki-link-file-controller.js +2 -2
  305. package/src/client/application/workspace-coordinator.js +76 -54
  306. package/src/client/application/workspace-route-controller.js +31 -1
  307. package/src/client/bootstrap/collabmd-app-shell.js +180 -149
  308. package/src/client/bootstrap/lazy-controller-feature.js +4 -5
  309. package/src/client/browser-utils.js +77 -0
  310. package/src/client/domain/excalidraw-api-scene-sync.js +7 -3
  311. package/src/client/domain/excalidraw-collaboration.js +3 -7
  312. package/src/client/domain/excalidraw-diagnostics.js +111 -0
  313. package/src/client/domain/excalidraw-scene.js +2 -3
  314. package/src/client/domain/room.js +2 -2
  315. package/src/client/domain/vault-paths.js +14 -0
  316. package/src/client/domain/vault-utils.js +0 -64
  317. package/src/client/excalidraw-editor.js +250 -44
  318. package/src/client/export/export-pipeline.js +6 -9
  319. package/src/client/infrastructure/api-client-utils.js +23 -0
  320. package/src/client/infrastructure/app-version-monitor.js +0 -1
  321. package/src/client/infrastructure/backlinks-api-client.js +3 -5
  322. package/src/client/infrastructure/browser-notification-port.js +6 -10
  323. package/src/client/infrastructure/browser-preferences-port.js +25 -40
  324. package/src/client/infrastructure/excalidraw-room-client.js +115 -16
  325. package/src/client/infrastructure/git-api-client.js +9 -32
  326. package/src/client/infrastructure/plantuml-api-client.js +3 -5
  327. package/src/client/infrastructure/vault-api-client.js +6 -56
  328. package/src/client/presentation/bases-preview-controller.js +6 -22
  329. package/src/client/presentation/comment-overview-controller.js +3 -15
  330. package/src/client/presentation/comment-ui/comment-ui-card.js +21 -4
  331. package/src/client/presentation/comment-ui/comment-ui-layout.js +54 -0
  332. package/src/client/presentation/comment-ui/comment-ui-render.js +1 -0
  333. package/src/client/presentation/comment-ui/comment-ui-shared.js +86 -5
  334. package/src/client/presentation/comment-ui/comment-ui-state.js +3 -0
  335. package/src/client/presentation/comment-ui-controller.js +17 -1
  336. package/src/client/presentation/components/ui/button.js +0 -25
  337. package/src/client/presentation/components/ui/class-names.js +8 -27
  338. package/src/client/presentation/drawio-embed-controller.js +8 -33
  339. package/src/client/presentation/excalidraw-embed-controller.js +50 -43
  340. package/src/client/presentation/file-action-controller.js +8 -25
  341. package/src/client/presentation/file-explorer-controller.js +1 -2
  342. package/src/client/presentation/file-explorer-view.js +4 -17
  343. package/src/client/presentation/file-history-view-controller.js +3 -12
  344. package/src/client/presentation/git-diff-view-controller.js +8 -17
  345. package/src/client/presentation/git-panel-controller.js +3 -12
  346. package/src/client/presentation/quick-switcher-controller.js +4 -7
  347. package/src/client/presentation/scroll-sync-controller.js +5 -30
  348. package/src/client/styles/features/comment-card.css +8 -0
  349. package/src/client/styles/features/comment-overlays.css +15 -0
  350. package/src/client/styles/features/diagram-preview.css +20 -0
  351. package/src/client/styles/style.css +25 -7
  352. package/src/client/styles/surfaces/excalidraw-editor.css +25 -0
  353. package/src/domain/excalidraw-room-codec.js +1 -9
  354. package/src/domain/vault-paths.js +41 -0
  355. package/src/server/config/env.js +1 -5
  356. package/src/server/domain/bases/base-expression-runtime.js +1 -46
  357. package/src/server/domain/collaboration/collaboration-document-store.js +12 -115
  358. package/src/server/domain/collaboration/collaboration-room.js +21 -10
  359. package/src/server/domain/markdown-reference-extractor.js +1 -46
  360. package/src/server/domain/workspace-state.js +0 -8
  361. package/src/server/infrastructure/git/git-service.js +10 -34
  362. package/src/server/infrastructure/git/history-service.js +51 -56
  363. package/src/server/infrastructure/git/parsers.js +42 -24
  364. package/src/server/infrastructure/git/responses.js +0 -23
  365. package/src/server/infrastructure/git/untracked-files.js +1 -1
  366. package/src/server/infrastructure/http/create-git-api-command-handler.js +7 -28
  367. package/src/server/infrastructure/http/create-git-api-query-handler.js +8 -24
  368. package/src/server/infrastructure/http/create-request-handler.js +37 -12
  369. package/src/server/infrastructure/http/create-vault-api-command-handler.js +17 -41
  370. package/src/server/infrastructure/http/create-vault-api-query-handler.js +7 -14
  371. package/src/server/infrastructure/http/http-request-helpers.js +23 -0
  372. package/src/server/infrastructure/http/http-response.js +13 -0
  373. package/src/server/infrastructure/persistence/vault-file-store.js +22 -60
  374. package/src/server/infrastructure/workspace/file-system-sync-service.js +3 -3
  375. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-Fb3TgxXK.js +0 -1
  376. package/dist/client/assets/actions-XO29hEzr.css +0 -1
  377. package/dist/client/assets/ar-SA-YLAB6A27-B9ogj_Jh.js +0 -8
  378. package/dist/client/assets/arc-DqK6O3qL.js +0 -1
  379. package/dist/client/assets/architecture-TIHT7OUA-BWqzHezU.js +0 -1
  380. package/dist/client/assets/architectureDiagram-ZJ3FMSHR-DL35gHTu.js +0 -36
  381. package/dist/client/assets/asciiarmor-qTkVPQu6.js +0 -1
  382. package/dist/client/assets/az-AZ-5JXPK2I2-C6Se5-4R.js +0 -1
  383. package/dist/client/assets/bases-preview-controller-CBHDzzot.js +0 -143
  384. package/dist/client/assets/bg-BG-NIQ2RVNG-xrf33IaO.js +0 -5
  385. package/dist/client/assets/bn-BD-BN65R3DE-YVZWNN-c.js +0 -3
  386. package/dist/client/assets/bn-IN-2YT4KVKB-YVZWNN-c.js +0 -3
  387. package/dist/client/assets/button-2ZnWQkWV.js +0 -1
  388. package/dist/client/assets/c4Diagram-LMCZKHZV-al3Umu1D.js +0 -10
  389. package/dist/client/assets/ca-ES-KSERGC3M-CoMtV4dM.js +0 -8
  390. package/dist/client/assets/channel-XzBGGMWh.js +0 -1
  391. package/dist/client/assets/chunk-52WLFC77-BjzXVnqm.js +0 -10
  392. package/dist/client/assets/chunk-6GK3VUBP-ChzWImvX.js +0 -41
  393. package/dist/client/assets/chunk-CJTDIR4C-DvUbqeGR.js +0 -1
  394. package/dist/client/assets/chunk-ICXQ74PX-DGYhuP6g.js +0 -2
  395. package/dist/client/assets/chunk-OGEWGWER-Xh5bvoYs.js +0 -1
  396. package/dist/client/assets/chunk-RYQCIY6F-Dtr3kkSR.js +0 -1
  397. package/dist/client/assets/chunk-VAUOI2AC-EcvKeBKU.js +0 -1
  398. package/dist/client/assets/chunk-WYO6CB5R-HgTPu1OL.js +0 -127
  399. package/dist/client/assets/classDiagram-OUVF2IWQ-vy5bnN3c.js +0 -1
  400. package/dist/client/assets/classDiagram-v2-EOCWNBFH-vy5bnN3c.js +0 -1
  401. package/dist/client/assets/clike-CVjTFI47.js +0 -1
  402. package/dist/client/assets/cmake-CyVbuzPu.js +0 -1
  403. package/dist/client/assets/coffeescript-B2pKbFk8.js +0 -1
  404. package/dist/client/assets/commonlisp-CcllspGY.js +0 -1
  405. package/dist/client/assets/controls-LYQrRFSF.css +0 -1
  406. package/dist/client/assets/cose-bilkent-JH36ORCC-ClqQrHIF.js +0 -1
  407. package/dist/client/assets/crystal-M5-qzICs.js +0 -1
  408. package/dist/client/assets/cs-CZ-EOMS3IHD-Bo0hDCLX.js +0 -7
  409. package/dist/client/assets/css-CYpP4FRV.js +0 -1
  410. package/dist/client/assets/cynefin-VYW2F7L2-4m18BxUG.js +0 -1
  411. package/dist/client/assets/cynefinDiagram-TSTJHNR4-BNlZcGFF.js +0 -62
  412. package/dist/client/assets/cytoscape.esm-CQFVGiJu.js +0 -321
  413. package/dist/client/assets/da-DK-AVL3DJQK-s5-TpkxN.js +0 -2
  414. package/dist/client/assets/dagre-dpRSp0QF.js +0 -1
  415. package/dist/client/assets/de-CH-M25HCZK4-B0r4rx6B.js +0 -7
  416. package/dist/client/assets/de-DE-BEN6XGXY-B0r4rx6B.js +0 -7
  417. package/dist/client/assets/defaultLocale-C8Fc0cco.js +0 -1
  418. package/dist/client/assets/diagram-WEI45ONY-C18MNAQv.js +0 -41
  419. package/dist/client/assets/dist-0x9D2TFD.js +0 -1
  420. package/dist/client/assets/dist-BA633xb4.js +0 -11
  421. package/dist/client/assets/dist-Bx-T__Lj.js +0 -1
  422. package/dist/client/assets/dist-ByYtm-FJ.js +0 -1
  423. package/dist/client/assets/dist-CCrwHjeP.js +0 -1
  424. package/dist/client/assets/dist-CHokDUN_.js +0 -1
  425. package/dist/client/assets/dist-CI1X-CJ2.js +0 -9
  426. package/dist/client/assets/dist-CPim1xdZ.js +0 -1
  427. package/dist/client/assets/dist-CZG184W2.js +0 -1
  428. package/dist/client/assets/dist-Cd1BXkVC.js +0 -1
  429. package/dist/client/assets/dist-CeEU6QwA.js +0 -2
  430. package/dist/client/assets/dist-DG2HpWvu.js +0 -1
  431. package/dist/client/assets/dist-DUj7Xwud.js +0 -13
  432. package/dist/client/assets/dist-DnbVQL2z.js +0 -1
  433. package/dist/client/assets/dist-QiKOmE2-.js +0 -1
  434. package/dist/client/assets/dist-du6QqIs42.js +0 -1
  435. package/dist/client/assets/dist-snK6kYA_.js +0 -1
  436. package/dist/client/assets/drawio-editor-Bpeofg5c.js +0 -9
  437. package/dist/client/assets/drawio-embed-controller-BtzURctK.js +0 -1
  438. package/dist/client/assets/drawioEditor-DOeuNmoO.js +0 -2
  439. package/dist/client/assets/editor-session-MbnP-AVK.js +0 -16
  440. package/dist/client/assets/el-GR-UBGIF2NW-DRoYAN8w.js +0 -7
  441. package/dist/client/assets/en-PCJ7LJZ2-1SKiH5y3.js +0 -1
  442. package/dist/client/assets/es-ES-SQEM5MNY-D5EtY06q.js +0 -7
  443. package/dist/client/assets/eu-ES-YG5N2JAG-CZ0xKIU4.js +0 -7
  444. package/dist/client/assets/eventmodeling-45OFAUF4-Dp0gpjhg.js +0 -1
  445. package/dist/client/assets/excalidraw-editor-CN3Wpa0D.css +0 -1
  446. package/dist/client/assets/excalidraw-editor-DV1u6p5J.js +0 -9
  447. package/dist/client/assets/excalidraw-embed-controller-BKx05cjZ.js +0 -1
  448. package/dist/client/assets/excalidraw-scene-qiXFUZvq.js +0 -176
  449. package/dist/client/assets/excalidrawEditor-C5Z0GfUw.js +0 -2
  450. package/dist/client/assets/export-page-CbIrJ_oK.js +0 -39
  451. package/dist/client/assets/exportDocument-6GQGZvBv.js +0 -2
  452. package/dist/client/assets/fa-IR-EVNM7MAJ-olht-LEH.js +0 -9
  453. package/dist/client/assets/fi-FI-MW7ZEZ64-D1PIXbLy.js +0 -6
  454. package/dist/client/assets/flowDiagram-23GEKE2U-DgaZtMXJ.js +0 -1
  455. package/dist/client/assets/fr-FR-Q7ZPXBDE-B0DjjyfT.js +0 -12
  456. package/dist/client/assets/ganttDiagram-NO4QXBWP-DaBgmYw5.js +0 -292
  457. package/dist/client/assets/git-panel-controller-CzgJWqbB.js +0 -207
  458. package/dist/client/assets/gitGraph-TEB2WS4Q-Do0SQOtM.js +0 -1
  459. package/dist/client/assets/gl-ES-O5B74VQL-DH5u_ADp.js +0 -6
  460. package/dist/client/assets/groovy-BC3IOsC8.js +0 -1
  461. package/dist/client/assets/he-IL-QGC2WXJA-BSBR1RcG.js +0 -8
  462. package/dist/client/assets/hi-IN-DEZ33NMQ-CorD0_d0.js +0 -3
  463. package/dist/client/assets/hu-HU-2ZPNVYSC-BlqNXhNG.js +0 -3
  464. package/dist/client/assets/id-ID-W65WM5EO-SkLgeJLx.js +0 -8
  465. package/dist/client/assets/image-QEDDDPDB-DtzL4Wgr.js +0 -1
  466. package/dist/client/assets/image-blob-reduce.esm-DLFdRAwc.js +0 -2
  467. package/dist/client/assets/index-BakyykHU.css +0 -1
  468. package/dist/client/assets/index-CvubXIUU.js +0 -2
  469. package/dist/client/assets/info-DKCQHKI2-DIc7uC4I.js +0 -1
  470. package/dist/client/assets/init-D6jRqBbL.js +0 -1
  471. package/dist/client/assets/input-CXk9Zxz9.js +0 -1
  472. package/dist/client/assets/it-IT-GAWJM2XW-CDZugsE0.js +0 -12
  473. package/dist/client/assets/ja-JP-FOAUPTH5-DkKXnwj8.js +0 -12
  474. package/dist/client/assets/javascript-B9TABJff.js +0 -1
  475. package/dist/client/assets/javascript-BRzqD9BA.js +0 -1
  476. package/dist/client/assets/jsx-runtime-DKdBMi_L.js +0 -1
  477. package/dist/client/assets/kaa-UEDB54S7-C0Sv0drM.js +0 -1
  478. package/dist/client/assets/kab-KAB-CTLMBVE3-QfxUgzL5.js +0 -4
  479. package/dist/client/assets/keyboard-shortcuts-C5LvVwoE.js +0 -1
  480. package/dist/client/assets/kk-KZ-XZK63ADD-CMZObxxP.js +0 -1
  481. package/dist/client/assets/ko-KR-YNTPN6WQ-DPBaHnwT.js +0 -5
  482. package/dist/client/assets/ku-TR-XUD5BUEU-75pMUQoD.js +0 -6
  483. package/dist/client/assets/linear-DhAcoVP9.js +0 -1
  484. package/dist/client/assets/lt-LT-LYCDYH7O-BeKUsKuy.js +0 -3
  485. package/dist/client/assets/lv-LV-7ROPDEEI-CrA6QOtq.js +0 -4
  486. package/dist/client/assets/main-CKWxzJUx.js +0 -807
  487. package/dist/client/assets/mermaid-runtime-2fJoRo49.js +0 -11
  488. package/dist/client/assets/mr-IN-TU6BXRKP-mIvXG0bt.js +0 -9
  489. package/dist/client/assets/my-MM-SJ3RWIEQ-CeEN5n4z.js +0 -1
  490. package/dist/client/assets/navigation-CoTUJ5Pi.css +0 -1
  491. package/dist/client/assets/nb-NO-GONF2AKR-IChp6OiI.js +0 -8
  492. package/dist/client/assets/nl-NL-UZF6UEKB-DfPPXXjo.js +0 -13
  493. package/dist/client/assets/nn-NO-ZVFRXEEO-BtpjNSGp.js +0 -4
  494. package/dist/client/assets/oc-FR-MBF2Z56W-CBl14QBM.js +0 -4
  495. package/dist/client/assets/pa-IN-3JCDVKKL-D95A1XFb.js +0 -4
  496. package/dist/client/assets/packet-7NZHBO7P-D2duWGIK.js +0 -1
  497. package/dist/client/assets/path-BWPyau1x.js +0 -1
  498. package/dist/client/assets/percentages-WBIPKLEE-bhlTAhiB.js +0 -1
  499. package/dist/client/assets/perl-CdEHsPfU.js +0 -1
  500. package/dist/client/assets/pie-RZYD4A2V-CynqTUkZ.js +0 -1
  501. package/dist/client/assets/preview-diagram-utils-BPaXsmlV.js +0 -1
  502. package/dist/client/assets/preview-render-compiler-C8wbmTyE.js +0 -1
  503. package/dist/client/assets/preview-render-compiler-CrQBxqqa.js +0 -35
  504. package/dist/client/assets/preview-render-profile-C89_PyT3.js +0 -23
  505. package/dist/client/assets/preview-render-worker-D84F1vpn.js +0 -59
  506. package/dist/client/assets/pt-BR-W4AF5QMX-DIJs8D4M.js +0 -6
  507. package/dist/client/assets/pt-PT-GNPUWAHX-BopN284Y.js +0 -8
  508. package/dist/client/assets/puppet-B4hC2X4m.js +0 -1
  509. package/dist/client/assets/python-2zlmcyof.js +0 -1
  510. package/dist/client/assets/r-DADKenSm.js +0 -1
  511. package/dist/client/assets/radar-I7S5WNFK-fIKE12aT.js +0 -1
  512. package/dist/client/assets/railroad-3IZDKUUU-Bgx8HJTj.js +0 -1
  513. package/dist/client/assets/railroad-abnf-AHOZXSZD-Nh6k60mH.js +0 -1
  514. package/dist/client/assets/railroad-ebnf-EBAXGLYW-C74h3s_I.js +0 -1
  515. package/dist/client/assets/railroad-peg-LSFZ7HO6-0hT-lN-u.js +0 -1
  516. package/dist/client/assets/ro-RO-DXHP33S5-PGxfl-ng.js +0 -12
  517. package/dist/client/assets/rolldown-runtime-aKtaBQYM.js +0 -1
  518. package/dist/client/assets/ru-RU-TTW2P7NF-Dwnn0sc5.js +0 -10
  519. package/dist/client/assets/ruby-DsYpTuWg.js +0 -1
  520. package/dist/client/assets/runtime-config-loader-BUK56BZz.js +0 -1
  521. package/dist/client/assets/sequenceDiagram-DBY2YBRQ-DonUqDnp.js +0 -162
  522. package/dist/client/assets/si-LK-BE6O7LVF-QO9nybVB.js +0 -1
  523. package/dist/client/assets/sk-SK-OI3KJLWQ-BAKIEIig.js +0 -7
  524. package/dist/client/assets/sl-SI-HF74RBGV-CnS5z7V_.js +0 -6
  525. package/dist/client/assets/sql-DcCJ9jop.js +0 -1
  526. package/dist/client/assets/src-UMNXGZaF.js +0 -1
  527. package/dist/client/assets/stateDiagram-v2-6OUMAXLB-C4YrlXQg.js +0 -1
  528. package/dist/client/assets/states-DYMshUe2.css +0 -1
  529. package/dist/client/assets/subset-shared.chunk-D3olxosN.js +0 -1
  530. package/dist/client/assets/sv-SE-TXR2SQGA-CNgv7xeJ.js +0 -8
  531. package/dist/client/assets/swimlanes-5IMT3BWC-DP1GREXh.js +0 -2
  532. package/dist/client/assets/swimlanesDiagram-G3AALYLV-CN_iOXin.js +0 -8
  533. package/dist/client/assets/ta-IN-Y2DOZGBR-DYzsfax7.js +0 -6
  534. package/dist/client/assets/th-TH-JUAISFQR-BAZHUCM7.js +0 -1
  535. package/dist/client/assets/tiki-CxVlf5KZ.js +0 -1
  536. package/dist/client/assets/timeline-definition-FHXFAJF6-C-QK9sME.js +0 -120
  537. package/dist/client/assets/toml-LvoKBwCs.js +0 -1
  538. package/dist/client/assets/tr-TR-U3HGKQXH-DTYupb_4.js +0 -4
  539. package/dist/client/assets/treeView-QDETBFTQ-CygwzEgj.js +0 -1
  540. package/dist/client/assets/treemap-6X3UGDF4-BbCXbaXr.js +0 -1
  541. package/dist/client/assets/uk-UA-FP2TKAFK-Bcxd6wgd.js +0 -6
  542. package/dist/client/assets/uz-UZ-WY5QKWXJ-B5N6xPud.js +0 -1
  543. package/dist/client/assets/vault-api-client-BPVNCJZC.js +0 -1
  544. package/dist/client/assets/vault-api-client-VAfZ8okg.js +0 -1
  545. package/dist/client/assets/vault-utils-kIbqyWPm.js +0 -1
  546. package/dist/client/assets/vi-VN-DE5I4H6K-BdlcTH5l.js +0 -7
  547. package/dist/client/assets/wardley-OPB4EBWU-BjXxCRf_.js +0 -1
  548. package/dist/client/assets/yjs-provider-reset-guard-DSfwdXS9.js +0 -4
  549. package/dist/client/assets/z80-CL1naaMV.js +0 -1
  550. package/dist/client/assets/zh-CN-VWHOHS7G-b12eD2L4.js +0 -11
  551. package/dist/client/assets/zh-HK-KQF7FW7H-Bvr6xExo.js +0 -1
  552. package/dist/client/assets/zh-TW-6VHVWZKW-B-KCOPyt.js +0 -13
  553. package/server.js +0 -1
  554. package/src/client/application/app-shell/ui-feature.js +0 -13
  555. package/src/client/application/file-open-lifecycle.js +0 -26
  556. package/src/client/application/workspace-chrome-controller.js +0 -109
  557. package/src/client/application/workspace-state-store.js +0 -48
  558. package/src/client/bootstrap/app-shell-feature-surface.js +0 -67
  559. package/src/client/domain/excalidraw-document-switch.js +0 -3
  560. package/src/client/domain/vault-api-client.js +0 -1
  561. package/src/client/domain/workspace-request-id.js +0 -7
  562. package/src/client/infrastructure/browser-navigation-port.js +0 -39
  563. package/src/client/mermaid-runtime.js +0 -3
  564. package/src/client/presentation/app-shell-renderer.js +0 -13
  565. package/src/client/presentation/app-shell-template.js +0 -669
  566. package/src/client/presentation/comments-panel.js +0 -578
  567. package/src/client/presentation/components/ui/badge.js +0 -24
  568. package/src/client/presentation/components/ui/ensure-ui-component-styles.js +0 -18
  569. package/src/client/presentation/components/ui/input.js +0 -9
  570. package/src/client/styles/features/collaboration-ui.css +0 -3
  571. package/src/client/styles/features/comments.css +0 -5
  572. package/src/client/styles/features/diff.css +0 -3
  573. package/src/client/styles/features/git.css +0 -3
  574. package/src/client/styles/features/preview-content.css +0 -3
  575. package/src/client/styles/features/preview-sidebars.css +0 -2
  576. package/src/client/styles/overrides/vendor.css +0 -2
  577. package/src/server/domain/collaboration/room-client-state-store.js +0 -29
  578. package/src/server/domain/git-service.js +0 -1
  579. package/src/server/domain/plantuml-renderer.js +0 -1
  580. package/src/server/index.js +0 -74
  581. package/src/server/infrastructure/git/concurrency.js +0 -19
  582. package/src/server/infrastructure/http/create-git-api-handler.js +0 -44
  583. package/src/server/infrastructure/http/create-vault-api-handler.js +0 -54
  584. package/src/server/infrastructure/persistence/vault-content-adapter.js +0 -61
  585. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +0 -20
  586. /package/dist/client/assets/{keyboard-shortcuts-C3mlS_4N.css → vault-api-client-C3mlS_4N.css} +0 -0
@@ -30,6 +30,15 @@ const DEFAULT_EMPTY_SCENE_GUARD_MS = 250;
30
30
  const DEFAULT_SAVE_THROTTLE_MS = 48;
31
31
  const DEFAULT_SYNC_TIMEOUT_MS = 4000;
32
32
 
33
+ export const EXCALIDRAW_ROOM_CONNECTION_STATE = Object.freeze({
34
+ AUTHORITATIVE: 'authoritative',
35
+ CLOSED: 'closed',
36
+ CONNECTING: 'connecting',
37
+ DISCONNECTING: 'disconnecting',
38
+ FALLBACK_READONLY: 'fallback-readonly',
39
+ RECONNECTING_READONLY: 'reconnecting-readonly',
40
+ });
41
+
33
42
  function stableJson(value) {
34
43
  if (Array.isArray(value)) {
35
44
  return `[${value.map((entry) => stableJson(entry)).join(',')}]`;
@@ -80,6 +89,7 @@ export class ExcalidrawRoomClient {
80
89
  filePath = '',
81
90
  now = () => Date.now(),
82
91
  onCollaboratorsChange = () => {},
92
+ onConnectionStateChange = () => {},
83
93
  onRemoteSceneJson = () => {},
84
94
  requestAnimationFrameFn = (callback) => requestAnimationFrame(callback),
85
95
  resolveWsBaseUrlFn = resolveWsBaseUrl,
@@ -96,6 +106,7 @@ export class ExcalidrawRoomClient {
96
106
  this.filePath = filePath;
97
107
  this.now = now;
98
108
  this.onCollaboratorsChange = onCollaboratorsChange;
109
+ this.onConnectionStateChange = onConnectionStateChange;
99
110
  this.onRemoteSceneJson = onRemoteSceneJson;
100
111
  this.requestAnimationFrameFn = requestAnimationFrameFn;
101
112
  this.resolveWsBaseUrlFn = resolveWsBaseUrlFn;
@@ -114,6 +125,7 @@ export class ExcalidrawRoomClient {
114
125
  this.awareness = null;
115
126
  this.localUser = null;
116
127
  this.handleProviderSync = null;
128
+ this.handleProviderStatus = null;
117
129
  this.lastSceneJson = '';
118
130
  this.sceneSyncTimer = null;
119
131
  this.sceneSyncDueAt = 0;
@@ -128,6 +140,8 @@ export class ExcalidrawRoomClient {
128
140
  this.pendingEmptySceneCandidate = null;
129
141
  this.canWriteToRoom = false;
130
142
  this.waitingForAuthoritativeSync = false;
143
+ this.connectionState = EXCALIDRAW_ROOM_CONNECTION_STATE.CLOSED;
144
+ this.hasAuthoritativeSync = false;
131
145
  this.applyingSharedSnapshotDepth = 0;
132
146
  this.suppressStructuredSceneUpdateDepth = 0;
133
147
 
@@ -149,7 +163,6 @@ export class ExcalidrawRoomClient {
149
163
  return;
150
164
  }
151
165
 
152
- this.unlockRoomWrites();
153
166
  this.pendingEmptySceneCandidate = null;
154
167
  this.lastSceneJson = JSON.stringify(parseSceneJson(remoteJson));
155
168
  this.onRemoteSceneJson(this.lastSceneJson);
@@ -164,6 +177,46 @@ export class ExcalidrawRoomClient {
164
177
  return this.localUser;
165
178
  }
166
179
 
180
+ getConnectionState() {
181
+ return this.connectionState;
182
+ }
183
+
184
+ hasPendingWrites() {
185
+ return Boolean(this.pendingSceneSyncPayload);
186
+ }
187
+
188
+ setConnectionState(nextState) {
189
+ if (!Object.values(EXCALIDRAW_ROOM_CONNECTION_STATE).includes(nextState)) {
190
+ throw new Error(`Unsupported Excalidraw room connection state: ${nextState}`);
191
+ }
192
+
193
+ const previousState = this.connectionState;
194
+ this.connectionState = nextState;
195
+ this.canWriteToRoom = nextState === EXCALIDRAW_ROOM_CONNECTION_STATE.AUTHORITATIVE;
196
+ this.waitingForAuthoritativeSync = (
197
+ nextState === EXCALIDRAW_ROOM_CONNECTION_STATE.CONNECTING
198
+ || nextState === EXCALIDRAW_ROOM_CONNECTION_STATE.FALLBACK_READONLY
199
+ || nextState === EXCALIDRAW_ROOM_CONNECTION_STATE.RECONNECTING_READONLY
200
+ );
201
+
202
+ if (!this.canWriteToRoom && this.sceneSyncTimer !== null) {
203
+ this.clearTimeoutFn(this.sceneSyncTimer);
204
+ this.sceneSyncTimer = null;
205
+ this.sceneSyncDueAt = 0;
206
+ }
207
+
208
+ if (previousState === nextState) {
209
+ return;
210
+ }
211
+
212
+ this.onConnectionStateChange({
213
+ canWrite: this.canWriteToRoom,
214
+ hasPendingWrites: this.hasPendingWrites(),
215
+ previousState,
216
+ state: nextState,
217
+ });
218
+ }
219
+
167
220
  getHistoryState() {
168
221
  return {
169
222
  canRedo: false,
@@ -217,10 +270,13 @@ export class ExcalidrawRoomClient {
217
270
 
218
271
  async connect({ initialUser = null } = {}) {
219
272
  this.localUser = initialUser;
273
+ this.setConnectionState(EXCALIDRAW_ROOM_CONNECTION_STATE.CONNECTING);
220
274
 
221
275
  if (!this.filePath) {
222
276
  const scene = createEmptyScene();
223
277
  this.lastSceneJson = JSON.stringify(scene);
278
+ this.hasAuthoritativeSync = true;
279
+ this.setConnectionState(EXCALIDRAW_ROOM_CONNECTION_STATE.AUTHORITATIVE);
224
280
  return scene;
225
281
  }
226
282
 
@@ -245,13 +301,37 @@ export class ExcalidrawRoomClient {
245
301
 
246
302
  this.handleProviderSync = (isSynced) => {
247
303
  if (!isSynced) {
304
+ this.setConnectionState(
305
+ this.hasAuthoritativeSync
306
+ ? EXCALIDRAW_ROOM_CONNECTION_STATE.RECONNECTING_READONLY
307
+ : EXCALIDRAW_ROOM_CONNECTION_STATE.CONNECTING,
308
+ );
248
309
  return;
249
310
  }
250
311
 
251
- this.unlockRoomWrites();
312
+ this.markAuthoritative();
252
313
  this.handleStructuredSceneUpdate();
253
314
  };
254
315
  this.provider.on('sync', this.handleProviderSync);
316
+ this.handleProviderStatus = ({ status } = {}) => {
317
+ if (status === 'connected') {
318
+ if (this.hasAuthoritativeSync && !this.provider?.synced) {
319
+ this.setConnectionState(EXCALIDRAW_ROOM_CONNECTION_STATE.RECONNECTING_READONLY);
320
+ }
321
+ return;
322
+ }
323
+
324
+ if (status === 'connecting' || status === 'disconnected') {
325
+ this.setConnectionState(
326
+ this.hasAuthoritativeSync
327
+ ? EXCALIDRAW_ROOM_CONNECTION_STATE.RECONNECTING_READONLY
328
+ : this.connectionState === EXCALIDRAW_ROOM_CONNECTION_STATE.FALLBACK_READONLY
329
+ ? EXCALIDRAW_ROOM_CONNECTION_STATE.FALLBACK_READONLY
330
+ : EXCALIDRAW_ROOM_CONNECTION_STATE.CONNECTING,
331
+ );
332
+ }
333
+ };
334
+ this.provider.on('status', this.handleProviderStatus);
255
335
 
256
336
  const didInitialSyncFinish = await this.waitForSync(this.provider, this.syncTimeoutMs);
257
337
 
@@ -272,9 +352,12 @@ export class ExcalidrawRoomClient {
272
352
  initialJson = JSON.stringify(createEmptyScene());
273
353
  }
274
354
 
275
- this.waitingForAuthoritativeSync = usedApiFallback && !didInitialSyncFinish;
276
- this.canWriteToRoom = !this.waitingForAuthoritativeSync;
277
355
  this.lastSceneJson = JSON.stringify(parseSceneJson(initialJson));
356
+ if (didInitialSyncFinish || this.provider?.synced) {
357
+ this.markAuthoritative();
358
+ } else {
359
+ this.setConnectionState(EXCALIDRAW_ROOM_CONNECTION_STATE.FALLBACK_READONLY);
360
+ }
278
361
  if (!usedApiFallback && this.canWriteToRoom && !isExcalidrawRoomDocStructured(this.ydoc)) {
279
362
  this.ydoc.transact(() => {
280
363
  this.replaceStructuredSceneWithinTransaction(this.lastSceneJson);
@@ -375,9 +458,9 @@ export class ExcalidrawRoomClient {
375
458
  });
376
459
  }
377
460
 
378
- unlockRoomWrites() {
379
- this.waitingForAuthoritativeSync = false;
380
- this.canWriteToRoom = true;
461
+ markAuthoritative() {
462
+ this.hasAuthoritativeSync = true;
463
+ this.setConnectionState(EXCALIDRAW_ROOM_CONNECTION_STATE.AUTHORITATIVE);
381
464
  if (!this.getStructuredSceneJson() && this.lastSceneJson) {
382
465
  this.commitSceneJson(this.lastSceneJson, {
383
466
  origin: 'excalidraw-authoritative-seed',
@@ -469,20 +552,25 @@ export class ExcalidrawRoomClient {
469
552
  }
470
553
 
471
554
  scheduleSceneSync(elements, appState, files) {
555
+ if (!this.canWriteToRoom) {
556
+ return false;
557
+ }
558
+
472
559
  this.pendingSceneSyncPayload = {
473
560
  appState,
474
561
  baseSceneJson: this.lastSceneJson,
475
562
  elements,
476
563
  files,
477
564
  };
478
- if (!this.canWriteToRoom) {
479
- return;
480
- }
481
-
482
565
  this.scheduleSceneSyncFlush();
566
+ return true;
483
567
  }
484
568
 
485
569
  scheduleSceneSyncFlush() {
570
+ if (!this.canWriteToRoom) {
571
+ return false;
572
+ }
573
+
486
574
  const elapsed = this.now() - this.lastSceneSyncAt;
487
575
  const delay = Math.max(0, this.saveThrottleMs - elapsed);
488
576
  const dueAt = this.now() + delay;
@@ -499,11 +587,12 @@ export class ExcalidrawRoomClient {
499
587
  this.sceneSyncDueAt = 0;
500
588
  this.flushSceneSync();
501
589
  }, delay);
590
+ return true;
502
591
  }
503
592
 
504
593
  flushSceneSync() {
505
- if (!this.ydoc || !this.pendingSceneSyncPayload) {
506
- return;
594
+ if (!this.canWriteToRoom || !this.ydoc || !this.pendingSceneSyncPayload) {
595
+ return false;
507
596
  }
508
597
 
509
598
  const {
@@ -544,7 +633,7 @@ export class ExcalidrawRoomClient {
544
633
 
545
634
  if (!hasChanges) {
546
635
  this.pendingEmptySceneCandidate = null;
547
- return;
636
+ return false;
548
637
  }
549
638
 
550
639
  const json = JSON.stringify(sceneData);
@@ -558,6 +647,7 @@ export class ExcalidrawRoomClient {
558
647
  if (this.pendingSceneSyncPayload) {
559
648
  this.scheduleSceneSyncFlush();
560
649
  }
650
+ return true;
561
651
  }
562
652
 
563
653
  hasRemoteCollaborators() {
@@ -727,6 +817,10 @@ export class ExcalidrawRoomClient {
727
817
  commitSceneJson(nextJson, {
728
818
  origin = 'excalidraw-room-write',
729
819
  } = {}) {
820
+ if (!this.canWriteToRoom) {
821
+ return false;
822
+ }
823
+
730
824
  const normalizedJson = JSON.stringify(parseSceneJson(nextJson));
731
825
  if (!this.ydoc) {
732
826
  const didChange = normalizedJson !== this.lastSceneJson;
@@ -755,6 +849,7 @@ export class ExcalidrawRoomClient {
755
849
 
756
850
  disconnect() {
757
851
  this.flushSceneSync();
852
+ this.setConnectionState(EXCALIDRAW_ROOM_CONNECTION_STATE.DISCONNECTING);
758
853
  this.clearTimeoutFn(this.sceneSyncTimer);
759
854
  this.sceneSyncTimer = null;
760
855
  this.sceneSyncDueAt = 0;
@@ -788,7 +883,11 @@ export class ExcalidrawRoomClient {
788
883
  if (this.provider && this.handleProviderSync) {
789
884
  this.provider.off('sync', this.handleProviderSync);
790
885
  }
886
+ if (this.provider && this.handleProviderStatus) {
887
+ this.provider.off('status', this.handleProviderStatus);
888
+ }
791
889
  this.handleProviderSync = null;
890
+ this.handleProviderStatus = null;
792
891
  this.provider?.disconnect();
793
892
  this.provider?.destroy();
794
893
  this.provider = null;
@@ -800,8 +899,8 @@ export class ExcalidrawRoomClient {
800
899
  this.roomFiles = null;
801
900
  this.roomAppState = null;
802
901
  this.localUser = null;
803
- this.canWriteToRoom = false;
804
- this.waitingForAuthoritativeSync = false;
902
+ this.hasAuthoritativeSync = false;
903
+ this.setConnectionState(EXCALIDRAW_ROOM_CONNECTION_STATE.CLOSED);
805
904
  this.applyingSharedSnapshotDepth = 0;
806
905
  this.suppressStructuredSceneUpdateDepth = 0;
807
906
  }
@@ -1,28 +1,5 @@
1
1
  import { resolveApiUrl } from '../domain/runtime-paths.js';
2
-
3
- function createRequestHeaders(requestId, headers = {}) {
4
- const nextHeaders = { ...headers };
5
- if (requestId) {
6
- nextHeaders['X-CollabMD-Request-Id'] = String(requestId);
7
- }
8
-
9
- return nextHeaders;
10
- }
11
-
12
- async function parseJsonResponse(response, fallbackError) {
13
- const data = await response.json().catch(() => ({}));
14
- if (!response.ok || data.ok === false) {
15
- const error = new Error(data.error || fallbackError);
16
- error.status = response.status;
17
- error.body = data;
18
- if (typeof data?.code === 'string') {
19
- error.code = data.code;
20
- }
21
- throw error;
22
- }
23
-
24
- return data;
25
- }
2
+ import { createRequestHeaders, parseApiResponse } from './api-client-utils.js';
26
3
 
27
4
  function createSearchParams(values = {}) {
28
5
  const params = new URLSearchParams();
@@ -39,24 +16,24 @@ function createSearchParams(values = {}) {
39
16
  export class GitApiClient {
40
17
  async readStatus({ force = false } = {}) {
41
18
  const response = await fetch(resolveApiUrl(`/git/status${force ? '?force=true' : ''}`));
42
- return parseJsonResponse(response, 'Failed to load git status');
19
+ return parseApiResponse(response, 'Failed to load git status');
43
20
  }
44
21
 
45
22
  async readPullBackups() {
46
23
  const response = await fetch(resolveApiUrl('/git/pull-backups'));
47
- return parseJsonResponse(response, 'Failed to load pull backups');
24
+ return parseApiResponse(response, 'Failed to load pull backups');
48
25
  }
49
26
 
50
27
  async readHistory({ limit, offset } = {}) {
51
28
  const params = createSearchParams({ limit, offset });
52
29
  const response = await fetch(resolveApiUrl(`/git/history?${params.toString()}`));
53
- return parseJsonResponse(response, 'Failed to load git history');
30
+ return parseApiResponse(response, 'Failed to load git history');
54
31
  }
55
32
 
56
33
  async readFileHistory({ path, limit, offset } = {}) {
57
34
  const params = createSearchParams({ limit, offset, path });
58
35
  const response = await fetch(resolveApiUrl(`/git/file-history?${params.toString()}`));
59
- return parseJsonResponse(response, 'Failed to load file history');
36
+ return parseApiResponse(response, 'Failed to load file history');
60
37
  }
61
38
 
62
39
  async readDiff({
@@ -72,7 +49,7 @@ export class GitApiClient {
72
49
  scope,
73
50
  });
74
51
  const response = await fetch(resolveApiUrl(`/git/diff?${params.toString()}`));
75
- return parseJsonResponse(response, 'Failed to load git diff');
52
+ return parseApiResponse(response, 'Failed to load git diff');
76
53
  }
77
54
 
78
55
  async readCommit({
@@ -88,13 +65,13 @@ export class GitApiClient {
88
65
  path,
89
66
  });
90
67
  const response = await fetch(resolveApiUrl(`/git/commit?${params.toString()}`));
91
- return parseJsonResponse(response, 'Failed to load git commit');
68
+ return parseApiResponse(response, 'Failed to load git commit');
92
69
  }
93
70
 
94
71
  async readFileSnapshot({ hash, path } = {}) {
95
72
  const params = createSearchParams({ hash, path });
96
73
  const response = await fetch(resolveApiUrl(`/git/file-snapshot?${params.toString()}`));
97
- return parseJsonResponse(response, 'Failed to load historical file preview');
74
+ return parseApiResponse(response, 'Failed to load historical file preview');
98
75
  }
99
76
 
100
77
  async stageFile({ path, requestId = null } = {}) {
@@ -127,7 +104,7 @@ export class GitApiClient {
127
104
  headers: createRequestHeaders(requestId, { 'Content-Type': 'application/json' }),
128
105
  method: 'POST',
129
106
  });
130
- return parseJsonResponse(response, fallbackError);
107
+ return parseApiResponse(response, fallbackError);
131
108
  }
132
109
  }
133
110
 
@@ -1,6 +1,6 @@
1
1
  import { resolveApiUrl } from '../domain/runtime-paths.js';
2
2
 
3
- export class PlantUmlApiClient {
3
+ export const plantUmlApiClient = {
4
4
  async renderSvg(source) {
5
5
  const response = await fetch(resolveApiUrl('/plantuml/render'), {
6
6
  body: JSON.stringify({ source }),
@@ -15,7 +15,5 @@ export class PlantUmlApiClient {
15
15
  }
16
16
 
17
17
  return data.svg;
18
- }
19
- }
20
-
21
- export const plantUmlApiClient = new PlantUmlApiClient();
18
+ },
19
+ };
@@ -1,63 +1,12 @@
1
1
  import { resolveApiUrl } from '../domain/runtime-paths.js';
2
+ import { getVaultPathLeaf } from '../domain/vault-paths.js';
3
+ import { createRequestHeaders, parseApiResponse } from './api-client-utils.js';
4
+ import { downloadBlob, parseDownloadFileName } from '../browser-utils.js';
2
5
 
3
6
  function encodeHeaderMetadata(value) {
4
7
  return encodeURIComponent(String(value ?? ''));
5
8
  }
6
9
 
7
- function getPathLeaf(pathValue) {
8
- return String(pathValue ?? '')
9
- .replace(/\/+$/u, '')
10
- .split('/')
11
- .filter(Boolean)
12
- .pop() || '';
13
- }
14
-
15
- function downloadBlob(blob, fileName) {
16
- const url = URL.createObjectURL(blob);
17
- const anchor = document.createElement('a');
18
- anchor.href = url;
19
- anchor.download = fileName;
20
- document.body.appendChild(anchor);
21
- anchor.click();
22
- anchor.remove();
23
- window.setTimeout(() => URL.revokeObjectURL(url), 0);
24
- }
25
-
26
- function parseDownloadFileName(contentDisposition = '', fallbackName = 'download') {
27
- const utfMatch = String(contentDisposition).match(/filename\*=UTF-8''([^;]+)/iu);
28
- if (utfMatch) {
29
- try {
30
- return decodeURIComponent(utfMatch[1]);
31
- } catch {
32
- return fallbackName;
33
- }
34
- }
35
-
36
- const asciiMatch = String(contentDisposition).match(/filename="([^"]+)"/iu);
37
- return asciiMatch?.[1] || fallbackName;
38
- }
39
-
40
- function createRequestHeaders(requestId, headers = {}) {
41
- const nextHeaders = { ...headers };
42
- if (requestId) {
43
- nextHeaders['X-CollabMD-Request-Id'] = String(requestId);
44
- }
45
-
46
- return nextHeaders;
47
- }
48
-
49
- async function parseApiResponse(response, fallbackError) {
50
- const data = await response.json().catch(() => ({}));
51
- if (!response.ok || data.ok === false) {
52
- const error = new Error(data.error || fallbackError);
53
- error.status = response.status;
54
- error.body = data;
55
- throw error;
56
- }
57
-
58
- return data;
59
- }
60
-
61
10
  async function triggerDownload(url, {
62
11
  fallbackError,
63
12
  fallbackFileName,
@@ -72,6 +21,7 @@ async function triggerDownload(url, {
72
21
  downloadBlob(
73
22
  blob,
74
23
  parseDownloadFileName(response.headers.get('content-disposition') || '', fallbackFileName),
24
+ { removeDelayMs: 0, revokeDelayMs: 0 },
75
25
  );
76
26
  return response;
77
27
  }
@@ -287,7 +237,7 @@ export class VaultApiClient {
287
237
  }
288
238
 
289
239
  async downloadFile(path) {
290
- const fallbackFileName = getPathLeaf(path) || 'download';
240
+ const fallbackFileName = getVaultPathLeaf(path) || 'download';
291
241
  return triggerDownload(resolveApiUrl(`/download/file?path=${encodeURIComponent(path)}`), {
292
242
  fallbackError: 'Failed to download file',
293
243
  fallbackFileName,
@@ -295,7 +245,7 @@ export class VaultApiClient {
295
245
  }
296
246
 
297
247
  async downloadDirectory(path) {
298
- const directoryName = getPathLeaf(path) || 'vault';
248
+ const directoryName = getVaultPathLeaf(path) || 'vault';
299
249
  return triggerDownload(resolveApiUrl(`/download/directory?path=${encodeURIComponent(path)}`), {
300
250
  fallbackError: 'Failed to download folder',
301
251
  fallbackFileName: `${directoryName}.zip`,
@@ -2,8 +2,9 @@ import { isImageAttachmentFilePath } from '../../domain/file-kind.js';
2
2
  import { resolveApiUrl } from '../domain/runtime-paths.js';
3
3
  import { escapeHtml } from '../domain/vault-utils.js';
4
4
  import { buttonClassNames } from './components/ui/button.js';
5
- import { inputClassNames } from './components/ui/input.js';
5
+ import { inputClassNames } from './components/ui/class-names.js';
6
6
  import { segmentedButtonClassNames, segmentedControlClassNames } from './components/ui/segmented-control.js';
7
+ import { downloadBlob, parseDownloadFileName } from '../browser-utils.js';
7
8
 
8
9
  function createShellKey() {
9
10
  return `base-${Math.random().toString(36).slice(2, 10)}`;
@@ -1143,26 +1144,6 @@ function updateShellPanel(entry, result) {
1143
1144
  });
1144
1145
  }
1145
1146
 
1146
- function downloadBlob(blob, fileName = 'base.csv') {
1147
- const url = URL.createObjectURL(blob);
1148
- const anchor = document.createElement('a');
1149
- anchor.href = url;
1150
- anchor.download = fileName;
1151
- document.body.appendChild(anchor);
1152
- anchor.click();
1153
- anchor.remove();
1154
- setTimeout(() => URL.revokeObjectURL(url), 0);
1155
- }
1156
-
1157
- function parseDownloadFileName(contentDisposition = '') {
1158
- const utfMatch = contentDisposition.match(/filename\*=UTF-8''([^;]+)/iu);
1159
- if (utfMatch) {
1160
- return decodeURIComponent(utfMatch[1]);
1161
- }
1162
- const asciiMatch = contentDisposition.match(/filename="([^"]+)"/iu);
1163
- return asciiMatch?.[1] || 'base.csv';
1164
- }
1165
-
1166
1147
  export class BasesPreviewController {
1167
1148
  constructor({
1168
1149
  getActiveFilePath = () => '',
@@ -1721,7 +1702,10 @@ export class BasesPreviewController {
1721
1702
  activeFilePath: this.getActiveFilePath?.() ?? '',
1722
1703
  ...entry.payload,
1723
1704
  });
1724
- downloadBlob(response.blob, parseDownloadFileName(response.contentDisposition));
1705
+ downloadBlob(response.blob, parseDownloadFileName(response.contentDisposition, 'base.csv'), {
1706
+ removeDelayMs: 0,
1707
+ revokeDelayMs: 0,
1708
+ });
1725
1709
  } catch (error) {
1726
1710
  this.toastController?.show?.(error.message || 'Failed to export base CSV');
1727
1711
  }
@@ -1,22 +1,10 @@
1
1
  import { stripVaultFileExtension } from '../../domain/file-kind.js';
2
+ import { getVaultPathLeaf, getVaultPathParent } from '../domain/vault-paths.js';
2
3
 
3
4
  function asArray(value) {
4
5
  return Array.isArray(value) ? value : [];
5
6
  }
6
7
 
7
- function getPathLeaf(pathValue = '') {
8
- return String(pathValue)
9
- .split('/')
10
- .filter(Boolean)
11
- .pop() || '';
12
- }
13
-
14
- function getParentPath(pathValue = '') {
15
- const normalized = String(pathValue ?? '').replace(/\/+$/u, '');
16
- const separatorIndex = normalized.lastIndexOf('/');
17
- return separatorIndex >= 0 ? normalized.slice(0, separatorIndex) : '';
18
- }
19
-
20
8
  function formatLineLabel(anchor = {}) {
21
9
  const startLine = Number(anchor.startLine || 0);
22
10
  const endLine = Number(anchor.endLine || startLine);
@@ -177,11 +165,11 @@ export class CommentOverviewController {
177
165
 
178
166
  const title = document.createElement('h3');
179
167
  title.className = 'comment-overview-file-title';
180
- title.textContent = stripVaultFileExtension(getPathLeaf(file.filePath));
168
+ title.textContent = stripVaultFileExtension(getVaultPathLeaf(file.filePath));
181
169
 
182
170
  const parent = document.createElement('span');
183
171
  parent.className = 'comment-overview-file-path';
184
- parent.textContent = getParentPath(file.filePath) || file.filePath;
172
+ parent.textContent = getVaultPathParent(file.filePath) || file.filePath;
185
173
 
186
174
  const count = document.createElement('span');
187
175
  count.className = 'comment-overview-file-count';
@@ -5,6 +5,7 @@ import {
5
5
  COMMENT_REACTION_MORE_EMOJIS,
6
6
  COMMENT_REACTION_PRESET_EMOJIS,
7
7
  clamp,
8
+ createRectFromRects,
8
9
  createRenderedCommentBody,
9
10
  formatAnchorLabel,
10
11
  formatReactionCount,
@@ -13,7 +14,7 @@ import {
13
14
  isReactionPickerOpen,
14
15
  } from './comment-ui-shared.js';
15
16
  import { buttonClassNames } from '../components/ui/button.js';
16
- import { inputClassNames } from '../components/ui/input.js';
17
+ import { inputClassNames } from '../components/ui/class-names.js';
17
18
 
18
19
  /** @this {any} */
19
20
  function ensureCardRoot() {
@@ -29,8 +30,8 @@ function ensureCardRoot() {
29
30
  }
30
31
 
31
32
  /** @this {any} */
32
- function openComposerForSelection(origin = 'editor', sourceRect = null) {
33
- const anchor = this.session?.getCurrentSelectionCommentAnchor?.();
33
+ function openComposerForSelection(origin = 'editor', sourceRect = null, previewSelection = null) {
34
+ const anchor = previewSelection?.anchor ?? this.session?.getCurrentSelectionCommentAnchor?.();
34
35
  if (!anchor) {
35
36
  return;
36
37
  }
@@ -46,8 +47,9 @@ function openComposerForSelection(origin = 'editor', sourceRect = null) {
46
47
  composerDraft: null,
47
48
  mode: 'create',
48
49
  origin: nextOrigin,
50
+ previewRange: previewSelection?.range ?? null,
49
51
  replyThreadId: null,
50
- sourceRect: nextSourceRect,
52
+ sourceRect: nextSourceRect ?? null,
51
53
  };
52
54
  this.render();
53
55
  }
@@ -71,10 +73,14 @@ function openThreadGroup(group, { anchor, origin, sourceRect }) {
71
73
 
72
74
  /** @this {any} */
73
75
  function closeCard() {
76
+ const wasPreviewComposer = this.activeCard?.mode === 'create' && this.activeCard.origin === 'preview';
74
77
  this.activeCard = null;
75
78
  this.pendingCardFocusElement = null;
76
79
  this.reactionPicker = null;
77
80
  this.renderCard();
81
+ if (wasPreviewComposer) {
82
+ this.clearPreviewSelection();
83
+ }
78
84
  this.scheduleLayoutRefresh();
79
85
  }
80
86
 
@@ -91,6 +97,10 @@ function updateCardSourceRect() {
91
97
  return this.activeCard.sourceRect;
92
98
  }
93
99
  if (this.activeCard.origin === 'preview') {
100
+ const selectionRect = createRectFromRects(Array.from(this.activeCard.previewRange?.getClientRects?.() ?? []));
101
+ if (selectionRect) {
102
+ return selectionRect;
103
+ }
94
104
  return this.resolvePreviewTarget(this.activeCard.anchor)?.bubbleRect ?? this.activeCard.sourceRect;
95
105
  }
96
106
  if (this.activeCard.origin === 'toolbar') {
@@ -215,6 +225,13 @@ function renderCard() {
215
225
  const content = document.createElement('div');
216
226
  content.className = 'comment-card-scroll';
217
227
 
228
+ if (this.activeCard.mode === 'create' && this.activeCard.anchor?.fallbackToLines) {
229
+ const anchorNote = document.createElement('p');
230
+ anchorNote.className = 'comment-card-anchor-note';
231
+ anchorNote.textContent = `Exact preview mapping was unavailable. This comment will be anchored to ${formatAnchorLabel(this.activeCard.anchor).toLowerCase()}.`;
232
+ content.appendChild(anchorNote);
233
+ }
234
+
218
235
  if (this.activeCard.anchor?.quote) {
219
236
  const quote = document.createElement('p');
220
237
  quote.className = 'comment-card-quote';