collabmd 0.1.51 → 0.1.52

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 (584) hide show
  1. package/README.md +1 -1
  2. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-BEz2BKN1.js +1 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/client/assets/Middleware-DUgFSleI.js +1 -0
  63. package/dist/client/assets/_basePickBy-QJXUw_pr.js +1 -0
  64. package/dist/client/assets/_baseUniq-DR4vVjyC.js +1 -0
  65. package/dist/client/assets/abnfDiagram-O67JEVCF-Dwt6a0Ds.js +1 -0
  66. package/dist/client/assets/abnfDiagram-VCTEODGH-DxNxad6-.js +1 -0
  67. package/dist/client/assets/architecture-7GRP2DOG-BBwRXFv3.js +1 -0
  68. package/dist/client/assets/architecture-7GRP2DOG-DJVtYNt-.js +1 -0
  69. package/dist/client/assets/architectureDiagram-5GKGNRK7-C1uvg5id.js +36 -0
  70. package/dist/client/assets/architectureDiagram-NJMV4G6O-D5CGiX3G.js +36 -0
  71. package/dist/client/assets/{babel-CY5KOv-I.js → babel-Bi_28hhi.js} +1 -1
  72. package/dist/client/assets/band-D-Cum8PO.js +1 -0
  73. package/dist/client/assets/blockDiagram-BEXU5L5S-BgTM0var.js +140 -0
  74. package/dist/client/assets/blockDiagram-I7D4REHJ-B2YonsoG.js +129 -0
  75. package/dist/client/assets/{browser-BKLM0ThC-IxjwuOIz-DyJcVMFR.js → browser-BKLM0ThC-IxjwuOIz-C0mP17s1.js} +1 -1
  76. package/dist/client/assets/{browser-utils-DbXSMI-6.js → browser-utils-vlHL9goC.js} +1 -1
  77. package/dist/client/assets/{c4Diagram-7LVT6UL2-VAk1HPmz.js → c4Diagram-7LVT6UL2-r4IwomZm.js} +2 -2
  78. package/dist/client/assets/c4Diagram-YGBWAQC7-_xZPrNkB.js +38 -0
  79. package/dist/client/assets/channel-CgcHBnmr.js +1 -0
  80. package/dist/client/assets/chunk-2E4U76K2-CIQUuV9n.js +1 -0
  81. package/dist/client/assets/chunk-2Q5K7J3B-BMFG3ur0.js +1 -0
  82. package/dist/client/assets/{chunk-2ZTRR5NV-C2qZJila.js → chunk-2ZTRR5NV-CnDP55cn.js} +1 -1
  83. package/dist/client/assets/chunk-2ZTRR5NV-DcPRfelM.js +2 -0
  84. package/dist/client/assets/chunk-3FUC2YCW-8tZlhTGX.js +1 -0
  85. package/dist/client/assets/{chunk-3Z5EZCMW-DMniOlPd.js → chunk-3Z5EZCMW-BAnA6eQ7.js} +1 -1
  86. package/dist/client/assets/chunk-3Z5EZCMW-Yx4Q5AcN.js +1 -0
  87. package/dist/client/assets/chunk-4HAMMTFA-q0ldNVvr.js +62 -0
  88. package/dist/client/assets/chunk-4SOEAONT-C3fufoVl.js +40 -0
  89. package/dist/client/assets/chunk-5DYCD2WN-BKWCKnK-.js +1 -0
  90. package/dist/client/assets/{chunk-5V3GS4D5-i-ZDOEnP.js → chunk-5V3GS4D5-B5uC2oxu.js} +1 -1
  91. package/dist/client/assets/chunk-5V3GS4D5-BR7kgIgJ.js +1 -0
  92. package/dist/client/assets/chunk-5VM5RSS4-hE9rU_bl.js +15 -0
  93. package/dist/client/assets/chunk-6AEJRKK7-DTVZj5bY.js +1 -0
  94. package/dist/client/assets/{chunk-6AZGARVD-BB6FqMl-.js → chunk-6AZGARVD--pTGpDnx.js} +1 -1
  95. package/dist/client/assets/chunk-6AZGARVD-CnZDr4Cj.js +1 -0
  96. package/dist/client/assets/{chunk-6EIED4P4-DdUJkP0f.js → chunk-6EIED4P4-Bp8dpTvX.js} +1 -1
  97. package/dist/client/assets/chunk-6EIED4P4-DBVWq7Tz.js +1 -0
  98. package/dist/client/assets/{chunk-6K3QC6MW-CqVsVn-y.js → chunk-6K3QC6MW-DGVRzL6v.js} +1 -1
  99. package/dist/client/assets/chunk-6K3QC6MW-JnuvEGV4.js +1 -0
  100. package/dist/client/assets/{chunk-6TQVIW2G-DKlLbNIP.js → chunk-6TQVIW2G-BSj0l_pu.js} +1 -1
  101. package/dist/client/assets/chunk-6TQVIW2G-DgBX-Pv0.js +1 -0
  102. package/dist/client/assets/chunk-742MDFTN-D1nh6vNv.js +1 -0
  103. package/dist/client/assets/{chunk-747NJXEK-BFkZPlab.js → chunk-747NJXEK-BjqqAsS9.js} +1 -1
  104. package/dist/client/assets/chunk-747NJXEK-Cur1aosP.js +2 -0
  105. package/dist/client/assets/chunk-75Z2AOVW-DitkSoSG.js +2 -0
  106. package/dist/client/assets/chunk-7INBJB4K-CDmiHbaX.js +62 -0
  107. package/dist/client/assets/chunk-7M6MHVWA-BDakkknV.js +213 -0
  108. package/dist/client/assets/chunk-7PRAP22T-9uTvtc_-.js +1 -0
  109. package/dist/client/assets/{chunk-CLGD4ZFX-Cmtx89ht.js → chunk-CLGD4ZFX-BfYJtJm1.js} +1 -1
  110. package/dist/client/assets/chunk-DU6HZSFF-CWlP1Dk_.js +125 -0
  111. package/dist/client/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  112. package/dist/client/assets/chunk-DYU5D34O-DN0WQZBm.js +1 -0
  113. package/dist/client/assets/{chunk-F27PBJKO-Dg3H6KLL.js → chunk-F27PBJKO-DPcsPcEs.js} +1 -1
  114. package/dist/client/assets/{chunk-FOHPRMQF-DHwB1DNv.js → chunk-FOHPRMQF-Dmmo5Kak.js} +9 -9
  115. package/dist/client/assets/chunk-FOHPRMQF-DzxwRta7.js +161 -0
  116. package/dist/client/assets/chunk-GMAD6QVW-Bgk8qnty.js +8 -0
  117. package/dist/client/assets/chunk-GNY47TPC-CTrH5O5R.js +1 -0
  118. package/dist/client/assets/{chunk-SVP7TREG-XlsB_ZMZ.js → chunk-GTNCS2PH-ChgkzEIi.js} +1 -1
  119. package/dist/client/assets/chunk-GVQU2GXP-CQ8cl-Uu.js +1 -0
  120. package/dist/client/assets/chunk-GWA4HPMP-CGmv2yIq.js +1 -0
  121. package/dist/client/assets/{chunk-I5DQTOEV-Hm2LfiYI.js → chunk-I5DQTOEV-B98XA8VK.js} +1 -1
  122. package/dist/client/assets/chunk-I5DQTOEV-aBZooNp1.js +1 -0
  123. package/dist/client/assets/{chunk-ICYGCRZG-749o-pGJ.js → chunk-ICYGCRZG-D97UeqJs.js} +1 -1
  124. package/dist/client/assets/chunk-ICYGCRZG-odvlDZyA.js +1 -0
  125. package/dist/client/assets/{chunk-IH6LHLGP-CC6I9F3i.js → chunk-IH6LHLGP-BNevEHZK.js} +1 -1
  126. package/dist/client/assets/chunk-IH6LHLGP-CvXe34hB.js +1 -0
  127. package/dist/client/assets/{chunk-IMKFNOWR-3F6NhHUP.js → chunk-IMKFNOWR-CBqxfpcP.js} +2 -2
  128. package/dist/client/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  129. package/dist/client/assets/chunk-JWPE2WC7-GDilnS5Y.js +1 -0
  130. package/dist/client/assets/{chunk-KI3K4JFJ-Rma-0k_M.js → chunk-KI3K4JFJ-D5XCPRZv.js} +1 -1
  131. package/dist/client/assets/chunk-KI3K4JFJ-FTtDwx3-.js +1 -0
  132. package/dist/client/assets/chunk-L3NEJ4N5-BflzkdTI.js +1 -0
  133. package/dist/client/assets/{chunk-LNGE3PJU-DWpGwHrW.js → chunk-LNGE3PJU-5-SxdO55.js} +1 -1
  134. package/dist/client/assets/chunk-LNGE3PJU-5nWSl6jJ.js +34 -0
  135. package/dist/client/assets/chunk-MBY4JIJT-DTJ4UcAm.js +8 -0
  136. package/dist/client/assets/chunk-NETBCI7D-CmUwDWUZ.js +1 -0
  137. package/dist/client/assets/chunk-O7XYJQB3-D0_ZY2za.js +126 -0
  138. package/dist/client/assets/chunk-OSK3NFVY-DqeKV_pg.js +10 -0
  139. package/dist/client/assets/{chunk-OUJLGHUK-D0j2JRSg.js → chunk-OUJLGHUK-75UXlPjl.js} +1 -1
  140. package/dist/client/assets/chunk-OUJLGHUK-DA95-S9B.js +2 -0
  141. package/dist/client/assets/{chunk-P2QGCYS3-Du8EtwOa.js → chunk-P2QGCYS3-BA--DhpW.js} +1 -1
  142. package/dist/client/assets/chunk-POPQ4Y6H-V_NEc45n.js +1 -0
  143. package/dist/client/assets/chunk-PWAF6VOD-D_kLse-N.js +1 -0
  144. package/dist/client/assets/{chunk-ZPMXAHWN-Dt0TxJa6.js → chunk-RUX4WMZV-BGnd3s_C.js} +4 -4
  145. package/dist/client/assets/{chunk-SHT3W25Y-BKaI8jZO.js → chunk-SHT3W25Y-YM3S-A_M.js} +5 -5
  146. package/dist/client/assets/chunk-SVP7TREG-DdNhDOmW.js +88 -0
  147. package/dist/client/assets/{chunk-TICWLB2K-Cpp2z8yK.js → chunk-TICWLB2K-BGGgCr4x.js} +3 -3
  148. package/dist/client/assets/chunk-TLUHSLCS-DCZhIDYA.js +1 -0
  149. package/dist/client/assets/chunk-UA2S7LBM-DicYDjDM.js +1 -0
  150. package/dist/client/assets/{chunk-UY3FDG6J-CnmaAkG5.js → chunk-UY3FDG6J-DqSM_0FB.js} +1 -1
  151. package/dist/client/assets/chunk-UY3FDG6J-QT-rkt0y.js +1 -0
  152. package/dist/client/assets/chunk-WEXAMYUT-DDlVNp8J.js +1 -0
  153. package/dist/client/assets/chunk-X3CZISLH-BixgQztF.js +1 -0
  154. package/dist/client/assets/chunk-X3CZISLH-DwWpRaN8.js +1 -0
  155. package/dist/client/assets/{chunk-XHIXRSVI-BFQ6B8BE.js → chunk-XHIXRSVI-BSN7JlfK.js} +1 -1
  156. package/dist/client/assets/chunk-XHIXRSVI-DN_fEwws.js +1 -0
  157. package/dist/client/assets/chunk-XXDRQBXY-C7hQHDmQ.js +1 -0
  158. package/dist/client/assets/{chunk-XXDRQBXY-BvKO0v-W.js → chunk-XXDRQBXY-CdRN9Akd.js} +1 -1
  159. package/dist/client/assets/chunk-Y2CYZVJY-BbRBGnmc.js +1 -0
  160. package/dist/client/assets/chunk-Z7XXMR3K-P4Vaq8hD.js +10 -0
  161. package/dist/client/assets/chunk-ZIGJFQKS-b8OUHKK5.js +2 -0
  162. package/dist/client/assets/classDiagram-ZZMXUADV-QLbh_Nkf.js +1 -0
  163. package/dist/client/assets/classDiagram-v2-NBCMYWYE-3TQORq33.js +217 -0
  164. package/dist/client/assets/classDiagram-v2-VYDZK3BY-QLbh_Nkf.js +1 -0
  165. package/dist/client/assets/clone-C1hp9FUh.js +1 -0
  166. package/dist/client/assets/comment-markdown-renderer-Bxi_JRSR.js +1 -0
  167. package/dist/client/assets/comment-thread-store-CHvy8GF8.js +1 -0
  168. package/dist/client/assets/cose-bilkent-JH36ORCC-Czr0rwGr.js +1 -0
  169. package/dist/client/assets/cose-bilkent-JH36ORCC-DLmEf9HS.js +1 -0
  170. package/dist/client/assets/cynefin-OW5HDTMX-CF3N9j1_.js +1 -0
  171. package/dist/client/assets/cynefin-OW5HDTMX-e-Quc9Yl.js +1 -0
  172. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DTnLZaO7.js +62 -0
  173. package/dist/client/assets/cynefinDiagram-VND7K2PF-DwfMZ3vk.js +62 -0
  174. package/dist/client/assets/cytoscape-cose-bilkent-NdTYBUiT.js +1 -0
  175. package/dist/client/assets/cytoscape-fcose-DE9_QRG_.js +1 -0
  176. package/dist/client/assets/cytoscape.esm-EK2DW5Qr.js +321 -0
  177. package/dist/client/assets/dagre-6A5THRUB-DewyAGK6.js +4 -0
  178. package/dist/client/assets/dagre-D7FiCLLP.js +1 -0
  179. package/dist/client/assets/{dagre-GXQ25YYZ-BSfKCfy7.js → dagre-GXQ25YYZ-Vtyx08Qh.js} +2 -2
  180. package/dist/client/assets/deferred-collab-D4cxEdad.css +1 -0
  181. package/dist/client/assets/deferred-preview-BAXYgf4T.css +1 -0
  182. package/dist/client/assets/diagram-22UHCM2B-DbZirFfl.js +200 -0
  183. package/dist/client/assets/diagram-3UASUU5V-DmhdYv6_.js +24 -0
  184. package/dist/client/assets/diagram-ATOU4E4O-B5uX-jVO.js +3 -0
  185. package/dist/client/assets/diagram-CDSNMT55-D_qyS11R.js +30 -0
  186. package/dist/client/assets/diagram-MLGK6HIB-DIBG6Ivu.js +24 -0
  187. package/dist/client/assets/diagram-MPIPVDR6-D9XsALDV.js +41 -0
  188. package/dist/client/assets/{diagram-S7CK7UJ4-D7KaM9yj.js → diagram-S7CK7UJ4-CGTzfo2f.js} +3 -3
  189. package/dist/client/assets/diagram-UQ7AKVKN-CWZS8QtB.js +41 -0
  190. package/dist/client/assets/{diagram-VSXAHHWV-B3-U-Q2E.js → diagram-VSXAHHWV-DaO1nOZF.js} +3 -3
  191. package/dist/client/assets/diagram-VX7I27RA-B54P6Cyf.js +24 -0
  192. package/dist/client/assets/diagram-Z3DM3KII-Cl2EXiXp.js +24 -0
  193. package/dist/client/assets/direct-engine-DdrQKpgq-4QysbH_V.js +5 -0
  194. package/dist/client/assets/dist-B7fBbwrO.js +1 -0
  195. package/dist/client/assets/{dist-DVXzbeDx.js → dist-BVCNc-Es.js} +1 -1
  196. package/dist/client/assets/dist-BYBF4LtZ.js +1 -0
  197. package/dist/client/assets/{dist-B_B4XLmq.js → dist-B_1hMrc6.js} +1 -1
  198. package/dist/client/assets/{dist-EWJYvBK1.js → dist-BfpAc922.js} +1 -1
  199. package/dist/client/assets/dist-BnVaoRgZ.js +1 -0
  200. package/dist/client/assets/{dist-kiD2GIsD.js → dist-Bog8M5U3.js} +6 -6
  201. package/dist/client/assets/dist-CAG5sIOj.js +1 -0
  202. package/dist/client/assets/{dist-CrWzIWEE.js → dist-CKf7LlAo.js} +1 -1
  203. package/dist/client/assets/{dist-CqXVyYoH.js → dist-CUsXdnU4.js} +1 -1
  204. package/dist/client/assets/{dist-B7XMN9AT.js → dist-CXOUa90Q.js} +1 -1
  205. package/dist/client/assets/dist-CYMCikZo.js +1 -0
  206. package/dist/client/assets/dist-CYfPeupF.js +1 -0
  207. package/dist/client/assets/dist-Ch6Sr9KF.js +28 -0
  208. package/dist/client/assets/dist-Ck-B8onw.js +2 -0
  209. package/dist/client/assets/dist-CrkYYcOU.js +1 -0
  210. package/dist/client/assets/{dist-BR81yxMt.js → dist-CsQTfQFi.js} +1 -1
  211. package/dist/client/assets/dist-Cu5Ze2cs.js +6 -0
  212. package/dist/client/assets/{dist-Drv_wZYC.js → dist-CvVoyTRF.js} +1 -1
  213. package/dist/client/assets/{dist-CbDyXgCo.js → dist-D4kDR0g8.js} +1 -1
  214. package/dist/client/assets/dist-D8LnhZzy.js +1 -0
  215. package/dist/client/assets/{dist-CELhfKzh.js → dist-DGa-2MNX.js} +2 -2
  216. package/dist/client/assets/{dist-CO0-4CuV.js → dist-DI6c02Da.js} +8 -8
  217. package/dist/client/assets/{dist-DJAMplZI.js → dist-DNONgI1P.js} +2 -2
  218. package/dist/client/assets/dist-DVBYH83t.js +1 -0
  219. package/dist/client/assets/dist-DX6qtdxv.js +1 -0
  220. package/dist/client/assets/{dist-Bx3QkS-3.js → dist-Da-jLrCf.js} +1 -1
  221. package/dist/client/assets/dist-DofvCYzJ.js +1 -0
  222. package/dist/client/assets/{dist-BzFSJM0U.js → dist-Dx37MHWs.js} +1 -1
  223. package/dist/client/assets/{dist-Bdy9ZRzd.js → dist-GTGhtpyW.js} +1 -1
  224. package/dist/client/assets/{dist-nxQErAaK.js → dist-W0FoeIxk.js} +9 -9
  225. package/dist/client/assets/{dist-By7ieqAf.js → dist-Y6zYRI-A.js} +1 -1
  226. package/dist/client/assets/{dist-Bfxzlnrf.js → dist-jVKfryIL.js} +1 -1
  227. package/dist/client/assets/{dist-DCpIH3-_.js → dist-zHDLm1oE.js} +1 -1
  228. package/dist/client/assets/{document-formatter-Qdiq9uJs.js → document-formatter-gO8qM2qY.js} +1 -1
  229. package/dist/client/assets/{drawioEditor-CHf1vtdQ.js → drawioEditor-DCkWweiy.js} +2 -2
  230. package/dist/client/assets/duration-BiuFXtXd.js +1 -0
  231. package/dist/client/assets/ebnfDiagram-PWID7BFC-PfC84FyI.js +1 -0
  232. package/dist/client/assets/ebnfDiagram-ZINNZB2B-DYvm_QtE.js +1 -0
  233. package/dist/client/assets/editor-session-DxRyr4EM.js +14 -0
  234. package/dist/client/assets/elk-276RUBZZ-B8LB3Pac.js +27 -0
  235. package/dist/client/assets/embedded-editor-base-elU0Avik.css +1 -0
  236. package/dist/client/assets/{embedpdf-DA4bA119-E8wZ11J2.js → embedpdf-DA4bA119-DsoNiPlQ.js} +4 -4
  237. package/dist/client/assets/{embedpdf-LUXDBD3-.js → embedpdf-DyOonRvx.js} +1 -1
  238. package/dist/client/assets/{en-2RFA324Y-BsuNJTcL.js → en-GNC3RJIS-CEy_oGTd.js} +1 -1
  239. package/dist/client/assets/erDiagram-OPXOYQCR-o8GRv8A_.js +99 -0
  240. package/dist/client/assets/{erDiagram-RLTQ6QDP-CWrH1UJ9.js → erDiagram-RLTQ6QDP-C9cJl5NB.js} +2 -2
  241. package/dist/client/assets/esm-BzZ1JFVo.js +65 -0
  242. package/dist/client/assets/{estree-CuT_pB8K.js → estree-DCT3Jm65.js} +4 -4
  243. package/dist/client/assets/eventmodeling-NTZA5JFV-CDy1bN6j.js +1 -0
  244. package/dist/client/assets/eventmodeling-NTZA5JFV-Dxtv5D-P.js +1 -0
  245. package/dist/client/assets/{excalidraw-element-link-iA6zo0_f.js → excalidraw-element-link-CGZ5934B.js} +1 -1
  246. package/dist/client/assets/{excalidrawEditor-DDE0n1Pk.css → excalidrawEditor-BCTFp_CV.css} +1 -1
  247. package/dist/client/assets/excalidrawEditor-BVfSxjSO.js +9 -0
  248. package/dist/client/assets/export-page-BCo_e15t.js +46 -0
  249. package/dist/client/assets/exportDocument-Ba-n1X4U.css +1 -0
  250. package/dist/client/assets/exportDocument-DP6oE_or.js +2 -0
  251. package/dist/client/assets/{fa-IR-FIYUE2GQ-C865Nx3X.js → fa-IR-I4JNTJHK-CFtHZqoT.js} +1 -1
  252. package/dist/client/assets/file-search-3hYF4cYa.js +1 -0
  253. package/dist/client/assets/flowDiagram-HODETNUW-Bq4470NR.js +1 -0
  254. package/dist/client/assets/flowDiagram-KWPJA3E3-DQG9qGiU.js +1 -0
  255. package/dist/client/assets/forth-D6RzAl64.js +1 -0
  256. package/dist/client/assets/ganttDiagram-EL5Y4UJY-x40PW0Ah.js +292 -0
  257. package/dist/client/assets/ganttDiagram-FUAMR5RP-BQpsI7gQ.js +292 -0
  258. package/dist/client/assets/gitGraph-4MIJSDKK-B-rpDYbz.js +1 -0
  259. package/dist/client/assets/gitGraph-4MIJSDKK-ZaBIE4Lb.js +1 -0
  260. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-ahsNaZsp.js +106 -0
  261. package/dist/client/assets/gitGraphDiagram-X574FWY7-wbs_2m9f.js +106 -0
  262. package/dist/client/assets/graphlib-C9Tl7QrK.js +1 -0
  263. package/dist/client/assets/{html-Cdnr2qzU.js → html-CBXMuS97.js} +2 -2
  264. package/dist/client/assets/html-DTuc_pxj.js +1 -0
  265. package/dist/client/assets/{id-ID-EOMR5R3I-CGQwUjoL.js → id-ID-2WY7E4VX-CCAeQpPr.js} +2 -2
  266. package/dist/client/assets/image-EJJKRVD3-BQfi5nWJ.js +1 -0
  267. package/dist/client/assets/{image-blob-reduce.esm-Dj7YBvMv.js → image-blob-reduce.esm-BFq-Mx5V.js} +2 -2
  268. package/dist/client/assets/index-BxAuGDoN.css +1 -0
  269. package/dist/client/assets/index-uw9O0z1c.js +1112 -0
  270. package/dist/client/assets/info-A6RAGUB7-BcGxhjED.js +1 -0
  271. package/dist/client/assets/info-A6RAGUB7-BlutK7BT.js +1 -0
  272. package/dist/client/assets/infoDiagram-27XIBGKW-MrZyptIy.js +2 -0
  273. package/dist/client/assets/infoDiagram-VRGFBTTK-KkUjDRAQ.js +2 -0
  274. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-CRy9vIS5.js → ishikawaDiagram-5VMMS53U-Bnt9yM0O.js} +2 -2
  275. package/dist/client/assets/ishikawaDiagram-OU5B5YK6-Di9BcpOY.js +70 -0
  276. package/dist/client/assets/{it-IT-FC2VTM3L-KTijNcUe.js → it-IT-INVHSAJF-DytAgndh.js} +1 -1
  277. package/dist/client/assets/javascript-B9I2pbsP.js +1 -0
  278. package/dist/client/assets/javascript-DctB8BJo.js +1 -0
  279. package/dist/client/assets/{journeyDiagram-3NMN7TZE-D4ZR_s9J.js → journeyDiagram-3NMN7TZE-Bl0abK1r.js} +1 -1
  280. package/dist/client/assets/journeyDiagram-ZHPQQLJL-J-sGrs9e.js +139 -0
  281. package/dist/client/assets/jsx-runtime-DKj5X9O4.js +1 -0
  282. package/dist/client/assets/kanban-definition-PNTS6WVX-5ZDV_yIa.js +89 -0
  283. package/dist/client/assets/{kanban-definition-UXKFOSKX-CIDTmu5g.js → kanban-definition-UXKFOSKX-DMgUfNt0.js} +10 -10
  284. package/dist/client/assets/{katex-CXMH3UgJ.js → katex-9NBMfU68.js} +2 -2
  285. package/dist/client/assets/katex-ZlcWpGUi.js +257 -0
  286. package/dist/client/assets/line-DEbP8Ok6.js +1 -0
  287. package/dist/client/assets/linear-DExL6ILt.js +1 -0
  288. package/dist/client/assets/{lobby-presence-Rdjnc0_0.js → lobby-presence-Cz5jGOPg.js} +1 -1
  289. package/dist/client/assets/{lua-CL1SqxuB.js → lua-zbJo2mq3.js} +1 -1
  290. package/dist/client/assets/{markdown-CByV-4CU.js → markdown-Bo71X2X2.js} +8 -8
  291. package/dist/client/assets/markdown-it-DpvIRaVq.js +13 -0
  292. package/dist/client/assets/markdown-math-CyyBVuDO.js +517 -0
  293. package/dist/client/assets/merge-CALoRt3l.js +1 -0
  294. package/dist/client/assets/{mermaid-parser.core-DrdLA3p0.js → mermaid-parser.core-Bpogunsh.js} +1 -1
  295. package/dist/client/assets/mermaid-parser.core-DBy--Jc0.js +3 -0
  296. package/dist/client/assets/mermaid.core-BeOUPE3Q.js +10 -0
  297. package/dist/client/assets/mindmap-definition-NLK3R4M7-ByVb-0vj.js +96 -0
  298. package/dist/client/assets/{mindmap-definition-YA3MSWOX-DO8NB9VH.js → mindmap-definition-YA3MSWOX-DBZN5_GH.js} +29 -29
  299. package/dist/client/assets/{nginx-BMaDbqW3.js → nginx-8H7HVH4w.js} +1 -1
  300. package/dist/client/assets/packet-AYTQ26CC-CqpSjTWl.js +1 -0
  301. package/dist/client/assets/packet-AYTQ26CC-DvbY8dI6.js +1 -0
  302. package/dist/client/assets/pegDiagram-GJSIUBJH-aost1sSO.js +1 -0
  303. package/dist/client/assets/pegDiagram-XKGWAZYB-DRo8CZu3.js +1 -0
  304. package/dist/client/assets/percentages-LWOC67ZH-VhvllE7L.js +1 -0
  305. package/dist/client/assets/{pica-xkWDouSg.js → pica-BPrp-GK1.js} +1 -1
  306. package/dist/client/assets/pie-DzWLGKAD.js +1 -0
  307. package/dist/client/assets/pie-WAS4IAKB-Bg2eCNl5.js +1 -0
  308. package/dist/client/assets/pie-WAS4IAKB-DWSm9SSD.js +1 -0
  309. package/dist/client/assets/pieDiagram-5QR66LMP-BICdpEuz.js +39 -0
  310. package/dist/client/assets/pieDiagram-E7YTZNPT-CZThaHsc.js +39 -0
  311. package/dist/client/assets/{preload-helper-CtT0-S4g.js → preload-helper-BAlEavIC.js} +1 -1
  312. package/dist/client/assets/preview-render-compiler-ktU0SXxY.js +43 -0
  313. package/dist/client/assets/preview-render-profile-D652PAjA.js +1 -0
  314. package/dist/client/assets/preview-render-worker-BI2bFVqM.js +575 -0
  315. package/dist/client/assets/prod-DU-0VfI7.js +145 -0
  316. package/dist/client/assets/prod-cXUNdmYV.js +1 -0
  317. package/dist/client/assets/{pug-Wky5Dnfy.js → pug-CqqUmdG7.js} +1 -1
  318. package/dist/client/assets/purify.es-go7v6Te-.js +3 -0
  319. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-fJE7iAxt.js → quadrantDiagram-AXDQQJYC-C5iowkl_.js} +3 -3
  320. package/dist/client/assets/quadrantDiagram-O4NWA36T-Bgx5bF97.js +7 -0
  321. package/dist/client/assets/quick-switcher-controller-DSlOwOsU.js +1 -0
  322. package/dist/client/assets/radar-RG4KPBEZ-BfNQUEQy.js +1 -0
  323. package/dist/client/assets/radar-RG4KPBEZ-DxExotg6.js +1 -0
  324. package/dist/client/assets/railroad-74A4TZTK-BaQ6U6eJ.js +1 -0
  325. package/dist/client/assets/railroad-74A4TZTK-FfHmeIQk.js +1 -0
  326. package/dist/client/assets/railroad-abnf-HS5TGJTU-BJ3KZw7J.js +1 -0
  327. package/dist/client/assets/railroad-abnf-HS5TGJTU-CLkdDRsJ.js +1 -0
  328. package/dist/client/assets/railroad-ebnf-LZEXJU2U-B162zvcG.js +1 -0
  329. package/dist/client/assets/railroad-ebnf-LZEXJU2U-DA0sEq7w.js +1 -0
  330. package/dist/client/assets/railroad-peg-WCYAUIDC-CGs5GeJ5.js +1 -0
  331. package/dist/client/assets/railroad-peg-WCYAUIDC-DCmlICzO.js +1 -0
  332. package/dist/client/assets/railroadDiagram-O6MQD6OU-BTt_rKjT.js +1 -0
  333. package/dist/client/assets/railroadDiagram-XR7U4H2S-DbVoNgSz.js +1 -0
  334. package/dist/client/assets/{requirementDiagram-BXWQKSXE-Balm0WW8.js → requirementDiagram-BXWQKSXE-BkvazG7r.js} +1 -1
  335. package/dist/client/assets/requirementDiagram-PLB6GJNP-BT0j9C40.js +84 -0
  336. package/dist/client/assets/sankeyDiagram-IPEJSGJF-X1BCUIrf.js +40 -0
  337. package/dist/client/assets/sankeyDiagram-P5KCCOFB-C_IemB9h.js +40 -0
  338. package/dist/client/assets/sankeyLinkHorizontal-usjP1-Cg.js +1 -0
  339. package/dist/client/assets/sequenceDiagram-PO4LG4MO-B-2QfXhV.js +169 -0
  340. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BL1j3Sn-.js → sequenceDiagram-WJ2MYXX4-CxFBgLGd.js} +3 -3
  341. package/dist/client/assets/{sieve-BAxa3IjF.js → sieve-tLWDfEkZ.js} +1 -1
  342. package/dist/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -1
  343. package/dist/client/assets/sizeCapture-INFHLROL-DrzwYt5z.js +1 -0
  344. package/dist/client/assets/sl-SI-QY5KCFGA-RZhwMpQL.js +8 -0
  345. package/dist/client/assets/solr-B78wSQJQ.js +1 -0
  346. package/dist/client/assets/src-XiVvaevx.js +1 -0
  347. package/dist/client/assets/stateDiagram-D77RDMKH-BaSQ6Owj.js +1 -0
  348. package/dist/client/assets/stateDiagram-v2-GCMORJYK-CsVcfwVp.js +291 -0
  349. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CLlwrdvU.js +1 -0
  350. package/dist/client/assets/sv-SE-O3OFCY3J-DnS86_7q.js +12 -0
  351. package/dist/client/assets/swimlanes-2SLR337P-CnYTVqRX.js +1 -0
  352. package/dist/client/assets/swimlanes-42K2YHIH-CALFEmiS.js +1 -0
  353. package/dist/client/assets/swimlanesDiagram-TC7HE7FX-Bh4tmz27.js +8 -0
  354. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-xhehUG9e.js +8 -0
  355. package/dist/client/assets/th-TH-WLSZUSBX-DHehoYR2.js +1 -0
  356. package/dist/client/assets/{timeline-definition-24CTP7MA-7pch5JAr.js → timeline-definition-24CTP7MA-zse-5Dbm.js} +5 -5
  357. package/dist/client/assets/timeline-definition-EJHVYXUP-BhqPlKkN.js +120 -0
  358. package/dist/client/assets/treeView-Q6P3EWNA-BvHOzbu9.js +1 -0
  359. package/dist/client/assets/treeView-Q6P3EWNA-Cccy0ngL.js +1 -0
  360. package/dist/client/assets/treemap-CxZTjHiH.js +1 -0
  361. package/dist/client/assets/treemap-WGGIJYW6-oety7paS.js +1 -0
  362. package/dist/client/assets/treemap-WGGIJYW6-sMRCjCtX.js +1 -0
  363. package/dist/client/assets/usecaseDiagram-POWQR4AR-DR2LHQYs.js +328 -0
  364. package/dist/client/assets/v4-DDdyfk2q.js +1 -0
  365. package/dist/client/assets/{vault-api-client-QjZ_T03l.js → vault-api-client-BQxLVPeF.js} +1 -1
  366. package/dist/client/assets/vault-paths-BT-6nztu.js +1 -0
  367. package/dist/client/assets/venn.esm-C5rDfA9t.js +7 -0
  368. package/dist/client/assets/vennDiagram-4TSXK5OY-DgHr6cJD.js +28 -0
  369. package/dist/client/assets/vennDiagram-UO4OBE2U-BRwLn2Q1.js +28 -0
  370. package/dist/client/assets/{verilog-7LoJAqYT.js → verilog-CjI9Y6RI.js} +1 -1
  371. package/dist/client/assets/wardley-WFR3VGLG-BdwDpX_I.js +1 -0
  372. package/dist/client/assets/wardley-WFR3VGLG-Y7xty_3m.js +1 -0
  373. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-BbSlUwuM.js → wardleyDiagram-VM6X3IG4-9A60XZis.js} +3 -3
  374. package/dist/client/assets/wardleyDiagram-VNRHLVJA-B_tMcVFG.js +78 -0
  375. package/dist/client/assets/wiki-link-resolver-Dch88erO.js +1 -0
  376. package/dist/client/assets/{worker-engine-m0rlHn8R-eSDcDGEI.js → worker-engine-m0rlHn8R-5h66k403.js} +1 -1
  377. package/dist/client/assets/{workspace-sync-client-D4nblH_2.js → workspace-sync-client-C2pdaQUN.js} +1 -1
  378. package/dist/client/assets/xychartDiagram-PMCCYNJV-fRpZ1MA5.js +7 -0
  379. package/dist/client/assets/xychartDiagram-S5SC5T6Z-D00iy-wB.js +7 -0
  380. package/dist/client/assets/{yaml-9ltHPDNO.js → yaml-BcZaqAz8.js} +1 -1
  381. package/dist/client/assets/{yjs-provider-reset-guard-R43MnLNc.js → yjs-provider-reset-guard-DpntzUDR.js} +1 -1
  382. package/dist/client/drawio-editor.html +6 -5
  383. package/dist/client/excalidraw-editor.html +39 -32
  384. package/dist/client/export-document.html +4 -3
  385. package/dist/client/index.html +21 -14
  386. package/package.json +12 -9
  387. package/src/client/app/drawio-editor.html +1 -0
  388. package/src/client/app/excalidraw-editor.html +1 -0
  389. package/src/client/app/export-document-entry.js +1 -0
  390. package/src/client/app/export-document.html +1 -0
  391. package/src/client/app/index.html +19 -12
  392. package/src/client/application/app-shell/ui-feature-shell.js +20 -1
  393. package/src/client/application/app-shell-elements.js +2 -0
  394. package/src/client/application/diagram-preview-hydrator.js +7 -0
  395. package/src/client/application/mermaid-preview-hydrator.js +89 -3
  396. package/src/client/application/preview-diagram-utils.js +1 -0
  397. package/src/client/application/preview-render-compiler.js +2 -0
  398. package/src/client/application/preview-render-executor.js +4 -1
  399. package/src/client/application/preview-render-profile.js +8 -12
  400. package/src/client/application/preview-renderer.js +3 -0
  401. package/src/client/bootstrap/collabmd-app-shell.js +16 -7
  402. package/src/client/browser-utils.js +1 -1
  403. package/src/client/domain/excalidraw-scene.js +0 -11
  404. package/src/client/domain/file-search.js +1 -0
  405. package/src/client/domain/highlight-runtime.js +30 -3
  406. package/src/client/domain/markdown-math.js +14 -0
  407. package/src/client/export/export-host.js +3 -7
  408. package/src/client/export/export-pipeline.js +208 -21
  409. package/src/client/infrastructure/browser-preferences-port.js +8 -0
  410. package/src/client/infrastructure/editor-session.js +20 -0
  411. package/src/client/infrastructure/editor-view-adapter.js +8 -7
  412. package/src/client/infrastructure/excalidraw-room-client.js +2 -45
  413. package/src/client/infrastructure/git-api-client.js +5 -0
  414. package/src/client/infrastructure/tab-activity-lock.js +8 -4
  415. package/src/client/infrastructure/webmcp-tool-registry.js +12 -5
  416. package/src/client/presentation/bases-preview-controller.js +2 -1
  417. package/src/client/presentation/comment-markdown-renderer.js +2 -0
  418. package/src/client/presentation/comment-ui-controller.js +21 -30
  419. package/src/client/presentation/create-menu-presenter.js +16 -18
  420. package/src/client/presentation/drawio-embed-controller.js +55 -7
  421. package/src/client/presentation/excalidraw-embed-controller.js +11 -3
  422. package/src/client/presentation/file-explorer-controller.js +1 -0
  423. package/src/client/presentation/file-explorer-view.js +32 -2
  424. package/src/client/presentation/file-history-view-controller.js +6 -0
  425. package/src/client/presentation/git-diff-view-controller.js +3 -2
  426. package/src/client/presentation/git-panel-controller.js +6 -5
  427. package/src/client/presentation/image-lightbox-controller.js +7 -6
  428. package/src/client/presentation/outline-controller.js +0 -86
  429. package/src/client/presentation/quick-switcher-controller.js +50 -13
  430. package/src/client/presentation/scroll-sync-controller.js +69 -21
  431. package/src/client/styles/components/navigation.css +2 -2
  432. package/src/client/styles/deferred-collab.css +1 -0
  433. package/src/client/styles/deferred-preview.css +1 -0
  434. package/src/client/styles/features/diagram-preview.css +1 -0
  435. package/src/client/styles/features/preview-markdown.css +4 -4
  436. package/src/client/styles/foundation/themes.css +56 -271
  437. package/src/client/styles/layout/editor-page.css +0 -1
  438. package/src/client/styles/layout/shell.css +6 -0
  439. package/src/client/styles/layout/sidebar.css +3 -0
  440. package/src/client/styles/surfaces/landing-page.css +260 -0
  441. package/src/domain/agent-tool-definitions.js +45 -13
  442. package/src/domain/collabmd-content-capabilities.js +59 -4
  443. package/src/domain/collaboration-protocol.js +2 -0
  444. package/src/domain/markdown-outline.js +35 -0
  445. package/src/server/application/agent-connection-service.js +6 -2
  446. package/src/server/application/agent-content-service.js +124 -56
  447. package/src/server/auth/create-auth-service.js +40 -12
  448. package/src/server/auth/session-cookie.js +49 -38
  449. package/src/server/config/env.js +1 -1
  450. package/src/server/domain/backlink-index.js +1 -11
  451. package/src/server/domain/bases/base-query-results.js +7 -3
  452. package/src/server/domain/bases/base-query-service.js +2 -7
  453. package/src/server/domain/collaboration/collaboration-room.js +54 -16
  454. package/src/server/domain/docx-exporter.js +256 -2
  455. package/src/server/domain/hosted-workspace-contract.js +7 -0
  456. package/src/server/domain/hosted-workspace.js +29 -62
  457. package/src/server/domain/ripgrep-search-service.js +44 -28
  458. package/src/server/infrastructure/git/diff-service.js +15 -11
  459. package/src/server/infrastructure/git/git-service.js +4 -0
  460. package/src/server/infrastructure/git/image-mime.js +4 -3
  461. package/src/server/infrastructure/git/status-service.js +10 -6
  462. package/src/server/infrastructure/http/create-git-api-query-handler.js +25 -0
  463. package/src/server/infrastructure/http/create-vault-api-query-handler.js +13 -53
  464. package/src/server/infrastructure/http/http-response.js +2 -0
  465. package/src/server/infrastructure/persistence/hosted-metadata-store.js +42 -5
  466. package/src/server/infrastructure/persistence/path-utils.js +23 -3
  467. package/src/server/infrastructure/persistence/pull-backup-store.js +52 -42
  468. package/src/server/infrastructure/persistence/sidecar-store.js +7 -4
  469. package/src/server/infrastructure/persistence/vault-file-store.js +55 -168
  470. package/src/server/infrastructure/plantuml/plantuml-renderer.js +33 -0
  471. package/src/server/infrastructure/structurizr/structurizr-workspace-service.js +24 -10
  472. package/src/server/infrastructure/websocket/attach-collaboration-gateway.js +7 -3
  473. package/src/server/infrastructure/websocket/client-socket-session.js +32 -4
  474. package/src/server/infrastructure/workspace/file-system-sync-service.js +4 -2
  475. package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-Crf9Y3Q6.js +0 -1
  476. package/dist/client/assets/abnfDiagram-VCTEODGH-PuinKbSQ.js +0 -1
  477. package/dist/client/assets/architecture-7GRP2DOG-BMOPAkUC.js +0 -1
  478. package/dist/client/assets/architectureDiagram-5GKGNRK7-46hPkrZv.js +0 -36
  479. package/dist/client/assets/blockDiagram-I7D4REHJ-C1S5Bzf8.js +0 -129
  480. package/dist/client/assets/channel-jwdhnPiV.js +0 -1
  481. package/dist/client/assets/chunk-2E4U76K2-Ba8Wf22k.js +0 -1
  482. package/dist/client/assets/chunk-4HAMMTFA-Ht-73lsT.js +0 -62
  483. package/dist/client/assets/chunk-5XKZK2GL-D4UAZSOJ.js +0 -1
  484. package/dist/client/assets/chunk-75Z2AOVW-B2cZexqK.js +0 -2
  485. package/dist/client/assets/chunk-DU6HZSFF-C6d6PJfE.js +0 -127
  486. package/dist/client/assets/chunk-GMAD6QVW-DUfjx_d5.js +0 -72
  487. package/dist/client/assets/chunk-GVQU2GXP-D1l7oRGR.js +0 -1
  488. package/dist/client/assets/chunk-L3NEJ4N5-BmCVn4y-.js +0 -1
  489. package/dist/client/assets/chunk-OSK3NFVY-CWHXAmfx.js +0 -10
  490. package/dist/client/assets/chunk-POPQ4Y6H-B5yJIrZE.js +0 -1
  491. package/dist/client/assets/chunk-PWAF6VOD-B3gML4ps.js +0 -1
  492. package/dist/client/assets/chunk-TLUHSLCS-Yl7B0Vrz.js +0 -1
  493. package/dist/client/assets/chunk-ZNVOA63L-BmCQjhx-.js +0 -40
  494. package/dist/client/assets/classDiagram-ZZMXUADV-BRw9vo8U.js +0 -1
  495. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BRw9vo8U.js +0 -1
  496. package/dist/client/assets/comment-markdown-renderer-B9_vPc3F.js +0 -1
  497. package/dist/client/assets/comment-thread-store-NNHqRVsX.js +0 -1
  498. package/dist/client/assets/cose-bilkent-JH36ORCC-Cm_QF_yb.js +0 -1
  499. package/dist/client/assets/cynefin-OW5HDTMX-7tP7QfM3.js +0 -1
  500. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BRoCEoZM.js +0 -62
  501. package/dist/client/assets/cytoscape.esm-B-NFISlW.js +0 -321
  502. package/dist/client/assets/dagre-PrKaheQc.js +0 -1
  503. package/dist/client/assets/deferred-collab-rBe4nuQ2.css +0 -1
  504. package/dist/client/assets/deferred-preview-pe7Iwwx3.css +0 -1
  505. package/dist/client/assets/diagram-UQ7AKVKN-JevUZuYi.js +0 -41
  506. package/dist/client/assets/diagram-VX7I27RA-pSD4HMh1.js +0 -24
  507. package/dist/client/assets/diagram-Z3DM3KII-D8r1_CIb.js +0 -24
  508. package/dist/client/assets/direct-engine-DdrQKpgq-B5zIoeQw.js +0 -5
  509. package/dist/client/assets/dist-B3HdUPsK.js +0 -1
  510. package/dist/client/assets/dist-BIRygGYH.js +0 -1
  511. package/dist/client/assets/dist-BPyOlNLY.js +0 -2
  512. package/dist/client/assets/dist-ByhQbe-x.js +0 -1
  513. package/dist/client/assets/dist-C5NkYKAa.js +0 -1
  514. package/dist/client/assets/dist-CEirJSxk.js +0 -1
  515. package/dist/client/assets/dist-CRnJ0D9h.js +0 -1
  516. package/dist/client/assets/dist-CyNrloSI.js +0 -1
  517. package/dist/client/assets/dist-D60_kdpQ.js +0 -1
  518. package/dist/client/assets/dist-Hdhj3L3t.js +0 -1
  519. package/dist/client/assets/dist-gRRhmB-2.js +0 -6
  520. package/dist/client/assets/dist-kWb2d1CH.js +0 -1
  521. package/dist/client/assets/dist-l-56SowH.js +0 -19
  522. package/dist/client/assets/dist-sLzRQQk7.js +0 -1
  523. package/dist/client/assets/ebnfDiagram-PWID7BFC-UJ0Fz5ci.js +0 -1
  524. package/dist/client/assets/editor-session-4Bn81iWm.js +0 -14
  525. package/dist/client/assets/embedded-editor-base-jK221GC8.css +0 -1
  526. package/dist/client/assets/eventmodeling-NTZA5JFV-BR2FzK4R.js +0 -1
  527. package/dist/client/assets/excalidrawEditor-WIuguTz7.js +0 -9
  528. package/dist/client/assets/export-page-AN-wI5p4.js +0 -56
  529. package/dist/client/assets/exportDocument-B7IagJhQ.css +0 -1
  530. package/dist/client/assets/exportDocument-B9xNKpQe.js +0 -2
  531. package/dist/client/assets/file-search-DDLyyLDU.js +0 -1
  532. package/dist/client/assets/flowDiagram-HODETNUW-kb1lUSBo.js +0 -1
  533. package/dist/client/assets/forth-Cezjo90N.js +0 -1
  534. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BBNzDfaV.js +0 -292
  535. package/dist/client/assets/gitGraph-4MIJSDKK-DYlXv_yJ.js +0 -1
  536. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-Csf0Dm_1.js +0 -106
  537. package/dist/client/assets/graphlib-DS17s2tU.js +0 -1
  538. package/dist/client/assets/image-2QKV3NAF-BUbX0y5Y.js +0 -1
  539. package/dist/client/assets/index-BAmZnTFV.css +0 -1
  540. package/dist/client/assets/index-mWiw418b.js +0 -1111
  541. package/dist/client/assets/info-A6RAGUB7-BlU-8_xu.js +0 -1
  542. package/dist/client/assets/infoDiagram-27XIBGKW-Bzy6kCbb.js +0 -2
  543. package/dist/client/assets/javascript-BWjar7HY.js +0 -1
  544. package/dist/client/assets/javascript-D-FtdkNC.js +0 -1
  545. package/dist/client/assets/jsx-runtime-BpzPEenQ.js +0 -1
  546. package/dist/client/assets/line-DSWLHgpx.js +0 -1
  547. package/dist/client/assets/linear-n-3HSMUF.js +0 -1
  548. package/dist/client/assets/markdown-it-CocJWnjv.js +0 -13
  549. package/dist/client/assets/mermaid.core-C_FK-7n4.js +0 -1
  550. package/dist/client/assets/mermaid.core-D0cMM4Rl.js +0 -10
  551. package/dist/client/assets/packet-AYTQ26CC-BSJEH9Lb.js +0 -1
  552. package/dist/client/assets/pegDiagram-XKGWAZYB-DS6Ab21R.js +0 -1
  553. package/dist/client/assets/percentages-Q7USCRWZ-DWE6uvTs.js +0 -1
  554. package/dist/client/assets/pie-WAS4IAKB-qxv01Y8W.js +0 -1
  555. package/dist/client/assets/pieDiagram-E7YTZNPT-BbFe6Tgs.js +0 -39
  556. package/dist/client/assets/preview-render-compiler-C_7J7eia.js +0 -43
  557. package/dist/client/assets/preview-render-compiler-DzJ1KR_M.js +0 -1
  558. package/dist/client/assets/preview-render-worker-1DoIDllV.js +0 -59
  559. package/dist/client/assets/prod-D5TxmmoB.js +0 -1
  560. package/dist/client/assets/prod-pbFU4TaM.js +0 -145
  561. package/dist/client/assets/quick-switcher-controller-CUajuy78.js +0 -1
  562. package/dist/client/assets/radar-RG4KPBEZ-B6h6pWOs.js +0 -1
  563. package/dist/client/assets/railroad-74A4TZTK-CGtTWdGc.js +0 -1
  564. package/dist/client/assets/railroad-abnf-HS5TGJTU-Cq7y22IA.js +0 -1
  565. package/dist/client/assets/railroad-ebnf-LZEXJU2U-V0aQVv9m.js +0 -1
  566. package/dist/client/assets/railroad-peg-WCYAUIDC-BQiIsX_p.js +0 -1
  567. package/dist/client/assets/railroadDiagram-O6MQD6OU-CUQKqbCK.js +0 -1
  568. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CcbMqrlQ.js +0 -40
  569. package/dist/client/assets/sl-SI-JRML4FIH-D53L_0S2.js +0 -6
  570. package/dist/client/assets/solr-BBopId9w.js +0 -1
  571. package/dist/client/assets/src-oBChb5qS.js +0 -1
  572. package/dist/client/assets/stateDiagram-D77RDMKH-DNi924hh.js +0 -1
  573. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-C62JEwak.js +0 -1
  574. package/dist/client/assets/sv-SE-4ZPKFFXF-DT-G7RCI.js +0 -12
  575. package/dist/client/assets/swimlanes-42K2YHIH-ColgjSH4.js +0 -1
  576. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-B9UZhEj4.js +0 -8
  577. package/dist/client/assets/th-TH-P7CTMGDK-6sy0NO7K.js +0 -1
  578. package/dist/client/assets/treeView-Q6P3EWNA-BTTYcvrF.js +0 -1
  579. package/dist/client/assets/treemap-WGGIJYW6-Cg7tyfH8.js +0 -1
  580. package/dist/client/assets/vennDiagram-4TSXK5OY-C5taziCX.js +0 -34
  581. package/dist/client/assets/wardley-WFR3VGLG-C6N1rULY.js +0 -1
  582. package/dist/client/assets/wiki-link-resolver-C2P_WmTV.js +0 -1
  583. package/dist/client/assets/xychartDiagram-S5SC5T6Z-D06X1arY.js +0 -7
  584. package/src/server/domain/collaboration/protocol.js +0 -6
