collabmd 0.1.34 → 0.1.36

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 (375) hide show
  1. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-Bg0dawOb.js → CodeMirrorEditor-UCMRAMCV-DnBV8gCm.js} +1 -1
  2. package/dist/client/assets/_baseFor-BSErPbF2.js +1 -0
  3. package/dist/client/assets/{ar-SA-NXDWD63E-WivLHHDW.js → ar-SA-NXDWD63E-CTf_wpt3.js} +1 -1
  4. package/dist/client/assets/arc-DD8jaAGl.js +1 -0
  5. package/dist/client/assets/architecture-YZFGNWBL-DWWrde02.js +1 -0
  6. package/dist/client/assets/{architectureDiagram-2XIMDMQ5-kYbOThe4.js → architectureDiagram-Q4EWVU46-BftXiJA8.js} +4 -4
  7. package/dist/client/assets/{az-AZ-MXSORGZV-DOdq1TKC.js → az-AZ-MXSORGZV-C_C9i9u3.js} +1 -1
  8. package/dist/client/assets/{bg-BG-O6MV2KSF-CYucKuDS.js → bg-BG-O6MV2KSF-YmfvQf63.js} +1 -1
  9. package/dist/client/assets/blockDiagram-DXYQGD6D-6UN-nR8-.js +132 -0
  10. package/dist/client/assets/{bn-IN-MMW2ORAC-DYr8kqNL.js → bn-BD-T2VJNT7N-BD0ob0JE.js} +1 -1
  11. package/dist/client/assets/{bn-BD-T2VJNT7N-2OKWLCYa.js → bn-IN-MMW2ORAC-BTEFR4Ed.js} +1 -1
  12. package/dist/client/assets/c4Diagram-AHTNJAMY-Gz7ZAK0d.js +10 -0
  13. package/dist/client/assets/{ca-ES-MKBCGNOG-B9Aeb43I.js → ca-ES-MKBCGNOG-aLX_cjA0.js} +1 -1
  14. package/dist/client/assets/channel-XGCkuPi6.js +1 -0
  15. package/dist/client/assets/chunk-2KRD3SAO-CFcF2aNP.js +1 -0
  16. package/dist/client/assets/chunk-336JU56O-DvrrHsJT.js +2 -0
  17. package/dist/client/assets/chunk-426QAEUC-CEbmCgux.js +1 -0
  18. package/dist/client/assets/{chunk-4BX2VUAB-2e7V-uuE.js → chunk-4BX2VUAB-D5YiFdu1.js} +1 -1
  19. package/dist/client/assets/chunk-4TB4RGXK-CoouNThi.js +206 -0
  20. package/dist/client/assets/{chunk-55IACEB6-CpncB3ru.js → chunk-55IACEB6-VHgZjidg.js} +1 -1
  21. package/dist/client/assets/chunk-5FUZZQ4R-CxIIxXPy.js +62 -0
  22. package/dist/client/assets/chunk-5PVQY5BW-ciE7eHID.js +2 -0
  23. package/dist/client/assets/chunk-67CJDMHE-CW-fbgQB.js +1 -0
  24. package/dist/client/assets/chunk-7N4EOEYR-DbAW6XnF.js +1 -0
  25. package/dist/client/assets/chunk-AA7GKIK3-ClDHDAza.js +1 -0
  26. package/dist/client/assets/chunk-BSJP7CBP-D2KkrA_B.js +1 -0
  27. package/dist/client/assets/chunk-CIAEETIT-BnB8a6HR.js +1 -0
  28. package/dist/client/assets/{chunk-KX2RTZJC-BTiOJb7N.js → chunk-EDXVE4YY-M4QxyGNt.js} +1 -1
  29. package/dist/client/assets/chunk-ENJZ2VHE-BQj_1YA_.js +10 -0
  30. package/dist/client/assets/{chunk-FMBD7UC4-CMahlBa_.js → chunk-FMBD7UC4-qQT7MtX2.js} +1 -1
  31. package/dist/client/assets/chunk-FOC6F5B3-Bw6XfKDP.js +1 -0
  32. package/dist/client/assets/chunk-ICPOFSXX-DqJi89rc.js +122 -0
  33. package/dist/client/assets/chunk-K5T4RW27-CQtjKF2g.js +94 -0
  34. package/dist/client/assets/chunk-KGLVRYIC-BWSPiKjp.js +1 -0
  35. package/dist/client/assets/chunk-LIHQZDEY-DtYrHuCi.js +1 -0
  36. package/dist/client/assets/{chunk-AXZTUZBK-DuMiJYO9.js → chunk-LOOWOR4L-C5BUwXgZ.js} +2 -2
  37. package/dist/client/assets/chunk-ORNJ4GCN-Csga44e5.js +1 -0
  38. package/dist/client/assets/{chunk-NQ4KR5QH-CMJKI6Oj.js → chunk-OYMX7WX6-DvtmCasj.js} +25 -14
  39. package/dist/client/assets/chunk-QZHKN3VN-CHVH9_3S.js +1 -0
  40. package/dist/client/assets/{chunk-SRAX5OIU-CLVBQRWC.js → chunk-SRAX5OIU-yDw8XRsi.js} +1 -1
  41. package/dist/client/assets/{chunk-PU5JKC2W-D_6N6t8f.js → chunk-U2HBQHQK-BBXgsocS.js} +6 -6
  42. package/dist/client/assets/{chunk-PQ6SQG4A-D1AbThjy.js → chunk-X2U36JSP-D3OEPG7k.js} +1 -1
  43. package/dist/client/assets/{chunk-XPW4576I-DJr4_4Yy.js → chunk-XPW4576I-BUfyrOtN.js} +2 -2
  44. package/dist/client/assets/chunk-YHkbxXgt.js +1 -0
  45. package/dist/client/assets/chunk-YKPWT25G-GISHuloq.js +35 -0
  46. package/dist/client/assets/{chunk-JSJVCQXG-DPQ9cPJt.js → chunk-YZCP3GAM-D1jf1WUI.js} +1 -1
  47. package/dist/client/assets/{chunk-Z5NKEFVG-HOkYqaKa.js → chunk-Z5NKEFVG-Vu8zBV4H.js} +1 -1
  48. package/dist/client/assets/chunk-ZZ45TVLE-DGIhE_ST.js +1 -0
  49. package/dist/client/assets/classDiagram-6PBFFD2Q-D1KhAUL3.js +1 -0
  50. package/dist/client/assets/classDiagram-v2-HSJHXN6E-BSyyJpnR.js +1 -0
  51. package/dist/client/assets/clike-BFTLRaGS.js +1 -0
  52. package/dist/client/assets/clone-DI0bYZ1L.js +1 -0
  53. package/dist/client/assets/{coffeescript-B_7eyHAa.js → coffeescript-B7GZajzV.js} +1 -1
  54. package/dist/client/assets/{cose-bilkent-S5V4N54A-DASO2hrk.js → cose-bilkent-S5V4N54A-A8ssRFyt.js} +1 -1
  55. package/dist/client/assets/{cs-CZ-V77HGUP7-BDg-F0CJ.js → cs-CZ-V77HGUP7-Du3y53BB.js} +1 -1
  56. package/dist/client/assets/{cypher-DE6I2lIA.js → cypher-DEGl2llJ.js} +1 -1
  57. package/dist/client/assets/cytoscape.esm-BurByw8X.js +321 -0
  58. package/dist/client/assets/{d-BNkKjn0o.js → d-BspB0dox.js} +1 -1
  59. package/dist/client/assets/{da-DK-I5RFNTM4-wtSQ0Jxa.js → da-DK-I5RFNTM4-CDJtjf5s.js} +1 -1
  60. package/dist/client/assets/dagre-Dn6rkrte.js +1 -0
  61. package/dist/client/assets/dagre-KV5264BT-COzej2en.js +4 -0
  62. package/dist/client/assets/{de-CH-WLRDEVBV-C1swvmZy.js → de-CH-WLRDEVBV-CLV2tVw6.js} +1 -1
  63. package/dist/client/assets/{de-DE-DTI4WUSC-C0L6Nz8X.js → de-DE-DTI4WUSC-B53J0BQ8.js} +1 -1
  64. package/dist/client/assets/diagram-5BDNPKRD-BuK-UBuN.js +10 -0
  65. package/dist/client/assets/diagram-G4DWMVQ6-CbswIU9X.js +24 -0
  66. package/dist/client/assets/diagram-MMDJMWI5-BE-yOVGX.js +43 -0
  67. package/dist/client/assets/diagram-TYMM5635-CT8BdT4s.js +24 -0
  68. package/dist/client/assets/{dist-3uAMa5w5.js → dist-B98fHn5m.js} +1 -1
  69. package/dist/client/assets/{dist-BtnXjRx0.js → dist-BE8C_ouo.js} +1 -1
  70. package/dist/client/assets/{dist-rMhng5DK.js → dist-BEKQo64E.js} +1 -1
  71. package/dist/client/assets/{dist-DsL7sqZR.js → dist-BOP-dC-R.js} +1 -1
  72. package/dist/client/assets/{dist-DUvaQ-Bj.js → dist-BPEi1dEF.js} +1 -1
  73. package/dist/client/assets/{dist-B4uQVR_X.js → dist-BScEL4VP.js} +1 -1
  74. package/dist/client/assets/dist-BfVljg0L2.js +1 -0
  75. package/dist/client/assets/{dist-CGV1S_as.js → dist-BiCgLddE.js} +1 -1
  76. package/dist/client/assets/{dist-CxfohGIV.js → dist-Bn8WRPs1.js} +1 -1
  77. package/dist/client/assets/dist-Brrlevif.js +6 -0
  78. package/dist/client/assets/{dist-BLAlZer_.js → dist-CBEw2W2P.js} +1 -1
  79. package/dist/client/assets/{dist-B-02vKOA.js → dist-CJWCCWEW.js} +1 -1
  80. package/dist/client/assets/{dist-Dyt7n5Ui.js → dist-CQVTTk81.js} +1 -1
  81. package/dist/client/assets/dist-CaMl1R6P.js +13 -0
  82. package/dist/client/assets/dist-CcG3Y7Wp.js +1 -0
  83. package/dist/client/assets/dist-CghBwrO3.js +1 -0
  84. package/dist/client/assets/dist-Csbx9lQ-.js +1 -0
  85. package/dist/client/assets/dist-D34Xzrah.js +1 -0
  86. package/dist/client/assets/dist-DLyohOXi.js +1 -0
  87. package/dist/client/assets/{dist-Bc2ND6i3.js → dist-DPCUH5MO.js} +1 -1
  88. package/dist/client/assets/{dist-BzpfHRaE.js → dist-DQiph4qx.js} +1 -1
  89. package/dist/client/assets/{dist-CL-jjdvG.js → dist-DWRyOl2w.js} +1 -1
  90. package/dist/client/assets/{dist-CXpKYW9s.js → dist-DZ2t5lUX.js} +1 -1
  91. package/dist/client/assets/{dist-BzbYwa8m.js → dist-Dbg8P4C5.js} +1 -1
  92. package/dist/client/assets/{dist-k47-Io7D.js → dist-DdAqzGFU.js} +1 -1
  93. package/dist/client/assets/dist-DwvSvkOE.js +1 -0
  94. package/dist/client/assets/dist-WXLmfDGg.js +1 -0
  95. package/dist/client/assets/{dist-lDhnP-K1.js → dist-aE0_04fl.js} +1 -1
  96. package/dist/client/assets/{dist-E_jPb93e.js → dist-mPPUaHhq.js} +1 -1
  97. package/dist/client/assets/{dist-CjII8VDS.js → dist-v3i1ifes.js} +1 -1
  98. package/dist/client/assets/dist-wkd-N1L5.js +1 -0
  99. package/dist/client/assets/drawio-editor-D4Qoluwz.js +9 -0
  100. package/dist/client/assets/{drawioEditor-D6clB5OH.js → drawioEditor-B65FWq-b.js} +2 -2
  101. package/dist/client/assets/{ecl-M7Iek4lq.js → ecl-D9rhJ9-u.js} +1 -1
  102. package/dist/client/assets/editor-session-DV80PhYL.js +16 -0
  103. package/dist/client/assets/{el-GR-ZXDJ2OS4-BH0saXds.js → el-GR-ZXDJ2OS4-DFmRQv0o.js} +1 -1
  104. package/dist/client/assets/{en-IQZW2TQM-CzlcEpq3.js → en-CMP6EMR6-D9x8hVSu.js} +1 -1
  105. package/dist/client/assets/{erDiagram-INFDFZHY-DlIf-fb7.js → erDiagram-SMLLAGMA-6VFZA3Qb.js} +33 -18
  106. package/dist/client/assets/{es-ES-DYQHAD43-CyzL9Mni.js → es-ES-DYQHAD43-BiGWIrBG.js} +1 -1
  107. package/dist/client/assets/{eu-ES-QDSYU5Y3-D2-x316S.js → eu-ES-QDSYU5Y3-BjwS0kZi.js} +1 -1
  108. package/dist/client/assets/excalidraw-editor-BZCE9ydu.css +1 -0
  109. package/dist/client/assets/excalidraw-editor-hiJQt1cX.js +9 -0
  110. package/dist/client/assets/{excalidraw-mermaid-stub-Bwe-bKcT.js → excalidraw-mermaid-stub-Df0Q2qkW.js} +1 -1
  111. package/dist/client/assets/excalidraw-scene-MyNAJi2A.js +176 -0
  112. package/dist/client/assets/excalidrawEditor-BnbblxK4.js +2 -0
  113. package/dist/client/assets/{export-page-PeexH2QK.js → export-page-BKDarp9x.js} +3 -3
  114. package/dist/client/assets/exportDocument-CULEGKmb.js +2 -0
  115. package/dist/client/assets/{fa-IR-26LZG4PM-D8-trU2x.js → fa-IR-26LZG4PM-BgANg2TD.js} +1 -1
  116. package/dist/client/assets/{fcl-BWKK0S4-.js → fcl-CUXJFJn1.js} +1 -1
  117. package/dist/client/assets/{fi-FI-6YS4KDE4-CCdRVFDQ.js → fi-FI-6YS4KDE4-CBL5f3oN.js} +1 -1
  118. package/dist/client/assets/flatten-DjXjUsvv.js +1 -0
  119. package/dist/client/assets/flowDiagram-DWJPFMVM-DO9RH8YQ.js +162 -0
  120. package/dist/client/assets/{fr-FR-BRLLPTZC-Dqq-O5T_.js → fr-FR-BRLLPTZC-CRibNSLG.js} +1 -1
  121. package/dist/client/assets/ganttDiagram-T4ZO3ILL-B-NMvHWN.js +292 -0
  122. package/dist/client/assets/gitGraph-7Q5UKJZL-DWNinXu4.js +1 -0
  123. package/dist/client/assets/gitGraphDiagram-UUTBAWPF-B95qkCUx.js +106 -0
  124. package/dist/client/assets/{gl-ES-OKUZTLYG-BK7pbLbm.js → gl-ES-OKUZTLYG-DEDwa_xt.js} +1 -1
  125. package/dist/client/assets/graphlib-CAwOVCJc.js +1 -0
  126. package/dist/client/assets/{groovy-BEKazBrO.js → groovy-Di--Vb9Z.js} +1 -1
  127. package/dist/client/assets/{haxe-BY9d_5nB.js → haxe-CcPA1xnA.js} +1 -1
  128. package/dist/client/assets/{he-IL-26MGYIU7-C3BuYKyY.js → he-IL-26MGYIU7-47wxy70N.js} +1 -1
  129. package/dist/client/assets/{hi-IN-Q4ZOGTP2-BEvXWXnH.js → hi-IN-Q4ZOGTP2-bhV7c3dK.js} +1 -1
  130. package/dist/client/assets/{hu-HU-P2OXPSN5-BWWZeJNp.js → hu-HU-P2OXPSN5-xG-gBMzE.js} +1 -1
  131. package/dist/client/assets/{id-ID-2EIKXYN6-DxSKi_aJ.js → id-ID-2EIKXYN6-MQuYaNHo.js} +1 -1
  132. package/dist/client/assets/image-J2CAS7OM-DD4DaQTs.js +1 -0
  133. package/dist/client/assets/image-blob-reduce.esm-D8JQdTFk.js +2 -0
  134. package/dist/client/assets/{index-BLrtj9YM.js → index-BjdYZiBM.js} +2 -2
  135. package/dist/client/assets/{index-BIt5EZXz.css → index-BryqP9QY.css} +1 -1
  136. package/dist/client/assets/info-OMHHGYJF-DtYG_rX0.js +1 -0
  137. package/dist/client/assets/{infoDiagram-LFFYTUFH-DFTI0nfs.js → infoDiagram-42DDH7IO-C77Pt7T1.js} +1 -1
  138. package/dist/client/assets/isEmpty-CpfhGGBo.js +1 -0
  139. package/dist/client/assets/ishikawaDiagram-UXIWVN3A-Cy1fwvvg.js +70 -0
  140. package/dist/client/assets/{it-IT-4CFKVXI2-BmA8wW6q.js → it-IT-4CFKVXI2-v2kj-y7j.js} +1 -1
  141. package/dist/client/assets/{ja-JP-MAND2Z4V-CLS1jI9o.js → ja-JP-MAND2Z4V-BahXSQz-.js} +1 -1
  142. package/dist/client/assets/{javascript-CdiVhQeA.js → javascript-gTK9fxz6.js} +1 -1
  143. package/dist/client/assets/javascript-qUBHINSy.js +1 -0
  144. package/dist/client/assets/{journeyDiagram-4ABVD52K-DDur6iHm.js → journeyDiagram-VCZTEJTY-CYWaI6re.js} +2 -2
  145. package/dist/client/assets/{jsx-runtime-C2p7wRmT.js → jsx-runtime-1KUJVfx8.js} +1 -1
  146. package/dist/client/assets/{kaa-HQRTCXTJ-W15DEDPz.js → kaa-HQRTCXTJ-BF26ydFa.js} +1 -1
  147. package/dist/client/assets/{kab-KAB-JKIKKTGH-MLh1inqS.js → kab-KAB-JKIKKTGH-CEIH0F80.js} +1 -1
  148. package/dist/client/assets/{kanban-definition-K7BYSVSG-dA6NPLsg.js → kanban-definition-6JOO6SKY-DY1xE7tm.js} +2 -2
  149. package/dist/client/assets/{kk-KZ-HXQ63ZFC-BtFrPeLs.js → kk-KZ-HXQ63ZFC-CxWjc9Sf.js} +1 -1
  150. package/dist/client/assets/{km-KH-PKL3LSGX-xO5FyM9T.js → km-KH-PKL3LSGX-DJlCteEp.js} +1 -1
  151. package/dist/client/assets/{ko-KR-KXLREZX3-NZFoRybS.js → ko-KR-KXLREZX3-B1gtI_ci.js} +1 -1
  152. package/dist/client/assets/{ku-TR-MJ4IER3X-B5eVPIpK.js → ku-TR-MJ4IER3X-Bf41y2v2.js} +1 -1
  153. package/dist/client/assets/line-BCItEgq3.js +1 -0
  154. package/dist/client/assets/{linear-B2dOdA24.js → linear-dsIQT_iU.js} +1 -1
  155. package/dist/client/assets/{lt-LT-H6WFQ6FJ-D_7_OeJD.js → lt-LT-H6WFQ6FJ-DA1or-Eo.js} +1 -1
  156. package/dist/client/assets/{lua-kutgyRGY.js → lua-Cg0FqIlO.js} +1 -1
  157. package/dist/client/assets/{lv-LV-GOCK6SJW-CnpKr0oQ.js → lv-LV-GOCK6SJW-qa0BoYMm.js} +1 -1
  158. package/dist/client/assets/main-QJcxyvDa.js +1404 -0
  159. package/dist/client/assets/mermaid-parser.core-CsTVsPcD.js +4 -0
  160. package/dist/client/assets/mermaid-runtime-BGlnoUXY.js +11 -0
  161. package/dist/client/assets/{mindmap-definition-YRQLILUH-DjQcsPoe.js → mindmap-definition-QFDTVHPH-DB_M5r-j.js} +39 -11
  162. package/dist/client/assets/{mr-IN-IXVLDMEQ-Pht2X_GK.js → mr-IN-IXVLDMEQ-DXFRgvgb.js} +1 -1
  163. package/dist/client/assets/{my-MM-YG6MYTTD-Cgq4HhPO.js → my-MM-YG6MYTTD-BKDIfalJ.js} +1 -1
  164. package/dist/client/assets/{nb-NO-XGWJISD2-Bn_Bk2un.js → nb-NO-XGWJISD2-DbwbopH8.js} +1 -1
  165. package/dist/client/assets/{nl-NL-XVDVCPNC-YkWSJS94.js → nl-NL-XVDVCPNC-ChSneTSU.js} +1 -1
  166. package/dist/client/assets/{nn-NO-EMX5MJX5-DhP5eZJ7.js → nn-NO-EMX5MJX5-Cf7ZWKWZ.js} +1 -1
  167. package/dist/client/assets/{oc-FR-ROEINTVO-D3udMPnr.js → oc-FR-ROEINTVO-lM7Nl7hD.js} +1 -1
  168. package/dist/client/assets/{pa-IN-ZYN6SUDY-CR5YzFig.js → pa-IN-ZYN6SUDY-C9WNUTeR.js} +1 -1
  169. package/dist/client/assets/packet-4T2RLAQJ-CUVefhAv.js +1 -0
  170. package/dist/client/assets/percentages-5DKR754L-DuhOjTM2.js +1 -0
  171. package/dist/client/assets/pica-CgGaIJly.js +2 -0
  172. package/dist/client/assets/pie-ZZUOXDRM-BHBJ1dLX.js +1 -0
  173. package/dist/client/assets/pieDiagram-DEJITSTG-BOo-WzjZ.js +30 -0
  174. package/dist/client/assets/{pl-PL-6VTG7PHC-_wZuoIDM.js → pl-PL-6VTG7PHC-DqRVepnC.js} +1 -1
  175. package/dist/client/assets/{preview-diagram-utils-COt-IYMD.js → preview-diagram-utils-Nqpp4FNV.js} +1 -1
  176. package/dist/client/assets/preview-render-compiler-BCB8u6iM.js +1 -0
  177. package/dist/client/assets/{preview-render-compiler-BjLlHmiQ.js → preview-render-compiler-Tkc6JX1O.js} +2 -2
  178. package/dist/client/assets/{preview-render-profile-CR4dJZrp.js → preview-render-profile-Bf6R7v4w.js} +6 -6
  179. package/dist/client/assets/{preview-render-worker-B4dH2yxj.js → preview-render-worker-1LBLqgKu.js} +7 -7
  180. package/dist/client/assets/{pt-BR-5YFKRR5G-M7gIm2Hi.js → pt-BR-5YFKRR5G-CopLYEA6.js} +1 -1
  181. package/dist/client/assets/{pt-PT-GEIXXZ67-CcxWpkGj.js → pt-PT-GEIXXZ67-BjZ_Lphg.js} +1 -1
  182. package/dist/client/assets/{pug-DkUcLYWt.js → pug-lkTEco3G.js} +1 -1
  183. package/dist/client/assets/{python-CZtTmYkS.js → python-BUyhM0Ew.js} +1 -1
  184. package/dist/client/assets/{q-I27iQntV.js → q-Dls1OX0D.js} +1 -1
  185. package/dist/client/assets/{quadrantDiagram-337W2JSQ-CYKgdx7K.js → quadrantDiagram-34T5L4WZ-2vfo0l5S.js} +1 -1
  186. package/dist/client/assets/{quick-switcher-controller-DcyllYpm.js → quick-switcher-controller-B1erSgJ1.js} +1 -1
  187. package/dist/client/assets/{r-DN_EydfL.js → r-DeZ8Mdev.js} +1 -1
  188. package/dist/client/assets/radar-PYXPWWZC-2jR4qZNU.js +1 -0
  189. package/dist/client/assets/reduce-ChpYjEUB.js +1 -0
  190. package/dist/client/assets/requirementDiagram-MS252O5E-CtUIQnWa.js +84 -0
  191. package/dist/client/assets/{ro-RO-E2P6TFZI-qR9noVzP.js → ro-RO-E2P6TFZI-DakDz5Xu.js} +1 -1
  192. package/dist/client/assets/{room-yJaBAoEU.js → room-z2w9b96b.js} +1 -1
  193. package/dist/client/assets/{ru-RU-YBIIY43T-CE4S_RX8.js → ru-RU-YBIIY43T-BMvCT-XT.js} +1 -1
  194. package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-CfHe3D6R.js → sankeyDiagram-XADWPNL6-tcSeuifE.js} +1 -1
  195. package/dist/client/assets/sequenceDiagram-FGHM5R23-DtF-1Kt2.js +157 -0
  196. package/dist/client/assets/{si-LK-673C2CI2-Bv6Avh3z.js → si-LK-673C2CI2-hGdH1S9E.js} +1 -1
  197. package/dist/client/assets/{sk-SK-CKZHQ4AP-Cnlpp55z.js → sk-SK-CKZHQ4AP-DiRA-fj8.js} +1 -1
  198. package/dist/client/assets/{sl-SI-557H2GWM-BfGq7AQF.js → sl-SI-557H2GWM-DN94n_1-.js} +1 -1
  199. package/dist/client/assets/{sparql-BOvq0dv7.js → sparql-vm8qNO8J.js} +1 -1
  200. package/dist/client/assets/sql-GL7dVWcd.js +1 -0
  201. package/dist/client/assets/src-BuiVcSz-.js +1 -0
  202. package/dist/client/assets/stateDiagram-FHFEXIEX-DKk7Sb0f.js +1 -0
  203. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DJUaiADr.js +1 -0
  204. package/dist/client/assets/subset-shared.chunk-CWNYNLru.js +1 -0
  205. package/dist/client/assets/{subset-worker.chunk-BSCP6IiC.js → subset-worker.chunk-kj1e3wjW.js} +1 -1
  206. package/dist/client/assets/{sv-SE-XOPKKDWS-B2_Vk-sp.js → sv-SE-XOPKKDWS-CkHUNABj.js} +1 -1
  207. package/dist/client/assets/{swift-BCxe4-cw.js → swift-CKcKnWv9.js} +1 -1
  208. package/dist/client/assets/{ta-IN-XBH7DQI3-BXQMZZIx.js → ta-IN-XBH7DQI3-W-157oVK.js} +1 -1
  209. package/dist/client/assets/{th-TH-TOCWH3R4-C-ZIYMfH.js → th-TH-TOCWH3R4-BsU-Pydr.js} +1 -1
  210. package/dist/client/assets/timeline-definition-GMOUNBTQ-Bs6U53Mo.js +120 -0
  211. package/dist/client/assets/{tr-TR-GXW6CYY5-dl702PMA.js → tr-TR-GXW6CYY5-CTddyq89.js} +1 -1
  212. package/dist/client/assets/treeView-SZITEDCU-DN5dP2ol.js +1 -0
  213. package/dist/client/assets/treemap-W4RFUUIX-Dva7DBJR.js +1 -0
  214. package/dist/client/assets/{turtle-GBz_E4RG.js → turtle-BkP3ExOG.js} +1 -1
  215. package/dist/client/assets/{uk-UA-IJKTNUDG-CUYQvSSF.js → uk-UA-IJKTNUDG-1LzXkII3.js} +1 -1
  216. package/dist/client/assets/{uz-UZ-TBZZEA4V-B9qw0PXX.js → uz-UZ-TBZZEA4V-kqm-qcUj.js} +1 -1
  217. package/dist/client/assets/{vault-api-client-p7h7cXKM.js → vault-api-client-DSx3mWkH.js} +1 -1
  218. package/dist/client/assets/{vault-utils-5Xr0MXCb.js → vault-utils-CRpy8MQz.js} +1 -1
  219. package/dist/client/assets/vennDiagram-DHZGUBPP-DNnIjRae.js +34 -0
  220. package/dist/client/assets/{verilog-C4wTycyo.js → verilog-DSARZZPc.js} +1 -1
  221. package/dist/client/assets/{vhdl-Bwndeg44.js → vhdl-CnYyYTpa.js} +1 -1
  222. package/dist/client/assets/{vi-VN-MULSGNVB-DqxZ_sVc.js → vi-VN-MULSGNVB-C3H2AUhm.js} +1 -1
  223. package/dist/client/assets/wardley-RL74JXVD-CDZW5uzY.js +1 -0
  224. package/dist/client/assets/wardleyDiagram-NUSXRM2D-C-scJfPY.js +20 -0
  225. package/dist/client/assets/{xychartDiagram-JWTSCODW-C3vA70iJ.js → xychartDiagram-5P7HB3ND-D3nQoxhz.js} +6 -6
  226. package/dist/client/assets/yjs-provider-reset-guard-DSPzcvAO.js +4 -0
  227. package/dist/client/assets/{zh-CN-MVX3E32U-BM0aLuGc.js → zh-CN-MVX3E32U-BULPbsyl.js} +1 -1
  228. package/dist/client/assets/{zh-HK-JNU5RLIE-dmG_YD0d.js → zh-HK-JNU5RLIE-bNGmeSaW.js} +1 -1
  229. package/dist/client/assets/{zh-TW-LENVCA6T-LFgbiOi3.js → zh-TW-LENVCA6T-CQDp064P.js} +1 -1
  230. package/dist/client/drawio-editor.html +1 -1
  231. package/dist/client/excalidraw-editor.html +1 -1
  232. package/dist/client/export-document.html +1 -1
  233. package/dist/client/index.html +2 -2
  234. package/package.json +15 -15
  235. package/src/client/application/app-shell/presence-feature.js +265 -34
  236. package/src/client/application/app-shell/ui-feature-shell.js +31 -5
  237. package/src/client/application/app-shell/ui-feature-tab-activity.js +1 -0
  238. package/src/client/application/app-shell/workspace-feature.js +5 -2
  239. package/src/client/application/app-shell-elements.js +3 -0
  240. package/src/client/application/diagram-preview-export.js +304 -0
  241. package/src/client/application/mermaid-preview-hydrator.js +153 -23
  242. package/src/client/application/plantuml-preview-hydrator.js +155 -20
  243. package/src/client/application/preview-diagram-utils.js +48 -8
  244. package/src/client/application/preview-renderer.js +2 -0
  245. package/src/client/application/quick-switcher-loader.js +42 -0
  246. package/src/client/application/workspace-route-controller.js +35 -2
  247. package/src/client/application/workspace-state-store.js +1 -0
  248. package/src/client/bootstrap/collabmd-app-shell.js +25 -20
  249. package/src/client/domain/diagram-action-icons.js +21 -0
  250. package/src/client/domain/excalidraw-api-scene-sync.js +70 -0
  251. package/src/client/domain/keyboard-shortcuts.js +8 -0
  252. package/src/client/drawio-editor.js +13 -0
  253. package/src/client/excalidraw-editor.js +119 -18
  254. package/src/client/infrastructure/excalidraw-room-client.js +42 -5
  255. package/src/client/infrastructure/workspace-sync-client.js +26 -3
  256. package/src/client/presentation/app-shell-template.js +18 -1
  257. package/src/client/presentation/comment-ui/comment-ui-card.js +83 -3
  258. package/src/client/presentation/comment-ui/comment-ui-state.js +25 -2
  259. package/src/client/presentation/drawio-embed-controller.js +18 -0
  260. package/src/client/presentation/excalidraw-embed-controller.js +7 -0
  261. package/src/client/presentation/file-explorer-controller.js +10 -0
  262. package/src/client/presentation/file-explorer-view.js +6 -0
  263. package/src/client/presentation/git-panel-controller.js +2 -0
  264. package/src/client/presentation/image-lightbox-controller.js +290 -29
  265. package/src/client/styles/features/collaboration-presence.css +212 -0
  266. package/src/client/styles/features/diagram-preview.css +71 -4
  267. package/src/client/styles/features/embedded-preview.css +4 -6
  268. package/src/client/styles/features/media-lightbox.css +2 -0
  269. package/src/server/config/env.js +4 -0
  270. package/src/server/create-app-server.js +2 -0
  271. package/src/server/domain/backlink-index.js +33 -72
  272. package/src/server/domain/bases/base-index-snapshot-store.js +46 -62
  273. package/src/server/domain/bases/base-query-service.js +89 -7
  274. package/src/server/domain/collaboration/collaboration-room.js +10 -1
  275. package/src/server/domain/markdown-reference-extractor.js +233 -0
  276. package/src/server/infrastructure/http/create-request-handler.js +1 -0
  277. package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
  278. package/src/server/infrastructure/http/create-vault-api-query-handler.js +100 -26
  279. package/src/server/infrastructure/persistence/vault-file-store.js +175 -4
  280. package/src/server/infrastructure/workspace/file-system-sync-service.js +45 -21
  281. package/dist/client/assets/_basePickBy-Dv0sK1l7.js +0 -1
  282. package/dist/client/assets/_baseUniq-DKYX57ji.js +0 -1
  283. package/dist/client/assets/arc-DrfYGhWk.js +0 -1
  284. package/dist/client/assets/architecture-PBZL5I3N-DiglIZi9.js +0 -1
  285. package/dist/client/assets/blockDiagram-WCTKOSBZ-GIgTqnhk.js +0 -132
  286. package/dist/client/assets/c4Diagram-IC4MRINW-CkHO1i_L.js +0 -10
  287. package/dist/client/assets/channel-CgsU9TSN.js +0 -1
  288. package/dist/client/assets/chunk-7E7YKBS2-TdU92i9i.js +0 -1
  289. package/dist/client/assets/chunk-7R4GIKGN-mqd2GwMg.js +0 -80
  290. package/dist/client/assets/chunk-C72U2L5F-CJKQWBtz.js +0 -1
  291. package/dist/client/assets/chunk-DpHwWhuW.js +0 -1
  292. package/dist/client/assets/chunk-EGIJ26TM-C4nq20om.js +0 -1
  293. package/dist/client/assets/chunk-GEFDOKGD-Bs7FmFox.js +0 -2
  294. package/dist/client/assets/chunk-GLR3WWYH-qQe2O5VQ.js +0 -2
  295. package/dist/client/assets/chunk-HHEYEP7N-DlevL8bq.js +0 -1
  296. package/dist/client/assets/chunk-KYZI473N-CTSCuqRb.js +0 -53
  297. package/dist/client/assets/chunk-L3YUKLVL-CJZMBtKF.js +0 -1
  298. package/dist/client/assets/chunk-MX3YWQON-DQpSwRf6.js +0 -1
  299. package/dist/client/assets/chunk-NU2UP6EN-DlUENSHU.js +0 -35
  300. package/dist/client/assets/chunk-O4XLMI2P-CcVxZh41.js +0 -7
  301. package/dist/client/assets/chunk-OZEHJAEY-DjBZbgu0.js +0 -1
  302. package/dist/client/assets/chunk-QZHKN3VN-CgLPFSk5.js +0 -1
  303. package/dist/client/assets/chunk-R5LLSJPH-CkjKXM73.js +0 -1
  304. package/dist/client/assets/chunk-WL4C6EOR-axcuKSup.js +0 -189
  305. package/dist/client/assets/chunk-XIRO2GV7-4wqVHjs_.js +0 -1
  306. package/dist/client/assets/chunk-XZSTWKYB-C8Y_hIKZ.js +0 -94
  307. package/dist/client/assets/chunk-YBOYWFTD-CKg4ymFF.js +0 -1
  308. package/dist/client/assets/classDiagram-VBA2DB6C-BHZpvOxK.js +0 -1
  309. package/dist/client/assets/classDiagram-v2-RAHNMMFH-DA7HMUUs.js +0 -1
  310. package/dist/client/assets/clike-1_ZsiVV8.js +0 -1
  311. package/dist/client/assets/clone-Dgi8Z4IL.js +0 -1
  312. package/dist/client/assets/cytoscape.esm-Czjc507F.js +0 -321
  313. package/dist/client/assets/dagre-CfB3Fw33.js +0 -1
  314. package/dist/client/assets/dagre-KLK3FWXG-CC7tq2Ky.js +0 -4
  315. package/dist/client/assets/diagram-E7M64L7V-CMt7BN5M.js +0 -24
  316. package/dist/client/assets/diagram-IFDJBPK2-BFMBUGpd.js +0 -43
  317. package/dist/client/assets/diagram-P4PSJMXO-CviA1xXr.js +0 -24
  318. package/dist/client/assets/dist-3bQB_we3.js +0 -1
  319. package/dist/client/assets/dist-8Igu3Ee_2.js +0 -1
  320. package/dist/client/assets/dist-BU8uusJX.js +0 -1
  321. package/dist/client/assets/dist-BVB8rn7o.js +0 -1
  322. package/dist/client/assets/dist-D5QOYy7y.js +0 -6
  323. package/dist/client/assets/dist-DIi0uqLJ.js +0 -1
  324. package/dist/client/assets/dist-DJ16N7ol.js +0 -1
  325. package/dist/client/assets/dist-DWJL3_bF.js +0 -13
  326. package/dist/client/assets/dist-O1z0Ayg0.js +0 -1
  327. package/dist/client/assets/dist-OQE68wIX.js +0 -1
  328. package/dist/client/assets/dist-x7PIEmJu.js +0 -1
  329. package/dist/client/assets/drawio-editor-BMTwP5mD.js +0 -9
  330. package/dist/client/assets/editor-session-Dzy_85Wp.js +0 -16
  331. package/dist/client/assets/excalidraw-editor-CAP9F8CB.js +0 -9
  332. package/dist/client/assets/excalidraw-editor-Dj3i59LW.css +0 -1
  333. package/dist/client/assets/excalidraw-scene-BF_bT1OL.js +0 -176
  334. package/dist/client/assets/excalidrawEditor-DD4AvzYP.js +0 -2
  335. package/dist/client/assets/exportDocument-Zfwq1XVx.js +0 -2
  336. package/dist/client/assets/flowDiagram-PKNHOUZH-C_t-mkwb.js +0 -162
  337. package/dist/client/assets/ganttDiagram-A5KZAMGK-BtK9Tb--.js +0 -292
  338. package/dist/client/assets/gitGraph-HDMCJU4V-CT7YfbD3.js +0 -1
  339. package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-DULDLGiJ.js +0 -65
  340. package/dist/client/assets/graphlib-BgRST-Qg.js +0 -1
  341. package/dist/client/assets/image-XLNPCCAD-CFiKwiWK.js +0 -1
  342. package/dist/client/assets/image-blob-reduce.esm-DriR2zT9.js +0 -2
  343. package/dist/client/assets/info-3K5VOQVL-DUpNyDC-.js +0 -1
  344. package/dist/client/assets/isArrayLikeObject-BId_dPHM.js +0 -1
  345. package/dist/client/assets/isEmpty-CVvRj8fj.js +0 -1
  346. package/dist/client/assets/ishikawaDiagram-PHBUUO56-DpBuDpC6.js +0 -70
  347. package/dist/client/assets/javascript-UJe68_xi.js +0 -1
  348. package/dist/client/assets/line-B2GMovaI.js +0 -1
  349. package/dist/client/assets/main-CfSHaGes.js +0 -1368
  350. package/dist/client/assets/math-B-LMBwub.js +0 -1
  351. package/dist/client/assets/mermaid-parser.core-B1ogGcR8.js +0 -4
  352. package/dist/client/assets/mermaid-runtime-Bn8A6DGx.js +0 -11
  353. package/dist/client/assets/packet-RMMSAZCW-DEwNbIrA.js +0 -1
  354. package/dist/client/assets/percentages-5DKR754L-D7n4T776.js +0 -1
  355. package/dist/client/assets/pica-C1TdTz-C.js +0 -2
  356. package/dist/client/assets/pie-UPGHQEXC-D5M_lSjo.js +0 -1
  357. package/dist/client/assets/pieDiagram-SKSYHLDU-jhHouFpk.js +0 -30
  358. package/dist/client/assets/preview-render-compiler-Duy_3IcP.js +0 -1
  359. package/dist/client/assets/radar-KQ55EAFF-AU1qh3Bw.js +0 -1
  360. package/dist/client/assets/requirementDiagram-Z7DCOOCP-D9SHxoW7.js +0 -73
  361. package/dist/client/assets/sequenceDiagram-2WXFIKYE-CZsMMqAJ.js +0 -145
  362. package/dist/client/assets/sql-DDFeQNTK.js +0 -1
  363. package/dist/client/assets/src-Pgt9Gp65.js +0 -1
  364. package/dist/client/assets/stateDiagram-RAJIS63D-CoNZjTYV.js +0 -1
  365. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-1zOw6NmQ.js +0 -1
  366. package/dist/client/assets/subset-shared.chunk-C9HjwTXy.js +0 -1
  367. package/dist/client/assets/timeline-definition-YZTLITO2-DSe2mrG8.js +0 -61
  368. package/dist/client/assets/treemap-KZPCXAKY-C9UI2fwP.js +0 -1
  369. package/dist/client/assets/vennDiagram-LZ73GAT5-xSzaIpy1.js +0 -34
  370. package/dist/client/assets/yjs-provider-reset-guard-CtERLBID.js +0 -4
  371. /package/dist/client/assets/{drawio-room-DEivFyNV.js → drawio-room-1i6Nn0_Z.js} +0 -0
  372. /package/dist/client/assets/{excalidraw-mermaid-stub-BZPU4ZhU.js → excalidraw-mermaid-stub-DzxtBcQW.js} +0 -0
  373. /package/dist/client/assets/{file-kind-DBptLlF_.js → file-kind-DmKq2MvD.js} +0 -0
  374. /package/dist/client/assets/{rough.esm-DE_lJ5Ge.js → rough.esm-BU2knLt9.js} +0 -0
  375. /package/dist/client/assets/{runtime-config-CqhchMC4.js → runtime-config-DWTejofP.js} +0 -0
