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
@@ -41,160 +41,71 @@ export function createGitApiCommandHandler({
41
41
  gitService,
42
42
  workspaceMutationCoordinator = null,
43
43
  }) {
44
- return async function handleGitApiCommand(req, res, requestUrl) {
45
- if (requestUrl.pathname === '/api/git/stage' && req.method === 'POST') {
46
- try {
47
- const body = await parseRequiredBody(req, res, 'path');
48
- if (!body) {
49
- return true;
50
- }
51
-
52
- jsonResponse(req, res, 200, await applyWorkspaceMutationEffects({
53
- action: 'stage',
54
- req,
55
- responsePayload: await workspaceMutationCoordinator.runManagedWorkspaceMutation(
56
- () => gitService.stageFile(body.path),
57
- ),
58
- workspaceMutationCoordinator,
59
- }));
60
- } catch (error) {
61
- handleApiError(req, res, error, '[api] Failed to stage git file:', 'Failed to stage git file');
62
- }
63
- return true;
64
- }
65
-
66
- if (requestUrl.pathname === '/api/git/unstage' && req.method === 'POST') {
67
- try {
68
- const body = await parseRequiredBody(req, res, 'path');
69
- if (!body) {
70
- return true;
71
- }
72
-
73
- jsonResponse(req, res, 200, await applyWorkspaceMutationEffects({
74
- action: 'unstage',
75
- req,
76
- responsePayload: await workspaceMutationCoordinator.runManagedWorkspaceMutation(
77
- () => gitService.unstageFile(body.path),
78
- ),
79
- workspaceMutationCoordinator,
80
- }));
81
- } catch (error) {
82
- handleApiError(req, res, error, '[api] Failed to unstage git file:', 'Failed to unstage git file');
83
- }
84
- return true;
85
- }
86
-
87
- if (requestUrl.pathname === '/api/git/stage-all' && req.method === 'POST') {
88
- try {
89
- jsonResponse(req, res, 200, await applyWorkspaceMutationEffects({
90
- action: 'stage-all',
91
- req,
92
- responsePayload: await workspaceMutationCoordinator.runManagedWorkspaceMutation(
93
- () => gitService.stageAll(),
94
- ),
95
- workspaceMutationCoordinator,
96
- }));
97
- } catch (error) {
98
- handleApiError(req, res, error, '[api] Failed to stage all git changes:', 'Failed to stage all git changes');
99
- }
100
- return true;
101
- }
102
-
103
- if (requestUrl.pathname === '/api/git/unstage-all' && req.method === 'POST') {
104
- try {
105
- jsonResponse(req, res, 200, await applyWorkspaceMutationEffects({
106
- action: 'unstage-all',
107
- req,
108
- responsePayload: await workspaceMutationCoordinator.runManagedWorkspaceMutation(
109
- () => gitService.unstageAll(),
110
- ),
111
- workspaceMutationCoordinator,
112
- }));
113
- } catch (error) {
114
- handleApiError(req, res, error, '[api] Failed to unstage all git changes:', 'Failed to unstage all git changes');
115
- }
116
- return true;
117
- }
118
-
119
- if (requestUrl.pathname === '/api/git/commit' && req.method === 'POST') {
120
- try {
121
- const body = await parseRequiredBody(req, res, 'message');
122
- if (!body) {
123
- return true;
124
- }
125
-
126
- jsonResponse(req, res, 200, await applyWorkspaceMutationEffects({
127
- action: 'commit',
128
- req,
129
- responsePayload: await workspaceMutationCoordinator.runManagedWorkspaceMutation(
130
- () => gitService.commitStaged({
131
- author: authService?.getAuthenticatedUser?.(req) ?? null,
132
- message: body.message,
133
- }),
134
- ),
135
- workspaceMutationCoordinator,
136
- }));
137
- } catch (error) {
138
- handleApiError(req, res, error, '[api] Failed to commit staged changes:', 'Failed to commit staged changes');
139
- }
140
- return true;
141
- }
44
+ const routes = [
45
+ {
46
+ action: 'stage', bodyField: 'path', errorMessage: 'Failed to stage git file',
47
+ run: (body) => gitService.stageFile(body.path),
48
+ },
49
+ {
50
+ action: 'unstage', bodyField: 'path', errorMessage: 'Failed to unstage git file',
51
+ run: (body) => gitService.unstageFile(body.path),
52
+ },
53
+ {
54
+ action: 'stage-all', errorMessage: 'Failed to stage all git changes',
55
+ run: () => gitService.stageAll(),
56
+ },
57
+ {
58
+ action: 'unstage-all', errorMessage: 'Failed to unstage all git changes',
59
+ run: () => gitService.unstageAll(),
60
+ },
61
+ {
62
+ action: 'commit', bodyField: 'message', errorMessage: 'Failed to commit staged changes',
63
+ run: (body, req) => gitService.commitStaged({
64
+ author: authService?.getAuthenticatedUser?.(req) ?? null,
65
+ message: body.message,
66
+ }),
67
+ },
68
+ {
69
+ action: 'push', errorMessage: 'Failed to push git branch',
70
+ run: () => gitService.pushBranch(),
71
+ },
72
+ {
73
+ action: 'pull', errorMessage: 'Failed to pull git branch',
74
+ run: (_body, req) => gitService.pullBranch({
75
+ author: authService?.getAuthenticatedUser?.(req) ?? null,
76
+ }),
77
+ },
78
+ {
79
+ action: 'reset-file', bodyField: 'path', errorMessage: 'Failed to reset git file',
80
+ run: (body) => gitService.resetFileToHead(body.path),
81
+ },
82
+ ];
142
83
 
143
- if (requestUrl.pathname === '/api/git/push' && req.method === 'POST') {
144
- try {
145
- jsonResponse(req, res, 200, await applyWorkspaceMutationEffects({
146
- action: 'push',
147
- req,
148
- responsePayload: await workspaceMutationCoordinator.runManagedWorkspaceMutation(
149
- () => gitService.pushBranch(),
150
- ),
151
- workspaceMutationCoordinator,
152
- }));
153
- } catch (error) {
154
- handleApiError(req, res, error, '[api] Failed to push git branch:', 'Failed to push git branch');
155
- }
156
- return true;
84
+ return async function handleGitApiCommand(req, res, requestUrl) {
85
+ const route = req.method === 'POST'
86
+ ? routes.find(({ action }) => requestUrl.pathname === `/api/git/${action}`)
87
+ : null;
88
+ if (!route) {
89
+ return false;
157
90
  }
158
91
 
159
- if (requestUrl.pathname === '/api/git/pull' && req.method === 'POST') {
160
- try {
161
- jsonResponse(req, res, 200, await applyWorkspaceMutationEffects({
162
- action: 'pull',
163
- req,
164
- responsePayload: await workspaceMutationCoordinator.runManagedWorkspaceMutation(
165
- () => gitService.pullBranch({
166
- author: authService?.getAuthenticatedUser?.(req) ?? null,
167
- }),
168
- ),
169
- workspaceMutationCoordinator,
170
- }));
171
- } catch (error) {
172
- handleApiError(req, res, error, '[api] Failed to pull git branch:', 'Failed to pull git branch');
92
+ try {
93
+ const body = route.bodyField ? await parseRequiredBody(req, res, route.bodyField) : {};
94
+ if (!body) {
95
+ return true;
173
96
  }
174
- return true;
175
- }
176
97
 
177
- if (requestUrl.pathname === '/api/git/reset-file' && req.method === 'POST') {
178
- try {
179
- const body = await parseRequiredBody(req, res, 'path');
180
- if (!body) {
181
- return true;
182
- }
183
-
184
- jsonResponse(req, res, 200, await applyWorkspaceMutationEffects({
185
- action: 'reset-file',
186
- req,
187
- responsePayload: await workspaceMutationCoordinator.runManagedWorkspaceMutation(
188
- () => gitService.resetFileToHead(body.path),
189
- ),
190
- workspaceMutationCoordinator,
191
- }));
192
- } catch (error) {
193
- handleApiError(req, res, error, '[api] Failed to reset git file:', 'Failed to reset git file');
194
- }
195
- return true;
98
+ jsonResponse(req, res, 200, await applyWorkspaceMutationEffects({
99
+ action: route.action,
100
+ req,
101
+ responsePayload: await workspaceMutationCoordinator.runManagedWorkspaceMutation(
102
+ () => route.run(body, req),
103
+ ),
104
+ workspaceMutationCoordinator,
105
+ }));
106
+ } catch (error) {
107
+ handleApiError(req, res, error, `[api] ${route.errorMessage}:`, route.errorMessage);
196
108
  }
197
-
198
- return false;
109
+ return true;
199
110
  };
200
111
  }
@@ -107,8 +107,11 @@ export function createHostedApiHandler({
107
107
  membership: await hostedWorkspaceService.acceptInvitation(user),
108
108
  });
109
109
  }],
110
- ['GET /api/hosted/audit', async ({ req, res, user }) => {
111
- jsonResponse(req, res, 200, { events: await hostedWorkspaceService.listAuditEvents(user) });
110
+ ['GET /api/hosted/audit', async ({ req, requestUrl, res, user }) => {
111
+ jsonResponse(req, res, 200, await hostedWorkspaceService.listAuditEvents(user, {
112
+ cursor: requestUrl.searchParams.get('cursor') || '',
113
+ limit: requestUrl.searchParams.get('limit') || 50,
114
+ }));
112
115
  }],
113
116
  ]);
114
117
 
@@ -59,6 +59,7 @@ function buildRuntimeConfig({
59
59
  wikiLinkAutoCreate,
60
60
  wsBasePath,
61
61
  vaults,
62
+ vaultDashboard,
62
63
  }) {
63
64
  return `window.__COLLABMD_CONFIG__ = ${JSON.stringify({
64
65
  activeVault: vaults?.[0]?.id ?? '',
@@ -81,7 +82,8 @@ function buildRuntimeConfig({
81
82
  structurizrEnabled: Boolean(structurizr?.enabled ?? structurizr?.serverUrl),
82
83
  wikiLinkAutoCreate,
83
84
  wsBasePath,
84
- vaults: (vaults ?? []).map(({ id }) => ({ id })),
85
+ vaults: (vaults ?? []).map(({ id, name }) => ({ id, name: name || id })),
86
+ vaultDashboard: Boolean(vaultDashboard && !hosted?.enabled),
85
87
  })};\n`;
86
88
  }
87
89
 
@@ -225,9 +225,9 @@ async function handleBaseExport(req, res, _requestUrl, { baseQueryService }) {
225
225
  }
226
226
  }
227
227
 
228
- async function handleFileTree(req, res, _requestUrl, { vaultFileStore, workspaceMutationCoordinator }) {
228
+ async function handleFileTree(req, res, _requestUrl, { workspaceMutationCoordinator }) {
229
229
  try {
230
- const tree = workspaceMutationCoordinator?.getWorkspaceTree?.() ?? await vaultFileStore.tree();
230
+ const tree = workspaceMutationCoordinator.getWorkspaceTree();
231
231
  jsonResponse(req, res, 200, { tree });
232
232
  } catch (error) {
233
233
  console.error('[api] Failed to read file tree:', error.message);
@@ -454,7 +454,7 @@ async function handleSearch(req, res, requestUrl, { searchService }) {
454
454
 
455
455
  async function handleVaultList(req, res, _requestUrl, { config }) {
456
456
  // ponytail: ids only — absolute vault dirs are operator internals
457
- const vaults = (config?.vaults ?? []).map(({ id }) => ({ id }));
457
+ const vaults = (config?.vaults ?? []).map(({ id, name }) => ({ id, name: name || id }));
458
458
  jsonResponse(req, res, 200, { activeVault: vaults[0]?.id ?? null, vaults });
459
459
  }
460
460
 
@@ -3,6 +3,7 @@ import {
3
3
  constants as zlibConstants,
4
4
  gzip,
5
5
  } from 'node:zlib';
6
+ import { pipeline } from 'node:stream/promises';
6
7
 
7
8
  const COMPRESSIBLE_CONTENT_TYPE_PATTERN = /^(?:text\/|application\/(?:javascript|json|xml)|image\/svg\+xml)/i;
8
9
  const MIN_COMPRESSIBLE_BYTES = 1024;
@@ -212,42 +213,7 @@ export function sendStreamResponse(req, res, {
212
213
  return Promise.resolve();
213
214
  }
214
215
 
215
- return new Promise((resolve, reject) => {
216
- let settled = false;
217
-
218
- const finish = (error = null) => {
219
- if (settled) {
220
- return;
221
- }
222
-
223
- settled = true;
224
- res.off('finish', handleFinish);
225
- res.off('error', handleError);
226
- res.off('close', handleClose);
227
- stream.off('error', handleError);
228
-
229
- if (error) {
230
- reject(error);
231
- return;
232
- }
233
-
234
- resolve();
235
- };
236
-
237
- const handleFinish = () => finish();
238
- const handleError = (error) => finish(error);
239
- const handleClose = () => {
240
- if (!res.writableEnded) {
241
- finish(new Error('Response stream closed before completion'));
242
- }
243
- };
244
-
245
- res.on('finish', handleFinish);
246
- res.on('error', handleError);
247
- res.on('close', handleClose);
248
- stream.on('error', handleError);
249
- stream.pipe(res);
250
- });
216
+ return pipeline(stream, res);
251
217
  }
252
218
 
253
219
  export function jsonResponse(req, res, statusCode, data) {
@@ -3,56 +3,21 @@ import { createRequestError } from './http-errors.js';
3
3
  export const REQUEST_BODY_LIMIT_BYTES = 8_388_608;
4
4
 
5
5
  async function readRequestBuffer(req, maxBytes = REQUEST_BODY_LIMIT_BYTES) {
6
- return new Promise((resolve, reject) => {
7
- const chunks = [];
8
- let size = 0;
9
- let done = false;
10
- let limitError = null;
11
-
12
- const finish = (callback, value) => {
13
- if (done) {
14
- return;
15
- }
16
-
17
- done = true;
18
- req.off('data', onData);
19
- req.off('end', onEnd);
20
- req.off('error', onError);
21
- callback(value);
22
- };
23
-
24
- const onData = (chunk) => {
25
- if (limitError) {
26
- return;
27
- }
28
-
29
- size += chunk.length;
30
- if (size > maxBytes) {
31
- chunks.length = 0;
32
- limitError = createRequestError(413, 'Request body too large');
33
- return;
34
- }
35
-
6
+ const chunks = [];
7
+ let size = 0;
8
+ let tooLarge = false;
9
+ for await (const chunk of req) {
10
+ if (tooLarge) continue;
11
+ size += chunk.length;
12
+ if (size > maxBytes) {
13
+ chunks.length = 0;
14
+ tooLarge = true;
15
+ } else {
36
16
  chunks.push(chunk);
37
- };
38
-
39
- const onEnd = () => {
40
- if (limitError) {
41
- finish(reject, limitError);
42
- return;
43
- }
44
-
45
- finish(resolve, Buffer.concat(chunks));
46
- };
47
-
48
- const onError = (error) => {
49
- finish(reject, error);
50
- };
51
-
52
- req.on('data', onData);
53
- req.on('end', onEnd);
54
- req.on('error', onError);
55
- });
17
+ }
18
+ }
19
+ if (tooLarge) throw createRequestError(413, 'Request body too large');
20
+ return Buffer.concat(chunks);
56
21
  }
57
22
 
58
23
  export async function readRequestBody(req, maxBytes = REQUEST_BODY_LIMIT_BYTES) {
@@ -174,6 +174,8 @@ export class HostedMetadataStore {
174
174
  metadata_json TEXT NOT NULL,
175
175
  created_at INTEGER NOT NULL
176
176
  );
177
+ CREATE INDEX IF NOT EXISTS audit_events_created_id_idx
178
+ ON audit_events(created_at DESC, id DESC);
177
179
 
178
180
  CREATE TABLE IF NOT EXISTS operational_security_events (
179
181
  id TEXT PRIMARY KEY,
@@ -514,11 +516,18 @@ export class HostedMetadataStore {
514
516
  );
515
517
  }
516
518
 
517
- async listAuditEvents() {
519
+ async listAuditEvents({ before = null, limit = 51 } = {}) {
520
+ if (before) {
521
+ return this.prepare(
522
+ 'listAuditEventsBefore',
523
+ `SELECT * FROM audit_events WHERE (created_at, id) < (?, ?)
524
+ ORDER BY created_at DESC, id DESC LIMIT ?`,
525
+ ).all(before.createdAt, before.id, limit).map(rowToAuditEvent);
526
+ }
518
527
  return this.prepare(
519
528
  'listAuditEvents',
520
- 'SELECT * FROM audit_events ORDER BY created_at DESC',
521
- ).all().map(rowToAuditEvent);
529
+ 'SELECT * FROM audit_events ORDER BY created_at DESC, id DESC LIMIT ?',
530
+ ).all(limit).map(rowToAuditEvent);
522
531
  }
523
532
 
524
533
  async createOperationalSecurityEvent(event) {
@@ -1,10 +1,10 @@
1
1
  import { lstatSync } from 'node:fs';
2
2
  import { isAbsolute, join, normalize, relative, resolve } from 'path';
3
3
 
4
- import { isVaultFilePath } from '../../../domain/file-kind.js';
4
+ import { getVaultFileKind, isVaultFilePath } from '../../../domain/file-kind.js';
5
5
 
6
6
  export const IGNORED_DIRECTORIES = new Set(['.git', '.obsidian', '.trash', 'node_modules', '.DS_Store']);
7
- export const VAULT_FILE_PATH_REQUIREMENT = '.md, .markdown, .mdx, .html, .htm, .base, .excalidraw, .drawio, .mmd, .mermaid, .puml, .plantuml, .dsl, .pdf, .png, .jpg, .jpeg, .webp, .gif, or .svg';
7
+ export const VAULT_FILE_PATH_REQUIREMENT = '.md, .markdown, .mdx, .html, .htm, .base, .canvas, .excalidraw, .drawio, .mmd, .mermaid, .puml, .plantuml, .dsl, .pdf, .png, .jpg, .jpeg, .webp, .gif, or .svg';
8
8
  export const INVALID_VAULT_FILE_PATH_ERROR = `Invalid file path — must end in ${VAULT_FILE_PATH_REQUIREMENT}`;
9
9
  export const INVALID_DIRECTORY_PATH_ERROR = 'Invalid directory path';
10
10
 
@@ -119,6 +119,12 @@ export function resolveVaultRenamePaths(vaultDir, oldPath, newPath) {
119
119
  };
120
120
  }
121
121
 
122
+ const oldKind = getVaultFileKind(absoluteOld);
123
+ const newKind = getVaultFileKind(absoluteNew);
124
+ if (oldKind !== newKind && [oldKind, newKind].includes('canvas')) {
125
+ return { absoluteNew: null, absoluteOld: null, error: 'Canvas files must keep the .canvas extension' };
126
+ }
127
+
122
128
  return { absoluteNew, absoluteOld, error: null };
123
129
  }
124
130
 
@@ -6,12 +6,12 @@ import sharp from 'sharp';
6
6
 
7
7
  import {
8
8
  getVaultFileKind,
9
- getVaultTreeNodeType,
10
9
  isImageAttachmentFilePath,
11
10
  isMarkdownFilePath,
12
11
  isVaultFilePath,
13
12
  supportsCommentsForFilePath,
14
13
  } from '../../../domain/file-kind.js';
14
+ import { parseCanvasJson } from '../../../domain/canvas-room-codec.js';
15
15
  import { createCommentOverview } from '../../domain/comment-overview.js';
16
16
  import { scanWorkspaceState as scanWorkspaceStateFromAdapter } from '../../domain/workspace-state.js';
17
17
  import {
@@ -27,6 +27,7 @@ import {
27
27
 
28
28
  const EDITABLE_VAULT_CONTENT_PATH_ERRORS = {
29
29
  base: 'Invalid file path — must end in .base',
30
+ canvas: 'Invalid file path — must end in .canvas',
30
31
  drawio: 'Invalid file path — must end in .drawio',
31
32
  excalidraw: 'Invalid file path — must end in .excalidraw',
32
33
  html: 'Invalid file path — must end in .html or .htm',
@@ -36,6 +37,19 @@ const EDITABLE_VAULT_CONTENT_PATH_ERRORS = {
36
37
  structurizr: 'Invalid file path — must end in .dsl',
37
38
  };
38
39
 
40
+ function getContentValidationError(filePath, content) {
41
+ if (getVaultFileKind(filePath) !== 'canvas') return null;
42
+ try {
43
+ const text = content instanceof Uint8Array
44
+ ? new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(content)
45
+ : content;
46
+ parseCanvasJson(text);
47
+ return null;
48
+ } catch {
49
+ return 'Invalid JSON Canvas 1.0 document';
50
+ }
51
+ }
52
+
39
53
  function getEditableVaultContentKind(filePath) {
40
54
  const kind = getVaultFileKind(filePath);
41
55
  return EDITABLE_VAULT_CONTENT_PATH_ERRORS[kind]
@@ -44,15 +58,7 @@ function getEditableVaultContentKind(filePath) {
44
58
  }
45
59
  import { SidecarStore } from './sidecar-store.js';
46
60
  import { createWorkspaceStateFileSystemAdapter } from '../workspace/workspace-state-file-system-adapter.js';
47
-
48
- const IMAGE_EXTENSION_TO_MIME_TYPE = Object.freeze({
49
- '.gif': 'image/gif',
50
- '.jpeg': 'image/jpeg',
51
- '.jpg': 'image/jpeg',
52
- '.png': 'image/png',
53
- '.svg': 'image/svg+xml',
54
- '.webp': 'image/webp',
55
- });
61
+ import { IMAGE_EXTENSION_TO_MIME_TYPE } from '../../shared/image-mime.js';
56
62
 
57
63
  const MIME_TYPE_TO_IMAGE_EXTENSION = Object.freeze({
58
64
  'image/gif': '.gif',
@@ -66,6 +72,7 @@ const RASTER_IMAGE_MIME_TYPES_TO_CONVERT = new Set(['image/jpeg', 'image/png']);
66
72
  const RASTER_IMAGE_EXTENSIONS_TO_CONVERT = new Set(['.jpeg', '.jpg', '.png']);
67
73
  const TEXT_FILE_MIME_TYPES = Object.freeze({
68
74
  base: 'text/yaml; charset=utf-8',
75
+ canvas: 'application/json; charset=utf-8',
69
76
  drawio: 'application/xml; charset=utf-8',
70
77
  excalidraw: 'application/json; charset=utf-8',
71
78
  html: 'text/html; charset=utf-8',
@@ -325,56 +332,6 @@ export class VaultFileStore {
325
332
  return this.managedWriteTracker.runManagedWrite(paths, operation);
326
333
  }
327
334
 
328
- async tree() {
329
- return this.readDirectory(this.vaultDir);
330
- }
331
-
332
- async readDirectory(dirPath) {
333
- const entries = [];
334
-
335
- let dirEntries;
336
- try {
337
- dirEntries = await readdir(dirPath, { withFileTypes: true });
338
- } catch {
339
- return entries;
340
- }
341
-
342
- const sorted = dirEntries.sort((a, b) => {
343
- if (a.isDirectory() && !b.isDirectory()) return -1;
344
- if (!a.isDirectory() && b.isDirectory()) return 1;
345
- return a.name.localeCompare(b.name, undefined, { sensitivity: 'base' });
346
- });
347
-
348
- for (const entry of sorted) {
349
- if (isIgnoredVaultEntry(entry.name) || entry.isSymbolicLink()) {
350
- continue;
351
- }
352
-
353
- const fullPath = join(dirPath, entry.name);
354
- const relativePath = toVaultRelativePath(this.vaultDir, fullPath);
355
-
356
- if (entry.isDirectory()) {
357
- entries.push({
358
- children: await this.readDirectory(fullPath),
359
- name: entry.name,
360
- path: relativePath,
361
- type: 'directory',
362
- });
363
- continue;
364
- }
365
-
366
- if (isVaultFilePath(entry.name)) {
367
- entries.push({
368
- name: entry.name,
369
- path: relativePath,
370
- type: getVaultTreeNodeType(entry.name),
371
- });
372
- }
373
- }
374
-
375
- return entries;
376
- }
377
-
378
335
  resolveContentPath(filePath, { requireVaultFile = true } = {}) {
379
336
  if (!requireVaultFile) {
380
337
  return sanitizeVaultPath(this.vaultDir, filePath);
@@ -427,6 +384,9 @@ export class VaultFileStore {
427
384
  };
428
385
  }
429
386
 
387
+ const validationError = getContentValidationError(filePath, content);
388
+ if (validationError) return { ok: false, error: validationError };
389
+
430
390
  try {
431
391
  await this.runManagedWrite([filePath], async () => {
432
392
  await mkdir(dirname(resolved.absolute), { recursive: true });
@@ -619,6 +579,9 @@ export class VaultFileStore {
619
579
  };
620
580
  }
621
581
 
582
+ const validationError = includeContent && getContentValidationError(filePath, content);
583
+ if (validationError) return { ok: false, error: validationError };
584
+
622
585
  const commentPath = this.sidecarStore.getCommentThreadPath(filePath);
623
586
  const snapshotPath = this.sidecarStore.getSnapshotPath(filePath);
624
587
  if (!commentPath || !snapshotPath) {
@@ -757,6 +720,9 @@ export class VaultFileStore {
757
720
  return { ok: false, error };
758
721
  }
759
722
 
723
+ const validationError = getContentValidationError(filePath, content);
724
+ if (validationError) return { ok: false, error: validationError };
725
+
760
726
  try {
761
727
  await stat(absolute);
762
728
  return { ok: false, error: 'File already exists' };
@@ -1,6 +1,6 @@
1
1
  import { extname } from 'node:path';
2
2
 
3
- const IMAGE_MIME_TYPES = Object.freeze({
3
+ export const IMAGE_EXTENSION_TO_MIME_TYPE = Object.freeze({
4
4
  '.gif': 'image/gif',
5
5
  '.jpeg': 'image/jpeg',
6
6
  '.jpg': 'image/jpeg',
@@ -11,5 +11,5 @@ const IMAGE_MIME_TYPES = Object.freeze({
11
11
 
12
12
  export function getImageMimeType(filePath) {
13
13
  const extension = extname(String(filePath ?? '').toLowerCase());
14
- return IMAGE_MIME_TYPES[extension] ?? 'application/octet-stream';
14
+ return IMAGE_EXTENSION_TO_MIME_TYPE[extension] ?? 'application/octet-stream';
15
15
  }
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{n as t,t as n}from"./jsx-runtime-DKj5X9O4.js";import"./chunk-SRAX5OIU-KFQikY-4.js";import{$ as r,G as i,P as a,R as o,V as s,c,et as l,ht as u,nt as d,pt as f,t as p,z as m}from"./dist-Bog8M5U3.js";import{a as h,o as g,p as _,s as v}from"./dist-BYBF4LtZ.js";var y=e(t(),1),b=n(),x=c.define({token(e){return e.match(/^%%.*$/)?`comment`:e.match(/^"(?:[^"\\]|\\.)*"/)?`string`:e.match(/^(flowchart|graph|sequenceDiagram|classDiagram|stateDiagram|erDiagram|gantt|pie|mindmap|journey|gitGraph|timeline|quadrantChart|sankey|xychart)\b/i)||e.match(/^(TB|TD|BT|RL|LR)\b/)||e.match(/^(subgraph|end|participant|actor|loop|alt|else|opt|par|critical|break|rect|note|over|activate|deactivate|title|section|class|style|linkStyle|classDef|click)\b/i)?`keyword`:e.match(/^[-.=<>|ox]+>/)||e.match(/^<[-.=<>|ox]+/)||e.match(/^--+|\.\.+|==+/)?`operator`:e.match(/^[[\](){}|<>]/)?`bracket`:e.match(/^[A-Za-z_][A-Za-z0-9_]*/)?`variableName`:e.match(/^\d+(\.\d+)?/)?`number`:e.match(/^[,:;]/)?`punctuation`:(e.eatSpace()||e.next(),null)}});function S(){return x}var C=s.theme({"&":{backgroundColor:`#1e1e1e`,color:`#d4d4d4`},".cm-content":{caretColor:`#fff`},".cm-cursor":{borderLeftColor:`#fff`},".cm-gutters":{backgroundColor:`#1e1e1e`,color:`#858585`,border:`none`},".cm-activeLineGutter":{backgroundColor:`#2a2a2a`},".cm-activeLine":{backgroundColor:`#2a2a2a`},".cm-errorLine":{backgroundColor:`rgba(255, 0, 0, 0.15)`}},{dark:!0}),w=p.define([{tag:o.keyword,color:`#569cd6`},{tag:o.string,color:`#ce9178`},{tag:o.comment,color:`#6a9955`},{tag:o.number,color:`#b5cea8`},{tag:o.operator,color:`#d4d4d4`},{tag:o.punctuation,color:`#d4d4d4`},{tag:o.variableName,color:`#9cdcfe`},{tag:o.bracket,color:`#ffd700`}]),T=s.theme({"&":{backgroundColor:`#ffffff`,color:`#1e1e1e`},".cm-content":{caretColor:`#000`},".cm-cursor":{borderLeftColor:`#000`},".cm-gutters":{backgroundColor:`#fff`,color:`#999`,border:`none`},".cm-activeLineGutter":{backgroundColor:`#e8e8e8`},".cm-activeLine":{backgroundColor:`#e8e8e8`},".cm-errorLine":{backgroundColor:`rgba(255, 0, 0, 0.1)`}}),E=p.define([{tag:o.keyword,color:`#0000ff`},{tag:o.string,color:`#a31515`},{tag:o.comment,color:`#008000`},{tag:o.number,color:`#098658`},{tag:o.operator,color:`#1e1e1e`},{tag:o.punctuation,color:`#1e1e1e`},{tag:o.variableName,color:`#001080`},{tag:o.bracket,color:`#af00db`}]),D=m.line({class:`cm-errorLine`}),O=(e,t)=>{if(!e||e<1||e>t.lines)return s.decorations.of(m.none);let n=t.line(e);return s.decorations.of(m.set([D.range(n.from)]))},k=e=>e===`dark`?[C,a(w)]:[T,a(E)],A=({value:e,onChange:t,onKeyboardSubmit:n,placeholder:a,theme:o,errorLine:c})=>{let p=(0,y.useRef)(null),m=(0,y.useRef)(null),x=(0,y.useRef)(t),C=(0,y.useRef)(n),w=(0,y.useRef)(new f),T=(0,y.useRef)(new f);return x.current=t,C.current=n,(0,y.useEffect)(()=>{if(!p.current)return;let t=w.current,n=new s({state:u.create({doc:e,extensions:[r.of([{key:`Mod-Enter`,run:()=>(C.current?.(),!0)},{key:`Mod-Shift-z`,run:_,preventDefault:!0}]),s.updateListener.of(e=>{e.docChanged&&x.current(e.state.doc.toString())}),g(),r.of([...h,...v]),l(),s.lineWrapping,t.of(k(o)),T.current.of([]),S(),i({drawRangeCursor:!0}),...a?[d(a)]:[]]}),parent:p.current});return m.current=n,n.focus(),()=>{n.destroy(),m.current=null}},[]),(0,y.useEffect)(()=>{let e=m.current;e&&e.dispatch({effects:w.current.reconfigure(k(o))})},[o]),(0,y.useEffect)(()=>{let e=m.current;e&&e.dispatch({effects:T.current.reconfigure(O(c,e.state.doc))})},[c]),(0,y.useEffect)(()=>{let t=m.current;if(!t)return;let n=t.state.doc.toString();e!==n&&t.dispatch({changes:{from:0,to:n.length,insert:e}})},[e]),(0,b.jsx)(`div`,{ref:p,className:`ttd-dialog-input ttd-dialog-input--codemirror`})};export{A as default};
@@ -1 +0,0 @@
1
- import{$ as e,A as t,C as n,D as r,E as i,G as a,H as o,I as s,K as c,M as l,N as u,P as d,R as f,S as p,T as m,U as ee,V as h,X as g,Y as _,ct as v,dt as y,et as te,f as ne,ft as re,h as b,j as ie,k as ae,lt as oe,mt as se,nt as x,pt as ce,q as le,st as S,ut as ue,v as de,w as fe,z as pe}from"./_baseUniq-DR4vVjyC.js";var me=/\s/;function he(e){for(var t=e.length;t--&&me.test(e.charAt(t)););return t}var ge=/^\s+/;function _e(e){return e&&e.slice(0,he(e)+1).replace(ge,``)}var C=NaN,ve=/^[-+]0x[0-9a-f]+$/i,ye=/^0b[01]+$/i,be=/^0o[0-7]+$/i,xe=parseInt;function Se(e){if(typeof e==`number`)return e;if(ue(e))return C;if(S(e)){var t=typeof e.valueOf==`function`?e.valueOf():e;e=S(t)?t+``:t}if(typeof e!=`string`)return e===0?e:+e;e=_e(e);var n=ye.test(e);return n||be.test(e)?xe(e.slice(2),n?2:8):ve.test(e)?C:+e}var w=1/0,Ce=17976931348623157e292;function T(e){return e?(e=Se(e),e===w||e===-w?(e<0?-1:1)*Ce:e===e?e:0):e===0?e:0}function E(e){var t=T(e),n=t%1;return t===t?n?t-n:t:0}var D=Object.create,we=function(){function e(){}return function(t){if(!S(t))return{};if(D)return D(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();function O(e,t){var n=-1,r=e.length;for(t||=Array(r);++n<r;)t[n]=e[n];return t}function k(e,t,n){t==`__proto__`&&x?x(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Te=Object.prototype.hasOwnProperty;function A(e,t,n){var r=e[t];(!(Te.call(e,t)&&_(r,n))||n===void 0&&!(t in e))&&k(e,t,n)}function j(e,t,n,r){var i=!n;n||={};for(var a=-1,o=t.length;++a<o;){var s=t[a],c=r?r(n[s],e[s],s,n,e):void 0;c===void 0&&(c=e[s]),i?k(n,s,c):A(n,s,c)}return n}function M(e,t,n){if(!S(n))return!1;var r=typeof t;return(r==`number`?c(n)&&g(t,n.length):r==`string`&&t in n)?_(n[t],e):!1}function Ee(e){return le(function(t,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(a=e.length>3&&typeof a==`function`?(i--,a):void 0,o&&M(n[0],n[1],o)&&(a=i<3?void 0:a,i=1),t=Object(t);++r<i;){var s=n[r];s&&e(t,s,r,a)}return t})}function De(e){var t=[];if(e!=null)for(var n in Object(e))t.push(n);return t}var Oe=Object.prototype.hasOwnProperty;function ke(e){if(!S(e))return De(e);var t=a(e),n=[];for(var r in e)(r!=`constructor`||!t&&Oe.call(e,r))&&n.push(r);return n}function N(e){return c(e)?pe(e,!0):ke(e)}function Ae(e){return e!=null&&e.length?t(e,1):[]}var P=f(Object.getPrototypeOf,Object);function je(e,t){return e&&j(t,s(t),e)}function Me(e,t){return e&&j(t,N(t),e)}var F=typeof exports==`object`&&exports&&!exports.nodeType&&exports,I=F&&typeof module==`object`&&module&&!module.nodeType&&module,L=I&&I.exports===F?se.Buffer:void 0,R=L?L.allocUnsafe:void 0;function z(e,t){if(t)return e.slice();var n=e.length,r=R?R(n):new e.constructor(n);return e.copy(r),r}function Ne(e,t){return j(e,i(e),t)}var B=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)ie(t,i(e)),e=P(e);return t}:r;function Pe(e,t){return j(e,B(e),t)}function V(e){return m(e,N,B)}var Fe=Object.prototype.hasOwnProperty;function Ie(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]==`string`&&Fe.call(e,`index`)&&(n.index=e.index,n.input=e.input),n}function H(e){var t=new e.constructor(e.byteLength);return new p(t).set(new p(e)),t}function Le(e,t){var n=t?H(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}var Re=/\w*$/;function ze(e){var t=new e.constructor(e.source,Re.exec(e));return t.lastIndex=e.lastIndex,t}var U=ce?ce.prototype:void 0,W=U?U.valueOf:void 0;function Be(e){return W?Object(W.call(e)):{}}function G(e,t){var n=t?H(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}var Ve=`[object Boolean]`,He=`[object Date]`,Ue=`[object Map]`,We=`[object Number]`,Ge=`[object RegExp]`,Ke=`[object Set]`,qe=`[object String]`,Je=`[object Symbol]`,Ye=`[object ArrayBuffer]`,Xe=`[object DataView]`,Ze=`[object Float32Array]`,Qe=`[object Float64Array]`,$e=`[object Int8Array]`,et=`[object Int16Array]`,tt=`[object Int32Array]`,nt=`[object Uint8Array]`,rt=`[object Uint8ClampedArray]`,it=`[object Uint16Array]`,at=`[object Uint32Array]`;function ot(e,t,n){var r=e.constructor;switch(t){case Ye:return H(e);case Ve:case He:return new r(+e);case Xe:return Le(e,n);case Ze:case Qe:case $e:case et:case tt:case nt:case rt:case it:case at:return G(e,n);case Ue:return new r;case We:case qe:return new r(e);case Ge:return ze(e);case Ke:return new r;case Je:return Be(e)}}function K(e){return typeof e.constructor==`function`&&!a(e)?we(P(e)):{}}var st=`[object Map]`;function ct(e){return y(e)&&n(e)==st}var q=h&&h.isMap,lt=q?o(q):ct,ut=`[object Set]`;function dt(e){return y(e)&&n(e)==ut}var J=h&&h.isSet,ft=J?o(J):dt,pt=1,mt=2,ht=4,Y=`[object Arguments]`,gt=`[object Array]`,_t=`[object Boolean]`,vt=`[object Date]`,yt=`[object Error]`,X=`[object Function]`,bt=`[object GeneratorFunction]`,xt=`[object Map]`,St=`[object Number]`,Z=`[object Object]`,Ct=`[object RegExp]`,wt=`[object Set]`,Tt=`[object String]`,Et=`[object Symbol]`,Dt=`[object WeakMap]`,Ot=`[object ArrayBuffer]`,kt=`[object DataView]`,At=`[object Float32Array]`,jt=`[object Float64Array]`,Mt=`[object Int8Array]`,Nt=`[object Int16Array]`,Pt=`[object Int32Array]`,Ft=`[object Uint8Array]`,It=`[object Uint8ClampedArray]`,Lt=`[object Uint16Array]`,Rt=`[object Uint32Array]`,Q={};Q[Y]=Q[gt]=Q[Ot]=Q[kt]=Q[_t]=Q[vt]=Q[At]=Q[jt]=Q[Mt]=Q[Nt]=Q[Pt]=Q[xt]=Q[St]=Q[Z]=Q[Ct]=Q[wt]=Q[Tt]=Q[Et]=Q[Ft]=Q[It]=Q[Lt]=Q[Rt]=!0,Q[yt]=Q[X]=Q[Dt]=!1;function $(e,t,r,i,a,o){var c,l=t&pt,u=t&mt,d=t&ht;if(r&&(c=a?r(e,i,a,o):r(e)),c!==void 0)return c;if(!S(e))return e;var f=v(e);if(f){if(c=Ie(e),!l)return O(e,c)}else{var p=n(e),m=p==X||p==bt;if(ee(e))return z(e,l);if(p==Z||p==Y||m&&!a){if(c=u||m?{}:K(e),!l)return u?Pe(e,Me(c,e)):Ne(e,je(c,e))}else{if(!Q[p])return a?e:{};c=ot(e,p,l)}}o||=new ae;var h=o.get(e);if(h)return h;o.set(e,c),ft(e)?e.forEach(function(n){c.add($(n,t,r,n,e,o))}):lt(e)&&e.forEach(function(n,i){c.set(i,$(n,t,r,i,e,o))});var g=f?void 0:(d?u?V:fe:u?N:s)(e);return te(g||e,function(n,i){g&&(i=n,n=e[i]),A(c,i,$(n,t,r,i,e,o))}),c}var zt=Object.prototype,Bt=zt.hasOwnProperty,Vt=le(function(e,t){e=Object(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&M(t[0],t[1],i)&&(r=1);++n<r;)for(var a=t[n],o=N(a),s=-1,c=o.length;++s<c;){var l=o[s],u=e[l];(u===void 0||_(u,zt[l])&&!Bt.call(e,l))&&(e[l]=a[l])}return e});function Ht(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function Ut(e){return function(t,n,r){var i=Object(t);if(!c(t)){var a=b(n,3);t=s(t),n=function(e){return a(i[e],e,i)}}var o=e(t,n,r);return o>-1?i[a?t[o]:o]:void 0}}var Wt=Math.max;function Gt(t,n,r){var i=t==null?0:t.length;if(!i)return-1;var a=r==null?0:E(r);return a<0&&(a=Wt(i+a,0)),e(t,b(n,3),a)}var Kt=Ut(Gt);function qt(e,t){var n=-1,r=c(e)?Array(e.length):[];return ne(e,function(e,i,a){r[++n]=t(e,i,a)}),r}function Jt(e,t){return(v(e)?oe:qt)(e,b(t,3))}var Yt=Object.prototype.hasOwnProperty;function Xt(e,t){return e!=null&&Yt.call(e,t)}function Zt(e,t){return e!=null&&de(e,t,Xt)}var Qt=`[object String]`;function $t(e){return typeof e==`string`||!v(e)&&y(e)&&re(e)==Qt}function en(e,t,n,r){if(!S(e))return e;t=d(t,e);for(var i=-1,a=t.length,o=a-1,s=e;s!=null&&++i<a;){var c=u(t[i]),l=n;if(c===`__proto__`||c===`constructor`||c===`prototype`)return e;if(i!=o){var f=s[c];l=r?r(f,c,s):void 0,l===void 0&&(l=S(f)?f:g(t[i+1])?[]:{})}A(s,c,l),s=s[c]}return e}function tn(e,t,n){for(var r=-1,i=t.length,a={};++r<i;){var o=t[r],s=l(e,o);n(s,o)&&en(a,d(o,e),s)}return a}export{E as C,O as S,Ee as _,qt as a,A as b,Vt as c,G as d,V as f,N as g,Ae as h,Jt as i,$ as l,P as m,$t as n,Kt as o,z as p,Zt as r,Ht as s,tn as t,K as u,M as v,T as w,k as x,j as y};