collabmd 0.1.30 → 0.1.32

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 (427) hide show
  1. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-tj0_ycIx.js → CodeMirrorEditor-UCMRAMCV-Bg0dawOb.js} +1 -1
  2. package/dist/client/assets/{_basePickBy-B6kIfhzj.js → _basePickBy-Dv0sK1l7.js} +1 -1
  3. package/dist/client/assets/{_baseUniq-Bbn0_sHS.js → _baseUniq-DKYX57ji.js} +1 -1
  4. package/dist/client/assets/{ar-SA-NXDWD63E-BWO5oYxe.js → ar-SA-NXDWD63E-WivLHHDW.js} +1 -1
  5. package/dist/client/assets/{arc-BIqum3oD.js → arc-DrfYGhWk.js} +1 -1
  6. package/dist/client/assets/architecture-PBZL5I3N-DiglIZi9.js +1 -0
  7. package/dist/client/assets/{architectureDiagram-2XIMDMQ5-BPG5b65m.js → architectureDiagram-2XIMDMQ5-kYbOThe4.js} +1 -1
  8. package/dist/client/assets/{az-AZ-MXSORGZV-Cfw6Z5oY.js → az-AZ-MXSORGZV-DOdq1TKC.js} +1 -1
  9. package/dist/client/assets/{bg-BG-O6MV2KSF-CQmG3YpD.js → bg-BG-O6MV2KSF-CYucKuDS.js} +1 -1
  10. package/dist/client/assets/{blockDiagram-WCTKOSBZ-F38TRzI3.js → blockDiagram-WCTKOSBZ-GIgTqnhk.js} +1 -1
  11. package/dist/client/assets/{bn-IN-MMW2ORAC-DZKVshfk.js → bn-BD-T2VJNT7N-2OKWLCYa.js} +1 -1
  12. package/dist/client/assets/{bn-BD-T2VJNT7N-C4S6DZ6o.js → bn-IN-MMW2ORAC-DYr8kqNL.js} +1 -1
  13. package/dist/client/assets/{c4Diagram-IC4MRINW-DHwxcDlQ.js → c4Diagram-IC4MRINW-CkHO1i_L.js} +1 -1
  14. package/dist/client/assets/{ca-ES-MKBCGNOG-Do3aMgyu.js → ca-ES-MKBCGNOG-B9Aeb43I.js} +1 -1
  15. package/dist/client/assets/channel-CgsU9TSN.js +1 -0
  16. package/dist/client/assets/{chunk-4BX2VUAB-BqEY6cCE.js → chunk-4BX2VUAB-2e7V-uuE.js} +1 -1
  17. package/dist/client/assets/{chunk-55IACEB6-039iVf6v.js → chunk-55IACEB6-CpncB3ru.js} +1 -1
  18. package/dist/client/assets/{chunk-7E7YKBS2-BreG0gYL.js → chunk-7E7YKBS2-TdU92i9i.js} +1 -1
  19. package/dist/client/assets/{chunk-7R4GIKGN-BMrp52Pk.js → chunk-7R4GIKGN-mqd2GwMg.js} +2 -2
  20. package/dist/client/assets/{chunk-C72U2L5F-BLB26v5d.js → chunk-C72U2L5F-CJKQWBtz.js} +1 -1
  21. package/dist/client/assets/{chunk-EGIJ26TM-fG-0Yh0k.js → chunk-EGIJ26TM-C4nq20om.js} +1 -1
  22. package/dist/client/assets/{chunk-FMBD7UC4-EWK5Pt4D.js → chunk-FMBD7UC4-CMahlBa_.js} +1 -1
  23. package/dist/client/assets/{chunk-GEFDOKGD-DYHmaq-c.js → chunk-GEFDOKGD-Bs7FmFox.js} +1 -1
  24. package/dist/client/assets/chunk-GLR3WWYH-qQe2O5VQ.js +2 -0
  25. package/dist/client/assets/chunk-HHEYEP7N-DlevL8bq.js +1 -0
  26. package/dist/client/assets/{chunk-JSJVCQXG-B69YGtcQ.js → chunk-JSJVCQXG-DPQ9cPJt.js} +1 -1
  27. package/dist/client/assets/{chunk-KX2RTZJC-tuEC7hg1.js → chunk-KX2RTZJC-BTiOJb7N.js} +1 -1
  28. package/dist/client/assets/{chunk-KYZI473N-D4r5eMJZ.js → chunk-KYZI473N-CTSCuqRb.js} +1 -1
  29. package/dist/client/assets/{chunk-L3YUKLVL-CD9nJYL8.js → chunk-L3YUKLVL-CJZMBtKF.js} +1 -1
  30. package/dist/client/assets/{chunk-MX3YWQON-DqN0TF5Q.js → chunk-MX3YWQON-DQpSwRf6.js} +1 -1
  31. package/dist/client/assets/{chunk-NQ4KR5QH-BBX89uUa.js → chunk-NQ4KR5QH-CMJKI6Oj.js} +1 -1
  32. package/dist/client/assets/{chunk-NU2UP6EN-CGeKI3BV.js → chunk-NU2UP6EN-DlUENSHU.js} +4 -4
  33. package/dist/client/assets/{chunk-O4XLMI2P-DaS3COAu.js → chunk-O4XLMI2P-CcVxZh41.js} +1 -1
  34. package/dist/client/assets/{chunk-OZEHJAEY-BaBXI-8x.js → chunk-OZEHJAEY-DjBZbgu0.js} +1 -1
  35. package/dist/client/assets/{chunk-PQ6SQG4A-BY9_Srs_.js → chunk-PQ6SQG4A-D1AbThjy.js} +1 -1
  36. package/dist/client/assets/{chunk-PU5JKC2W-t0zUh6E3.js → chunk-PU5JKC2W-D_6N6t8f.js} +1 -1
  37. package/dist/client/assets/chunk-QZHKN3VN-CgLPFSk5.js +1 -0
  38. package/dist/client/assets/{chunk-R5LLSJPH-BjSMFnTi.js → chunk-R5LLSJPH-CkjKXM73.js} +1 -1
  39. package/dist/client/assets/{chunk-WL4C6EOR-zSV-8h7F.js → chunk-WL4C6EOR-axcuKSup.js} +1 -1
  40. package/dist/client/assets/{chunk-XIRO2GV7-2tirYN5A.js → chunk-XIRO2GV7-4wqVHjs_.js} +1 -1
  41. package/dist/client/assets/{chunk-XPW4576I-C0GpOUHf.js → chunk-XPW4576I-DJr4_4Yy.js} +1 -1
  42. package/dist/client/assets/{chunk-XZSTWKYB-DDkpyNVE.js → chunk-XZSTWKYB-C8Y_hIKZ.js} +1 -1
  43. package/dist/client/assets/{chunk-YBOYWFTD-CzyyfGQX.js → chunk-YBOYWFTD-CKg4ymFF.js} +1 -1
  44. package/dist/client/assets/{chunk-Z5NKEFVG-Dgem5v98.js → chunk-Z5NKEFVG-HOkYqaKa.js} +1 -1
  45. package/dist/client/assets/classDiagram-VBA2DB6C-BHZpvOxK.js +1 -0
  46. package/dist/client/assets/classDiagram-v2-RAHNMMFH-DA7HMUUs.js +1 -0
  47. package/dist/client/assets/clone-Dgi8Z4IL.js +1 -0
  48. package/dist/client/assets/{cose-bilkent-S5V4N54A-jZzFUguD.js → cose-bilkent-S5V4N54A-DASO2hrk.js} +1 -1
  49. package/dist/client/assets/{cs-CZ-V77HGUP7-DmZRJ2UO.js → cs-CZ-V77HGUP7-BDg-F0CJ.js} +1 -1
  50. package/dist/client/assets/{da-DK-I5RFNTM4-CRIiLQ-G.js → da-DK-I5RFNTM4-wtSQ0Jxa.js} +1 -1
  51. package/dist/client/assets/{dagre-fvYjRtTE.js → dagre-CfB3Fw33.js} +1 -1
  52. package/dist/client/assets/{dagre-KLK3FWXG-CAG8WeES.js → dagre-KLK3FWXG-CC7tq2Ky.js} +1 -1
  53. package/dist/client/assets/{de-DE-DTI4WUSC-MFge9MC3.js → de-CH-WLRDEVBV-C1swvmZy.js} +1 -1
  54. package/dist/client/assets/{de-CH-WLRDEVBV-k728UA4j.js → de-DE-DTI4WUSC-C0L6Nz8X.js} +1 -1
  55. package/dist/client/assets/{diagram-E7M64L7V-Bm5FD0I5.js → diagram-E7M64L7V-CMt7BN5M.js} +1 -1
  56. package/dist/client/assets/{diagram-IFDJBPK2-pqicH-av.js → diagram-IFDJBPK2-BFMBUGpd.js} +1 -1
  57. package/dist/client/assets/{diagram-P4PSJMXO-DwIXO27H.js → diagram-P4PSJMXO-CviA1xXr.js} +1 -1
  58. package/dist/client/assets/dist-8Igu3Ee_2.js +1 -0
  59. package/dist/client/assets/dist-B4uQVR_X.js +1 -0
  60. package/dist/client/assets/{dockerfile-C0qQqxf9.js → dockerfile-D8_6_FRV.js} +1 -1
  61. package/dist/client/assets/{drawio-editor-CTZtMo1J.js → drawio-editor-Br4qyh3r.js} +1 -1
  62. package/dist/client/assets/drawioEditor-ClmnTx5J.js +2 -0
  63. package/dist/client/assets/editor-session-Cf-iV5-3.js +16 -0
  64. package/dist/client/assets/{el-GR-ZXDJ2OS4-Bbz93mrG.js → el-GR-ZXDJ2OS4-BH0saXds.js} +1 -1
  65. package/dist/client/assets/embedded-editor-base-CgEkjNYn.css +1 -0
  66. package/dist/client/assets/{en-IQZW2TQM-CZeIyvu2.js → en-IQZW2TQM-CzlcEpq3.js} +1 -1
  67. package/dist/client/assets/{erDiagram-INFDFZHY-DlhPv4az.js → erDiagram-INFDFZHY-DlIf-fb7.js} +1 -1
  68. package/dist/client/assets/{es-ES-DYQHAD43-CReXU-Nn.js → es-ES-DYQHAD43-CyzL9Mni.js} +1 -1
  69. package/dist/client/assets/{eu-ES-QDSYU5Y3-jRpcaWwz.js → eu-ES-QDSYU5Y3-D2-x316S.js} +1 -1
  70. package/dist/client/assets/{excalidraw-editor-CBEWfuhb.js → excalidraw-editor-CXAxVhlw.js} +2 -2
  71. package/dist/client/assets/{excalidraw-mermaid-stub-efoh2lJm.js → excalidraw-mermaid-stub-Bwe-bKcT.js} +1 -1
  72. package/dist/client/assets/{excalidraw-scene-BL-OtvCd.js → excalidraw-scene-BF_bT1OL.js} +8 -8
  73. package/dist/client/assets/excalidrawEditor-DoH_kMdu.js +2 -0
  74. package/dist/client/assets/export-page-PeexH2QK.js +39 -0
  75. package/dist/client/assets/exportDocument-9wTrBZNS.css +1 -0
  76. package/dist/client/assets/exportDocument-Bia2hI25.js +2 -0
  77. package/dist/client/assets/{fa-IR-26LZG4PM-DP8pJ8e3.js → fa-IR-26LZG4PM-D8-trU2x.js} +1 -1
  78. package/dist/client/assets/{factor-2uy-lXe_.js → factor-Cz-hzBGH.js} +1 -1
  79. package/dist/client/assets/{fi-FI-6YS4KDE4-BLUDpNOj.js → fi-FI-6YS4KDE4-CCdRVFDQ.js} +1 -1
  80. package/dist/client/assets/file-kind-DBptLlF_.js +1 -0
  81. package/dist/client/assets/{flowDiagram-PKNHOUZH-BU4MOSq8.js → flowDiagram-PKNHOUZH-C_t-mkwb.js} +1 -1
  82. package/dist/client/assets/{fr-FR-BRLLPTZC-BoZz3Pi8.js → fr-FR-BRLLPTZC-Dqq-O5T_.js} +1 -1
  83. package/dist/client/assets/{ganttDiagram-A5KZAMGK-CbX67lZu.js → ganttDiagram-A5KZAMGK-BtK9Tb--.js} +1 -1
  84. package/dist/client/assets/gitGraph-HDMCJU4V-CT7YfbD3.js +1 -0
  85. package/dist/client/assets/{gitGraphDiagram-K3NZZRJ6-DhyvWcW1.js → gitGraphDiagram-K3NZZRJ6-DULDLGiJ.js} +1 -1
  86. package/dist/client/assets/{gl-ES-OKUZTLYG-CaEvhjDi.js → gl-ES-OKUZTLYG-BK7pbLbm.js} +1 -1
  87. package/dist/client/assets/{graphlib-DSzYgMXB.js → graphlib-BgRST-Qg.js} +1 -1
  88. package/dist/client/assets/{he-IL-26MGYIU7-DYOchgy9.js → he-IL-26MGYIU7-C3BuYKyY.js} +1 -1
  89. package/dist/client/assets/{hi-IN-Q4ZOGTP2-yRs8g46n.js → hi-IN-Q4ZOGTP2-BEvXWXnH.js} +1 -1
  90. package/dist/client/assets/{hu-HU-P2OXPSN5-1skPmtgc.js → hu-HU-P2OXPSN5-BWWZeJNp.js} +1 -1
  91. package/dist/client/assets/{id-ID-2EIKXYN6-iUugQJd9.js → id-ID-2EIKXYN6-DxSKi_aJ.js} +1 -1
  92. package/dist/client/assets/image-XLNPCCAD-CFiKwiWK.js +1 -0
  93. package/dist/client/assets/{index-CywRKxsk.js → index-C8QZYHvV.js} +2 -2
  94. package/dist/client/assets/index-CxSbUTs2.css +1 -0
  95. package/dist/client/assets/info-3K5VOQVL-DUpNyDC-.js +1 -0
  96. package/dist/client/assets/{infoDiagram-LFFYTUFH-Bap6MyHX.js → infoDiagram-LFFYTUFH-DFTI0nfs.js} +1 -1
  97. package/dist/client/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  98. package/dist/client/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  99. package/dist/client/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  100. package/dist/client/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  101. package/dist/client/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  102. package/dist/client/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  103. package/dist/client/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  104. package/dist/client/assets/{isEmpty-C7iPDOO3.js → isEmpty-CVvRj8fj.js} +1 -1
  105. package/dist/client/assets/{ishikawaDiagram-PHBUUO56-DbftskqN.js → ishikawaDiagram-PHBUUO56-DpBuDpC6.js} +1 -1
  106. package/dist/client/assets/{it-IT-4CFKVXI2-a5DFhzuI.js → it-IT-4CFKVXI2-BmA8wW6q.js} +1 -1
  107. package/dist/client/assets/{ja-JP-MAND2Z4V-DwogHVKd.js → ja-JP-MAND2Z4V-CLS1jI9o.js} +1 -1
  108. package/dist/client/assets/javascript-UJe68_xi.js +1 -0
  109. package/dist/client/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  110. package/dist/client/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  111. package/dist/client/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  112. package/dist/client/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  113. package/dist/client/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  114. package/dist/client/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  115. package/dist/client/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  116. package/dist/client/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  117. package/dist/client/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  118. package/dist/client/assets/{journeyDiagram-4ABVD52K-165YoX6B.js → journeyDiagram-4ABVD52K-DDur6iHm.js} +1 -1
  119. package/dist/client/assets/{kaa-HQRTCXTJ-p81XNRfH.js → kaa-HQRTCXTJ-W15DEDPz.js} +1 -1
  120. package/dist/client/assets/{kab-KAB-JKIKKTGH-mV5VzQZc.js → kab-KAB-JKIKKTGH-MLh1inqS.js} +1 -1
  121. package/dist/client/assets/{kanban-definition-K7BYSVSG-MlixoNyx.js → kanban-definition-K7BYSVSG-dA6NPLsg.js} +1 -1
  122. package/dist/client/assets/{kk-KZ-HXQ63ZFC-IIPX0GQv.js → kk-KZ-HXQ63ZFC-BtFrPeLs.js} +1 -1
  123. package/dist/client/assets/{km-KH-PKL3LSGX-D7WQFJuZ.js → km-KH-PKL3LSGX-xO5FyM9T.js} +1 -1
  124. package/dist/client/assets/{ko-KR-KXLREZX3-Bs1oLtJs.js → ko-KR-KXLREZX3-NZFoRybS.js} +1 -1
  125. package/dist/client/assets/{ku-TR-MJ4IER3X-DlxOs6aZ.js → ku-TR-MJ4IER3X-B5eVPIpK.js} +1 -1
  126. package/dist/client/assets/{line-D57TbKb7.js → line-B2GMovaI.js} +1 -1
  127. package/dist/client/assets/{linear-BIf852wI.js → linear-B2dOdA24.js} +1 -1
  128. package/dist/client/assets/{lt-LT-H6WFQ6FJ-xuo-3zKH.js → lt-LT-H6WFQ6FJ-D_7_OeJD.js} +1 -1
  129. package/dist/client/assets/{lv-LV-GOCK6SJW-C7S3M1nr.js → lv-LV-GOCK6SJW-CnpKr0oQ.js} +1 -1
  130. package/dist/client/assets/main-BjHHMlv0.js +1249 -0
  131. package/dist/client/assets/{mermaid-parser.core-lf87rdG-.js → mermaid-parser.core-B1ogGcR8.js} +2 -2
  132. package/dist/client/assets/{mermaid-runtime-C4a7TrTS.js → mermaid-runtime-Bn8A6DGx.js} +3 -3
  133. package/dist/client/assets/{mindmap-definition-YRQLILUH-_YbQSc4Q.js → mindmap-definition-YRQLILUH-DjQcsPoe.js} +1 -1
  134. package/dist/client/assets/{mr-IN-IXVLDMEQ-BsoowyZT.js → mr-IN-IXVLDMEQ-Pht2X_GK.js} +1 -1
  135. package/dist/client/assets/{my-MM-YG6MYTTD-DCqwN_K_.js → my-MM-YG6MYTTD-Cgq4HhPO.js} +1 -1
  136. package/dist/client/assets/{nb-NO-XGWJISD2-CZ5ytLgj.js → nb-NO-XGWJISD2-Bn_Bk2un.js} +1 -1
  137. package/dist/client/assets/{nl-NL-XVDVCPNC-wADsdb-h.js → nl-NL-XVDVCPNC-YkWSJS94.js} +1 -1
  138. package/dist/client/assets/{nn-NO-EMX5MJX5-D9zIKTL2.js → nn-NO-EMX5MJX5-DhP5eZJ7.js} +1 -1
  139. package/dist/client/assets/{nsis-CUd4RnvJ.js → nsis-QPGhLAeY.js} +1 -1
  140. package/dist/client/assets/{oc-FR-ROEINTVO-BSbBugJB.js → oc-FR-ROEINTVO-D3udMPnr.js} +1 -1
  141. package/dist/client/assets/{ordinal-B0PAtOQ6.js → ordinal-Dz3y_j0K.js} +1 -1
  142. package/dist/client/assets/{pa-IN-ZYN6SUDY-1pFA_3Pb.js → pa-IN-ZYN6SUDY-CR5YzFig.js} +1 -1
  143. package/dist/client/assets/packet-RMMSAZCW-DEwNbIrA.js +1 -0
  144. package/dist/client/assets/percentages-5DKR754L-D7n4T776.js +1 -0
  145. package/dist/client/assets/pie-UPGHQEXC-D5M_lSjo.js +1 -0
  146. package/dist/client/assets/{pieDiagram-SKSYHLDU-CqCgXFom.js → pieDiagram-SKSYHLDU-jhHouFpk.js} +1 -1
  147. package/dist/client/assets/{pl-PL-6VTG7PHC-DyYw0u_z.js → pl-PL-6VTG7PHC-_wZuoIDM.js} +1 -1
  148. package/dist/client/assets/preview-render-compiler-BjLlHmiQ.js +35 -0
  149. package/dist/client/assets/preview-render-compiler-Duy_3IcP.js +1 -0
  150. package/dist/client/assets/{preview-render-worker-BVbVXXPS.js → preview-render-worker-B4dH2yxj.js} +22 -22
  151. package/dist/client/assets/{pt-BR-5YFKRR5G-DJCCBBDl.js → pt-BR-5YFKRR5G-M7gIm2Hi.js} +1 -1
  152. package/dist/client/assets/{pt-PT-GEIXXZ67-BPJd09Ax.js → pt-PT-GEIXXZ67-CcxWpkGj.js} +1 -1
  153. package/dist/client/assets/{pug-BqBF8qF7.js → pug-DkUcLYWt.js} +1 -1
  154. package/dist/client/assets/{quadrantDiagram-337W2JSQ-B8eMuhg4.js → quadrantDiagram-337W2JSQ-CYKgdx7K.js} +1 -1
  155. package/dist/client/assets/quick-switcher-controller-DcyllYpm.js +5 -0
  156. package/dist/client/assets/radar-KQ55EAFF-AU1qh3Bw.js +1 -0
  157. package/dist/client/assets/{requirementDiagram-Z7DCOOCP-B6POvqz4.js → requirementDiagram-Z7DCOOCP-D9SHxoW7.js} +1 -1
  158. package/dist/client/assets/{ro-RO-E2P6TFZI-DWVyTV7V.js → ro-RO-E2P6TFZI-qR9noVzP.js} +1 -1
  159. package/dist/client/assets/{room-COWSP--i.js → room-yJaBAoEU.js} +1 -1
  160. package/dist/client/assets/{ru-RU-YBIIY43T-Dyar7CYM.js → ru-RU-YBIIY43T-CE4S_RX8.js} +1 -1
  161. package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-CXRga6Op.js → sankeyDiagram-WA2Y5GQK-CfHe3D6R.js} +1 -1
  162. package/dist/client/assets/{sequenceDiagram-2WXFIKYE-CeSFlFx5.js → sequenceDiagram-2WXFIKYE-CZsMMqAJ.js} +1 -1
  163. package/dist/client/assets/{si-LK-673C2CI2-C61aLrIy.js → si-LK-673C2CI2-Bv6Avh3z.js} +1 -1
  164. package/dist/client/assets/{sk-SK-CKZHQ4AP-BlFwOxRD.js → sk-SK-CKZHQ4AP-Cnlpp55z.js} +1 -1
  165. package/dist/client/assets/{sl-SI-557H2GWM-DcAVW-_t.js → sl-SI-557H2GWM-BfGq7AQF.js} +1 -1
  166. package/dist/client/assets/{stateDiagram-RAJIS63D-DbewhqwJ.js → stateDiagram-RAJIS63D-CoNZjTYV.js} +1 -1
  167. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-1zOw6NmQ.js +1 -0
  168. package/dist/client/assets/subset-shared.chunk-C9HjwTXy.js +1 -0
  169. package/dist/client/assets/{subset-worker.chunk-DVGT6bvR.js → subset-worker.chunk-BSCP6IiC.js} +1 -1
  170. package/dist/client/assets/{sv-SE-XOPKKDWS-BkhfOHzh.js → sv-SE-XOPKKDWS-B2_Vk-sp.js} +1 -1
  171. package/dist/client/assets/{ta-IN-XBH7DQI3-BIfwglZa.js → ta-IN-XBH7DQI3-BXQMZZIx.js} +1 -1
  172. package/dist/client/assets/{th-TH-TOCWH3R4-CkrxqVkf.js → th-TH-TOCWH3R4-C-ZIYMfH.js} +1 -1
  173. package/dist/client/assets/{timeline-definition-YZTLITO2-BXBHNWLQ.js → timeline-definition-YZTLITO2-DSe2mrG8.js} +1 -1
  174. package/dist/client/assets/{tr-TR-GXW6CYY5-CDdvG9rD.js → tr-TR-GXW6CYY5-dl702PMA.js} +1 -1
  175. package/dist/client/assets/treemap-KZPCXAKY-C9UI2fwP.js +1 -0
  176. package/dist/client/assets/{uk-UA-IJKTNUDG-DRHp0lWp.js → uk-UA-IJKTNUDG-CUYQvSSF.js} +1 -1
  177. package/dist/client/assets/{uz-UZ-TBZZEA4V-BIn-VE3Y.js → uz-UZ-TBZZEA4V-B9qw0PXX.js} +1 -1
  178. package/dist/client/assets/vault-api-client-Bf9tB_GW.js +1 -0
  179. package/dist/client/assets/vault-api-client-D7Ck0CvR.css +1 -0
  180. package/dist/client/assets/vault-utils-5Xr0MXCb.js +1 -0
  181. package/dist/client/assets/{vennDiagram-LZ73GAT5-C1hrSbf2.js → vennDiagram-LZ73GAT5-xSzaIpy1.js} +1 -1
  182. package/dist/client/assets/{vi-VN-MULSGNVB-Du7t5I0v.js → vi-VN-MULSGNVB-DqxZ_sVc.js} +1 -1
  183. package/dist/client/assets/{xychartDiagram-JWTSCODW-DhpWp8LV.js → xychartDiagram-JWTSCODW-C3vA70iJ.js} +1 -1
  184. package/dist/client/assets/{zh-CN-MVX3E32U-RcjS3rjt.js → zh-CN-MVX3E32U-BM0aLuGc.js} +1 -1
  185. package/dist/client/assets/{zh-HK-JNU5RLIE-g8UeEw5v.js → zh-HK-JNU5RLIE-dmG_YD0d.js} +1 -1
  186. package/dist/client/assets/{zh-TW-LENVCA6T-DwV25BqC.js → zh-TW-LENVCA6T-LFgbiOi3.js} +1 -1
  187. package/dist/client/drawio-editor.html +1 -1
  188. package/dist/client/excalidraw-editor.html +1 -1
  189. package/dist/client/export-document.html +3 -3
  190. package/dist/client/index.html +2 -2
  191. package/package.json +5 -1
  192. package/src/client/app/export-document.html +1 -1
  193. package/src/client/app/main-entry.js +2 -0
  194. package/src/client/application/app-shell/git-feature.js +28 -36
  195. package/src/client/application/app-shell/presence-feature.js +3 -1
  196. package/src/client/application/app-shell/workspace-feature.js +9 -0
  197. package/src/client/application/app-shell-elements.js +1 -0
  198. package/src/client/application/diagram-preview-hydrator.js +24 -15
  199. package/src/client/application/markdown-frontmatter.js +1 -56
  200. package/src/client/application/mermaid-preview-hydrator.js +121 -4
  201. package/src/client/application/plantuml-preview-hydrator.js +6 -16
  202. package/src/client/application/preview-render-compiler.js +50 -6
  203. package/src/client/application/preview-renderer.js +11 -2
  204. package/src/client/application/workspace-chrome-controller.js +25 -19
  205. package/src/client/application/workspace-coordinator.js +9 -0
  206. package/src/client/application/workspace-preview-controller.js +48 -3
  207. package/src/client/bootstrap/collabmd-app-shell.js +202 -52
  208. package/src/client/domain/excalidraw-document-switch.js +3 -0
  209. package/src/client/domain/vault-paths.js +19 -0
  210. package/src/client/excalidraw-editor.js +187 -84
  211. package/src/client/export/export-page.js +11 -3
  212. package/src/client/export/export-pipeline.js +77 -2
  213. package/src/client/infrastructure/auth-client.js +4 -4
  214. package/src/client/infrastructure/backlinks-api-client.js +18 -0
  215. package/src/client/infrastructure/comment-thread-store.js +4 -0
  216. package/src/client/infrastructure/editor-session.js +2 -0
  217. package/src/client/infrastructure/editor-view-adapter.js +8 -5
  218. package/src/client/infrastructure/git-api-client.js +134 -0
  219. package/src/client/infrastructure/plantuml-api-client.js +21 -0
  220. package/src/client/infrastructure/vault-api-client.js +121 -0
  221. package/src/client/presentation/app-shell-template.js +12 -0
  222. package/src/client/presentation/backlinks-panel.js +43 -20
  223. package/src/client/presentation/bases-preview-controller.js +463 -0
  224. package/src/client/presentation/excalidraw-embed-controller.js +251 -15
  225. package/src/client/presentation/excalidraw-embed-reconciler.js +0 -1
  226. package/src/client/presentation/file-action-controller.js +140 -0
  227. package/src/client/presentation/file-explorer-controller.js +2 -0
  228. package/src/client/presentation/file-explorer-view.js +378 -2
  229. package/src/client/presentation/file-history-view-controller.js +41 -40
  230. package/src/client/presentation/file-tree-state.js +9 -1
  231. package/src/client/presentation/git-diff-view-controller.js +70 -53
  232. package/src/client/presentation/git-panel-controller.js +12 -30
  233. package/src/client/presentation/quick-switcher-controller.js +54 -13
  234. package/src/client/styles/export-document.css +55 -0
  235. package/src/client/styles/features/auth-gate.css +13 -24
  236. package/src/client/styles/features/backlinks.css +65 -3
  237. package/src/client/styles/features/comment-card.css +6 -0
  238. package/src/client/styles/features/comments-drawer.css +38 -18
  239. package/src/client/styles/features/diagram-preview.css +33 -0
  240. package/src/client/styles/features/embedded-preview.css +37 -11
  241. package/src/client/styles/features/preview-markdown.css +285 -1
  242. package/src/client/styles/foundation/themes.css +4 -0
  243. package/src/client/styles/foundation/tokens.css +4 -3
  244. package/src/client/styles/layout/shell.css +8 -1
  245. package/src/client/styles/layout/sidebar.css +72 -0
  246. package/src/client/styles/layout/view-modes.css +5 -0
  247. package/src/domain/file-kind.js +17 -2
  248. package/src/domain/wiki-link-resolver.js +41 -23
  249. package/src/domain/yaml-frontmatter.js +59 -0
  250. package/src/server/auth/auth-common.js +224 -0
  251. package/src/server/auth/auth-constants.js +30 -0
  252. package/src/server/auth/auth-strategies.js +320 -0
  253. package/src/server/auth/create-auth-service.js +24 -545
  254. package/src/server/create-app-server.js +11 -2
  255. package/src/server/domain/backlink-index.js +102 -16
  256. package/src/server/domain/bases/base-definition.js +255 -0
  257. package/src/server/domain/bases/base-expression-runtime.js +1159 -0
  258. package/src/server/domain/bases/base-index-snapshot-store.js +418 -0
  259. package/src/server/domain/bases/base-query-results.js +205 -0
  260. package/src/server/domain/bases/base-query-service.js +204 -0
  261. package/src/server/domain/collaboration/collaboration-document-store.js +13 -2
  262. package/src/server/domain/collaboration/collaboration-room.js +36 -1
  263. package/src/server/domain/collaboration/room-client-state-store.js +1 -0
  264. package/src/server/domain/collaboration/room-persistence-controller.js +1 -1
  265. package/src/server/domain/workspace-state.js +52 -0
  266. package/src/server/infrastructure/http/create-request-handler.js +2 -0
  267. package/src/server/infrastructure/http/create-vault-api-command-handler.js +5 -0
  268. package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
  269. package/src/server/infrastructure/http/create-vault-api-query-handler.js +175 -1
  270. package/src/server/infrastructure/http/http-response.js +56 -0
  271. package/src/server/infrastructure/persistence/path-utils.js +1 -1
  272. package/src/server/infrastructure/persistence/vault-content-adapter.js +6 -0
  273. package/src/server/infrastructure/persistence/vault-file-store.js +124 -0
  274. package/src/server/infrastructure/workspace/file-system-sync-service.js +110 -19
  275. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +15 -44
  276. package/dist/client/assets/architecture-PBZL5I3N-iRyVT2GQ.js +0 -1
  277. package/dist/client/assets/channel-s0w88EQN.js +0 -1
  278. package/dist/client/assets/chunk-GLR3WWYH-CQ1LryrI.js +0 -2
  279. package/dist/client/assets/chunk-HHEYEP7N-DOQ0PCdH.js +0 -1
  280. package/dist/client/assets/chunk-QZHKN3VN-B0v4d-CS.js +0 -1
  281. package/dist/client/assets/classDiagram-VBA2DB6C-BQqG4q1b.js +0 -1
  282. package/dist/client/assets/classDiagram-v2-RAHNMMFH-BUKbprX1.js +0 -1
  283. package/dist/client/assets/clone-C-n46MFF.js +0 -1
  284. package/dist/client/assets/dist-BqQjnEWr.js +0 -1
  285. package/dist/client/assets/drawioEditor-keSJVTcv.js +0 -2
  286. package/dist/client/assets/editor-session-C9l9XwVg.js +0 -16
  287. package/dist/client/assets/embedded-editor-base-DgmRcsR8.css +0 -1
  288. package/dist/client/assets/excalidrawEditor-Ws-fwGOc.js +0 -2
  289. package/dist/client/assets/export-page-B6xYnwy7.js +0 -39
  290. package/dist/client/assets/exportDocument-8JBw0p8O.js +0 -2
  291. package/dist/client/assets/exportDocument-CtX_4PSk.css +0 -1
  292. package/dist/client/assets/gitGraph-HDMCJU4V-kkuqHGSM.js +0 -1
  293. package/dist/client/assets/image-XLNPCCAD-B4wZgh-Y.js +0 -1
  294. package/dist/client/assets/index-R4OArFku.css +0 -1
  295. package/dist/client/assets/info-3K5VOQVL-DPN78whf.js +0 -1
  296. package/dist/client/assets/javascript-8DvdgifH.js +0 -1
  297. package/dist/client/assets/main-CB97rY6B.js +0 -1213
  298. package/dist/client/assets/packet-RMMSAZCW-BymvQ5cQ.js +0 -1
  299. package/dist/client/assets/percentages-5DKR754L-CiI2D7zA.js +0 -1
  300. package/dist/client/assets/pie-UPGHQEXC-MmzJzWOE.js +0 -1
  301. package/dist/client/assets/preview-render-compiler-TmHpBDlh.js +0 -1
  302. package/dist/client/assets/preview-render-compiler-aYpnXmNm.js +0 -35
  303. package/dist/client/assets/quick-switcher-controller-DplOTsT3.js +0 -5
  304. package/dist/client/assets/radar-KQ55EAFF-CCohASSY.js +0 -1
  305. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-DbW-jVkS.js +0 -1
  306. package/dist/client/assets/subset-shared.chunk-CC_u8ICU.js +0 -1
  307. package/dist/client/assets/treemap-KZPCXAKY-9kxB0uNY.js +0 -1
  308. package/dist/client/assets/vault-api-client-DIaCC56H.js +0 -1
  309. package/dist/client/assets/vault-api-client-De7kMvrE.css +0 -1
  310. package/dist/client/assets/vault-utils-BW53lKl1.js +0 -1
  311. /package/dist/client/assets/{apl-QJCYYBkj.js → apl-C1JYSI8J.js} +0 -0
  312. /package/dist/client/assets/{array-DwdVlTkF.js → array-B3agRrCs.js} +0 -0
  313. /package/dist/client/assets/{asciiarmor-DNy0UPqh.js → asciiarmor-DHW75j1s.js} +0 -0
  314. /package/dist/client/assets/{asn1-CNPXj-s7.js → asn1-CQiG40kG.js} +0 -0
  315. /package/dist/client/assets/{asterisk-BwMdLpT2.js → asterisk-BWExh0n4.js} +0 -0
  316. /package/dist/client/assets/{brainfuck-C2gHT8aA.js → brainfuck-CTNFyOLg.js} +0 -0
  317. /package/dist/client/assets/{chunk-3PELD44J-CL87tpFo.js → chunk-3PELD44J-DymL2rGq.js} +0 -0
  318. /package/dist/client/assets/{chunk-A66AFZZU-DuceaGnc.js → chunk-A66AFZZU-BFHL744F.js} +0 -0
  319. /package/dist/client/assets/{chunk-AXZTUZBK-Cxfm7hmm.js → chunk-AXZTUZBK-DuMiJYO9.js} +0 -0
  320. /package/dist/client/assets/{chunk-SRAX5OIU-CC2mobFL.js → chunk-SRAX5OIU-CLVBQRWC.js} +0 -0
  321. /package/dist/client/assets/{clike-D5X7HJpo.js → clike-1_ZsiVV8.js} +0 -0
  322. /package/dist/client/assets/{clojure-BEDKZv_5.js → clojure-D-DYVqu7.js} +0 -0
  323. /package/dist/client/assets/{cmake-Y3shE7av.js → cmake-DtGL-Unu.js} +0 -0
  324. /package/dist/client/assets/{cobol-f-3TLk62.js → cobol-DP4QggbL.js} +0 -0
  325. /package/dist/client/assets/{coffeescript-C0XA9-xa.js → coffeescript-B_7eyHAa.js} +0 -0
  326. /package/dist/client/assets/{commonlisp-BOB6sIEu.js → commonlisp-COlJYiQT.js} +0 -0
  327. /package/dist/client/assets/{crystal-ByNgE_My.js → crystal-I_dE9xG-.js} +0 -0
  328. /package/dist/client/assets/{css-eaI-ENiR.js → css-CmhPNxBE.js} +0 -0
  329. /package/dist/client/assets/{cypher-CQ-dGGSi.js → cypher-DE6I2lIA.js} +0 -0
  330. /package/dist/client/assets/{cytoscape.esm-DBDRhUia.js → cytoscape.esm-Czjc507F.js} +0 -0
  331. /package/dist/client/assets/{d-D9pnu4Cr.js → d-BNkKjn0o.js} +0 -0
  332. /package/dist/client/assets/{defaultLocale-BWgun1yJ.js → defaultLocale-B_FbTTbl.js} +0 -0
  333. /package/dist/client/assets/{diff-z9q33Lo6.js → diff-BWuPUsEo.js} +0 -0
  334. /package/dist/client/assets/{dist-xO1ImhKz.js → dist-BU8uusJX.js} +0 -0
  335. /package/dist/client/assets/{dist-CsYRf4AV.js → dist-x7PIEmJu.js} +0 -0
  336. /package/dist/client/assets/{drawio-room-C592VDk7.js → drawio-room-DEivFyNV.js} +0 -0
  337. /package/dist/client/assets/{dtd-BDizf_te.js → dtd-C6brJFPg.js} +0 -0
  338. /package/dist/client/assets/{dylan-Bk__XCKW.js → dylan-Bft86ZSB.js} +0 -0
  339. /package/dist/client/assets/{ebnf-SzN4Kxtp.js → ebnf-D6ifG44A.js} +0 -0
  340. /package/dist/client/assets/{ecl-5ulxiKbt.js → ecl-M7Iek4lq.js} +0 -0
  341. /package/dist/client/assets/{eiffel-Bhoaqbb6.js → eiffel-DwxtewZF.js} +0 -0
  342. /package/dist/client/assets/{elm-C3je846J.js → elm-B1TncobV.js} +0 -0
  343. /package/dist/client/assets/{erlang-Cgk9SIAz.js → erlang-BDJZNtt8.js} +0 -0
  344. /package/dist/client/assets/{excalidraw-mermaid-stub-B_2dv3Ll.js → excalidraw-mermaid-stub-BZPU4ZhU.js} +0 -0
  345. /package/dist/client/assets/{fcl-dvkZwp9p.js → fcl-BWKK0S4-.js} +0 -0
  346. /package/dist/client/assets/{forth-DmfSa3jN.js → forth-nvhcMz63.js} +0 -0
  347. /package/dist/client/assets/{fortran-BsZAiNnN.js → fortran-BZID-z10.js} +0 -0
  348. /package/dist/client/assets/{gas-DBpKE9ut.js → gas-DjQsZDGE.js} +0 -0
  349. /package/dist/client/assets/{gherkin-CceEbBs7.js → gherkin-S0kHlzux.js} +0 -0
  350. /package/dist/client/assets/{groovy-CxJnDvES.js → groovy-BEKazBrO.js} +0 -0
  351. /package/dist/client/assets/{haskell-CUSb34Xy.js → haskell-C6qH3-aI.js} +0 -0
  352. /package/dist/client/assets/{haxe-6EHO_h-N.js → haxe-BY9d_5nB.js} +0 -0
  353. /package/dist/client/assets/{http-C3qcBpvG.js → http-DG1Y9fpK.js} +0 -0
  354. /package/dist/client/assets/{idl-C95wIO2I.js → idl-B64p3NTJ.js} +0 -0
  355. /package/dist/client/assets/{image-blob-reduce.esm-BaW4gpT9.js → image-blob-reduce.esm-DriR2zT9.js} +0 -0
  356. /package/dist/client/assets/{init-Bjj5fg68.js → init-DtLQcSuO.js} +0 -0
  357. /package/dist/client/assets/{isArrayLikeObject-Cmt1CYnI.js → isArrayLikeObject-BId_dPHM.js} +0 -0
  358. /package/dist/client/assets/{javascript-aWB87b1w.js → javascript-CdiVhQeA.js} +0 -0
  359. /package/dist/client/assets/{jsx-runtime-DiaMmmG6.js → jsx-runtime-C2p7wRmT.js} +0 -0
  360. /package/dist/client/assets/{julia-DF9PPAXG.js → julia-B22G9Bym.js} +0 -0
  361. /package/dist/client/assets/{katex-BPsFnA3D.js → katex-CXYULLWy.js} +0 -0
  362. /package/dist/client/assets/{livescript-CnOyWwUY.js → livescript-CkcuHqeS.js} +0 -0
  363. /package/dist/client/assets/{lua-a0rEq19C.js → lua-kutgyRGY.js} +0 -0
  364. /package/dist/client/assets/{math-BaavbII8.js → math-B-LMBwub.js} +0 -0
  365. /package/dist/client/assets/{mathematica-CKUq0Ojc.js → mathematica-CKVhKnoY.js} +0 -0
  366. /package/dist/client/assets/{mbox-a-u2PLog.js → mbox-DANyzFJ2.js} +0 -0
  367. /package/dist/client/assets/{mirc-BOd43sOX.js → mirc-BVG2S5rO.js} +0 -0
  368. /package/dist/client/assets/{mllike-fHruGivh.js → mllike-C0p7lv48.js} +0 -0
  369. /package/dist/client/assets/{modelica-B0NJqf1C.js → modelica-vJ-Qa9jV.js} +0 -0
  370. /package/dist/client/assets/{mscgen-DJZ33SrF.js → mscgen-vUD-SWGJ.js} +0 -0
  371. /package/dist/client/assets/{mumps-DvMvHTxU.js → mumps-D0KfUTSd.js} +0 -0
  372. /package/dist/client/assets/{nginx-BVAs8laz.js → nginx-DkVceJrH.js} +0 -0
  373. /package/dist/client/assets/{ntriples-DrdyAZU1.js → ntriples-BBuCIfS0.js} +0 -0
  374. /package/dist/client/assets/{octave-_YqJ0g7E.js → octave-BTv2CqSQ.js} +0 -0
  375. /package/dist/client/assets/{oz-k7T3LoMr.js → oz-D8SjVDNU.js} +0 -0
  376. /package/dist/client/assets/{pascal-CftsTvte.js → pascal-T-tfhVyx.js} +0 -0
  377. /package/dist/client/assets/{path-BUmMWM1-.js → path-DIlZIGue.js} +0 -0
  378. /package/dist/client/assets/{perl-CbsLFc7A.js → perl-BDrCkHRd.js} +0 -0
  379. /package/dist/client/assets/{pica-By-YDy_B.js → pica-C1TdTz-C.js} +0 -0
  380. /package/dist/client/assets/{pig-C-jTwMS-.js → pig-BEyI4fPq.js} +0 -0
  381. /package/dist/client/assets/{powershell-DqXLgSHX.js → powershell-DtnFc6GG.js} +0 -0
  382. /package/dist/client/assets/{preview-diagram-utils-Dc83ucbv.js → preview-diagram-utils-COt-IYMD.js} +0 -0
  383. /package/dist/client/assets/{preview-render-profile-DPzmho7I.js → preview-render-profile-CR4dJZrp.js} +0 -0
  384. /package/dist/client/assets/{properties-05jaw55P.js → properties-DWUvbxV9.js} +0 -0
  385. /package/dist/client/assets/{protobuf-DThTsZQN.js → protobuf-CQGoYyfE.js} +0 -0
  386. /package/dist/client/assets/{puppet-DuHxMpoj.js → puppet-Dd-qWO3p.js} +0 -0
  387. /package/dist/client/assets/{python-BiE2VHJI.js → python-CZtTmYkS.js} +0 -0
  388. /package/dist/client/assets/{q-DH46YfNw.js → q-I27iQntV.js} +0 -0
  389. /package/dist/client/assets/{r-DmEm46kJ.js → r-DN_EydfL.js} +0 -0
  390. /package/dist/client/assets/{rough.esm-jZQkcmER.js → rough.esm-DE_lJ5Ge.js} +0 -0
  391. /package/dist/client/assets/{roundRect-CI6UmGg6.js → roundRect-BzEouiv_.js} +0 -0
  392. /package/dist/client/assets/{rpm-DILIIbRB.js → rpm-CjWxLM68.js} +0 -0
  393. /package/dist/client/assets/{ruby-2LcnHEMS.js → ruby-CB34f2Gf.js} +0 -0
  394. /package/dist/client/assets/{runtime-config-CqX_f_Q4.js → runtime-config-CqhchMC4.js} +0 -0
  395. /package/dist/client/assets/{sas-Bn81MKuB.js → sas-Bji4HDQq.js} +0 -0
  396. /package/dist/client/assets/{scheme-B8kPNbgd.js → scheme-C3elI80V.js} +0 -0
  397. /package/dist/client/assets/{shell-CGj6v8kb.js → shell-DUveK2Hb.js} +0 -0
  398. /package/dist/client/assets/{sieve-CfVNFN1K.js → sieve-2ogwMVx4.js} +0 -0
  399. /package/dist/client/assets/{simple-mode-_FSHdiXs.js → simple-mode-pOKc0mfx.js} +0 -0
  400. /package/dist/client/assets/{smalltalk-BpIFyCPt.js → smalltalk-BuGhc6lW.js} +0 -0
  401. /package/dist/client/assets/{solr-B7iFaetn.js → solr-DTxshpm8.js} +0 -0
  402. /package/dist/client/assets/{sparql-COhgMTFK.js → sparql-BOvq0dv7.js} +0 -0
  403. /package/dist/client/assets/{spreadsheet-BzuffEeg.js → spreadsheet-C6Vbtl9-.js} +0 -0
  404. /package/dist/client/assets/{sql-13lT5zDl.js → sql-DDFeQNTK.js} +0 -0
  405. /package/dist/client/assets/{src-E3c2cohN.js → src-Pgt9Gp65.js} +0 -0
  406. /package/dist/client/assets/{stex-BRSfZZYG.js → stex-CEwW0Q_0.js} +0 -0
  407. /package/dist/client/assets/{stylus-fFo0QRk_.js → stylus-D1SZIMDs.js} +0 -0
  408. /package/dist/client/assets/{swift-wb5gyb6a.js → swift-BCxe4-cw.js} +0 -0
  409. /package/dist/client/assets/{tcl-BJA7GgWY.js → tcl-SPk7uiDB.js} +0 -0
  410. /package/dist/client/assets/{textile-BQjiYu-x.js → textile-C48beRus.js} +0 -0
  411. /package/dist/client/assets/{tiddlywiki-D2vUXB6n.js → tiddlywiki-CiImjFLN.js} +0 -0
  412. /package/dist/client/assets/{tiki-BFhpdznG.js → tiki-HkXZ4BIW.js} +0 -0
  413. /package/dist/client/assets/{toml-DN06iQUw.js → toml-BmfpMy1_.js} +0 -0
  414. /package/dist/client/assets/{troff-DuQfjhPH.js → troff-BjbEOT5E.js} +0 -0
  415. /package/dist/client/assets/{ttcn-BCTy6d50.js → ttcn-NA-V4KnY.js} +0 -0
  416. /package/dist/client/assets/{ttcn-cfg-BYnZQqGa.js → ttcn-cfg-TPHncdGN.js} +0 -0
  417. /package/dist/client/assets/{turtle-BvN-Me9x.js → turtle-GBz_E4RG.js} +0 -0
  418. /package/dist/client/assets/{vb-DYk3wW9u.js → vb-C19AQWqO.js} +0 -0
  419. /package/dist/client/assets/{vbscript-BKI61VS6.js → vbscript-CHJk3s95.js} +0 -0
  420. /package/dist/client/assets/{velocity-BrtitHHA.js → velocity-Ya0P4sQU.js} +0 -0
  421. /package/dist/client/assets/{verilog-CjUx3yiL.js → verilog-C4wTycyo.js} +0 -0
  422. /package/dist/client/assets/{vhdl-CPWwYF4V.js → vhdl-Bwndeg44.js} +0 -0
  423. /package/dist/client/assets/{webidl-PiVOzma8.js → webidl-DttrYZRT.js} +0 -0
  424. /package/dist/client/assets/{xquery-CiTzM_oK.js → xquery-CEDTd8qs.js} +0 -0
  425. /package/dist/client/assets/{yacas-4QS9CntY.js → yacas-C7dxlPB0.js} +0 -0
  426. /package/dist/client/assets/{yjs-provider-reset-guard-DWGhQClh.js → yjs-provider-reset-guard-CtERLBID.js} +0 -0
  427. /package/dist/client/assets/{z80-BxidrTKR.js → z80-BqEfFSnA.js} +0 -0
