collabmd 0.1.29 → 0.1.31

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 (445) hide show
  1. package/README.md +5 -0
  2. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-9k1Shd4H.js → CodeMirrorEditor-UCMRAMCV-Bg0dawOb.js} +1 -1
  3. package/dist/client/assets/{_basePickBy-B6kIfhzj.js → _basePickBy-Dv0sK1l7.js} +1 -1
  4. package/dist/client/assets/{_baseUniq-Bbn0_sHS.js → _baseUniq-DKYX57ji.js} +1 -1
  5. package/dist/client/assets/{ar-SA-NXDWD63E-BWO5oYxe.js → ar-SA-NXDWD63E-WivLHHDW.js} +1 -1
  6. package/dist/client/assets/{arc-BIqum3oD.js → arc-DrfYGhWk.js} +1 -1
  7. package/dist/client/assets/architecture-PBZL5I3N-DiglIZi9.js +1 -0
  8. package/dist/client/assets/architectureDiagram-2XIMDMQ5-kYbOThe4.js +36 -0
  9. package/dist/client/assets/{az-AZ-MXSORGZV-Cfw6Z5oY.js → az-AZ-MXSORGZV-DOdq1TKC.js} +1 -1
  10. package/dist/client/assets/base-CaIEJUF9.css +1 -0
  11. package/dist/client/assets/{bg-BG-O6MV2KSF-CQmG3YpD.js → bg-BG-O6MV2KSF-CYucKuDS.js} +1 -1
  12. package/dist/client/assets/{blockDiagram-WCTKOSBZ-0rR9ivwb.js → blockDiagram-WCTKOSBZ-GIgTqnhk.js} +1 -1
  13. package/dist/client/assets/{bn-IN-MMW2ORAC-DZKVshfk.js → bn-BD-T2VJNT7N-2OKWLCYa.js} +1 -1
  14. package/dist/client/assets/{bn-BD-T2VJNT7N-C4S6DZ6o.js → bn-IN-MMW2ORAC-DYr8kqNL.js} +1 -1
  15. package/dist/client/assets/{c4Diagram-IC4MRINW-DHwxcDlQ.js → c4Diagram-IC4MRINW-CkHO1i_L.js} +1 -1
  16. package/dist/client/assets/{ca-ES-MKBCGNOG-Do3aMgyu.js → ca-ES-MKBCGNOG-B9Aeb43I.js} +1 -1
  17. package/dist/client/assets/channel-CgsU9TSN.js +1 -0
  18. package/dist/client/assets/{chunk-4BX2VUAB-BqEY6cCE.js → chunk-4BX2VUAB-2e7V-uuE.js} +1 -1
  19. package/dist/client/assets/{chunk-55IACEB6-039iVf6v.js → chunk-55IACEB6-CpncB3ru.js} +1 -1
  20. package/dist/client/assets/{chunk-7E7YKBS2-BreG0gYL.js → chunk-7E7YKBS2-TdU92i9i.js} +1 -1
  21. package/dist/client/assets/{chunk-7R4GIKGN-BMrp52Pk.js → chunk-7R4GIKGN-mqd2GwMg.js} +2 -2
  22. package/dist/client/assets/{chunk-ETSVUAFD-CN-gPl_j.js → chunk-AXZTUZBK-DuMiJYO9.js} +1 -1
  23. package/dist/client/assets/{chunk-C72U2L5F-BLB26v5d.js → chunk-C72U2L5F-CJKQWBtz.js} +1 -1
  24. package/dist/client/assets/{chunk-EGIJ26TM-fG-0Yh0k.js → chunk-EGIJ26TM-C4nq20om.js} +1 -1
  25. package/dist/client/assets/{chunk-FMBD7UC4-EWK5Pt4D.js → chunk-FMBD7UC4-CMahlBa_.js} +1 -1
  26. package/dist/client/assets/{chunk-GEFDOKGD-DYHmaq-c.js → chunk-GEFDOKGD-Bs7FmFox.js} +1 -1
  27. package/dist/client/assets/chunk-GLR3WWYH-qQe2O5VQ.js +2 -0
  28. package/dist/client/assets/chunk-HHEYEP7N-DlevL8bq.js +1 -0
  29. package/dist/client/assets/{chunk-JSJVCQXG-B69YGtcQ.js → chunk-JSJVCQXG-DPQ9cPJt.js} +1 -1
  30. package/dist/client/assets/{chunk-KX2RTZJC-tuEC7hg1.js → chunk-KX2RTZJC-BTiOJb7N.js} +1 -1
  31. package/dist/client/assets/{chunk-KYZI473N-D4r5eMJZ.js → chunk-KYZI473N-CTSCuqRb.js} +1 -1
  32. package/dist/client/assets/{chunk-L3YUKLVL-CD9nJYL8.js → chunk-L3YUKLVL-CJZMBtKF.js} +1 -1
  33. package/dist/client/assets/{chunk-MX3YWQON-DqN0TF5Q.js → chunk-MX3YWQON-DQpSwRf6.js} +1 -1
  34. package/dist/client/assets/{chunk-NQ4KR5QH-BCjGNd0g.js → chunk-NQ4KR5QH-CMJKI6Oj.js} +1 -1
  35. package/dist/client/assets/chunk-NU2UP6EN-DlUENSHU.js +35 -0
  36. package/dist/client/assets/{chunk-O4XLMI2P-DaS3COAu.js → chunk-O4XLMI2P-CcVxZh41.js} +1 -1
  37. package/dist/client/assets/{chunk-OZEHJAEY-BaBXI-8x.js → chunk-OZEHJAEY-DjBZbgu0.js} +1 -1
  38. package/dist/client/assets/{chunk-PQ6SQG4A-BY9_Srs_.js → chunk-PQ6SQG4A-D1AbThjy.js} +1 -1
  39. package/dist/client/assets/{chunk-PU5JKC2W-t0zUh6E3.js → chunk-PU5JKC2W-D_6N6t8f.js} +1 -1
  40. package/dist/client/assets/chunk-QZHKN3VN-CgLPFSk5.js +1 -0
  41. package/dist/client/assets/{chunk-R5LLSJPH-BjSMFnTi.js → chunk-R5LLSJPH-CkjKXM73.js} +1 -1
  42. package/dist/client/assets/{chunk-WL4C6EOR-OuH0lN6M.js → chunk-WL4C6EOR-axcuKSup.js} +1 -1
  43. package/dist/client/assets/{chunk-XIRO2GV7-2tirYN5A.js → chunk-XIRO2GV7-4wqVHjs_.js} +1 -1
  44. package/dist/client/assets/{chunk-XPW4576I-C0GpOUHf.js → chunk-XPW4576I-DJr4_4Yy.js} +1 -1
  45. package/dist/client/assets/{chunk-XZSTWKYB-DDkpyNVE.js → chunk-XZSTWKYB-C8Y_hIKZ.js} +1 -1
  46. package/dist/client/assets/{chunk-YBOYWFTD-CzyyfGQX.js → chunk-YBOYWFTD-CKg4ymFF.js} +1 -1
  47. package/dist/client/assets/{chunk-Z5NKEFVG-Dgem5v98.js → chunk-Z5NKEFVG-HOkYqaKa.js} +1 -1
  48. package/dist/client/assets/classDiagram-VBA2DB6C-BHZpvOxK.js +1 -0
  49. package/dist/client/assets/classDiagram-v2-RAHNMMFH-DA7HMUUs.js +1 -0
  50. package/dist/client/assets/clone-Dgi8Z4IL.js +1 -0
  51. package/dist/client/assets/{cose-bilkent-S5V4N54A-jZzFUguD.js → cose-bilkent-S5V4N54A-DASO2hrk.js} +1 -1
  52. package/dist/client/assets/{cs-CZ-V77HGUP7-DmZRJ2UO.js → cs-CZ-V77HGUP7-BDg-F0CJ.js} +1 -1
  53. package/dist/client/assets/{da-DK-I5RFNTM4-CRIiLQ-G.js → da-DK-I5RFNTM4-wtSQ0Jxa.js} +1 -1
  54. package/dist/client/assets/{dagre-fvYjRtTE.js → dagre-CfB3Fw33.js} +1 -1
  55. package/dist/client/assets/dagre-KLK3FWXG-CC7tq2Ky.js +4 -0
  56. package/dist/client/assets/{de-DE-DTI4WUSC-MFge9MC3.js → de-CH-WLRDEVBV-C1swvmZy.js} +1 -1
  57. package/dist/client/assets/{de-CH-WLRDEVBV-k728UA4j.js → de-DE-DTI4WUSC-C0L6Nz8X.js} +1 -1
  58. package/dist/client/assets/diagram-E7M64L7V-CMt7BN5M.js +24 -0
  59. package/dist/client/assets/diagram-IFDJBPK2-BFMBUGpd.js +43 -0
  60. package/dist/client/assets/diagram-P4PSJMXO-CviA1xXr.js +24 -0
  61. package/dist/client/assets/dist-3bQB_we3.js +1 -0
  62. package/dist/client/assets/dist-3uAMa5w5.js +1 -0
  63. package/dist/client/assets/dist-8Igu3Ee_2.js +1 -0
  64. package/dist/client/assets/{dist-D9c0A4Uh.js → dist-B-02vKOA.js} +1 -1
  65. package/dist/client/assets/dist-B4uQVR_X.js +1 -0
  66. package/dist/client/assets/{dist-A0eSMIyy.js → dist-BLAlZer_.js} +1 -1
  67. package/dist/client/assets/dist-BU8uusJX.js +1 -0
  68. package/dist/client/assets/dist-BVB8rn7o.js +1 -0
  69. package/dist/client/assets/{dist-DveOCUUJ.js → dist-Bc2ND6i3.js} +1 -1
  70. package/dist/client/assets/{dist-Bay3vk5z.js → dist-BtnXjRx0.js} +1 -1
  71. package/dist/client/assets/{dist-CEYpWxod.js → dist-BzbYwa8m.js} +1 -1
  72. package/dist/client/assets/{dist-Ct1bmQnL.js → dist-BzpfHRaE.js} +1 -1
  73. package/dist/client/assets/{dist-BbKpzsTB.js → dist-CGV1S_as.js} +1 -1
  74. package/dist/client/assets/dist-CL-jjdvG.js +1 -0
  75. package/dist/client/assets/{dist-D0e6Qsad.js → dist-CXpKYW9s.js} +1 -1
  76. package/dist/client/assets/{dist-BchrxlnW.js → dist-CjII8VDS.js} +1 -1
  77. package/dist/client/assets/{dist-DnrO-JZd.js → dist-CxfohGIV.js} +1 -1
  78. package/dist/client/assets/{dist-CMHIjMVe.js → dist-D5QOYy7y.js} +1 -1
  79. package/dist/client/assets/{dist-CEtbxXlI.js → dist-DIi0uqLJ.js} +1 -1
  80. package/dist/client/assets/dist-DJ16N7ol.js +1 -0
  81. package/dist/client/assets/dist-DUvaQ-Bj.js +1 -0
  82. package/dist/client/assets/{dist-DnxPQ0-w.js → dist-DWJL3_bF.js} +6 -6
  83. package/dist/client/assets/dist-DsL7sqZR.js +1 -0
  84. package/dist/client/assets/{dist-DbhQ5ANS.js → dist-Dyt7n5Ui.js} +1 -1
  85. package/dist/client/assets/{dist-BOrlJDrR.js → dist-E_jPb93e.js} +1 -1
  86. package/dist/client/assets/{dist-D-gRgZ6e.js → dist-O1z0Ayg0.js} +1 -1
  87. package/dist/client/assets/dist-OQE68wIX.js +1 -0
  88. package/dist/client/assets/dist-k47-Io7D.js +1 -0
  89. package/dist/client/assets/{dist-Cdzvi8cf.js → dist-lDhnP-K1.js} +1 -1
  90. package/dist/client/assets/{dist-DS6mEQYy.js → dist-rMhng5DK.js} +1 -1
  91. package/dist/client/assets/{dockerfile-C0qQqxf9.js → dockerfile-D8_6_FRV.js} +1 -1
  92. package/dist/client/assets/{drawio-editor-CgbaOvpF.js → drawio-editor-B4sHHwWJ.js} +1 -1
  93. package/dist/client/assets/drawioEditor-DGpo2hcx.js +2 -0
  94. package/dist/client/assets/editor-session-BKHEYkbY.js +16 -0
  95. package/dist/client/assets/{el-GR-ZXDJ2OS4-Bbz93mrG.js → el-GR-ZXDJ2OS4-BH0saXds.js} +1 -1
  96. package/dist/client/assets/{embedded-editor-base-DXRHYz6R.css → embedded-editor-base-DgmRcsR8.css} +1 -1
  97. package/dist/client/assets/{en-CTDJDZ6K-BHbXrqU0.js → en-IQZW2TQM-CzlcEpq3.js} +1 -1
  98. package/dist/client/assets/{erDiagram-INFDFZHY-DP3f20BF.js → erDiagram-INFDFZHY-DlIf-fb7.js} +1 -1
  99. package/dist/client/assets/{es-ES-DYQHAD43-CReXU-Nn.js → es-ES-DYQHAD43-CyzL9Mni.js} +1 -1
  100. package/dist/client/assets/{eu-ES-QDSYU5Y3-jRpcaWwz.js → eu-ES-QDSYU5Y3-D2-x316S.js} +1 -1
  101. package/dist/client/assets/{excalidraw-editor-Dj0c0PO6.js → excalidraw-editor-CHbeNZu6.js} +2 -2
  102. package/dist/client/assets/excalidraw-editor-Dj3i59LW.css +1 -0
  103. package/dist/client/assets/{excalidraw-mermaid-stub-efoh2lJm.js → excalidraw-mermaid-stub-Bwe-bKcT.js} +1 -1
  104. package/dist/client/assets/excalidraw-scene-BF_bT1OL.js +176 -0
  105. package/dist/client/assets/excalidrawEditor-BhaTX2Ko.js +2 -0
  106. package/dist/client/assets/export-page-PeexH2QK.js +39 -0
  107. package/dist/client/assets/exportDocument-CtZKWE2c.js +2 -0
  108. package/dist/client/assets/{exportDocument-CLPYN_gg.css → exportDocument-DmV7Gngb.css} +1 -1
  109. package/dist/client/assets/{fa-IR-26LZG4PM-DP8pJ8e3.js → fa-IR-26LZG4PM-D8-trU2x.js} +1 -1
  110. package/dist/client/assets/{factor-2uy-lXe_.js → factor-Cz-hzBGH.js} +1 -1
  111. package/dist/client/assets/{fi-FI-6YS4KDE4-BLUDpNOj.js → fi-FI-6YS4KDE4-CCdRVFDQ.js} +1 -1
  112. package/dist/client/assets/file-kind-DBptLlF_.js +1 -0
  113. package/dist/client/assets/{flowDiagram-PKNHOUZH-CRbK5_5h.js → flowDiagram-PKNHOUZH-C_t-mkwb.js} +1 -1
  114. package/dist/client/assets/{fr-FR-BRLLPTZC-BoZz3Pi8.js → fr-FR-BRLLPTZC-Dqq-O5T_.js} +1 -1
  115. package/dist/client/assets/ganttDiagram-A5KZAMGK-BtK9Tb--.js +292 -0
  116. package/dist/client/assets/gitGraph-HDMCJU4V-CT7YfbD3.js +1 -0
  117. package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-DULDLGiJ.js +65 -0
  118. package/dist/client/assets/{gl-ES-OKUZTLYG-CaEvhjDi.js → gl-ES-OKUZTLYG-BK7pbLbm.js} +1 -1
  119. package/dist/client/assets/{graphlib-DSzYgMXB.js → graphlib-BgRST-Qg.js} +1 -1
  120. package/dist/client/assets/{he-IL-26MGYIU7-DYOchgy9.js → he-IL-26MGYIU7-C3BuYKyY.js} +1 -1
  121. package/dist/client/assets/{hi-IN-Q4ZOGTP2-yRs8g46n.js → hi-IN-Q4ZOGTP2-BEvXWXnH.js} +1 -1
  122. package/dist/client/assets/{hu-HU-P2OXPSN5-1skPmtgc.js → hu-HU-P2OXPSN5-BWWZeJNp.js} +1 -1
  123. package/dist/client/assets/{id-ID-2EIKXYN6-iUugQJd9.js → id-ID-2EIKXYN6-DxSKi_aJ.js} +1 -1
  124. package/dist/client/assets/image-XLNPCCAD-CFiKwiWK.js +1 -0
  125. package/dist/client/assets/index-D69HOZHr.css +1 -0
  126. package/dist/client/assets/{index-CVgVzuh6.js → index-kPgEYvEX.js} +2 -2
  127. package/dist/client/assets/info-3K5VOQVL-DUpNyDC-.js +1 -0
  128. package/dist/client/assets/infoDiagram-LFFYTUFH-DFTI0nfs.js +2 -0
  129. package/dist/client/assets/{isEmpty-C7iPDOO3.js → isEmpty-CVvRj8fj.js} +1 -1
  130. package/dist/client/assets/{ishikawaDiagram-PHBUUO56-BDVPgkv4.js → ishikawaDiagram-PHBUUO56-DpBuDpC6.js} +1 -1
  131. package/dist/client/assets/{it-IT-4CFKVXI2-a5DFhzuI.js → it-IT-4CFKVXI2-BmA8wW6q.js} +1 -1
  132. package/dist/client/assets/{ja-JP-MAND2Z4V-DwogHVKd.js → ja-JP-MAND2Z4V-CLS1jI9o.js} +1 -1
  133. package/dist/client/assets/javascript-UJe68_xi.js +1 -0
  134. package/dist/client/assets/{journeyDiagram-4ABVD52K-DtNnwL48.js → journeyDiagram-4ABVD52K-DDur6iHm.js} +1 -1
  135. package/dist/client/assets/{jsx-runtime-B8dyIONw.js → jsx-runtime-C2p7wRmT.js} +1 -1
  136. package/dist/client/assets/{kaa-HQRTCXTJ-p81XNRfH.js → kaa-HQRTCXTJ-W15DEDPz.js} +1 -1
  137. package/dist/client/assets/{kab-KAB-JKIKKTGH-mV5VzQZc.js → kab-KAB-JKIKKTGH-MLh1inqS.js} +1 -1
  138. package/dist/client/assets/{kanban-definition-K7BYSVSG-C565sUNo.js → kanban-definition-K7BYSVSG-dA6NPLsg.js} +1 -1
  139. package/dist/client/assets/{kk-KZ-HXQ63ZFC-IIPX0GQv.js → kk-KZ-HXQ63ZFC-BtFrPeLs.js} +1 -1
  140. package/dist/client/assets/{km-KH-PKL3LSGX-D7WQFJuZ.js → km-KH-PKL3LSGX-xO5FyM9T.js} +1 -1
  141. package/dist/client/assets/{ko-KR-KXLREZX3-Bs1oLtJs.js → ko-KR-KXLREZX3-NZFoRybS.js} +1 -1
  142. package/dist/client/assets/{ku-TR-MJ4IER3X-DlxOs6aZ.js → ku-TR-MJ4IER3X-B5eVPIpK.js} +1 -1
  143. package/dist/client/assets/{line-D57TbKb7.js → line-B2GMovaI.js} +1 -1
  144. package/dist/client/assets/{linear-BIf852wI.js → linear-B2dOdA24.js} +1 -1
  145. package/dist/client/assets/{lt-LT-H6WFQ6FJ-xuo-3zKH.js → lt-LT-H6WFQ6FJ-D_7_OeJD.js} +1 -1
  146. package/dist/client/assets/{lv-LV-GOCK6SJW-C7S3M1nr.js → lv-LV-GOCK6SJW-CnpKr0oQ.js} +1 -1
  147. package/dist/client/assets/main-DSxNTtD-.js +1243 -0
  148. package/dist/client/assets/mermaid-parser.core-B1ogGcR8.js +4 -0
  149. package/dist/client/assets/{mermaid-runtime-DqncQoYK.js → mermaid-runtime-Bn8A6DGx.js} +3 -3
  150. package/dist/client/assets/{mindmap-definition-YRQLILUH-BbYzGfTD.js → mindmap-definition-YRQLILUH-DjQcsPoe.js} +1 -1
  151. package/dist/client/assets/{mr-IN-IXVLDMEQ-BsoowyZT.js → mr-IN-IXVLDMEQ-Pht2X_GK.js} +1 -1
  152. package/dist/client/assets/{my-MM-YG6MYTTD-DCqwN_K_.js → my-MM-YG6MYTTD-Cgq4HhPO.js} +1 -1
  153. package/dist/client/assets/{nb-NO-XGWJISD2-CZ5ytLgj.js → nb-NO-XGWJISD2-Bn_Bk2un.js} +1 -1
  154. package/dist/client/assets/{nl-NL-XVDVCPNC-wADsdb-h.js → nl-NL-XVDVCPNC-YkWSJS94.js} +1 -1
  155. package/dist/client/assets/{nn-NO-EMX5MJX5-D9zIKTL2.js → nn-NO-EMX5MJX5-DhP5eZJ7.js} +1 -1
  156. package/dist/client/assets/{nsis-CUd4RnvJ.js → nsis-QPGhLAeY.js} +1 -1
  157. package/dist/client/assets/{oc-FR-ROEINTVO-BSbBugJB.js → oc-FR-ROEINTVO-D3udMPnr.js} +1 -1
  158. package/dist/client/assets/{ordinal-B0PAtOQ6.js → ordinal-Dz3y_j0K.js} +1 -1
  159. package/dist/client/assets/{pa-IN-ZYN6SUDY-1pFA_3Pb.js → pa-IN-ZYN6SUDY-CR5YzFig.js} +1 -1
  160. package/dist/client/assets/packet-RMMSAZCW-DEwNbIrA.js +1 -0
  161. package/dist/client/assets/percentages-5DKR754L-D7n4T776.js +1 -0
  162. package/dist/client/assets/pie-UPGHQEXC-D5M_lSjo.js +1 -0
  163. package/dist/client/assets/pieDiagram-SKSYHLDU-jhHouFpk.js +30 -0
  164. package/dist/client/assets/{pl-PL-6VTG7PHC-DyYw0u_z.js → pl-PL-6VTG7PHC-_wZuoIDM.js} +1 -1
  165. package/dist/client/assets/preview-render-compiler-BjLlHmiQ.js +35 -0
  166. package/dist/client/assets/preview-render-compiler-Duy_3IcP.js +1 -0
  167. package/dist/client/assets/preview-render-worker-B4dH2yxj.js +59 -0
  168. package/dist/client/assets/{pt-BR-5YFKRR5G-DJCCBBDl.js → pt-BR-5YFKRR5G-M7gIm2Hi.js} +1 -1
  169. package/dist/client/assets/{pt-PT-GEIXXZ67-BPJd09Ax.js → pt-PT-GEIXXZ67-CcxWpkGj.js} +1 -1
  170. package/dist/client/assets/{pug-BqBF8qF7.js → pug-DkUcLYWt.js} +1 -1
  171. package/dist/client/assets/{quadrantDiagram-337W2JSQ-DhlKLozd.js → quadrantDiagram-337W2JSQ-CYKgdx7K.js} +1 -1
  172. package/dist/client/assets/quick-switcher-controller-DcyllYpm.js +5 -0
  173. package/dist/client/assets/radar-KQ55EAFF-AU1qh3Bw.js +1 -0
  174. package/dist/client/assets/{requirementDiagram-Z7DCOOCP-B7ZOMsIb.js → requirementDiagram-Z7DCOOCP-D9SHxoW7.js} +1 -1
  175. package/dist/client/assets/{ro-RO-E2P6TFZI-DWVyTV7V.js → ro-RO-E2P6TFZI-qR9noVzP.js} +1 -1
  176. package/dist/client/assets/{room-B0UGbzQj.js → room-yJaBAoEU.js} +1 -1
  177. package/dist/client/assets/{ru-RU-YBIIY43T-Dyar7CYM.js → ru-RU-YBIIY43T-CE4S_RX8.js} +1 -1
  178. package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-CXRga6Op.js → sankeyDiagram-WA2Y5GQK-CfHe3D6R.js} +1 -1
  179. package/dist/client/assets/{sequenceDiagram-2WXFIKYE-CeSFlFx5.js → sequenceDiagram-2WXFIKYE-CZsMMqAJ.js} +1 -1
  180. package/dist/client/assets/{si-LK-673C2CI2-C61aLrIy.js → si-LK-673C2CI2-Bv6Avh3z.js} +1 -1
  181. package/dist/client/assets/{sk-SK-CKZHQ4AP-BlFwOxRD.js → sk-SK-CKZHQ4AP-Cnlpp55z.js} +1 -1
  182. package/dist/client/assets/{sl-SI-557H2GWM-DcAVW-_t.js → sl-SI-557H2GWM-BfGq7AQF.js} +1 -1
  183. package/dist/client/assets/stateDiagram-RAJIS63D-CoNZjTYV.js +1 -0
  184. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-1zOw6NmQ.js +1 -0
  185. package/dist/client/assets/subset-shared.chunk-C9HjwTXy.js +1 -0
  186. package/dist/client/assets/{subset-worker.chunk-DVGT6bvR.js → subset-worker.chunk-BSCP6IiC.js} +1 -1
  187. package/dist/client/assets/{sv-SE-XOPKKDWS-BkhfOHzh.js → sv-SE-XOPKKDWS-B2_Vk-sp.js} +1 -1
  188. package/dist/client/assets/{ta-IN-XBH7DQI3-BIfwglZa.js → ta-IN-XBH7DQI3-BXQMZZIx.js} +1 -1
  189. package/dist/client/assets/{th-TH-TOCWH3R4-CkrxqVkf.js → th-TH-TOCWH3R4-C-ZIYMfH.js} +1 -1
  190. package/dist/client/assets/{timeline-definition-YZTLITO2-BXBHNWLQ.js → timeline-definition-YZTLITO2-DSe2mrG8.js} +1 -1
  191. package/dist/client/assets/{tr-TR-GXW6CYY5-CDdvG9rD.js → tr-TR-GXW6CYY5-dl702PMA.js} +1 -1
  192. package/dist/client/assets/treemap-KZPCXAKY-C9UI2fwP.js +1 -0
  193. package/dist/client/assets/{uk-UA-IJKTNUDG-DRHp0lWp.js → uk-UA-IJKTNUDG-CUYQvSSF.js} +1 -1
  194. package/dist/client/assets/{uz-UZ-TBZZEA4V-BIn-VE3Y.js → uz-UZ-TBZZEA4V-B9qw0PXX.js} +1 -1
  195. package/dist/client/assets/{vault-api-client-DIaCC56H.js → vault-api-client-BzHQseMN.js} +1 -1
  196. package/dist/client/assets/vault-utils-5Xr0MXCb.js +1 -0
  197. package/dist/client/assets/{vennDiagram-LZ73GAT5-Cs9aQmVM.js → vennDiagram-LZ73GAT5-xSzaIpy1.js} +1 -1
  198. package/dist/client/assets/{vi-VN-MULSGNVB-Du7t5I0v.js → vi-VN-MULSGNVB-DqxZ_sVc.js} +1 -1
  199. package/dist/client/assets/{xychartDiagram-JWTSCODW-B40ybbzC.js → xychartDiagram-JWTSCODW-C3vA70iJ.js} +1 -1
  200. package/dist/client/assets/{yjs-provider-reset-guard-DUP9XupO.js → yjs-provider-reset-guard-CtERLBID.js} +1 -1
  201. package/dist/client/assets/{zh-CN-MVX3E32U-RcjS3rjt.js → zh-CN-MVX3E32U-BM0aLuGc.js} +1 -1
  202. package/dist/client/assets/{zh-HK-JNU5RLIE-g8UeEw5v.js → zh-HK-JNU5RLIE-dmG_YD0d.js} +1 -1
  203. package/dist/client/assets/{zh-TW-LENVCA6T-DwV25BqC.js → zh-TW-LENVCA6T-LFgbiOi3.js} +1 -1
  204. package/dist/client/drawio-editor.html +1 -1
  205. package/dist/client/excalidraw-editor.html +1 -1
  206. package/dist/client/export-document.html +5 -5
  207. package/dist/client/index.html +4 -4
  208. package/docker-compose.yml +1 -0
  209. package/package.json +24 -21
  210. package/src/client/app/export-document.html +1 -1
  211. package/src/client/application/app-shell/ui-feature-shell.js +47 -1
  212. package/src/client/application/app-shell/ui-feature-toolbar.js +25 -3
  213. package/src/client/application/app-shell/workspace-feature.js +9 -0
  214. package/src/client/application/app-shell-elements.js +3 -0
  215. package/src/client/application/diagram-preview-hydrator.js +1 -1
  216. package/src/client/application/markdown-frontmatter.js +97 -0
  217. package/src/client/application/preview-render-compiler.js +60 -7
  218. package/src/client/application/preview-render-executor.js +8 -1
  219. package/src/client/application/preview-render-worker.js +4 -0
  220. package/src/client/application/preview-renderer.js +51 -1
  221. package/src/client/application/workspace-chrome-controller.js +25 -19
  222. package/src/client/application/workspace-coordinator.js +9 -0
  223. package/src/client/application/workspace-preview-controller.js +49 -3
  224. package/src/client/bootstrap/collabmd-app-shell.js +31 -2
  225. package/src/client/domain/markdown-formatting.js +1 -1
  226. package/src/client/domain/markdown-toolbar-actions.js +36 -0
  227. package/src/client/domain/vault-paths.js +19 -0
  228. package/src/client/export/export-page.js +11 -3
  229. package/src/client/export/export-pipeline.js +80 -3
  230. package/src/client/infrastructure/editor-session.js +4 -0
  231. package/src/client/infrastructure/editor-view-adapter.js +44 -7
  232. package/src/client/infrastructure/excalidraw-room-client.js +12 -4
  233. package/src/client/infrastructure/vault-api-client.js +54 -0
  234. package/src/client/presentation/app-shell-template.js +27 -0
  235. package/src/client/presentation/backlinks-panel.js +37 -11
  236. package/src/client/presentation/bases-preview-controller.js +444 -0
  237. package/src/client/presentation/file-action-controller.js +44 -2
  238. package/src/client/presentation/file-explorer-view.js +10 -2
  239. package/src/client/presentation/file-tree-state.js +9 -1
  240. package/src/client/presentation/git-diff-view-controller.js +7 -10
  241. package/src/client/presentation/quick-switcher-controller.js +54 -13
  242. package/src/client/styles/base.css +5 -0
  243. package/src/client/styles/export-document.css +12 -0
  244. package/src/client/styles/features/backlinks.css +65 -3
  245. package/src/client/styles/features/preview-markdown.css +347 -0
  246. package/src/client/styles/layout/editor-page.css +6 -0
  247. package/src/client/styles/layout/responsive.css +89 -0
  248. package/src/client/styles/layout/shell.css +14 -1
  249. package/src/client/styles/layout/view-modes.css +5 -0
  250. package/src/client/styles/overrides/codemirror.css +74 -0
  251. package/src/domain/file-kind.js +17 -2
  252. package/src/domain/wiki-link-resolver.js +41 -23
  253. package/src/domain/yaml-frontmatter.js +59 -0
  254. package/src/server/auth/create-auth-service.js +32 -6
  255. package/src/server/config/env.js +27 -0
  256. package/src/server/config/perf-logging.js +39 -0
  257. package/src/server/create-app-server.js +113 -7
  258. package/src/server/domain/backlink-index.js +129 -19
  259. package/src/server/domain/bases/base-query-service.js +2101 -0
  260. package/src/server/domain/collaboration/collaboration-document-store.js +13 -2
  261. package/src/server/domain/collaboration/collaboration-room.js +28 -5
  262. package/src/server/domain/workspace-state.js +52 -0
  263. package/src/server/infrastructure/git/history-service.js +1 -1
  264. package/src/server/infrastructure/http/create-request-handler.js +2 -0
  265. package/src/server/infrastructure/http/create-vault-api-command-handler.js +5 -0
  266. package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
  267. package/src/server/infrastructure/http/create-vault-api-query-handler.js +66 -0
  268. package/src/server/infrastructure/persistence/path-utils.js +1 -1
  269. package/src/server/infrastructure/persistence/pull-backup-store.js +1 -1
  270. package/src/server/infrastructure/persistence/vault-content-adapter.js +6 -0
  271. package/src/server/infrastructure/persistence/vault-file-store.js +88 -31
  272. package/src/server/infrastructure/workspace/file-system-sync-service.js +156 -31
  273. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +47 -51
  274. package/src/server/shared/async-utils.js +25 -0
  275. package/dist/client/assets/architecture-PBZL5I3N-iRyVT2GQ.js +0 -1
  276. package/dist/client/assets/architectureDiagram-2XIMDMQ5-Bhh8YQHn.js +0 -36
  277. package/dist/client/assets/base-B5gONpJK.css +0 -1
  278. package/dist/client/assets/channel-s0w88EQN.js +0 -1
  279. package/dist/client/assets/chunk-27N2SPOM-DbHKsQ_j.js +0 -34
  280. package/dist/client/assets/chunk-GLR3WWYH-ZnuaBvXp.js +0 -2
  281. package/dist/client/assets/chunk-HHEYEP7N-DOQ0PCdH.js +0 -1
  282. package/dist/client/assets/chunk-QZHKN3VN-B0v4d-CS.js +0 -1
  283. package/dist/client/assets/classDiagram-VBA2DB6C-Bpdym3dj.js +0 -1
  284. package/dist/client/assets/classDiagram-v2-RAHNMMFH-CRAsdVDB.js +0 -1
  285. package/dist/client/assets/clone-C-n46MFF.js +0 -1
  286. package/dist/client/assets/dagre-KLK3FWXG-CXSnjrX-.js +0 -4
  287. package/dist/client/assets/diagram-E7M64L7V-De0StFef.js +0 -24
  288. package/dist/client/assets/diagram-IFDJBPK2-B2m6AJbU.js +0 -43
  289. package/dist/client/assets/diagram-P4PSJMXO-YBWLVENw.js +0 -24
  290. package/dist/client/assets/dist-BNcU46Ik.js +0 -1
  291. package/dist/client/assets/dist-BUEzOS23.js +0 -1
  292. package/dist/client/assets/dist-BflL-_8D.js +0 -1
  293. package/dist/client/assets/dist-CI_qEj5K.js +0 -1
  294. package/dist/client/assets/dist-CtFNDttZ.js +0 -1
  295. package/dist/client/assets/dist-DS_4VpEd.js +0 -1
  296. package/dist/client/assets/dist-DwsFUbuB.js +0 -1
  297. package/dist/client/assets/dist-VCYAp958.js +0 -1
  298. package/dist/client/assets/dist-Yxt8txtM.js +0 -1
  299. package/dist/client/assets/dist-npxgF_6V.js +0 -1
  300. package/dist/client/assets/dist-u0zDRMQt.js +0 -1
  301. package/dist/client/assets/drawioEditor-Eb2yYhjE.js +0 -2
  302. package/dist/client/assets/editor-session-DFzBn4RY.js +0 -16
  303. package/dist/client/assets/excalidraw-editor-Bat1FRoT.css +0 -1
  304. package/dist/client/assets/excalidraw-scene-CixfM-jL.js +0 -174
  305. package/dist/client/assets/excalidrawEditor-diK4VITg.js +0 -2
  306. package/dist/client/assets/export-page-CUOMczdp.js +0 -39
  307. package/dist/client/assets/exportDocument-BM4_f2n8.js +0 -2
  308. package/dist/client/assets/ganttDiagram-A5KZAMGK-R-AMIgxR.js +0 -292
  309. package/dist/client/assets/gitGraph-HDMCJU4V-kkuqHGSM.js +0 -1
  310. package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-CIPit_Sh.js +0 -65
  311. package/dist/client/assets/image-32MOCVDX-BB6utPzr.js +0 -1
  312. package/dist/client/assets/index-BOOhEiLo.css +0 -1
  313. package/dist/client/assets/info-3K5VOQVL-DPN78whf.js +0 -1
  314. package/dist/client/assets/infoDiagram-LFFYTUFH-CF8jXFTm.js +0 -2
  315. package/dist/client/assets/javascript-8DvdgifH.js +0 -1
  316. package/dist/client/assets/main-C8adLQnt.js +0 -1174
  317. package/dist/client/assets/mermaid-parser.core-By_5k2SF.js +0 -4
  318. package/dist/client/assets/packet-RMMSAZCW-BymvQ5cQ.js +0 -1
  319. package/dist/client/assets/percentages-5DKR754L-CiI2D7zA.js +0 -1
  320. package/dist/client/assets/pie-UPGHQEXC-MmzJzWOE.js +0 -1
  321. package/dist/client/assets/pieDiagram-SKSYHLDU-CAU_gC7U.js +0 -30
  322. package/dist/client/assets/preview-render-compiler-CVfDHnqM.js +0 -1
  323. package/dist/client/assets/preview-render-compiler-CapHJDHT.js +0 -1
  324. package/dist/client/assets/preview-render-worker-wMS710Bv.js +0 -23
  325. package/dist/client/assets/quick-switcher-controller-DplOTsT3.js +0 -5
  326. package/dist/client/assets/radar-KQ55EAFF-CCohASSY.js +0 -1
  327. package/dist/client/assets/stateDiagram-RAJIS63D-CPoSrNwn.js +0 -1
  328. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-5GW0Y21a.js +0 -1
  329. package/dist/client/assets/subset-shared.chunk-CC_u8ICU.js +0 -1
  330. package/dist/client/assets/treemap-KZPCXAKY-9kxB0uNY.js +0 -1
  331. package/dist/client/assets/vault-utils-BW53lKl1.js +0 -1
  332. /package/dist/client/assets/{apl-QJCYYBkj.js → apl-C1JYSI8J.js} +0 -0
  333. /package/dist/client/assets/{array-DwdVlTkF.js → array-B3agRrCs.js} +0 -0
  334. /package/dist/client/assets/{asciiarmor-DNy0UPqh.js → asciiarmor-DHW75j1s.js} +0 -0
  335. /package/dist/client/assets/{asn1-CNPXj-s7.js → asn1-CQiG40kG.js} +0 -0
  336. /package/dist/client/assets/{asterisk-BwMdLpT2.js → asterisk-BWExh0n4.js} +0 -0
  337. /package/dist/client/assets/{base-r5Zg2n3k.js → base-h1uscjTi.js} +0 -0
  338. /package/dist/client/assets/{brainfuck-C2gHT8aA.js → brainfuck-CTNFyOLg.js} +0 -0
  339. /package/dist/client/assets/{chunk-3PELD44J-CL87tpFo.js → chunk-3PELD44J-DymL2rGq.js} +0 -0
  340. /package/dist/client/assets/{chunk-A66AFZZU-DuceaGnc.js → chunk-A66AFZZU-BFHL744F.js} +0 -0
  341. /package/dist/client/assets/{chunk-SRAX5OIU-CC2mobFL.js → chunk-SRAX5OIU-CLVBQRWC.js} +0 -0
  342. /package/dist/client/assets/{clike-D5X7HJpo.js → clike-1_ZsiVV8.js} +0 -0
  343. /package/dist/client/assets/{clojure-BEDKZv_5.js → clojure-D-DYVqu7.js} +0 -0
  344. /package/dist/client/assets/{cmake-Y3shE7av.js → cmake-DtGL-Unu.js} +0 -0
  345. /package/dist/client/assets/{cobol-f-3TLk62.js → cobol-DP4QggbL.js} +0 -0
  346. /package/dist/client/assets/{coffeescript-C0XA9-xa.js → coffeescript-B_7eyHAa.js} +0 -0
  347. /package/dist/client/assets/{commonlisp-BOB6sIEu.js → commonlisp-COlJYiQT.js} +0 -0
  348. /package/dist/client/assets/{crystal-ByNgE_My.js → crystal-I_dE9xG-.js} +0 -0
  349. /package/dist/client/assets/{css-eaI-ENiR.js → css-CmhPNxBE.js} +0 -0
  350. /package/dist/client/assets/{cypher-CQ-dGGSi.js → cypher-DE6I2lIA.js} +0 -0
  351. /package/dist/client/assets/{cytoscape.esm-DBDRhUia.js → cytoscape.esm-Czjc507F.js} +0 -0
  352. /package/dist/client/assets/{d-D9pnu4Cr.js → d-BNkKjn0o.js} +0 -0
  353. /package/dist/client/assets/{defaultLocale-BWgun1yJ.js → defaultLocale-B_FbTTbl.js} +0 -0
  354. /package/dist/client/assets/{diff-z9q33Lo6.js → diff-BWuPUsEo.js} +0 -0
  355. /package/dist/client/assets/{dist-CsYRf4AV.js → dist-x7PIEmJu.js} +0 -0
  356. /package/dist/client/assets/{drawio-room-C592VDk7.js → drawio-room-DEivFyNV.js} +0 -0
  357. /package/dist/client/assets/{dtd-BDizf_te.js → dtd-C6brJFPg.js} +0 -0
  358. /package/dist/client/assets/{dylan-Bk__XCKW.js → dylan-Bft86ZSB.js} +0 -0
  359. /package/dist/client/assets/{ebnf-SzN4Kxtp.js → ebnf-D6ifG44A.js} +0 -0
  360. /package/dist/client/assets/{ecl-5ulxiKbt.js → ecl-M7Iek4lq.js} +0 -0
  361. /package/dist/client/assets/{eiffel-Bhoaqbb6.js → eiffel-DwxtewZF.js} +0 -0
  362. /package/dist/client/assets/{elm-C3je846J.js → elm-B1TncobV.js} +0 -0
  363. /package/dist/client/assets/{erlang-Cgk9SIAz.js → erlang-BDJZNtt8.js} +0 -0
  364. /package/dist/client/assets/{excalidraw-mermaid-stub-B_2dv3Ll.js → excalidraw-mermaid-stub-BZPU4ZhU.js} +0 -0
  365. /package/dist/client/assets/{fcl-dvkZwp9p.js → fcl-BWKK0S4-.js} +0 -0
  366. /package/dist/client/assets/{forth-DmfSa3jN.js → forth-nvhcMz63.js} +0 -0
  367. /package/dist/client/assets/{fortran-BsZAiNnN.js → fortran-BZID-z10.js} +0 -0
  368. /package/dist/client/assets/{gas-DBpKE9ut.js → gas-DjQsZDGE.js} +0 -0
  369. /package/dist/client/assets/{gherkin-CceEbBs7.js → gherkin-S0kHlzux.js} +0 -0
  370. /package/dist/client/assets/{groovy-CxJnDvES.js → groovy-BEKazBrO.js} +0 -0
  371. /package/dist/client/assets/{haskell-CUSb34Xy.js → haskell-C6qH3-aI.js} +0 -0
  372. /package/dist/client/assets/{haxe-6EHO_h-N.js → haxe-BY9d_5nB.js} +0 -0
  373. /package/dist/client/assets/{http-C3qcBpvG.js → http-DG1Y9fpK.js} +0 -0
  374. /package/dist/client/assets/{idl-C95wIO2I.js → idl-B64p3NTJ.js} +0 -0
  375. /package/dist/client/assets/{image-blob-reduce.esm-BaW4gpT9.js → image-blob-reduce.esm-DriR2zT9.js} +0 -0
  376. /package/dist/client/assets/{init-Bjj5fg68.js → init-DtLQcSuO.js} +0 -0
  377. /package/dist/client/assets/{isArrayLikeObject-Cmt1CYnI.js → isArrayLikeObject-BId_dPHM.js} +0 -0
  378. /package/dist/client/assets/{javascript-aWB87b1w.js → javascript-CdiVhQeA.js} +0 -0
  379. /package/dist/client/assets/{julia-DF9PPAXG.js → julia-B22G9Bym.js} +0 -0
  380. /package/dist/client/assets/{katex-BPsFnA3D.js → katex-CXYULLWy.js} +0 -0
  381. /package/dist/client/assets/{livescript-CnOyWwUY.js → livescript-CkcuHqeS.js} +0 -0
  382. /package/dist/client/assets/{lua-a0rEq19C.js → lua-kutgyRGY.js} +0 -0
  383. /package/dist/client/assets/{math-BaavbII8.js → math-B-LMBwub.js} +0 -0
  384. /package/dist/client/assets/{mathematica-CKUq0Ojc.js → mathematica-CKVhKnoY.js} +0 -0
  385. /package/dist/client/assets/{mbox-a-u2PLog.js → mbox-DANyzFJ2.js} +0 -0
  386. /package/dist/client/assets/{mirc-BOd43sOX.js → mirc-BVG2S5rO.js} +0 -0
  387. /package/dist/client/assets/{mllike-fHruGivh.js → mllike-C0p7lv48.js} +0 -0
  388. /package/dist/client/assets/{modelica-B0NJqf1C.js → modelica-vJ-Qa9jV.js} +0 -0
  389. /package/dist/client/assets/{mscgen-DJZ33SrF.js → mscgen-vUD-SWGJ.js} +0 -0
  390. /package/dist/client/assets/{mumps-DvMvHTxU.js → mumps-D0KfUTSd.js} +0 -0
  391. /package/dist/client/assets/{nginx-BVAs8laz.js → nginx-DkVceJrH.js} +0 -0
  392. /package/dist/client/assets/{ntriples-DrdyAZU1.js → ntriples-BBuCIfS0.js} +0 -0
  393. /package/dist/client/assets/{octave-_YqJ0g7E.js → octave-BTv2CqSQ.js} +0 -0
  394. /package/dist/client/assets/{oz-k7T3LoMr.js → oz-D8SjVDNU.js} +0 -0
  395. /package/dist/client/assets/{pascal-CftsTvte.js → pascal-T-tfhVyx.js} +0 -0
  396. /package/dist/client/assets/{path-BUmMWM1-.js → path-DIlZIGue.js} +0 -0
  397. /package/dist/client/assets/{perl-CbsLFc7A.js → perl-BDrCkHRd.js} +0 -0
  398. /package/dist/client/assets/{pica-By-YDy_B.js → pica-C1TdTz-C.js} +0 -0
  399. /package/dist/client/assets/{pig-C-jTwMS-.js → pig-BEyI4fPq.js} +0 -0
  400. /package/dist/client/assets/{powershell-DqXLgSHX.js → powershell-DtnFc6GG.js} +0 -0
  401. /package/dist/client/assets/{preview-diagram-utils-Dc83ucbv.js → preview-diagram-utils-COt-IYMD.js} +0 -0
  402. /package/dist/client/assets/{preview-render-profile-DPzmho7I.js → preview-render-profile-CR4dJZrp.js} +0 -0
  403. /package/dist/client/assets/{properties-05jaw55P.js → properties-DWUvbxV9.js} +0 -0
  404. /package/dist/client/assets/{protobuf-DThTsZQN.js → protobuf-CQGoYyfE.js} +0 -0
  405. /package/dist/client/assets/{puppet-DuHxMpoj.js → puppet-Dd-qWO3p.js} +0 -0
  406. /package/dist/client/assets/{python-BiE2VHJI.js → python-CZtTmYkS.js} +0 -0
  407. /package/dist/client/assets/{q-DH46YfNw.js → q-I27iQntV.js} +0 -0
  408. /package/dist/client/assets/{r-DmEm46kJ.js → r-DN_EydfL.js} +0 -0
  409. /package/dist/client/assets/{rough.esm-jZQkcmER.js → rough.esm-DE_lJ5Ge.js} +0 -0
  410. /package/dist/client/assets/{roundRect-CI6UmGg6.js → roundRect-BzEouiv_.js} +0 -0
  411. /package/dist/client/assets/{rpm-DILIIbRB.js → rpm-CjWxLM68.js} +0 -0
  412. /package/dist/client/assets/{ruby-2LcnHEMS.js → ruby-CB34f2Gf.js} +0 -0
  413. /package/dist/client/assets/{runtime-config-CqX_f_Q4.js → runtime-config-CqhchMC4.js} +0 -0
  414. /package/dist/client/assets/{sas-Bn81MKuB.js → sas-Bji4HDQq.js} +0 -0
  415. /package/dist/client/assets/{scheme-B8kPNbgd.js → scheme-C3elI80V.js} +0 -0
  416. /package/dist/client/assets/{shell-CGj6v8kb.js → shell-DUveK2Hb.js} +0 -0
  417. /package/dist/client/assets/{sieve-CfVNFN1K.js → sieve-2ogwMVx4.js} +0 -0
  418. /package/dist/client/assets/{simple-mode-_FSHdiXs.js → simple-mode-pOKc0mfx.js} +0 -0
  419. /package/dist/client/assets/{smalltalk-BpIFyCPt.js → smalltalk-BuGhc6lW.js} +0 -0
  420. /package/dist/client/assets/{solr-B7iFaetn.js → solr-DTxshpm8.js} +0 -0
  421. /package/dist/client/assets/{sparql-COhgMTFK.js → sparql-BOvq0dv7.js} +0 -0
  422. /package/dist/client/assets/{spreadsheet-BzuffEeg.js → spreadsheet-C6Vbtl9-.js} +0 -0
  423. /package/dist/client/assets/{sql-13lT5zDl.js → sql-DDFeQNTK.js} +0 -0
  424. /package/dist/client/assets/{src-E3c2cohN.js → src-Pgt9Gp65.js} +0 -0
  425. /package/dist/client/assets/{stex-BRSfZZYG.js → stex-CEwW0Q_0.js} +0 -0
  426. /package/dist/client/assets/{stylus-fFo0QRk_.js → stylus-D1SZIMDs.js} +0 -0
  427. /package/dist/client/assets/{swift-wb5gyb6a.js → swift-BCxe4-cw.js} +0 -0
  428. /package/dist/client/assets/{tcl-BJA7GgWY.js → tcl-SPk7uiDB.js} +0 -0
  429. /package/dist/client/assets/{textile-BQjiYu-x.js → textile-C48beRus.js} +0 -0
  430. /package/dist/client/assets/{tiddlywiki-D2vUXB6n.js → tiddlywiki-CiImjFLN.js} +0 -0
  431. /package/dist/client/assets/{tiki-BFhpdznG.js → tiki-HkXZ4BIW.js} +0 -0
  432. /package/dist/client/assets/{toml-DN06iQUw.js → toml-BmfpMy1_.js} +0 -0
  433. /package/dist/client/assets/{troff-DuQfjhPH.js → troff-BjbEOT5E.js} +0 -0
  434. /package/dist/client/assets/{ttcn-BCTy6d50.js → ttcn-NA-V4KnY.js} +0 -0
  435. /package/dist/client/assets/{ttcn-cfg-BYnZQqGa.js → ttcn-cfg-TPHncdGN.js} +0 -0
  436. /package/dist/client/assets/{turtle-BvN-Me9x.js → turtle-GBz_E4RG.js} +0 -0
  437. /package/dist/client/assets/{vb-DYk3wW9u.js → vb-C19AQWqO.js} +0 -0
  438. /package/dist/client/assets/{vbscript-BKI61VS6.js → vbscript-CHJk3s95.js} +0 -0
  439. /package/dist/client/assets/{velocity-BrtitHHA.js → velocity-Ya0P4sQU.js} +0 -0
  440. /package/dist/client/assets/{verilog-CjUx3yiL.js → verilog-C4wTycyo.js} +0 -0
  441. /package/dist/client/assets/{vhdl-CPWwYF4V.js → vhdl-Bwndeg44.js} +0 -0
  442. /package/dist/client/assets/{webidl-PiVOzma8.js → webidl-DttrYZRT.js} +0 -0
  443. /package/dist/client/assets/{xquery-CiTzM_oK.js → xquery-CEDTd8qs.js} +0 -0
  444. /package/dist/client/assets/{yacas-4QS9CntY.js → yacas-C7dxlPB0.js} +0 -0
  445. /package/dist/client/assets/{z80-BxidrTKR.js → z80-BqEfFSnA.js} +0 -0
