collabmd 0.1.52 → 0.1.55

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 (464) hide show
  1. package/bin/collabmd.js +22 -40
  2. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-cMeDxAEL.js +1 -0
  3. package/dist/client/assets/{abnfDiagram-VCTEODGH-DxNxad6-.js → abnfDiagram-VCTEODGH-D2UdmYvj.js} +1 -1
  4. package/dist/client/assets/{abnfDiagram-O67JEVCF-Dwt6a0Ds.js → abnfDiagram-YUKMZFIV-DbmU4Q-X.js} +1 -1
  5. package/dist/client/assets/api-client-utils-C5ESDKMG.js +1 -0
  6. package/dist/client/assets/architecture-7GRP2DOG-BBwRXFv3.js +1 -1
  7. package/dist/client/assets/architecture-WOLXFQ4H-C0NxYiG7.js +1 -0
  8. package/dist/client/assets/{architectureDiagram-NJMV4G6O-D5CGiX3G.js → architectureDiagram-47P4ROYG-C7OjXK9S.js} +3 -3
  9. package/dist/client/assets/{architectureDiagram-5GKGNRK7-C1uvg5id.js → architectureDiagram-5GKGNRK7-CSiUzzeN.js} +1 -1
  10. package/dist/client/assets/base-CaIEJUF9.css +1 -0
  11. package/dist/client/assets/{blockDiagram-BEXU5L5S-BgTM0var.js → blockDiagram-E7TT5TSB-DMG-YlZw.js} +3 -3
  12. package/dist/client/assets/{blockDiagram-I7D4REHJ-B2YonsoG.js → blockDiagram-I7D4REHJ-sXfAgK2w.js} +1 -1
  13. package/dist/client/assets/{browser-BKLM0ThC-IxjwuOIz-C0mP17s1.js → browser-BKLM0ThC-BCLQGPD6-CcMAHZXi.js} +1 -1
  14. package/dist/client/assets/{c4Diagram-7LVT6UL2-r4IwomZm.js → c4Diagram-7LVT6UL2-C88V_K-8.js} +1 -1
  15. package/dist/client/assets/{c4Diagram-YGBWAQC7-_xZPrNkB.js → c4Diagram-CRA5TL53-D3F9ElJv.js} +2 -2
  16. package/dist/client/assets/canvasEditor-BJkwGzO1.css +1 -0
  17. package/dist/client/assets/canvasEditor-sBK7KfrD.js +1 -0
  18. package/dist/client/assets/{chunk-6AZGARVD--pTGpDnx.js → chunk-24IY7LWP-flnn6SWX.js} +1 -1
  19. package/dist/client/assets/chunk-2BW5OAIV-CNFO1U_e.js +10 -0
  20. package/dist/client/assets/{chunk-2E4U76K2-CIQUuV9n.js → chunk-2E4U76K2-DEnS5IbF.js} +1 -1
  21. package/dist/client/assets/{chunk-5V3GS4D5-B5uC2oxu.js → chunk-3M4EKCLJ-D-sZGCtO.js} +1 -1
  22. package/dist/client/assets/chunk-3YJQHVM4-Ctp__8EK.js +2 -0
  23. package/dist/client/assets/{chunk-7PRAP22T-9uTvtc_-.js → chunk-4EA7E6EY-bU4wRJot.js} +1 -1
  24. package/dist/client/assets/{chunk-4HAMMTFA-q0ldNVvr.js → chunk-4HAMMTFA-CQy6Skzw.js} +1 -1
  25. package/dist/client/assets/{chunk-6K3QC6MW-JnuvEGV4.js → chunk-4S7OKTRW-BpUW13a3.js} +1 -1
  26. package/dist/client/assets/{chunk-ICYGCRZG-odvlDZyA.js → chunk-53FOQ5SW-5lPdGYP4.js} +1 -1
  27. package/dist/client/assets/{chunk-75Z2AOVW-DitkSoSG.js → chunk-75Z2AOVW-BRdhvVTZ.js} +1 -1
  28. package/dist/client/assets/{chunk-GWA4HPMP-CGmv2yIq.js → chunk-7TKQ45FW-rA2u-WUl.js} +1 -1
  29. package/dist/client/assets/{chunk-GTNCS2PH-ChgkzEIi.js → chunk-AW2ZBBNX-DL0KGAdi.js} +3 -3
  30. package/dist/client/assets/{chunk-747NJXEK-BjqqAsS9.js → chunk-BP2KR52E-DAQ1pzDV.js} +1 -1
  31. package/dist/client/assets/{chunk-CLGD4ZFX-BfYJtJm1.js → chunk-CLGD4ZFX-DJiSE0gD.js} +1 -1
  32. package/dist/client/assets/{chunk-5DYCD2WN-BKWCKnK-.js → chunk-DBDB3WZW-CXleNlok.js} +1 -1
  33. package/dist/client/assets/{chunk-DU6HZSFF-CWlP1Dk_.js → chunk-DU6HZSFF-C-18UZkS.js} +1 -1
  34. package/dist/client/assets/{chunk-MBY4JIJT-DTJ4UcAm.js → chunk-E2ZNV5FY-D_07zfWd.js} +3 -3
  35. package/dist/client/assets/chunk-EU5HNXII-CETVNUXF.js +213 -0
  36. package/dist/client/assets/{chunk-F27PBJKO-DPcsPcEs.js → chunk-F27PBJKO-_beIJos4.js} +1 -1
  37. package/dist/client/assets/{chunk-2ZTRR5NV-DcPRfelM.js → chunk-F6S3BTY2-DVWKCAHp.js} +1 -1
  38. package/dist/client/assets/{chunk-RUX4WMZV-BGnd3s_C.js → chunk-FLFP27SU-CydzbSsY.js} +2 -2
  39. package/dist/client/assets/chunk-FVRAUYC3-C7b9SJ81.js +1 -0
  40. package/dist/client/assets/{chunk-GMAD6QVW-Bgk8qnty.js → chunk-GMAD6QVW-DnZH7DxV.js} +1 -1
  41. package/dist/client/assets/{chunk-GVQU2GXP-CQ8cl-Uu.js → chunk-GVQU2GXP-B0Vm415C.js} +1 -1
  42. package/dist/client/assets/chunk-H5A3YXKD-ChP7mNJq.js +41 -0
  43. package/dist/client/assets/{chunk-742MDFTN-D1nh6vNv.js → chunk-HJ2JQQFS-DQX7RePR.js} +1 -1
  44. package/dist/client/assets/{chunk-NETBCI7D-CmUwDWUZ.js → chunk-HTAEGDNF-C0PA_N-c.js} +1 -1
  45. package/dist/client/assets/{chunk-IMKFNOWR-CBqxfpcP.js → chunk-IMKFNOWR-DoO8IHzF.js} +1 -1
  46. package/dist/client/assets/{chunk-IH6LHLGP-BNevEHZK.js → chunk-KPI5JJXK-B2ld5-w4.js} +1 -1
  47. package/dist/client/assets/{chunk-WEXAMYUT-DDlVNp8J.js → chunk-KQW6MTUR-OQ4MyMr_.js} +1 -1
  48. package/dist/client/assets/{chunk-L3NEJ4N5-BflzkdTI.js → chunk-L3NEJ4N5-CvHossEU.js} +1 -1
  49. package/dist/client/assets/chunk-NGNAAXSQ-DqoPQk1a.js +136 -0
  50. package/dist/client/assets/{chunk-UA2S7LBM-DicYDjDM.js → chunk-NTY3LDVX-CVWLK_fh.js} +1 -1
  51. package/dist/client/assets/{chunk-UY3FDG6J-QT-rkt0y.js → chunk-OD3NTWWA-Dz9nCUGX.js} +1 -1
  52. package/dist/client/assets/{chunk-OSK3NFVY-DqeKV_pg.js → chunk-OSK3NFVY-C3JOcBao.js} +1 -1
  53. package/dist/client/assets/{chunk-P2QGCYS3-BA--DhpW.js → chunk-P2QGCYS3-Bfo8qS8r.js} +1 -1
  54. package/dist/client/assets/{chunk-POPQ4Y6H-V_NEc45n.js → chunk-POPQ4Y6H-sv6rCftH.js} +1 -1
  55. package/dist/client/assets/{chunk-PWAF6VOD-D_kLse-N.js → chunk-PWAF6VOD-B-AT-L2H.js} +1 -1
  56. package/dist/client/assets/{chunk-3Z5EZCMW-BAnA6eQ7.js → chunk-QNH66VMT-Cb9xxTwQ.js} +1 -1
  57. package/dist/client/assets/{chunk-SHT3W25Y-YM3S-A_M.js → chunk-SHT3W25Y-C1lu518T.js} +1 -1
  58. package/dist/client/assets/{chunk-GNY47TPC-CTrH5O5R.js → chunk-SVEVUXB4-BnM-LXop.js} +1 -1
  59. package/dist/client/assets/{chunk-SVP7TREG-DdNhDOmW.js → chunk-SVP7TREG-CKqt0syj.js} +1 -1
  60. package/dist/client/assets/{chunk-TICWLB2K-BGGgCr4x.js → chunk-TICWLB2K-D2ZnWAfF.js} +1 -1
  61. package/dist/client/assets/{chunk-TLUHSLCS-DCZhIDYA.js → chunk-TLUHSLCS-BMIhqv1X.js} +1 -1
  62. package/dist/client/assets/{chunk-6EIED4P4-DBVWq7Tz.js → chunk-TPMEZKFX-DIPHIqGb.js} +1 -1
  63. package/dist/client/assets/{chunk-6TQVIW2G-BSj0l_pu.js → chunk-VPELOWWC-DXayM28-.js} +1 -1
  64. package/dist/client/assets/chunk-VPRB5NB3-BqaJfj_v.js +127 -0
  65. package/dist/client/assets/{chunk-I5DQTOEV-aBZooNp1.js → chunk-VTWWFHGB-SZnJiyWY.js} +1 -1
  66. package/dist/client/assets/{chunk-KI3K4JFJ-FTtDwx3-.js → chunk-VZTHESGH-eHyXmK8W.js} +1 -1
  67. package/dist/client/assets/{chunk-7INBJB4K-CDmiHbaX.js → chunk-XC4XBNZT-D9oehSn8.js} +20 -20
  68. package/dist/client/assets/{chunk-XHIXRSVI-DN_fEwws.js → chunk-YK26KJH5-DVy3MGMd.js} +1 -1
  69. package/dist/client/assets/{chunk-6AEJRKK7-DTVZj5bY.js → chunk-Z6ETV63D-DOcrnz-P.js} +1 -1
  70. package/dist/client/assets/{chunk-OUJLGHUK-75UXlPjl.js → chunk-ZO67DCNQ-BAOMIkLF.js} +1 -1
  71. package/dist/client/assets/classDiagram-ZZMXUADV-BmETdFmC.js +1 -0
  72. package/dist/client/assets/{classDiagram-v2-NBCMYWYE-3TQORq33.js → classDiagram-v2-K4WV4PDN-eaadfJDB.js} +3 -3
  73. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BmETdFmC.js +1 -0
  74. package/dist/client/assets/{comment-markdown-renderer-Bxi_JRSR.js → comment-markdown-renderer-CpBKaj7H.js} +1 -1
  75. package/dist/client/assets/comment-thread-store-DUQsWtnu.js +1 -0
  76. package/dist/client/assets/comment-threads-DnfkLVJA.js +4 -0
  77. package/dist/client/assets/comment-ui-shared-D_pgPUti.js +7 -0
  78. package/dist/client/assets/cynefin-EF2NZ3EQ-DVkJeZ8i.js +1 -0
  79. package/dist/client/assets/cynefin-OW5HDTMX-CF3N9j1_.js +1 -1
  80. package/dist/client/assets/{cynefinDiagram-VND7K2PF-DwfMZ3vk.js → cynefinDiagram-3GCD6N5R-DjpAsBHC.js} +1 -1
  81. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-DTnLZaO7.js → cynefinDiagram-5FMLGOSQ-D2rFQG67.js} +1 -1
  82. package/dist/client/assets/dagre-C-rnJpZF.js +1 -0
  83. package/dist/client/assets/{dagre-GXQ25YYZ-Vtyx08Qh.js → dagre-GXQ25YYZ-Cku9eia9.js} +2 -2
  84. package/dist/client/assets/{dagre-6A5THRUB-DewyAGK6.js → dagre-W4DXFKR2-DOMOIsPd.js} +2 -2
  85. package/dist/client/assets/deferred-collab-C9aa9cvT.css +1 -0
  86. package/dist/client/assets/deferred-git-BPQ-UgrN.css +1 -0
  87. package/dist/client/assets/deferred-preview-B-RebLry.css +1 -0
  88. package/dist/client/assets/{diagram-22UHCM2B-DbZirFfl.js → diagram-2UJZ2QOL-D8WvnEyx.js} +6 -6
  89. package/dist/client/assets/{diagram-3UASUU5V-DmhdYv6_.js → diagram-OVF4WLC6-D8_escYE.js} +2 -2
  90. package/dist/client/assets/{diagram-CDSNMT55-D_qyS11R.js → diagram-PFPMY2P6-B1izZfrN.js} +3 -3
  91. package/dist/client/assets/{diagram-S7CK7UJ4-CGTzfo2f.js → diagram-S7CK7UJ4-BzicH2t-.js} +1 -1
  92. package/dist/client/assets/{diagram-MLGK6HIB-DIBG6Ivu.js → diagram-UMYRVEAY-Djf7WDjZ.js} +1 -1
  93. package/dist/client/assets/{diagram-UQ7AKVKN-CWZS8QtB.js → diagram-UQ7AKVKN-DqX4zTtr.js} +1 -1
  94. package/dist/client/assets/{diagram-VSXAHHWV-DaO1nOZF.js → diagram-VSXAHHWV-DnVbfI4Y.js} +1 -1
  95. package/dist/client/assets/{diagram-VX7I27RA-B54P6Cyf.js → diagram-VX7I27RA-D-Dj0TQC.js} +1 -1
  96. package/dist/client/assets/{diagram-MPIPVDR6-D9XsALDV.js → diagram-YEKJPTXX-B40bP3Yr.js} +2 -2
  97. package/dist/client/assets/{diagram-Z3DM3KII-Cl2EXiXp.js → diagram-Z3DM3KII-_iT7Uz5p.js} +1 -1
  98. package/dist/client/assets/diagram-ZIFT7M5P-BUUK0oNw.js +3 -0
  99. package/dist/client/assets/{direct-engine-DdrQKpgq-4QysbH_V.js → direct-engine-DVLMOJWp-DWtWIifK.js} +1 -1
  100. package/dist/client/assets/dist-26Ce-5t4.js +1 -0
  101. package/dist/client/assets/dist-8MLNn-I6.js +1 -0
  102. package/dist/client/assets/dist-Amm5Pr1C.js +1 -0
  103. package/dist/client/assets/dist-BXXPaoUV.js +1 -0
  104. package/dist/client/assets/{dist-zHDLm1oE.js → dist-Bkb-_VdB.js} +1 -1
  105. package/dist/client/assets/dist-Bl4yuUS9.js +1 -0
  106. package/dist/client/assets/{dist-CKf7LlAo.js → dist-C2CGvCPd.js} +1 -1
  107. package/dist/client/assets/dist-C2niyEh0.js +1 -0
  108. package/dist/client/assets/{dist-Y6zYRI-A.js → dist-CFCSUmJk.js} +1 -1
  109. package/dist/client/assets/dist-CHUI56fT.js +6 -0
  110. package/dist/client/assets/dist-CJh3Qrid.js +13 -0
  111. package/dist/client/assets/{dist-Ch6Sr9KF.js → dist-CKxETpSC.js} +3 -3
  112. package/dist/client/assets/dist-CSHJthAI.js +2 -0
  113. package/dist/client/assets/dist-CbKnZGN4.js +1 -0
  114. package/dist/client/assets/{dist-BVCNc-Es.js → dist-Cik4RJXj.js} +1 -1
  115. package/dist/client/assets/{dist-DGa-2MNX.js → dist-CqkAY6Ot.js} +2 -2
  116. package/dist/client/assets/dist-D2ql2LCd.js +1 -0
  117. package/dist/client/assets/{dist-CvVoyTRF.js → dist-D47MOYFN.js} +1 -1
  118. package/dist/client/assets/dist-DBhUaexM.js +1 -0
  119. package/dist/client/assets/dist-DJux6Vc5.js +1 -0
  120. package/dist/client/assets/{dist-CXOUa90Q.js → dist-DLNdMWPH.js} +1 -1
  121. package/dist/client/assets/dist-DPJj-Y3l.js +1 -0
  122. package/dist/client/assets/{dist-DI6c02Da.js → dist-DRYFMufe.js} +6 -6
  123. package/dist/client/assets/{dist-CUsXdnU4.js → dist-DTGcVSU8.js} +1 -1
  124. package/dist/client/assets/dist-DlOxjzWi.js +9 -0
  125. package/dist/client/assets/{dist-BfpAc922.js → dist-DogjjM_B.js} +1 -1
  126. package/dist/client/assets/dist-Dyv_RvyB.js +23 -0
  127. package/dist/client/assets/dist-FUFeH5Cx.js +1 -0
  128. package/dist/client/assets/dist-It70ktCU.js +1 -0
  129. package/dist/client/assets/dist-QMvcnJHf.js +1 -0
  130. package/dist/client/assets/dist-QN1K2czv.js +11 -0
  131. package/dist/client/assets/dist-W8ilOKl3.js +1 -0
  132. package/dist/client/assets/dist-_17-t9qP.js +1 -0
  133. package/dist/client/assets/{dist-CsQTfQFi.js → dist-uE774WWs.js} +1 -1
  134. package/dist/client/assets/document-formatter-DtXmKZcy.js +1 -0
  135. package/dist/client/assets/drawioEditor-DO6IOaJ1.js +9 -0
  136. package/dist/client/assets/{ebnfDiagram-PWID7BFC-PfC84FyI.js → ebnfDiagram-PWID7BFC-IemGPf9X.js} +1 -1
  137. package/dist/client/assets/{ebnfDiagram-ZINNZB2B-DYvm_QtE.js → ebnfDiagram-VR2GEFS7-9fXqy1DI.js} +1 -1
  138. package/dist/client/assets/editor-session-CPsqXY_A.js +13 -0
  139. package/dist/client/assets/elk-IJKZMXRS-DsbrbBYg.js +27 -0
  140. package/dist/client/assets/embedded-editor-base-C44ZcCZv.css +1 -0
  141. package/dist/client/assets/{embedpdf-DyOonRvx.js → embedpdf-BfUI-3pv.js} +1 -1
  142. package/dist/client/assets/{embedpdf-DA4bA119-DsoNiPlQ.js → embedpdf-cl9qiF45-CLMxJTMP.js} +3 -3
  143. package/dist/client/assets/en-7ZVUCEYH-C_VXKxxb.js +1 -0
  144. package/dist/client/assets/{erDiagram-OPXOYQCR-o8GRv8A_.js → erDiagram-O2IAPWRE-Cdadm-HN.js} +2 -2
  145. package/dist/client/assets/{erDiagram-RLTQ6QDP-C9cJl5NB.js → erDiagram-RLTQ6QDP-CGGmjm8t.js} +1 -1
  146. package/dist/client/assets/{estree-DCT3Jm65.js → estree-DGmLqopC.js} +17 -17
  147. package/dist/client/assets/eventmodeling-K75KTNOO-BWBlZ5cR.js +1 -0
  148. package/dist/client/assets/eventmodeling-NTZA5JFV-CDy1bN6j.js +1 -1
  149. package/dist/client/assets/excalidraw-element-link-NQnskRkm.js +1 -0
  150. package/dist/client/assets/excalidraw-scene-DLlw4jyc.js +1 -0
  151. package/dist/client/assets/excalidrawEditor-DiKOIudt.css +1 -0
  152. package/dist/client/assets/excalidrawEditor-W2lZ5Mej.js +9 -0
  153. package/dist/client/assets/export-page-Bomh9oEr.js +46 -0
  154. package/dist/client/assets/exportDocument-BFIOECJ3.js +2 -0
  155. package/dist/client/assets/exportDocument-D0mONgQ4.css +1 -0
  156. package/dist/client/assets/file-kind-BGxTVHan.js +1 -0
  157. package/dist/client/assets/{file-search-3hYF4cYa.js → file-search-Dk2O14Vw.js} +1 -1
  158. package/dist/client/assets/flowDiagram-HODETNUW-DcVVYJUZ.js +1 -0
  159. package/dist/client/assets/flowDiagram-OXPTDLAJ-Dy6y46oF.js +1 -0
  160. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-x40PW0Ah.js → ganttDiagram-EL5Y4UJY-Duu4KnsU.js} +1 -1
  161. package/dist/client/assets/ganttDiagram-R7TSEDQI-BWy52pjn.js +292 -0
  162. package/dist/client/assets/gitGraph-4MIJSDKK-B-rpDYbz.js +1 -1
  163. package/dist/client/assets/gitGraph-VSP46ZUC-1499lQAI.js +1 -0
  164. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-ahsNaZsp.js → gitGraphDiagram-WWUBYQGX-CaJ0vC1a.js} +1 -1
  165. package/dist/client/assets/gitGraphDiagram-XJZIOB7I-DJwp9ilx.js +106 -0
  166. package/dist/client/assets/graphlib-DS17s2tU.js +1 -0
  167. package/dist/client/assets/{html-CBXMuS97.js → html-BryNQ_yx.js} +6 -6
  168. package/dist/client/assets/image-6XY3GD3F-DCWbu6d4.js +1 -0
  169. package/dist/client/assets/image-lightbox-controller-DAcXEXxT.js +184 -0
  170. package/dist/client/assets/index-CglpXOg7.css +1 -0
  171. package/dist/client/assets/index-D3WGkxfI.js +960 -0
  172. package/dist/client/assets/info-A6RAGUB7-BlutK7BT.js +1 -1
  173. package/dist/client/assets/info-OHQRW6UA-BDFQOo4H.js +1 -0
  174. package/dist/client/assets/{infoDiagram-27XIBGKW-MrZyptIy.js → infoDiagram-27XIBGKW-DBJh7QOu.js} +1 -1
  175. package/dist/client/assets/{infoDiagram-VRGFBTTK-KkUjDRAQ.js → infoDiagram-5W2HQ5XZ-DmWsqJ0w.js} +1 -1
  176. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-Bnt9yM0O.js → ishikawaDiagram-5VMMS53U-CeEbSJem.js} +1 -1
  177. package/dist/client/assets/{ishikawaDiagram-OU5B5YK6-Di9BcpOY.js → ishikawaDiagram-K3B6WC7H-DH1NI35G.js} +2 -2
  178. package/dist/client/assets/{journeyDiagram-3NMN7TZE-Bl0abK1r.js → journeyDiagram-3NMN7TZE-BoIEEr6U.js} +1 -1
  179. package/dist/client/assets/{journeyDiagram-ZHPQQLJL-J-sGrs9e.js → journeyDiagram-COXZFDF6-CnHV2f9V.js} +3 -3
  180. package/dist/client/assets/{kanban-definition-PNTS6WVX-5ZDV_yIa.js → kanban-definition-P3RFRI5V-Cxvn5ZAG.js} +4 -4
  181. package/dist/client/assets/{kanban-definition-UXKFOSKX-DMgUfNt0.js → kanban-definition-UXKFOSKX-BY16Tgbr.js} +1 -1
  182. package/dist/client/assets/keyboard-shortcuts-BWNCBJqw.js +1 -0
  183. package/dist/client/assets/lobby-presence-DNNXcuwR.js +1 -0
  184. package/dist/client/assets/{markdown-Bo71X2X2.js → markdown-DU84620G.js} +17 -17
  185. package/dist/client/assets/markdown-headings-zYEUahfW.js +41 -0
  186. package/dist/client/assets/{markdown-math-CyyBVuDO.js → markdown-math-B96cnrz1.js} +11 -11
  187. package/dist/client/assets/{mermaid-parser.core-Bpogunsh.js → mermaid-parser.core-R-uwU5kf.js} +3 -3
  188. package/dist/client/assets/{mermaid-parser.core-DBy--Jc0.js → mermaid-parser.core-mE6t1qEO.js} +1 -1
  189. package/dist/client/assets/mermaid.core-D8Z6LN7O.js +10 -0
  190. package/dist/client/assets/{mindmap-definition-NLK3R4M7-ByVb-0vj.js → mindmap-definition-LZFPQGKD-DVfFenfJ.js} +3 -3
  191. package/dist/client/assets/{mindmap-definition-YA3MSWOX-DBZN5_GH.js → mindmap-definition-YA3MSWOX-DtiE80UJ.js} +1 -1
  192. package/dist/client/assets/packet-AYTQ26CC-DvbY8dI6.js +1 -1
  193. package/dist/client/assets/packet-JDAUHWVQ-DJ9K2MA4.js +1 -0
  194. package/dist/client/assets/{pdfium-RAgkpwfK.wasm → pdfium-BJ2Yip8Q.wasm} +0 -0
  195. package/dist/client/assets/{pegDiagram-GJSIUBJH-aost1sSO.js → pegDiagram-BGZESJAR-DxfvEcwv.js} +1 -1
  196. package/dist/client/assets/{pegDiagram-XKGWAZYB-DRo8CZu3.js → pegDiagram-XKGWAZYB-CyozY-Kt.js} +1 -1
  197. package/dist/client/assets/pie-WAS4IAKB-DWSm9SSD.js +1 -1
  198. package/dist/client/assets/pie-XZMESJXO-CQIQasY-.js +1 -0
  199. package/dist/client/assets/{pieDiagram-5QR66LMP-BICdpEuz.js → pieDiagram-CAPJLFHJ-CRlMcrv3.js} +2 -2
  200. package/dist/client/assets/{pieDiagram-E7YTZNPT-CZThaHsc.js → pieDiagram-E7YTZNPT-BRdmTkDq.js} +1 -1
  201. package/dist/client/assets/preload-helper-CYtfOYgs.js +1 -0
  202. package/dist/client/assets/preview-render-compiler-D_aJv7Ew.js +3 -0
  203. package/dist/client/assets/{preview-render-worker-BI2bFVqM.js → preview-render-worker-dFNyrVyB.js} +47 -43
  204. package/dist/client/assets/prod-ItolaHmf.js +145 -0
  205. package/dist/client/assets/prod-rdly4JJQ.js +1 -0
  206. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-C5iowkl_.js → quadrantDiagram-AXDQQJYC-7QyPIXkF.js} +1 -1
  207. package/dist/client/assets/{quadrantDiagram-O4NWA36T-Bgx5bF97.js → quadrantDiagram-GDMTTRAM-DE30uqTl.js} +3 -3
  208. package/dist/client/assets/quick-switcher-controller-DsK70I7K.js +1 -0
  209. package/dist/client/assets/radar-ABXABTNO-ByfpCXh9.js +1 -0
  210. package/dist/client/assets/radar-RG4KPBEZ-BfNQUEQy.js +1 -1
  211. package/dist/client/assets/railroad-74A4TZTK-BaQ6U6eJ.js +1 -1
  212. package/dist/client/assets/railroad-I3PHUGI6-CTUn9HhI.js +1 -0
  213. package/dist/client/assets/railroad-abnf-HS5TGJTU-BJ3KZw7J.js +1 -1
  214. package/dist/client/assets/railroad-abnf-LNEFI6M7-Ct-b-y0F.js +1 -0
  215. package/dist/client/assets/railroad-ebnf-DWYD2UWJ-BZMYMWOe.js +1 -0
  216. package/dist/client/assets/railroad-ebnf-LZEXJU2U-DA0sEq7w.js +1 -1
  217. package/dist/client/assets/railroad-peg-JR7BVNR7-Dj23PxYc.js +1 -0
  218. package/dist/client/assets/railroad-peg-WCYAUIDC-DCmlICzO.js +1 -1
  219. package/dist/client/assets/{railroadDiagram-O6MQD6OU-BTt_rKjT.js → railroadDiagram-O6MQD6OU-BPk3RS2D.js} +1 -1
  220. package/dist/client/assets/{railroadDiagram-XR7U4H2S-DbVoNgSz.js → railroadDiagram-SM67HX2B-CZRXJ647.js} +1 -1
  221. package/dist/client/assets/{requirementDiagram-BXWQKSXE-BkvazG7r.js → requirementDiagram-BXWQKSXE-BRwfym6z.js} +1 -1
  222. package/dist/client/assets/{requirementDiagram-PLB6GJNP-BT0j9C40.js → requirementDiagram-X7JNWC4A-BofCuLJA.js} +4 -4
  223. package/dist/client/assets/runtime-config-CvrkHb0n.js +1 -0
  224. package/dist/client/assets/runtime-paths-qQGhzNx4.js +1 -0
  225. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-C_IemB9h.js → sankeyDiagram-P5KCCOFB-D4LcrKpW.js} +1 -1
  226. package/dist/client/assets/{sankeyDiagram-IPEJSGJF-X1BCUIrf.js → sankeyDiagram-UM26HJRW-CLKMDbej.js} +3 -3
  227. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-CxFBgLGd.js → sequenceDiagram-WJ2MYXX4-DQjtv-Bs.js} +1 -1
  228. package/dist/client/assets/sequenceDiagram-ZO4K6R2Y-CDP_m6ma.js +169 -0
  229. package/dist/client/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  230. package/dist/client/assets/sizeCapture-INFHLROL-BMR1ovSU.js +1 -0
  231. package/dist/client/assets/src-D5mvpivG.js +2 -0
  232. package/dist/client/assets/{standalone-6z5x8CWe.js → standalone-D_lg5NC9.js} +1 -1
  233. package/dist/client/assets/{stateDiagram-D77RDMKH-BaSQ6Owj.js → stateDiagram-D77RDMKH-DSMvV-kF.js} +1 -1
  234. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-ClmOOUsT.js +1 -0
  235. package/dist/client/assets/{stateDiagram-v2-GCMORJYK-CsVcfwVp.js → stateDiagram-v2-TBUQTH76-Dc5-FKzd.js} +2 -2
  236. package/dist/client/assets/{swimlanes-42K2YHIH-CALFEmiS.js → swimlanes-42K2YHIH-BUz31lO3.js} +1 -1
  237. package/dist/client/assets/{swimlanes-2SLR337P-CnYTVqRX.js → swimlanes-N4OXWK64-Dd3dFdPD.js} +1 -1
  238. package/dist/client/assets/swimlanesDiagram-K3J5GTZL-Bz9gFdls.js +8 -0
  239. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DoDs3zod.js +8 -0
  240. package/dist/client/assets/{timeline-definition-24CTP7MA-zse-5Dbm.js → timeline-definition-24CTP7MA-BvqCvSjy.js} +1 -1
  241. package/dist/client/assets/{timeline-definition-EJHVYXUP-BhqPlKkN.js → timeline-definition-YOQAKGHF-D2XWPSLs.js} +3 -3
  242. package/dist/client/assets/treeView-D4JQ5SDB-DcX7Bx0H.js +1 -0
  243. package/dist/client/assets/treeView-Q6P3EWNA-BvHOzbu9.js +1 -1
  244. package/dist/client/assets/treemap-SAJKECNS-BcCHmcAX.js +1 -0
  245. package/dist/client/assets/treemap-WGGIJYW6-oety7paS.js +1 -1
  246. package/dist/client/assets/usecaseDiagram-VIAY4XPW-CDe-IMjS.js +328 -0
  247. package/dist/client/assets/vault-api-client-DrRW0QwO.js +7 -0
  248. package/dist/client/assets/{vennDiagram-4TSXK5OY-DgHr6cJD.js → vennDiagram-4TSXK5OY-BW6Qp12d.js} +1 -1
  249. package/dist/client/assets/{vennDiagram-UO4OBE2U-BRwLn2Q1.js → vennDiagram-BLWOH2XV-KxIPKpHi.js} +3 -3
  250. package/dist/client/assets/wardley-7MLQ67FV-DOahSwbZ.js +1 -0
  251. package/dist/client/assets/wardley-WFR3VGLG-BdwDpX_I.js +1 -1
  252. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-9A60XZis.js → wardleyDiagram-VM6X3IG4-BoCETVsK.js} +1 -1
  253. package/dist/client/assets/{wardleyDiagram-VNRHLVJA-B_tMcVFG.js → wardleyDiagram-YMQ3BMBF-BNYqEy7M.js} +4 -4
  254. package/dist/client/assets/{wiki-link-resolver-Dch88erO.js → wiki-link-resolver-BCdGUpdu.js} +1 -1
  255. package/dist/client/assets/{worker-engine-m0rlHn8R-5h66k403.js → worker-engine-BCCrxWYm-1fphds7O.js} +1 -1
  256. package/dist/client/assets/workspace-sync-client-C_P9wtjf.js +1 -0
  257. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-D00iy-wB.js → xychartDiagram-S5SC5T6Z-eB5Fu9P7.js} +1 -1
  258. package/dist/client/assets/xychartDiagram-TAQBALBS-Sv6aaptV.js +7 -0
  259. package/dist/client/assets/yjs-Jd9fna_Y.js +4 -0
  260. package/dist/client/assets/yjs-provider-reset-guard-Cqu0Z6xH.js +1 -0
  261. package/dist/client/canvas-editor.html +16 -0
  262. package/dist/client/drawio-editor.html +9 -8
  263. package/dist/client/excalidraw-editor.html +33 -32
  264. package/dist/client/export-document.html +4 -3
  265. package/dist/client/index.html +13 -2
  266. package/package.json +31 -33
  267. package/scripts/local-compose.mjs +101 -0
  268. package/src/client/app/canvas-editor.html +13 -0
  269. package/src/client/app/index.html +11 -0
  270. package/src/client/app/main-entry.js +30 -4
  271. package/src/client/application/app-shell/git-feature.js +3 -2
  272. package/src/client/application/app-shell/ui-feature-identity.js +1 -0
  273. package/src/client/application/app-shell/ui-feature-shell.js +2 -0
  274. package/src/client/application/app-shell/ui-feature-tab-activity.js +4 -0
  275. package/src/client/application/app-shell/workspace-feature.js +8 -34
  276. package/src/client/application/diagram-chrome.js +8 -11
  277. package/src/client/application/diagram-preview-hydrator.js +5 -5
  278. package/src/client/application/mermaid-preview-hydrator.js +3 -2
  279. package/src/client/application/plantuml-preview-hydrator.js +6 -0
  280. package/src/client/application/preview-render-compiler.js +34 -98
  281. package/src/client/application/preview-render-executor.js +3 -0
  282. package/src/client/application/preview-render-worker.js +2 -0
  283. package/src/client/application/preview-renderer.js +9 -5
  284. package/src/client/application/workspace-coordinator.js +18 -10
  285. package/src/client/application/workspace-preview-controller.js +105 -158
  286. package/src/client/application/workspace-route-controller.js +29 -54
  287. package/src/client/bootstrap/canvas-markdown-preview.js +87 -0
  288. package/src/client/bootstrap/collabmd-app-shell.js +31 -14
  289. package/src/client/browser-utils.js +21 -0
  290. package/src/client/canvas-editor.js +143 -0
  291. package/src/client/domain/canvas-view.js +50 -0
  292. package/src/client/domain/excalidraw-scene.js +4 -49
  293. package/src/client/domain/file-search.js +1 -1
  294. package/src/client/domain/highlight-runtime.js +0 -4
  295. package/src/client/domain/markdown-formatting.js +12 -94
  296. package/src/client/domain/markdown-headings.js +98 -0
  297. package/src/client/domain/runtime-paths.js +4 -0
  298. package/src/client/domain/wiki-link-completions.js +42 -10
  299. package/src/client/infrastructure/browser-preferences-port.js +27 -33
  300. package/src/client/infrastructure/canvas-room-client.js +210 -0
  301. package/src/client/infrastructure/canvas-text-editor.js +36 -0
  302. package/src/client/infrastructure/comment-thread-store.js +19 -77
  303. package/src/client/infrastructure/editor-view-adapter.js +0 -30
  304. package/src/client/infrastructure/excalidraw-room-client.js +22 -10
  305. package/src/client/infrastructure/hosted-api-client.js +4 -2
  306. package/src/client/infrastructure/runtime-config.js +14 -0
  307. package/src/client/infrastructure/vault-api-client.js +4 -4
  308. package/src/client/presentation/canvas-editor-view.js +1028 -0
  309. package/src/client/presentation/canvas-embed-controller.js +116 -0
  310. package/src/client/presentation/canvas-picker.js +111 -0
  311. package/src/client/presentation/drawio-embed-controller.js +4 -4
  312. package/src/client/presentation/excalidraw-embed-controller.js +13 -4
  313. package/src/client/presentation/file-action-controller.js +58 -1
  314. package/src/client/presentation/file-explorer-controller.js +1 -2
  315. package/src/client/presentation/file-explorer-view.js +31 -7
  316. package/src/client/presentation/file-icon-svg.js +1 -1
  317. package/src/client/presentation/file-tree-state.js +4 -1
  318. package/src/client/presentation/image-lightbox-controller.js +1 -5
  319. package/src/client/presentation/team-settings-controller.js +44 -10
  320. package/src/client/presentation/vault-dashboard.js +63 -0
  321. package/src/client/styles/components/actions.css +4 -16
  322. package/src/client/styles/components/surfaces.css +0 -7
  323. package/src/client/styles/features/comment-card.css +1 -2
  324. package/src/client/styles/features/comment-markdown.css +0 -18
  325. package/src/client/styles/features/diagram-preview.css +0 -18
  326. package/src/client/styles/features/git-branch.css +0 -4
  327. package/src/client/styles/foundation/themes.css +6 -0
  328. package/src/client/styles/foundation/utilities.css +3 -2
  329. package/src/client/styles/layout/editor-page.css +0 -13
  330. package/src/client/styles/layout/overlays.css +5 -0
  331. package/src/client/styles/layout/responsive.css +2 -7
  332. package/src/client/styles/layout/shell.css +165 -1
  333. package/src/client/styles/layout/view-modes.css +1 -0
  334. package/src/client/styles/surfaces/canvas-editor.css +239 -0
  335. package/src/domain/canvas-room-codec.js +359 -0
  336. package/src/domain/collabmd-content-capabilities.js +10 -1
  337. package/src/domain/comment-threads.js +49 -5
  338. package/src/domain/excalidraw-room-codec.js +23 -73
  339. package/src/domain/excalidraw-scene.js +48 -0
  340. package/src/domain/file-kind.js +13 -1
  341. package/src/server/application/workspace-reconciliation.js +0 -14
  342. package/src/server/config/env.js +39 -6
  343. package/src/server/domain/backlink-index.js +1 -36
  344. package/src/server/domain/bases/base-index-snapshot-store.js +41 -24
  345. package/src/server/domain/bases/base-query-service.js +1 -47
  346. package/src/server/domain/collaboration/collaboration-room.js +149 -15
  347. package/src/server/domain/collaboration/room-registry.js +7 -7
  348. package/src/server/domain/hosted-workspace.js +29 -2
  349. package/src/server/domain/plantuml-encoder.js +7 -43
  350. package/src/server/infrastructure/git/diff-service.js +1 -5
  351. package/src/server/infrastructure/git/history-service.js +18 -2
  352. package/src/server/infrastructure/git/untracked-files.js +1 -1
  353. package/src/server/infrastructure/http/create-git-api-command-handler.js +60 -149
  354. package/src/server/infrastructure/http/create-hosted-api-handler.js +5 -2
  355. package/src/server/infrastructure/http/create-static-handler.js +3 -1
  356. package/src/server/infrastructure/http/create-vault-api-query-handler.js +3 -3
  357. package/src/server/infrastructure/http/http-response.js +2 -36
  358. package/src/server/infrastructure/http/request-body.js +14 -49
  359. package/src/server/infrastructure/persistence/hosted-metadata-store.js +12 -3
  360. package/src/server/infrastructure/persistence/path-utils.js +8 -2
  361. package/src/server/infrastructure/persistence/vault-file-store.js +26 -60
  362. package/src/server/{infrastructure/git → shared}/image-mime.js +2 -2
  363. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-BEz2BKN1.js +0 -1
  364. package/dist/client/assets/_basePickBy-QJXUw_pr.js +0 -1
  365. package/dist/client/assets/_baseUniq-DR4vVjyC.js +0 -1
  366. package/dist/client/assets/architecture-7GRP2DOG-DJVtYNt-.js +0 -1
  367. package/dist/client/assets/browser-utils-vlHL9goC.js +0 -1
  368. package/dist/client/assets/chunk-3FUC2YCW-8tZlhTGX.js +0 -1
  369. package/dist/client/assets/chunk-4SOEAONT-C3fufoVl.js +0 -40
  370. package/dist/client/assets/chunk-7M6MHVWA-BDakkknV.js +0 -213
  371. package/dist/client/assets/chunk-FOHPRMQF-Dmmo5Kak.js +0 -161
  372. package/dist/client/assets/chunk-O7XYJQB3-D0_ZY2za.js +0 -126
  373. package/dist/client/assets/chunk-Z7XXMR3K-P4Vaq8hD.js +0 -10
  374. package/dist/client/assets/chunk-ZIGJFQKS-b8OUHKK5.js +0 -2
  375. package/dist/client/assets/classDiagram-ZZMXUADV-QLbh_Nkf.js +0 -1
  376. package/dist/client/assets/classDiagram-v2-VYDZK3BY-QLbh_Nkf.js +0 -1
  377. package/dist/client/assets/comment-thread-store-CHvy8GF8.js +0 -1
  378. package/dist/client/assets/comment-threads-nJhK1yfc.js +0 -4
  379. package/dist/client/assets/cynefin-OW5HDTMX-e-Quc9Yl.js +0 -1
  380. package/dist/client/assets/dagre-D7FiCLLP.js +0 -1
  381. package/dist/client/assets/deferred-collab-D4cxEdad.css +0 -1
  382. package/dist/client/assets/deferred-git-BHKtkFYi.css +0 -1
  383. package/dist/client/assets/deferred-preview-BAXYgf4T.css +0 -1
  384. package/dist/client/assets/diagram-ATOU4E4O-B5uX-jVO.js +0 -3
  385. package/dist/client/assets/dist-B7fBbwrO.js +0 -1
  386. package/dist/client/assets/dist-BYBF4LtZ.js +0 -1
  387. package/dist/client/assets/dist-B_1hMrc6.js +0 -1
  388. package/dist/client/assets/dist-BnVaoRgZ.js +0 -1
  389. package/dist/client/assets/dist-Bog8M5U3.js +0 -13
  390. package/dist/client/assets/dist-CAG5sIOj.js +0 -1
  391. package/dist/client/assets/dist-CYMCikZo.js +0 -1
  392. package/dist/client/assets/dist-CYfPeupF.js +0 -1
  393. package/dist/client/assets/dist-Ck-B8onw.js +0 -2
  394. package/dist/client/assets/dist-CrkYYcOU.js +0 -1
  395. package/dist/client/assets/dist-Cu5Ze2cs.js +0 -6
  396. package/dist/client/assets/dist-D4kDR0g8.js +0 -1
  397. package/dist/client/assets/dist-D8LnhZzy.js +0 -1
  398. package/dist/client/assets/dist-DNONgI1P.js +0 -11
  399. package/dist/client/assets/dist-DVBYH83t.js +0 -1
  400. package/dist/client/assets/dist-DX6qtdxv.js +0 -1
  401. package/dist/client/assets/dist-Da-jLrCf.js +0 -1
  402. package/dist/client/assets/dist-DofvCYzJ.js +0 -1
  403. package/dist/client/assets/dist-Dx37MHWs.js +0 -1
  404. package/dist/client/assets/dist-GTGhtpyW.js +0 -9
  405. package/dist/client/assets/dist-W0FoeIxk.js +0 -23
  406. package/dist/client/assets/dist-jVKfryIL.js +0 -1
  407. package/dist/client/assets/document-formatter-gO8qM2qY.js +0 -1
  408. package/dist/client/assets/drawioEditor-DCkWweiy.js +0 -9
  409. package/dist/client/assets/editor-session-DxRyr4EM.js +0 -14
  410. package/dist/client/assets/elk-276RUBZZ-B8LB3Pac.js +0 -27
  411. package/dist/client/assets/embedded-editor-base-elU0Avik.css +0 -1
  412. package/dist/client/assets/en-GNC3RJIS-CEy_oGTd.js +0 -1
  413. package/dist/client/assets/eventmodeling-NTZA5JFV-Dxtv5D-P.js +0 -1
  414. package/dist/client/assets/excalidraw-element-link-CGZ5934B.js +0 -7
  415. package/dist/client/assets/excalidraw-scene-6uROebca.js +0 -1
  416. package/dist/client/assets/excalidrawEditor-BCTFp_CV.css +0 -1
  417. package/dist/client/assets/excalidrawEditor-BVfSxjSO.js +0 -9
  418. package/dist/client/assets/export-page-BCo_e15t.js +0 -46
  419. package/dist/client/assets/exportDocument-Ba-n1X4U.css +0 -1
  420. package/dist/client/assets/exportDocument-DP6oE_or.js +0 -2
  421. package/dist/client/assets/file-kind-BwMIcZbi.js +0 -1
  422. package/dist/client/assets/flowDiagram-HODETNUW-Bq4470NR.js +0 -1
  423. package/dist/client/assets/flowDiagram-KWPJA3E3-DQG9qGiU.js +0 -1
  424. package/dist/client/assets/ganttDiagram-FUAMR5RP-BQpsI7gQ.js +0 -292
  425. package/dist/client/assets/gitGraph-4MIJSDKK-ZaBIE4Lb.js +0 -1
  426. package/dist/client/assets/gitGraphDiagram-X574FWY7-wbs_2m9f.js +0 -106
  427. package/dist/client/assets/graphlib-C9Tl7QrK.js +0 -1
  428. package/dist/client/assets/image-EJJKRVD3-BQfi5nWJ.js +0 -1
  429. package/dist/client/assets/index-BxAuGDoN.css +0 -1
  430. package/dist/client/assets/index-uw9O0z1c.js +0 -1112
  431. package/dist/client/assets/info-A6RAGUB7-BcGxhjED.js +0 -1
  432. package/dist/client/assets/lobby-presence-Cz5jGOPg.js +0 -1
  433. package/dist/client/assets/mermaid.core-BeOUPE3Q.js +0 -10
  434. package/dist/client/assets/packet-AYTQ26CC-CqpSjTWl.js +0 -1
  435. package/dist/client/assets/pie-WAS4IAKB-Bg2eCNl5.js +0 -1
  436. package/dist/client/assets/preload-helper-BAlEavIC.js +0 -1
  437. package/dist/client/assets/preview-render-compiler-ktU0SXxY.js +0 -43
  438. package/dist/client/assets/prod-DU-0VfI7.js +0 -145
  439. package/dist/client/assets/prod-cXUNdmYV.js +0 -1
  440. package/dist/client/assets/quick-switcher-controller-DSlOwOsU.js +0 -1
  441. package/dist/client/assets/radar-RG4KPBEZ-DxExotg6.js +0 -1
  442. package/dist/client/assets/railroad-74A4TZTK-FfHmeIQk.js +0 -1
  443. package/dist/client/assets/railroad-abnf-HS5TGJTU-CLkdDRsJ.js +0 -1
  444. package/dist/client/assets/railroad-ebnf-LZEXJU2U-B162zvcG.js +0 -1
  445. package/dist/client/assets/railroad-peg-WCYAUIDC-CGs5GeJ5.js +0 -1
  446. package/dist/client/assets/runtime-config-BFVdhnJu.js +0 -1
  447. package/dist/client/assets/runtime-paths-Cn0snt_9.js +0 -1
  448. package/dist/client/assets/sequenceDiagram-PO4LG4MO-B-2QfXhV.js +0 -169
  449. package/dist/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -1
  450. package/dist/client/assets/sizeCapture-INFHLROL-DrzwYt5z.js +0 -1
  451. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CLlwrdvU.js +0 -1
  452. package/dist/client/assets/swimlanesDiagram-TC7HE7FX-Bh4tmz27.js +0 -8
  453. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-xhehUG9e.js +0 -8
  454. package/dist/client/assets/treeView-Q6P3EWNA-Cccy0ngL.js +0 -1
  455. package/dist/client/assets/treemap-WGGIJYW6-sMRCjCtX.js +0 -1
  456. package/dist/client/assets/usecaseDiagram-POWQR4AR-DR2LHQYs.js +0 -328
  457. package/dist/client/assets/vault-api-client-BQxLVPeF.js +0 -7
  458. package/dist/client/assets/wardley-WFR3VGLG-Y7xty_3m.js +0 -1
  459. package/dist/client/assets/workspace-sync-client-C2pdaQUN.js +0 -1
  460. package/dist/client/assets/xychartDiagram-PMCCYNJV-fRpZ1MA5.js +0 -7
  461. package/dist/client/assets/yjs-B41tM6Sz.js +0 -4
  462. package/dist/client/assets/yjs-provider-reset-guard-DpntzUDR.js +0 -1
  463. package/scripts/local-plantuml-compose.mjs +0 -92
  464. package/scripts/local-structurizr-compose.mjs +0 -101
