collabmd 0.1.38 → 0.1.40

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 (334) hide show
  1. package/README.md +7 -1
  2. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-DnBV8gCm.js → CodeMirrorEditor-UCMRAMCV-CjJV4GGp.js} +1 -1
  3. package/dist/client/assets/{ar-SA-NXDWD63E-CTf_wpt3.js → ar-SA-NXDWD63E-BfWwfLiP.js} +1 -1
  4. package/dist/client/assets/{arc-DD8jaAGl.js → arc-B59iLcOr.js} +1 -1
  5. package/dist/client/assets/architecture-7EHR7CIX-M1SFnuBJ.js +1 -0
  6. package/dist/client/assets/{architectureDiagram-Q4EWVU46-BftXiJA8.js → architectureDiagram-3BPJPVTR-Cs4u0ty-.js} +3 -3
  7. package/dist/client/assets/{az-AZ-MXSORGZV-C_C9i9u3.js → az-AZ-MXSORGZV-D3w9H6nC.js} +1 -1
  8. package/dist/client/assets/{bg-BG-O6MV2KSF-YmfvQf63.js → bg-BG-O6MV2KSF-CqITeIE6.js} +1 -1
  9. package/dist/client/assets/blockDiagram-GPEHLZMM-C4RLg7wo.js +132 -0
  10. package/dist/client/assets/{bn-IN-MMW2ORAC-BTEFR4Ed.js → bn-BD-T2VJNT7N-DRxwOMG_.js} +1 -1
  11. package/dist/client/assets/{bn-BD-T2VJNT7N-BD0ob0JE.js → bn-IN-MMW2ORAC-BZcsVFhS.js} +1 -1
  12. package/dist/client/assets/{c4Diagram-AHTNJAMY-Gz7ZAK0d.js → c4Diagram-AAUBKEIU-DMK9WIWS.js} +2 -2
  13. package/dist/client/assets/{ca-ES-MKBCGNOG-aLX_cjA0.js → ca-ES-MKBCGNOG-D2cujUJ7.js} +1 -1
  14. package/dist/client/assets/channel-E9SBQ9z6.js +1 -0
  15. package/dist/client/assets/{chunk-EDXVE4YY-M4QxyGNt.js → chunk-2J33WTMH-Beqll06X.js} +1 -1
  16. package/dist/client/assets/chunk-3OPIFGDE-Kf30X6bZ.js +62 -0
  17. package/dist/client/assets/{chunk-4BX2VUAB-D5YiFdu1.js → chunk-4BX2VUAB-BVNkn9EH.js} +1 -1
  18. package/dist/client/assets/chunk-4EGX6M5U-6L36_8q8.js +1 -0
  19. package/dist/client/assets/{chunk-55IACEB6-VHgZjidg.js → chunk-55IACEB6-CaPPZbdp.js} +1 -1
  20. package/dist/client/assets/chunk-5DO6E6H7-BpgUf0HE.js +1 -0
  21. package/dist/client/assets/chunk-5ZQYHXKU-BJyABJSy.js +2 -0
  22. package/dist/client/assets/chunk-727SXJPM-DNANnyAn.js +206 -0
  23. package/dist/client/assets/chunk-AQP2D5EJ-D-ou9vaq.js +231 -0
  24. package/dist/client/assets/{chunk-LIHQZDEY-DtYrHuCi.js → chunk-BR22UD5L-CHoFxkAQ.js} +1 -1
  25. package/dist/client/assets/{chunk-BSJP7CBP-D2KkrA_B.js → chunk-BSJP7CBP-AmT6zI00.js} +1 -1
  26. package/dist/client/assets/chunk-CSCIHK7Q-BIoF4mTy.js +123 -0
  27. package/dist/client/assets/chunk-FHYWG6QK-qLbgayZT.js +1 -0
  28. package/dist/client/assets/{chunk-FMBD7UC4-qQT7MtX2.js → chunk-FMBD7UC4-DD6CIukb.js} +1 -1
  29. package/dist/client/assets/chunk-KSCS5N6A-DSHzBB4H.js +10 -0
  30. package/dist/client/assets/{chunk-ZZ45TVLE-DGIhE_ST.js → chunk-L5ZTLDWV-Ca0loQr2.js} +1 -1
  31. package/dist/client/assets/chunk-LZXEDZCA-D4QboL2E.js +2 -0
  32. package/dist/client/assets/chunk-MPE355IW-BGGMthoR.js +1 -0
  33. package/dist/client/assets/chunk-MZUSXYTE-CXyCvcyW.js +1 -0
  34. package/dist/client/assets/chunk-N66VUXT2-CZ58QOjk.js +1 -0
  35. package/dist/client/assets/{chunk-YZCP3GAM-D1jf1WUI.js → chunk-ND2GUHAM-3Xs0Awks.js} +1 -1
  36. package/dist/client/assets/chunk-NNHCCRGN--8l6bbR-.js +159 -0
  37. package/dist/client/assets/{chunk-X2U36JSP-D3OEPG7k.js → chunk-NZK2D7GU-w2jXiKa6.js} +1 -1
  38. package/dist/client/assets/{chunk-U2HBQHQK-BBXgsocS.js → chunk-O5CBEL6O-BFgstMja.js} +4 -4
  39. package/dist/client/assets/chunk-PUPMXCY4-JvkUXyIj.js +1 -0
  40. package/dist/client/assets/chunk-QZHKN3VN-9NMPSwDX.js +1 -0
  41. package/dist/client/assets/{chunk-SRAX5OIU-yDw8XRsi.js → chunk-SRAX5OIU-C_UPA-vt.js} +1 -1
  42. package/dist/client/assets/chunk-UIBZB4QT-B4OybPy_.js +1 -0
  43. package/dist/client/assets/chunk-WCWK7LTN-BOL8a2ua.js +1 -0
  44. package/dist/client/assets/chunk-WMDFGAFD-EzVSth95.js +35 -0
  45. package/dist/client/assets/chunk-WU5MYG2G-Bl8VQmZH.js +1 -0
  46. package/dist/client/assets/{chunk-XPW4576I-BUfyrOtN.js → chunk-XPW4576I-D5FnFhOk.js} +1 -1
  47. package/dist/client/assets/{chunk-Z5NKEFVG-Vu8zBV4H.js → chunk-Z5NKEFVG-GcpeeLo6.js} +1 -1
  48. package/dist/client/assets/chunk-tBc3Ke6Z.js +1 -0
  49. package/dist/client/assets/classDiagram-4FO5ZUOK-D7YhYDLZ.js +1 -0
  50. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-COI4atGv.js +1 -0
  51. package/dist/client/assets/{cose-bilkent-S5V4N54A-A8ssRFyt.js → cose-bilkent-S5V4N54A-Cx3Qt7pR.js} +1 -1
  52. package/dist/client/assets/{cs-CZ-V77HGUP7-Du3y53BB.js → cs-CZ-V77HGUP7-BXqhmWZb.js} +1 -1
  53. package/dist/client/assets/{da-DK-I5RFNTM4-CDJtjf5s.js → da-DK-I5RFNTM4-raD_lQnT.js} +1 -1
  54. package/dist/client/assets/dagre-BM42HDAG-BpURvxT4.js +4 -0
  55. package/dist/client/assets/dagre-BcZLxzJJ.js +1 -0
  56. package/dist/client/assets/{de-CH-WLRDEVBV-CLV2tVw6.js → de-CH-WLRDEVBV-CyNG_YAO.js} +1 -1
  57. package/dist/client/assets/{de-DE-DTI4WUSC-B53J0BQ8.js → de-DE-DTI4WUSC-BAnqlByT.js} +1 -1
  58. package/dist/client/assets/diagram-2AECGRRQ-DJH0JVlq.js +43 -0
  59. package/dist/client/assets/{diagram-5BDNPKRD-BuK-UBuN.js → diagram-5GNKFQAL-DQG4Q1eS.js} +2 -2
  60. package/dist/client/assets/diagram-KO2AKTUF-hx21Lv-5.js +3 -0
  61. package/dist/client/assets/{diagram-TYMM5635-CT8BdT4s.js → diagram-LMA3HP47--QODJMa9.js} +1 -1
  62. package/dist/client/assets/diagram-OG6HWLK6-CB30hX1a.js +24 -0
  63. package/dist/client/assets/{dist-DwvSvkOE.js → dist-6oqNX0NJ.js} +1 -1
  64. package/dist/client/assets/dist-B0U2pnHE.js +1 -0
  65. package/dist/client/assets/{dist-aE0_04fl.js → dist-B1BRR2vO.js} +1 -1
  66. package/dist/client/assets/{dist-CQVTTk81.js → dist-B48_21rM.js} +1 -1
  67. package/dist/client/assets/{dist-DdAqzGFU.js → dist-BBsYBvEp.js} +1 -1
  68. package/dist/client/assets/{dist-BiCgLddE.js → dist-BNDWUlMx.js} +1 -1
  69. package/dist/client/assets/{dist-BOP-dC-R.js → dist-BOA6xeuH.js} +1 -1
  70. package/dist/client/assets/{dist-wkd-N1L5.js → dist-BQuic6-d.js} +1 -1
  71. package/dist/client/assets/{dist-D34Xzrah.js → dist-Bhn_Fiol.js} +1 -1
  72. package/dist/client/assets/dist-BoCYrsTA.js +1 -0
  73. package/dist/client/assets/{dist-DPCUH5MO.js → dist-BsTc7qjG.js} +1 -1
  74. package/dist/client/assets/dist-C-W89K9S.js +1 -0
  75. package/dist/client/assets/dist-CAlqrzaF.js +1 -0
  76. package/dist/client/assets/dist-CBTadfRi2.js +1 -0
  77. package/dist/client/assets/{dist-Dbg8P4C5.js → dist-CDsAhnoa.js} +1 -1
  78. package/dist/client/assets/{dist-BScEL4VP.js → dist-CJMPm6rd.js} +1 -1
  79. package/dist/client/assets/{dist-mPPUaHhq.js → dist-CtHMYO6t.js} +1 -1
  80. package/dist/client/assets/dist-D4DGyOvV.js +1 -0
  81. package/dist/client/assets/{dist-DZ2t5lUX.js → dist-D5BVeoD4.js} +1 -1
  82. package/dist/client/assets/{dist-Brrlevif.js → dist-D5hPoFa5.js} +1 -1
  83. package/dist/client/assets/{dist-Bn8WRPs1.js → dist-DCqHC6ts.js} +1 -1
  84. package/dist/client/assets/{dist-CJWCCWEW.js → dist-DFzJ8okV.js} +1 -1
  85. package/dist/client/assets/{dist-v3i1ifes.js → dist-DSehUDUA.js} +1 -1
  86. package/dist/client/assets/{dist-B98fHn5m.js → dist-Dv_PLWtE.js} +1 -1
  87. package/dist/client/assets/{dist-BEKQo64E.js → dist-Dx8yU-RA.js} +1 -1
  88. package/dist/client/assets/{dist-CBEw2W2P.js → dist-U35xPXYU.js} +1 -1
  89. package/dist/client/assets/{dist-CaMl1R6P.js → dist-UnjH15yg.js} +3 -3
  90. package/dist/client/assets/{dist-BE8C_ouo.js → dist-ihRjPW1T.js} +1 -1
  91. package/dist/client/assets/{dist-DQiph4qx.js → dist-q3smPWAL.js} +1 -1
  92. package/dist/client/assets/{dist-DWRyOl2w.js → dist-wA96SVn6.js} +1 -1
  93. package/dist/client/assets/{dist-BPEi1dEF.js → dist-x4M0Qd0y.js} +1 -1
  94. package/dist/client/assets/drawio-editor-BHYoSlR7.js +9 -0
  95. package/dist/client/assets/drawioEditor-B-Ssnq_p.js +2 -0
  96. package/dist/client/assets/editor-session-BTPe8PEu.js +16 -0
  97. package/dist/client/assets/{el-GR-ZXDJ2OS4-DFmRQv0o.js → el-GR-ZXDJ2OS4-De6xlnXD.js} +1 -1
  98. package/dist/client/assets/{embedded-editor-base-CgEkjNYn.css → embedded-editor-base-Bb8ywn1e.css} +1 -1
  99. package/dist/client/assets/{en-CMP6EMR6-D9x8hVSu.js → en-CMP6EMR6-Bfz_MnNa.js} +1 -1
  100. package/dist/client/assets/{erDiagram-SMLLAGMA-6VFZA3Qb.js → erDiagram-TEJ5UH35-BvMeaml9.js} +2 -2
  101. package/dist/client/assets/{es-ES-DYQHAD43-BiGWIrBG.js → es-ES-DYQHAD43-EVQAeFTZ.js} +1 -1
  102. package/dist/client/assets/{eu-ES-QDSYU5Y3-BjwS0kZi.js → eu-ES-QDSYU5Y3-O5XEQp0x.js} +1 -1
  103. package/dist/client/assets/eventmodeling-FCH6USID-DKkN-EFL.js +1 -0
  104. package/dist/client/assets/excalidraw-editor-DzL1T9D9.js +9 -0
  105. package/dist/client/assets/{excalidraw-editor-BZCE9ydu.css → excalidraw-editor-mKBCIvNR.css} +1 -1
  106. package/dist/client/assets/{excalidraw-mermaid-stub-Df0Q2qkW.js → excalidraw-mermaid-stub-B5sWezsO.js} +1 -1
  107. package/dist/client/assets/excalidraw-scene-i7oBzgH8.js +176 -0
  108. package/dist/client/assets/excalidrawEditor-DRxzpbJ-.js +2 -0
  109. package/dist/client/assets/{export-page-4M8Zo-AL.js → export-page-BkCqT_2s.js} +2 -2
  110. package/dist/client/assets/exportDocument-Dj7w1hDJ.js +2 -0
  111. package/dist/client/assets/{fa-IR-26LZG4PM-BgANg2TD.js → fa-IR-26LZG4PM-BlqI3v_N.js} +1 -1
  112. package/dist/client/assets/{fi-FI-6YS4KDE4-CBL5f3oN.js → fi-FI-6YS4KDE4-af5Lkv-j.js} +1 -1
  113. package/dist/client/assets/{flowDiagram-DWJPFMVM-DO9RH8YQ.js → flowDiagram-I6XJVG4X-DgXXcK8y.js} +6 -6
  114. package/dist/client/assets/{fr-FR-BRLLPTZC-CRibNSLG.js → fr-FR-BRLLPTZC-CwQyur9E.js} +1 -1
  115. package/dist/client/assets/ganttDiagram-6RSMTGT7-BMpbo3vT.js +292 -0
  116. package/dist/client/assets/gitGraph-WXDBUCRP-BIQYiPEj.js +1 -0
  117. package/dist/client/assets/gitGraphDiagram-PVQCEYII-CCdpTNJZ.js +106 -0
  118. package/dist/client/assets/{gl-ES-OKUZTLYG-DEDwa_xt.js → gl-ES-OKUZTLYG-BNEoLCI4.js} +1 -1
  119. package/dist/client/assets/graphlib-Dduz6oB8.js +1 -0
  120. package/dist/client/assets/{he-IL-26MGYIU7-47wxy70N.js → he-IL-26MGYIU7-WnVF9HP3.js} +1 -1
  121. package/dist/client/assets/{hi-IN-Q4ZOGTP2-bhV7c3dK.js → hi-IN-Q4ZOGTP2-DcU7ec07.js} +1 -1
  122. package/dist/client/assets/{hu-HU-P2OXPSN5-xG-gBMzE.js → hu-HU-P2OXPSN5-wmJyK1Wq.js} +1 -1
  123. package/dist/client/assets/{id-ID-2EIKXYN6-MQuYaNHo.js → id-ID-2EIKXYN6-BTvn0aFf.js} +1 -1
  124. package/dist/client/assets/image-KGGK4BDN-BtStV6c9.js +1 -0
  125. package/dist/client/assets/index-Cnyy977t.css +1 -0
  126. package/dist/client/assets/{index-CCfHrm_9.js → index-DxQmPZ_f.js} +2 -2
  127. package/dist/client/assets/info-J43DQDTF-CO2Z2J7J.js +1 -0
  128. package/dist/client/assets/{infoDiagram-42DDH7IO-C77Pt7T1.js → infoDiagram-5YYISTIA-oYw2qnNY.js} +1 -1
  129. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-Cy1fwvvg.js → ishikawaDiagram-YF4QCWOH-BPqURwBR.js} +2 -2
  130. package/dist/client/assets/{it-IT-4CFKVXI2-v2kj-y7j.js → it-IT-4CFKVXI2-CC_iQxXu.js} +1 -1
  131. package/dist/client/assets/{ja-JP-MAND2Z4V-BahXSQz-.js → ja-JP-MAND2Z4V-ConJI8GA.js} +1 -1
  132. package/dist/client/assets/{journeyDiagram-VCZTEJTY-CYWaI6re.js → journeyDiagram-JHISSGLW-CvxY2Fte.js} +3 -3
  133. package/dist/client/assets/{jsx-runtime-1KUJVfx8.js → jsx-runtime-IB1e1gmy.js} +1 -1
  134. package/dist/client/assets/{kaa-HQRTCXTJ-BF26ydFa.js → kaa-HQRTCXTJ-Caqwh_Qr.js} +1 -1
  135. package/dist/client/assets/{kab-KAB-JKIKKTGH-CEIH0F80.js → kab-KAB-JKIKKTGH-DQBmYNc9.js} +1 -1
  136. package/dist/client/assets/{kanban-definition-6JOO6SKY-DY1xE7tm.js → kanban-definition-UN3LZRKU-Ex7702dO.js} +6 -6
  137. package/dist/client/assets/{kk-KZ-HXQ63ZFC-CxWjc9Sf.js → kk-KZ-HXQ63ZFC-O5qp74q-.js} +1 -1
  138. package/dist/client/assets/{km-KH-PKL3LSGX-DJlCteEp.js → km-KH-PKL3LSGX-2wUYTyyo.js} +1 -1
  139. package/dist/client/assets/{ko-KR-KXLREZX3-B1gtI_ci.js → ko-KR-KXLREZX3-CYtUnW5t.js} +1 -1
  140. package/dist/client/assets/{ku-TR-MJ4IER3X-Bf41y2v2.js → ku-TR-MJ4IER3X-DtEKOAU3.js} +1 -1
  141. package/dist/client/assets/line-DRJILpPI.js +1 -0
  142. package/dist/client/assets/{linear-dsIQT_iU.js → linear-rFRiXd2u.js} +1 -1
  143. package/dist/client/assets/{lt-LT-H6WFQ6FJ-DA1or-Eo.js → lt-LT-H6WFQ6FJ-Cs17Ppdf.js} +1 -1
  144. package/dist/client/assets/{lv-LV-GOCK6SJW-qa0BoYMm.js → lv-LV-GOCK6SJW-DYuTyosz.js} +1 -1
  145. package/dist/client/assets/{main-BQMPQ4CW.js → main-iuYcGt-A.js} +11 -7
  146. package/dist/client/assets/mermaid-parser.core-BD_OCbyj.js +4 -0
  147. package/dist/client/assets/mermaid-runtime-CEgpdpwB.js +9 -0
  148. package/dist/client/assets/{mindmap-definition-QFDTVHPH-DB_M5r-j.js → mindmap-definition-RKZ34NQL-D4pwLdMH.js} +23 -23
  149. package/dist/client/assets/{mr-IN-IXVLDMEQ-DXFRgvgb.js → mr-IN-IXVLDMEQ-CIJFnklt.js} +1 -1
  150. package/dist/client/assets/{my-MM-YG6MYTTD-BKDIfalJ.js → my-MM-YG6MYTTD-em_7TGWX.js} +1 -1
  151. package/dist/client/assets/{nb-NO-XGWJISD2-DbwbopH8.js → nb-NO-XGWJISD2-BLNgPVDj.js} +1 -1
  152. package/dist/client/assets/{nl-NL-XVDVCPNC-ChSneTSU.js → nl-NL-XVDVCPNC-CComxzvg.js} +1 -1
  153. package/dist/client/assets/{nn-NO-EMX5MJX5-Cf7ZWKWZ.js → nn-NO-EMX5MJX5-Cekj8s_-.js} +1 -1
  154. package/dist/client/assets/{oc-FR-ROEINTVO-lM7Nl7hD.js → oc-FR-ROEINTVO-DW-kHJ81.js} +1 -1
  155. package/dist/client/assets/{ordinal-Dz3y_j0K.js → ordinal-De-qfORd.js} +1 -1
  156. package/dist/client/assets/{pa-IN-ZYN6SUDY-C9WNUTeR.js → pa-IN-ZYN6SUDY-CnhULOGp.js} +1 -1
  157. package/dist/client/assets/packet-YPE3B663-VxGcYggl.js +1 -0
  158. package/dist/client/assets/percentages-5DKR754L-Ug3UfchV.js +1 -0
  159. package/dist/client/assets/{pica-CgGaIJly.js → pica-DcQ1xKp1.js} +1 -1
  160. package/dist/client/assets/pie-LRSECV5Y-7RrvmmEk.js +1 -0
  161. package/dist/client/assets/pieDiagram-4H26LBE5-C6MCExtR.js +30 -0
  162. package/dist/client/assets/{pl-PL-6VTG7PHC-DqRVepnC.js → pl-PL-6VTG7PHC-C9rBsz9v.js} +1 -1
  163. package/dist/client/assets/{preview-render-compiler-IUtgIlOM.js → preview-render-compiler-CSggyCbw.js} +1 -1
  164. package/dist/client/assets/preview-render-compiler-TPMesM_L.js +1 -0
  165. package/dist/client/assets/{preview-render-profile-Bf6R7v4w.js → preview-render-profile-CQR0o67h.js} +5 -5
  166. package/dist/client/assets/{preview-render-worker-BwQ5sPy9.js → preview-render-worker-CifbXdlx.js} +2 -2
  167. package/dist/client/assets/{pt-BR-5YFKRR5G-CopLYEA6.js → pt-BR-5YFKRR5G-BVyxOCjg.js} +1 -1
  168. package/dist/client/assets/{pt-PT-GEIXXZ67-BjZ_Lphg.js → pt-PT-GEIXXZ67-5CbVaVay.js} +1 -1
  169. package/dist/client/assets/quadrantDiagram-W4KKPZXB-CD77Rny0.js +7 -0
  170. package/dist/client/assets/quick-switcher-controller-CVJBt6V9.js +12 -0
  171. package/dist/client/assets/radar-GUYGQ44K-2SBnfFng.js +1 -0
  172. package/dist/client/assets/{requirementDiagram-MS252O5E-CtUIQnWa.js → requirementDiagram-4Y6WPE33-DdKM6ZWI.js} +4 -4
  173. package/dist/client/assets/{ro-RO-E2P6TFZI-DakDz5Xu.js → ro-RO-E2P6TFZI-DANwkfep.js} +1 -1
  174. package/dist/client/assets/{room-z2w9b96b.js → room-Cha55fQg.js} +1 -1
  175. package/dist/client/assets/{ru-RU-YBIIY43T-BMvCT-XT.js → ru-RU-YBIIY43T-BWZSxhA5.js} +1 -1
  176. package/dist/client/assets/runtime-config-CM_2pVYD.js +1 -0
  177. package/dist/client/assets/{sankeyDiagram-XADWPNL6-tcSeuifE.js → sankeyDiagram-5OEKKPKP-BH3_LNkI.js} +36 -6
  178. package/dist/client/assets/sequenceDiagram-3UESZ5HK-CCGL7FMW.js +162 -0
  179. package/dist/client/assets/{si-LK-673C2CI2-hGdH1S9E.js → si-LK-673C2CI2-Bqr808AJ.js} +1 -1
  180. package/dist/client/assets/{sk-SK-CKZHQ4AP-DiRA-fj8.js → sk-SK-CKZHQ4AP-B2PvXXeU.js} +1 -1
  181. package/dist/client/assets/{sl-SI-557H2GWM-DN94n_1-.js → sl-SI-557H2GWM-IPVDhzgb.js} +1 -1
  182. package/dist/client/assets/{src-BuiVcSz-.js → src-BshjqEL2.js} +1 -1
  183. package/dist/client/assets/stateDiagram-AJRCARHV-ljJcYRX4.js +1 -0
  184. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DXm0ynOB.js +1 -0
  185. package/dist/client/assets/subset-shared.chunk-C9mEHUfV.js +1 -0
  186. package/dist/client/assets/{subset-worker.chunk-kj1e3wjW.js → subset-worker.chunk-BW_EF59g.js} +1 -1
  187. package/dist/client/assets/{sv-SE-XOPKKDWS-CkHUNABj.js → sv-SE-XOPKKDWS-CQipq9Nf.js} +1 -1
  188. package/dist/client/assets/{ta-IN-XBH7DQI3-W-157oVK.js → ta-IN-XBH7DQI3-Cj2o89vS.js} +1 -1
  189. package/dist/client/assets/{th-TH-TOCWH3R4-BsU-Pydr.js → th-TH-TOCWH3R4-IOX-l13w.js} +1 -1
  190. package/dist/client/assets/{timeline-definition-GMOUNBTQ-Bs6U53Mo.js → timeline-definition-PNZ67QCA-CUVPem2o.js} +5 -5
  191. package/dist/client/assets/{tr-TR-GXW6CYY5-CTddyq89.js → tr-TR-GXW6CYY5-DBVLEsZg.js} +1 -1
  192. package/dist/client/assets/treeView-BLDUP644-DItqHrxu.js +1 -0
  193. package/dist/client/assets/treemap-LRROVOQU-DD1ESKp7.js +1 -0
  194. package/dist/client/assets/{uk-UA-IJKTNUDG-1LzXkII3.js → uk-UA-IJKTNUDG-C5kaymku.js} +1 -1
  195. package/dist/client/assets/{uz-UZ-TBZZEA4V-kqm-qcUj.js → uz-UZ-TBZZEA4V-lMna4tx1.js} +1 -1
  196. package/dist/client/assets/{vault-api-client-BDKKvtOF.js → vault-api-client-Fa51l2lE.js} +1 -1
  197. package/dist/client/assets/{vault-utils-CRpy8MQz.js → vault-utils-BbJUHPCf.js} +1 -1
  198. package/dist/client/assets/vennDiagram-CIIHVFJN-Bb1KSPKA.js +34 -0
  199. package/dist/client/assets/{vi-VN-MULSGNVB-C3H2AUhm.js → vi-VN-MULSGNVB-BAcoCjsz.js} +1 -1
  200. package/dist/client/assets/wardley-L42UT6IY-BoSI-SvR.js +1 -0
  201. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-C-scJfPY.js → wardleyDiagram-YWT4CUSO-EdTzLQiR.js} +61 -3
  202. package/dist/client/assets/{xychartDiagram-5P7HB3ND-D3nQoxhz.js → xychartDiagram-2RQKCTM6-BoQFrGlt.js} +3 -3
  203. package/dist/client/assets/{zh-CN-MVX3E32U-BULPbsyl.js → zh-CN-MVX3E32U-sW-DCFHP.js} +1 -1
  204. package/dist/client/assets/{zh-HK-JNU5RLIE-bNGmeSaW.js → zh-HK-JNU5RLIE-Duqu8EG_.js} +1 -1
  205. package/dist/client/assets/{zh-TW-LENVCA6T-CQDp064P.js → zh-TW-LENVCA6T-BHC0OLnd.js} +1 -1
  206. package/dist/client/drawio-editor.html +1 -1
  207. package/dist/client/excalidraw-editor.html +1 -1
  208. package/dist/client/export-document.html +1 -1
  209. package/dist/client/index.html +2 -2
  210. package/package.json +15 -15
  211. package/src/client/application/mermaid-preview-hydrator.js +26 -8
  212. package/src/client/application/preview-renderer.js +6 -1
  213. package/src/client/application/quick-switcher-loader.js +14 -0
  214. package/src/client/application/workspace-route-controller.js +14 -0
  215. package/src/client/domain/drawio-frame-load.js +28 -0
  216. package/src/client/domain/excalidraw-collaboration.js +50 -0
  217. package/src/client/domain/excalidraw-scene-reconcile.js +38 -0
  218. package/src/client/domain/hash-routes.js +16 -1
  219. package/src/client/domain/mermaid-language.js +179 -0
  220. package/src/client/domain/runtime-paths.js +7 -0
  221. package/src/client/drawio-editor.js +23 -10
  222. package/src/client/excalidraw-editor.js +143 -61
  223. package/src/client/infrastructure/editor-session.js +4 -0
  224. package/src/client/infrastructure/editor-view-adapter.js +37 -2
  225. package/src/client/infrastructure/excalidraw-room-client.js +139 -27
  226. package/src/client/infrastructure/runtime-config.js +17 -2
  227. package/src/client/infrastructure/vault-api-client.js +11 -0
  228. package/src/client/presentation/app-shell-template.js +4 -0
  229. package/src/client/presentation/drawio-embed-controller.js +230 -64
  230. package/src/client/presentation/excalidraw-embed-controller.js +51 -60
  231. package/src/client/presentation/quick-switcher-controller.js +217 -21
  232. package/src/client/presentation/quick-switcher-text-search.js +125 -0
  233. package/src/client/styles/features/diagram-preview.css +43 -23
  234. package/src/client/styles/features/quick-switcher.css +153 -15
  235. package/src/client/styles/layout/shell.css +6 -3
  236. package/src/client/styles/surfaces/embedded-editor-base.css +2 -1
  237. package/src/client/styles/surfaces/excalidraw-editor.css +4 -0
  238. package/src/domain/excalidraw-room-codec.js +1 -17
  239. package/src/server/config/env.js +1 -0
  240. package/src/server/create-app-server.js +29 -6
  241. package/src/server/domain/ripgrep-search-service.js +365 -0
  242. package/src/server/infrastructure/http/create-request-handler.js +3 -1
  243. package/src/server/infrastructure/http/create-static-handler.js +10 -1
  244. package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
  245. package/src/server/infrastructure/http/create-vault-api-query-handler.js +38 -2
  246. package/src/server/infrastructure/workspace/file-system-sync-service.js +4 -0
  247. package/dist/client/assets/_baseFor-BSErPbF2.js +0 -1
  248. package/dist/client/assets/architecture-YZFGNWBL-DWWrde02.js +0 -1
  249. package/dist/client/assets/blockDiagram-DXYQGD6D-6UN-nR8-.js +0 -132
  250. package/dist/client/assets/channel-XGCkuPi6.js +0 -1
  251. package/dist/client/assets/chunk-2KRD3SAO-CFcF2aNP.js +0 -1
  252. package/dist/client/assets/chunk-336JU56O-DvrrHsJT.js +0 -2
  253. package/dist/client/assets/chunk-426QAEUC-CEbmCgux.js +0 -1
  254. package/dist/client/assets/chunk-4TB4RGXK-CoouNThi.js +0 -206
  255. package/dist/client/assets/chunk-5FUZZQ4R-CxIIxXPy.js +0 -62
  256. package/dist/client/assets/chunk-5PVQY5BW-ciE7eHID.js +0 -2
  257. package/dist/client/assets/chunk-67CJDMHE-CW-fbgQB.js +0 -1
  258. package/dist/client/assets/chunk-7N4EOEYR-DbAW6XnF.js +0 -1
  259. package/dist/client/assets/chunk-AA7GKIK3-ClDHDAza.js +0 -1
  260. package/dist/client/assets/chunk-CIAEETIT-BnB8a6HR.js +0 -1
  261. package/dist/client/assets/chunk-ENJZ2VHE-BQj_1YA_.js +0 -10
  262. package/dist/client/assets/chunk-FOC6F5B3-Bw6XfKDP.js +0 -1
  263. package/dist/client/assets/chunk-ICPOFSXX-DqJi89rc.js +0 -122
  264. package/dist/client/assets/chunk-K5T4RW27-CQtjKF2g.js +0 -94
  265. package/dist/client/assets/chunk-KGLVRYIC-BWSPiKjp.js +0 -1
  266. package/dist/client/assets/chunk-ORNJ4GCN-Csga44e5.js +0 -1
  267. package/dist/client/assets/chunk-OYMX7WX6-DvtmCasj.js +0 -231
  268. package/dist/client/assets/chunk-QZHKN3VN-CHVH9_3S.js +0 -1
  269. package/dist/client/assets/chunk-YHkbxXgt.js +0 -1
  270. package/dist/client/assets/chunk-YKPWT25G-GISHuloq.js +0 -35
  271. package/dist/client/assets/classDiagram-6PBFFD2Q-D1KhAUL3.js +0 -1
  272. package/dist/client/assets/classDiagram-v2-HSJHXN6E-BSyyJpnR.js +0 -1
  273. package/dist/client/assets/clone-DI0bYZ1L.js +0 -1
  274. package/dist/client/assets/dagre-Dn6rkrte.js +0 -1
  275. package/dist/client/assets/dagre-KV5264BT-COzej2en.js +0 -4
  276. package/dist/client/assets/diagram-G4DWMVQ6-CbswIU9X.js +0 -24
  277. package/dist/client/assets/diagram-MMDJMWI5-BE-yOVGX.js +0 -43
  278. package/dist/client/assets/dist-BfVljg0L2.js +0 -1
  279. package/dist/client/assets/dist-CcG3Y7Wp.js +0 -1
  280. package/dist/client/assets/dist-CghBwrO3.js +0 -1
  281. package/dist/client/assets/dist-Csbx9lQ-.js +0 -1
  282. package/dist/client/assets/dist-DLyohOXi.js +0 -1
  283. package/dist/client/assets/dist-WXLmfDGg.js +0 -1
  284. package/dist/client/assets/drawio-editor-BHI0pLby.js +0 -9
  285. package/dist/client/assets/drawioEditor-DOaXwaY2.js +0 -2
  286. package/dist/client/assets/editor-session-BFsA-WRc.js +0 -16
  287. package/dist/client/assets/excalidraw-editor-6pgH2kf5.js +0 -9
  288. package/dist/client/assets/excalidraw-scene-MyNAJi2A.js +0 -176
  289. package/dist/client/assets/excalidrawEditor-Ck9hgrTa.js +0 -2
  290. package/dist/client/assets/exportDocument-mlXOym-R.js +0 -2
  291. package/dist/client/assets/flatten-DjXjUsvv.js +0 -1
  292. package/dist/client/assets/ganttDiagram-T4ZO3ILL-B-NMvHWN.js +0 -292
  293. package/dist/client/assets/gitGraph-7Q5UKJZL-DWNinXu4.js +0 -1
  294. package/dist/client/assets/gitGraphDiagram-UUTBAWPF-B95qkCUx.js +0 -106
  295. package/dist/client/assets/graphlib-CAwOVCJc.js +0 -1
  296. package/dist/client/assets/image-J2CAS7OM-DD4DaQTs.js +0 -1
  297. package/dist/client/assets/index-maPm_Kvk.css +0 -1
  298. package/dist/client/assets/info-OMHHGYJF-DtYG_rX0.js +0 -1
  299. package/dist/client/assets/isEmpty-CpfhGGBo.js +0 -1
  300. package/dist/client/assets/line-BCItEgq3.js +0 -1
  301. package/dist/client/assets/mermaid-parser.core-CsTVsPcD.js +0 -4
  302. package/dist/client/assets/mermaid-runtime-BGlnoUXY.js +0 -11
  303. package/dist/client/assets/packet-4T2RLAQJ-CUVefhAv.js +0 -1
  304. package/dist/client/assets/percentages-5DKR754L-DuhOjTM2.js +0 -1
  305. package/dist/client/assets/pie-ZZUOXDRM-BHBJ1dLX.js +0 -1
  306. package/dist/client/assets/pieDiagram-DEJITSTG-BOo-WzjZ.js +0 -30
  307. package/dist/client/assets/preview-render-compiler-9SmLUP5V.js +0 -1
  308. package/dist/client/assets/quadrantDiagram-34T5L4WZ-2vfo0l5S.js +0 -7
  309. package/dist/client/assets/quick-switcher-controller-B1erSgJ1.js +0 -5
  310. package/dist/client/assets/radar-PYXPWWZC-2jR4qZNU.js +0 -1
  311. package/dist/client/assets/reduce-ChpYjEUB.js +0 -1
  312. package/dist/client/assets/runtime-config-BcUbZKho.js +0 -1
  313. package/dist/client/assets/sequenceDiagram-FGHM5R23-DtF-1Kt2.js +0 -157
  314. package/dist/client/assets/stateDiagram-FHFEXIEX-DKk7Sb0f.js +0 -1
  315. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DJUaiADr.js +0 -1
  316. package/dist/client/assets/subset-shared.chunk-CWNYNLru.js +0 -1
  317. package/dist/client/assets/treeView-SZITEDCU-DN5dP2ol.js +0 -1
  318. package/dist/client/assets/treemap-W4RFUUIX-Dva7DBJR.js +0 -1
  319. package/dist/client/assets/vennDiagram-DHZGUBPP-DNnIjRae.js +0 -34
  320. package/dist/client/assets/wardley-RL74JXVD-CDZW5uzY.js +0 -1
  321. /package/dist/client/assets/{array-B3agRrCs.js → array-7rJMcyYQ.js} +0 -0
  322. /package/dist/client/assets/{cytoscape.esm-BurByw8X.js → cytoscape.esm-B_ygTtvl.js} +0 -0
  323. /package/dist/client/assets/{defaultLocale-B_FbTTbl.js → defaultLocale-DKHHE2Ij.js} +0 -0
  324. /package/dist/client/assets/{drawio-room-1i6Nn0_Z.js → drawio-room-DrZ-gy4N.js} +0 -0
  325. /package/dist/client/assets/{excalidraw-mermaid-stub-DzxtBcQW.js → excalidraw-mermaid-stub-Co4Okjfg.js} +0 -0
  326. /package/dist/client/assets/{file-kind-DmKq2MvD.js → file-kind-DLz-bCzA.js} +0 -0
  327. /package/dist/client/assets/{image-blob-reduce.esm-D8JQdTFk.js → image-blob-reduce.esm-CRyv8pnU.js} +0 -0
  328. /package/dist/client/assets/{init-DtLQcSuO.js → init-EmgYNkpL.js} +0 -0
  329. /package/dist/client/assets/{katex-CXYULLWy.js → katex-Beiidjxi.js} +0 -0
  330. /package/dist/client/assets/{path-DIlZIGue.js → path-vqW-z8T-.js} +0 -0
  331. /package/dist/client/assets/{preview-diagram-utils-Nqpp4FNV.js → preview-diagram-utils-D94KrSQH.js} +0 -0
  332. /package/dist/client/assets/{rough.esm-BU2knLt9.js → rough.esm-DE_lJ5Ge.js} +0 -0
  333. /package/dist/client/assets/{roundRect-BzEouiv_.js → roundRect-BMsJLtvm.js} +0 -0
  334. /package/dist/client/assets/{yjs-provider-reset-guard-DSPzcvAO.js → yjs-provider-reset-guard-CNmMf4Qd.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "collabmd",
3
- "version": "0.1.38",
3
+ "version": "0.1.40",
4
4
  "type": "module",
5
5
  "description": "Collaborative markdown vault — like Obsidian, but online. Serve any directory of markdown files for realtime collaborative editing.",
6
6
  "repository": {
@@ -63,7 +63,7 @@
63
63
  },
64
64
  "license": "MIT",
65
65
  "dependencies": {
66
- "@codemirror/autocomplete": "^6.20.1",
66
+ "@codemirror/autocomplete": "^6.20.2",
67
67
  "@codemirror/commands": "^6.10.3",
68
68
  "@codemirror/lang-markdown": "^6.5.0",
69
69
  "@codemirror/lang-yaml": "^6.1.3",
@@ -72,23 +72,23 @@
72
72
  "@codemirror/search": "^6.7.0",
73
73
  "@codemirror/state": "^6.6.0",
74
74
  "@codemirror/theme-one-dark": "^6.1.3",
75
- "@codemirror/view": "^6.41.1",
76
- "@excalidraw/excalidraw": "0.18.0-b1c6bfc",
75
+ "@codemirror/view": "^6.42.1",
76
+ "@excalidraw/excalidraw": "0.18.0-0457ac9",
77
77
  "@fontsource-variable/inter": "^5.2.8",
78
78
  "@fontsource/jetbrains-mono": "^5.2.8",
79
79
  "@turbodocx/html-to-docx": "^1.20.1",
80
- "archiver": "^7.0.1",
80
+ "archiver": "^8.0.0",
81
81
  "highlight.js": "^11.11.1",
82
82
  "js-yaml": "^4.1.1",
83
83
  "lib0": "^0.2.117",
84
- "lit-html": "^3.3.2",
84
+ "lit-html": "^3.3.3",
85
85
  "markdown-it": "^14.1.1",
86
- "mermaid": "^11.14.0",
86
+ "mermaid": "^11.15.0",
87
87
  "openid-client": "^6.8.4",
88
- "react": "^19.2.5",
89
- "react-dom": "^19.2.5",
88
+ "react": "^19.2.6",
89
+ "react-dom": "^19.2.6",
90
90
  "sharp": "^0.34.5",
91
- "ws": "^8.20.0",
91
+ "ws": "^8.20.1",
92
92
  "y-codemirror.next": "^0.3.5",
93
93
  "y-protocols": "^1.0.7",
94
94
  "y-websocket": "^3.0.0",
@@ -101,12 +101,12 @@
101
101
  },
102
102
  "devDependencies": {
103
103
  "@eslint/js": "^10.0.1",
104
- "@playwright/test": "^1.59.1",
105
- "@vitest/browser": "^4.1.5",
106
- "@vitest/browser-playwright": "^4.1.5",
104
+ "@playwright/test": "^1.60.0",
105
+ "@vitest/browser": "^4.1.6",
106
+ "@vitest/browser-playwright": "^4.1.6",
107
107
  "eslint": "^10.3.0",
108
108
  "globals": "^17.6.0",
109
- "vite": "^8.0.10",
110
- "vitest": "^4.1.5"
109
+ "vite": "^8.0.13",
110
+ "vitest": "^4.1.6"
111
111
  }
112
112
  }