@@ -22,6 +22,7 @@ import { TabActivityLock } from '../infrastructure/tab-activity-lock.js';
22
22
  import { vaultApiClient } from '../infrastructure/vault-api-client.js';
23
23
  import { WorkspaceSyncClient } from '../infrastructure/workspace-sync-client.js';
24
24
  import { BacklinksPanel } from '../presentation/backlinks-panel.js';
25
+ import { BasesPreviewController } from '../presentation/bases-preview-controller.js';
25
26
  import { CommentUiController } from '../presentation/comment-ui-controller.js';
26
27
  import { DrawioEmbedController } from '../presentation/drawio-embed-controller.js';
27
28
  import { ExcalidrawEmbedController } from '../presentation/excalidraw-embed-controller.js';
@@ -185,6 +186,13 @@ export class CollabMdAppShell {
185
186
  this.videoEmbed = new VideoEmbedController({
186
187
  previewElement: this.elements.previewContent,
187
188
  });
189
+ this.basesPreview = new BasesPreviewController({
190
+ getActiveFilePath: () => this.currentFilePath,
191
+ onOpenFile: (filePath) => filePath && this.navigation.navigateToFile(filePath),
192
+ previewElement: this.elements.previewContent,
193
+ toastController: this.toastController,
194
+ vaultApiClient: this.vaultApiClient,
195
+ });
188
196
  this.imageLightbox = new ImageLightboxController({
189
197
  previewElement: this.elements.previewContent,
190
198
  });
@@ -199,6 +207,7 @@ export class CollabMdAppShell {
199
207
  });