@@ -75,6 +75,8 @@ export class ExcalidrawEmbedController {
75
75
  this.maximizedEmbed = null;
76
76
  this.overlayRoot = null;
77
77
  this.maximizedRoot = null;
78
+ this.warmCacheRoot = null;
79
+ this.warmEntry = null;
78
80
  this.placeholderObserver = null;
79
81
  this.followedPeerIdsByFilePath = new Map();
80
82
  this.pendingDisconnectRequests = new Map();
@@ -106,6 +108,11 @@ export class ExcalidrawEmbedController {
106
108
  entry.placeholder = null;
107
109
  });
108
110
  this.embedEntries.clear();
111
+ if (this.warmEntry) {
112
+ this._clearEntryBootTimeout(this.warmEntry);
113
+ this.warmEntry.wrapper?.remove();
114
+ this.warmEntry = null;
115
+ }
109
116
  this.pendingDisconnectRequests.forEach((request) => {
110
117
  request.resolve(false);
111
118
  });
@@ -115,6 +122,8 @@ export class ExcalidrawEmbedController {
115
122
  this.overlayRoot = null;
116
123
  this.maximizedRoot?.remove();
117
124
  this.maximizedRoot = null;
125
+ this.warmCacheRoot?.remove();
126
+ this.warmCacheRoot = null;
118
127
  }
