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
@@ -22,6 +22,7 @@ import {
22
22
  applySceneUpdateWithFiles,
23
23
  } from './domain/excalidraw-api-scene-sync.js';
24
24
  import {
25
+ normalizeDocumentMode,
25
26
  normalizeScene,
26
27
  parseSceneJson,
27
28
  sceneToInitialData,
@@ -30,15 +31,22 @@ import {
30
31
  buildReconciledExcalidrawSceneUpdate,
31
32
  } from './domain/excalidraw-scene-reconcile.js';
32
33
  import {
33
- normalizeDocumentMode,
34
- } from './domain/excalidraw-document-switch.js';
34
+ createExcalidrawDiagnosticRing,
35
+ summarizeExcalidrawScene,
36
+ } from './domain/excalidraw-diagnostics.js';
35
37
  import { isPlainQuickSwitcherShortcut } from './domain/keyboard-shortcuts.js';
36
38
  import { ensureClientAuthenticated } from './infrastructure/auth-client.js';
37
- import { ExcalidrawRoomClient } from './infrastructure/excalidraw-room-client.js';
39
+ import {
40
+ EXCALIDRAW_ROOM_CONNECTION_STATE,
41
+ ExcalidrawRoomClient,
42
+ } from './infrastructure/excalidraw-room-client.js';
38
43
  import { vaultApiClient } from './infrastructure/vault-api-client.js';
39
44
 
40
45
  const params = new URLSearchParams(window.location.search);
41
46
  const isTestMode = params.get('test') === '1';
47
+ const diagnostics = createExcalidrawDiagnosticRing({
48
+ enabled: params.get('excalidrawDebug') === '1',
49
+ });
42
50
  const parentOrigin = window.location.origin;
43
51
  const syncTimeoutMs = Number.parseInt(params.get('syncTimeoutMs') || '', 10);
44
52
 