200
208
  this.videoEmbed.reconcileEmbeds(this.elements.previewContent);
201
209
  this.videoEmbed.syncLayout();
210
+ this.basesPreview.reconcileEmbeds(this.elements.previewContent);
202
211
  this.drawioEmbed.reconcileEmbeds(this.elements.previewContent);
203
212
  this.drawioEmbed.syncLayout();
204
213
  this.excalidrawEmbed.reconcileEmbeds(this.elements.previewContent, { isLargeDocument: stats.isLargeDocument });
@@ -212,6 +221,11 @@ export class CollabMdAppShell {
212
221
  this.drawioEmbed.detachForCommit();
213
222
  this.excalidrawEmbed.detachForCommit();
214
223
  },
224
+ onPreviewLayoutChange: () => {
225
+ this.scrollSyncController.invalidatePreviewBlocks();
226
+ this.schedulePreviewLayoutSync({ delayMs: 0 });
227
+ this.refreshCommentUiLayout();
228
+ },
215
229
  onRenderComplete: () => {
216
230
  this.videoEmbed.syncLayout();
217
231
  this.drawioEmbed.syncLayout();
@@ -237,6 +251,7 @@ export class CollabMdAppShell {
237
251
  scrollEditorToLine: (lineNumber, viewportRatio) => this.session?.scrollToLine(lineNumber, viewportRatio),
238
252
  });