@@ -188,8 +188,10 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
188
188
  configureMermaid(mermaid) {
189
189
  mermaid.initialize({
190
190
  startOnLoad: false,
191
+ htmlLabels: false,
191
192
  flowchart: {
192
193
  defaultRenderer: 'dagre-wrapper',
194
+ htmlLabels: false,
193
195
  useMaxWidth: true,
194
196
  },
195
197
  class: {
@@ -259,6 +261,18 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
259
261
  console.warn('[preview] Mermaid runtime failed to load:', error);
260
262
  }
261
263
 
264
+ createRenderHost() {
265
+ const renderHost = document.createElement('div');
266
+ renderHost.style.position = 'fixed';
267
+ renderHost.style.left = '-10000px';
268
+ renderHost.style.top = '0';
269
+ renderHost.style.width = '1200px';
270
+ renderHost.style.visibility = 'hidden';
271
+ renderHost.style.pointerEvents = 'none';
272
+ document.body.appendChild(renderHost);
273
+ return renderHost;
274
+ }
275
+
262
276
  async hydrateShell(shell, mermaid) {
263
277
  if (!mermaid || !shell?.isConnected || this.isShellHydrated(shell)) {
264
278
  return;
@@ -302,15 +316,20 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
302
316
  diagram.setAttribute('data-source-line-end', sourceLineEnd);
303
317
  }
304
318
  diagram.textContent = source;
305
- shell.appendChild(diagram);
306
319
 
307
- await mermaid.run({ nodes: [diagram] });
308
- if (!diagram.isConnected || shell !== diagram.parentElement) {
309
- return;
310
- }
320
+ const renderHost = this.createRenderHost();
321
+ try {
322
+ renderHost.appendChild(diagram);
323
+ await mermaid.run({ nodes: [diagram] });
324
+ if (!diagram.isConnected || diagram.parentElement !== renderHost || !shell.isConnected) {
325
+ return;
326
+ }
311
327
 
312
- this.enhanceDiagram(shell, diagram);
313
- this.markShellHydrated(shell);
328
+ this.enhanceDiagram(shell, diagram);
329
+ this.markShellHydrated(shell);
330
+ } finally {
331
+ renderHost.remove();
332
+ }
314
333
  } catch (error) {
315
334
  console.warn('[preview] Mermaid render failed:', error);
316
335
  shell.querySelector(':scope > .mermaid-toolbar')?.remove();
@@ -443,7 +462,6 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
443
462
  renderedDiagram.remove();
444
463
  return;
445
464
  }
446
-
447
465
  const toolbar = document.createElement('div');
448
466
  toolbar.className = 'mermaid-toolbar diagram-preview-toolbar';
449
467
  const leftGroup = document.createElement('div');
@@ -133,7 +133,12 @@ export class PreviewRenderer {
133
133
  }
134
134
 
135
135
  Array.from(this.previewElement.children).forEach((child) => {
136
- if (child === renderHost || child.dataset.excalidrawOverlayRoot === 'true' || child.dataset.videoOverlayRoot === 'true') {
136
+ if (
137
+ child === renderHost
138
+ || child.dataset.drawioOverlayRoot === 'true'
139
+ || child.dataset.excalidrawOverlayRoot === 'true'
140
+ || child.dataset.videoOverlayRoot === 'true'
141
+ ) {
137
142
  return;
138
143
  }
139
144
 
@@ -22,10 +22,24 @@ export async function ensureQuickSwitcherInstance(host) {
22
22
  if (!host.quickSwitcher) {
23
23
  host.quickSwitcher = new QuickSwitcherController({
24
24
  getFileList: () => host.fileExplorer.flatFiles,
25
+ getSearchConfig: () => host.runtimeConfig.search ?? {},
25
26
  onFileSelect: (filePath) => host.handleFileSelection(filePath, {
26
27
  closeSidebarOnMobile: true,
27
28
  revealInTree: true,
28
29
  }),
30
+ onTextMatchSelect: (match) => {
31
+ if (!match?.file) {
32
+ return;
33
+ }
34
+
35
+ host.navigation.navigateToFile(match.file, {
36
+ column: match.column,
37
+ drawioMode: match.kind === 'drawio' ? 'text' : null,
38
+ line: match.line,
39
+ matchLength: match.matchLength,
40
+ });
41
+ },
42
+ searchText: (payload) => host.vaultApiClient.searchText(payload),
29
43
  });
30
44
  }
31
45
 
@@ -127,6 +127,7 @@ export class WorkspaceRouteController {
127
127
 
128
128
  this.setSidebarTab('files');
129
129
  await this.openFile(route.filePath, { drawioMode: route.drawioMode || null });
130
+ this.revealEditorMatch(route);
130
131
  this.requestPreviewRouteAnchor?.(route.anchor ?? null, route.filePath);
131
132
  }
132
133
 
@@ -311,6 +312,19 @@ export class WorkspaceRouteController {
311
312
  this.fileExplorer.revealFile?.(filePath, { clearSearch });
312
313
  }
313
314
 
315
+ revealEditorMatch(route = {}) {
316
+ if (!Number.isFinite(route.line)) {
317
+ return false;
318
+ }
319
+
320
+ const session = this.workspaceCoordinator.getSession?.();
321
+ return session?.revealSearchMatch?.({
322
+ column: route.column,
323
+ length: route.matchLength,
324
+ line: route.line,
325
+ }) ?? session?.scrollToLine?.(route.line, 0.2) ?? false;
326
+ }
327
+
314
328
  resetPreviewSurface() {
315
329
  this.imageLightbox?.close?.();
316
330
  this.previewRenderer.setHydrationPaused(false);
@@ -0,0 +1,28 @@
1
+ export function createDrawioFrameLoadPayload({
2
+ currentTheme = 'dark',
3
+ currentXml = '',
4
+ isEditor = false,
5
+ isExportImageMode = false,
6
+ } = {}) {
7
+ const theme = currentTheme === 'light' ? 'simple' : 'dark';
8
+ return {
9
+ autosave: isEditor && !isExportImageMode ? 1 : 0,
10
+ dark: currentTheme === 'dark' ? 1 : 0,
11
+ modified: 'unsavedChanges',
12
+ noExitBtn: 1,
13
+ noSaveBtn: isExportImageMode ? 1 : (isEditor ? 0 : 1),
14
+ saveAndExit: 0,
15
+ theme,
16
+ xml: String(currentXml || ''),
17
+ };
18
+ }
19
+
20
+ export function createDrawioFrameLoadSignature(payload = {}) {
21
+ return JSON.stringify({
22
+ autosave: payload.autosave ?? 0,
23
+ dark: payload.dark ?? 0,
24
+ noSaveBtn: payload.noSaveBtn ?? 1,
25
+ theme: payload.theme ?? 'dark',
26
+ xml: String(payload.xml ?? ''),
27
+ });
28
+ }
@@ -138,6 +138,56 @@ export function buildCollaboratorsMap(awareness) {
138
138
  return collaborators;
139
139
  }
140
140
 
141
+ export function buildRenderableCollaboratorsMap(collaborators) {
142
+ const renderable = new Map();
143
+ if (!(collaborators instanceof Map)) {
144
+ return renderable;
145
+ }
146
+
147
+ collaborators.forEach((collaborator, key) => {
148
+ if (!collaborator?.isCurrentUser) {
149
+ renderable.set(key, collaborator);
150
+ }
151
+ });
152
+
153
+ return renderable;
154
+ }
155
+
156
+ function serializeCollaboratorForRenderSignature(key, collaborator = {}) {
157
+ const pointer = collaborator.pointer || {};
158
+ const viewport = collaborator.viewport || {};
159
+ const selectedElementIds = collaborator.selectedElementIds && typeof collaborator.selectedElementIds === 'object'
160
+ ? Object.keys(collaborator.selectedElementIds).sort()
161
+ : [];
162
+
163
+ return [
164
+ key,
165
+ collaborator.button || 'up',
166
+ collaborator.color?.background || '',
167
+ collaborator.color?.stroke || '',
168
+ collaborator.id || '',
169
+ pointer.tool || '',
170
+ pointer.x ?? null,
171
+ pointer.y ?? null,
172
+ selectedElementIds,
173
+ collaborator.socketId || '',
174
+ collaborator.username || '',
175
+ viewport.scrollX ?? null,
176
+ viewport.scrollY ?? null,
177
+ viewport.zoom ?? null,
178
+ ];
179
+ }
180
+
181
+ export function getCollaboratorsRenderSignature(collaborators) {
182
+ if (!(collaborators instanceof Map) || collaborators.size === 0) {
183
+ return '';
184
+ }
185
+
186
+ return JSON.stringify([...collaborators.entries()]
187
+ .sort(([leftKey], [rightKey]) => String(leftKey).localeCompare(String(rightKey)))
188
+ .map(([key, collaborator]) => serializeCollaboratorForRenderSignature(key, collaborator)));
189
+ }
190
+
141
191
  export function findCollaboratorByPeerId(collaborators, peerId) {
142
192
  if (!(collaborators instanceof Map) || !peerId) {
143
193
  return null;
@@ -0,0 +1,38 @@
1
+ export function buildReconciledExcalidrawSceneUpdate({
2
+ appStateOverrides = {},
3
+ currentAppState,
4
+ currentElements = [],
5
+ documentViewState = {},
6
+ includeUnchangedAppState = false,
7
+ reconcileElementsFn,
8
+ restoreAppStateFn,
9
+ restoreElementsFn,
10
+ scene,
11
+ theme = 'dark',
12
+ } = {}) {
13
+ const restoredElements = restoreElementsFn(scene?.elements || [], currentElements, {
14
+ repairBindings: true,
15
+ });
16
+ const restoredAppState = restoreAppStateFn(scene?.appState || {}, currentAppState);
17
+ const nextAppState = {
18
+ theme,
19
+ viewBackgroundColor: restoredAppState.viewBackgroundColor ?? '#ffffff',
20
+ gridSize: restoredAppState.gridSize ?? null,
21
+ ...documentViewState,
22
+ ...appStateOverrides,
23
+ };
24
+ const appStateUpdate = Object.fromEntries(
25
+ Object.entries(nextAppState).filter(([key, value]) => (
26
+ includeUnchangedAppState || currentAppState?.[key] !== value
27
+ )),
28
+ );
29
+ const update = {
30
+ elements: reconcileElementsFn(currentElements, restoredElements, currentAppState),
31
+ };
32
+
33
+ if (Object.keys(appStateUpdate).length > 0) {
34
+ update.appState = appStateUpdate;
35
+ }
36
+
37
+ return update;
38
+ }
@@ -34,7 +34,13 @@ export function isCollabMdHashRoute(hash = '') {
34
34
  return Object.values(HASH_ROUTE_KEYS).some((key) => params.has(key));
35
35
  }
36
36
 
37
- export function createFileRouteHash(filePath, { drawioMode = null, anchor = null } = {}) {
37
+ export function createFileRouteHash(filePath, {
38
+ anchor = null,
39
+ column = null,
40
+ drawioMode = null,
41
+ line = null,
42
+ matchLength = null,
43
+ } = {}) {
38
44
  const params = new URLSearchParams();
39
45
  if (filePath) {
40
46
  params.set(HASH_ROUTE_KEYS.file, filePath);
@@ -45,5 +51,14 @@ export function createFileRouteHash(filePath, { drawioMode = null, anchor = null
45
51
  if (anchor) {
46
52
  params.set('anchor', String(anchor).trim());
47
53
  }
54
+ if (line != null) {
55
+ params.set('line', String(Math.max(1, Math.round(Number(line) || 1))));
56
+ }
57
+ if (column != null) {
58
+ params.set('column', String(Math.max(1, Math.round(Number(column) || 1))));
59
+ }
60
+ if (matchLength != null) {
61
+ params.set('matchLength', String(Math.max(0, Math.round(Number(matchLength) || 0))));
62
+ }
48
63
  return params.toString();
49
64
  }
@@ -0,0 +1,179 @@
1
+ import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';
2
+
3
+ const DIAGRAM_DECLARATIONS = new Set([
4
+ 'block-beta',
5
+ 'classdiagram',
6
+ 'erdiagram',
7
+ 'flowchart',
8
+ 'gantt',
9
+ 'gitgraph',
10
+ 'graph',
11
+ 'journey',
12
+ 'mindmap',
13
+ 'pie',
14
+ 'quadrantchart',
15
+ 'sankey-beta',
16
+ 'sequencediagram',
17
+ 'statediagram',
18
+ 'statediagram-v2',
19
+ 'timeline',
20
+ 'xychart-beta',
21
+ ]);
22
+
23
+ const KEYWORDS = new Set([
24
+ 'accdescr',
25
+ 'acctitle',
26
+ 'actor',
27
+ 'alt',
28
+ 'and',
29
+ 'autonumber',
30
+ 'break',
31
+ 'callback',
32
+ 'class',
33
+ 'classdef',
34
+ 'click',
35
+ 'critical',
36
+ 'dateformat',
37
+ 'direction',
38
+ 'else',
39
+ 'end',
40
+ 'exclude',
41
+ 'include',
42
+ 'interpolate',
43
+ 'link',
44
+ 'linkstyle',
45
+ 'loop',
46
+ 'note',
47
+ 'opt',
48
+ 'par',
49
+ 'participant',
50
+ 'rect',
51
+ 'section',
52
+ 'state',
53
+ 'style',
54
+ 'subgraph',
55
+ 'theme',
56
+ 'title',
57
+ ]);
58
+
59
+ const BOOLEAN_LITERALS = new Set([
60
+ 'false',
61
+ 'no',
62
+ 'off',
63
+ 'on',
64
+ 'true',
65
+ 'yes',
66
+ ]);
67
+
68
+ const FLOW_DIRECTIONS = new Set([
69
+ 'bt',
70
+ 'lr',
71
+ 'rl',
72
+ 'tb',
73
+ 'td',
74
+ ]);
75
+
76
+ function readWord(stream) {
77
+ const match = stream.match(/[A-Za-z_][\w.]*(?:-[A-Za-z0-9_][\w.]*)*/u, false);
78
+ if (!match) {
79
+ return '';
80
+ }
81
+
82
+ stream.match(/[A-Za-z_][\w.]*(?:-[A-Za-z0-9_][\w.]*)*/u);
83
+ return match[0];
84
+ }
85
+
86
+ function readDirective(stream) {
87
+ if (!stream.match('%%{')) {
88
+ return false;
89
+ }
90
+
91
+ if (stream.skipTo('}%%')) {
92
+ stream.match('}%%');
93
+ } else {
94
+ stream.skipToEnd();
95
+ }
96
+
97
+ return true;
98
+ }
99
+
100
+ const mermaidStreamLanguage = StreamLanguage.define({
101
+ languageData: {
102
+ commentTokens: {
103
+ line: '%%',
104
+ },
105
+ },
106
+ token(stream) {
107
+ if (stream.eatSpace()) {
108
+ return null;
109
+ }
110
+
111
+ if (readDirective(stream)) {
112
+ return 'meta';
113
+ }
114
+
115
+ if (stream.match('%%')) {
116
+ stream.skipToEnd();
117
+ return 'comment';
118
+ }
119
+
120
+ if (stream.match(/"(?:[^"\\]|\\.)*"?/u) || stream.match(/'(?:[^'\\]|\\.)*'?/u)) {
121
+ return 'string';
122
+ }
123
+
124
+ if (stream.match(/#[0-9a-f]{3,8}\b/iu) || stream.match(/#[A-Za-z][\w-]*/u)) {
125
+ return 'atom';
126
+ }
127
+
128
+ if (stream.match(/\b\d+(?:\.\d+)?%?\b/u)) {
129
+ return 'number';
130
+ }
131
+
132
+ if (stream.match(/[ox*+<#]?[-=.\\/]+(?:left|right|up|down)?[-=.\\/]*[ox*+>#]?/iu)) {
133
+ return 'operator';
134
+ }
135
+
136
+ if (stream.match(/[{}[\]():,;|]/u)) {
137
+ return 'punctuation';
138
+ }
139
+
140
+ const word = readWord(stream);
141
+ if (word) {
142
+ const normalized = word.toLowerCase();
143
+
144
+ if (DIAGRAM_DECLARATIONS.has(normalized)) {
145
+ return 'meta';
146
+ }
147
+
148
+ if (KEYWORDS.has(normalized)) {
149
+ return 'keyword';
150
+ }
151
+
152
+ if (BOOLEAN_LITERALS.has(normalized)) {
153
+ return 'bool';
154
+ }
155
+
156
+ if (FLOW_DIRECTIONS.has(normalized)) {
157
+ return 'atom';
158
+ }
159
+
160
+ if (/^[A-Z][A-Z0-9_]*$/u.test(word)) {
161
+ return 'typeName';
162
+ }
163
+
164
+ return 'variableName';
165
+ }
166
+
167
+ stream.next();
168
+ return null;
169
+ },
170
+ });
171
+
172
+ export const mermaidLanguage = new LanguageSupport(mermaidStreamLanguage);
173
+
174
+ export const mermaidLanguageDescription = LanguageDescription.of({
175
+ alias: ['mermaid', 'mmd'],
176
+ extensions: ['mermaid', 'mmd'],
177
+ name: 'Mermaid',
178
+ support: mermaidLanguage,
179
+ });
@@ -79,6 +79,13 @@ export function getClientRuntimeConfig() {
79
79
  environment: 'development',
80
80
  gitEnabled: true,
81
81
  publicWsBaseUrl: '',
82
+ search: {
83
+ available: false,
84
+ backend: 'ripgrep',
85
+ minQueryLength: 2,
86
+ unavailableReason: 'ripgrep search is unavailable',
87
+ version: '',
88
+ },
82
89
  wikiLinkAutoCreate: true,
83
90
  wsBasePath: '/ws',
84
91
  ...(window.__COLLABMD_CONFIG__ ?? {}),
@@ -1,6 +1,10 @@
1
1
  import './styles/surfaces/embedded-editor-base.css';
2
2
  import './styles/surfaces/drawio-editor.css';
3
3
 
4
+ import {
5
+ createDrawioFrameLoadPayload,
6
+ createDrawioFrameLoadSignature,
7
+ } from './domain/drawio-frame-load.js';
4
8
  import { ensureClientAuthenticated } from './infrastructure/auth-client.js';
5
9
  import { isPlainQuickSwitcherShortcut } from './domain/keyboard-shortcuts.js';
6
10
  import { DrawioLeaseClient } from './infrastructure/drawio-lease-client.js';
@@ -30,6 +34,7 @@ let drawioFrameBootTimer = null;
30
34
  let drawioMessageHandler = null;
31
35
  let saveTimer = null;
32
36
  let pendingSaveXml = null;
37
+ let lastFrameLoadSignature = '';
33
38
  let lastSavedVersion = 0;
34
39
  let hasPostedReadyToParent = false;
35
40
  let exportRequested = false;
@@ -144,6 +149,7 @@ function teardownDrawioFrame() {
144
149
  drawioFrame?.remove();
145
150
  drawioFrame = null;
146
151
  drawioFrameReady = false;
152
+ lastFrameLoadSignature = '';
147
153
  hasPostedReadyToParent = false;
148
154
  exportRequested = false;
149
155
  }
@@ -161,26 +167,33 @@ function buildDrawioFrameUrl() {
161
167
 
162
168
  function postAction(action, payload = {}) {
163
169
  if (!drawioFrame?.contentWindow) {
164
- return;
170
+ return false;
165
171
  }
166
172
 
167
173
  drawioFrame.contentWindow.postMessage(JSON.stringify({
168
174
  action,
169
175
  ...payload,
170
176
  }), '*');
177
+ return true;
171
178
  }
172
179
 
173
180
  function loadDiagramIntoFrame() {
174
- postAction('load', {
175
- autosave: state.isEditor && !isExportImageMode ? 1 : 0,
176
- dark: currentTheme === 'dark' ? 1 : 0,
177
- modified: 'unsavedChanges',
178
- noExitBtn: isExportImageMode ? 1 : 1,
179
- noSaveBtn: isExportImageMode ? 1 : (state.isEditor ? 0 : 1),
180
- saveAndExit: isExportImageMode ? 0 : 0,
181
- theme: currentTheme === 'light' ? 'simple' : 'dark',
182
- xml: currentXml || '',
181
+ const payload = createDrawioFrameLoadPayload({
182
+ currentTheme,
183
+ currentXml,
184
+ isEditor: state.isEditor,
185
+ isExportImageMode,
183
186
  });
187
+ const signature = createDrawioFrameLoadSignature(payload);
188
+ if (signature === lastFrameLoadSignature) {
189
+ return false;
190
+ }
191
+
192
+ const posted = postAction('load', payload);
193
+ if (posted) {
194
+ lastFrameLoadSignature = signature;
195
+ }
196
+ return posted;
184
197
  }
185
198
 
186
199
  function updateFrameMode() {