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
@@ -40,6 +40,10 @@ export function clampImageLightboxOffset(offset, {
40
40
  return Math.min(Math.max(numericOffset, -overflow), overflow);
41
41
  }
42
42
 
43
+ export function isImageLightboxWheelZoomGesture(event) {
44
+ return Boolean(event?.ctrlKey);
45
+ }
46
+
43
47
  export class ImageLightboxController {
44
48
  constructor({
45
49
  previewElement,
@@ -63,6 +67,13 @@ export class ImageLightboxController {
63
67
  this.dragStartY = 0;
64
68
  this.dragOriginX = 0;
65
69
  this.dragOriginY = 0;
70
+ this.touchPointers = new Map();
71
+ this.pinchPointerIds = [];
72
+ this.pinchStartDistance = 0;
73
+ this.pinchStartScale = MIN_SCALE;
74
+ this.pinchStartOffsetX = 0;
75
+ this.pinchStartOffsetY = 0;
76
+ this.pinchStartCenter = { x: 0, y: 0 };
66
77
  this.didDrag = false;
67
78
  this.resetButton = null;
68
79
 
@@ -167,7 +178,10 @@ export class ImageLightboxController {
167
178
  return;
168
179
  }
169
180
 
170
- this.activePointerId = null;
181
+ this.stopDrag();
182
+ this.touchPointers.clear();
183
+ this.pinchPointerIds = [];
184
+ this.pinchStartDistance = 0;
171
185
  this.didDrag = false;
172
186
  this.viewport?.classList?.remove('is-dragging');
173
187
  if (this.overlayRoot) {
@@ -194,6 +208,201 @@ export class ImageLightboxController {
194
208
  this.syncTransform();
195
209
  }
196
210
 
211
+ capturePointer(pointerId) {
212
+ try {
213
+ this.viewport?.setPointerCapture?.(pointerId);
214
+ } catch {
215
+ // Synthetic tests may not have an active browser pointer to capture.
216
+ }
217
+ }
218
+
219
+ releasePointer(pointerId) {
220
+ try {
221
+ this.viewport?.releasePointerCapture?.(pointerId);
222
+ } catch {
223
+ // Ignore release failures when the pointer is already gone.
224
+ }
225
+ }
226
+
227
+ getViewportPointFromClient(clientX, clientY) {
228
+ if (!this.viewport) {
229
+ return { x: 0, y: 0 };
230
+ }
231
+
232
+ const rect = this.viewport.getBoundingClientRect();
233
+ return {
234
+ x: Number(clientX) - rect.left - (rect.width / 2),
235
+ y: Number(clientY) - rect.top - (rect.height / 2),
236
+ };
237
+ }
238
+
239
+ setScaleAroundViewportPoint(nextScale, viewportPoint, {
240
+ originScale = this.scale,
241
+ originOffsetX = this.offsetX,
242
+ originOffsetY = this.offsetY,
243
+ targetViewportPoint = viewportPoint,
244
+ } = {}) {
245
+ const clampedScale = clampImageLightboxScale(nextScale);
246
+ const safeOriginScale = Number(originScale) > 0 ? Number(originScale) : MIN_SCALE;
247
+ const originPointX = Number.isFinite(viewportPoint?.x) ? viewportPoint.x : 0;
248
+ const originPointY = Number.isFinite(viewportPoint?.y) ? viewportPoint.y : 0;
249
+ const targetPointX = Number.isFinite(targetViewportPoint?.x) ? targetViewportPoint.x : originPointX;
250
+ const targetPointY = Number.isFinite(targetViewportPoint?.y) ? targetViewportPoint.y : originPointY;
251
+
252
+ this.scale = clampedScale;
253
+ this.offsetX = targetPointX - (((originPointX - originOffsetX) / safeOriginScale) * clampedScale);
254
+ this.offsetY = targetPointY - (((originPointY - originOffsetY) / safeOriginScale) * clampedScale);
255
+ this.clampOffsets();
256
+ this.syncTransform();
257
+ }
258
+
259
+ startDrag(pointerId, clientX, clientY) {
260
+ if (!this.viewport || this.scale <= MIN_SCALE) {
261
+ return false;
262
+ }
263
+
264
+ this.activePointerId = pointerId;
265
+ this.dragStartX = clientX;
266
+ this.dragStartY = clientY;
267
+ this.dragOriginX = this.offsetX;
268
+ this.dragOriginY = this.offsetY;
269
+ this.viewport.classList.add('is-dragging');
270
+ this.capturePointer(pointerId);
271
+ return true;
272
+ }
273
+
274
+ stopDrag(pointerId = this.activePointerId) {
275
+ if (pointerId === this.activePointerId) {
276
+ this.activePointerId = null;
277
+ }
278
+
279
+ this.viewport?.classList?.remove('is-dragging');
280
+ if (pointerId !== null) {
281
+ this.releasePointer(pointerId);
282
+ }
283
+ if (this.imageElement) {
284
+ this.imageElement.style.cursor = this.scale > MIN_SCALE ? 'grab' : 'zoom-in';
285
+ }
286
+ }
287
+
288
+ updateDrag(pointerId, clientX, clientY) {
289
+ if (!this.isOpen || this.activePointerId !== pointerId) {
290
+ return false;
291
+ }
292
+
293
+ if (
294
+ !this.didDrag
295
+ && (Math.abs(clientX - this.dragStartX) >= DRAG_THRESHOLD_PX
296
+ || Math.abs(clientY - this.dragStartY) >= DRAG_THRESHOLD_PX)
297
+ ) {
298
+ this.didDrag = true;
299
+ }
300
+
301
+ this.offsetX = this.dragOriginX + (clientX - this.dragStartX);
302
+ this.offsetY = this.dragOriginY + (clientY - this.dragStartY);
303
+ this.clampOffsets();
304
+ this.syncTransform();
305
+ return true;
306
+ }
307
+
308
+ getTrackedTouchPointers() {
309
+ return Array.from(this.touchPointers.values());
310
+ }
311
+
312
+ getActivePinchPointers() {
313
+ if (this.pinchPointerIds.length === 2) {
314
+ const pinchPointers = this.pinchPointerIds
315
+ .map((pointerId) => this.touchPointers.get(pointerId))
316
+ .filter(Boolean);
317
+ if (pinchPointers.length === 2) {
318
+ return pinchPointers;
319
+ }
320
+ }
321
+
322
+ return this.getTrackedTouchPointers().slice(0, 2);
323
+ }
324
+
325
+ startPinchGesture() {
326
+ const [firstPointer, secondPointer] = this.getActivePinchPointers();
327
+ if (!firstPointer || !secondPointer) {
328
+ return false;
329
+ }
330
+
331
+ this.stopDrag();
332
+ this.pinchPointerIds = [firstPointer.pointerId, secondPointer.pointerId];
333
+ this.pinchStartDistance = Math.hypot(
334
+ secondPointer.clientX - firstPointer.clientX,
335
+ secondPointer.clientY - firstPointer.clientY,
336
+ ) || 1;
337
+ this.pinchStartScale = this.scale;
338
+ this.pinchStartOffsetX = this.offsetX;
339
+ this.pinchStartOffsetY = this.offsetY;
340
+ const startCenter = this.getViewportPointFromClient(
341
+ (firstPointer.clientX + secondPointer.clientX) / 2,
342
+ (firstPointer.clientY + secondPointer.clientY) / 2,
343
+ );
344
+ this.pinchStartCenter = startCenter;
345
+ return true;
346
+ }
347
+
348
+ updatePinchGesture() {
349
+ const [firstPointer, secondPointer] = this.getActivePinchPointers();
350
+ if (!firstPointer || !secondPointer) {
351
+ return false;
352
+ }
353
+
354
+ const currentDistance = Math.hypot(
355
+ secondPointer.clientX - firstPointer.clientX,
356
+ secondPointer.clientY - firstPointer.clientY,
357
+ );
358
+ if (!Number.isFinite(currentDistance) || currentDistance <= 0) {
359
+ return false;
360
+ }
361
+
362
+ const currentCenter = this.getViewportPointFromClient(
363
+ (firstPointer.clientX + secondPointer.clientX) / 2,
364
+ (firstPointer.clientY + secondPointer.clientY) / 2,
365
+ );
366
+ const nextScale = this.pinchStartScale * (currentDistance / this.pinchStartDistance);
367
+ this.setScaleAroundViewportPoint(nextScale, this.pinchStartCenter, {
368
+ originScale: this.pinchStartScale,
369
+ originOffsetX: this.pinchStartOffsetX,
370
+ originOffsetY: this.pinchStartOffsetY,
371
+ targetViewportPoint: currentCenter,
372
+ });
373
+
374
+ if (
375
+ !this.didDrag
376
+ && (
377
+ Math.abs(currentDistance - this.pinchStartDistance) >= DRAG_THRESHOLD_PX
378
+ || Math.abs(currentCenter.x - this.pinchStartCenter.x) >= DRAG_THRESHOLD_PX
379
+ || Math.abs(currentCenter.y - this.pinchStartCenter.y) >= DRAG_THRESHOLD_PX
380
+ )
381
+ ) {
382
+ this.didDrag = true;
383
+ }
384
+
385
+ return true;
386
+ }
387
+
388
+ syncTouchGestureAfterPointerChange() {
389
+ if (this.touchPointers.size >= 2) {
390
+ this.startPinchGesture();
391
+ return;
392
+ }
393
+
394
+ this.pinchPointerIds = [];
395
+ this.pinchStartDistance = 0;
396
+
397
+ if (this.touchPointers.size === 1 && this.scale > MIN_SCALE) {
398
+ const [remainingPointer] = this.getTrackedTouchPointers();
399
+ this.startDrag(remainingPointer.pointerId, remainingPointer.clientX, remainingPointer.clientY);
400
+ return;
401
+ }
402
+
403
+ this.stopDrag();
404
+ }
405
+
197
406
  clampOffsets() {
198
407
  if (!this.viewport || !this.imageElement) {
199
408
  this.offsetX = 0;
@@ -267,13 +476,15 @@ export class ImageLightboxController {
267
476
  const controls = this.document.createElement('div');
268
477
  controls.className = 'image-lightbox-controls';
269
478
 
479
+ const zoomOutButton = this.createControlButton('-', 'Zoom out', () => this.zoomBy(-ZOOM_STEP));
270
480
  const zoomLabel = this.document.createElement('span');
271
481
  zoomLabel.className = 'image-lightbox-zoom-label';
272
482
  zoomLabel.textContent = '100%';
483
+ const zoomInButton = this.createControlButton('+', 'Zoom in', () => this.zoomBy(ZOOM_STEP));
273
484
  const resetButton = this.createControlButton('Reset', 'Reset zoom and position', () => this.resetView());
274
485
  const closeButton = this.createControlButton('Close', 'Close image preview', () => this.close());
275
486
 
276
- controls.append(zoomLabel, resetButton, closeButton);
487
+ controls.append(zoomOutButton, zoomLabel, zoomInButton, resetButton, closeButton);
277
488
  toolbar.append(title, controls);
278
489
 
279
490
  const viewport = this.document.createElement('div');
@@ -292,58 +503,108 @@ export class ImageLightboxController {
292
503
  return;
293
504
  }
294
505
 
506
+ if (isImageLightboxWheelZoomGesture(event)) {
507
+ event.preventDefault();
508
+ this.zoomBy(event.deltaY < 0 ? ZOOM_STEP : -ZOOM_STEP);
509
+ return;
510
+ }
511
+
512
+ if (this.scale <= MIN_SCALE) {
513
+ return;
514
+ }
515
+
516
+ const deltaX = Number.isFinite(event.deltaX) ? event.deltaX : 0;
517
+ const deltaY = Number.isFinite(event.deltaY) ? event.deltaY : 0;
518
+ if (deltaX === 0 && deltaY === 0) {
519
+ return;
520
+ }
521
+
295
522
  event.preventDefault();
296
- this.zoomBy(event.deltaY < 0 ? ZOOM_STEP : -ZOOM_STEP);
523
+ this.offsetX -= deltaX;
524
+ this.offsetY -= deltaY;
525
+ this.clampOffsets();
526
+ this.syncTransform();
297
527
  }, { passive: false });
298
528
 
299
529
  viewport.addEventListener('pointerdown', (event) => {
300
- if (!this.isOpen || this.scale <= MIN_SCALE || event.button !== 0) {
530
+ if (!this.isOpen) {
531
+ return;
532
+ }
533
+
534
+ if (event.pointerType === 'touch') {
535
+ if (this.touchPointers.size === 0) {
536
+ this.didDrag = false;
537
+ }
538
+ this.touchPointers.set(event.pointerId, {
539
+ clientX: event.clientX,
540
+ clientY: event.clientY,
541
+ pointerId: event.pointerId,
542
+ });
543
+ this.capturePointer(event.pointerId);
544
+ this.syncTouchGestureAfterPointerChange();
545
+ if (this.touchPointers.size > 1 || this.scale > MIN_SCALE) {
546
+ event.preventDefault();
547
+ }
548
+ return;
549
+ }
550
+
551
+ if (this.scale <= MIN_SCALE || event.button !== 0) {
301
552
  return;
302
553
  }
303
554
 
304
- this.activePointerId = event.pointerId;
305
- this.dragStartX = event.clientX;
306
- this.dragStartY = event.clientY;
307
- this.dragOriginX = this.offsetX;
308
- this.dragOriginY = this.offsetY;
309
555
  this.didDrag = false;
310
- viewport.classList.add('is-dragging');
311
- viewport.setPointerCapture?.(event.pointerId);
556
+ this.startDrag(event.pointerId, event.clientX, event.clientY);
312
557
  event.preventDefault();
313
558
  });
314
559
 
315
560
  viewport.addEventListener('pointermove', (event) => {
316
- if (!this.isOpen || this.activePointerId !== event.pointerId) {
561
+ if (!this.isOpen) {
317
562
  return;
318
563
  }
319
564
 
320
- if (
321
- !this.didDrag
322
- && (Math.abs(event.clientX - this.dragStartX) >= DRAG_THRESHOLD_PX
323
- || Math.abs(event.clientY - this.dragStartY) >= DRAG_THRESHOLD_PX)
324
- ) {
325
- this.didDrag = true;
565
+ if (event.pointerType === 'touch' && this.touchPointers.has(event.pointerId)) {
566
+ this.touchPointers.set(event.pointerId, {
567
+ clientX: event.clientX,
568
+ clientY: event.clientY,
569
+ pointerId: event.pointerId,
570
+ });
571
+
572
+ if (this.touchPointers.size >= 2) {
573
+ this.updatePinchGesture();
574
+ event.preventDefault();
575
+ return;
576
+ }
577
+
578
+ if (this.updateDrag(event.pointerId, event.clientX, event.clientY)) {
579
+ event.preventDefault();
580
+ }
581
+ return;
326
582
  }
327
583
 
328
- this.offsetX = this.dragOriginX + (event.clientX - this.dragStartX);
329
- this.offsetY = this.dragOriginY + (event.clientY - this.dragStartY);
330
- this.clampOffsets();
331
- this.syncTransform();
584
+ this.updateDrag(event.pointerId, event.clientX, event.clientY);
332
585
  });
333
586
 
334
- const finishDrag = (event) => {
587
+ const finishPointerGesture = (event) => {
588
+ if (event.pointerType === 'touch') {
589
+ this.touchPointers.delete(event.pointerId);
590
+ this.releasePointer(event.pointerId);
591
+ if (this.activePointerId === event.pointerId) {
592
+ this.stopDrag(event.pointerId);
593
+ }
594
+ this.syncTouchGestureAfterPointerChange();
595
+ return;
596
+ }
597
+
335
598
  if (this.activePointerId !== event.pointerId) {
336
599
  return;
337
600
  }
338
601
 
339
- this.activePointerId = null;
340
- viewport.classList.remove('is-dragging');
341
- viewport.releasePointerCapture?.(event.pointerId);
342
- this.imageElement.style.cursor = this.scale > MIN_SCALE ? 'grab' : 'zoom-in';
602
+ this.stopDrag(event.pointerId);
343
603
  };
344
604
 
345
- viewport.addEventListener('pointerup', finishDrag);
346
- viewport.addEventListener('pointercancel', finishDrag);
605
+ viewport.addEventListener('pointerup', finishPointerGesture);
606
+ viewport.addEventListener('pointercancel', finishPointerGesture);
607
+ viewport.addEventListener('lostpointercapture', finishPointerGesture);
347
608
  image.addEventListener('click', (event) => {
348
609
  if (!this.isOpen) {
349
610
  return;
@@ -9,6 +9,29 @@
9
9
  align-items: center;
10
10
  }
11
11
 
12
+ .toolbar-badge-button {
13
+ cursor: pointer;
14
+ transition: background var(--transition-interactive), box-shadow var(--transition-interactive), color var(--transition-interactive);
15
+ }
16
+
17
+ .toolbar-badge-button:hover:not(:disabled) {
18
+ background: var(--surface-accent-soft);
19
+ }
20
+
21
+ .toolbar-badge-button:focus-visible {
22
+ outline: none;
23
+ box-shadow: var(--shadow-accent-ring-strong);
24
+ }
25
+
26
+ .toolbar-badge-button:disabled {
27
+ cursor: default;
28
+ }
29
+
30
+ .toolbar-badge-button.is-active {
31
+ background: var(--surface-accent-soft);
32
+ box-shadow: var(--shadow-accent-inset);
33
+ }
34
+
12
35
  .user-avatar {
13
36
  position: relative;
14
37
  z-index: 1;
@@ -101,3 +124,192 @@
101
124
  .user-avatar-button.different-file:hover {
102
125
  opacity: 0.85;
103
126
  }
127
+
128
+ .user-avatar-overflow-trigger {
129
+ background: var(--color-surface-dynamic);
130
+ color: var(--color-text-muted);
131
+ }
132
+
133
+ .presence-panel {
134
+ position: absolute;
135
+ top: calc(100% + var(--space-2));
136
+ right: 0;
137
+ z-index: 30;
138
+ display: flex;
139
+ flex-direction: column;
140
+ gap: var(--space-3);
141
+ width: min(420px, calc(100vw - var(--space-6)));
142
+ max-height: min(72vh, 540px);
143
+ padding: var(--space-3);
144
+ border: 1px solid var(--color-border);
145
+ border-radius: var(--radius-lg);
146
+ background: oklch(from var(--color-surface) l c h / 0.98);
147
+ box-shadow: var(--shadow-lg);
148
+ backdrop-filter: blur(14px);
149
+ }
150
+
151
+ .presence-panel-header {
152
+ display: flex;
153
+ align-items: flex-start;
154
+ justify-content: space-between;
155
+ gap: var(--space-3);
156
+ }
157
+
158
+ .presence-panel-title {
159
+ margin: 0;
160
+ font-size: var(--text-sm);
161
+ font-weight: 700;
162
+ }
163
+
164
+ .presence-panel-status {
165
+ margin: var(--space-1) 0 0;
166
+ color: var(--color-text-muted);
167
+ font-size: var(--text-meta);
168
+ }
169
+
170
+ .presence-panel-list {
171
+ display: flex;
172
+ flex-direction: column;
173
+ gap: var(--space-2);
174
+ overflow-y: auto;
175
+ min-height: 0;
176
+ padding-right: var(--space-1);
177
+ }
178
+
179
+ .presence-panel-empty-state {
180
+ padding: var(--space-4);
181
+ border: 1px dashed var(--color-border);
182
+ border-radius: var(--radius-md);
183
+ background: var(--color-surface-2);
184
+ color: var(--color-text-muted);
185
+ font-size: var(--text-label);
186
+ }
187
+
188
+ .presence-panel-user {
189
+ display: grid;
190
+ grid-template-columns: minmax(0, 1fr) auto;
191
+ align-items: center;
192
+ gap: var(--space-2);
193
+ padding: 2px;
194
+ border-radius: var(--radius-md);
195
+ border: 1px solid transparent;
196
+ background: var(--surface-fill-subtle);
197
+ }
198
+
199
+ .presence-panel-user.is-following {
200
+ border-color: oklch(from var(--color-primary) l c h / 0.3);
201
+ background: var(--interactive-surface);
202
+ box-shadow: var(--shadow-accent-inset);
203
+ }
204
+
205
+ .presence-panel-user-button {
206
+ display: flex;
207
+ align-items: center;
208
+ gap: var(--space-3);
209
+ width: 100%;
210
+ min-width: 0;
211
+ padding: 10px 12px;
212
+ border-radius: calc(var(--radius-md) - 2px);
213
+ color: inherit;
214
+ text-align: left;
215
+ transition: background var(--transition-interactive), transform var(--transition-interactive);
216
+ }
217
+
218
+ .presence-panel-user-button:not(div) {
219
+ cursor: pointer;
220
+ }
221
+
222
+ .presence-panel-user-button:hover {
223
+ background: var(--color-surface-offset);
224
+ }
225
+
226
+ .presence-panel-user-button:focus-visible {
227
+ outline: none;
228
+ box-shadow: var(--shadow-accent-ring);
229
+ }
230
+
231
+ .presence-panel-user-avatar {
232
+ display: inline-flex;
233
+ align-items: center;
234
+ justify-content: center;
235
+ width: 30px;
236
+ height: 30px;
237
+ border-radius: var(--radius-full);
238
+ color: var(--color-text-on-dark);
239
+ font-size: var(--text-label);
240
+ font-weight: 700;
241
+ flex-shrink: 0;
242
+ }
243
+
244
+ .presence-panel-user-body {
245
+ display: flex;
246
+ flex-direction: column;
247
+ gap: 2px;
248
+ min-width: 0;
249
+ }
250
+
251
+ .presence-panel-user-topline {
252
+ display: flex;
253
+ align-items: center;
254
+ gap: var(--space-2);
255
+ min-width: 0;
256
+ }
257
+
258
+ .presence-panel-user-name {
259
+ overflow: hidden;
260
+ text-overflow: ellipsis;
261
+ white-space: nowrap;
262
+ font-size: var(--text-sm);
263
+ font-weight: 600;
264
+ }
265
+
266
+ .presence-panel-user-badge {
267
+ display: inline-flex;
268
+ align-items: center;
269
+ min-height: 18px;
270
+ padding: 0 6px;
271
+ border-radius: var(--radius-full);
272
+ background: var(--surface-avatar-label);
273
+ color: var(--color-text-on-dark);
274
+ font-size: var(--text-micro);
275
+ font-weight: 700;
276
+ letter-spacing: 0.04em;
277
+ text-transform: uppercase;
278
+ }
279
+
280
+ .presence-panel-user-file {
281
+ color: var(--color-text-muted);
282
+ font-size: var(--text-meta);
283
+ }
284
+
285
+ .presence-panel-user-stop {
286
+ flex-shrink: 0;
287
+ min-height: 28px;
288
+ padding: 0 10px;
289
+ border-radius: var(--radius-full);
290
+ background: var(--surface-accent-soft);
291
+ color: var(--color-primary);
292
+ font-size: var(--text-meta);
293
+ font-weight: 700;
294
+ transition: background var(--transition-interactive), box-shadow var(--transition-interactive);
295
+ }
296
+
297
+ .presence-panel-user-stop:hover {
298
+ background: var(--interactive-surface);
299
+ }
300
+
301
+ .presence-panel-user-stop:focus-visible {
302
+ outline: none;
303
+ box-shadow: var(--shadow-accent-ring);
304
+ }
305
+
306
+ @media (max-width: 768px) {
307
+ .presence-panel {
308
+ width: min(360px, calc(100vw - var(--space-4)));
309
+ max-height: min(68vh, 460px);
310
+ }
311
+
312
+ .presence-panel-user-button {
313
+ padding: 9px 10px;
314
+ }
315
+ }
@@ -52,9 +52,13 @@
52
52
  .diagram-preview-toolbar {
53
53
  display: flex;
54
54
  align-items: center;
55
- gap: var(--space-2);
55
+ justify-content: flex-start;
56
+ gap: var(--space-3);
56
57
  min-width: 0;
57
- flex-wrap: wrap;
58
+ overflow-x: auto;
59
+ overflow-y: hidden;
60
+ scrollbar-width: thin;
61
+ -webkit-overflow-scrolling: touch;
58
62
  padding: var(--space-2) var(--space-3);
59
63
  border-bottom: 1px solid var(--color-border);
60
64
  background: var(--color-surface-raised);
@@ -63,12 +67,30 @@
63
67
  user-select: none;
64
68
  }
65
69
 
70
+ .diagram-preview-toolbar-group {
71
+ display: inline-flex;
72
+ align-items: center;
73
+ gap: 6px;
74
+ min-width: max-content;
75
+ flex: 0 0 auto;
76
+ }
77
+
78
+ .diagram-preview-toolbar-group--zoom {
79
+ flex: 0 0 auto;
80
+ }
81
+
82
+ .diagram-preview-toolbar-group--actions {
83
+ margin-left: auto;
84
+ justify-content: flex-end;
85
+ }
86
+
66
87
  .diagram-preview-zoom-label {
67
- min-width: 52px;
88
+ min-width: 48px;
89
+ padding: 0 4px;
68
90
  color: var(--color-text-muted);
69
91
  text-align: center;
70
92
  font-size: var(--text-xs);
71
- font-weight: 500;
93
+ font-weight: 600;
72
94
  font-variant-numeric: tabular-nums;
73
95
  }
74
96
 
@@ -82,6 +104,51 @@
82
104
  overscroll-behavior: contain;
83
105
  }
84
106
 
107
+ .diagram-preview-toolbar .ui-preview-action {
108
+ width: 30px;
109
+ min-width: 30px;
110
+ height: 30px;
111
+ padding: 0;
112
+ line-height: 1;
113
+ }
114
+
115
+ .diagram-preview-toolbar .ui-preview-action:not(.ui-preview-action--icon-only) {
116
+ font-size: 16px;
117
+ font-weight: 700;
118
+ }
119
+
120
+ .diagram-preview-toolbar .ui-preview-action:focus-visible {
121
+ outline: 2px solid color-mix(in oklab, var(--color-primary) 72%, white 28%);
122
+ outline-offset: 2px;
123
+ border-color: color-mix(in oklab, var(--color-primary) 64%, var(--color-border) 36%);
124
+ }
125
+
126
+ .diagram-preview-toolbar .ui-preview-action.is-icon-only svg {
127
+ width: 14px;
128
+ height: 14px;
129
+ }
130
+
131
+ @media (max-width: 360px) {
132
+ .diagram-preview-toolbar {
133
+ gap: var(--space-2);
134
+ padding-inline: var(--space-2);
135
+ }
136
+
137
+ .diagram-preview-toolbar-group {
138
+ gap: 4px;
139
+ }
140
+
141
+ .diagram-preview-zoom-label {
142
+ min-width: 44px;
143
+ }
144
+
145
+ .diagram-preview-toolbar .ui-preview-action {
146
+ width: 28px;
147
+ min-width: 28px;
148
+ height: 28px;
149
+ }
150
+ }
151
+
85
152
  .excalidraw-embed,
86
153
  .excalidraw-embed-placeholder,
87
154
  .drawio-embed,