collabmd 0.1.39 → 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 (324) hide show
  1. package/README.md +7 -1
  2. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-75Zi8U_A.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-Bz-8_JmE.js → dist-6oqNX0NJ.js} +1 -1
  64. package/dist/client/assets/dist-B0U2pnHE.js +1 -0
  65. package/dist/client/assets/{dist-tRNsnttY.js → dist-B1BRR2vO.js} +1 -1
  66. package/dist/client/assets/{dist-BEk5kTf_.js → dist-B48_21rM.js} +1 -1
  67. package/dist/client/assets/{dist-CRyP6okk.js → dist-BBsYBvEp.js} +1 -1
  68. package/dist/client/assets/{dist-ZuMKSK7c.js → dist-BNDWUlMx.js} +1 -1
  69. package/dist/client/assets/{dist-CQZDuOJ9.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-NcJIpTJ8.js → dist-Bhn_Fiol.js} +1 -1
  72. package/dist/client/assets/dist-BoCYrsTA.js +1 -0
  73. package/dist/client/assets/{dist-_THc9HiJ.js → dist-BsTc7qjG.js} +1 -1
  74. package/dist/client/assets/dist-C-W89K9S.js +1 -0
  75. package/dist/client/assets/{dist-QktK6LIH.js → dist-CAlqrzaF.js} +1 -1
  76. package/dist/client/assets/dist-CBTadfRi2.js +1 -0
  77. package/dist/client/assets/{dist-8EAyH6_p.js → dist-CDsAhnoa.js} +1 -1
  78. package/dist/client/assets/{dist-fpFkgu34.js → dist-CJMPm6rd.js} +1 -1
  79. package/dist/client/assets/{dist-bkoMCmF7.js → dist-CtHMYO6t.js} +1 -1
  80. package/dist/client/assets/dist-D4DGyOvV.js +1 -0
  81. package/dist/client/assets/{dist-Das5WX49.js → dist-D5BVeoD4.js} +1 -1
  82. package/dist/client/assets/{dist-D8d0IGSI.js → dist-D5hPoFa5.js} +1 -1
  83. package/dist/client/assets/{dist-BXiFOexW.js → dist-DCqHC6ts.js} +1 -1
  84. package/dist/client/assets/{dist-yy8SO13g.js → dist-DFzJ8okV.js} +1 -1
  85. package/dist/client/assets/{dist-Bp_j2hKC.js → dist-DSehUDUA.js} +1 -1
  86. package/dist/client/assets/{dist-eAgBpkKv.js → dist-Dv_PLWtE.js} +1 -1
  87. package/dist/client/assets/{dist-B7XQNod9.js → dist-Dx8yU-RA.js} +1 -1
  88. package/dist/client/assets/{dist-CH3l6nVf.js → dist-U35xPXYU.js} +1 -1
  89. package/dist/client/assets/{dist-DplP0BiK.js → dist-UnjH15yg.js} +2 -2
  90. package/dist/client/assets/{dist-DwgKARew.js → dist-ihRjPW1T.js} +1 -1
  91. package/dist/client/assets/{dist-CIt_ogHO.js → dist-q3smPWAL.js} +1 -1
  92. package/dist/client/assets/{dist-uyVGTnZh.js → dist-wA96SVn6.js} +1 -1
  93. package/dist/client/assets/{dist-1SMeCZhf.js → dist-x4M0Qd0y.js} +1 -1
  94. package/dist/client/assets/drawio-editor-BHYoSlR7.js +9 -0
  95. package/dist/client/assets/{drawioEditor-DBSyP3_d.js → drawioEditor-B-Ssnq_p.js} +2 -2
  96. package/dist/client/assets/{editor-session-C1scHGLl.js → editor-session-BTPe8PEu.js} +3 -3
  97. package/dist/client/assets/{el-GR-ZXDJ2OS4-DFmRQv0o.js → el-GR-ZXDJ2OS4-De6xlnXD.js} +1 -1
  98. package/dist/client/assets/{en-CMP6EMR6-D9x8hVSu.js → en-CMP6EMR6-Bfz_MnNa.js} +1 -1
  99. package/dist/client/assets/{erDiagram-SMLLAGMA-6VFZA3Qb.js → erDiagram-TEJ5UH35-BvMeaml9.js} +2 -2
  100. package/dist/client/assets/{es-ES-DYQHAD43-BiGWIrBG.js → es-ES-DYQHAD43-EVQAeFTZ.js} +1 -1
  101. package/dist/client/assets/{eu-ES-QDSYU5Y3-BjwS0kZi.js → eu-ES-QDSYU5Y3-O5XEQp0x.js} +1 -1
  102. package/dist/client/assets/eventmodeling-FCH6USID-DKkN-EFL.js +1 -0
  103. package/dist/client/assets/excalidraw-editor-DzL1T9D9.js +9 -0
  104. package/dist/client/assets/{excalidraw-editor-BZCE9ydu.css → excalidraw-editor-mKBCIvNR.css} +1 -1
  105. package/dist/client/assets/{excalidraw-mermaid-stub-Df0Q2qkW.js → excalidraw-mermaid-stub-B5sWezsO.js} +1 -1
  106. package/dist/client/assets/excalidraw-scene-i7oBzgH8.js +176 -0
  107. package/dist/client/assets/excalidrawEditor-DRxzpbJ-.js +2 -0
  108. package/dist/client/assets/{export-page-Bnk-YQp-.js → export-page-BkCqT_2s.js} +2 -2
  109. package/dist/client/assets/exportDocument-Dj7w1hDJ.js +2 -0
  110. package/dist/client/assets/{fa-IR-26LZG4PM-BgANg2TD.js → fa-IR-26LZG4PM-BlqI3v_N.js} +1 -1
  111. package/dist/client/assets/{fi-FI-6YS4KDE4-CBL5f3oN.js → fi-FI-6YS4KDE4-af5Lkv-j.js} +1 -1
  112. package/dist/client/assets/{flowDiagram-DWJPFMVM-DO9RH8YQ.js → flowDiagram-I6XJVG4X-DgXXcK8y.js} +6 -6
  113. package/dist/client/assets/{fr-FR-BRLLPTZC-CRibNSLG.js → fr-FR-BRLLPTZC-CwQyur9E.js} +1 -1
  114. package/dist/client/assets/ganttDiagram-6RSMTGT7-BMpbo3vT.js +292 -0
  115. package/dist/client/assets/gitGraph-WXDBUCRP-BIQYiPEj.js +1 -0
  116. package/dist/client/assets/gitGraphDiagram-PVQCEYII-CCdpTNJZ.js +106 -0
  117. package/dist/client/assets/{gl-ES-OKUZTLYG-DEDwa_xt.js → gl-ES-OKUZTLYG-BNEoLCI4.js} +1 -1
  118. package/dist/client/assets/graphlib-Dduz6oB8.js +1 -0
  119. package/dist/client/assets/{he-IL-26MGYIU7-47wxy70N.js → he-IL-26MGYIU7-WnVF9HP3.js} +1 -1
  120. package/dist/client/assets/{hi-IN-Q4ZOGTP2-bhV7c3dK.js → hi-IN-Q4ZOGTP2-DcU7ec07.js} +1 -1
  121. package/dist/client/assets/{hu-HU-P2OXPSN5-xG-gBMzE.js → hu-HU-P2OXPSN5-wmJyK1Wq.js} +1 -1
  122. package/dist/client/assets/{id-ID-2EIKXYN6-MQuYaNHo.js → id-ID-2EIKXYN6-BTvn0aFf.js} +1 -1
  123. package/dist/client/assets/image-KGGK4BDN-BtStV6c9.js +1 -0
  124. package/dist/client/assets/index-Cnyy977t.css +1 -0
  125. package/dist/client/assets/{index-BoKmcqkH.js → index-DxQmPZ_f.js} +2 -2
  126. package/dist/client/assets/info-J43DQDTF-CO2Z2J7J.js +1 -0
  127. package/dist/client/assets/{infoDiagram-42DDH7IO-C77Pt7T1.js → infoDiagram-5YYISTIA-oYw2qnNY.js} +1 -1
  128. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-Cy1fwvvg.js → ishikawaDiagram-YF4QCWOH-BPqURwBR.js} +2 -2
  129. package/dist/client/assets/{it-IT-4CFKVXI2-v2kj-y7j.js → it-IT-4CFKVXI2-CC_iQxXu.js} +1 -1
  130. package/dist/client/assets/{ja-JP-MAND2Z4V-BahXSQz-.js → ja-JP-MAND2Z4V-ConJI8GA.js} +1 -1
  131. package/dist/client/assets/{journeyDiagram-VCZTEJTY-CYWaI6re.js → journeyDiagram-JHISSGLW-CvxY2Fte.js} +3 -3
  132. package/dist/client/assets/{jsx-runtime-1KUJVfx8.js → jsx-runtime-IB1e1gmy.js} +1 -1
  133. package/dist/client/assets/{kaa-HQRTCXTJ-BF26ydFa.js → kaa-HQRTCXTJ-Caqwh_Qr.js} +1 -1
  134. package/dist/client/assets/{kab-KAB-JKIKKTGH-CEIH0F80.js → kab-KAB-JKIKKTGH-DQBmYNc9.js} +1 -1
  135. package/dist/client/assets/{kanban-definition-6JOO6SKY-DY1xE7tm.js → kanban-definition-UN3LZRKU-Ex7702dO.js} +6 -6
  136. package/dist/client/assets/{kk-KZ-HXQ63ZFC-CxWjc9Sf.js → kk-KZ-HXQ63ZFC-O5qp74q-.js} +1 -1
  137. package/dist/client/assets/{km-KH-PKL3LSGX-DJlCteEp.js → km-KH-PKL3LSGX-2wUYTyyo.js} +1 -1
  138. package/dist/client/assets/{ko-KR-KXLREZX3-B1gtI_ci.js → ko-KR-KXLREZX3-CYtUnW5t.js} +1 -1
  139. package/dist/client/assets/{ku-TR-MJ4IER3X-Bf41y2v2.js → ku-TR-MJ4IER3X-DtEKOAU3.js} +1 -1
  140. package/dist/client/assets/line-DRJILpPI.js +1 -0
  141. package/dist/client/assets/{linear-dsIQT_iU.js → linear-rFRiXd2u.js} +1 -1
  142. package/dist/client/assets/{lt-LT-H6WFQ6FJ-DA1or-Eo.js → lt-LT-H6WFQ6FJ-Cs17Ppdf.js} +1 -1
  143. package/dist/client/assets/{lv-LV-GOCK6SJW-qa0BoYMm.js → lv-LV-GOCK6SJW-DYuTyosz.js} +1 -1
  144. package/dist/client/assets/{main-BKumyd95.js → main-iuYcGt-A.js} +11 -7
  145. package/dist/client/assets/mermaid-parser.core-BD_OCbyj.js +4 -0
  146. package/dist/client/assets/mermaid-runtime-CEgpdpwB.js +9 -0
  147. package/dist/client/assets/{mindmap-definition-QFDTVHPH-DB_M5r-j.js → mindmap-definition-RKZ34NQL-D4pwLdMH.js} +23 -23
  148. package/dist/client/assets/{mr-IN-IXVLDMEQ-DXFRgvgb.js → mr-IN-IXVLDMEQ-CIJFnklt.js} +1 -1
  149. package/dist/client/assets/{my-MM-YG6MYTTD-BKDIfalJ.js → my-MM-YG6MYTTD-em_7TGWX.js} +1 -1
  150. package/dist/client/assets/{nb-NO-XGWJISD2-DbwbopH8.js → nb-NO-XGWJISD2-BLNgPVDj.js} +1 -1
  151. package/dist/client/assets/{nl-NL-XVDVCPNC-ChSneTSU.js → nl-NL-XVDVCPNC-CComxzvg.js} +1 -1
  152. package/dist/client/assets/{nn-NO-EMX5MJX5-Cf7ZWKWZ.js → nn-NO-EMX5MJX5-Cekj8s_-.js} +1 -1
  153. package/dist/client/assets/{oc-FR-ROEINTVO-lM7Nl7hD.js → oc-FR-ROEINTVO-DW-kHJ81.js} +1 -1
  154. package/dist/client/assets/{ordinal-Dz3y_j0K.js → ordinal-De-qfORd.js} +1 -1
  155. package/dist/client/assets/{pa-IN-ZYN6SUDY-C9WNUTeR.js → pa-IN-ZYN6SUDY-CnhULOGp.js} +1 -1
  156. package/dist/client/assets/packet-YPE3B663-VxGcYggl.js +1 -0
  157. package/dist/client/assets/percentages-5DKR754L-Ug3UfchV.js +1 -0
  158. package/dist/client/assets/{pica-CgGaIJly.js → pica-DcQ1xKp1.js} +1 -1
  159. package/dist/client/assets/pie-LRSECV5Y-7RrvmmEk.js +1 -0
  160. package/dist/client/assets/pieDiagram-4H26LBE5-C6MCExtR.js +30 -0
  161. package/dist/client/assets/{pl-PL-6VTG7PHC-DqRVepnC.js → pl-PL-6VTG7PHC-C9rBsz9v.js} +1 -1
  162. package/dist/client/assets/{preview-render-compiler-IUtgIlOM.js → preview-render-compiler-CSggyCbw.js} +1 -1
  163. package/dist/client/assets/preview-render-compiler-TPMesM_L.js +1 -0
  164. package/dist/client/assets/{preview-render-profile-Bf6R7v4w.js → preview-render-profile-CQR0o67h.js} +5 -5
  165. package/dist/client/assets/{preview-render-worker-BwQ5sPy9.js → preview-render-worker-CifbXdlx.js} +2 -2
  166. package/dist/client/assets/{pt-BR-5YFKRR5G-CopLYEA6.js → pt-BR-5YFKRR5G-BVyxOCjg.js} +1 -1
  167. package/dist/client/assets/{pt-PT-GEIXXZ67-BjZ_Lphg.js → pt-PT-GEIXXZ67-5CbVaVay.js} +1 -1
  168. package/dist/client/assets/quadrantDiagram-W4KKPZXB-CD77Rny0.js +7 -0
  169. package/dist/client/assets/quick-switcher-controller-CVJBt6V9.js +12 -0
  170. package/dist/client/assets/radar-GUYGQ44K-2SBnfFng.js +1 -0
  171. package/dist/client/assets/{requirementDiagram-MS252O5E-CtUIQnWa.js → requirementDiagram-4Y6WPE33-DdKM6ZWI.js} +4 -4
  172. package/dist/client/assets/{ro-RO-E2P6TFZI-DakDz5Xu.js → ro-RO-E2P6TFZI-DANwkfep.js} +1 -1
  173. package/dist/client/assets/{room-z2w9b96b.js → room-Cha55fQg.js} +1 -1
  174. package/dist/client/assets/{ru-RU-YBIIY43T-BMvCT-XT.js → ru-RU-YBIIY43T-BWZSxhA5.js} +1 -1
  175. package/dist/client/assets/runtime-config-CM_2pVYD.js +1 -0
  176. package/dist/client/assets/{sankeyDiagram-XADWPNL6-tcSeuifE.js → sankeyDiagram-5OEKKPKP-BH3_LNkI.js} +36 -6
  177. package/dist/client/assets/sequenceDiagram-3UESZ5HK-CCGL7FMW.js +162 -0
  178. package/dist/client/assets/{si-LK-673C2CI2-hGdH1S9E.js → si-LK-673C2CI2-Bqr808AJ.js} +1 -1
  179. package/dist/client/assets/{sk-SK-CKZHQ4AP-DiRA-fj8.js → sk-SK-CKZHQ4AP-B2PvXXeU.js} +1 -1
  180. package/dist/client/assets/{sl-SI-557H2GWM-DN94n_1-.js → sl-SI-557H2GWM-IPVDhzgb.js} +1 -1
  181. package/dist/client/assets/{src-BuiVcSz-.js → src-BshjqEL2.js} +1 -1
  182. package/dist/client/assets/stateDiagram-AJRCARHV-ljJcYRX4.js +1 -0
  183. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DXm0ynOB.js +1 -0
  184. package/dist/client/assets/subset-shared.chunk-C9mEHUfV.js +1 -0
  185. package/dist/client/assets/{subset-worker.chunk-kj1e3wjW.js → subset-worker.chunk-BW_EF59g.js} +1 -1
  186. package/dist/client/assets/{sv-SE-XOPKKDWS-CkHUNABj.js → sv-SE-XOPKKDWS-CQipq9Nf.js} +1 -1
  187. package/dist/client/assets/{ta-IN-XBH7DQI3-W-157oVK.js → ta-IN-XBH7DQI3-Cj2o89vS.js} +1 -1
  188. package/dist/client/assets/{th-TH-TOCWH3R4-BsU-Pydr.js → th-TH-TOCWH3R4-IOX-l13w.js} +1 -1
  189. package/dist/client/assets/{timeline-definition-GMOUNBTQ-Bs6U53Mo.js → timeline-definition-PNZ67QCA-CUVPem2o.js} +5 -5
  190. package/dist/client/assets/{tr-TR-GXW6CYY5-CTddyq89.js → tr-TR-GXW6CYY5-DBVLEsZg.js} +1 -1
  191. package/dist/client/assets/treeView-BLDUP644-DItqHrxu.js +1 -0
  192. package/dist/client/assets/treemap-LRROVOQU-DD1ESKp7.js +1 -0
  193. package/dist/client/assets/{uk-UA-IJKTNUDG-1LzXkII3.js → uk-UA-IJKTNUDG-C5kaymku.js} +1 -1
  194. package/dist/client/assets/{uz-UZ-TBZZEA4V-kqm-qcUj.js → uz-UZ-TBZZEA4V-lMna4tx1.js} +1 -1
  195. package/dist/client/assets/{vault-api-client-BDKKvtOF.js → vault-api-client-Fa51l2lE.js} +1 -1
  196. package/dist/client/assets/{vault-utils-CRpy8MQz.js → vault-utils-BbJUHPCf.js} +1 -1
  197. package/dist/client/assets/vennDiagram-CIIHVFJN-Bb1KSPKA.js +34 -0
  198. package/dist/client/assets/{vi-VN-MULSGNVB-C3H2AUhm.js → vi-VN-MULSGNVB-BAcoCjsz.js} +1 -1
  199. package/dist/client/assets/wardley-L42UT6IY-BoSI-SvR.js +1 -0
  200. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-C-scJfPY.js → wardleyDiagram-YWT4CUSO-EdTzLQiR.js} +61 -3
  201. package/dist/client/assets/{xychartDiagram-5P7HB3ND-D3nQoxhz.js → xychartDiagram-2RQKCTM6-BoQFrGlt.js} +3 -3
  202. package/dist/client/assets/{zh-CN-MVX3E32U-BULPbsyl.js → zh-CN-MVX3E32U-sW-DCFHP.js} +1 -1
  203. package/dist/client/assets/{zh-HK-JNU5RLIE-bNGmeSaW.js → zh-HK-JNU5RLIE-Duqu8EG_.js} +1 -1
  204. package/dist/client/assets/{zh-TW-LENVCA6T-CQDp064P.js → zh-TW-LENVCA6T-BHC0OLnd.js} +1 -1
  205. package/dist/client/drawio-editor.html +1 -1
  206. package/dist/client/excalidraw-editor.html +1 -1
  207. package/dist/client/export-document.html +1 -1
  208. package/dist/client/index.html +2 -2
  209. package/package.json +14 -14
  210. package/src/client/application/mermaid-preview-hydrator.js +26 -8
  211. package/src/client/application/preview-renderer.js +6 -1
  212. package/src/client/application/quick-switcher-loader.js +14 -0
  213. package/src/client/application/workspace-route-controller.js +14 -0
  214. package/src/client/domain/drawio-frame-load.js +28 -0
  215. package/src/client/domain/hash-routes.js +16 -1
  216. package/src/client/domain/runtime-paths.js +7 -0
  217. package/src/client/drawio-editor.js +23 -10
  218. package/src/client/excalidraw-editor.js +66 -13
  219. package/src/client/infrastructure/editor-session.js +4 -0
  220. package/src/client/infrastructure/editor-view-adapter.js +30 -0
  221. package/src/client/infrastructure/runtime-config.js +17 -2
  222. package/src/client/infrastructure/vault-api-client.js +11 -0
  223. package/src/client/presentation/app-shell-template.js +4 -0
  224. package/src/client/presentation/drawio-embed-controller.js +230 -64
  225. package/src/client/presentation/excalidraw-embed-controller.js +51 -60
  226. package/src/client/presentation/quick-switcher-controller.js +217 -21
  227. package/src/client/presentation/quick-switcher-text-search.js +125 -0
  228. package/src/client/styles/features/diagram-preview.css +43 -23
  229. package/src/client/styles/features/quick-switcher.css +153 -15
  230. package/src/client/styles/layout/shell.css +6 -3
  231. package/src/client/styles/surfaces/excalidraw-editor.css +4 -0
  232. package/src/server/config/env.js +1 -0
  233. package/src/server/create-app-server.js +29 -6
  234. package/src/server/domain/ripgrep-search-service.js +365 -0
  235. package/src/server/infrastructure/http/create-request-handler.js +3 -1
  236. package/src/server/infrastructure/http/create-static-handler.js +10 -1
  237. package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
  238. package/src/server/infrastructure/http/create-vault-api-query-handler.js +38 -2
  239. package/src/server/infrastructure/workspace/file-system-sync-service.js +4 -0
  240. package/dist/client/assets/_baseFor-BSErPbF2.js +0 -1
  241. package/dist/client/assets/architecture-YZFGNWBL-DWWrde02.js +0 -1
  242. package/dist/client/assets/blockDiagram-DXYQGD6D-6UN-nR8-.js +0 -132
  243. package/dist/client/assets/channel-XGCkuPi6.js +0 -1
  244. package/dist/client/assets/chunk-2KRD3SAO-CFcF2aNP.js +0 -1
  245. package/dist/client/assets/chunk-336JU56O-DvrrHsJT.js +0 -2
  246. package/dist/client/assets/chunk-426QAEUC-CEbmCgux.js +0 -1
  247. package/dist/client/assets/chunk-4TB4RGXK-CoouNThi.js +0 -206
  248. package/dist/client/assets/chunk-5FUZZQ4R-CxIIxXPy.js +0 -62
  249. package/dist/client/assets/chunk-5PVQY5BW-ciE7eHID.js +0 -2
  250. package/dist/client/assets/chunk-67CJDMHE-CW-fbgQB.js +0 -1
  251. package/dist/client/assets/chunk-7N4EOEYR-DbAW6XnF.js +0 -1
  252. package/dist/client/assets/chunk-AA7GKIK3-ClDHDAza.js +0 -1
  253. package/dist/client/assets/chunk-CIAEETIT-BnB8a6HR.js +0 -1
  254. package/dist/client/assets/chunk-ENJZ2VHE-BQj_1YA_.js +0 -10
  255. package/dist/client/assets/chunk-FOC6F5B3-Bw6XfKDP.js +0 -1
  256. package/dist/client/assets/chunk-ICPOFSXX-DqJi89rc.js +0 -122
  257. package/dist/client/assets/chunk-K5T4RW27-CQtjKF2g.js +0 -94
  258. package/dist/client/assets/chunk-KGLVRYIC-BWSPiKjp.js +0 -1
  259. package/dist/client/assets/chunk-ORNJ4GCN-Csga44e5.js +0 -1
  260. package/dist/client/assets/chunk-OYMX7WX6-DvtmCasj.js +0 -231
  261. package/dist/client/assets/chunk-QZHKN3VN-CHVH9_3S.js +0 -1
  262. package/dist/client/assets/chunk-YHkbxXgt.js +0 -1
  263. package/dist/client/assets/chunk-YKPWT25G-GISHuloq.js +0 -35
  264. package/dist/client/assets/classDiagram-6PBFFD2Q-D1KhAUL3.js +0 -1
  265. package/dist/client/assets/classDiagram-v2-HSJHXN6E-BSyyJpnR.js +0 -1
  266. package/dist/client/assets/clone-DI0bYZ1L.js +0 -1
  267. package/dist/client/assets/dagre-Dn6rkrte.js +0 -1
  268. package/dist/client/assets/dagre-KV5264BT-COzej2en.js +0 -4
  269. package/dist/client/assets/diagram-G4DWMVQ6-CbswIU9X.js +0 -24
  270. package/dist/client/assets/diagram-MMDJMWI5-BE-yOVGX.js +0 -43
  271. package/dist/client/assets/dist-BCzW2jDH.js +0 -1
  272. package/dist/client/assets/dist-BOn786F3.js +0 -1
  273. package/dist/client/assets/dist-BwUX6zpo.js +0 -1
  274. package/dist/client/assets/dist-D-ixVAsS2.js +0 -1
  275. package/dist/client/assets/dist-GgGgSSbl.js +0 -1
  276. package/dist/client/assets/drawio-editor-B_Sr8Z_Z.js +0 -9
  277. package/dist/client/assets/excalidraw-editor-B0XXVLHd.js +0 -9
  278. package/dist/client/assets/excalidraw-scene-wAbVSY1L.js +0 -176
  279. package/dist/client/assets/excalidrawEditor-37sk03H8.js +0 -2
  280. package/dist/client/assets/exportDocument-WQNApAbg.js +0 -2
  281. package/dist/client/assets/flatten-DjXjUsvv.js +0 -1
  282. package/dist/client/assets/ganttDiagram-T4ZO3ILL-B-NMvHWN.js +0 -292
  283. package/dist/client/assets/gitGraph-7Q5UKJZL-DWNinXu4.js +0 -1
  284. package/dist/client/assets/gitGraphDiagram-UUTBAWPF-B95qkCUx.js +0 -106
  285. package/dist/client/assets/graphlib-CAwOVCJc.js +0 -1
  286. package/dist/client/assets/image-J2CAS7OM-DD4DaQTs.js +0 -1
  287. package/dist/client/assets/index-maPm_Kvk.css +0 -1
  288. package/dist/client/assets/info-OMHHGYJF-DtYG_rX0.js +0 -1
  289. package/dist/client/assets/isEmpty-CpfhGGBo.js +0 -1
  290. package/dist/client/assets/line-BCItEgq3.js +0 -1
  291. package/dist/client/assets/mermaid-parser.core-CsTVsPcD.js +0 -4
  292. package/dist/client/assets/mermaid-runtime-BGlnoUXY.js +0 -11
  293. package/dist/client/assets/packet-4T2RLAQJ-CUVefhAv.js +0 -1
  294. package/dist/client/assets/percentages-5DKR754L-DuhOjTM2.js +0 -1
  295. package/dist/client/assets/pie-ZZUOXDRM-BHBJ1dLX.js +0 -1
  296. package/dist/client/assets/pieDiagram-DEJITSTG-BOo-WzjZ.js +0 -30
  297. package/dist/client/assets/preview-render-compiler-9SmLUP5V.js +0 -1
  298. package/dist/client/assets/quadrantDiagram-34T5L4WZ-2vfo0l5S.js +0 -7
  299. package/dist/client/assets/quick-switcher-controller-B1erSgJ1.js +0 -5
  300. package/dist/client/assets/radar-PYXPWWZC-2jR4qZNU.js +0 -1
  301. package/dist/client/assets/reduce-ChpYjEUB.js +0 -1
  302. package/dist/client/assets/runtime-config-BcUbZKho.js +0 -1
  303. package/dist/client/assets/sequenceDiagram-FGHM5R23-DtF-1Kt2.js +0 -157
  304. package/dist/client/assets/stateDiagram-FHFEXIEX-DKk7Sb0f.js +0 -1
  305. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DJUaiADr.js +0 -1
  306. package/dist/client/assets/subset-shared.chunk-CWNYNLru.js +0 -1
  307. package/dist/client/assets/treeView-SZITEDCU-DN5dP2ol.js +0 -1
  308. package/dist/client/assets/treemap-W4RFUUIX-Dva7DBJR.js +0 -1
  309. package/dist/client/assets/vennDiagram-DHZGUBPP-DNnIjRae.js +0 -34
  310. package/dist/client/assets/wardley-RL74JXVD-CDZW5uzY.js +0 -1
  311. /package/dist/client/assets/{array-B3agRrCs.js → array-7rJMcyYQ.js} +0 -0
  312. /package/dist/client/assets/{cytoscape.esm-BurByw8X.js → cytoscape.esm-B_ygTtvl.js} +0 -0
  313. /package/dist/client/assets/{defaultLocale-B_FbTTbl.js → defaultLocale-DKHHE2Ij.js} +0 -0
  314. /package/dist/client/assets/{drawio-room-1i6Nn0_Z.js → drawio-room-DrZ-gy4N.js} +0 -0
  315. /package/dist/client/assets/{excalidraw-mermaid-stub-DzxtBcQW.js → excalidraw-mermaid-stub-Co4Okjfg.js} +0 -0
  316. /package/dist/client/assets/{file-kind-DmKq2MvD.js → file-kind-DLz-bCzA.js} +0 -0
  317. /package/dist/client/assets/{image-blob-reduce.esm-D8JQdTFk.js → image-blob-reduce.esm-CRyv8pnU.js} +0 -0
  318. /package/dist/client/assets/{init-DtLQcSuO.js → init-EmgYNkpL.js} +0 -0
  319. /package/dist/client/assets/{katex-CXYULLWy.js → katex-Beiidjxi.js} +0 -0
  320. /package/dist/client/assets/{path-DIlZIGue.js → path-vqW-z8T-.js} +0 -0
  321. /package/dist/client/assets/{preview-diagram-utils-Nqpp4FNV.js → preview-diagram-utils-D94KrSQH.js} +0 -0
  322. /package/dist/client/assets/{rough.esm-BU2knLt9.js → rough.esm-DE_lJ5Ge.js} +0 -0
  323. /package/dist/client/assets/{roundRect-BzEouiv_.js → roundRect-BMsJLtvm.js} +0 -0
  324. /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.39",
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": {
@@ -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.42.0",
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
+ }
@@ -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
  }