@@ -55,10 +63,8 @@ let localAwarenessUser = resolveLocalAwarenessUser({
55
63
  let appliedSceneJson = '';
56
64
 
57
65
  let collabReady = false;
58
- let suppressOnChange = false;
59
66
  let pendingRemoteSceneJson = '';
60
67
  let pendingCollaborators = null;
61
- let pendingSuppressionReleases = 0;
62
68
  let activeCollaborators = new Map();
63
69
  let followedSocketId = null;
64
70
  let pendingHostFollowPeerId = null;
@@ -76,16 +82,44 @@ let roomClientGeneration = 0;
76
82
  let reactRoot = null;
77
83
  let editorRenderKey = 0;
78
84
  let skipRoomDisconnectOnUnmount = false;
85
+ let roomConnectionState = EXCALIDRAW_ROOM_CONNECTION_STATE.CONNECTING;
86
+ let parkRequestedWhileBlocked = false;
87
+ const pendingDisconnectRequestIds = new Set();
79
88
  const reportedFileConflictSignatures = new Set();
80
89
 
90
+ if (diagnostics.enabled) {
91
+ window.__COLLABMD_EXCALIDRAW_DEBUG__ = diagnostics;
92
+ }
93
+
81
94
  function getDocumentViewState(mode = currentDocument.mode) {
82
95
  const normalizedMode = normalizeDocumentMode(mode);
96
+ const authorityReadOnly = roomConnectionState !== EXCALIDRAW_ROOM_CONNECTION_STATE.AUTHORITATIVE;
83
97
  return {
84
- viewModeEnabled: normalizedMode === 'preview',
98
+ viewModeEnabled: normalizedMode === 'preview' || authorityReadOnly,
85
99
  zenModeEnabled: normalizedMode === 'preview',
86
100
  };
87
101
  }
88
102
 
103
+ function getAuthorityBannerText() {
104
+ if (normalizeDocumentMode(currentDocument.mode) === 'preview') {
105
+ return '';
106
+ }
107
+
108
+ if (roomConnectionState === EXCALIDRAW_ROOM_CONNECTION_STATE.FALLBACK_READONLY) {
109
+ return 'Showing the saved diagram. Editing will resume after live sync completes.';
110
+ }
111
+
112
+ if (roomConnectionState === EXCALIDRAW_ROOM_CONNECTION_STATE.RECONNECTING_READONLY) {
113
+ return 'Connection lost. Editing is paused while the diagram reconnects.';
114
+ }
115
+
116
+ if (roomConnectionState === EXCALIDRAW_ROOM_CONNECTION_STATE.CONNECTING) {
117
+ return 'Connecting to the live diagram…';
118
+ }
119
+
120
+ return '';
121
+ }
122
+
89
123
  function applyDocumentMode(mode = currentDocument.mode) {
90
124
  document.body.dataset.documentMode = normalizeDocumentMode(mode);
91
125
  }
@@ -106,6 +140,13 @@ function createRoomClient(filePath) {
106
140
 
107
141
  queueCollaboratorsRender(collaborators);
108
142
  },
143
+ onConnectionStateChange: (event) => {
144
+ if (generation !== roomClientGeneration) {
145
+ return;
146
+ }
147
+
148
+ handleRoomConnectionStateChange(event);
149
+ },
109
150
  onRemoteSceneJson: (sceneJson) => {
110
151
  if (generation !== roomClientGeneration) {
111
152
  return;
@@ -148,6 +189,10 @@ function buildExcalidrawProps({ initialData } = {}) {
148
189
  onPointerUpdate: (payload) => {
149
190
  roomClient?.scheduleLocalPointerAwareness(payload);
150
191
  },
192
+ historyOptions: {
193
+ traversal: 'single-entry',
194
+ },
195
+ onHistoryAction: handleHistoryAction,
151
196
  theme: currentTheme,
152
197
  ...getDocumentViewState(),
153
198
  UIOptions: {
@@ -175,15 +220,92 @@ function renderExcalidrawApp({ initialData } = {}) {
175
220
  reactRoot.render(
176
221
  React.createElement(
177
222
  'div',
178
- { style: { height: '100vh', width: '100%' } },
223
+ { className: 'excalidraw-editor-shell' },
179
224
  React.createElement(Excalidraw, {
180
225
  key: `editor-${editorRenderKey}`,
181
226
  ...buildExcalidrawProps({ initialData }),
182
227
  }),
228
+ getAuthorityBannerText()
229
+ ? React.createElement('div', {
230
+ className: 'excalidraw-authority-banner',
231
+ role: 'status',
232
+ }, getAuthorityBannerText())
233
+ : null,
183
234
  ),
184
235
  );
185
236
  }
186
237
 
238
+ function recordSceneDiagnostic(event, details = {}, sceneJson = '') {
239
+ if (!diagnostics.enabled) {
240
+ return;
241
+ }
242
+
243
+ let sceneSummary = {};
244
+ if (sceneJson) {
245
+ try {
246
+ sceneSummary = summarizeExcalidrawScene(parseSceneJson(sceneJson));
247
+ } catch {
248
+ sceneSummary = {};
249
+ }
250
+ }
251
+
252
+ diagnostics.record(event, {
253
+ ...sceneSummary,
254
+ connectionState: roomConnectionState,
255
+ generation: roomClientGeneration,
256
+ hasPendingWrites: roomClient?.hasPendingWrites?.() || false,
257
+ ...details,
258
+ });
259
+ }
260
+
261
+ function handleHistoryAction({ action = '', outcome = '' } = {}) {
262
+ recordSceneDiagnostic('history-action', { action, outcome });
263
+ if (outcome !== 'no-visible-change' || !excalidrawAPI) {
264
+ return;
265
+ }
266
+
267
+ const label = action === 'redo' ? 'Redo' : 'Undo';
268
+ excalidrawAPI.setToast?.({
269
+ message: `${label} skipped: a collaborator changed that item`,
270
+ });
271
+ }
272
+
273
+ function handleRoomConnectionStateChange({
274
+ canWrite = false,
275
+ hasPendingWrites = false,
276
+ previousState = EXCALIDRAW_ROOM_CONNECTION_STATE.CLOSED,
277
+ state,
278
+ } = {}) {
279
+ roomConnectionState = state || EXCALIDRAW_ROOM_CONNECTION_STATE.CLOSED;
280
+ recordSceneDiagnostic('authority-state', {
281
+ canWrite,
282
+ hasPendingWrites,
283
+ previousState,
284
+ state: roomConnectionState,
285
+ }, roomClient?.getLastSceneJson?.() || '');
286
+ postToParent('excalidraw-authority-state', {
287
+ canWrite,
288
+ hasPendingWrites,
289
+ previousState,
290
+ state: roomConnectionState,
291
+ });
292
+
293
+ if (reactRoot) {
294
+ renderExcalidrawApp();
295
+ }
296
+
297
+ if (
298
+ roomConnectionState === EXCALIDRAW_ROOM_CONNECTION_STATE.AUTHORITATIVE
299
+ && previousState === EXCALIDRAW_ROOM_CONNECTION_STATE.RECONNECTING_READONLY
300
+ ) {
301
+ excalidrawAPI?.setToast?.({ message: 'Live diagram reconnected' });
302
+ }
303
+
304
+ if (roomConnectionState === EXCALIDRAW_ROOM_CONNECTION_STATE.AUTHORITATIVE) {
305
+ void resolvePendingDisconnectRequests();
306
+ }
307
+ }
308
+
187
309
  function applySurfaceTheme(theme = currentTheme) {
188
310
  document.body.dataset.theme = theme === 'light' ? 'light' : 'dark';
189
311
  }
@@ -225,6 +347,7 @@ function applyLocalUserPatch(nextUser = {}) {
225
347
 
226
348
  if (isTestMode) {
227
349
  window.__COLLABMD_EXCALIDRAW_TEST__ = {
350
+ disconnectTransport: () => roomClient?.provider?.disconnect?.(),
228
351
  getElementBounds: (elementId) => {
229
352
  const element = excalidrawAPI?.getSceneElementsIncludingDeleted?.()?.find((entry) => entry.id === elementId && !entry.isDeleted);
230
353
  if (!element) {
@@ -256,6 +379,13 @@ if (isTestMode) {
256
379
  getFileIds: () => (
257
380
  Object.keys(excalidrawAPI?.getFiles?.() || {}).sort()
258
381
  ),
382
+ getFileVersion: (fileId) => excalidrawAPI?.getFiles?.()?.[fileId]?.version ?? null,
383
+ getEditorId: () => excalidrawAPI?.id || null,
384
+ getForkCapabilities: () => ({
385
+ replaceFiles: typeof excalidrawAPI?.replaceFiles === 'function',
386
+ }),
387
+ getAuthorityState: () => roomConnectionState,
388
+ getDiagnosticTrace: () => diagnostics.exportTrace(),
259
389
  getHistoryState: () => getNativeHistoryState(),
260
390
  getLocalUserName: () => localAwarenessUser?.name || '',
261
391
  getLocalPeerId: () => localAwarenessUser?.peerId || '',
@@ -278,6 +408,7 @@ if (isTestMode) {
278
408
  ),
279
409
  isReady: () => collabReady && Boolean(excalidrawAPI) && Boolean(getNativeHistoryButton('undo')) && Boolean(getNativeHistoryButton('redo')),
280
410
  redoShared: () => triggerNativeHistory('redo'),
411
+ reconnectTransport: () => roomClient?.provider?.connect?.(),
281
412
  setScene: (scene) => {
282
413
  applyLocalScene(normalizeScene(scene), {
283
414
  captureUpdate: CaptureUpdateAction.IMMEDIATELY,
@@ -371,6 +502,7 @@ function applySceneFromJson(rawJson, {
371
502
  }
372
503
 
373
504
  appliedSceneJson = normalizedJson;
505
+ recordSceneDiagnostic('remote-scene-received', {}, normalizedJson);
374
506
 
375
507
  if (!excalidrawAPI || !collabReady) {
376
508
  pendingRemoteSceneJson = normalizedJson;
@@ -385,21 +517,6 @@ function applySceneFromJson(rawJson, {
385
517
  updateApiScene(scene);
386
518
  }
387
519
 
388
- function releaseOnChangeSuppressionAfterPaint({ trackedSharedSnapshot = false } = {}) {
389
- pendingSuppressionReleases += 1;
390
- requestAnimationFrame(() => {
391
- requestAnimationFrame(() => {
392
- pendingSuppressionReleases = Math.max(0, pendingSuppressionReleases - 1);
393
- if (trackedSharedSnapshot) {
394
- roomClient?.endApplyingSharedSnapshot();
395
- }
396
- if (pendingSuppressionReleases === 0) {
397
- suppressOnChange = false;
398
- }
399
- });
400
- });
401
- }
402
-
403
520
  function releaseViewportBroadcastSuppressionAfterPaint() {
404
521
  pendingViewportSuppressionReleases += 1;
405
522
  requestAnimationFrame(() => {
@@ -439,8 +556,12 @@ function logFileConflictOnce(conflictingFileIds = []) {
439
556
 
440
557
  reportedFileConflictSignatures.add(signature);
441
558
  console.warn(
442
- `[excalidraw:${currentDocument.filePath}] Remounting editor after receiving conflicting binary file payload(s) for existing file ids: ${conflictingFileIds.join(', ')}`,
559
+ `[excalidraw:${currentDocument.filePath}] The installed Excalidraw API cannot replace conflicting binary file payload(s) without a remount: ${conflictingFileIds.join(', ')}`,
443
560
  );
561
+ recordSceneDiagnostic('binary-file-conflict', {
562
+ fileCount: conflictingFileIds.length,
563
+ reason: 'replace-files-api-unavailable',
564
+ });
444
565
  }
445
566
 
446
567
  function requestEditorRemount(scene) {
@@ -471,9 +592,8 @@ function applySceneToMountedApi(scene, {
471
592
  const nextSceneUpdate = buildApiSceneUpdate(scene, {
472
593
  appStateOverrides,
473
594
  });
474
- let applyResult = null;
595
+ let applyResult;
475
596
 
476
- suppressOnChange = true;
477
597
  if (trackedSharedSnapshot) {
478
598
  roomClient?.beginApplyingSharedSnapshot();
479
599
  }
@@ -489,13 +609,8 @@ function applySceneToMountedApi(scene, {
489
609
  },
490
610
  });
491
611
  } finally {
492
- if (applyResult?.requiresRemount) {
493
- if (trackedSharedSnapshot) {
494
- roomClient?.endApplyingSharedSnapshot();
495
- }
496
- suppressOnChange = false;
497
- } else {
498
- releaseOnChangeSuppressionAfterPaint({ trackedSharedSnapshot });
612
+ if (trackedSharedSnapshot) {
613
+ roomClient?.endApplyingSharedSnapshot();
499
614
  }
500
615
  }
501
616
 
@@ -735,9 +850,7 @@ function clearEditorApiStateBindings() {
735
850
 
736
851
  function resetRealtimeRoomState() {
737
852
  collabReady = false;
738
- suppressOnChange = false;
739
853
  pendingRemoteSceneJson = '';
740
- pendingSuppressionReleases = 0;
741
854
  pendingCollaborators = null;
742
855
  activeCollaborators = new Map();
743
856
  followedSocketId = null;
@@ -755,8 +868,12 @@ function resetRealtimeRoomState() {
755
868
 
756
869
  function disconnectRealtimeRoom({ preserveEditorBindings = false } = {}) {
757
870
  const activeRoomClient = roomClient;
871
+ const previousState = roomConnectionState;
758
872
  roomClient = null;
759
873
  roomClientGeneration += 1;
874
+ roomConnectionState = EXCALIDRAW_ROOM_CONNECTION_STATE.CLOSED;
875
+ pendingDisconnectRequestIds.clear();
876
+ parkRequestedWhileBlocked = false;
760
877
 
761
878
  resetRealtimeRoomState();
762
879
  if (!preserveEditorBindings) {
@@ -764,6 +881,16 @@ function disconnectRealtimeRoom({ preserveEditorBindings = false } = {}) {
764
881
  }
765
882
 
766
883
  activeRoomClient?.disconnect();
884
+ recordSceneDiagnostic('room-disconnected', {
885
+ previousState,
886
+ state: roomConnectionState,
887
+ });
888
+ postToParent('excalidraw-authority-state', {
889
+ canWrite: false,
890
+ hasPendingWrites: false,
891
+ previousState,
892
+ state: roomConnectionState,
893
+ });
767
894
  }
768
895
 
769
896
  let didDisconnectRealtimeRoom = false;
@@ -794,8 +921,39 @@ async function waitForPendingRoomWrites({
794
921
  }
795
922
 
796
923
  async function prepareRealtimeRoomDisconnect() {
797
- roomClient?.flushSceneSync();
924
+ if (!roomClient) {
925
+ return true;
926
+ }
927
+
928
+ if (roomClient.getConnectionState() !== EXCALIDRAW_ROOM_CONNECTION_STATE.AUTHORITATIVE) {
929
+ return false;
930
+ }
931
+
932
+ roomClient.flushSceneSync();
798
933
  await waitForPendingRoomWrites();
934
+ return roomClient?.getConnectionState() === EXCALIDRAW_ROOM_CONNECTION_STATE.AUTHORITATIVE;
935
+ }
936
+
937
+ async function resolvePendingDisconnectRequests() {
938
+ if (pendingDisconnectRequestIds.size === 0 && !parkRequestedWhileBlocked) {
939
+ return;
940
+ }
941
+
942
+ const canDisconnect = await prepareRealtimeRoomDisconnect();
943
+ if (!canDisconnect) {
944
+ return;
945
+ }
946
+
947
+ const requestIds = [...pendingDisconnectRequestIds];
948
+ pendingDisconnectRequestIds.clear();
949
+ requestIds.forEach((requestId) => {
950
+ postToParent('disconnect-ready', { requestId });
951
+ });
952
+
953
+ if (parkRequestedWhileBlocked) {
954
+ parkRequestedWhileBlocked = false;
955
+ disconnectRealtimeRoom({ preserveEditorBindings: true });
956
+ }
799
957
  }
800
958
 
801
959
  async function connectDocumentClient(filePath) {
@@ -812,6 +970,14 @@ async function connectDocumentClient(filePath) {
812
970
  }
813
971
 
814
972
  window.addEventListener('pagehide', disconnectRealtimeRoomOnce);
973
+ window.addEventListener('beforeunload', (event) => {
974
+ if (roomConnectionState !== EXCALIDRAW_ROOM_CONNECTION_STATE.RECONNECTING_READONLY) {
975
+ return;
976
+ }
977
+
978
+ event.preventDefault();
979
+ event.returnValue = '';
980
+ });
815
981
 
816
982
  window.addEventListener('message', (event) => {
817
983
  if (event.origin !== parentOrigin) {
@@ -827,12 +993,10 @@ window.addEventListener('message', (event) => {
827
993
  currentTheme = message.theme || 'dark';
828
994
  applySurfaceTheme(currentTheme);
829
995
  if (excalidrawAPI) {
830
- suppressOnChange = true;
831
996
  excalidrawAPI.updateScene({
832
997
  appState: { theme: currentTheme },
833
998
  captureUpdate: CaptureUpdateAction.NEVER,
834
999
  });
835
- releaseOnChangeSuppressionAfterPaint();
836
1000
  }
837
1001
  renderExcalidrawApp();
838
1002
  return;
@@ -855,29 +1019,71 @@ window.addEventListener('message', (event) => {
855
1019
 
856
1020
  if (message.type === 'prepare-disconnect') {
857
1021
  void (async () => {
858
- await prepareRealtimeRoomDisconnect();
859
- postToParent('disconnect-ready', {
860
- requestId: message.requestId || '',
1022
+ const requestId = message.requestId || '';
1023
+ if (await prepareRealtimeRoomDisconnect()) {
1024
+ postToParent('disconnect-ready', { requestId });
1025
+ return;
1026
+ }
1027
+
1028
+ pendingDisconnectRequestIds.add(requestId);
1029
+ postToParent('disconnect-blocked', {
1030
+ requestId,
1031
+ state: roomConnectionState,
861
1032
  });
862
1033
  })();
863
1034
  return;
864
1035
  }
865
1036
 
1037
+ if (message.type === 'cancel-disconnect') {
1038
+ pendingDisconnectRequestIds.delete(message.requestId || '');
1039
+ return;
1040
+ }
1041
+
1042
+ if (message.type === 'discard-and-disconnect') {
1043
+ const requestId = message.requestId || '';
1044
+ pendingDisconnectRequestIds.delete(requestId);
1045
+ recordSceneDiagnostic('disconnect-discarded', {
1046
+ reason: 'user-confirmed',
1047
+ state: roomConnectionState,
1048
+ });
1049
+ disconnectRealtimeRoom({ preserveEditorBindings: true });
1050
+ postToParent('disconnect-ready', {
1051
+ discarded: true,
1052
+ requestId,
1053
+ });
1054
+ return;
1055
+ }
1056
+
866
1057
  if (message.type === 'park-room') {
867
1058
  void (async () => {
868
- await prepareRealtimeRoomDisconnect();
869
- disconnectRealtimeRoom({ preserveEditorBindings: true });
1059
+ if (await prepareRealtimeRoomDisconnect()) {
1060
+ disconnectRealtimeRoom({ preserveEditorBindings: true });
1061
+ return;
1062
+ }
1063
+
1064
+ parkRequestedWhileBlocked = true;
1065
+ postToParent('park-blocked', { state: roomConnectionState });
870
1066
  })();
871
1067
  }
872
1068
  });
873
1069
 
874
1070
  function scheduleSyncToRoom(elements, appState, files) {
875
- if (!collabReady || !roomClient || suppressOnChange) {
1071
+ if (!collabReady || !roomClient) {
876
1072
  return;
877
1073
  }
878
1074
 
879
1075
  const liveElements = getLiveSceneElementsForSync(elements);
880
- roomClient.scheduleSceneSync(liveElements, appState, files);
1076
+ const scheduled = roomClient.scheduleSceneSync(liveElements, appState, files);
1077
+ if (diagnostics.enabled) {
1078
+ recordSceneDiagnostic(scheduled ? 'local-scene-scheduled' : 'local-scene-rejected', {
1079
+ canWrite: roomClient.canWriteToRoom,
1080
+ hasPendingWrites: roomClient.hasPendingWrites(),
1081
+ }, JSON.stringify({
1082
+ appState,
1083
+ elements: liveElements,
1084
+ files,
1085
+ }));
1086
+ }
881
1087
  }
882
1088
 
883
1089
  function initializeEditor(api) {
@@ -4,6 +4,7 @@ import { sanitizeSvgMarkup } from '../application/preview-diagram-utils.js';
4
4
  import { compilePreviewDocument } from '../application/preview-render-compiler.js';
5
5
  import { stripVaultFileExtension } from '../../domain/file-kind.js';
6
6
  import { parseSceneJson, sceneToInitialData } from '../domain/excalidraw-scene.js';
7
+ import { downloadBlob } from '../browser-utils.js';
7
8
  import { resolveApiUrl, resolveAppUrl } from '../infrastructure/runtime-config.js';
8
9
 
9
10
  const EXPORT_PAGE_SOURCE = 'collabmd-export-page';
@@ -677,7 +678,7 @@ async function ensureMermaidRuntime() {
677
678
  return mermaidLoaderPromise;
678
679
  }
679
680
 
680
- mermaidLoaderPromise = import('../mermaid-runtime.js').then((module) => {
681
+ mermaidLoaderPromise = import('mermaid').then((module) => {
681
682
  const runtime = module?.default;
682
683
  if (!runtime) {
683
684
  throw new Error('Mermaid runtime failed to initialize');
@@ -1433,14 +1434,10 @@ export async function docxAdapter(snapshot) {
1433
1434
  }
1434
1435
 
1435
1436
  const blob = await response.blob();
1436
- const downloadUrl = URL.createObjectURL(blob);
1437
- const anchor = document.createElement('a');
1438
- anchor.href = downloadUrl;
1439
- anchor.download = `${createDocumentTitle(snapshot.filePath, snapshot.title)}.docx`;
1440
- document.body.appendChild(anchor);
1441
- anchor.click();
1442
- anchor.remove();
1443
- window.setTimeout(() => URL.revokeObjectURL(downloadUrl), 1000);
1437
+ downloadBlob(blob, `${createDocumentTitle(snapshot.filePath, snapshot.title)}.docx`, {
1438
+ removeDelayMs: 0,
1439
+ revokeDelayMs: 1000,
1440
+ });
1444
1441
  }
1445
1442
 
1446
1443
  export async function printPdfAdapter() {
@@ -0,0 +1,23 @@
1
+ export function createRequestHeaders(requestId, headers = {}) {
2
+ const nextHeaders = { ...headers };
3
+ if (requestId) {
4
+ nextHeaders['X-CollabMD-Request-Id'] = String(requestId);
5
+ }
6
+
7
+ return nextHeaders;
8
+ }
9
+
10
+ export async function parseApiResponse(response, fallbackError) {
11
+ const data = await response.json().catch(() => ({}));
12
+ if (!response.ok || data.ok === false) {
13
+ const error = new Error(data.error || fallbackError);
14
+ error.status = response.status;
15
+ error.body = data;
16
+ if (typeof data?.code === 'string') {
17
+ error.code = data.code;
18
+ }
19
+ throw error;
20
+ }
21
+
22
+ return data;
23
+ }
@@ -111,4 +111,3 @@ export class AppVersionMonitor {
111
111
  }
112
112
  }
113
113
 
114
- export { extractBuildId };
@@ -1,6 +1,6 @@
1
1
  import { resolveApiUrl } from '../domain/runtime-paths.js';
2
2
 
3
- export class BacklinksApiClient {
3
+ export const backlinksApiClient = {
4
4
  async readBacklinks(filePath, { signal } = {}) {
5
5
  const response = await fetch(
6
6
  resolveApiUrl(`/backlinks?file=${encodeURIComponent(filePath)}`),
@@ -12,7 +12,5 @@ export class BacklinksApiClient {
12
12
  }
13
13
 
14
14
  return Array.isArray(data.backlinks) ? data.backlinks : [];
15
- }
16
- }
17
-
18
- export const backlinksApiClient = new BacklinksApiClient();
15
+ },
16
+ };
@@ -8,19 +8,15 @@ export class BrowserNotificationPort {
8
8
  }
9
9
 
10
10
  getPermission() {
11
- if (typeof this.NotificationImpl !== 'function') {
12
- return 'unsupported';
13
- }
14
-
15
- return this.NotificationImpl.permission;
11
+ return typeof this.NotificationImpl === 'function'
12
+ ? this.NotificationImpl.permission
13
+ : 'unsupported';
16
14
  }
17
15
 
18
16
  async requestPermission() {
19
- if (typeof this.NotificationImpl !== 'function') {
20
- return 'unsupported';
21
- }
22
-
23
- return this.NotificationImpl.requestPermission();
17
+ return typeof this.NotificationImpl === 'function'
18
+ ? this.NotificationImpl.requestPermission()
19
+ : 'unsupported';
24
20
  }
25
21
 
26
22
  createNotification({ body, onClick, tag, title }) {
@@ -1,3 +1,20 @@
1
+ function readStorage(storage, key, fallback) {
2
+ try {
3
+ const value = storage.getItem(key);
4
+ return value == null ? fallback : value;
5
+ } catch {
6
+ return fallback;
7
+ }
8
+ }
9
+
10
+ function writeStorage(storage, key, value) {
11
+ try {
12
+ storage.setItem(key, value);
13
+ } catch {
14
+ // Ignore storage errors.
15
+ }
16
+ }
17
+
1
18
  export class BrowserPreferencesPort {
2
19
  constructor({
3
20
  chatNotificationsKey,
@@ -14,66 +31,34 @@ export class BrowserPreferencesPort {
14
31
  }
15
32
 
16
33
  getUserName() {
17
- try {
18
- return this.storage.getItem(this.userNameKey) || '';
19
- } catch {
20
- return '';
21
- }
34
+ return readStorage(this.storage, this.userNameKey, '') || '';
22
35
  }
23
36
 
24
37
  setUserName(name) {
25
- try {
26
- this.storage.setItem(this.userNameKey, name);
27
- } catch {
28
- // Ignore storage errors.
29
- }
38
+ writeStorage(this.storage, this.userNameKey, name);
30
39
  }
31
40
 
32
41
  getLineWrappingEnabled() {
33
- try {
34
- return this.storage.getItem(this.lineWrappingKey) !== 'false';
35
- } catch {
36
- return true;
37
- }
42
+ return readStorage(this.storage, this.lineWrappingKey, null) !== 'false';
38
43
  }
39
44
 
40
45
  setLineWrappingEnabled(enabled) {
41
- try {
42
- this.storage.setItem(this.lineWrappingKey, String(enabled));
43
- } catch {
44
- // Ignore storage errors.
45
- }
46
+ writeStorage(this.storage, this.lineWrappingKey, String(enabled));
46
47
  }
47
48
 
48
49
  getSidebarVisible() {
49
- try {
50
- return this.storage.getItem(this.sidebarVisibleKey);
51
- } catch {
52
- return null;
53
- }
50
+ return readStorage(this.storage, this.sidebarVisibleKey, null);
54
51
  }
55
52
 
56
53
  setSidebarVisible(showSidebar) {
57
- try {
58
- this.storage.setItem(this.sidebarVisibleKey, showSidebar ? 'true' : 'false');
59
- } catch {
60
- // Ignore storage errors.
61
- }
54
+ writeStorage(this.storage, this.sidebarVisibleKey, showSidebar ? 'true' : 'false');
62
55
  }
63
56
 
64
57
  getChatNotificationsEnabled() {
65
- try {
66
- return this.storage.getItem(this.chatNotificationsKey) === 'true';
67
- } catch {
68
- return false;
69
- }
58
+ return readStorage(this.storage, this.chatNotificationsKey, null) === 'true';
70
59
  }
71
60
 
72
61
  setChatNotificationsEnabled(enabled) {
73
- try {
74
- this.storage.setItem(this.chatNotificationsKey, String(enabled));
75
- } catch {
76
- // Ignore storage errors.
77
- }
62
+ writeStorage(this.storage, this.chatNotificationsKey, String(enabled));
78
63
  }
79
64
  }