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
@@ -10,7 +10,9 @@ import {
10
10
  import '@excalidraw/excalidraw/index.css';
11
11
 
12
12
  import {
13
+ buildRenderableCollaboratorsMap,
13
14
  findCollaboratorByPeerId,
15
+ getCollaboratorsRenderSignature,
14
16
  mergeAwarenessUserPatch,
15
17
  resolveLocalAwarenessUser,
16
18
  } from './domain/excalidraw-collaboration.js';
@@ -24,6 +26,9 @@ import {
24
26
  parseSceneJson,
25
27
  sceneToInitialData,
26
28
  } from './domain/excalidraw-scene.js';
29
+ import {
30
+ buildReconciledExcalidrawSceneUpdate,
31
+ } from './domain/excalidraw-scene-reconcile.js';
27
32
  import {
28
33
  normalizeDocumentMode,
29
34
  } from './domain/excalidraw-document-switch.js';
@@ -60,10 +65,12 @@ let pendingHostFollowPeerId = null;
60
65
  let suppressViewportBroadcast = false;
61
66
  let pendingViewportSuppressionReleases = 0;
62
67
  let lastAppliedFollowViewportSignature = '';
68
+ let lastRenderedCollaboratorsSignature = '';
63
69
  let apiStateCleanupCallbacks = [];
64
70
  let collaboratorRenderFrame = 0;
65
71
  let queuedCollaborators = null;
66
72
  let initialViewportFitPending = true;
73
+ let previewViewportFitTimerId = 0;
67
74
  let roomClient = null;
68
75
  let roomClientGeneration = 0;
69
76
  let reactRoot = null;
@@ -79,6 +86,10 @@ function getDocumentViewState(mode = currentDocument.mode) {
79
86
  };
80
87
  }
81
88
 