@@ -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() {
@@ -70,6 +70,7 @@ let apiStateCleanupCallbacks = [];
70
70
  let collaboratorRenderFrame = 0;
71
71
  let queuedCollaborators = null;
72
72
  let initialViewportFitPending = true;
73
+ let previewViewportFitTimerId = 0;
73
74
  let roomClient = null;
74
75
  let roomClientGeneration = 0;
75
76
  let reactRoot = null;
@@ -85,6 +86,10 @@ function getDocumentViewState(mode = currentDocument.mode) {
85
86
  };
86
87
  }
87
88
 
89
+ function applyDocumentMode(mode = currentDocument.mode) {
90
+ document.body.dataset.documentMode = normalizeDocumentMode(mode);
91
+ }
92
+
88
93
  function createRoomClient(filePath) {
89
94
  const generation = ++roomClientGeneration;
90
95
  const client = new ExcalidrawRoomClient({
@@ -565,8 +570,17 @@ function getSceneElementsForPreviewFit() {
565
570
  );
566
571
  }
567
572
 
568
- function scheduleInitialViewportFit() {
569
- if (!initialViewportFitPending || !excalidrawAPI) {
573
+ function scheduleViewportFit({
574
+ delayMs = 0,
575
+ forcePreview = false,
576
+ consumeInitialFit = false,
577
+ } = {}) {
578
+ const normalizedMode = normalizeDocumentMode(currentDocument.mode);
579
+ if (!excalidrawAPI || (forcePreview && normalizedMode !== 'preview')) {
580
+ return;
581
+ }
582
+
583
+ if (!forcePreview && !initialViewportFitPending) {
570
584
  return;
571
585
  }
572
586
 
@@ -574,22 +588,55 @@ function scheduleInitialViewportFit() {
574
588
  if (elements.length === 0) {
575
589
  return;
576
590
  }
577
- initialViewportFitPending = false;
591
+ if (consumeInitialFit) {
592
+ initialViewportFitPending = false;
593
+ }
578
594
 
579
- requestAnimationFrame(() => {
595
+ if (previewViewportFitTimerId) {
596
+ window.clearTimeout(previewViewportFitTimerId);
597
+ }
598
+
599
+ previewViewportFitTimerId = window.setTimeout(() => {
600
+ previewViewportFitTimerId = 0;
580
601
  requestAnimationFrame(() => {
581
- if (!excalidrawAPI) {
582
- return;
583
- }
602
+ requestAnimationFrame(() => {
603
+ if (!excalidrawAPI) {
604
+ return;
605
+ }
606
+
607
+ const latestElements = getSceneElementsForPreviewFit();
608
+ if (latestElements.length === 0) {
609
+ return;
610
+ }
611
+
612
+ if (forcePreview) {
613
+ suppressViewportBroadcast = true;
614
+ }
615
+
616
+ excalidrawAPI.scrollToContent(latestElements, {
617
+ animate: false,
618
+ fitToViewport: true,
619
+ maxZoom: 2,
620
+ viewportZoomFactor: normalizedMode === 'preview' ? 0.92 : 0.88,
621
+ });
584
622
 
585
- excalidrawAPI.scrollToContent(elements, {
586
- animate: false,
587
- fitToViewport: true,
588
- maxZoom: 2,
589
- viewportZoomFactor: normalizeDocumentMode(currentDocument.mode) === 'preview' ? 0.92 : 0.88,
623
+ if (forcePreview) {
624
+ releaseViewportBroadcastSuppressionAfterPaint();
625
+ }
590
626
  });
591
627
  });
592
- });
628
+ }, delayMs);
629
+ }
630
+
631
+ function scheduleInitialViewportFit() {
632
+ scheduleViewportFit({ consumeInitialFit: true });
633
+ }
634
+
635
+ function schedulePreviewViewportFit() {
636
+ scheduleViewportFit({ forcePreview: true, delayMs: 80 });
637
+ window.setTimeout(() => {
638
+ scheduleViewportFit({ forcePreview: true });
639
+ }, 240);
593
640
  }
594
641
 
595
642
  function syncLocalViewportToRoom() {
@@ -801,6 +848,11 @@ window.addEventListener('message', (event) => {
801
848
  return;
802
849
  }
803
850
 
851
+ if (message.type === 'fit-preview-viewport') {
852
+ schedulePreviewViewportFit();
853
+ return;
854
+ }
855
+
804
856
  if (message.type === 'prepare-disconnect') {
805
857
  void (async () => {
806
858
  await prepareRealtimeRoomDisconnect();
@@ -892,6 +944,7 @@ async function init() {
892
944
 
893
945
  try {
894
946
  applySurfaceTheme(currentTheme);
947
+ applyDocumentMode();
895
948
  await ensureClientAuthenticated();
896
949
  const initialScene = await connectDocumentClient(currentDocument.filePath);
897
950
  if (!initialScene) {
@@ -218,6 +218,10 @@ export class EditorSession {
218
218
  return this.viewAdapter.scrollToLine(lineNumber, viewportRatio);
219
219
  }
220
220
 
221
+ revealSearchMatch(match) {
222
+ return this.viewAdapter.revealSearchMatch(match);
223
+ }
224
+
221
225
  getUserCursor(clientId) {
222
226
  return this.collaborationClient.getUserCursor(
223
227
  clientId,
@@ -851,6 +851,36 @@ export class EditorViewAdapter {
851
851
  return true;
852
852
  }
853
853
 
854
+ revealSearchMatch({ column = 1, length = 0, line = 1 } = {}) {
855
+ const state = this.editorView?.state;
856
+ if (!state || !this.editorView) {
857
+ return false;
858
+ }
859
+
860
+ const targetLineNumber = Math.min(
861
+ Math.max(Math.round(Number(line) || 1), 1),
862
+ state.doc.lines,
863
+ );
864
+ const targetLine = state.doc.line(targetLineNumber);
865
+ const columnOffset = Math.min(
866
+ Math.max(Math.round(Number(column) || 1) - 1, 0),
867
+ targetLine.length,
868
+ );
869
+ const from = targetLine.from + columnOffset;
870
+ const to = Math.min(
871
+ from + Math.max(Math.round(Number(length) || 0), 0),
872
+ targetLine.to,
873
+ );
874
+
875
+ this.editorView.dispatch({
876
+ scrollIntoView: true,
877
+ selection: EditorSelection.range(from, Math.max(to, from)),
878
+ });
879
+ this.editorView.focus();
880
+ this.scrollToLine(targetLineNumber, 0.2);
881
+ return true;
882
+ }
883
+
854
884
  scrollToPosition(position, alignment = 'center') {
855
885
  const state = this.editorView?.state;
856
886
  const scroller = this.editorView?.scrollDOM;
@@ -76,8 +76,11 @@ export function getHashRoute() {
76
76
  if (params.has(HASH_ROUTE_KEYS.file)) {
77
77
  return {
78
78
  anchor: params.get('anchor') || null,
79
+ column: params.has('column') ? Number(params.get('column')) || null : null,
79
80
  drawioMode: params.get('drawio') || null,
80
81
  filePath: params.get(HASH_ROUTE_KEYS.file),
82
+ line: params.has('line') ? Number(params.get('line')) || null : null,
83
+ matchLength: params.has('matchLength') ? Number(params.get('matchLength')) || null : null,
81
84
  type: 'file',
82
85
  };
83
86
  }
@@ -85,8 +88,20 @@ export function getHashRoute() {
85
88
  return { type: 'empty' };
86
89
  }
87
90
 
88
- export function navigateToFile(filePath, { drawioMode = null, anchor = null } = {}) {
89
- window.location.hash = createFileRouteHash(filePath, { drawioMode, anchor });
91
+ export function navigateToFile(filePath, {
92
+ anchor = null,
93
+ column = null,
94
+ drawioMode = null,
95
+ line = null,
96
+ matchLength = null,
97
+ } = {}) {
98
+ window.location.hash = createFileRouteHash(filePath, {
99
+ anchor,
100
+ column,
101
+ drawioMode,
102
+ line,
103
+ matchLength,
104
+ });
90
105
  }
91
106
 
92
107
  export function navigateToGitDiff({ filePath = null, scope = 'all' } = {}) {
@@ -87,6 +87,17 @@ export class VaultApiClient {
87
87
  return parseApiResponse(response, 'Failed to read file');
88
88
  }
89
89
 
90
+ async searchText({ limit = 50, query = '', signal = null } = {}) {
91
+ const searchParams = new URLSearchParams({
92
+ limit: String(limit),
93
+ q: String(query ?? ''),
94
+ });
95
+ const response = await fetch(resolveApiUrl(`/search?${searchParams.toString()}`), {
96
+ signal,
97
+ });
98
+ return parseApiResponse(response, 'Failed to search files');
99
+ }
100
+
90
101
  async queryBase({
91
102
  activeFilePath = '',
92
103
  path = '',
@@ -618,6 +618,10 @@ export function appShellTemplate() {
618
618
 
619
619
  <div class="qs-overlay" id="quickSwitcher">
620
620
  <div class="qs-modal">
621
+ <div class="qs-mode-tabs" role="tablist" aria-label="Search mode">
622
+ <button class="qs-mode-tab active" type="button" role="tab" aria-selected="true" data-qs-mode="files">Files</button>
623
+ <button class="qs-mode-tab" type="button" role="tab" aria-selected="false" data-qs-mode="text">Text</button>
624
+ </div>
621
625
  <div class="qs-input-wrap">
622
626
  <svg class="qs-search-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
623
627
  <circle cx="11" cy="11" r="8"></circle>