@@ -75,13 +75,12 @@
75
75
 
76
76
  .preview-content .mermaid-toolbar,
77
77
  .mermaid-maximized-root .mermaid-toolbar {
78
- justify-content: flex-end;
78
+ width: 100%;
79
79
  }
80
80
 
81
81
  .preview-content .mermaid-zoom-btn,
82
82
  .mermaid-maximized-root .mermaid-zoom-btn {
83
- min-width: 32px;
84
- line-height: 1.5;
83
+ flex-shrink: 0;
85
84
  }
86
85
 
87
86
  .preview-content .mermaid-zoom-btn:disabled,
@@ -174,13 +173,12 @@ body.mermaid-maximized-open::before {
174
173
 
175
174
  .preview-content .plantuml-toolbar,
176
175
  .plantuml-maximized-root .plantuml-toolbar {
177
- justify-content: flex-end;
176
+ width: 100%;
178
177
  }
179
178
 
180
179
  .preview-content .plantuml-tool-btn,
181
180
  .plantuml-maximized-root .plantuml-tool-btn {
182
- min-width: 32px;
183
- line-height: 1.5;
181
+ flex-shrink: 0;
184
182
  }
185
183
 
186
184
  .preview-content .plantuml-frame,
@@ -68,6 +68,8 @@
68
68
 
69
69
  .image-lightbox-btn {
70
70
  min-width: 0;
71
+ min-height: 40px;
72
+ min-width: 40px;
71
73
  padding: 8px 12px;
72
74
  border: none;
73
75
  border-radius: var(--radius-full);
@@ -322,6 +322,10 @@ export function loadConfig(overrides = {}) {
322
322
  httpRequestTimeoutMs: parsePositiveInt(process.env.HTTP_REQUEST_TIMEOUT_MS, 30_000),
323
323
  git,
324
324
  gitEnabled: git.enabled,
325
+ maxArchiveEntries: parsePositiveInt(process.env.COLLABMD_MAX_ARCHIVE_ENTRIES, 10_000),
326
+ maxBaseQueryRows: parsePositiveInt(process.env.COLLABMD_MAX_BASE_QUERY_ROWS, 5_000),
327
+ maxDownloadFileBytes: parsePositiveInt(process.env.COLLABMD_MAX_DOWNLOAD_FILE_BYTES, 268_435_456),
328
+ maxInitialSyncBytes: parsePositiveInt(process.env.COLLABMD_MAX_INITIAL_SYNC_BYTES, 16_777_216),
325
329
  perfLoggingEnabled: overrides.perfLoggingEnabled ?? isPerfLoggingEnabled(process.env.COLLABMD_PERF_LOGGING),
326
330
  port: parsePort(process.env.PORT, 1234),
327
331
  nodeEnv,
@@ -77,6 +77,7 @@ export function createAppServer(config = loadConfig()) {
77
77
  let fileSystemSyncService = null;
78
78
  let workspaceMutationCoordinator = null;
79
79
  const baseQueryService = new BaseQueryService({
80
+ maxResultRows: config.maxBaseQueryRows,
80
81
  vaultFileStore,
81
82
  workspaceStateProvider: () => workspaceMutationCoordinator?.workspaceState ?? null,
82
83
  workspaceStateSynchronizer: () => fileSystemSyncService?.flushPendingChanges?.(),
@@ -104,6 +105,7 @@ export function createAppServer(config = loadConfig()) {
104
105
  }),
105
106
  getHydrateDelayMs: () => testControls.wsRoomHydrateDelayMs,
106
107
  idleGraceMs: config.wsRoomIdleGraceMs,
108
+ maxInitialSyncBytes: config.maxInitialSyncBytes,
107
109
  maxBufferedAmountBytes: config.wsMaxBufferedAmountBytes,
108
110
  name,
109
111
  onEmpty,
@@ -10,11 +10,15 @@
10
10
  * incrementally whenever a file is persisted, created, deleted, or renamed.
11
11
  */
12
12
 
13
- import { createWikiTargetIndex, resolveWikiTargetWithIndex } from '../../domain/wiki-link-resolver.js';
14
- import { getVaultFileExtension, isMarkdownFilePath } from '../../domain/file-kind.js';
13
+ import { createWikiTargetIndex } from '../../domain/wiki-link-resolver.js';
14
+ import { isMarkdownFilePath } from '../../domain/file-kind.js';
15
+ import {
16
+ collectMarkdownReferences,
17
+ collectReferenceTargetKeysForFilePath,
18
+ createReferenceTargetAliasMap,
19
+ } from './markdown-reference-extractor.js';
15
20
  import { mapWithConcurrency } from '../shared/async-utils.js';
16
21
 
17
- const WIKI_LINK_RE = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
18
22
  const BACKLINK_BUILD_CONCURRENCY = 8;
19
23
 
20
24
  function createDeferred() {
@@ -27,39 +31,6 @@ function createDeferred() {
27
31
  return { promise, reject, resolve };
28
32
  }
29
33
 
30
- function normalizeWikiTargetKey(target = '') {
31
- const normalizedTarget = String(target ?? '').trim();
32
- if (!normalizedTarget) {
33
- return '';
34
- }
35
-
36
- return getVaultFileExtension(normalizedTarget)
37
- ? normalizedTarget
38
- : `${normalizedTarget}.md`;
39
- }
40
-
41
- function collectWikiTargetKeysForFilePath(filePath = '') {
42
- const normalizedPath = String(filePath ?? '').trim();
43
- if (!normalizedPath) {
44
- return [];
45
- }
46
-
47
- const segments = normalizedPath.split('/').filter(Boolean);
48
- const keys = [];
49
- for (let index = 0; index < segments.length; index += 1) {
50
- keys.push(segments.slice(index).join('/'));
51
- }
52
-
53
- if (isMarkdownFilePath(normalizedPath)) {
54
- const rawSegments = normalizedPath.replace(/\.md$/i, '').split('/').filter(Boolean);
55
- for (let index = 0; index < rawSegments.length; index += 1) {
56
- keys.push(rawSegments.slice(index).join('/'));
57
- }
58
- }
59
-
60
- return [...new Set(keys)];
61
- }
62
-
63
34
  export class BacklinkIndex {
64
35
  constructor({
65
36
  rebuildDelayMs = 150,
@@ -225,7 +196,10 @@ export class BacklinkIndex {
225
196
  * Incrementally update the index when a file's content changes.
226
197
  * Call this after every persist / write.
227
198
  */
228
- updateFile(filePath, content, { refreshIndex = true } = {}) {
199
+ updateFile(filePath, content, {
200
+ refreshIndex = true,
201
+ targetPathAliases = new Map(),
202
+ } = {}) {
229
203
  // Remove old forward links for this file
230
204
  this._removeForwardLinks(filePath);
231
205
 
@@ -242,7 +216,7 @@ export class BacklinkIndex {
242
216
  }
243
217
 
244
218
  // Re-index with new content
245
- this._indexFile(filePath, content);
219
+ this._indexFile(filePath, content, { targetPathAliases });
246
220
  }
247
221
 
248
222
  /**
@@ -514,38 +488,32 @@ export class BacklinkIndex {
514
488
 
515
489
  // --- Private methods ---
516
490
 
517
- _indexFile(filePath, content) {
491
+ _indexFile(filePath, content, { targetPathAliases = new Map() } = {}) {
518
492
  const resolvedTargets = new Set();
519
493
  const contextsByTarget = new Map();
520
494
  const rawTargetKeys = new Set();
521
- const lines = content.split('\n');
522
-
523
- for (const line of lines) {
524
- WIKI_LINK_RE.lastIndex = 0;
525
- let match;
526
- while ((match = WIKI_LINK_RE.exec(line)) !== null) {
527
- const target = match[1].trim();
528
- if (!target) {
529
- continue;
530
- }
495
+ const references = collectMarkdownReferences(content, {
496
+ sourceFilePath: filePath,
497
+ targetPathAliases,
498
+ wikiTargetIndex: this._wikiTargetIndex,
499
+ });
531
500
 
532
- const rawTargetKey = normalizeWikiTargetKey(target);
533
- if (rawTargetKey) {
534
- rawTargetKeys.add(rawTargetKey);
535
- }
501
+ for (const reference of references) {
502
+ if (reference.rawTargetKey) {
503
+ rawTargetKeys.add(reference.rawTargetKey);
504
+ }
536
505
 
537
- const resolved = this._resolveTarget(target);
538
- if (!resolved || resolved === filePath) {
539
- continue;
540
- }
506
+ const resolved = reference.resolvedPath;
507
+ if (!resolved || resolved === filePath) {
508
+ continue;
509
+ }
541
510
 
542
- resolvedTargets.add(resolved);
511
+ resolvedTargets.add(resolved);
543
512
 
544
- if (!contextsByTarget.has(resolved)) {
545
- contextsByTarget.set(resolved, []);
546
- }
547
- contextsByTarget.get(resolved).push(line.trim());
513
+ if (!contextsByTarget.has(resolved)) {
514
+ contextsByTarget.set(resolved, []);
548
515
  }
516
+ contextsByTarget.get(resolved).push(reference.context);
549
517
  }
550
518
 
551
519
  this.contextsBySource.delete(filePath);
@@ -594,14 +562,6 @@ export class BacklinkIndex {
594
562
  this.forward.delete(filePath);
595
563
  }
596
564
 
597
- /**
598
- * Resolve a wiki-link target string to a vault file path.
599
- * Same logic as the client's resolveWikiTarget.
600
- */
601
- _resolveTarget(target) {
602
- return resolveWikiTargetWithIndex(target, this._wikiTargetIndex);
603
- }
604
-
605
565
  _refreshWikiTargetIndex() {
606
566
  this._wikiTargetIndex = createWikiTargetIndex(this._fileList);
607
567
  }
@@ -629,7 +589,7 @@ export class BacklinkIndex {
629
589
  _collectImpactedSourcesForMembershipChanges(pathValues = []) {
630
590
  const affectedTargetKeys = new Set();
631
591
  pathValues.forEach((pathValue) => {
632
- collectWikiTargetKeysForFilePath(pathValue).forEach((targetKey) => {
592
+ collectReferenceTargetKeysForFilePath(pathValue).forEach((targetKey) => {
633
593
  affectedTargetKeys.add(targetKey);
634
594
  });
635
595
  });
@@ -648,6 +608,7 @@ export class BacklinkIndex {
648
608
  renameMap = new Map(),
649
609
  } = {}) {
650
610
  const refreshedSources = new Set();
611
+ const targetPathAliases = createReferenceTargetAliasMap(Array.from(renameMap.entries()));
651
612
 
652
613
  for (const sourcePath of impactedSources) {
653
614
  const livePath = renameMap.get(sourcePath) ?? sourcePath;
@@ -666,7 +627,7 @@ export class BacklinkIndex {
666
627
  }
667
628
 
668
629
  refreshedSources.add(livePath);
669
- this.updateFile(livePath, content, { refreshIndex: false });
630
+ this.updateFile(livePath, content, { refreshIndex: false, targetPathAliases });
670
631
  }
671
632
  }
672
633
  }
@@ -1,16 +1,19 @@
1
1
  import { basename, dirname, extname } from 'node:path';
2
2
 
3
- import { createWikiTargetIndex, resolveWikiTargetWithIndex } from '../../../domain/wiki-link-resolver.js';
3
+ import { createWikiTargetIndex } from '../../../domain/wiki-link-resolver.js';
4
4
  import {
5
- getVaultFileExtension,
6
5
  isMarkdownFilePath,
7
6
  stripVaultFileExtension,
8
7
  } from '../../../domain/file-kind.js';
9
8
  import { extractYamlFrontmatter } from '../../../domain/yaml-frontmatter.js';
9
+ import {
10
+ collectMarkdownReferences,
11
+ collectReferenceTargetKeysForFilePath,
12
+ createReferenceTargetAliasMap,
13
+ } from '../markdown-reference-extractor.js';
10
14
  import { mapWithConcurrency } from '../../shared/async-utils.js';
11
15
  import { createLinkValue, dedupeLinkValues } from './base-expression-runtime.js';
12
16
 
13
- const INTERNAL_LINK_RE = /(!)?\[\[([^\]|#]+)(?:#[^\]|]+)?(?:\|[^\]]+)?\]\]/g;
14
17
  const INLINE_TAG_RE = /(^|[\s(])#([A-Za-z0-9/_-]+)/g;
15
18
  const INDEX_READ_CONCURRENCY = 8;
16
19
 
@@ -42,28 +45,35 @@ function compareVaultPaths(left = '', right = '') {
42
45
  return String(left).localeCompare(String(right), undefined, { sensitivity: 'base' });
43
46
  }
44
47
 
45
- function extractReferences(markdownText = '', wikiTargetIndex) {
48
+ function extractReferences(markdownText = '', {
49
+ sourceFilePath = '',
50
+ targetPathAliases = new Map(),
51
+ wikiTargetIndex,
52
+ } = {}) {
46
53
  const links = [];
47
54
  const embeds = [];
48
- let match;
49
- while ((match = INTERNAL_LINK_RE.exec(String(markdownText ?? ''))) !== null) {
50
- const isEmbed = Boolean(match[1]);
51
- const rawTarget = String(match[2] ?? '').trim();
52
- if (!rawTarget) {
53
- continue;
54
- }
55
+ const rawTargetKeys = new Set();
56
+ const references = collectMarkdownReferences(markdownText, {
57
+ sourceFilePath,
58
+ targetPathAliases,
59
+ wikiTargetIndex,
60
+ });
55
61
 
56
- const resolvedPath = resolveWikiTargetWithIndex(rawTarget, wikiTargetIndex);
57
- const linkValue = createLinkValue(resolvedPath || rawTarget, {
58
- exists: Boolean(resolvedPath),
59
- rawTarget,
62
+ references.forEach((reference) => {
63
+ const linkValue = createLinkValue(reference.resolvedPath || reference.targetPath || reference.rawTarget, {
64
+ exists: Boolean(reference.resolvedPath),
65
+ rawTarget: reference.rawTarget,
60
66
  });
61
67
  links.push(linkValue);
62
- if (isEmbed) {
68
+ if (reference.isEmbed) {
63
69
  embeds.push(linkValue);
64
70
  }
65
- }
66
- return { embeds, links };
71
+ if (reference.rawTargetKey) {
72
+ rawTargetKeys.add(reference.rawTargetKey);
73
+ }
74
+ });
75
+
76
+ return { embeds, links, rawTargetKeys };
67
77
  }
68
78
 
69
79
  function isWorkspaceFileEntry(entry = null) {
@@ -81,39 +91,6 @@ function listWorkspaceFilePaths(workspaceState = {}) {
81
91
  .sort(compareVaultPaths);
82
92
  }
83
93
 
84
- function normalizeWikiTargetKey(target = '') {
85
- const normalizedTarget = String(target ?? '').trim();
86
- if (!normalizedTarget) {
87
- return '';
88
- }
89
-
90
- return getVaultFileExtension(normalizedTarget)
91
- ? normalizedTarget
92
- : `${normalizedTarget}.md`;
93
- }
94
-
95
- function collectWikiTargetKeysForFilePath(filePath = '') {
96
- const normalizedPath = String(filePath ?? '').trim();
97
- if (!normalizedPath) {
98
- return [];
99
- }
100
-
101
- const segments = normalizedPath.split('/').filter(Boolean);
102
- const keys = [];
103
- for (let index = 0; index < segments.length; index += 1) {
104
- keys.push(segments.slice(index).join('/'));
105
- }
106
-
107
- if (isMarkdownFilePath(normalizedPath)) {
108
- const rawSegments = normalizedPath.replace(/\.md$/i, '').split('/').filter(Boolean);
109
- for (let index = 0; index < rawSegments.length; index += 1) {
110
- keys.push(rawSegments.slice(index).join('/'));
111
- }
112
- }
113
-
114
- return [...new Set(keys)];
115
- }
116
-
117
94
  function createBacklinkEntry(sourcePath = '') {
118
95
  return createLinkValue(sourcePath, {
119
96
  display: basename(sourcePath),
@@ -160,12 +137,18 @@ export class BaseIndexSnapshotStore {
160
137
  return scannedWorkspaceState;
161
138
  }
162
139
 
163
- createSnapshotRow(filePath, workspaceState, wikiTargetIndex, markdownContent = null) {
140
+ createSnapshotRow(filePath, workspaceState, wikiTargetIndex, markdownContent = null, {
141
+ targetPathAliases = new Map(),
142
+ } = {}) {
164
143
  const metadata = workspaceState.metadata.get(filePath) ?? null;
165
144
  const frontmatter = markdownContent ? extractYamlFrontmatter(markdownContent) : null;
166
145
  const noteProperties = isPlainObject(frontmatter?.data) ? frontmatter.data : {};
167
146
  const bodyMarkdown = frontmatter?.bodyMarkdown ?? markdownContent ?? '';
168
- const references = extractReferences(bodyMarkdown, wikiTargetIndex);
147
+ const references = extractReferences(bodyMarkdown, {
148
+ sourceFilePath: filePath,
149
+ targetPathAliases,
150
+ wikiTargetIndex,
151
+ });
169
152
  const tags = [...new Set([
170
153
  ...normalizeTags(noteProperties.tags),
171
154
  ...extractInlineTags(bodyMarkdown),
@@ -193,11 +176,7 @@ export class BaseIndexSnapshotStore {
193
176
  .map((link) => link?.path)
194
177
  .filter((targetPath) => targetPath && targetPath !== filePath),
195
178
  ),
196
- rawTargetKeys: new Set(
197
- references.links
198
- .map((link) => normalizeWikiTargetKey(link?.rawTarget))
199
- .filter(Boolean),
200
- ),
179
+ rawTargetKeys: references.rawTargetKeys,
201
180
  row: {
202
181
  file: fileValue,
203
182
  noteProperties,
@@ -373,7 +352,7 @@ export class BaseIndexSnapshotStore {
373
352
  collectImpactedSourcesForMembershipChanges(snapshot, pathValues = []) {
374
353
  const affectedTargetKeys = new Set();
375
354
  pathValues.forEach((pathValue) => {
376
- collectWikiTargetKeysForFilePath(pathValue).forEach((targetKey) => {
355
+ collectReferenceTargetKeysForFilePath(pathValue).forEach((targetKey) => {
377
356
  affectedTargetKeys.add(targetKey);
378
357
  });
379
358
  });
@@ -392,7 +371,9 @@ export class BaseIndexSnapshotStore {
392
371
  return impactedPaths;
393
372
  }
394
373
 
395
- async refreshSnapshotRows(snapshot, workspaceState, pathValues = []) {
374
+ async refreshSnapshotRows(snapshot, workspaceState, pathValues = [], {
375
+ targetPathAliases = new Map(),
376
+ } = {}) {
396
377
  const filePathsToRefresh = Array.from(new Set(pathValues))
397
378
  .filter((pathValue) => {
398
379
  const entry = workspaceState?.entries?.get(pathValue);
@@ -403,7 +384,9 @@ export class BaseIndexSnapshotStore {
403
384
  const markdownContent = isMarkdownFilePath(filePath)
404
385
  ? await this.vaultFileStore.readMarkdownFile(filePath)
405
386
  : null;
406
- const rowRecord = this.createSnapshotRow(filePath, workspaceState, snapshot.wikiTargetIndex, markdownContent);
387
+ const rowRecord = this.createSnapshotRow(filePath, workspaceState, snapshot.wikiTargetIndex, markdownContent, {
388
+ targetPathAliases,
389
+ });
407
390
  this.removeRawTargetSourceContributions(snapshot, filePath);
408
391
  snapshot.rowsByPath.set(filePath, rowRecord.row);
409
392
  snapshot.forwardLinksByPath.set(filePath, rowRecord.forwardLinks);
@@ -489,6 +472,7 @@ export class BaseIndexSnapshotStore {
489
472
  const snapshot = this.indexSnapshot;
490
473
  const affectedTargetPaths = new Set();
491
474
  const affectedSourcePaths = new Set(markdownPathsToRefresh);
475
+ const targetPathAliases = createReferenceTargetAliasMap(renamedFileEntries);
492
476
  if (membershipChanged) {
493
477
  const membershipAffectedPaths = [
494
478
  ...deletedFilePaths,
@@ -543,7 +527,7 @@ export class BaseIndexSnapshotStore {
543
527
  ...createdFilePaths,
544
528
  ...renamedFileEntries.map((entry) => entry.newPath),
545
529
  ...affectedSourcePaths,
546
- ]);
530
+ ], { targetPathAliases });
547
531
  } else {
548
532
  affectedSourcePaths.forEach((pathValue) => {
549
533
  this.removeSourceBacklinkContributions(snapshot, pathValue, affectedTargetPaths);
@@ -53,6 +53,32 @@ function sortRows(rows, sortChain = []) {
53
53
  });
54
54
  }
55
55
 
56
+ function compareRowsBySortChain(left, right, sortChain = []) {
57
+ for (const sortConfig of sortChain) {
58
+ const delta = compareValues(left.rawCells[sortConfig.property], right.rawCells[sortConfig.property]);
59
+ if (delta !== 0) {
60
+ return sortConfig.direction === 'desc' ? -delta : delta;
61
+ }
62
+ }
63
+
64
+ return String(left.file.path ?? '').localeCompare(String(right.file.path ?? ''));
65
+ }
66
+
67
+ function insertSortedBounded(rows, row, {
68
+ limit,
69
+ sortChain = [],
70
+ }) {
71
+ let insertIndex = rows.findIndex((existingRow) => compareRowsBySortChain(row, existingRow, sortChain) < 0);
72
+ if (insertIndex === -1) {
73
+ insertIndex = rows.length;
74
+ }
75
+
76
+ rows.splice(insertIndex, 0, row);
77
+ if (rows.length > limit) {
78
+ rows.pop();
79
+ }
80
+ }
81
+
56
82
  function escapeRegExp(value = '') {
57
83
  return String(value ?? '').replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
58
84
  }
@@ -102,16 +128,19 @@ function pruneFilterNodeForProperty(filterNode, propertyId = '') {
102
128
 
103
129
  export class BaseQueryService {
104
130
  constructor({
131
+ maxResultRows = 5_000,
105
132
  vaultFileStore,
106
133
  workspaceStateProvider = null,
107
134
  workspaceStateSynchronizer = null,
108
135
  }) {
136
+ this.maxResultRows = maxResultRows;
109
137
  this.vaultFileStore = vaultFileStore;
110
138
  this.snapshotStore = new BaseIndexSnapshotStore({
111
139
  vaultFileStore,
112
140
  workspaceStateProvider,
113
141
  workspaceStateSynchronizer,
114
142
  });
143
+ this.definitionCache = new Map();
115
144
  this.propertyCatalogCache = new Map();
116
145
  }
117
146
 
@@ -202,6 +231,25 @@ export class BaseQueryService {
202
231
  return result;
203
232
  }
204
233
 
234
+ getCachedDefinition(cacheKey, baseSource) {
235
+ const sourceText = String(baseSource ?? '');
236
+ const existing = this.definitionCache.get(cacheKey);
237
+ if (existing?.source === sourceText) {
238
+ return existing.definition;
239
+ }
240
+
241
+ const definition = normalizeBaseDefinition(sourceText);
242
+ this.definitionCache.set(cacheKey, {
243
+ definition,
244
+ source: sourceText,
245
+ });
246
+ if (this.definitionCache.size > 50) {
247
+ const firstKey = this.definitionCache.keys().next().value;
248
+ this.definitionCache.delete(firstKey);
249
+ }
250
+ return definition;
251
+ }
252
+
205
253
  invalidatePropertyCatalogsExcept(scannedAt = '') {
206
254
  Array.from(this.propertyCatalogCache.keys()).forEach((cacheKey) => {
207
255
  if (cacheKey !== scannedAt) {
@@ -222,7 +270,7 @@ export class BaseQueryService {
222
270
  throw new Error('Base source not found');
223
271
  }
224
272
 
225
- const definition = normalizeBaseDefinition(baseSource);
273
+ const definition = this.getCachedDefinition(source === null ? `file:${basePath}` : `source:${sourcePath}:${basePath}`, baseSource);
226
274
  const snapshot = await this.ensureIndexSnapshot({
227
275
  basePath,
228
276
  sourcePath,
@@ -251,12 +299,24 @@ export class BaseQueryService {
251
299
  collectCandidateRows({
252
300
  activeView,
253
301
  astCache = new Map(),
302
+ columns = [],
254
303
  definition,
255
304
  evaluatedPropertyIds,
305
+ limit = null,
306
+ maxRows = this.maxResultRows,
256
307
  snapshot,
308
+ sortChain = [],
309
+ search = '',
257
310
  thisFile,
258
311
  }) {
259
312
  const rows = [];
313
+ const effectiveMaxRows = Number.isInteger(maxRows) && maxRows > 0 ? maxRows : Infinity;
314
+ const effectiveLimit = Number.isInteger(limit) && limit > 0 ? limit : Infinity;
315
+ const canBoundDuringCollection = Number.isFinite(Math.min(effectiveLimit, effectiveMaxRows))
316
+ && sortChain.length > 0
317
+ && !activeView.groupBy?.property
318
+ && (activeView.summaries?.length ?? 0) === 0;
319
+ const hardLimit = Math.min(effectiveLimit, effectiveMaxRows);
260
320
 
261
321
  snapshot.filePaths.forEach((filePath) => {
262
322
  const row = snapshot.rowsByPath.get(filePath);
@@ -280,10 +340,23 @@ export class BaseQueryService {
280
340
  rawCells[propertyId] = getPropertyValue(propertyId, row, definition, snapshot, thisFile, rowContext);
281
341
  });
282
342
 
283
- rows.push({
343
+ const candidateRow = {
284
344
  file: row.file,
285
345
  rawCells,
286
- });
346
+ };
347
+ if (!rowMatchesSearch(candidateRow, columns, search)) {
348
+ return;
349
+ }
350
+
351
+ if (canBoundDuringCollection) {
352
+ insertSortedBounded(rows, candidateRow, {
353
+ limit: hardLimit,
354
+ sortChain,
355
+ });
356
+ return;
357
+ }
358
+
359
+ rows.push(candidateRow);
287
360
  });
288
361
 
289
362
  return rows;
@@ -378,15 +451,24 @@ export class BaseQueryService {
378
451
  });
379
452
 
380
453
  const astCache = new Map();
454
+ const sortChain = buildSortChain(context.activeView);
455
+ const requestedLimit = Number.isInteger(context.activeView.limit) && context.activeView.limit > 0
456
+ ? context.activeView.limit
457
+ : null;
381
458
  let rows = this.collectCandidateRows({
382
459
  ...context,
383
460
  astCache,
461
+ limit: requestedLimit,
462
+ maxRows: this.maxResultRows,
463
+ search,
464
+ sortChain,
384
465
  });
385
- rows = rows.filter((row) => rowMatchesSearch(row, context.columns, search));
386
- rows = sortRows(rows, buildSortChain(context.activeView));
466
+ rows = sortRows(rows, sortChain);
387
467
 
388
- if (context.activeView.limit != null) {
389
- rows = rows.slice(0, context.activeView.limit);
468
+ if (requestedLimit != null) {
469
+ rows = rows.slice(0, Math.min(requestedLimit, this.maxResultRows));
470
+ } else if (Number.isInteger(this.maxResultRows) && this.maxResultRows > 0) {
471
+ rows = rows.slice(0, this.maxResultRows);
390
472
  }
391
473
 
392
474
  const payload = buildQueryResultPayload({
@@ -165,6 +165,7 @@ export class CollaborationRoom {
165
165
  getHydrateDelayMs = null,
166
166
  name,
167
167
  idleGraceMs = 0,
168
+ maxInitialSyncBytes = 16_777_216,
168
169
  maxBufferedAmountBytes,
169
170
  perfLoggingEnabled = false,
170
171
  vaultFileStore,
@@ -173,6 +174,7 @@ export class CollaborationRoom {
173
174
  }) {
174
175
  this.name = name;
175
176
  this.idleGraceMs = idleGraceMs;
177
+ this.maxInitialSyncBytes = maxInitialSyncBytes;
176
178
  this.maxBufferedAmountBytes = maxBufferedAmountBytes;
177
179
  this.perfLoggingEnabled = perfLoggingEnabled;
178
180
  this.documentStore = documentStore ?? new CollaborationDocumentStore({
@@ -576,10 +578,17 @@ export class CollaborationRoom {
576
578
  this.debugMetrics.initialSyncCount += 1;
577
579
  this.debugMetrics.lastInitialSyncAt = Date.now();
578
580
  const initialSyncMessage = this.getInitialSyncMessage();
581
+ const initialSyncBytes = initialSyncMessage.byteLength;
582
+ if (initialSyncBytes > this.maxInitialSyncBytes) {
583
+ console.warn(
584
+ `[room:${this.name}] Initial sync payload is ${initialSyncBytes} bytes, exceeding ${this.maxInitialSyncBytes} bytes`,
585
+ );
586
+ }
579
587
  logPerfEvent(this.perfLoggingEnabled, `room:${this.name}`, {
580
- bytes: initialSyncMessage.byteLength,
588
+ bytes: initialSyncBytes,
581
589
  count: this.debugMetrics.initialSyncCount,
582
590
  event: 'initial-sync',
591
+ exceedsLimit: initialSyncBytes > this.maxInitialSyncBytes,
583
592
  });
584
593
  return sendMessage.call(this, ws, initialSyncMessage, this);
585
594
  }