89
+ function applyDocumentMode(mode = currentDocument.mode) {
90
+ document.body.dataset.documentMode = normalizeDocumentMode(mode);
91
+ }
92
+
82
93
  function createRoomClient(filePath) {
83
94
  const generation = ++roomClientGeneration;
84
95
  const client = new ExcalidrawRoomClient({
@@ -295,16 +306,21 @@ if (isTestMode) {
295
306
 
296
307
  function applyCollaborators(collaborators) {
297
308
  activeCollaborators = collaborators instanceof Map ? collaborators : new Map();
309
+ const renderableCollaborators = buildRenderableCollaboratorsMap(activeCollaborators);
310
+ const renderSignature = getCollaboratorsRenderSignature(renderableCollaborators);
298
311
 
299
312
  if (!excalidrawAPI) {
300
313
  pendingCollaborators = activeCollaborators;
301
314
  return;
302
315
  }
303
316
 
304
- excalidrawAPI.updateScene({
305
- collaborators: activeCollaborators,
306
- captureUpdate: CaptureUpdateAction.NEVER,
307
- });
317
+ if (renderSignature !== lastRenderedCollaboratorsSignature) {
318
+ lastRenderedCollaboratorsSignature = renderSignature;
319
+ excalidrawAPI.updateScene({
320
+ collaborators: renderableCollaborators,
321
+ captureUpdate: CaptureUpdateAction.NEVER,
322
+ });
323
+ }
308
324
 
309
325
  if (pendingHostFollowPeerId) {
310
326
  applyHostFollowRequest(pendingHostFollowPeerId);
@@ -328,10 +344,29 @@ function queueCollaboratorsRender(collaborators) {
328
344
  });
329
345
  }
330
346
 
331
- function applySceneFromJson(rawJson) {
347
+ function isEditingTextElement() {
348
+ return Boolean(excalidrawAPI?.getAppState?.()?.editingTextElement);
349
+ }
350
+
351
+ function flushPendingRemoteScene() {
352
+ if (!pendingRemoteSceneJson || !excalidrawAPI || !collabReady || isEditingTextElement()) {
353
+ return false;
354
+ }
355
+
356
+ const sceneJson = pendingRemoteSceneJson;
357
+ pendingRemoteSceneJson = '';
358
+ applySceneFromJson(sceneJson, {
359
+ force: true,
360
+ });
361
+ return true;
362
+ }
363
+
364
+ function applySceneFromJson(rawJson, {
365
+ force = false,
366
+ } = {}) {
332
367
  const scene = parseSceneJson(rawJson);
333
368
  const normalizedJson = JSON.stringify(scene);
334
- if (normalizedJson === appliedSceneJson && !pendingRemoteSceneJson) {
369
+ if (!force && normalizedJson === appliedSceneJson && !pendingRemoteSceneJson) {
335
370
  return;
336
371
  }
337
372
 
@@ -342,9 +377,12 @@ function applySceneFromJson(rawJson) {
342
377
  return;
343
378
  }
344
379
 
345
- updateApiScene(scene, {
346
- replaceElements: true,
347
- });
380
+ if (!force && isEditingTextElement()) {
381
+ pendingRemoteSceneJson = normalizedJson;
382
+ return;
383
+ }
384
+
385
+ updateApiScene(scene);
348
386
  }
349
387
 
350
388
  function releaseOnChangeSuppressionAfterPaint({ trackedSharedSnapshot = false } = {}) {
@@ -376,30 +414,21 @@ function releaseViewportBroadcastSuppressionAfterPaint() {
376
414
 
377
415
  function buildApiSceneUpdate(scene, {
378
416
  appStateOverrides = {},
379
- replaceElements = false,
380
417
  } = {}) {
381
418
  const currentAppState = excalidrawAPI.getAppState();
382
- const currentElements = replaceElements
383
- ? []
384
- : (excalidrawAPI.getSceneElementsIncludingDeleted?.() || excalidrawAPI.getSceneElements());
385
- const restoredElements = restoreElements(scene?.elements || [], currentElements, {
386
- repairBindings: true,
387
- });
388
- const restoredAppState = restoreAppState(scene?.appState || {}, currentAppState);
389
- const reconciledElements = replaceElements
390
- ? restoredElements
391
- : reconcileElements(currentElements, restoredElements, currentAppState);
419
+ const currentElements = excalidrawAPI.getSceneElementsIncludingDeleted?.() || excalidrawAPI.getSceneElements();
392
420
 
393
- return {
394
- appState: {
395
- theme: currentTheme,
396
- viewBackgroundColor: restoredAppState.viewBackgroundColor ?? '#ffffff',
397
- gridSize: restoredAppState.gridSize ?? null,
398
- ...getDocumentViewState(),
399
- ...appStateOverrides,
400
- },
401
- elements: reconciledElements,
402
- };
421
+ return buildReconciledExcalidrawSceneUpdate({
422
+ appStateOverrides,
423
+ currentAppState,
424
+ currentElements,
425
+ documentViewState: getDocumentViewState(),
426
+ reconcileElementsFn: reconcileElements,
427
+ restoreAppStateFn: restoreAppState,
428
+ restoreElementsFn: restoreElements,
429
+ scene,
430
+ theme: currentTheme,
431
+ });
403
432
  }
404
433
 
405
434
  function logFileConflictOnce(conflictingFileIds = []) {
@@ -437,12 +466,10 @@ function requestEditorRemount(scene) {
437
466
  function applySceneToMountedApi(scene, {
438
467
  appStateOverrides = {},
439
468
  captureUpdate = CaptureUpdateAction.NEVER,
440
- replaceElements = false,
441
469
  trackedSharedSnapshot = false,
442
470
  } = {}) {
443
471
  const nextSceneUpdate = buildApiSceneUpdate(scene, {
444
472
  appStateOverrides,
445
- replaceElements,
446
473
  });
447
474
  let applyResult = null;
448
475
 
@@ -484,13 +511,11 @@ function applySceneToMountedApi(scene, {
484
511
  function updateApiScene(scene, {
485
512
  appStateOverrides = {},
486
513
  captureUpdate = CaptureUpdateAction.NEVER,
487
- replaceElements = false,
488
514
  trackedSharedSnapshot = true,
489
515
  } = {}) {
490
516
  applySceneToMountedApi(scene, {
491
517
  appStateOverrides,
492
518
  captureUpdate,
493
- replaceElements,
494
519
  trackedSharedSnapshot,
495
520
  });
496
521
  }
@@ -520,6 +545,10 @@ function onRoomTextUpdate() {
520
545
  applySceneFromJson(roomClient?.getLastSceneJson?.() || '');
521
546
  }
522
547
 
548
+ function getLiveSceneElementsForSync(fallbackElements = []) {
549
+ return excalidrawAPI?.getSceneElementsIncludingDeleted?.() || fallbackElements;
550
+ }
551
+
523
552
  function postToParent(type, payload = {}) {
524
553
  window.parent.postMessage({ source: 'excalidraw-editor', type, ...payload }, parentOrigin);
525
554
  }
@@ -541,8 +570,17 @@ function getSceneElementsForPreviewFit() {
541
570
  );
542
571
  }
543
572
 
544
- function scheduleInitialViewportFit() {
545
- 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) {
546
584
  return;
547
585
  }
548
586
 
@@ -550,22 +588,55 @@ function scheduleInitialViewportFit() {
550
588
  if (elements.length === 0) {
551
589
  return;
552
590
  }
553
- initialViewportFitPending = false;
591
+ if (consumeInitialFit) {
592
+ initialViewportFitPending = false;
593
+ }
554
594
 
555
- requestAnimationFrame(() => {
556
- requestAnimationFrame(() => {
557
- if (!excalidrawAPI) {
558
- return;
559
- }
595
+ if (previewViewportFitTimerId) {
596
+ window.clearTimeout(previewViewportFitTimerId);
597
+ }
560
598
 
561
- excalidrawAPI.scrollToContent(elements, {
562
- animate: false,
563
- fitToViewport: true,
564
- maxZoom: 2,
565
- viewportZoomFactor: normalizeDocumentMode(currentDocument.mode) === 'preview' ? 0.92 : 0.88,
599
+ previewViewportFitTimerId = window.setTimeout(() => {
600
+ previewViewportFitTimerId = 0;
601
+ requestAnimationFrame(() => {
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
+ });
622
+
623
+ if (forcePreview) {
624
+ releaseViewportBroadcastSuppressionAfterPaint();
625
+ }
566
626
  });
567
627
  });
568
- });
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);
569
640
  }
570
641
 
571
642
  function syncLocalViewportToRoom() {
@@ -674,6 +745,7 @@ function resetRealtimeRoomState() {
674
745
  suppressViewportBroadcast = false;
675
746
  pendingViewportSuppressionReleases = 0;
676
747
  lastAppliedFollowViewportSignature = '';
748
+ lastRenderedCollaboratorsSignature = '';
677
749
  if (collaboratorRenderFrame) {
678
750
  cancelAnimationFrame(collaboratorRenderFrame);
679
751
  }
@@ -776,6 +848,11 @@ window.addEventListener('message', (event) => {
776
848
  return;
777
849
  }
778
850
 
851
+ if (message.type === 'fit-preview-viewport') {
852
+ schedulePreviewViewportFit();
853
+ return;
854
+ }
855
+
779
856
  if (message.type === 'prepare-disconnect') {
780
857
  void (async () => {
781
858
  await prepareRealtimeRoomDisconnect();
@@ -799,17 +876,8 @@ function scheduleSyncToRoom(elements, appState, files) {
799
876
  return;
800
877
  }
801
878
 
802
- const nextSceneJson = JSON.stringify(normalizeScene({
803
- elements,
804
- appState,
805
- files,
806
- }));
807
- if (nextSceneJson === appliedSceneJson) {
808
- return;
809
- }
810
-
811
- appliedSceneJson = nextSceneJson;
812
- roomClient.scheduleSceneSync(elements, appState, files);
879
+ const liveElements = getLiveSceneElementsForSync(elements);
880
+ roomClient.scheduleSceneSync(liveElements, appState, files);
813
881
  }
814
882
 
815
883
  function initializeEditor(api) {
@@ -828,14 +896,27 @@ function initializeEditor(api) {
828
896
 
829
897
  setFollowedSocket(null, { force: true });
830
898
  }));
899
+ apiStateCleanupCallbacks.push(api.onStateChange('editingTextElement', (editingTextElement) => {
900
+ if (!editingTextElement) {
901
+ requestAnimationFrame(() => {
902
+ requestAnimationFrame(() => {
903
+ flushPendingRemoteScene();
904
+ });
905
+ });
906
+ }
907
+ }));
831
908
 
832
909
  const sceneJson = pendingRemoteSceneJson || roomClient?.getLastSceneJson?.() || '';
910
+ const initialScene = parseSceneJson(sceneJson);
833
911
  pendingRemoteSceneJson = '';
834
- updateApiScene(parseSceneJson(sceneJson));
912
+ appliedSceneJson = JSON.stringify(initialScene);
913
+ updateApiScene(initialScene);
835
914
 
836
915
  if (pendingCollaborators) {
916
+ const renderableCollaborators = buildRenderableCollaboratorsMap(pendingCollaborators);
917
+ lastRenderedCollaboratorsSignature = getCollaboratorsRenderSignature(renderableCollaborators);
837
918
  excalidrawAPI.updateScene({
838
- collaborators: pendingCollaborators,
919
+ collaborators: renderableCollaborators,
839
920
  captureUpdate: CaptureUpdateAction.NEVER,
840
921
  });
841
922
  pendingCollaborators = null;
@@ -863,6 +944,7 @@ async function init() {
863
944
 
864
945
  try {
865
946
  applySurfaceTheme(currentTheme);
947
+ applyDocumentMode();
866
948
  await ensureClientAuthenticated();
867
949
  const initialScene = await connectDocumentClient(currentDocument.filePath);
868
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,
@@ -38,14 +38,15 @@ import {
38
38
  } from '@codemirror/view';
39
39
  import { yCollab } from 'y-codemirror.next';
40
40
 
41
- import { isBaseFilePath, isPlantUmlFilePath } from '../../domain/file-kind.js';
41
+ import { isBaseFilePath, isMermaidFilePath, isPlantUmlFilePath } from '../../domain/file-kind.js';
42
42
  import { normalizeCommentQuote } from '../../domain/comment-threads.js';
43
43
  import { createMarkdownToolbarEdit } from '../domain/markdown-formatting.js';
44
+ import { mermaidLanguage, mermaidLanguageDescription } from '../domain/mermaid-language.js';
44
45
  import { wikiLinkCompletions } from '../domain/wiki-link-completions.js';
45
46
  import { plantUmlLanguage, plantUmlLanguageDescription } from '../domain/plantuml-language.js';
46
47
  import { handleImagePasteEvent } from './editor-paste-utils.js';
47
48
 
48
- const markdownCodeLanguages = [...languages, plantUmlLanguageDescription];
49
+ const markdownCodeLanguages = [...languages, mermaidLanguageDescription, plantUmlLanguageDescription];
49
50
  const pairedMatchingBracketMark = Decoration.mark({ class: 'cm-matchingBracket cm-matchingBracket-paired' });
50
51
  const nonmatchingBracketMark = Decoration.mark({ class: 'cm-nonmatchingBracket' });
51
52
  const remoteUpdateMark = Decoration.mark({ class: 'cm-remoteUpdateFlash' });
@@ -299,6 +300,10 @@ function createEditorTheme(theme) {
299
300
  }
300
301
 
301
302
  export function createLanguageExtension(filePath) {
303
+ if (isMermaidFilePath(filePath)) {
304
+ return mermaidLanguage;
305
+ }
306
+
302
307
  if (isPlantUmlFilePath(filePath)) {
303
308
  return plantUmlLanguage;
304
309
  }
@@ -846,6 +851,36 @@ export class EditorViewAdapter {
846
851
  return true;
847
852
  }
848
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
+
849
884
  scrollToPosition(position, alignment = 'center') {
850
885
  const state = this.editorView?.state;
851
886
  const scroller = this.editorView?.scrollDOM;
@@ -30,6 +30,48 @@ const DEFAULT_EMPTY_SCENE_GUARD_MS = 250;
30
30
  const DEFAULT_SAVE_THROTTLE_MS = 48;
31
31
  const DEFAULT_SYNC_TIMEOUT_MS = 4000;
32
32
 
33
+ function stableJson(value) {
34
+ if (Array.isArray(value)) {
35
+ return `[${value.map((entry) => stableJson(entry)).join(',')}]`;
36
+ }
37
+
38
+ if (value && typeof value === 'object') {
39
+ return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`).join(',')}}`;
40
+ }
41
+
42
+ return JSON.stringify(value);
43
+ }
44
+
45
+ function normalizeElementVersion(value) {
46
+ const version = Number(value);
47
+ return Number.isFinite(version) ? version : 0;
48
+ }
49
+
50
+ function normalizeElementVersionNonce(value) {
51
+ const versionNonce = Number(value);
52
+ return Number.isFinite(versionNonce) ? versionNonce : 0;
53
+ }
54
+
55
+ function shouldSyncElementToRoom(localElement, roomElement) {
56
+ if (!localElement?.id) {
57
+ return false;
58
+ }
59
+
60
+ if (!roomElement) {
61
+ return true;
62
+ }
63
+
64
+ const localVersion = normalizeElementVersion(localElement.version);
65
+ const roomVersion = normalizeElementVersion(roomElement.version);
66
+ if (localVersion !== roomVersion) {
67
+ return localVersion > roomVersion;
68
+ }
69
+
70
+ const localVersionNonce = normalizeElementVersionNonce(localElement.versionNonce);
71
+ const roomVersionNonce = normalizeElementVersionNonce(roomElement.versionNonce);
72
+ return localVersionNonce < roomVersionNonce;
73
+ }
74
+
33
75
  export class ExcalidrawRoomClient {
34
76
  constructor({
35
77
  cancelAnimationFrameFn = (frameId) => cancelAnimationFrame(frameId),
@@ -74,6 +116,7 @@ export class ExcalidrawRoomClient {
74
116
  this.handleProviderSync = null;
75
117
  this.lastSceneJson = '';
76
118
  this.sceneSyncTimer = null;
119
+ this.sceneSyncDueAt = 0;
77
120
  this.lastSceneSyncAt = 0;
78
121
  this.pendingSceneSyncPayload = null;
79
122
  this.pointerAwarenessFrame = 0;
@@ -86,6 +129,7 @@ export class ExcalidrawRoomClient {
86
129
  this.canWriteToRoom = false;
87
130
  this.waitingForAuthoritativeSync = false;
88
131
  this.applyingSharedSnapshotDepth = 0;
132
+ this.suppressStructuredSceneUpdateDepth = 0;
89
133
 
90
134
  this.handleAwarenessChange = () => {
91
135
  this.onCollaboratorsChange(buildCollaboratorsMap(this.awareness));
@@ -96,6 +140,10 @@ export class ExcalidrawRoomClient {
96
140
  return;
97
141
  }
98
142
 
143
+ if (this.suppressStructuredSceneUpdateDepth > 0) {
144
+ return;
145
+ }
146
+
99
147
  const remoteJson = this.getStructuredSceneJson();
100
148
  if (!remoteJson || remoteJson === this.lastSceneJson) {
101
149
  return;
@@ -386,6 +434,40 @@ export class ExcalidrawRoomClient {
386
434
  return nextAppState;
387
435
  }
388
436
 
437
+ buildLiveSceneDelta({
438
+ appState,
439
+ baseSceneJson,
440
+ elements,
441
+ files,
442
+ } = {}) {
443
+ const roomSceneJson = this.getStructuredSceneJson() || this.lastSceneJson || baseSceneJson;
444
+ const roomScene = parseSceneJson(roomSceneJson);
445
+ const nextAppState = this.mergeLocallyChangedAppState(appState, baseSceneJson);
446
+ const roomElementsById = new Map(roomScene.elements.map((element) => [element.id, element]));
447
+ const changedElements = (Array.isArray(elements) ? elements : []).filter((element) => (
448
+ shouldSyncElementToRoom(element, roomElementsById.get(element?.id))
449
+ ));
450
+ const nextFiles = files && typeof files === 'object' ? files : {};
451
+ const changedFiles = Object.fromEntries(
452
+ Object.entries(nextFiles).filter(([fileId, file]) => (
453
+ stableJson(file) !== stableJson(roomScene.files?.[fileId])
454
+ )),
455
+ );
456
+ const appStateChanged = (
457
+ nextAppState.gridSize !== roomScene.appState?.gridSize
458
+ || nextAppState.viewBackgroundColor !== roomScene.appState?.viewBackgroundColor
459
+ );
460
+
461
+ return {
462
+ hasChanges: changedElements.length > 0 || Object.keys(changedFiles).length > 0 || appStateChanged,
463
+ scene: buildLiveCollaborationScene(
464
+ changedElements,
465
+ nextAppState,
466
+ changedFiles,
467
+ ),
468
+ };
469
+ }
470
+
389
471
  scheduleSceneSync(elements, appState, files) {
390
472
  this.pendingSceneSyncPayload = {
391
473
  appState,
@@ -401,14 +483,20 @@ export class ExcalidrawRoomClient {
401
483
  }
402
484
 
403
485
  scheduleSceneSyncFlush() {
404
- if (this.sceneSyncTimer !== null) {
486
+ const elapsed = this.now() - this.lastSceneSyncAt;
487
+ const delay = Math.max(0, this.saveThrottleMs - elapsed);
488
+ const dueAt = this.now() + delay;
489
+ if (this.sceneSyncTimer !== null && this.sceneSyncDueAt <= dueAt) {
405
490
  return;
406
491
  }
407
492
 
408
- const elapsed = this.now() - this.lastSceneSyncAt;
409
- const delay = Math.max(0, this.saveThrottleMs - elapsed);
493
+ if (this.sceneSyncTimer !== null) {
494
+ this.clearTimeoutFn(this.sceneSyncTimer);
495
+ }
496
+ this.sceneSyncDueAt = dueAt;
410
497
  this.sceneSyncTimer = this.setTimeoutFn(() => {
411
498
  this.sceneSyncTimer = null;
499
+ this.sceneSyncDueAt = 0;
412
500
  this.flushSceneSync();
413
501
  }, delay);
414
502
  }
@@ -426,30 +514,45 @@ export class ExcalidrawRoomClient {
426
514
  } = this.pendingSceneSyncPayload;
427
515
  this.pendingSceneSyncPayload = null;
428
516
 
429
- const sceneData = buildLiveCollaborationScene(
430
- elements,
431
- this.mergeLocallyChangedAppState(appState, baseSceneJson),
432
- files,
433
- );
434
- const json = JSON.stringify(sceneData);
435
- if (this.shouldDelayEmptySceneCommit(json)) {
436
- this.pendingSceneSyncPayload = {
437
- appState,
438
- baseSceneJson,
517
+ if (Array.isArray(elements) && elements.length === 0) {
518
+ const emptyCandidate = buildLiveCollaborationScene(
439
519
  elements,
520
+ this.mergeLocallyChangedAppState(appState, baseSceneJson),
440
521
  files,
441
- };
442
- this.scheduleDelayedEmptySceneCommit();
443
- return;
522
+ );
523
+ if (this.shouldDelayEmptySceneCommit(JSON.stringify(emptyCandidate))) {
524
+ this.pendingSceneSyncPayload = {
525
+ appState,
526
+ baseSceneJson,
527
+ elements,
528
+ files,
529
+ };
530
+ this.scheduleDelayedEmptySceneCommit();
531
+ return;
532
+ }
444
533
  }
445
534
 
446
- if (json !== this.lastSceneJson) {
447
- this.lastSceneSyncAt = this.now();
448
- this.commitSceneJson(json, {
449
- origin: 'excalidraw-local-change',
450
- });
535
+ const {
536
+ hasChanges,
537
+ scene: sceneData,
538
+ } = this.buildLiveSceneDelta({
539
+ appState,
540
+ baseSceneJson,
541
+ elements,
542
+ files,
543
+ });
544
+
545
+ if (!hasChanges) {
546
+ this.pendingEmptySceneCandidate = null;
547
+ return;
451
548
  }
452
549
 
550
+ const json = JSON.stringify(sceneData);
551
+ this.lastSceneSyncAt = this.now();
552
+ this.commitSceneJson(json, {
553
+ origin: 'excalidraw-local-change',
554
+ });
555
+
453
556
  this.pendingEmptySceneCandidate = null;
454
557
 
455
558
  if (this.pendingSceneSyncPayload) {
@@ -510,8 +613,10 @@ export class ExcalidrawRoomClient {
510
613
  const firstSeenAt = this.pendingEmptySceneCandidate?.firstSeenAt ?? this.now();
511
614
  const elapsed = this.now() - firstSeenAt;
512
615
  const delay = Math.max(0, this.emptySceneGuardMs - elapsed);
616
+ this.sceneSyncDueAt = this.now() + delay;
513
617
  this.sceneSyncTimer = this.setTimeoutFn(() => {
514
618
  this.sceneSyncTimer = null;
619
+ this.sceneSyncDueAt = 0;
515
620
  this.flushSceneSync();
516
621
  }, delay);
517
622
  }
@@ -634,19 +739,25 @@ export class ExcalidrawRoomClient {
634
739
  return false;
635
740
  }
636
741
 
637
- this.lastSceneJson = normalizedJson;
638
-
639
- this.ydoc.transact(() => {
640
- applySceneDiffToExcalidrawRoom(this.ydoc, parseSceneJson(normalizedJson));
641
- }, origin);
742
+ let didChange = false;
743
+ this.suppressStructuredSceneUpdateDepth += 1;
744
+ try {
745
+ this.ydoc.transact(() => {
746
+ didChange = applySceneDiffToExcalidrawRoom(this.ydoc, parseSceneJson(normalizedJson));
747
+ }, origin);
748
+ } finally {
749
+ this.suppressStructuredSceneUpdateDepth = Math.max(0, this.suppressStructuredSceneUpdateDepth - 1);
750
+ }
642
751
 
643
- return true;
752
+ this.lastSceneJson = JSON.stringify(parseSceneJson(this.getStructuredSceneJson() || normalizedJson));
753
+ return didChange;
644
754
  }
645
755
 
646
756
  disconnect() {
647
757
  this.flushSceneSync();
648
758
  this.clearTimeoutFn(this.sceneSyncTimer);
649
759
  this.sceneSyncTimer = null;
760
+ this.sceneSyncDueAt = 0;
650
761
  this.pendingSceneSyncPayload = null;
651
762
 
652
763
  if (this.pointerAwarenessFrame) {
@@ -692,5 +803,6 @@ export class ExcalidrawRoomClient {
692
803
  this.canWriteToRoom = false;
693
804
  this.waitingForAuthoritativeSync = false;
694
805
  this.applyingSharedSnapshotDepth = 0;
806
+ this.suppressStructuredSceneUpdateDepth = 0;
695
807
  }
696
808
  }