119
128
 
120
129
  async setFollowedUser(filePath, peerId = null) {
@@ -186,6 +195,7 @@ export class ExcalidrawEmbedController {
186
195
  }));
187
196
 
188
197
  const { nextEntries, removedEntries } = reconcileEmbedEntries(this.embedEntries, descriptors);
198
+ this._captureWarmEntry(removedEntries);
189
199
  this._adoptReusableEntries(nextEntries, removedEntries);
190
200
  removedEntries.forEach((entry) => this._destroyEntry(entry));
191
201
  this.embedEntries = nextEntries;
@@ -196,8 +206,7 @@ export class ExcalidrawEmbedController {
196
206
  entry.queued = false;
197
207
  entry.followedPeerId = this.followedPeerIdsByFilePath.get(entry.filePath);
198
208
  if (entry.wrapper) {
199
- this._updateEmbedLabel(entry);
200
- this._attachWrapper(entry);
209
+ void this._hydrateEntry(entry);
201
210
  return;
202
211
  }
203
212
 
@@ -233,7 +242,7 @@ export class ExcalidrawEmbedController {
233
242
  }
234
243
 
235
244
  updateTheme(theme) {
236
- this.embedEntries.forEach((entry) => {
245
+ this._forEachManagedEntry((entry) => {
237
246
  this._postMessageToEntry(entry, {
238
247
  source: 'collabmd-host',
239
248
  type: 'set-theme',
@@ -243,7 +252,7 @@ export class ExcalidrawEmbedController {
243
252
  }
244
253
 
245
254
  updateLocalUser(user) {
246
- this.embedEntries.forEach((entry) => {
255
+ this._forEachManagedEntry((entry) => {
247
256
  this._syncEntryUser(entry, user);
248
257
  });
249
258
  }
@@ -390,19 +399,31 @@ export class ExcalidrawEmbedController {
390
399
  return;
391
400
  }
392
401
 
402
+ entry.isParked = false;
403
+
393
404
  if (!entry.wrapper) {
394
405
  const mount = this._createEmbedContainer(entry);
406
+ entry.header = mount.header;
395
407
  entry.wrapper = mount.wrapper;
396
408
  entry.iframe = mount.iframe;
397
409
  entry.labelElement = mount.labelElement;
410
+ entry.maxButton = mount.maxButton;
411
+ entry.openButton = mount.openButton;
398
412
  entry.instanceId = mount.instanceId;
399
413
  entry.isReady = false;
414
+ entry.bootFilePath = entry.filePath;
415
+ entry.bootMode = this._getEntryMode(entry);
416
+ entry.loadedFilePath = entry.bootFilePath;
417
+ entry.loadedMode = entry.bootMode;
400
418
  entry.bootAttempts = (entry.bootAttempts ?? 0) + 1;
401
419
  this._armEntryBootTimeout(entry);
402
420
  }
403
421
 
404
422
  entry.followedPeerId = this.followedPeerIdsByFilePath.get(entry.filePath);
405
423
  this._updateEmbedLabel(entry);
424
+ if (this._entryNeedsHardReload(entry)) {
425
+ this._reloadEntry(entry);
426
+ }
406
427
  this._attachWrapper(entry);
407
428
  }
408
429
 
@@ -444,22 +465,16 @@ export class ExcalidrawEmbedController {
444
465
  return;
445
466
  }
446
467
 
447
- const removedIndex = removedEntries.findIndex((entry) => (
448
- entry.filePath === nextEntry.filePath
449
- && this._getEntryMode(entry) === this._getEntryMode(nextEntry)
450
- && (entry.wrapper || entry.iframe)
451
- ));
452
- if (removedIndex < 0) {
468
+ const reusedEntry = this._claimReusableEntry(nextEntry, removedEntries);
469
+ if (!reusedEntry) {
453
470
  return;
454
471
  }
455
472
 
456
- const [reusedEntry] = removedEntries.splice(removedIndex, 1);
457
473
  reusedEntry.filePath = nextEntry.filePath;
458
474
  reusedEntry.key = nextEntry.key;
459
475
  reusedEntry.label = nextEntry.label;
460
476
  reusedEntry.placeholder = nextEntry.placeholder;
461
477
  reusedEntry.queued = false;
462
- reusedEntry.reusedFromEmbed = this._isFilePreviewEntry(nextEntry);
463
478
  nextEntries.set(key, reusedEntry);
464
479
  });
465
480
  }
@@ -477,16 +492,20 @@ export class ExcalidrawEmbedController {
477
492
  }
478
493
 
479
494
  this._clearEntryBootTimeout(entry);
495
+ if (this.warmEntry === entry) {
496
+ this.warmEntry = null;
497
+ }
480
498
  this._resetPlaceholderLayout(entry);
499
+ this._setEntryLoadingState(entry, false);
481
500
  entry.wrapper?.remove();
482
501
  entry.placeholder = null;
483
502
  }
484
503
 
485
- _armEntryBootTimeout(entry) {
504
+ _armEntryBootTimeout(entry, delayMs = IFRAME_BOOT_TIMEOUT_MS) {
486
505
  this._clearEntryBootTimeout(entry);
487
506
  entry.bootTimerId = window.setTimeout(() => {
488
507
  void this._handleEntryBootTimeout(entry);
489
- }, IFRAME_BOOT_TIMEOUT_MS);
508
+ }, delayMs);
490
509
  }
491
510
 
492
511
  _clearEntryBootTimeout(entry) {
@@ -519,6 +538,7 @@ export class ExcalidrawEmbedController {
519
538
 
520
539
  this._clearEntryBootTimeout(entry);
521
540
  this._resetPlaceholderLayout(entry);
541
+ this._setEntryLoadingState(entry, false);
522
542
 
523
543
  if (this.maximizedEmbed?.wrapper === entry.wrapper) {
524
544
  this._exitMaximizedEmbed();
@@ -527,9 +547,17 @@ export class ExcalidrawEmbedController {
527
547
  entry.wrapper?.remove();
528
548
  entry.wrapper = null;
529
549
  entry.iframe = null;
550
+ entry.header = null;
530
551
  entry.labelElement = null;
552
+ entry.maxButton = null;
553
+ entry.openButton = null;
531
554
  entry.instanceId = null;
532
555
  entry.isReady = false;
556
+ entry.isParked = false;
557
+ entry.bootFilePath = null;
558
+ entry.bootMode = null;
559
+ entry.loadedFilePath = null;
560
+ entry.loadedMode = null;
533
561
 
534
562
  await this._hydrateEntry(entry);
535
563
  }
@@ -545,6 +573,10 @@ export class ExcalidrawEmbedController {
545
573
  }
546
574
  }
547
575
 
576
+ if (this.warmEntry?.iframe?.contentWindow === contentWindow) {
577
+ return this.warmEntry;
578
+ }
579
+
548
580
  return null;
549
581
  }
550
582
 
@@ -559,6 +591,10 @@ export class ExcalidrawEmbedController {
559
591
  }
560
592
  }
561
593
 
594
+ if (this.warmEntry?.filePath === filePath) {
595
+ return this.warmEntry;
596
+ }
597
+
562
598
  return null;
563
599
  }
564
600
 
@@ -572,11 +608,20 @@ export class ExcalidrawEmbedController {
572
608
  if (entry.wrapper) {
573
609
  entry.wrapper.dataset.embedKey = entry.key;
574
610
  entry.wrapper.dataset.file = entry.filePath;
611
+ entry.wrapper.classList.toggle('is-direct-file', this._isFilePreviewEntry(entry));
575
612
  }
576
613
 
577
614
  if (entry.iframe) {
578
615
  entry.iframe.title = `Excalidraw: ${entry.filePath}`;
579
616
  }
617
+
618
+ if (entry.openButton) {
619
+ if (this._isFilePreviewEntry(entry)) {
620
+ entry.openButton.remove();
621
+ } else if (!entry.openButton.isConnected && entry.header) {
622
+ entry.header.insertBefore(entry.openButton, entry.maxButton || null);
623
+ }
624
+ }
580
625
  }
581
626
 
582
627
  _buildIframeUrl(entry) {
@@ -724,13 +769,33 @@ export class ExcalidrawEmbedController {
724
769
  syncMaximizeButtonState();
725
770
 
726
771
  return {
772
+ header,
727
773
  iframe,
728
774
  instanceId: iframe.dataset.instanceId,
729
775
  labelElement: label,
776
+ maxButton: maxBtn,
777
+ openButton: openBtn,
730
778
  wrapper,
731
779
  };
732
780
  }
733
781
 
782
+ _ensureWarmCacheRoot() {
783
+ if (this.warmCacheRoot?.isConnected && this.warmCacheRoot.parentElement === document.body) {
784
+ return this.warmCacheRoot;
785
+ }
786
+
787
+ let warmCacheRoot = document.body.querySelector('[data-excalidraw-warm-cache-root="true"]');
788
+ if (!warmCacheRoot) {
789
+ warmCacheRoot = document.createElement('div');
790
+ warmCacheRoot.dataset.excalidrawWarmCacheRoot = 'true';
791
+ warmCacheRoot.className = 'excalidraw-warm-cache-root';
792
+ document.body.appendChild(warmCacheRoot);
793
+ }
794
+
795
+ this.warmCacheRoot = warmCacheRoot;
796
+ return warmCacheRoot;
797
+ }
798
+
734
799
  _setupResizer(resizer, iframe, onResizeEnd = null) {
735
800
  let startY = 0;
736
801
  let startHeight = 0;
@@ -801,7 +866,164 @@ export class ExcalidrawEmbedController {
801
866
  }
802
867
 
803
868
  _shouldInlineFilePreview(entry) {
804
- return this._isFilePreviewEntry(entry) && !entry?.reusedFromEmbed;
869
+ return this._isFilePreviewEntry(entry);
870
+ }
871
+
872
+ _entryNeedsHardReload(entry) {
873
+ const desiredMode = this._getEntryMode(entry);
874
+ return Boolean(
875
+ entry?.wrapper
876
+ && entry.iframe
877
+ && (
878
+ entry.isReady
879
+ ? (
880
+ entry.loadedFilePath !== entry.filePath
881
+ || entry.loadedMode !== desiredMode
882
+ )
883
+ : (
884
+ entry.bootFilePath !== entry.filePath
885
+ || entry.bootMode !== desiredMode
886
+ )
887
+ )
888
+ );
889
+ }
890
+
891
+ _setEntryLoadingState(entry, isLoading) {
892
+ if (!entry?.wrapper) {
893
+ return;
894
+ }
895
+
896
+ entry.wrapper.classList.toggle('is-loading', Boolean(isLoading));
897
+ entry.wrapper.setAttribute('aria-busy', isLoading ? 'true' : 'false');
898
+ }
899
+
900
+ _forEachManagedEntry(callback) {
901
+ const seen = new Set();
902
+ this.embedEntries.forEach((entry) => {
903
+ if (!entry || seen.has(entry)) {
904
+ return;
905
+ }
906
+
907
+ seen.add(entry);
908
+ callback(entry);
909
+ });
910
+
911
+ if (this.warmEntry && !seen.has(this.warmEntry)) {
912
+ callback(this.warmEntry);
913
+ }
914
+ }
915
+
916
+ _claimEntryFromRemovedEntries(removedEntries, predicate) {
917
+ const removedIndex = removedEntries.findIndex((entry) => (
918
+ (entry.wrapper || entry.iframe) && predicate(entry)
919
+ ));
920
+ if (removedIndex < 0) {
921
+ return null;
922
+ }
923
+
924
+ const [reusedEntry] = removedEntries.splice(removedIndex, 1);
925
+ return reusedEntry;
926
+ }
927
+
928
+ _claimReusableEntry(nextEntry, removedEntries) {
929
+ const desiredMode = this._getEntryMode(nextEntry);
930
+ const exactMatch = this._claimEntryFromRemovedEntries(removedEntries, (entry) => (
931
+ entry.filePath === nextEntry.filePath
932
+ && this._getEntryMode(entry) === desiredMode
933
+ ));
934
+ if (exactMatch) {
935
+ return exactMatch;
936
+ }
937
+
938
+ if (this._isFilePreviewEntry(nextEntry)) {
939
+ const promotedEntry = this._claimEntryFromRemovedEntries(removedEntries, (entry) => (
940
+ entry.filePath === nextEntry.filePath
941
+ ));
942
+ if (promotedEntry) {
943
+ return promotedEntry;
944
+ }
945
+
946
+ const warmEntry = this._claimWarmEntry();
947
+ if (warmEntry) {
948
+ return warmEntry;
949
+ }
950
+
951
+ return this._claimEntryFromRemovedEntries(removedEntries, (entry) => (
952
+ this._isFilePreviewEntry(entry)
953
+ ));
954
+ }
955
+
956
+ return null;
957
+ }
958
+
959
+ _claimWarmEntry() {
960
+ const warmEntry = this.warmEntry;
961
+ if (!warmEntry) {
962
+ return null;
963
+ }
964
+
965
+ this.warmEntry = null;
966
+ return warmEntry;
967
+ }
968
+
969
+ _captureWarmEntry(removedEntries) {
970
+ const warmCandidate = this._claimEntryFromRemovedEntries(removedEntries, (entry) => (
971
+ this._isFilePreviewEntry(entry)
972
+ ));
973
+ if (!warmCandidate) {
974
+ return;
975
+ }
976
+
977
+ if (this.warmEntry && this.warmEntry !== warmCandidate) {
978
+ this._destroyEntry(this.warmEntry);
979
+ }
980
+
981
+ this.warmEntry = warmCandidate;
982
+ this._parkWarmEntry(warmCandidate);
983
+ }
984
+
985
+ _parkWarmEntry(entry) {
986
+ if (!entry?.wrapper) {
987
+ return;
988
+ }
989
+
990
+ if (this.maximizedEmbed?.wrapper === entry.wrapper) {
991
+ this._exitMaximizedEmbed();
992
+ }
993
+
994
+ const warmCacheRoot = this._ensureWarmCacheRoot();
995
+ this._setEntryLoadingState(entry, false);
996
+ entry.isParked = true;
997
+ entry.isReady = false;
998
+ entry.bootFilePath = null;
999
+ entry.bootMode = null;
1000
+ entry.loadedFilePath = null;
1001
+ entry.loadedMode = null;
1002
+ entry.placeholder = null;
1003
+ if (entry.wrapper.parentElement !== warmCacheRoot) {
1004
+ warmCacheRoot.appendChild(entry.wrapper);
1005
+ }
1006
+ this._postMessageToEntry(entry, {
1007
+ source: 'collabmd-host',
1008
+ type: 'park-room',
1009
+ });
1010
+ }
1011
+
1012
+ _reloadEntry(entry) {
1013
+ if (!entry?.iframe) {
1014
+ return;
1015
+ }
1016
+
1017
+ this._clearEntryBootTimeout(entry);
1018
+ this._setEntryLoadingState(entry, true);
1019
+ entry.isReady = false;
1020
+ entry.bootAttempts = (entry.bootAttempts ?? 0) + 1;
1021
+ entry.bootFilePath = entry.filePath;
1022
+ entry.bootMode = this._getEntryMode(entry);
1023
+ entry.loadedFilePath = null;
1024
+ entry.loadedMode = null;
1025
+ entry.iframe.src = this._buildIframeUrl(entry).toString();
1026
+ this._armEntryBootTimeout(entry);
805
1027
  }
806
1028
 
807
1029
  _resetPlaceholderLayout(entry) {
@@ -950,8 +1172,15 @@ export class ExcalidrawEmbedController {
950
1172
  }
951
1173
 
952
1174
  if (msg.type === 'ready') {
1175
+ if (entry.isParked) {
1176
+ return;
1177
+ }
1178
+
953
1179
  entry.isReady = true;
954
1180
  this._clearEntryBootTimeout(entry);
1181
+ entry.loadedFilePath = entry.bootFilePath || entry.filePath;
1182
+ entry.loadedMode = entry.bootMode || this._getEntryMode(entry);
1183
+ this._setEntryLoadingState(entry, false);
955
1184
  this._syncEntryUser(entry);
956
1185
  this._postMessageToEntry(entry, {
957
1186
  source: 'collabmd-host',
@@ -959,10 +1188,17 @@ export class ExcalidrawEmbedController {
959
1188
  theme: this.getTheme?.() || 'dark',
960
1189
  });
961
1190
  this._syncEntryFollowState(entry);
1191
+ if (this._entryNeedsHardReload(entry)) {
1192
+ void this._hydrateEntry(entry);
1193
+ }
962
1194
  return;
963
1195
  }
964
1196
 
965
1197
  if (msg.type === 'error') {
1198
+ if (entry.isParked) {
1199
+ return;
1200
+ }
1201
+
966
1202
  entry.isReady = false;
967
1203
  void this._handleEntryBootTimeout(entry);
968
1204
  return;
@@ -11,7 +11,6 @@ export function reconcileEmbedEntries(currentEntries, placeholderDescriptors) {
11
11
  label: descriptor.label,
12
12
  placeholder: descriptor.placeholder,
13
13
  queued: false,
14
- reusedFromEmbed: false,
15
14
  wrapper: null,
16
15
  };
17
16
 
@@ -2,6 +2,7 @@ import {
2
2
  getVaultFileExtension,
3
3
  } from '../../domain/file-kind.js';
4
4
  import {
5
+ createBaseStarter,
5
6
  composeVaultChildPath,
6
7
  createDrawioStarter,
7
8
  createMarkdownStarter,
@@ -22,6 +23,12 @@ function getPathLeaf(path) {
22
23
  .pop() || '';
23
24
  }
24
25
 
26
+ function getParentPath(pathValue) {
27
+ const normalized = String(pathValue ?? '').replace(/\/+$/u, '');
28
+ const separatorIndex = normalized.lastIndexOf('/');
29
+ return separatorIndex >= 0 ? normalized.slice(0, separatorIndex) : '';
30
+ }
31
+
25
32
  function replacePathPrefix(pathValue, oldPrefix, newPrefix) {
26
33
  if (pathValue === oldPrefix) {
27
34
  return newPrefix;
@@ -123,6 +130,16 @@ export class FileActionController {
123
130
  meta: '.md',
124
131
  onSelect: () => this.handleNewFile({ parentDir }),
125
132
  },
133
+ {
134
+ contextLabel: 'New base file',
135
+ group: 'Note',
136
+ hint: 'Base',
137
+ icon: this.getCreateActionIcon('base'),
138
+ id: 'base',
139
+ label: 'Base file',
140
+ meta: '.base',
141
+ onSelect: () => this.handleNewBase({ parentDir }),
142
+ },
126
143
  {
127
144
  contextLabel: 'New Excalidraw drawing',
128
145
  group: 'Diagram',
@@ -190,6 +207,10 @@ export class FileActionController {
190
207
  label: 'Rename / move',
191
208
  onSelect: () => this.handleRenameDirectory(directoryPath),
192
209
  },
210
+ {
211
+ label: 'Download',
212
+ onSelect: () => this.handleDownloadDirectory(directoryPath),
213
+ },
193
214
  {
194
215
  label: 'Delete',
195
216
  danger: true,
@@ -204,6 +225,10 @@ export class FileActionController {
204
225
  label: 'Rename / move',
205
226
  onSelect: () => this.handleRenameFile(filePath),
206
227
  },
228
+ {
229
+ label: 'Download',
230
+ onSelect: () => this.handleDownloadFile(filePath),
231
+ },
207
232
  {
208
233
  label: 'Delete',
209
234
  danger: true,
@@ -220,6 +245,8 @@ export class FileActionController {
220
245
 
221
246
  getCreateActionIcon(kind) {
222
247
  switch (kind) {
248
+ case 'base':
249
+ return '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 4h7l5 5v11a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z"/><path d="M14 4v5h5"/><path d="M8 13h8"/><path d="M8 17h6"/><path d="M8 9h3"/></svg>';
223
250
  case 'drawio':
224
251
  case 'plantuml':
225
252
  return '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="7" height="6" rx="1"/><rect x="14" y="4" width="7" height="6" rx="1"/><rect x="8.5" y="14" width="7" height="6" rx="1"/><path d="M10 7h4"/><path d="M17.5 10v2.5"/><path d="M6.5 10v2.5"/><path d="M6.5 12.5h11"/></svg>';
@@ -614,6 +641,81 @@ export class FileActionController {
614
641
  }
615
642
  }
616
643
 
644
+ planMoveEntryByDrop({ destinationDirectory = '', sourcePath = '', sourceType = 'file' } = {}) {
645
+ const normalizedSourcePath = normalizeVaultPathInput(sourcePath);
646
+ const normalizedDestinationDirectory = normalizeVaultPathInput(destinationDirectory);
647
+ const currentParentPath = getParentPath(normalizedSourcePath);
648
+ const entryName = getPathLeaf(normalizedSourcePath);
649
+
650
+ if (!normalizedSourcePath || !entryName) {
651
+ return { ok: false, reason: 'Invalid item to move' };
652
+ }
653
+
654
+ if (currentParentPath === normalizedDestinationDirectory) {
655
+ return { ok: false, reason: 'Item is already in that folder' };
656
+ }
657
+
658
+ if (sourceType === 'directory') {
659
+ if (normalizedDestinationDirectory === normalizedSourcePath) {
660
+ return { ok: false, reason: 'A folder cannot be moved into itself' };
661
+ }
662
+
663
+ if (normalizedDestinationDirectory.startsWith(`${normalizedSourcePath}/`)) {
664
+ return { ok: false, reason: 'A folder cannot be moved into one of its descendants' };
665
+ }
666
+
667
+ return {
668
+ nextPath: composeVaultChildPath(normalizedDestinationDirectory, entryName),
669
+ ok: true,
670
+ };
671
+ }
672
+
673
+ const extension = getVaultFileExtension(normalizedSourcePath) || '.md';
674
+ return {
675
+ extension,
676
+ nextPath: composeVaultChildPath(normalizedDestinationDirectory, entryName),
677
+ ok: true,
678
+ };
679
+ }
680
+
681
+ canMoveEntryByDrop(payload = {}) {
682
+ return this.planMoveEntryByDrop(payload).ok;
683
+ }
684
+
685
+ async moveEntryByDrop(payload = {}) {
686
+ const plan = this.planMoveEntryByDrop(payload);
687
+ if (!plan.ok) {
688
+ this.showToast(plan.reason);
689
+ return false;
690
+ }
691
+
692
+ if (payload.sourceType === 'directory') {
693
+ return this.renameDirectory(payload.sourcePath, plan.nextPath);
694
+ }
695
+
696
+ return this.renameVaultFile(payload.sourcePath, plan.nextPath, plan.extension);
697
+ }
698
+
699
+ async downloadFileEntry(filePath) {
700
+ try {
701
+ await this.vaultClient.downloadFile(filePath);
702
+ return true;
703
+ } catch (error) {
704
+ this.showToast(error?.message || 'Failed to download file');
705
+ return false;
706
+ }
707
+ }
708
+
709
+ async downloadDirectoryEntry(directoryPath) {
710
+ try {
711
+ await this.vaultClient.downloadDirectory(directoryPath);
712
+ return true;
713
+ } catch (error) {
714
+ this.showToast(error?.message || 'Failed to download folder');
715
+ return false;
716
+ }
717
+ }
718
+
617
719
  getCreateContext(parentDir = '') {
618
720
  const normalizedParentDir = normalizeVaultPathInput(parentDir);
619
721
 
@@ -670,6 +772,36 @@ export class FileActionController {
670
772
  });
671
773
  }
672
774
 
775
+ handleNewBase({ parentDir = '' } = {}) {
776
+ const context = this.getCreateContext(parentDir);
777
+
778
+ this.openActionDialog({
779
+ title: 'Create base file',
780
+ copy: context.normalizedParentDir
781
+ ? 'Add a new `.base` file inside the selected folder. It opens immediately after creation.'
782
+ : 'Add a new `.base` file to the vault. It opens immediately after creation.',
783
+ label: `Base ${context.inputLabelSuffix}`,
784
+ hint: `${context.hintPrefix} ".base" is added automatically.`,
785
+ note: context.note,
786
+ placeholder: context.normalizedParentDir ? 'table-view' : 'views/table-view',
787
+ submitLabel: 'Create base',
788
+ emptyMessage: 'Base path is required',
789
+ onSubmit: (value) => {
790
+ const normalizedPath = normalizeVaultPathInput(value);
791
+ if (!normalizedPath) {
792
+ this.showToast('Base path is required');
793
+ return false;
794
+ }
795
+
796
+ const starter = createBaseStarter(composeVaultChildPath(context.normalizedParentDir, normalizedPath));
797
+ return this.createVaultFile(starter.path, starter.content, {
798
+ errorMessage: 'Failed to create base file',
799
+ openAfterCreate: true,
800
+ });
801
+ },
802
+ });
803
+ }
804
+
673
805
  handleNewFolder({ parentDir = '' } = {}) {
674
806
  const context = this.getCreateContext(parentDir);
675
807
 
@@ -865,4 +997,12 @@ export class FileActionController {
865
997
  onSubmit: () => this.deleteDirectory(directoryPath, { recursive: hasDescendants }),
866
998
  });
867
999
  }
1000
+
1001
+ handleDownloadFile(filePath) {
1002
+ void this.downloadFileEntry(filePath);
1003
+ }
1004
+
1005
+ handleDownloadDirectory(directoryPath) {
1006
+ void this.downloadDirectoryEntry(directoryPath);
1007
+ }
868
1008
  }
@@ -29,6 +29,7 @@ export class FileExplorerController {
29
29
  this.state.toggleDirectory(pathValue);
30
30
  this.renderTree();
31
31
  },
32
+ onEntryDrop: (payload) => this.actionController.moveEntryByDrop(payload),
32
33
  onFileContextMenu: (event, payload) => {
33
34
  if (payload.type === 'directory') {
34
35
  this.view.showContextMenu(event, this.actionController.getDirectoryContextMenuItems(payload.directoryPath));
@@ -40,6 +41,7 @@ export class FileExplorerController {
40
41
  onFileSelect: (filePath) => {
41
42
  this.onFileSelect?.(filePath);
42
43
  },
44
+ onValidateDrop: (payload) => this.actionController.canMoveEntryByDrop(payload),
43
45
  onSearchChange: (value) => {
44
46
  this.state.setSearchQuery(value);
45
47
  this.renderTree();