239
253
  this.backlinksPanel = new BacklinksPanel({
254
+ headerPanelElement: this.elements.backlinksHeaderPanel,
240
255
  inlinePanelElement: this.elements.backlinksInlinePanel,
241
256
  onFileSelect: (filePath) => this.handleFileSelection(filePath, { closeSidebarOnMobile: true }),
242
257
  panelElement: this.elements.backlinksPanel,
@@ -279,11 +294,13 @@ export class CollabMdAppShell {
279
294
  });
280
295
  this.workspacePreviewController = new WorkspacePreviewController({
281
296
  backlinksPanel: this.backlinksPanel,
297
+ basesPreview: this.basesPreview,
282
298
  drawioEmbed: this.drawioEmbed,
283
299
  elements: this.elements,
284
300
  excalidrawEmbed: this.excalidrawEmbed,
285
301
  getDisplayName: (filePath) => this.getDisplayName(filePath),
286
302
  getSession: () => this.session,
303
+ isBaseFile: (filePath) => this.isBaseFile(filePath),
287
304
  isDrawioFile: (filePath) => this.isDrawioFile(filePath),
288
305
  isExcalidrawFile: (filePath) => this.isExcalidrawFile(filePath),
289
306
  isImageFile: (filePath) => this.isImageFile(filePath),
@@ -369,6 +386,7 @@ export class CollabMdAppShell {
369
386
  getLocalUser: () => this.lobby.getLocalUser(),
370
387
  getStoredUserName: () => this.getStoredUserName(),
371
388
  getTheme: () => this.themeController.getTheme(),
389
+ isBaseFile: (filePath) => this.isBaseFile(filePath),
372
390
  isDrawioFile: (filePath) => this.isDrawioFile(filePath),
373
391
  isExcalidrawFile: (filePath) => this.isExcalidrawFile(filePath),
374
392
  isImageFile: (filePath) => this.isImageFile(filePath),
@@ -392,8 +410,15 @@ export class CollabMdAppShell {
392
410
  this.clearInitialFileBootstrap();
393
411
  },
394
412
  onConnectionChange: (state) => this.handleConnectionChange(state),
395
- onContentChange: ({ isMermaid, isPlantUml }) => {
413
+ onContentChange: ({ isBase, isMermaid, isPlantUml }) => {
396
414
  this.handleCommentEditorContentChange();
415
+ if (isBase) {
416
+ void this.renderBaseFilePreview(this.currentFilePath, {
417
+ source: this.session?.getText?.() ?? '',
418
+ });
419
+ return;
420
+ }
421
+
397
422
  this.previewRenderer.queueRender();
398
423
  if (!isMermaid && !isPlantUml) {
399
424
  this.scheduleBacklinkRefresh();
@@ -417,6 +442,7 @@ export class CollabMdAppShell {
417
442
  this.commentUi.attachSession(session);
418
443
  },
419
444
  onRenderDrawioPreview: (filePath) => this.renderDrawioFilePreview(filePath),
445
+ onRenderBasePreview: (filePath) => this.renderBaseFilePreview(filePath),
420
446
  onRenderExcalidrawPreview: (filePath) => this.renderExcalidrawFilePreview(filePath),
421
447
  onRenderImagePreview: (filePath) => this.renderImageFilePreview(filePath),
422
448
  onSyncWrapToggle: () => this.syncWrapToggle(),
@@ -426,7 +452,10 @@ export class CollabMdAppShell {
426
452
  },
427
453
  onUpdateLobbyCurrentFile: (filePath) => this.lobby.setCurrentFile(filePath),
428
454
  onUpdateVisibleChrome: (filePath, { displayName }) => {
429
- this.syncFileChrome(filePath, { drawioMode: this.currentDrawioMode });
455
+ this.syncFileChrome(filePath, {
456
+ drawioMode: this.currentDrawioMode,
457
+ preferPreviewForBase: this.isBaseFile(filePath),
458
+ });
430
459
  this.syncCommentChrome(filePath);
431
460
  this.syncFileHistoryButton({ filePath, mode: 'editor' });
432
461
  if (this.elements.activeFileName) {
@@ -434,7 +434,7 @@ function formatHorizontalRule(text, range) {
434
434
  export function createMarkdownToolbarEdit(documentText, selectionRange, action) {
435
435
  const text = String(documentText ?? '');
436
436
  const range = normalizeRange(selectionRange, text.length);
437
- let edit = null;
437
+ let edit;
438
438
 
439
439
  switch (action) {
440
440
  case 'bold':
@@ -59,6 +59,34 @@ const ICONS = Object.freeze({
59
59
  <path d="M9 16h6"/>
60
60
  </svg>
61
61
  `,
62
+ indent: `
63
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
64
+ <path d="M4 6h16"/>
65
+ <path d="M10 12h10"/>
66
+ <path d="M10 18h10"/>
67
+ <path d="m4 9 4 3-4 3"/>
68
+ </svg>
69
+ `,
70
+ outdent: `
71
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
72
+ <path d="M4 6h16"/>
73
+ <path d="M10 12h10"/>
74
+ <path d="M10 18h10"/>
75
+ <path d="m8 9-4 3 4 3"/>
76
+ </svg>
77
+ `,
78
+ redo: `
79
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
80
+ <path d="M21 7v6h-6"/>
81
+ <path d="M20 13a8 8 0 0 0-14-3"/>
82
+ </svg>
83
+ `,
84
+ undo: `
85
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
86
+ <path d="M3 7v6h6"/>
87
+ <path d="M4 13a8 8 0 0 1 14-3"/>
88
+ </svg>
89
+ `,
62
90
  chevronDown: `
63
91
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
64
92
  <path d="m6 9 6 6 6-6"/>
@@ -148,6 +176,13 @@ const INLINE_ACTIONS = Object.freeze([
148
176
  { action: 'code', label: 'Inline code', title: 'Inline code', icon: ICONS.code },
149
177
  ]);
150
178
 
179
+ const MOBILE_EDIT_COMMANDS = Object.freeze([
180
+ { commandId: 'undo', label: 'Undo', title: 'Undo', icon: ICONS.undo },
181
+ { commandId: 'redo', label: 'Redo', title: 'Redo', icon: ICONS.redo },
182
+ { commandId: 'indentMore', label: 'Indent', title: 'Indent', icon: ICONS.indent },
183
+ { commandId: 'indentLess', label: 'Outdent', title: 'Outdent', icon: ICONS.outdent },
184
+ ]);
185
+
151
186
  const MEDIA_ACTIONS = Object.freeze([
152
187
  { action: 'link', label: 'Insert link', title: 'Insert link', icon: ICONS.link },
153
188
  { action: 'image', label: 'Insert image', title: 'Insert image', icon: ICONS.image },
@@ -160,6 +195,7 @@ const INSERT_ACTIONS = Object.freeze([
160
195
  ]);
161
196
 
162
197
  export const markdownToolbarLayout = Object.freeze([
198
+ { kind: 'buttons', groupLabel: 'Edit', actions: MOBILE_EDIT_COMMANDS, mobileOnly: true },
163
199
  { kind: 'block-menu', actions: BLOCK_MENU_ACTIONS },
164
200
  { kind: 'buttons', groupLabel: 'Inline formatting', actions: INLINE_ACTIONS },
165
201
  { kind: 'buttons', groupLabel: 'Media and links', actions: MEDIA_ACTIONS },
@@ -1,4 +1,5 @@
1
1
  import {
2
+ isBaseFilePath,
2
3
  isDrawioFilePath,
3
4
  isMermaidFilePath,
4
5
  isPlantUmlFilePath,
@@ -47,6 +48,24 @@ export function createMarkdownStarter(filePath) {
47
48
  return `# ${title}\n\n`;
48
49
  }
49
50
 
51
+ export function createBaseStarter(filePath) {
52
+ const normalizedPath = normalizeVaultPathInput(filePath);
53
+ const nextPath = isBaseFilePath(normalizedPath)
54
+ ? normalizedPath
55
+ : `${normalizedPath}.base`;
56
+ return {
57
+ content: [
58
+ 'views:',
59
+ ' - type: table',
60
+ ' name: Table',
61
+ ' order:',
62
+ ' - file.name',
63
+ '',
64
+ ].join('\n'),
65
+ path: nextPath,
66
+ };
67
+ }
68
+
50
69
  export function createMermaidStarter(filePath) {
51
70
  const normalizedPath = normalizeVaultPathInput(filePath);
52
71
  const nextPath = isMermaidFilePath(normalizedPath)
@@ -1,4 +1,10 @@
1
- import { runExportAdapter, postExportPageMessage, prepareExportSnapshot, waitForBootstrapPayload } from './export-pipeline.js';
1
+ import {
2
+ postExportPageMessage,
3
+ prepareExportSnapshot,
4
+ runExportAdapter,
5
+ waitForBootstrapPayload,
6
+ waitForRenderedExportContent,
7
+ } from './export-pipeline.js';
2
8
  import { groupHeadingWithFollowingBlock } from './export-print-layout.js';
3
9
 
4
10
  function setStatus(message) {
@@ -28,13 +34,14 @@ function renderWarnings(snapshot) {
28
34
  function renderSnapshot(snapshot) {
29
35
  const mount = document.getElementById('exportContent');
30
36
  if (!mount) {
31
- return;
37
+ return null;
32
38
  }
33
39
 
34
40
  document.title = `${snapshot.title} — Export`;
35
41
  mount.innerHTML = snapshot.html;
36
42
  groupHeadingWithFollowingBlock(mount);
37
43
  renderWarnings(snapshot);
44
+ return mount;
38
45
  }
39
46
 
40
47
  async function bootstrap() {
@@ -42,7 +49,8 @@ async function bootstrap() {
42
49
  setStatus('Loading export content…');
43
50
  const payload = await waitForBootstrapPayload();
44
51
  const snapshot = await prepareExportSnapshot(payload);
45
- renderSnapshot(snapshot);
52
+ const mount = renderSnapshot(snapshot);
53
+ snapshot.html = await waitForRenderedExportContent(mount);
46
54
  setStatus(payload.action === 'pdf' ? 'Opening print dialog…' : 'Preparing DOCX download…');
47
55
  await runExportAdapter(snapshot, payload.action);
48
56
  setStatus(payload.action === 'pdf' ? 'Print dialog opened.' : 'DOCX download started.');
@@ -23,6 +23,7 @@ const LIGHT_EXPORT_MERMAID_THEME = Object.freeze({
23
23
  });
24
24
  const EXPORT_ASSET_FETCH_TIMEOUT_MS = 10_000;
25
25
  const EXPORT_ASSET_MAX_BYTES = 10 * 1024 * 1024;
26
+ const EXPORT_RENDER_SETTLE_TIMEOUT_MS = 10_000;
26
27
  const VIDEO_POSTER_CAPTURE_TIMEOUT_MS = 10_000;
27
28
  const VIDEO_POSTER_CAPTURE_SEEK_SECONDS = 1;
28
29
 
@@ -48,6 +49,10 @@ function encodeSvgDataUrl(svgMarkup) {
48
49
  return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgMarkup)}`;
49
50
  }
50
51
 
52
+ function waitForAnimationFrame() {
53
+ return new Promise((resolve) => requestAnimationFrame(() => resolve()));
54
+ }
55
+
51
56
  function blobToDataUrl(blob) {
52
57
  return new Promise((resolve, reject) => {
53
58
  const reader = new FileReader();
@@ -177,6 +182,49 @@ async function imageDataUrlToPngDataUrl(dataUrl) {
177
182
  return canvas.toDataURL('image/png');
178
183
  }
179
184
 
185
+ async function waitForImageElement(image, {
186
+ timeoutMs = EXPORT_RENDER_SETTLE_TIMEOUT_MS,
187
+ } = {}) {
188
+ if (!(image instanceof HTMLImageElement)) {
189
+ return;
190
+ }
191
+
192
+ if (!image.getAttribute('src')) {
193
+ return;
194
+ }
195
+
196
+ if (!image.complete) {
197
+ await new Promise((resolve) => {
198
+ let settled = false;
199
+ const cleanup = () => {
200
+ if (settled) {
201
+ return;
202
+ }
203
+ settled = true;
204
+ window.clearTimeout(timeoutId);
205
+ image.removeEventListener('load', handleDone);
206
+ image.removeEventListener('error', handleDone);
207
+ };
208
+ const handleDone = () => {
209
+ cleanup();
210
+ resolve();
211
+ };
212
+ const timeoutId = window.setTimeout(handleDone, timeoutMs);
213
+
214
+ image.addEventListener('load', handleDone, { once: true });
215
+ image.addEventListener('error', handleDone, { once: true });
216
+
217
+ if (image.complete) {
218
+ handleDone();
219
+ }
220
+ });
221
+ }
222
+
223
+ if (typeof image.decode === 'function') {
224
+ await image.decode().catch(() => {});
225
+ }
226
+ }
227
+
180
228
  async function fetchJson(url, init = {}) {
181
229
  const response = await fetch(url, {
182
230
  headers: {
@@ -217,7 +265,9 @@ async function fetchAsDataUrl(src, {
217
265
  });
218
266
  } catch (error) {
219
267
  if (error instanceof DOMException && error.name === 'AbortError') {
220
- throw new Error(`Timed out while fetching asset: ${assetUrl.toString()}`);
268
+ throw new Error(`Timed out while fetching asset: ${assetUrl.toString()}`, {
269
+ cause: error,
270
+ });
221
271
  }
222
272
  throw error;
223
273
  } finally {
@@ -1320,8 +1370,8 @@ export async function docxAdapter(snapshot) {
1320
1370
  }
1321
1371
 
1322
1372
  export async function printPdfAdapter() {
1323
- await new Promise((resolve) => requestAnimationFrame(() => resolve()));
1324
- await new Promise((resolve) => requestAnimationFrame(() => resolve()));
1373
+ await waitForAnimationFrame();
1374
+ await waitForAnimationFrame();
1325
1375
 
1326
1376
  await new Promise((resolve) => {
1327
1377
  const timeoutId = window.setTimeout(resolve, 1500);
@@ -1335,6 +1385,33 @@ export async function printPdfAdapter() {
1335
1385
  });
1336
1386
  }
1337
1387
 
1388
+ export async function waitForRenderedExportContent(container, {
1389
+ settleFrames = 2,
1390
+ timeoutMs = EXPORT_RENDER_SETTLE_TIMEOUT_MS,
1391
+ } = {}) {
1392
+ if (!container) {
1393
+ return '';
1394
+ }
1395
+
1396
+ const imageWaiters = Array.from(container.querySelectorAll('img')).map((image) => (
1397
+ waitForImageElement(image, { timeoutMs })
1398
+ ));
1399
+ const fontReadyPromise = document.fonts?.ready
1400
+ ? Promise.resolve(document.fonts.ready).catch(() => {})
1401
+ : Promise.resolve();
1402
+
1403
+ await Promise.allSettled([
1404
+ fontReadyPromise,
1405
+ ...imageWaiters,
1406
+ ]);
1407
+
1408
+ for (let index = 0; index < settleFrames; index += 1) {
1409
+ await waitForAnimationFrame();
1410
+ }
1411
+
1412
+ return container.innerHTML;
1413
+ }
1414
+
1338
1415
  export async function runExportAdapter(snapshot, format) {
1339
1416
  if (format === 'pdf') {
1340
1417
  await printPdfAdapter(snapshot);
@@ -258,6 +258,10 @@ export class EditorSession {
258
258
  this.viewAdapter.requestMeasure();
259
259
  }
260
260
 
261
+ runEditorCommand(commandId) {
262
+ return this.viewAdapter.runEditorCommand(commandId);
263
+ }
264
+
261
265
  applyMarkdownToolbarAction(action) {
262
266
  return this.viewAdapter.applyMarkdownToolbarAction(action);
263
267
  }
@@ -1,6 +1,16 @@
1
1
  import { autocompletion, closeBrackets, closeBracketsKeymap } from '@codemirror/autocomplete';
2
- import { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';
2
+ import {
3
+ defaultKeymap,
4
+ history,
5
+ historyKeymap,
6
+ indentLess,
7
+ indentMore,
8
+ indentWithTab,
9
+ redo,
10
+ undo,
11
+ } from '@codemirror/commands';
3
12
  import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
13
+ import { yaml } from '@codemirror/lang-yaml';
4
14
  import {
5
15
  bracketMatching,
6
16
  defaultHighlightStyle,
@@ -10,7 +20,7 @@ import {
10
20
  syntaxHighlighting,
11
21
  } from '@codemirror/language';
12
22
  import { languages } from '@codemirror/language-data';
13
- import { highlightSelectionMatches, searchKeymap } from '@codemirror/search';
23
+ import { highlightSelectionMatches, openSearchPanel, searchKeymap } from '@codemirror/search';
14
24
  import { Compartment, EditorSelection, EditorState, Prec, StateEffect, StateField } from '@codemirror/state';
15
25
  import { oneDark } from '@codemirror/theme-one-dark';
16
26
  import {
@@ -28,6 +38,7 @@ import {
28
38
  } from '@codemirror/view';
29
39
  import { yCollab } from 'y-codemirror.next';
30
40
 
41
+ import { isBaseFilePath, isPlantUmlFilePath } from '../../domain/file-kind.js';
31
42
  import { normalizeCommentQuote } from '../../domain/comment-threads.js';
32
43
  import { createMarkdownToolbarEdit } from '../domain/markdown-formatting.js';
33
44
  import { wikiLinkCompletions } from '../domain/wiki-link-completions.js';
@@ -42,6 +53,13 @@ const REMOTE_UPDATE_FLASH_DURATION_MS = 1350;
42
53
  const REMOTE_UPDATE_CARET_MAX_LENGTH = 160;
43
54
  const RECENT_LOCAL_INPUT_WINDOW_MS = 900;
44
55
  const TASK_LIST_MARKER_PATTERN = /^(\s*(?:>\s*)*(?:[-+*]|\d+[.)])\s+\[)( |x|X)(\])(\s.*)?$/;
56
+ const EDITOR_COMMANDS = Object.freeze({
57
+ indentLess,
58
+ indentMore,
59
+ openSearch: openSearchPanel,
60
+ redo,
61
+ undo,
62
+ });
45
63
 
46
64
  class RemoteUpdateCaretWidget extends WidgetType {
47
65
  toDOM() {
@@ -280,14 +298,15 @@ function createEditorTheme(theme) {
280
298
  }, { dark: theme === 'dark' });
281
299
  }
282
300
 
283
- function createLanguageExtension(filePath) {
284
- if (
285
- typeof filePath === 'string'
286
- && (filePath.toLowerCase().endsWith('.puml') || filePath.toLowerCase().endsWith('.plantuml'))
287
- ) {
301
+ export function createLanguageExtension(filePath) {
302
+ if (isPlantUmlFilePath(filePath)) {
288
303
  return plantUmlLanguage;
289
304
  }
290
305
 
306
+ if (isBaseFilePath(filePath)) {
307
+ return yaml();
308
+ }
309
+
291
310
  return markdown({ base: markdownLanguage, codeLanguages: markdownCodeLanguages });
292
311
  }
293
312
 
@@ -557,6 +576,24 @@ export class EditorViewAdapter {
557
576
  this.editorView?.requestMeasure();
558
577
  }
559
578
 
579
+ runEditorCommand(commandId) {
580
+ if (!this.editorView) {
581
+ return false;
582
+ }
583
+
584
+ const command = EDITOR_COMMANDS[String(commandId ?? '')];
585
+ if (typeof command !== 'function') {
586
+ return false;
587
+ }
588
+
589
+ const applied = command(this.editorView);
590
+ if (applied && commandId !== 'openSearch') {
591
+ this.editorView.focus();
592
+ }
593
+
594
+ return applied;
595
+ }
596
+
560
597
  flashRemoteRange({ from = 0, to = 0 } = {}, durationMs = REMOTE_UPDATE_FLASH_DURATION_MS) {
561
598
  const state = this.editorView?.state;
562
599
  if (!state || state.doc.length === 0) {
@@ -258,10 +258,14 @@ export class ExcalidrawRoomClient {
258
258
  } catch (readError) {
259
259
  if (readError?.status !== 404 || !createIfMissing) {
260
260
  if (readError?.status === 404) {
261
- throw new Error(readError.message || 'Excalidraw file not found');
261
+ throw new Error(readError.message || 'Excalidraw file not found', {
262
+ cause: readError,
263
+ });
262
264
  }
263
265
 
264
- throw new Error(readError?.message || 'Failed to load Excalidraw file');
266
+ throw new Error(readError?.message || 'Failed to load Excalidraw file', {
267
+ cause: readError,
268
+ });
265
269
  }
266
270
  }
267
271
 
@@ -278,11 +282,15 @@ export class ExcalidrawRoomClient {
278
282
  const existingData = await this.vaultClient.readFile(this.filePath);
279
283
  return parseSceneJson(existingData.content);
280
284
  } catch (conflictReadError) {
281
- throw new Error(conflictReadError?.message || 'Failed to load existing Excalidraw file after create conflict');
285
+ throw new Error(conflictReadError?.message || 'Failed to load existing Excalidraw file after create conflict', {
286
+ cause: conflictReadError,
287
+ });
282
288
  }
283
289
  }
284
290
 
285
- throw new Error(createError?.message || 'Failed to create Excalidraw file');
291
+ throw new Error(createError?.message || 'Failed to create Excalidraw file', {
292
+ cause: createError,
293
+ });
286
294
  }
287
295
  }
288
296
 
@@ -36,6 +36,60 @@ export class VaultApiClient {
36
36
  return parseApiResponse(response, 'Failed to read file');
37
37
  }
38
38
 
39
+ async queryBase({
40
+ activeFilePath = '',
41
+ path = '',
42
+ search = '',
43
+ source = null,
44
+ sourcePath = '',
45
+ view = '',
46
+ } = {}) {
47
+ const response = await fetch(resolveApiUrl('/base/query'), {
48
+ body: JSON.stringify({
49
+ activeFilePath,
50
+ path,
51
+ search,
52
+ source,
53
+ sourcePath,
54
+ view,
55
+ }),
56
+ headers: { 'Content-Type': 'application/json' },
57
+ method: 'POST',
58
+ });
59
+ return parseApiResponse(response, 'Failed to query base');
60
+ }
61
+
62
+ async exportBaseCsv({
63
+ activeFilePath = '',
64
+ path = '',
65
+ search = '',
66
+ source = null,
67
+ sourcePath = '',
68
+ view = '',
69
+ } = {}) {
70
+ const response = await fetch(resolveApiUrl('/base/export'), {
71
+ body: JSON.stringify({
72
+ activeFilePath,
73
+ path,
74
+ search,
75
+ source,
76
+ sourcePath,
77
+ view,
78
+ }),
79
+ headers: { 'Content-Type': 'application/json' },
80
+ method: 'POST',
81
+ });
82
+ if (!response.ok) {
83
+ const payload = await response.json().catch(() => ({}));
84
+ throw new Error(payload.error || 'Failed to export base CSV');
85
+ }
86
+
87
+ return {
88
+ blob: await response.blob(),
89
+ contentDisposition: response.headers.get('content-disposition') || '',
90
+ };
91
+ }
92
+
39
93
  async createFile({ content, path, requestId = null }) {
40
94
  const response = await fetch(resolveApiUrl('/file'), {
41
95
  body: JSON.stringify({ content, path }),
@@ -242,6 +242,14 @@ export function appShellTemplate() {
242
242
  <span class="ui-toolbar-button-label">Share</span>
243
243
  </button>
244
244
 
245
+ <button class=${buttonClassNames({ variant: 'ghost', toolbar: true, extra: 'toolbar-search-files-btn' })} id="searchFilesBtn" aria-label="Search files" title="Search files">
246
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true">
247
+ <circle cx="11" cy="11" r="7"></circle>
248
+ <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
249
+ </svg>
250
+ <span class="ui-toolbar-button-label">Search files</span>
251
+ </button>
252
+
245
253
  <details class="toolbar-overflow-group hidden" id="exportMenuGroup">
246
254
  <summary class=${buttonClassNames({ variant: 'ghost', toolbar: true, extra: 'toolbar-overflow-group-toggle' })} aria-label="Export options" title="Export">
247
255
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
@@ -327,6 +335,13 @@ export function appShellTemplate() {
327
335
  <span class="pane-label-meta" id="lineInfo">Ln 1, Col 1</span>
328
336
  </div>
329
337
  <div class="pane-header-actions">
338
+ <button class=${buttonClassNames({ variant: 'ghost', size: 'compact', toggle: true, extra: 'mobile-editor-find-btn' })} id="editorFindBtn" aria-label="Find in file" title="Find in file">
339
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true">
340
+ <circle cx="11" cy="11" r="7"></circle>
341
+ <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
342
+ </svg>
343
+ <span class="ui-action-label">Find</span>
344
+ </button>
330
345
  <button class=${buttonClassNames({ variant: 'ghost', size: 'compact', toggle: true, extra: 'hidden' })} id="commentSelectionBtn" aria-label="Comment current line or selection" title="Comment current line or selection">
331
346
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
332
347
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
@@ -363,6 +378,18 @@ export function appShellTemplate() {
363
378
  <div class="pane-header">
364
379
  <span class="pane-label">Preview</span>
365
380
  <div class="pane-header-actions">
381
+ <div id="backlinksHeaderPanel" class="backlinks-panel backlinks-panel-header hidden" data-backlinks-variant="header">
382
+ <button type="button" class="backlinks-header" aria-expanded="false">
383
+ <svg class="backlinks-chevron" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
384
+ <polyline points="9 18 15 12 9 6"></polyline>
385
+ </svg>
386
+ <span class="backlinks-toggle">0 Linked Mentions</span>
387
+ <span class="backlinks-count"></span>
388
+ </button>
389
+ <div class="backlinks-body" aria-hidden="true" inert>
390
+ <div class="backlinks-list"></div>
391
+ </div>
392
+ </div>
366
393
  <button class=${buttonClassNames({ variant: 'ghost', size: 'compact', toggle: true, extra: 'hidden' })} id="commentsToggle" aria-label="Toggle comments" title="Toggle comments">
367
394
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
368
395
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>