@@ -0,0 +1,239 @@
1
+ .canvas-editor {
2
+ display: flex;
3
+ flex-direction: column;
4
+ min-height: 0;
5
+ }
6
+
7
+ .canvas-editor [hidden] { display: none !important; }
8
+
9
+ .canvas-toolbar, .canvas-tool-group, .canvas-selection-toolbar {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: 2px;
13
+ padding: 4px;
14
+ border: 1px solid var(--color-border);
15
+ border-radius: var(--radius-md);
16
+ background: var(--color-surface);
17
+ box-shadow: var(--shadow-md);
18
+ }
19
+
20
+ .canvas-button {
21
+ display: inline-flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ gap: 6px;
25
+ min-height: 32px;
26
+ padding: 4px 8px;
27
+ border: 1px solid transparent;
28
+ border-radius: var(--radius-sm);
29
+ background: transparent;
30
+ color: var(--color-text-muted);
31
+ font: inherit;
32
+ cursor: pointer;
33
+ }
34
+
35
+ .canvas-button svg { width: 18px; height: 18px; flex-shrink: 0; }
36
+ .canvas-icon-button { width: 32px; padding: 6px; }
37
+ .canvas-button:hover:not(:disabled), .canvas-button[aria-expanded='true'] { background: var(--color-surface-offset-2); color: var(--color-text); }
38
+ .canvas-button:disabled { opacity: 0.45; cursor: default; }
39
+ .canvas-editor :focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; }
40
+ .canvas-toolbar { position: absolute; z-index: 2147483644; bottom: 18px; left: 50%; transform: translateX(-50%); padding: 6px; gap: 6px; }
41
+ .canvas-toolbar .canvas-button { width: 40px; height: 40px; }
42
+ .canvas-toolbar svg { width: 25px; height: 25px; }
43
+ .canvas-navigation { position: absolute; z-index: 2147483644; top: 12px; right: 12px; display: flex; flex-direction: column; gap: 8px; }
44
+ .canvas-tool-group { flex-direction: column; }
45
+ .canvas-zoom-label { width: 32px; padding-inline: 0; font-size: 10px; font-variant-numeric: tabular-nums; }
46
+ .canvas-status, .canvas-help { position: absolute; left: 16px; max-width: min(42ch, calc(100% - 90px)); color: var(--color-text-muted); font-size: 12px; background: var(--color-bg); border-radius: var(--radius-sm); pointer-events: none; }
47
+ .canvas-status { top: 14px; padding: 2px 5px; }
48
+ .canvas-status[data-state='live'] { color: var(--color-success); }
49
+ .canvas-status[data-state='live']::before { content: ''; display: inline-block; width: 5px; height: 5px; margin-right: 6px; border-radius: var(--radius-full); background: currentColor; vertical-align: middle; }
50
+ .canvas-banner { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); background: var(--color-warning-highlight); border-bottom: 1px solid var(--color-border); }
51
+ .canvas-banner[hidden] { display: none; }
52
+ .canvas-body { position: relative; display: flex; flex: 1; min-height: 0; overflow: hidden; }
53
+ .canvas-empty-state { position: absolute; top: 45%; left: 50%; transform: translate(-50%, -50%); display: flex; flex-direction: column; gap: 8px; width: min(320px, calc(100% - 100px)); color: var(--color-text-muted); text-align: center; pointer-events: none; }
54
+ .canvas-empty-state strong { font-size: 18px; font-weight: 500; color: var(--color-text); }
55
+
56
+ .canvas-stage {
57
+ --canvas-grid-dot: 0.8px;
58
+ position: relative;
59
+ isolation: isolate;
60
+ container: canvas-stage / size;
61
+ flex: 1;
62
+ min-width: 0;
63
+ overflow: hidden;
64
+ touch-action: none;
65
+ background-color: var(--color-bg);
66
+ background-image: radial-gradient(color-mix(in srgb, var(--color-border) 65%, transparent) var(--canvas-grid-dot), transparent var(--canvas-grid-dot));
67
+ background-size: 24px 24px;
68
+ cursor: default;
69
+ }
70
+
71
+ .canvas-stage.is-over-group { cursor: grab; }
72
+ .canvas-world { position: absolute; transform-origin: 0 0; width: 0; height: 0; }
73
+ /* Fixed embed overlays need the viewport as their containing block while maximized. */
74
+ .canvas-world:has(.drawio-embed.is-maximized, .excalidraw-embed.is-maximized) { transform: none !important; }
75
+ .canvas-card:has(.drawio-embed.is-maximized, .excalidraw-embed.is-maximized) { z-index: 2147483647 !important; }
76
+ .canvas-card {
77
+ --canvas-color: var(--color-border);
78
+ position: absolute;
79
+ display: flex;
80
+ flex-direction: column;
81
+ box-sizing: border-box;
82
+ min-width: 1px;
83
+ min-height: 1px;
84
+ border: 1px solid var(--canvas-color);
85
+ border-radius: var(--radius-sm);
86
+ background: color-mix(in srgb, var(--canvas-color) 4%, var(--color-surface));
87
+ cursor: grab;
88
+ }
89
+
90
+ .canvas-card.is-selected { border-color: var(--color-primary); outline: 1px solid var(--color-primary); outline-offset: 0; }
91
+ .canvas-card.is-remote-selected { box-shadow: 0 0 0 5px var(--surface-warning-soft); }
92
+ .canvas-card[data-type='group'] { background: color-mix(in srgb, var(--canvas-color) 8%, transparent); pointer-events: none; }
93
+ .canvas-card[data-type='group'] .canvas-card-header, .canvas-card[data-type='group'] .canvas-resize { pointer-events: auto; }
94
+ .canvas-card-header {
95
+ position: absolute;
96
+ bottom: calc(100% + 5px);
97
+ left: 0;
98
+ max-width: 100%;
99
+ display: flex;
100
+ align-items: center;
101
+ gap: 4px;
102
+ min-height: 20px;
103
+ color: var(--color-text-muted);
104
+ font-size: 12px;
105
+ cursor: grab;
106
+ user-select: none;
107
+ touch-action: none;
108
+ }
109
+
110
+ .canvas-card-title { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
111
+ .canvas-card[data-type='group'] .canvas-card-title { padding: 2px 6px; border-radius: var(--radius-sm); background: color-mix(in srgb, var(--canvas-color) 25%, var(--color-surface)); color: var(--color-text); font-size: 14px; font-weight: 500; }
112
+ .canvas-open-file { width: 22px; min-height: 22px; padding: 3px; flex-shrink: 0; opacity: 0; }
113
+ .canvas-open-file svg { width: 14px; height: 14px; }
114
+ .canvas-card:hover .canvas-open-file, .canvas-card.is-selected .canvas-open-file, .canvas-card:focus-within .canvas-open-file { opacity: 1; }
115
+ .canvas-card-content { flex: 1; min-height: 0; overflow: auto; padding: 16px; border-radius: inherit; overflow-wrap: anywhere; }
116
+ .canvas-card-content > :first-child { margin-top: 0; }
117
+ .canvas-card-content > :last-child { margin-bottom: 0; }
118
+ .canvas-card-content img { max-width: 100%; height: auto; }
119
+ .canvas-card-link { color: var(--color-primary); }
120
+ .canvas-card-content .canvas-markdown-preview { max-width: none; margin: 0; padding: 0; }
121
+ .canvas-card[data-type='group'] .canvas-card-content { background-position: center; background-repeat: no-repeat; background-size: cover; }
122
+ .canvas-card-content[data-background-style='ratio'] { background-size: contain !important; }
123
+ .canvas-card-content[data-background-style='repeat'] { background-repeat: repeat !important; background-size: auto !important; }
124
+ .canvas-file-image { display: block; margin-top: 10px; }
125
+ .canvas-file-markdown { margin-top: 0; }
126
+ .canvas-resize { position: absolute; right: 0; bottom: 0; width: 20px; height: 20px; min-height: 20px; padding: 2px; cursor: nwse-resize; opacity: 0; }
127
+ .canvas-resize svg { width: 14px; height: 14px; }
128
+ .canvas-card:hover .canvas-resize, .canvas-card:focus-within .canvas-resize, .canvas-card.is-selected .canvas-resize { opacity: 1; }
129
+ .canvas-edges { position: absolute; width: 1px; max-width: none; height: 1px; overflow: visible; pointer-events: none; z-index: 0; }
130
+ .canvas-edge { --canvas-color: var(--color-text-faint); cursor: pointer; }
131
+ .canvas-edge-line { stroke: var(--canvas-color); stroke-width: 2; fill: none; }
132
+ .canvas-edge-hit { stroke: transparent; stroke-width: 14; fill: none; pointer-events: stroke; }
133
+ .canvas-edge.is-selected .canvas-edge-line { stroke: var(--color-primary); stroke-width: 3; }
134
+ .canvas-edge text { fill: var(--color-text); font-size: 13px; paint-order: stroke; stroke: var(--color-bg); stroke-width: 5; stroke-linejoin: round; }
135
+ .canvas-inspector { width: 250px; flex-shrink: 0; box-sizing: border-box; padding: 14px; border-left: 1px solid var(--color-border); overflow: auto; overscroll-behavior: contain; background: var(--color-surface); }
136
+ .canvas-inspector-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
137
+ .canvas-inspector h2 { font-size: 14px; margin: 0; }
138
+ .canvas-inspector p { color: var(--color-text-muted); }
139
+ .canvas-field { display: flex; flex-direction: column; gap: 4px; margin: 12px 0; }
140
+ .canvas-field span { color: var(--color-text-muted); font-size: 12px; }
141
+ .canvas-field input, .canvas-field select { min-width: 0; width: 100%; box-sizing: border-box; min-height: 32px; padding: 5px 7px; border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-bg); color: var(--color-text); font: inherit; }
142
+ .canvas-order { display: flex; gap: 4px; flex-wrap: wrap; }
143
+ .canvas-help { top: 44px; padding: 4px 8px; }
144
+ .canvas-help:empty { display: none; }
145
+ .canvas-help-menu summary, .canvas-color-menu summary { list-style: none; }
146
+ .canvas-help-menu summary::-webkit-details-marker, .canvas-color-menu summary::-webkit-details-marker { display: none; }
147
+ .canvas-help-content { position: absolute; top: 0; right: calc(100% + 10px); width: min(320px, calc(100vw - 84px)); max-height: calc(100dvh - 40px); overflow: auto; padding: 16px; box-sizing: border-box; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface); box-shadow: var(--shadow-md); font-size: 12px; }
148
+ .canvas-help-content strong { display: block; margin-bottom: 12px; font-size: 14px; }
149
+ .canvas-help-content > div { display: flex; justify-content: space-between; gap: 16px; margin-top: 10px; }
150
+ .canvas-help-content > div span:last-child { color: var(--color-text-muted); text-align: right; }
151
+ .canvas-cursors { position: absolute; z-index: 2147483647; pointer-events: none; }
152
+ .canvas-cursor { --canvas-color: var(--color-primary); position: absolute; white-space: nowrap; padding: 3px 6px; border: 1px solid var(--canvas-color); border-radius: var(--radius-sm); background: var(--color-surface); color: var(--color-text); }
153
+ .canvas-text-editor { padding: 0; }
154
+ .canvas-text-editor .cm-editor { height: 100%; color: var(--color-text); background: var(--color-surface); }
155
+ .canvas-text-editor .cm-scroller { font: inherit; overflow: auto; }
156
+ .canvas-text-editor .cm-content { padding: 12px; caret-color: var(--color-text); }
157
+ .canvas-text-editor .cm-cursor { border-left-color: var(--color-text); }
158
+ .canvas-text-editor .cm-selectionBackground { background: var(--color-primary-highlight) !important; }
159
+
160
+ .canvas-selection-toolbar {
161
+ position: absolute;
162
+ z-index: 2147483646;
163
+ flex-wrap: wrap;
164
+ width: max-content;
165
+ max-width: calc(100% - 80px);
166
+ }
167
+
168
+ .canvas-selection-toolbar .canvas-button { white-space: nowrap; }
169
+ .canvas-connection-label { min-width: 80px; width: 160px; max-width: 100%; padding: 5px 7px; border: 1px solid var(--color-border); border-radius: var(--radius-sm); background: var(--color-bg); }
170
+ .canvas-color-menu { position: static; }
171
+ .canvas-colors { position: absolute; left: 0; top: calc(100% + 8px); display: flex; flex-wrap: wrap; gap: 6px; width: max-content; max-width: 100%; box-sizing: border-box; padding: 8px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface); box-shadow: var(--shadow-md); }
172
+ .canvas-colors .canvas-button { width: 24px; min-height: 24px; padding: 0; border: 1px solid var(--color-text-muted); border-radius: var(--radius-full); background: var(--canvas-color); }
173
+ .canvas-colors input { width: 28px; height: 24px; padding: 0; border: 0; background: transparent; }
174
+ .canvas-connection-handle {
175
+ position: absolute;
176
+ z-index: 1;
177
+ width: 22px;
178
+ height: 22px;
179
+ min-height: 22px;
180
+ padding: 0;
181
+ border: 6px solid transparent;
182
+ border-radius: var(--radius-full);
183
+ background: var(--color-primary);
184
+ background-clip: padding-box;
185
+ opacity: 0;
186
+ cursor: crosshair;
187
+ touch-action: none;
188
+ }
189
+
190
+ .canvas-card:hover .canvas-connection-handle, .canvas-card.is-selected .canvas-connection-handle, .canvas-card:focus-within .canvas-connection-handle { opacity: 1; }
191
+ .canvas-connection-handle[data-side='top'] { left: calc(50% - 11px); top: -12px; }
192
+ .canvas-connection-handle[data-side='bottom'] { left: calc(50% - 11px); bottom: -12px; }
193
+ .canvas-connection-handle[data-side='left'] { left: -12px; top: calc(50% - 11px); }
194
+ .canvas-connection-handle[data-side='right'] { right: -12px; top: calc(50% - 11px); }
195
+ .canvas-card[data-type='group'] .canvas-connection-handle { pointer-events: auto; }
196
+ .canvas-connection-preview { position: absolute; width: 1px; height: 1px; max-width: none; overflow: visible; pointer-events: none; z-index: 2147483645; --canvas-color: var(--color-primary); }
197
+ .canvas-marquee { position: absolute; z-index: 2147483645; border: 1px solid var(--color-primary); background: var(--color-primary-highlight); pointer-events: none; }
198
+ .canvas-picker {
199
+ width: min(520px, calc(100vw - 32px));
200
+ max-height: min(600px, calc(100dvh - 32px));
201
+ margin: auto;
202
+ padding: 16px;
203
+ border: 1px solid var(--color-border);
204
+ border-radius: var(--radius-lg);
205
+ background: var(--color-surface);
206
+ color: var(--color-text);
207
+ box-shadow: var(--shadow-card-strong);
208
+ }
209
+
210
+ .canvas-picker::backdrop { background: var(--surface-scrim); }
211
+ .canvas-picker header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
212
+ .canvas-picker h2 { font-size: 16px; }
213
+ .canvas-picker input { width: 100%; min-height: 40px; padding: 8px 10px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-bg); }
214
+ .canvas-picker-results { max-height: min(400px, calc(100dvh - 220px)); overflow-y: auto; margin-top: 8px; overscroll-behavior: contain; }
215
+ .canvas-picker-results button { display: flex; flex-direction: column; gap: 2px; width: 100%; padding: 9px 10px; border-radius: var(--radius-md); text-align: left; overflow-wrap: anywhere; }
216
+ .canvas-picker-results button:hover, .canvas-picker-results [aria-selected='true'] { background: var(--color-surface-offset); }
217
+ .canvas-picker-results small, .canvas-picker-status { color: var(--color-text-muted); font-size: 12px; }
218
+ .canvas-picker-status { margin-top: 10px; }
219
+
220
+ @media (max-width: 700px) {
221
+ .canvas-body { flex-direction: column; }
222
+ .canvas-inspector { width: 100%; height: 220px; max-height: 45%; border-left: 0; border-top: 1px solid var(--color-border); }
223
+ .canvas-toolbar { bottom: 12px; }
224
+ .canvas-selection-toolbar { gap: 2px; }
225
+ .canvas-selection-toolbar .canvas-button { font-size: 12px; }
226
+ .canvas-open-file { opacity: 1; }
227
+ }
228
+
229
+ @media (pointer: coarse) {
230
+ .canvas-navigation .canvas-icon-button, .canvas-navigation .canvas-zoom-label { width: 36px; min-height: 36px; }
231
+ .canvas-selection-toolbar .canvas-button { min-height: 36px; }
232
+ }
233
+
234
+ @container canvas-stage (max-height: 360px) {
235
+ .canvas-navigation { flex-direction: row; flex-wrap: wrap; justify-content: flex-end; max-width: calc(100% - 24px); gap: 4px; }
236
+ .canvas-navigation .canvas-tool-group { flex-direction: row; }
237
+ .canvas-help-content { top: calc(100% + 8px); right: 0; max-height: calc(100cqh - 80px); }
238
+ .canvas-status { top: auto; bottom: 12px; }
239
+ }
@@ -0,0 +1,359 @@
1
+ import * as Y from 'yjs';
2
+ import { generateNKeysBetween } from '@excalidraw/fractional-indexing';
3
+ import { simpleDiffString } from 'lib0/diff';
4
+
5
+ export const CANVAS_NODES_KEY = 'canvas-nodes';
6
+ export const CANVAS_EDGES_KEY = 'canvas-edges';
7
+ export const CANVAS_META_KEY = 'canvas-meta';
8
+ export const CANVAS_NODE_ORDER_KEY = 'canvas-node-order';
9
+ export const CANVAS_EDGE_ORDER_KEY = 'canvas-edge-order';
10
+
11
+ function invalid() {
12
+ const error = new Error('Invalid JSON Canvas 1.0 document');
13
+ error.code = 'CANVAS_INVALID';
14
+ return error;
15
+ }
16
+
17
+ function requireObject(value) {
18
+ if (!value || typeof value !== 'object' || Array.isArray(value)) throw invalid();
19
+ }
20
+
21
+ function requireString(value) {
22
+ if (typeof value !== 'string') throw invalid();
23
+ }
24
+
25
+ function optionalString(value, key, choices = null) {
26
+ if (!Object.hasOwn(value, key)) return;
27
+ requireString(value[key]);
28
+ if (choices && !choices.includes(value[key])) throw invalid();
29
+ }
30
+
31
+ function validateColor(value) {
32
+ if (Object.hasOwn(value, 'color') && !/^(?:[1-6]|#[\da-f]{6})$/i.test(value.color)) throw invalid();
33
+ optionalString(value, 'color');
34
+ }
35
+
36
+ function validateNode(node) {
37
+ requireObject(node);
38
+ requireString(node.id);
39
+ if (!['text', 'file', 'link', 'group'].includes(node.type)) throw invalid();
40
+ for (const key of ['x', 'y', 'width', 'height']) {
41
+ if (!Number.isInteger(node[key])) throw invalid();
42
+ }
43
+ validateColor(node);
44
+ if (node.type === 'text') requireString(node.text);
45
+ if (node.type === 'file') {
46
+ requireString(node.file);
47
+ optionalString(node, 'subpath');
48
+ if (Object.hasOwn(node, 'subpath') && !node.subpath.startsWith('#')) throw invalid();
49
+ }
50
+ if (node.type === 'link') requireString(node.url);
51
+ if (node.type === 'group') {
52
+ optionalString(node, 'label');
53
+ optionalString(node, 'background');
54
+ optionalString(node, 'backgroundStyle', ['cover', 'ratio', 'repeat']);
55
+ }
56
+ }
57
+
58
+ function validateEdge(edge) {
59
+ requireObject(edge);
60
+ for (const key of ['id', 'fromNode', 'toNode']) requireString(edge[key]);
61
+ for (const key of ['fromSide', 'toSide']) optionalString(edge, key, ['top', 'right', 'bottom', 'left']);
62
+ for (const key of ['fromEnd', 'toEnd']) optionalString(edge, key, ['none', 'arrow']);
63
+ optionalString(edge, 'label');
64
+ validateColor(edge);
65
+ }
66
+
67
+ export function validateCanvasDocument(value) {
68
+ requireObject(value);
69
+ for (const key of ['nodes', 'edges']) {
70
+ if (Object.hasOwn(value, key) && !Array.isArray(value[key])) throw invalid();
71
+ const ids = new Set();
72
+ for (const item of value[key] ?? []) {
73
+ (key === 'nodes' ? validateNode : validateEdge)(item);
74
+ if (ids.has(item.id)) throw invalid();
75
+ ids.add(item.id);
76
+ }
77
+ }
78
+ const nodeIds = new Set((value.nodes ?? []).map((node) => node.id));
79
+ if ((value.edges ?? []).some((edge) => !nodeIds.has(edge.fromNode) || !nodeIds.has(edge.toNode))) throw invalid();
80
+ return value;
81
+ }
82
+
83
+ export function parseCanvasJson(text) {
84
+ try {
85
+ if (typeof text !== 'string') throw invalid();
86
+ return validateCanvasDocument(JSON.parse(text, (_key, value) => {
87
+ if (typeof value === 'number' && !Number.isFinite(value)) throw invalid();
88
+ return value;
89
+ }));
90
+ } catch {
91
+ throw invalid();
92
+ }
93
+ }
94
+
95
+ function equal(left, right) {
96
+ return JSON.stringify(left) === JSON.stringify(right);
97
+ }
98
+
99
+ function readItem(item) {
100
+ if (!(item instanceof Y.Map)) throw invalid();
101
+ return Object.fromEntries(Array.from(item, ([key, value]) => [
102
+ key, value instanceof Y.Text ? value.toString() : structuredClone(value),
103
+ ]));
104
+ }
105
+
106
+ function updateText(text, value) {
107
+ const { index, remove, insert } = simpleDiffString(text.toString(), value);
108
+ if (remove) text.delete(index, remove);
109
+ if (insert) text.insert(index, insert);
110
+ }
111
+
112
+ function writeProperties(map, value, { textNode = false, replace = false } = {}) {
113
+ if (replace) {
114
+ for (const key of map.keys()) if (!Object.hasOwn(value, key)) map.delete(key);
115
+ }
116
+ for (const [key, next] of Object.entries(value)) {
117
+ const previous = map.get(key);
118
+ if (next === undefined) {
119
+ map.delete(key);
120
+ } else if (textNode && key === 'text') {
121
+ if (previous instanceof Y.Text) updateText(previous, next);
122
+ else map.set(key, new Y.Text(next));
123
+ } else if (!equal(previous, next)) {
124
+ map.set(key, structuredClone(next));
125
+ }
126
+ }
127
+ }
128
+
129
+ function sortedItems(doc, mapKey, orderKey) {
130
+ const order = doc.getMap(orderKey);
131
+ return Array.from(doc.getMap(mapKey), ([id, value]) => {
132
+ const item = readItem(value);
133
+ if (item.id !== id) throw invalid();
134
+ return item;
135
+ }).sort((left, right) => {
136
+ const leftOrder = String(order.get(left.id) ?? '');
137
+ const rightOrder = String(order.get(right.id) ?? '');
138
+ if (leftOrder !== rightOrder) return leftOrder < rightOrder ? -1 : 1;
139
+ return left.id < right.id ? -1 : left.id > right.id ? 1 : 0;
140
+ });
141
+ }
142
+
143
+ export function isCanvasRoomDocStructured(doc) {
144
+ return doc?.getMap(CANVAS_META_KEY).get('schemaVersion') === 1;
145
+ }
146
+
147
+ export function buildCanvasRoomDocument(doc) {
148
+ if (!isCanvasRoomDocStructured(doc)) throw invalid();
149
+ const meta = doc.getMap(CANVAS_META_KEY);
150
+ const properties = meta.get('properties');
151
+ const result = properties instanceof Y.Map ? readItem(properties) : {};
152
+ const nodes = sortedItems(doc, CANVAS_NODES_KEY, CANVAS_NODE_ORDER_KEY);
153
+ const nodeIds = new Set(nodes.map((node) => node.id));
154
+ const edges = sortedItems(doc, CANVAS_EDGES_KEY, CANVAS_EDGE_ORDER_KEY).filter((edge) => {
155
+ validateEdge(edge);
156
+ // A concurrent node deletion wins over an edge connected while offline.
157
+ return nodeIds.has(edge.fromNode) && nodeIds.has(edge.toNode);
158
+ });
159
+ if (meta.get('nodesPresent') || nodes.length) result.nodes = nodes;
160
+ if (meta.get('edgesPresent') || edges.length) result.edges = edges;
161
+ return validateCanvasDocument(result);
162
+ }
163
+
164
+ export function serializeCanvasRoomDocument(doc) {
165
+ return serializeCanvasDocument(buildCanvasRoomDocument(doc));
166
+ }
167
+
168
+ export function serializeCanvasDocument(document) {
169
+ validateCanvasDocument(document);
170
+ return JSON.stringify(document, (_key, value) => {
171
+ if (typeof value === 'number' && !Number.isFinite(value)) throw invalid();
172
+ return value && typeof value === 'object' && !Array.isArray(value)
173
+ ? Object.fromEntries(Object.keys(value).sort().map((key) => [key, value[key]]))
174
+ : value;
175
+ }, 2) + '\n';
176
+ }
177
+
178
+ export function replaceCanvasRoomDocument(doc, document) {
179
+ validateCanvasDocument(document);
180
+ const meta = doc.getMap(CANVAS_META_KEY);
181
+ if (meta.get('schemaVersion') !== 1) meta.set('schemaVersion', 1);
182
+ let properties = meta.get('properties');
183
+ if (!(properties instanceof Y.Map)) {
184
+ properties = new Y.Map();
185
+ meta.set('properties', properties);
186
+ }
187
+ writeProperties(properties, Object.fromEntries(Object.entries(document).filter(([key]) => !['nodes', 'edges'].includes(key))), { replace: true });
188
+ for (const [key, mapKey, orderKey] of [
189
+ ['nodes', CANVAS_NODES_KEY, CANVAS_NODE_ORDER_KEY],
190
+ ['edges', CANVAS_EDGES_KEY, CANVAS_EDGE_ORDER_KEY],
191
+ ]) {
192
+ const items = document[key] ?? [];
193
+ const map = doc.getMap(mapKey);
194
+ const order = doc.getMap(orderKey);
195
+ const ids = new Set(items.map((item) => item.id));
196
+ for (const id of map.keys()) if (!ids.has(id)) map.delete(id);
197
+ for (const id of order.keys()) if (!ids.has(id)) order.delete(id);
198
+ const indices = generateNKeysBetween(null, null, items.length);
199
+ items.forEach((item, index) => {
200
+ let entry = map.get(item.id);
201
+ if (!(entry instanceof Y.Map)) {
202
+ entry = new Y.Map();
203
+ map.set(item.id, entry);
204
+ }
205
+ writeProperties(entry, item, { replace: true, textNode: key === 'nodes' && item.type === 'text' });
206
+ if (order.get(item.id) !== indices[index]) order.set(item.id, indices[index]);
207
+ });
208
+ const present = Object.hasOwn(document, key);
209
+ if (meta.get(`${key}Present`) !== present) meta.set(`${key}Present`, present);
210
+ }
211
+ return document;
212
+ }
213
+
214
+ function addItem(doc, item, mapKey, orderKey) {
215
+ const map = doc.getMap(mapKey);
216
+ if (map.has(item.id)) throw invalid();
217
+ const order = doc.getMap(orderKey);
218
+ const entries = sortedItems(doc, mapKey, orderKey);
219
+ const lastKey = entries.length ? order.get(entries.at(-1).id) : null;
220
+ const nextKey = generateNKeysBetween(lastKey ?? null, null, 1)[0];
221
+ const value = new Y.Map();
222
+ map.set(item.id, value);
223
+ writeProperties(value, item, { textNode: mapKey === CANVAS_NODES_KEY && item.type === 'text' });
224
+ order.set(item.id, nextKey);
225
+ return true;
226
+ }
227
+
228
+ export function addCanvasNode(doc, node) {
229
+ validateNode(node);
230
+ return addItem(doc, node, CANVAS_NODES_KEY, CANVAS_NODE_ORDER_KEY);
231
+ }
232
+
233
+ export function addCanvasEdge(doc, edge) {
234
+ validateEdge(edge);
235
+ const nodes = doc.getMap(CANVAS_NODES_KEY);
236
+ if (!nodes.has(edge.fromNode) || !nodes.has(edge.toNode)) throw invalid();
237
+ return addItem(doc, edge, CANVAS_EDGES_KEY, CANVAS_EDGE_ORDER_KEY);
238
+ }
239
+
240
+ function updateItem(doc, id, patch, key, validate) {
241
+ const entry = doc.getMap(key).get(id);
242
+ if (!(entry instanceof Y.Map)) return false;
243
+ requireObject(patch);
244
+ const previous = readItem(entry);
245
+ const next = Object.fromEntries(Object.entries({ ...previous, ...patch }).filter(([, value]) => value !== undefined));
246
+ if (next.id !== id) throw invalid();
247
+ validate(next);
248
+ if (equal(previous, next)) return false;
249
+ writeProperties(entry, patch, { textNode: key === CANVAS_NODES_KEY && next.type === 'text' });
250
+ return true;
251
+ }
252
+
253
+ export function updateCanvasNode(doc, id, patch) {
254
+ return updateItem(doc, id, patch, CANVAS_NODES_KEY, validateNode);
255
+ }
256
+
257
+ export function updateCanvasEdge(doc, id, patch) {
258
+ return updateItem(doc, id, patch, CANVAS_EDGES_KEY, (edge) => {
259
+ validateEdge(edge);
260
+ const nodes = doc.getMap(CANVAS_NODES_KEY);
261
+ if (!nodes.has(edge.fromNode) || !nodes.has(edge.toNode)) throw invalid();
262
+ });
263
+ }
264
+
265
+ export function deleteCanvasEdges(doc, ids) {
266
+ let changed = false;
267
+ for (const id of ids) {
268
+ if (!doc.getMap(CANVAS_EDGES_KEY).has(id)) continue;
269
+ doc.getMap(CANVAS_EDGES_KEY).delete(id);
270
+ doc.getMap(CANVAS_EDGE_ORDER_KEY).delete(id);
271
+ changed = true;
272
+ }
273
+ return changed;
274
+ }
275
+
276
+ export function deleteCanvasNodes(doc, ids) {
277
+ let changed = false;
278
+ const removed = new Set(ids);
279
+ for (const id of removed) {
280
+ if (!doc.getMap(CANVAS_NODES_KEY).has(id)) continue;
281
+ doc.getMap(CANVAS_NODES_KEY).delete(id);
282
+ doc.getMap(CANVAS_NODE_ORDER_KEY).delete(id);
283
+ changed = true;
284
+ }
285
+ const edgeIds = Array.from(doc.getMap(CANVAS_EDGES_KEY), ([id, edge]) => (
286
+ removed.has(edge.get('fromNode')) || removed.has(edge.get('toNode')) ? id : null
287
+ )).filter((id) => id !== null);
288
+ return deleteCanvasEdges(doc, edgeIds) || changed;
289
+ }
290
+
291
+ export function reorderCanvasNode(doc, id, direction) {
292
+ if (!['front', 'back'].includes(direction)) throw invalid();
293
+ const nodes = sortedItems(doc, CANVAS_NODES_KEY, CANVAS_NODE_ORDER_KEY);
294
+ if (!nodes.some((node) => node.id === id) || nodes.length < 2) return false;
295
+ const last = direction === 'front' ? nodes.at(-1) : nodes[0];
296
+ if (last.id === id) return false;
297
+ const order = doc.getMap(CANVAS_NODE_ORDER_KEY);
298
+ const bound = order.get(last.id);
299
+ const nextKey = direction === 'front'
300
+ ? generateNKeysBetween(bound, null, 1)[0]
301
+ : generateNKeysBetween(null, bound, 1)[0];
302
+ order.set(id, nextKey);
303
+ return true;
304
+ }
305
+
306
+ export function resolveCanvasExternalConflict(doc, choice) {
307
+ const meta = doc.getMap(CANVAS_META_KEY);
308
+ const conflict = meta.get('externalConflict');
309
+ if (!conflict) return false;
310
+ if (!['local', 'external'].includes(choice)) throw invalid();
311
+ if (choice === 'external') replaceCanvasRoomDocument(doc, parseCanvasJson(conflict.content));
312
+ meta.delete('externalConflict');
313
+ return true;
314
+ }
315
+
316
+ // Merge independent fields; overlapping changes stay preserved for explicit resolution.
317
+ export function mergeCanvasDocuments(baseline, local, external) {
318
+ let conflict = false;
319
+ function mergeValue(before, current, next) {
320
+ if (equal(current, before)) return next;
321
+ if (equal(next, before) || equal(current, next)) return current;
322
+ if (before && current && next && ![before, current, next].some((value) => typeof value !== 'object' || Array.isArray(value))) {
323
+ return Object.fromEntries(Array.from(new Set([...Object.keys(before), ...Object.keys(current), ...Object.keys(next)]), (key) => [
324
+ key, mergeValue(before[key], current[key], next[key]),
325
+ ]).filter(([, value]) => value !== undefined));
326
+ }
327
+ conflict = true;
328
+ return current;
329
+ }
330
+ const result = mergeValue(
331
+ Object.fromEntries(Object.entries(baseline).filter(([key]) => !['nodes', 'edges'].includes(key))),
332
+ Object.fromEntries(Object.entries(local).filter(([key]) => !['nodes', 'edges'].includes(key))),
333
+ Object.fromEntries(Object.entries(external).filter(([key]) => !['nodes', 'edges'].includes(key))),
334
+ );
335
+ for (const key of ['nodes', 'edges']) {
336
+ const before = baseline[key] ?? [];
337
+ const current = local[key] ?? [];
338
+ const next = external[key] ?? [];
339
+ const currentById = new Map(current.map((item) => [item.id, item]));
340
+ const nextById = new Map(next.map((item) => [item.id, item]));
341
+ const beforeById = new Map(before.map((item) => [item.id, item]));
342
+ const beforeIds = before.map((item) => item.id);
343
+ const currentIds = current.map((item) => item.id);
344
+ const nextIds = next.map((item) => item.id);
345
+ const localReordered = !equal(currentIds.filter((id) => beforeById.has(id)), beforeIds.filter((id) => currentById.has(id)));
346
+ const externalReordered = !equal(nextIds.filter((id) => beforeById.has(id)), beforeIds.filter((id) => nextById.has(id)));
347
+ if (localReordered && externalReordered && !equal(currentIds, nextIds)) conflict = true;
348
+ const ids = Array.from(new Set(localReordered ? [...currentIds, ...nextIds] : [...nextIds, ...currentIds]));
349
+ const merged = ids.map((id) => mergeValue(beforeById.get(id), currentById.get(id), nextById.get(id))).filter((item) => item !== undefined);
350
+ const present = mergeValue(Object.hasOwn(baseline, key), Object.hasOwn(local, key), Object.hasOwn(external, key));
351
+ if (present || merged.length) result[key] = merged;
352
+ }
353
+ try {
354
+ validateCanvasDocument(result);
355
+ } catch {
356
+ conflict = true;
357
+ }
358
+ return { conflict, document: conflict ? local : result };
359
+ }
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  BASE_FILE_EXTENSION,
3
+ CANVAS_FILE_EXTENSION,
3
4
  DRAWIO_FILE_EXTENSION,
4
5
  EXCALIDRAW_FILE_EXTENSION,
5
6
  HTML_FILE_EXTENSIONS,
@@ -64,6 +65,14 @@ const EXCALIDRAW_CREATION_EXAMPLES = [
64
65
  ].map((example) => JSON.stringify(example));
65
66
 
66
67
  const CAPABILITIES = Object.freeze({
68
+ canvas: {
69
+ agentCreatable: false,
70
+ agentEditable: false,
71
+ editable: true,
72
+ extensions: [CANVAS_FILE_EXTENSION],
73
+ guide: 'Standard JSON Canvas 1.0 document edited collaboratively in CollabMD. Collaboration metadata is stored separately. Agent writes are disabled.',
74
+ examples: ['{"nodes": [], "edges": []}'],
75
+ },
67
76
  base: {
68
77
  agentCreatable: true,
69
78
  agentEditable: true,
@@ -167,7 +176,7 @@ export function getCollabMdContentCapability(kindOrPath) {
167
176
  commentsSupported: commentPath ? supportsCommentsForFilePath(commentPath) : false,
168
177
  kind,
169
178
  readable: capability.editable,
170
- searchable: kind !== 'image' && kind !== 'pdf',
179
+ searchable: kind !== 'image' && kind !== 'pdf' && kind !== 'canvas',
171
180
  };
172
181
  }
173
182