@@ -26,7 +26,6 @@ function createBootstrapPayload({
26
26
  format,
27
27
  jobId,
28
28
  markdownText = '',
29
- theme = 'light',
30
29
  title = '',
31
30
  }) {
32
31
  return {
@@ -39,7 +38,8 @@ function createBootstrapPayload({
39
38
  jobId,
40
39
  markdownText: String(markdownText ?? ''),
41
40
  source: EXPORT_HOST_SOURCE,
42
- theme: theme === 'dark' ? 'dark' : 'light',
41
+ // Exports always render light so HTML, DOCX, and PDF output stays consistent.
42
+ theme: 'light',
43
43
  title: String(title ?? ''),
44
44
  type: 'bootstrap',
45
45
  };
@@ -154,11 +154,7 @@ async function startExport(payload) {
154
154
  notifyError: true,
155
155
  });
156
156
  }, EXPORT_JOB_CLOSE_POLL_MS),
157
- payload: createBootstrapPayload({
158
- ...payload,
159
- jobId,
160
- theme: document.documentElement.dataset.theme,
161
- }),
157
+ payload: createBootstrapPayload({ ...payload, jobId }),
162
158
  timeoutId: window.setTimeout(() => {
163
159
  finishPendingJob(jobId, {
164
160
  message: 'Export timed out before it completed',
@@ -1,5 +1,3 @@
1
- import { exportToSvg as exportExcalidrawToSvg } from '@excalidraw/excalidraw';
2
-
3
1
  import baseStyles from '../styles/base.css?inline';
4
2
  import tokenStyles from '../styles/foundation/tokens.css?inline';
5
3
  import themeStyles from '../styles/foundation/themes.css?inline';
@@ -7,18 +5,39 @@ import previewStyles from '../styles/features/preview-markdown.css?inline';
7
5
  import highlightOverrideStyles from '../styles/overrides/highlightjs.css?inline';
8
6
  import exportStyles from '../styles/export-document.css?inline';
9
7
  import highlightStyles from '../assets/vendor/highlight/github.min.css?inline';
8
+ import katexExportCss from 'katex/dist/katex.min.css?inline';
9
+ import katexFontAmsRegular from 'katex/dist/fonts/KaTeX_AMS-Regular.woff2?url';
10
+ import katexFontCaligraphicBold from 'katex/dist/fonts/KaTeX_Caligraphic-Bold.woff2?url';
11
+ import katexFontCaligraphicRegular from 'katex/dist/fonts/KaTeX_Caligraphic-Regular.woff2?url';
12
+ import katexFontFrakturBold from 'katex/dist/fonts/KaTeX_Fraktur-Bold.woff2?url';
13
+ import katexFontFrakturRegular from 'katex/dist/fonts/KaTeX_Fraktur-Regular.woff2?url';
14
+ import katexFontMainBold from 'katex/dist/fonts/KaTeX_Main-Bold.woff2?url';
15
+ import katexFontMainBoldItalic from 'katex/dist/fonts/KaTeX_Main-BoldItalic.woff2?url';
16
+ import katexFontMainItalic from 'katex/dist/fonts/KaTeX_Main-Italic.woff2?url';
17
+ import katexFontMainRegular from 'katex/dist/fonts/KaTeX_Main-Regular.woff2?url';
18
+ import katexFontMathBoldItalic from 'katex/dist/fonts/KaTeX_Math-BoldItalic.woff2?url';
19
+ import katexFontMathItalic from 'katex/dist/fonts/KaTeX_Math-Italic.woff2?url';
20
+ import katexFontSansSerifBold from 'katex/dist/fonts/KaTeX_SansSerif-Bold.woff2?url';
21
+ import katexFontSansSerifItalic from 'katex/dist/fonts/KaTeX_SansSerif-Italic.woff2?url';
22
+ import katexFontSansSerifRegular from 'katex/dist/fonts/KaTeX_SansSerif-Regular.woff2?url';
23
+ import katexFontScriptRegular from 'katex/dist/fonts/KaTeX_Script-Regular.woff2?url';
24
+ import katexFontSize1Regular from 'katex/dist/fonts/KaTeX_Size1-Regular.woff2?url';
25
+ import katexFontSize2Regular from 'katex/dist/fonts/KaTeX_Size2-Regular.woff2?url';
26
+ import katexFontSize3Regular from 'katex/dist/fonts/KaTeX_Size3-Regular.woff2?url';
27
+ import katexFontSize4Regular from 'katex/dist/fonts/KaTeX_Size4-Regular.woff2?url';
28
+ import katexFontTypewriterRegular from 'katex/dist/fonts/KaTeX_Typewriter-Regular.woff2?url';
10
29
  import {
11
30
  encodeSvgDataUrl,
12
31
  loadImage,
13
32
  resolveSvgDimensions,
14
33
  sanitizeSvgMarkup,
15
34
  } from '../application/preview-diagram-utils.js';
16
- import { compilePreviewDocument } from '../application/preview-render-compiler.js';
17
35
  import { isMarkdownFilePath, stripVaultFileExtension } from '../../domain/file-kind.js';
18
36
  import { resolveVaultRelativePath } from '../../domain/vault-paths.js';
19
37
  import { resolveWikiTargetPath } from '../../domain/wiki-link-resolver.js';
20
38
  import { createExcalidrawExportOptions, parseSceneJson } from '../domain/excalidraw-scene.js';
21
39
  import { escapeHtml } from '../domain/vault-utils.js';
40
+ import { hasRenderedMath } from '../domain/markdown-math.js';
22
41
  import { downloadBlob } from '../browser-utils.js';
23
42
  import { resolveApiUrl, resolveAppUrl } from '../infrastructure/runtime-config.js';
24
43
  import { parseApiResponse } from '../infrastructure/api-client-utils.js';
@@ -40,6 +59,7 @@ const EXPORT_MERMAID_CONFIG = Object.freeze({
40
59
  const EXPORT_ASSET_FETCH_TIMEOUT_MS = 10_000;
41
60
  const EXPORT_ASSET_MAX_BYTES = 10 * 1024 * 1024;
42
61
  const EXPORT_RENDER_SETTLE_TIMEOUT_MS = 10_000;
62
+ const EXPORT_PRINT_FONT_TIMEOUT_MS = 3000;
43
63
  const VIDEO_POSTER_CAPTURE_TIMEOUT_MS = 10_000;
44
64
  const VIDEO_POSTER_CAPTURE_SEEK_SECONDS = 1;
45
65
  const DOCX_COMPATIBLE_IMAGE_MIME_TYPES = new Set([
@@ -71,7 +91,63 @@ const HTML_EXPORT_STYLES = [
71
91
  }`,
72
92
  ].join('\n');
73
93
 
94
+ const KATEX_EXPORT_FONT_URLS = {
95
+ 'KaTeX_AMS-Regular.woff2': katexFontAmsRegular,
96
+ 'KaTeX_Caligraphic-Bold.woff2': katexFontCaligraphicBold,
97
+ 'KaTeX_Caligraphic-Regular.woff2': katexFontCaligraphicRegular,
98
+ 'KaTeX_Fraktur-Bold.woff2': katexFontFrakturBold,
99
+ 'KaTeX_Fraktur-Regular.woff2': katexFontFrakturRegular,
100
+ 'KaTeX_Main-Bold.woff2': katexFontMainBold,
101
+ 'KaTeX_Main-BoldItalic.woff2': katexFontMainBoldItalic,
102
+ 'KaTeX_Main-Italic.woff2': katexFontMainItalic,
103
+ 'KaTeX_Main-Regular.woff2': katexFontMainRegular,
104
+ 'KaTeX_Math-BoldItalic.woff2': katexFontMathBoldItalic,
105
+ 'KaTeX_Math-Italic.woff2': katexFontMathItalic,
106
+ 'KaTeX_SansSerif-Bold.woff2': katexFontSansSerifBold,
107
+ 'KaTeX_SansSerif-Italic.woff2': katexFontSansSerifItalic,
108
+ 'KaTeX_SansSerif-Regular.woff2': katexFontSansSerifRegular,
109
+ 'KaTeX_Script-Regular.woff2': katexFontScriptRegular,
110
+ 'KaTeX_Size1-Regular.woff2': katexFontSize1Regular,
111
+ 'KaTeX_Size2-Regular.woff2': katexFontSize2Regular,
112
+ 'KaTeX_Size3-Regular.woff2': katexFontSize3Regular,
113
+ 'KaTeX_Size4-Regular.woff2': katexFontSize4Regular,
114
+ 'KaTeX_Typewriter-Regular.woff2': katexFontTypewriterRegular,
115
+ };
116
+
117
+ // Standalone HTML exports must carry KaTeX fonts as data URLs to render
118
+ // math offline. Fonts load once per session, only for math exports.
119
+ let katexExportStylesPromise = null;
120
+
121
+ // Bundler output rewrites the stylesheet's font paths (hashed names, absolute
122
+ // URLs, sometimes pre-inlined), so match each font by basename instead.
123
+ function loadKatexExportStyles() {
124
+ return (katexExportStylesPromise ??= (async () => {
125
+ let css = katexExportCss;
126
+ await Promise.all(
127
+ Object.entries(KATEX_EXPORT_FONT_URLS).map(async ([fontFile, fontUrl]) => {
128
+ const base = fontFile
129
+ .replace(/\.woff2$/, '')
130
+ .replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
131
+ const pattern = new RegExp(`url\\((?!data:)[^)]*${base}[^)]*?\\.woff2\\)`, 'g');
132
+ if (!pattern.test(css)) {
133
+ return;
134
+ }
135
+
136
+ const response = await fetch(fontUrl);
137
+ const bytes = new Uint8Array(await response.arrayBuffer());
138
+ let binary = '';
139
+ for (let index = 0; index < bytes.length; index += 0x8000) {
140
+ binary += String.fromCharCode(...bytes.subarray(index, index + 0x8000));
141
+ }
142
+ css = css.replace(pattern, `url(data:font/woff2;base64,${btoa(binary)})`);
143
+ }),
144
+ );
145
+ return css.replace(/,url\((?!data:)[^)]+?\)\s*format\("(?:woff|truetype)"\)/gu, '');
146
+ })());
147
+ }
148
+
74
149
  let mermaidLoaderPromise = null;
150
+ let excalidrawLoaderPromise = null;
75
151
  let assetCounter = 0;
76
152
 
77
153
  function createAssetId(prefix = 'asset') {
@@ -152,6 +228,47 @@ function replaceChildrenFromHtml(target, html) {
152
228
  target.replaceChildren(...parsed.body.childNodes);
153
229
  }
154
230
 
231
+ const DOCX_WHITESPACE_BLOCK_TAGS = new Set([
232
+ 'BLOCKQUOTE', 'BR', 'DD', 'DIV', 'DL', 'DT', 'FIGURE', 'H1', 'H2', 'H3',
233
+ 'H4', 'H5', 'H6', 'HR', 'LI', 'OL', 'P', 'PRE', 'SECTION', 'TABLE',
234
+ 'TBODY', 'TD', 'TH', 'THEAD', 'TR', 'UL',
235
+ ]);
236
+
237
+ // The converter turns every surviving whitespace text node into document
238
+ // content, so inter-block newlines become phantom empty paragraphs and empty
239
+ // bullets. Collapse insignificant whitespace the way HTML rendering does.
240
+ function normalizeDocxWhitespace(root) {
241
+ const walker = root.ownerDocument.createTreeWalker(root, NodeFilter.SHOW_TEXT);
242
+ const whitespaceNodes = [];
243
+ while (walker.nextNode()) {
244
+ if (/^\s*$/.test(walker.currentNode.data)) {
245
+ whitespaceNodes.push(walker.currentNode);
246
+ }
247
+ }
248
+
249
+ for (const node of whitespaceNodes) {
250
+ if (node.parentElement?.closest('pre,textarea')) {
251
+ continue;
252
+ }
253
+
254
+ const siblings = node.parentElement ? Array.from(node.parentElement.childNodes) : [];
255
+ if (siblings[0] === node || siblings[siblings.length - 1] === node) {
256
+ node.remove();
257
+ continue;
258
+ }
259
+
260
+ const previousIsBlock = !!node.previousElementSibling
261
+ && DOCX_WHITESPACE_BLOCK_TAGS.has(node.previousElementSibling.tagName);
262
+ const nextIsBlock = !!node.nextElementSibling
263
+ && DOCX_WHITESPACE_BLOCK_TAGS.has(node.nextElementSibling.tagName);
264
+ if (previousIsBlock || nextIsBlock) {
265
+ node.remove();
266
+ } else {
267
+ node.data = ' ';
268
+ }
269
+ }
270
+ }
271
+
155
272
  function encodeSvgBase64DataUrl(svgMarkup) {
156
273
  const bytes = new TextEncoder().encode(String(svgMarkup ?? ''));
157
274
  const chunkSize = 0x8000;
@@ -746,6 +863,23 @@ async function ensureMermaidRuntime() {
746
863
  return mermaidLoaderPromise;
747
864
  }
748
865
 
866
+ async function ensureExcalidrawRuntime() {
867
+ if (excalidrawLoaderPromise) {
868
+ return excalidrawLoaderPromise;
869
+ }
870
+
871
+ excalidrawLoaderPromise = import('@excalidraw/excalidraw').then((module) => {
872
+ const exportToSvg = module?.exportToSvg;
873
+ if (typeof exportToSvg !== 'function') {
874
+ throw new Error('Excalidraw runtime failed to initialize');
875
+ }
876
+
877
+ return exportToSvg;
878
+ });
879
+
880
+ return excalidrawLoaderPromise;
881
+ }
882
+
749
883
  function prepareMermaidSource(source) {
750
884
  let text = String(source ?? '');
751
885
 
@@ -817,7 +951,8 @@ async function renderPlantUmlToSvgMarkup(source) {
817
951
  async function renderExcalidrawToSvgMarkup(filePath) {
818
952
  const rawScene = await fetchTextFile(filePath);
819
953
  const scene = parseSceneJson(rawScene);
820
- const svgElement = await exportExcalidrawToSvg(createExcalidrawExportOptions(scene));
954
+ const exportToSvg = await ensureExcalidrawRuntime();
955
+ const svgElement = await exportToSvg(createExcalidrawExportOptions(scene));
821
956
  return normalizeExportSvgMarkup(svgElement.outerHTML, { padding: 24 });
822
957
  }
823
958
 
@@ -1236,6 +1371,7 @@ export async function prepareExportSnapshot({
1236
1371
  warnings: [],
1237
1372
  };
1238
1373
 
1374
+ const { compilePreviewDocument } = await import('../application/preview-render-compiler.js');
1239
1375
  const compiled = compilePreviewDocument({
1240
1376
  attachmentApiPath: resolveApiUrl('/attachment'),
1241
1377
  fileList,
@@ -1468,6 +1604,46 @@ export function buildDocxHtmlDocument(snapshot) {
1468
1604
  const template = document.createElement('template');
1469
1605
  replaceChildrenFromHtml(template.content, snapshot.html);
1470
1606
 
1607
+
1608
+ normalizeDocxWhitespace(template.content);
1609
+
1610
+ // The converter drops label content, which would erase every task list
1611
+ // item. Flatten task labels to ballot-box text first.
1612
+ Array.from(template.content.querySelectorAll('label.task-list-label')).forEach((label) => {
1613
+ const checkbox = label.querySelector('input[data-task-checkbox]');
1614
+ const box = checkbox?.hasAttribute('checked') ? '\u2611' : '\u2610';
1615
+ const kept = Array.from(label.childNodes).filter((node) => node.tagName !== 'INPUT');
1616
+ if (kept[0]?.nodeType === 3) {
1617
+ kept[0].textContent = kept[0].textContent.replace(/^\s+/, '');
1618
+ }
1619
+ label.replaceWith(`${box} `, ...kept);
1620
+ });
1621
+
1622
+ // KaTeX lays math out as positioned spans that read out of order as
1623
+ // plain text (a stacked fraction extracts as "ba" instead of "a/b").
1624
+ // The server swaps these markers for native OMML equations, so Word
1625
+ // renders them as real editable math.
1626
+ // A lone math block inside a list item would detach from its bullet,
1627
+ // so hoist the marker to keep the equation on the bullet paragraph.
1628
+ Array.from(template.content.querySelectorAll('.katex')).forEach((mathElement, docxMathIndex) => {
1629
+ const mathml = mathElement.querySelector('.katex-mathml')?.innerHTML ?? '';
1630
+ if (!mathml.includes('<math')) {
1631
+ return;
1632
+ }
1633
+
1634
+ const displayWrapper = mathElement.parentElement;
1635
+ let replaceTarget = displayWrapper?.classList?.contains('katex-display') ? displayWrapper : mathElement;
1636
+ const blockParagraph = mathElement.closest('p.katex-block');
1637
+ if (blockParagraph && blockParagraph.parentElement?.tagName === 'LI') {
1638
+ replaceTarget = blockParagraph;
1639
+ }
1640
+
1641
+ const marker = template.content.ownerDocument.createElement('span');
1642
+ marker.className = 'export-math';
1643
+ marker.dataset.mml = encodeURIComponent(mathml);
1644
+ marker.textContent = `COLLABMD-MATH-${docxMathIndex}`;
1645
+ replaceTarget.replaceWith(marker);
1646
+ });
1471
1647
  Array.from(template.content.querySelectorAll('.table-wrapper')).forEach((wrapper) => {
1472
1648
  const table = wrapper.querySelector(':scope > table');
1473
1649
  if (!table) {
@@ -1595,12 +1771,11 @@ export function buildDocxHtmlDocument(snapshot) {
1595
1771
  }));
1596
1772
  });
1597
1773
 
1598
- return `<!DOCTYPE html>
1599
- <html lang="en">
1600
- <head>
1601
- <meta charset="UTF-8">
1602
- <title>${snapshot.title}</title>
1603
- <style>
1774
+ // Compact wrapper: with HTML minification skipped, the converter turns
1775
+ // every surviving whitespace text node into document content, so the
1776
+ // doctype and any inter-tag whitespace here would become phantom empty
1777
+ // paragraphs. Body content is normalized by normalizeDocxWhitespace above.
1778
+ return `<html lang="en"><head><meta charset="UTF-8"><title>${escapeHtml(snapshot.title)}</title><style>
1604
1779
  body { font-family: Arial, sans-serif; color: #111827; line-height: 1.6; }
1605
1780
  main { max-width: 760px; margin: 0 auto; }
1606
1781
  h1, h2, h3, h4, h5, h6 { color: #111827; margin: 1.3em 0 0.6em; line-height: 1.2; }
@@ -1623,15 +1798,10 @@ export function buildDocxHtmlDocument(snapshot) {
1623
1798
  .export-video-poster-meta { display: block; color: #6b7280; font-size: 12px; margin-top: 4px; }
1624
1799
  .export-video-link { display: block; margin-top: 8px; word-break: break-word; }
1625
1800
  .export-warning { color: #b45309; }
1626
- </style>
1627
- </head>
1628
- <body>
1629
- <main>${template.innerHTML}</main>
1630
- </body>
1631
- </html>`;
1801
+ </style></head><body><main>${template.innerHTML}</main></body></html>`;
1632
1802
  }
1633
1803
 
1634
- export function buildHtmlDocument(snapshot) {
1804
+ export function buildHtmlDocument(snapshot, extraStyles = '') {
1635
1805
  const template = document.createElement('template');
1636
1806
  replaceChildrenFromHtml(template.content, snapshot.html);
1637
1807
  Array.from(template.content.querySelectorAll('[data-export-docx-src]')).forEach((element) => {
@@ -1645,7 +1815,7 @@ export function buildHtmlDocument(snapshot) {
1645
1815
  <meta charset="UTF-8">
1646
1816
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
1647
1817
  <title>${escapeHtml(snapshot.title)}</title>
1648
- <style>${HTML_EXPORT_STYLES.replace(/<\/style/giu, '<\\/style')}</style>
1818
+ <style>${HTML_EXPORT_STYLES.replace(/<\/style/giu, '<\\/style')}${extraStyles.replace(/<\/style/giu, '<\\/style')}</style>
1649
1819
  </head>
1650
1820
  <body data-theme="${theme}">
1651
1821
  <main class="export-page-shell">
@@ -1655,9 +1825,10 @@ export function buildHtmlDocument(snapshot) {
1655
1825
  </html>`;
1656
1826
  }
1657
1827
 
1658
- export function htmlAdapter(snapshot) {
1828
+ export async function htmlAdapter(snapshot) {
1829
+ const mathStyles = hasRenderedMath(snapshot.html) ? await loadKatexExportStyles() : '';
1659
1830
  downloadBlob(
1660
- new Blob([buildHtmlDocument(snapshot)], { type: 'text/html;charset=utf-8' }),
1831
+ new Blob([buildHtmlDocument(snapshot, mathStyles)], { type: 'text/html;charset=utf-8' }),
1661
1832
  `${createDocumentTitle(snapshot.filePath, snapshot.title)}.html`,
1662
1833
  { removeDelayMs: 0, revokeDelayMs: 1000 },
1663
1834
  );
@@ -1688,10 +1859,26 @@ export async function docxAdapter(snapshot) {
1688
1859
  });
1689
1860
  }
1690
1861
 
1862
+ // document.fonts.ready can resolve before lazy KaTeX faces start loading,
1863
+ // which prints blank glyphs. Force-load the families and bound the wait so
1864
+ // a missing font cannot hang the export.
1865
+ async function waitForKatexPrintFonts() {
1866
+ if (!document.fonts) {
1867
+ return;
1868
+ }
1869
+
1870
+ const families = [...new Set(Object.keys(KATEX_EXPORT_FONT_URLS).map((file) => file.replace(/-[^-]+\.woff2$/u, '')))];
1871
+ const loads = families.map((family) => document.fonts.load(`16px "${family}"`).catch(() => []));
1872
+ await Promise.race([
1873
+ Promise.allSettled(loads),
1874
+ new Promise((resolve) => window.setTimeout(resolve, EXPORT_PRINT_FONT_TIMEOUT_MS)),
1875
+ ]);
1876
+ }
1877
+
1691
1878
  export async function printPdfAdapter() {
1879
+ await waitForKatexPrintFonts();
1692
1880
  await waitForAnimationFrame();
1693
1881
  await waitForAnimationFrame();
1694
-
1695
1882
  await new Promise((resolve) => {
1696
1883
  const timeoutId = window.setTimeout(resolve, 1500);
1697
1884
  const handleAfterPrint = () => {
@@ -62,6 +62,14 @@ export class BrowserPreferencesPort {
62
62
  writeStorage(this.storage, this.lineWrappingKey, String(enabled));
63
63
  }
64
64
 
65
+ getCursorNamesVisible() {
66
+ return readStorage(this.storage, 'collabmd-editor-cursor-names', null) !== 'false';
67
+ }
68
+
69
+ setCursorNamesVisible(visible) {
70
+ writeStorage(this.storage, 'collabmd-editor-cursor-names', String(visible));
71
+ }
72
+
65
73
  getVimModeEnabled() {
66
74
  return readStorage(this.storage, this.vimModeKey, null) === 'true';
67
75
  }
@@ -1,5 +1,7 @@
1
1
  import * as Y from 'yjs';
2
2
 
3
+ import { createEditableContentRevision } from '../../domain/editable-content-revision.js';
4
+
3
5
  import { CommentThreadStore } from './comment-thread-store.js';
4
6
  import { EditorCollaborationClient } from './editor-collaboration-client.js';
5
7
  import { EditorViewAdapter } from './editor-view-adapter.js';
@@ -172,6 +174,24 @@ export class EditorSession {
172
174
  return this.collaborationClient.ytext;
173
175
  }
174
176
 
177
+ async getAgentContext() {
178
+ const state = this.viewAdapter.getState();
179
+ if (!this.isInitialSyncComplete() || !state || state.doc.length > 1_000_000) return null;
180
+ const { from, to } = state.selection.main;
181
+ const end = to > from ? to - 1 : to;
182
+ return {
183
+ localRevision: await createEditableContentRevision(state.doc.toString()),
184
+ selection: {
185
+ endLine: state.doc.lineAt(end).number,
186
+ from,
187
+ startLine: state.doc.lineAt(from).number,
188
+ text: state.doc.sliceString(from, Math.min(to, from + 2000)),
189
+ to,
190
+ truncated: to - from > 2000,
191
+ },
192
+ };
193
+ }
194
+
175
195
  getCurrentSelectionLineRange() {
176
196
  return this.viewAdapter.getCurrentSelectionLineRange();
177
197
  }
@@ -13,6 +13,7 @@ import {
13
13
  defaultHighlightStyle,
14
14
  foldGutter,
15
15
  foldKeymap,
16
+ forceParsing,
16
17
  indentOnInput,
17
18
  syntaxHighlighting,
18
19
  } from '@codemirror/language';
@@ -251,9 +252,6 @@ function createEditorTheme(theme) {
251
252
  const selectionBackground = theme === 'dark'
252
253
  ? 'oklch(from var(--color-primary) l c h / 0.4)'
253
254
  : 'oklch(from var(--color-primary) l c h / 0.26)';
254
- const selectionBorder = theme === 'dark'
255
- ? 'oklch(from var(--color-primary) l c h / 0.65)'
256
- : 'oklch(from var(--color-primary) l c h / 0.5)';
257
255
  const caretColor = theme === 'dark'
258
256
  ? 'color-mix(in oklab, var(--color-primary) 78%, white)'
259
257
  : 'color-mix(in oklab, var(--color-primary) 84%, black)';
@@ -303,6 +301,10 @@ function createEditorTheme(theme) {
303
301
  backgroundColor: activeLineBackground,
304
302
  boxShadow: `inset 3px 0 0 ${activeLineAccent}`,
305
303
  },
304
+ '&:has(.cm-selectionBackground) .cm-activeLine': {
305
+ backgroundColor: 'transparent',
306
+ boxShadow: 'none',
307
+ },
306
308
  '.cm-activeLineGutter': {
307
309
  backgroundColor: activeLineBackground,
308
310
  boxShadow: `inset 3px 0 0 ${activeLineAccent}`,
@@ -356,10 +358,6 @@ function createEditorTheme(theme) {
356
358
  '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
357
359
  backgroundColor: selectionBackground,
358
360
  },
359
- '&.cm-focused .cm-selectionLayer .cm-selectionBackground': {
360
- border: `1px solid ${selectionBorder}`,
361
- borderRadius: '2px',
362
- },
363
361
  '@keyframes collabmd-remote-update-flash': {
364
362
  '0%': {
365
363
  backgroundColor: theme === 'dark'
@@ -585,6 +583,9 @@ export class EditorViewAdapter {
585
583
  parent: this.editorContainer,
586
584
  state,
587
585
  });
586
+ // Parse beyond the viewport so diagram syntax does not recolor during scrolling.
587
+ // ponytail: cap startup work at 50ms; larger documents retain background parsing.
588
+ forceParsing(this.editorView, state.doc.length, 50);
588
589
 
589
590
  this.editorContainer.dataset.editorMode = editorMode;
590
591
  this.editorView.scrollDOM.addEventListener('scroll', this.handleScroll, { passive: true });
@@ -23,6 +23,7 @@ import {
23
23
  import {
24
24
  buildCollaboratorsMap,
25
25
  mergeAwarenessUserPatch,
26
+ normalizeCollaboratorViewport,
26
27
  } from '../domain/excalidraw-collaboration.js';
27
28
  import {
28
29
  buildLiveCollaborationScene,
@@ -370,23 +371,6 @@ export class ExcalidrawRoomClient {
370
371
  });
371
372
  }
372
373
 
373
- getHistoryState() {
374
- return {
375
- canRedo: false,
376
- canUndo: false,
377
- head: null,
378
- length: null,
379
- };
380
- }
381
-
382
- canRedo() {
383
- return this.getHistoryState().canRedo;
384
- }
385
-
386
- canUndo() {
387
- return this.getHistoryState().canUndo;
388
- }
389
-
390
374
  isApplyingSharedSnapshot() {
391
375
  return this.applyingSharedSnapshotDepth > 0;
392
376
  }
@@ -399,14 +383,6 @@ export class ExcalidrawRoomClient {
399
383
  this.applyingSharedSnapshotDepth = Math.max(0, this.applyingSharedSnapshotDepth - 1);
400
384
  }
401
385
 
402
- subscribeHistoryState(listener) {
403
- if (typeof listener === 'function') {
404
- listener(this.getHistoryState());
405
- }
406
-
407
- return () => {};
408
- }
409
-
410
386
  setLocalUser(nextUser = {}) {
411
387
  this.localUser = mergeAwarenessUserPatch({
412
388
  currentUser: this.localUser,
@@ -892,25 +868,6 @@ export class ExcalidrawRoomClient {
892
868
  this.pendingPointerPayload = null;
893
869
  }
894
870
 
895
- normalizeViewportAwareness(viewport) {
896
- if (!viewport || typeof viewport !== 'object') {
897
- return null;
898
- }
899
-
900
- const scrollX = Number(viewport.scrollX);
901
- const scrollY = Number(viewport.scrollY);
902
- const zoom = Number(viewport.zoom);
903
- if (!Number.isFinite(scrollX) || !Number.isFinite(scrollY) || !Number.isFinite(zoom) || zoom <= 0) {
904
- return null;
905
- }
906
-
907
- return {
908
- scrollX,
909
- scrollY,
910
- zoom,
911
- };
912
- }
913
-
914
871
  scheduleLocalPointerAwareness(payload) {
915
872
  if (!this.awareness || !payload?.pointer) {
916
873
  return;
@@ -948,7 +905,7 @@ export class ExcalidrawRoomClient {
948
905
  return;
949
906
  }
950
907
 
951
- const normalizedViewport = this.normalizeViewportAwareness(viewport);
908
+ const normalizedViewport = normalizeCollaboratorViewport(viewport);
952
909
  if (!normalizedViewport) {
953
910
  return;
954
911
  }
@@ -28,6 +28,11 @@ export const gitApiClient = {
28
28
  return parseApiResponse(response, 'Failed to load git status');
29
29
  },
30
30
 
31
+ getPullBackupSummaryUrl(backupId) {
32
+ const params = createSearchParams({ id: backupId });
33
+ return resolveApiUrl(`/git/pull-backup-summary?${params.toString()}`);
34
+ },
35
+
31
36
  async readPullBackups() {
32
37
  const response = await fetch(resolveApiUrl('/git/pull-backups'));
33
38
  return parseApiResponse(response, 'Failed to load pull backups');
@@ -38,13 +38,17 @@ export class TabActivityLock {
38
38
  this.channel = null;
39
39
  this.heartbeatTimer = null;
40
40
  this.isOwner = false;
41
+ this.listenerController = null;
41
42
  this.handleStorageEvent = this.handleStorageEvent.bind(this);
42
43
  this.handlePageHide = this.handlePageHide.bind(this);
43
44
  }
44
45
 
45
46
  initialize() {
46
- window.addEventListener('storage', this.handleStorageEvent);
47
- window.addEventListener('pagehide', this.handlePageHide);
47
+ this.listenerController?.abort();
48
+ this.listenerController = new AbortController();
49
+ const { signal } = this.listenerController;
50
+ window.addEventListener('storage', this.handleStorageEvent, { signal });
51
+ window.addEventListener('pagehide', this.handlePageHide, { signal });
48
52
 
49
53
  if ('BroadcastChannel' in globalThis) {
50
54
  this.channel = new BroadcastChannel(CHANNEL_NAME);
@@ -56,8 +60,8 @@ export class TabActivityLock {
56
60
 
57
61
  destroy() {
58
62
  this.release();
59
- window.removeEventListener('storage', this.handleStorageEvent);
60
- window.removeEventListener('pagehide', this.handlePageHide);
63
+ this.listenerController?.abort();
64
+ this.listenerController = null;
61
65
  this.channel?.close();
62
66
  this.channel = null;
63
67
  }
@@ -1,3 +1,4 @@
1
+ import { getVaultFileKind } from '../../domain/file-kind.js';
1
2
  import {
2
3
  listWebMcpToolDefinitions,
3
4
  toWebMcpToolName,
@@ -128,10 +129,15 @@ function createActiveContextResult(context = {}) {
128
129
  return {
129
130
  activeDiagramPath,
130
131
  activePath,
132
+ kind: getVaultFileKind(activePath),
133
+ localRevision: context.localRevision ?? null,
134
+ selection: context.selection ?? null,
131
135
  preferredDiagramPath: activeDiagramPath,
132
136
  workflow: activeDiagramPath
133
137
  ? `Current diagram is ${activeDiagramPath}. Inspect it, edit with the returned exact revision, request inline verification, then use the returned canvas paint acknowledgement.`
134
- : 'No diagram is active. Use create_excalidraw with a new .excalidraw path and request inline verification. Inspect then revision-edit any existing path; do not retry stale edits without rereading.',
138
+ : activePath
139
+ ? 'Read the active document before editing. Selection offsets are UTF-16 and refer to localRevision; compare it with the fresh server revision and reconsider the selection if they differ. Batch unique exact replacements; reread on conflict. Request Markdown validation when changing references.'
140
+ : 'No diagram is active. Use create_excalidraw with a new .excalidraw path and request inline verification. Inspect then revision-edit any existing path; do not retry stale edits without rereading.',
135
141
  };
136
142
  }
137
143
 
@@ -158,10 +164,10 @@ function createActiveContextTool(getActiveContext) {
158
164
  return {
159
165
  annotations: {
160
166
  readOnlyHint: true,
161
- untrustedContentHint: false,
167
+ untrustedContentHint: true,
162
168
  },
163
- description: 'Return current CollabMD file and active-diagram context plus the safe create-or-edit workflow. Call before Excalidraw tools.',
164
- execute: async () => createActiveContextResult(getActiveContext?.()),
169
+ description: 'Return the active file kind, bounded primary editor selection (up to 2000 characters), local snapshot revision, and diagram context. Call for edits referring to this document or selection. Local revision does not confirm server synchronization; read_document supplies the edit revision.',
170
+ execute: async () => createActiveContextResult(await getActiveContext?.()),
165
171
  inputSchema: {
166
172
  additionalProperties: false,
167
173
  properties: {},
@@ -213,7 +219,8 @@ export class WebMcpToolRegistry {
213
219
  try {
214
220
  const tools = listWebMcpToolDefinitions().map((definition) => ({
215
221
  annotations: {
216
- ...definition.annotations,
222
+ consequentialHint: !definition.annotations.readOnlyHint,
223
+ readOnlyHint: Boolean(definition.annotations.readOnlyHint),
217
224
  untrustedContentHint: Boolean(definition.untrustedContentHint),
218
225
  },
219
226
  description: getWebMcpDescription(definition),
@@ -7,7 +7,8 @@ import { segmentedButtonClassNames, segmentedControlClassNames } from './compone
7
7
  import { downloadBlob, parseDownloadFileName } from '../browser-utils.js';
8
8
 
9
9
  function createShellKey() {
10
- return `base-${Math.random().toString(36).slice(2, 10)}`;
10
+ const id = globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
11
+ return `base-${id}`;
11
12
  }
12
13
 
13
14
  function replaceChildrenFromHtml(target, html) {
@@ -1,4 +1,5 @@
1
1
  import markdownIt from 'markdown-it';
2
+ import { enableMarkdownMath } from '../domain/markdown-math.js';
2
3
 
3
4
  import { escapeHtml } from '../domain/vault-utils.js';
4
5
 
@@ -21,6 +22,7 @@ function createCommentMarkdownRenderer() {
21
22
  linkify: true,
22
23
  typographer: true,
23
24
  });
25
+ enableMarkdownMath(markdown);
24
26
 
25
27
  const fallbackLinkOpen = markdown.renderer.rules.link_open;
26
28
  const fallbackTableOpen = markdown.renderer.rules.table_open;