collabmd 0.1.27 → 0.1.30

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 (469) hide show
  1. package/README.md +5 -0
  2. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-C5yVpm45.js → CodeMirrorEditor-UCMRAMCV-tj0_ycIx.js} +1 -1
  3. package/dist/client/assets/{_basePickBy-Dr0N-hVE.js → _basePickBy-B6kIfhzj.js} +1 -1
  4. package/dist/client/assets/{_baseUniq-BddJc3B1.js → _baseUniq-Bbn0_sHS.js} +1 -1
  5. package/dist/client/assets/actions-XO29hEzr.css +1 -0
  6. package/dist/client/assets/{ar-SA-NXDWD63E-C3GLfrYV.js → ar-SA-NXDWD63E-BWO5oYxe.js} +1 -1
  7. package/dist/client/assets/{arc-fx_D7wYg.js → arc-BIqum3oD.js} +1 -1
  8. package/dist/client/assets/architecture-PBZL5I3N-iRyVT2GQ.js +1 -0
  9. package/dist/client/assets/architectureDiagram-2XIMDMQ5-BPG5b65m.js +36 -0
  10. package/dist/client/assets/{az-AZ-MXSORGZV-BJ2t-y-C.js → az-AZ-MXSORGZV-Cfw6Z5oY.js} +1 -1
  11. package/dist/client/assets/base-CaIEJUF9.css +1 -0
  12. package/dist/client/assets/base-h1uscjTi.js +1 -0
  13. package/dist/client/assets/{bg-BG-O6MV2KSF-Cd3kEZI-.js → bg-BG-O6MV2KSF-CQmG3YpD.js} +1 -1
  14. package/dist/client/assets/{blockDiagram-WCTKOSBZ-BivLpsk_.js → blockDiagram-WCTKOSBZ-F38TRzI3.js} +1 -1
  15. package/dist/client/assets/{bn-IN-MMW2ORAC-Dn9W9dUT.js → bn-BD-T2VJNT7N-C4S6DZ6o.js} +1 -1
  16. package/dist/client/assets/{bn-BD-T2VJNT7N-BFCx9nbZ.js → bn-IN-MMW2ORAC-DZKVshfk.js} +1 -1
  17. package/dist/client/assets/{c4Diagram-IC4MRINW-nVzPTZmV.js → c4Diagram-IC4MRINW-DHwxcDlQ.js} +1 -1
  18. package/dist/client/assets/{ca-ES-MKBCGNOG-D_BNlrmg.js → ca-ES-MKBCGNOG-Do3aMgyu.js} +1 -1
  19. package/dist/client/assets/channel-s0w88EQN.js +1 -0
  20. package/dist/client/assets/{chunk-4BX2VUAB-n_yl-toC.js → chunk-4BX2VUAB-BqEY6cCE.js} +1 -1
  21. package/dist/client/assets/{chunk-55IACEB6-CJ9i_5Da.js → chunk-55IACEB6-039iVf6v.js} +1 -1
  22. package/dist/client/assets/{chunk-7E7YKBS2-CebEBDsj.js → chunk-7E7YKBS2-BreG0gYL.js} +1 -1
  23. package/dist/client/assets/{chunk-7R4GIKGN-BXNhzFkP.js → chunk-7R4GIKGN-BMrp52Pk.js} +2 -2
  24. package/dist/client/assets/{chunk-ETSVUAFD-C8C1JDu2.js → chunk-AXZTUZBK-Cxfm7hmm.js} +1 -1
  25. package/dist/client/assets/{chunk-C72U2L5F-Cck8MvGP.js → chunk-C72U2L5F-BLB26v5d.js} +1 -1
  26. package/dist/client/assets/{chunk-EGIJ26TM-BDQ7tRV-.js → chunk-EGIJ26TM-fG-0Yh0k.js} +1 -1
  27. package/dist/client/assets/{chunk-FMBD7UC4-DAcjCJR-.js → chunk-FMBD7UC4-EWK5Pt4D.js} +1 -1
  28. package/dist/client/assets/{chunk-GEFDOKGD-CYSNVsp-.js → chunk-GEFDOKGD-DYHmaq-c.js} +1 -1
  29. package/dist/client/assets/chunk-GLR3WWYH-CQ1LryrI.js +2 -0
  30. package/dist/client/assets/chunk-HHEYEP7N-DOQ0PCdH.js +1 -0
  31. package/dist/client/assets/{chunk-JSJVCQXG-CLgStmEI.js → chunk-JSJVCQXG-B69YGtcQ.js} +1 -1
  32. package/dist/client/assets/{chunk-KX2RTZJC-B__vUl1o.js → chunk-KX2RTZJC-tuEC7hg1.js} +1 -1
  33. package/dist/client/assets/{chunk-KYZI473N-BpfobHkp.js → chunk-KYZI473N-D4r5eMJZ.js} +1 -1
  34. package/dist/client/assets/{chunk-L3YUKLVL-B7jdwbRL.js → chunk-L3YUKLVL-CD9nJYL8.js} +1 -1
  35. package/dist/client/assets/{chunk-MX3YWQON-DNcuP5dS.js → chunk-MX3YWQON-DqN0TF5Q.js} +1 -1
  36. package/dist/client/assets/{chunk-NQ4KR5QH-oaq5iS2W.js → chunk-NQ4KR5QH-BBX89uUa.js} +1 -1
  37. package/dist/client/assets/chunk-NU2UP6EN-CGeKI3BV.js +35 -0
  38. package/dist/client/assets/{chunk-O4XLMI2P-NI4OcSZ6.js → chunk-O4XLMI2P-DaS3COAu.js} +1 -1
  39. package/dist/client/assets/{chunk-OZEHJAEY-BevHLeQ0.js → chunk-OZEHJAEY-BaBXI-8x.js} +1 -1
  40. package/dist/client/assets/{chunk-PQ6SQG4A-fQ_Oml5n.js → chunk-PQ6SQG4A-BY9_Srs_.js} +1 -1
  41. package/dist/client/assets/{chunk-PU5JKC2W-Bp4H-mwZ.js → chunk-PU5JKC2W-t0zUh6E3.js} +1 -1
  42. package/dist/client/assets/chunk-QZHKN3VN-B0v4d-CS.js +1 -0
  43. package/dist/client/assets/{chunk-R5LLSJPH-CZzZlfdI.js → chunk-R5LLSJPH-BjSMFnTi.js} +1 -1
  44. package/dist/client/assets/{chunk-SRAX5OIU-CtUYAya6.js → chunk-SRAX5OIU-CC2mobFL.js} +1 -1
  45. package/dist/client/assets/{chunk-WL4C6EOR-DnV9nMco.js → chunk-WL4C6EOR-zSV-8h7F.js} +1 -1
  46. package/dist/client/assets/{chunk-XIRO2GV7-BnkmoLpc.js → chunk-XIRO2GV7-2tirYN5A.js} +1 -1
  47. package/dist/client/assets/{chunk-XPW4576I-DOk6pMat.js → chunk-XPW4576I-C0GpOUHf.js} +1 -1
  48. package/dist/client/assets/{chunk-XZSTWKYB-DZzfqgVn.js → chunk-XZSTWKYB-DDkpyNVE.js} +1 -1
  49. package/dist/client/assets/{chunk-YBOYWFTD-CrI5WFnC.js → chunk-YBOYWFTD-CzyyfGQX.js} +1 -1
  50. package/dist/client/assets/{chunk-Z5NKEFVG-EGvolisB.js → chunk-Z5NKEFVG-Dgem5v98.js} +1 -1
  51. package/dist/client/assets/classDiagram-VBA2DB6C-BQqG4q1b.js +1 -0
  52. package/dist/client/assets/classDiagram-v2-RAHNMMFH-BUKbprX1.js +1 -0
  53. package/dist/client/assets/clone-C-n46MFF.js +1 -0
  54. package/dist/client/assets/controls-CLpueX2m.css +1 -0
  55. package/dist/client/assets/{cose-bilkent-S5V4N54A-PcMOD_rX.js → cose-bilkent-S5V4N54A-jZzFUguD.js} +1 -1
  56. package/dist/client/assets/{cs-CZ-V77HGUP7-gpioT6mv.js → cs-CZ-V77HGUP7-DmZRJ2UO.js} +1 -1
  57. package/dist/client/assets/{da-DK-I5RFNTM4-CVv-_qu9.js → da-DK-I5RFNTM4-CRIiLQ-G.js} +1 -1
  58. package/dist/client/assets/dagre-KLK3FWXG-CAG8WeES.js +4 -0
  59. package/dist/client/assets/{dagre-BD9xHP_z.js → dagre-fvYjRtTE.js} +1 -1
  60. package/dist/client/assets/{de-CH-WLRDEVBV-CL0gsFEp.js → de-CH-WLRDEVBV-k728UA4j.js} +1 -1
  61. package/dist/client/assets/{de-DE-DTI4WUSC-BQO1SHIK.js → de-DE-DTI4WUSC-MFge9MC3.js} +1 -1
  62. package/dist/client/assets/diagram-E7M64L7V-Bm5FD0I5.js +24 -0
  63. package/dist/client/assets/diagram-IFDJBPK2-pqicH-av.js +43 -0
  64. package/dist/client/assets/diagram-P4PSJMXO-DwIXO27H.js +24 -0
  65. package/dist/client/assets/dist-3bQB_we3.js +1 -0
  66. package/dist/client/assets/dist-3uAMa5w5.js +1 -0
  67. package/dist/client/assets/{dist-Q6uG0wie.js → dist-B-02vKOA.js} +1 -1
  68. package/dist/client/assets/{dist-DzArd_Bk.js → dist-BLAlZer_.js} +1 -1
  69. package/dist/client/assets/dist-BVB8rn7o.js +1 -0
  70. package/dist/client/assets/{dist-DrNF924C.js → dist-Bc2ND6i3.js} +1 -1
  71. package/dist/client/assets/{dist-lbtQBzLu.js → dist-BqQjnEWr.js} +1 -1
  72. package/dist/client/assets/{dist-BQhICHxD.js → dist-BtnXjRx0.js} +1 -1
  73. package/dist/client/assets/{dist-Ciw3BJA2.js → dist-BzbYwa8m.js} +1 -1
  74. package/dist/client/assets/{dist-fkQ6urpt.js → dist-BzpfHRaE.js} +1 -1
  75. package/dist/client/assets/{dist-DhzldYic.js → dist-CGV1S_as.js} +1 -1
  76. package/dist/client/assets/dist-CL-jjdvG.js +1 -0
  77. package/dist/client/assets/{dist-WrbPKwPQ.js → dist-CXpKYW9s.js} +1 -1
  78. package/dist/client/assets/{dist-60g3bzYH.js → dist-CjII8VDS.js} +1 -1
  79. package/dist/client/assets/{dist-BiFbHWxc.js → dist-CsYRf4AV.js} +1 -1
  80. package/dist/client/assets/{dist-U9MIFRLF.js → dist-CxfohGIV.js} +1 -1
  81. package/dist/client/assets/{dist-D2m8lD1h.js → dist-D5QOYy7y.js} +1 -1
  82. package/dist/client/assets/{dist-CvMToPSN.js → dist-DIi0uqLJ.js} +1 -1
  83. package/dist/client/assets/dist-DJ16N7ol.js +1 -0
  84. package/dist/client/assets/dist-DUvaQ-Bj.js +1 -0
  85. package/dist/client/assets/{dist-yRVuIDKu.js → dist-DWJL3_bF.js} +6 -6
  86. package/dist/client/assets/dist-DsL7sqZR.js +1 -0
  87. package/dist/client/assets/{dist-DAwSRqIJ.js → dist-Dyt7n5Ui.js} +1 -1
  88. package/dist/client/assets/{dist-B2pRSR5A.js → dist-E_jPb93e.js} +1 -1
  89. package/dist/client/assets/{dist-EPRNBXHp.js → dist-O1z0Ayg0.js} +1 -1
  90. package/dist/client/assets/dist-OQE68wIX.js +1 -0
  91. package/dist/client/assets/dist-k47-Io7D.js +1 -0
  92. package/dist/client/assets/{dist-2HWwyMLA.js → dist-lDhnP-K1.js} +1 -1
  93. package/dist/client/assets/{dist-BZc5d15t.js → dist-rMhng5DK.js} +1 -1
  94. package/dist/client/assets/dist-xO1ImhKz.js +1 -0
  95. package/dist/client/assets/{dockerfile-Ci0-ApQC.js → dockerfile-C0qQqxf9.js} +1 -1
  96. package/dist/client/assets/drawio-editor-CTZtMo1J.js +9 -0
  97. package/dist/client/assets/drawio-editor-UQQ8XHou.css +1 -0
  98. package/dist/client/assets/drawioEditor-keSJVTcv.js +2 -0
  99. package/dist/client/assets/editor-session-C9l9XwVg.js +16 -0
  100. package/dist/client/assets/{el-GR-ZXDJ2OS4-DGa9DqWI.js → el-GR-ZXDJ2OS4-Bbz93mrG.js} +1 -1
  101. package/dist/client/assets/embedded-editor-base-DgmRcsR8.css +1 -0
  102. package/dist/client/assets/{en-CTDJDZ6K-DC-4I8h8.js → en-IQZW2TQM-CZeIyvu2.js} +1 -1
  103. package/dist/client/assets/{erDiagram-INFDFZHY-Dnub3poK.js → erDiagram-INFDFZHY-DlhPv4az.js} +1 -1
  104. package/dist/client/assets/{es-ES-DYQHAD43-Cox3GUnj.js → es-ES-DYQHAD43-CReXU-Nn.js} +1 -1
  105. package/dist/client/assets/{eu-ES-QDSYU5Y3-DrPM2uSX.js → eu-ES-QDSYU5Y3-jRpcaWwz.js} +1 -1
  106. package/dist/client/assets/excalidraw-editor-CBEWfuhb.js +9 -0
  107. package/dist/client/assets/excalidraw-editor-Dj3i59LW.css +1 -0
  108. package/dist/client/assets/{excalidraw-mermaid-stub-LpuTrLnr.js → excalidraw-mermaid-stub-efoh2lJm.js} +1 -1
  109. package/dist/client/assets/excalidraw-scene-BL-OtvCd.js +176 -0
  110. package/dist/client/assets/excalidrawEditor-Ws-fwGOc.js +2 -0
  111. package/dist/client/assets/export-page-B6xYnwy7.js +39 -0
  112. package/dist/client/assets/exportDocument-8JBw0p8O.js +2 -0
  113. package/dist/client/assets/exportDocument-CtX_4PSk.css +1 -0
  114. package/dist/client/assets/{fa-IR-26LZG4PM-ViTdxAWX.js → fa-IR-26LZG4PM-DP8pJ8e3.js} +1 -1
  115. package/dist/client/assets/{factor-DMvifS-k.js → factor-2uy-lXe_.js} +1 -1
  116. package/dist/client/assets/{fi-FI-6YS4KDE4-BTBRGd69.js → fi-FI-6YS4KDE4-BLUDpNOj.js} +1 -1
  117. package/dist/client/assets/{flowDiagram-PKNHOUZH-DF4dDV_8.js → flowDiagram-PKNHOUZH-BU4MOSq8.js} +1 -1
  118. package/dist/client/assets/{fr-FR-BRLLPTZC-z-POHcHJ.js → fr-FR-BRLLPTZC-BoZz3Pi8.js} +1 -1
  119. package/dist/client/assets/ganttDiagram-A5KZAMGK-CbX67lZu.js +292 -0
  120. package/dist/client/assets/gitGraph-HDMCJU4V-kkuqHGSM.js +1 -0
  121. package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-DhyvWcW1.js +65 -0
  122. package/dist/client/assets/{gl-ES-OKUZTLYG-BQtfDFNk.js → gl-ES-OKUZTLYG-CaEvhjDi.js} +1 -1
  123. package/dist/client/assets/{graphlib-B7v-yqry.js → graphlib-DSzYgMXB.js} +1 -1
  124. package/dist/client/assets/{he-IL-26MGYIU7-Dyw-xS4W.js → he-IL-26MGYIU7-DYOchgy9.js} +1 -1
  125. package/dist/client/assets/{hi-IN-Q4ZOGTP2-BqENUkZA.js → hi-IN-Q4ZOGTP2-yRs8g46n.js} +1 -1
  126. package/dist/client/assets/{hu-HU-P2OXPSN5-D1HGK0_M.js → hu-HU-P2OXPSN5-1skPmtgc.js} +1 -1
  127. package/dist/client/assets/{id-ID-2EIKXYN6-BEjyfllL.js → id-ID-2EIKXYN6-iUugQJd9.js} +1 -1
  128. package/dist/client/assets/image-XLNPCCAD-B4wZgh-Y.js +1 -0
  129. package/dist/client/assets/index-CywRKxsk.js +2 -0
  130. package/dist/client/assets/index-R4OArFku.css +1 -0
  131. package/dist/client/assets/info-3K5VOQVL-DPN78whf.js +1 -0
  132. package/dist/client/assets/infoDiagram-LFFYTUFH-Bap6MyHX.js +2 -0
  133. package/dist/client/assets/{isEmpty-CLDc0Kt_.js → isEmpty-C7iPDOO3.js} +1 -1
  134. package/dist/client/assets/{ishikawaDiagram-PHBUUO56-CmO_FyHY.js → ishikawaDiagram-PHBUUO56-DbftskqN.js} +1 -1
  135. package/dist/client/assets/{it-IT-4CFKVXI2-C24G-VcQ.js → it-IT-4CFKVXI2-a5DFhzuI.js} +1 -1
  136. package/dist/client/assets/{ja-JP-MAND2Z4V-DLhvsdYk.js → ja-JP-MAND2Z4V-DwogHVKd.js} +1 -1
  137. package/dist/client/assets/javascript-8DvdgifH.js +1 -0
  138. package/dist/client/assets/{journeyDiagram-4ABVD52K-DF4HAYLk.js → journeyDiagram-4ABVD52K-165YoX6B.js} +1 -1
  139. package/dist/client/assets/{jsx-runtime-DJkgQklN.js → jsx-runtime-DiaMmmG6.js} +1 -1
  140. package/dist/client/assets/{kaa-HQRTCXTJ-DC8l3BuJ.js → kaa-HQRTCXTJ-p81XNRfH.js} +1 -1
  141. package/dist/client/assets/{kab-KAB-JKIKKTGH-DVFog4hd.js → kab-KAB-JKIKKTGH-mV5VzQZc.js} +1 -1
  142. package/dist/client/assets/{kanban-definition-K7BYSVSG-nQoJJABn.js → kanban-definition-K7BYSVSG-MlixoNyx.js} +1 -1
  143. package/dist/client/assets/{kk-KZ-HXQ63ZFC-CULUfwMg.js → kk-KZ-HXQ63ZFC-IIPX0GQv.js} +1 -1
  144. package/dist/client/assets/{km-KH-PKL3LSGX-CnLlEv7i.js → km-KH-PKL3LSGX-D7WQFJuZ.js} +1 -1
  145. package/dist/client/assets/{ko-KR-KXLREZX3-DNKXAYCx.js → ko-KR-KXLREZX3-Bs1oLtJs.js} +1 -1
  146. package/dist/client/assets/{ku-TR-MJ4IER3X-DLUiMa4h.js → ku-TR-MJ4IER3X-DlxOs6aZ.js} +1 -1
  147. package/dist/client/assets/{line-DvLjT0Gv.js → line-D57TbKb7.js} +1 -1
  148. package/dist/client/assets/{linear-CEb8O7zv.js → linear-BIf852wI.js} +1 -1
  149. package/dist/client/assets/{lt-LT-H6WFQ6FJ-CoFiurzb.js → lt-LT-H6WFQ6FJ-xuo-3zKH.js} +1 -1
  150. package/dist/client/assets/{lv-LV-GOCK6SJW-DzeEvHxX.js → lv-LV-GOCK6SJW-C7S3M1nr.js} +1 -1
  151. package/dist/client/assets/main-CB97rY6B.js +1213 -0
  152. package/dist/client/assets/mermaid-parser.core-lf87rdG-.js +4 -0
  153. package/dist/client/assets/{mermaid-runtime-DbCLD8Ih.js → mermaid-runtime-C4a7TrTS.js} +3 -3
  154. package/dist/client/assets/{mindmap-definition-YRQLILUH-DaMULsE9.js → mindmap-definition-YRQLILUH-_YbQSc4Q.js} +1 -1
  155. package/dist/client/assets/{mr-IN-IXVLDMEQ-C5i5R9H5.js → mr-IN-IXVLDMEQ-BsoowyZT.js} +1 -1
  156. package/dist/client/assets/{my-MM-YG6MYTTD-DvwceqO-.js → my-MM-YG6MYTTD-DCqwN_K_.js} +1 -1
  157. package/dist/client/assets/navigation-Du6CLhvs.css +1 -0
  158. package/dist/client/assets/{nb-NO-XGWJISD2-BUhX8hX0.js → nb-NO-XGWJISD2-CZ5ytLgj.js} +1 -1
  159. package/dist/client/assets/{nl-NL-XVDVCPNC-BV6Y0-Q0.js → nl-NL-XVDVCPNC-wADsdb-h.js} +1 -1
  160. package/dist/client/assets/{nn-NO-EMX5MJX5-CF_bB9Jq.js → nn-NO-EMX5MJX5-D9zIKTL2.js} +1 -1
  161. package/dist/client/assets/{nsis-42hkxqLx.js → nsis-CUd4RnvJ.js} +1 -1
  162. package/dist/client/assets/{oc-FR-ROEINTVO-CiNI8fg8.js → oc-FR-ROEINTVO-BSbBugJB.js} +1 -1
  163. package/dist/client/assets/{ordinal-fW5lWpNM.js → ordinal-B0PAtOQ6.js} +1 -1
  164. package/dist/client/assets/{pa-IN-ZYN6SUDY-CsbIU150.js → pa-IN-ZYN6SUDY-1pFA_3Pb.js} +1 -1
  165. package/dist/client/assets/packet-RMMSAZCW-BymvQ5cQ.js +1 -0
  166. package/dist/client/assets/percentages-5DKR754L-CiI2D7zA.js +1 -0
  167. package/dist/client/assets/{pica-BbcTjVoI.js → pica-By-YDy_B.js} +1 -1
  168. package/dist/client/assets/pie-UPGHQEXC-MmzJzWOE.js +1 -0
  169. package/dist/client/assets/pieDiagram-SKSYHLDU-CqCgXFom.js +30 -0
  170. package/dist/client/assets/{pl-PL-6VTG7PHC-D1Nnx7R3.js → pl-PL-6VTG7PHC-DyYw0u_z.js} +1 -1
  171. package/dist/client/assets/preview-diagram-utils-Dc83ucbv.js +1 -0
  172. package/dist/client/assets/preview-render-compiler-TmHpBDlh.js +1 -0
  173. package/dist/client/assets/preview-render-compiler-aYpnXmNm.js +35 -0
  174. package/dist/client/assets/{preview-render-profile-DQsam_Ol.js → preview-render-profile-DPzmho7I.js} +1 -1
  175. package/dist/client/assets/preview-render-worker-BVbVXXPS.js +59 -0
  176. package/dist/client/assets/{pt-BR-5YFKRR5G-DEDTeWEP.js → pt-BR-5YFKRR5G-DJCCBBDl.js} +1 -1
  177. package/dist/client/assets/{pt-PT-GEIXXZ67-BpqPVZom.js → pt-PT-GEIXXZ67-BPJd09Ax.js} +1 -1
  178. package/dist/client/assets/{pug-BANqyQJ9.js → pug-BqBF8qF7.js} +1 -1
  179. package/dist/client/assets/{quadrantDiagram-337W2JSQ-DjPGrcJM.js → quadrantDiagram-337W2JSQ-B8eMuhg4.js} +1 -1
  180. package/dist/client/assets/{quick-switcher-controller-n6Jhu3Z9.js → quick-switcher-controller-DplOTsT3.js} +1 -1
  181. package/dist/client/assets/radar-KQ55EAFF-CCohASSY.js +1 -0
  182. package/dist/client/assets/{requirementDiagram-Z7DCOOCP-BmiYAMKV.js → requirementDiagram-Z7DCOOCP-B6POvqz4.js} +1 -1
  183. package/dist/client/assets/{ro-RO-E2P6TFZI-4vRM1jVT.js → ro-RO-E2P6TFZI-DWVyTV7V.js} +1 -1
  184. package/dist/client/assets/{room-DyhEnogt.js → room-COWSP--i.js} +1 -1
  185. package/dist/client/assets/{ru-RU-YBIIY43T-Cfbhz4Ew.js → ru-RU-YBIIY43T-Dyar7CYM.js} +1 -1
  186. package/dist/client/assets/runtime-config-CqX_f_Q4.js +1 -0
  187. package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-BEoPAlcC.js → sankeyDiagram-WA2Y5GQK-CXRga6Op.js} +1 -1
  188. package/dist/client/assets/{sequenceDiagram-2WXFIKYE-BXqojuDS.js → sequenceDiagram-2WXFIKYE-CeSFlFx5.js} +1 -1
  189. package/dist/client/assets/{si-LK-673C2CI2-0muNkOEn.js → si-LK-673C2CI2-C61aLrIy.js} +1 -1
  190. package/dist/client/assets/{sk-SK-CKZHQ4AP-EnLgxyJL.js → sk-SK-CKZHQ4AP-BlFwOxRD.js} +1 -1
  191. package/dist/client/assets/{sl-SI-557H2GWM-BN6npqVj.js → sl-SI-557H2GWM-DcAVW-_t.js} +1 -1
  192. package/dist/client/assets/{src-DUDi_GeV.js → src-E3c2cohN.js} +1 -1
  193. package/dist/client/assets/stateDiagram-RAJIS63D-DbewhqwJ.js +1 -0
  194. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-DbW-jVkS.js +1 -0
  195. package/dist/client/assets/states-P2LsGDDn.css +1 -0
  196. package/dist/client/assets/subset-shared.chunk-CC_u8ICU.js +1 -0
  197. package/dist/client/assets/{subset-worker.chunk-1FoL7eL0.js → subset-worker.chunk-DVGT6bvR.js} +1 -1
  198. package/dist/client/assets/{sv-SE-XOPKKDWS-D3VSs2SQ.js → sv-SE-XOPKKDWS-BkhfOHzh.js} +1 -1
  199. package/dist/client/assets/{ta-IN-XBH7DQI3-BKR1mqfo.js → ta-IN-XBH7DQI3-BIfwglZa.js} +1 -1
  200. package/dist/client/assets/{th-TH-TOCWH3R4-Bek1dQcW.js → th-TH-TOCWH3R4-CkrxqVkf.js} +1 -1
  201. package/dist/client/assets/{timeline-definition-YZTLITO2-BP09qqIh.js → timeline-definition-YZTLITO2-BXBHNWLQ.js} +1 -1
  202. package/dist/client/assets/{tr-TR-GXW6CYY5-xdLb7Dgi.js → tr-TR-GXW6CYY5-CDdvG9rD.js} +1 -1
  203. package/dist/client/assets/treemap-KZPCXAKY-9kxB0uNY.js +1 -0
  204. package/dist/client/assets/{uk-UA-IJKTNUDG-Cd0AhTti.js → uk-UA-IJKTNUDG-DRHp0lWp.js} +1 -1
  205. package/dist/client/assets/{uz-UZ-TBZZEA4V-DQH4e-QC.js → uz-UZ-TBZZEA4V-BIn-VE3Y.js} +1 -1
  206. package/dist/client/assets/vault-api-client-DIaCC56H.js +1 -0
  207. package/dist/client/assets/vault-api-client-De7kMvrE.css +1 -0
  208. package/dist/client/assets/{vennDiagram-LZ73GAT5-BvSlhnT0.js → vennDiagram-LZ73GAT5-C1hrSbf2.js} +1 -1
  209. package/dist/client/assets/{vi-VN-MULSGNVB-BYDcPrAo.js → vi-VN-MULSGNVB-Du7t5I0v.js} +1 -1
  210. package/dist/client/assets/{xychartDiagram-JWTSCODW-BvZ78F0j.js → xychartDiagram-JWTSCODW-DhpWp8LV.js} +1 -1
  211. package/dist/client/assets/yjs-provider-reset-guard-DWGhQClh.js +4 -0
  212. package/dist/client/assets/{zh-CN-MVX3E32U-BqZQ-18-.js → zh-CN-MVX3E32U-RcjS3rjt.js} +1 -1
  213. package/dist/client/assets/{zh-HK-JNU5RLIE-CbF8Agwa.js → zh-HK-JNU5RLIE-g8UeEw5v.js} +1 -1
  214. package/dist/client/assets/{zh-TW-LENVCA6T-CepoVycx.js → zh-TW-LENVCA6T-DwV25BqC.js} +1 -1
  215. package/dist/client/drawio-editor.html +4 -26
  216. package/dist/client/excalidraw-editor.html +4 -19
  217. package/dist/client/export-document.html +29 -0
  218. package/dist/client/index.html +7 -445
  219. package/docker-compose.yml +1 -0
  220. package/package.json +26 -22
  221. package/src/client/app/drawio-editor.html +1 -23
  222. package/src/client/app/excalidraw-editor.html +1 -16
  223. package/src/client/app/export-document-entry.js +25 -0
  224. package/src/client/app/export-document.html +24 -0
  225. package/src/client/app/index.html +1 -441
  226. package/src/client/app/main-entry.js +2 -0
  227. package/src/client/application/app-shell/export-feature.js +39 -0
  228. package/src/client/application/app-shell/ui-feature-shell.js +112 -17
  229. package/src/client/application/app-shell/ui-feature-toolbar.js +26 -4
  230. package/src/client/application/app-shell/workspace-feature.js +31 -3
  231. package/src/client/application/app-shell-elements.js +5 -0
  232. package/src/client/application/diagram-preview-hydrator.js +1 -1
  233. package/src/client/application/markdown-frontmatter.js +152 -0
  234. package/src/client/application/preview-render-compiler.js +16 -4
  235. package/src/client/application/preview-render-executor.js +8 -1
  236. package/src/client/application/preview-render-worker.js +4 -0
  237. package/src/client/application/preview-renderer.js +51 -1
  238. package/src/client/application/workspace-chrome-controller.js +3 -1
  239. package/src/client/application/workspace-coordinator.js +8 -1
  240. package/src/client/application/workspace-preview-controller.js +9 -3
  241. package/src/client/application/workspace-state-store.js +1 -0
  242. package/src/client/bootstrap/collabmd-app-shell.js +13 -1
  243. package/src/client/domain/markdown-formatting.js +1 -1
  244. package/src/client/domain/markdown-toolbar-actions.js +36 -0
  245. package/src/client/drawio-editor.js +4 -1
  246. package/src/client/excalidraw-editor.js +8 -0
  247. package/src/client/export/export-host.js +193 -0
  248. package/src/client/export/export-page.js +60 -0
  249. package/src/client/export/export-pipeline.js +1412 -0
  250. package/src/client/export/export-print-layout.js +50 -0
  251. package/src/client/infrastructure/auth-client.js +2 -203
  252. package/src/client/infrastructure/editor-session.js +12 -0
  253. package/src/client/infrastructure/editor-view-adapter.js +70 -2
  254. package/src/client/infrastructure/excalidraw-room-client.js +12 -4
  255. package/src/client/presentation/app-shell-renderer.js +13 -0
  256. package/src/client/presentation/app-shell-template.js +605 -0
  257. package/src/client/presentation/comment-ui/comment-ui-card.js +32 -10
  258. package/src/client/presentation/comments-panel.js +5 -3
  259. package/src/client/presentation/components/ui/badge.js +24 -0
  260. package/src/client/presentation/components/ui/button.js +78 -0
  261. package/src/client/presentation/components/ui/class-names.js +30 -0
  262. package/src/client/presentation/components/ui/ensure-ui-component-styles.js +18 -0
  263. package/src/client/presentation/components/ui/input.js +9 -0
  264. package/src/client/presentation/components/ui/segmented-control.js +31 -0
  265. package/src/client/presentation/create-menu-presenter.js +10 -2
  266. package/src/client/presentation/file-action-controller.js +5 -6
  267. package/src/client/presentation/file-explorer-view.js +9 -2
  268. package/src/client/presentation/file-history-view-controller.js +4 -3
  269. package/src/client/presentation/git-diff-view-controller.js +9 -11
  270. package/src/client/presentation/git-panel-controller.js +10 -8
  271. package/src/client/presentation/layout-controller.js +34 -4
  272. package/src/client/styles/base.css +5 -0
  273. package/src/client/styles/components/actions.css +6 -0
  274. package/src/client/styles/components/navigation.css +1 -0
  275. package/src/client/styles/export-document.css +250 -0
  276. package/src/client/styles/features/auth-gate.css +182 -0
  277. package/src/client/styles/features/git-branch.css +30 -2
  278. package/src/client/styles/features/preview-markdown.css +145 -4
  279. package/src/client/styles/layout/editor-page.css +101 -3
  280. package/src/client/styles/layout/responsive.css +97 -7
  281. package/src/client/styles/layout/shell.css +6 -0
  282. package/src/client/styles/layout/sidebar.css +1 -1
  283. package/src/client/styles/overrides/codemirror.css +74 -0
  284. package/src/client/styles/primitives/controls.css +22 -31
  285. package/src/client/styles/style.css +0 -4
  286. package/src/client/styles/surfaces/drawio-editor.css +104 -0
  287. package/src/client/styles/surfaces/embedded-editor-base.css +23 -0
  288. package/src/client/styles/surfaces/excalidraw-editor.css +16 -0
  289. package/src/server/auth/create-auth-service.js +32 -6
  290. package/src/server/config/env.js +27 -0
  291. package/src/server/config/perf-logging.js +39 -0
  292. package/src/server/create-app-server.js +105 -5
  293. package/src/server/domain/backlink-index.js +31 -7
  294. package/src/server/domain/collaboration/collaboration-room.js +28 -5
  295. package/src/server/domain/docx-exporter.js +62 -0
  296. package/src/server/infrastructure/git/history-service.js +1 -1
  297. package/src/server/infrastructure/http/create-request-handler.js +2 -0
  298. package/src/server/infrastructure/http/create-vault-api-command-handler.js +59 -1
  299. package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
  300. package/src/server/infrastructure/http/request-body.js +2 -2
  301. package/src/server/infrastructure/persistence/pull-backup-store.js +1 -1
  302. package/src/server/infrastructure/persistence/vault-file-store.js +74 -31
  303. package/src/server/infrastructure/workspace/file-system-sync-service.js +46 -12
  304. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +32 -7
  305. package/src/server/shared/async-utils.js +25 -0
  306. package/dist/client/assets/architecture-PBZL5I3N-C1Yv7agI.js +0 -1
  307. package/dist/client/assets/architectureDiagram-2XIMDMQ5-T__yxKk2.js +0 -36
  308. package/dist/client/assets/channel-DBZin7O0.js +0 -1
  309. package/dist/client/assets/chunk-27N2SPOM-CyIruM79.js +0 -34
  310. package/dist/client/assets/chunk-GLR3WWYH-FplqAopN.js +0 -2
  311. package/dist/client/assets/chunk-HHEYEP7N-Bv_FKHmu.js +0 -1
  312. package/dist/client/assets/chunk-QZHKN3VN-Blawx8vd.js +0 -1
  313. package/dist/client/assets/classDiagram-VBA2DB6C-CreQafQu.js +0 -1
  314. package/dist/client/assets/classDiagram-v2-RAHNMMFH-BIYHzbiv.js +0 -1
  315. package/dist/client/assets/clone-C3ajWNce.js +0 -1
  316. package/dist/client/assets/dagre-KLK3FWXG-Ct1xwvCC.js +0 -4
  317. package/dist/client/assets/diagram-E7M64L7V-DkHzt94k.js +0 -24
  318. package/dist/client/assets/diagram-IFDJBPK2-D4g8afpU.js +0 -43
  319. package/dist/client/assets/diagram-P4PSJMXO-DVwwx6ED.js +0 -24
  320. package/dist/client/assets/dist-BS6yAJ9F.js +0 -1
  321. package/dist/client/assets/dist-BUnp4fHW.js +0 -1
  322. package/dist/client/assets/dist-BWEDjv8G.js +0 -1
  323. package/dist/client/assets/dist-BdtPRC1F.js +0 -1
  324. package/dist/client/assets/dist-BlhsMbAl.js +0 -1
  325. package/dist/client/assets/dist-CLsz2DCg.js +0 -1
  326. package/dist/client/assets/dist-DZD5y4h6.js +0 -1
  327. package/dist/client/assets/dist-_L_gn5XE.js +0 -1
  328. package/dist/client/assets/dist-a6bFAbQd.js +0 -1
  329. package/dist/client/assets/dist-naAaVPPS.js +0 -1
  330. package/dist/client/assets/drawio-editor-BW2z4NH2.js +0 -9
  331. package/dist/client/assets/drawioEditor-DgoA4Zqi.js +0 -2
  332. package/dist/client/assets/editor-session-xPvmulmt.js +0 -16
  333. package/dist/client/assets/excalidraw-editor-BAYca95w.js +0 -182
  334. package/dist/client/assets/excalidraw-editor-D8O7A69r.css +0 -1
  335. package/dist/client/assets/excalidrawEditor-BY5rq_Bn.js +0 -2
  336. package/dist/client/assets/ganttDiagram-A5KZAMGK-CwrN53Gu.js +0 -292
  337. package/dist/client/assets/gitGraph-HDMCJU4V-DbS2XnWK.js +0 -1
  338. package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-BV9w0K-N.js +0 -65
  339. package/dist/client/assets/image-32MOCVDX-BBXPyAeU.js +0 -1
  340. package/dist/client/assets/index-D4FS-o13.js +0 -2
  341. package/dist/client/assets/index-DRgeOr4A.css +0 -1
  342. package/dist/client/assets/info-3K5VOQVL-Bre4VStM.js +0 -1
  343. package/dist/client/assets/infoDiagram-LFFYTUFH-CuUbZqrG.js +0 -2
  344. package/dist/client/assets/javascript-DdEc60Aj.js +0 -1
  345. package/dist/client/assets/main-Q1xvhoqP.js +0 -600
  346. package/dist/client/assets/mermaid-parser.core-DllATXd7.js +0 -4
  347. package/dist/client/assets/packet-RMMSAZCW-B7lnOkip.js +0 -1
  348. package/dist/client/assets/percentages-5DKR754L-Dp1vwDEq.js +0 -1
  349. package/dist/client/assets/pie-UPGHQEXC-D0gHdMgb.js +0 -1
  350. package/dist/client/assets/pieDiagram-SKSYHLDU-BPFp1WBd.js +0 -30
  351. package/dist/client/assets/preview-render-compiler-BYiRMsPq.js +0 -1
  352. package/dist/client/assets/preview-render-worker-CcASh3y3.js +0 -23
  353. package/dist/client/assets/radar-KQ55EAFF-D48du2CB.js +0 -1
  354. package/dist/client/assets/stateDiagram-RAJIS63D-DTR2sQs8.js +0 -1
  355. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-BwVII-kJ.js +0 -1
  356. package/dist/client/assets/subset-shared.chunk-C6pUl_Oh.js +0 -1
  357. package/dist/client/assets/treemap-KZPCXAKY-BBRObSiT.js +0 -1
  358. package/dist/client/assets/vault-api-client-fFJfUVXM.js +0 -188
  359. package/dist/client/assets/yjs-provider-reset-guard-Cj00kgyM.js +0 -4
  360. /package/dist/client/assets/{apl-CJPt5sW7.js → apl-QJCYYBkj.js} +0 -0
  361. /package/dist/client/assets/{array-e43ctQmx.js → array-DwdVlTkF.js} +0 -0
  362. /package/dist/client/assets/{asciiarmor-D0oCypDs.js → asciiarmor-DNy0UPqh.js} +0 -0
  363. /package/dist/client/assets/{asn1-8xgVfRoq.js → asn1-CNPXj-s7.js} +0 -0
  364. /package/dist/client/assets/{asterisk-B5kv5AQp.js → asterisk-BwMdLpT2.js} +0 -0
  365. /package/dist/client/assets/{brainfuck-Dh7M1Ucz.js → brainfuck-C2gHT8aA.js} +0 -0
  366. /package/dist/client/assets/{chunk-3PELD44J-D4qJ8fq7.js → chunk-3PELD44J-CL87tpFo.js} +0 -0
  367. /package/dist/client/assets/{chunk-A66AFZZU-CJuwmF1m.js → chunk-A66AFZZU-DuceaGnc.js} +0 -0
  368. /package/dist/client/assets/{chunk-D-fkvfCP.js → chunk-DpHwWhuW.js} +0 -0
  369. /package/dist/client/assets/{clike-zYz_LEkw.js → clike-D5X7HJpo.js} +0 -0
  370. /package/dist/client/assets/{clojure-CdWlIeQh.js → clojure-BEDKZv_5.js} +0 -0
  371. /package/dist/client/assets/{cmake-wWuF5ifR.js → cmake-Y3shE7av.js} +0 -0
  372. /package/dist/client/assets/{cobol-D3WLbLVy.js → cobol-f-3TLk62.js} +0 -0
  373. /package/dist/client/assets/{coffeescript-DRtt-5a2.js → coffeescript-C0XA9-xa.js} +0 -0
  374. /package/dist/client/assets/{commonlisp-DJV75lsU.js → commonlisp-BOB6sIEu.js} +0 -0
  375. /package/dist/client/assets/{crystal-C7mEw92C.js → crystal-ByNgE_My.js} +0 -0
  376. /package/dist/client/assets/{css-_6KgQwpu.js → css-eaI-ENiR.js} +0 -0
  377. /package/dist/client/assets/{cypher-B3uWx7jm.js → cypher-CQ-dGGSi.js} +0 -0
  378. /package/dist/client/assets/{cytoscape.esm-BbbuX1pV.js → cytoscape.esm-DBDRhUia.js} +0 -0
  379. /package/dist/client/assets/{d-D3kOh3JF.js → d-D9pnu4Cr.js} +0 -0
  380. /package/dist/client/assets/{defaultLocale-DTn6RiRA.js → defaultLocale-BWgun1yJ.js} +0 -0
  381. /package/dist/client/assets/{diff-CoamybWh.js → diff-z9q33Lo6.js} +0 -0
  382. /package/dist/client/assets/{drawio-room-D6352KkV.js → drawio-room-C592VDk7.js} +0 -0
  383. /package/dist/client/assets/{dtd-BjGQwMWL.js → dtd-BDizf_te.js} +0 -0
  384. /package/dist/client/assets/{dylan-B9W3X2GI.js → dylan-Bk__XCKW.js} +0 -0
  385. /package/dist/client/assets/{ebnf-d5D0otVn.js → ebnf-SzN4Kxtp.js} +0 -0
  386. /package/dist/client/assets/{ecl-C5Q_IBPt.js → ecl-5ulxiKbt.js} +0 -0
  387. /package/dist/client/assets/{eiffel-BQA_6I3b.js → eiffel-Bhoaqbb6.js} +0 -0
  388. /package/dist/client/assets/{elm-unPS17vB.js → elm-C3je846J.js} +0 -0
  389. /package/dist/client/assets/{erlang-R8nOsUTx.js → erlang-Cgk9SIAz.js} +0 -0
  390. /package/dist/client/assets/{excalidraw-mermaid-stub-BJq3n7pR.js → excalidraw-mermaid-stub-B_2dv3Ll.js} +0 -0
  391. /package/dist/client/assets/{fcl-CVAfW9wK.js → fcl-dvkZwp9p.js} +0 -0
  392. /package/dist/client/assets/{forth-DHbsK8X8.js → forth-DmfSa3jN.js} +0 -0
  393. /package/dist/client/assets/{fortran-4jMwxW9-.js → fortran-BsZAiNnN.js} +0 -0
  394. /package/dist/client/assets/{gas-zC_XGrQT.js → gas-DBpKE9ut.js} +0 -0
  395. /package/dist/client/assets/{gherkin-CPBQou3u.js → gherkin-CceEbBs7.js} +0 -0
  396. /package/dist/client/assets/{groovy-Cqopym0q.js → groovy-CxJnDvES.js} +0 -0
  397. /package/dist/client/assets/{haskell-imzbNPgF.js → haskell-CUSb34Xy.js} +0 -0
  398. /package/dist/client/assets/{haxe-Doh225Ku.js → haxe-6EHO_h-N.js} +0 -0
  399. /package/dist/client/assets/{http-j4R5uEso.js → http-C3qcBpvG.js} +0 -0
  400. /package/dist/client/assets/{idl-l9d1__Hj.js → idl-C95wIO2I.js} +0 -0
  401. /package/dist/client/assets/{image-blob-reduce.esm-CQfEe3_g.js → image-blob-reduce.esm-BaW4gpT9.js} +0 -0
  402. /package/dist/client/assets/{init-207s1ipc.js → init-Bjj5fg68.js} +0 -0
  403. /package/dist/client/assets/{isArrayLikeObject-ZCMZRndo.js → isArrayLikeObject-Cmt1CYnI.js} +0 -0
  404. /package/dist/client/assets/{javascript-9dQYqEHJ.js → javascript-aWB87b1w.js} +0 -0
  405. /package/dist/client/assets/{julia-ByGjwiLn.js → julia-DF9PPAXG.js} +0 -0
  406. /package/dist/client/assets/{katex-XOVNa2d9.js → katex-BPsFnA3D.js} +0 -0
  407. /package/dist/client/assets/{livescript-B8l2m7xO.js → livescript-CnOyWwUY.js} +0 -0
  408. /package/dist/client/assets/{lua-DrfAKnQQ.js → lua-a0rEq19C.js} +0 -0
  409. /package/dist/client/assets/{math-BlD6rf4Z.js → math-BaavbII8.js} +0 -0
  410. /package/dist/client/assets/{mathematica-DYk_2Ik_.js → mathematica-CKUq0Ojc.js} +0 -0
  411. /package/dist/client/assets/{mbox-BOzVHzVt.js → mbox-a-u2PLog.js} +0 -0
  412. /package/dist/client/assets/{mirc-DStbUCmv.js → mirc-BOd43sOX.js} +0 -0
  413. /package/dist/client/assets/{mllike-BmhQglqS.js → mllike-fHruGivh.js} +0 -0
  414. /package/dist/client/assets/{modelica-ZElxtbqD.js → modelica-B0NJqf1C.js} +0 -0
  415. /package/dist/client/assets/{mscgen-f-YxHPr0.js → mscgen-DJZ33SrF.js} +0 -0
  416. /package/dist/client/assets/{mumps-B79RJJhR.js → mumps-DvMvHTxU.js} +0 -0
  417. /package/dist/client/assets/{nginx-c--axfuP.js → nginx-BVAs8laz.js} +0 -0
  418. /package/dist/client/assets/{ntriples-CgD4YZZC.js → ntriples-DrdyAZU1.js} +0 -0
  419. /package/dist/client/assets/{octave-BQk-bCrp.js → octave-_YqJ0g7E.js} +0 -0
  420. /package/dist/client/assets/{oz-DPCSPrx5.js → oz-k7T3LoMr.js} +0 -0
  421. /package/dist/client/assets/{pascal-C1iGzZ53.js → pascal-CftsTvte.js} +0 -0
  422. /package/dist/client/assets/{path-CDSE7Nw0.js → path-BUmMWM1-.js} +0 -0
  423. /package/dist/client/assets/{perl-DQ3L8ffg.js → perl-CbsLFc7A.js} +0 -0
  424. /package/dist/client/assets/{pig-B4S8acys.js → pig-C-jTwMS-.js} +0 -0
  425. /package/dist/client/assets/{powershell-BhSVdaeY.js → powershell-DqXLgSHX.js} +0 -0
  426. /package/dist/client/assets/{preload-helper-I1wKxk_B.js → preload-helper-Bo9GmnuQ.js} +0 -0
  427. /package/dist/client/assets/{properties-B2nfdtxE.js → properties-05jaw55P.js} +0 -0
  428. /package/dist/client/assets/{protobuf-BFW_iwVN.js → protobuf-DThTsZQN.js} +0 -0
  429. /package/dist/client/assets/{puppet-C1-CkyhQ.js → puppet-DuHxMpoj.js} +0 -0
  430. /package/dist/client/assets/{python-CYXPDD4I.js → python-BiE2VHJI.js} +0 -0
  431. /package/dist/client/assets/{q-Bub5Xmxm.js → q-DH46YfNw.js} +0 -0
  432. /package/dist/client/assets/{r-C59ONZO2.js → r-DmEm46kJ.js} +0 -0
  433. /package/dist/client/assets/{rough.esm-xhKrnp4d.js → rough.esm-jZQkcmER.js} +0 -0
  434. /package/dist/client/assets/{roundRect-CTz-kxJH.js → roundRect-CI6UmGg6.js} +0 -0
  435. /package/dist/client/assets/{rpm-DiM-R-wd.js → rpm-DILIIbRB.js} +0 -0
  436. /package/dist/client/assets/{ruby-DTqG95KX.js → ruby-2LcnHEMS.js} +0 -0
  437. /package/dist/client/assets/{runtime-config-loader-DwWsKc1-.js → runtime-config-loader-_D2KZKn-.js} +0 -0
  438. /package/dist/client/assets/{sas-BjdhmGHX.js → sas-Bn81MKuB.js} +0 -0
  439. /package/dist/client/assets/{scheme-CWNdoI17.js → scheme-B8kPNbgd.js} +0 -0
  440. /package/dist/client/assets/{shell-iaorleRB.js → shell-CGj6v8kb.js} +0 -0
  441. /package/dist/client/assets/{sieve-D8m9Etmd.js → sieve-CfVNFN1K.js} +0 -0
  442. /package/dist/client/assets/{simple-mode-kdHrpFjq.js → simple-mode-_FSHdiXs.js} +0 -0
  443. /package/dist/client/assets/{smalltalk-28WS1mUj.js → smalltalk-BpIFyCPt.js} +0 -0
  444. /package/dist/client/assets/{solr-x8qQ6eAP.js → solr-B7iFaetn.js} +0 -0
  445. /package/dist/client/assets/{sparql-BvLmi7B6.js → sparql-COhgMTFK.js} +0 -0
  446. /package/dist/client/assets/{spreadsheet-BuqSwScP.js → spreadsheet-BzuffEeg.js} +0 -0
  447. /package/dist/client/assets/{sql-B8tBavZM.js → sql-13lT5zDl.js} +0 -0
  448. /package/dist/client/assets/{stex-Bx4bLPxI.js → stex-BRSfZZYG.js} +0 -0
  449. /package/dist/client/assets/{stylus-CMEhEjuV.js → stylus-fFo0QRk_.js} +0 -0
  450. /package/dist/client/assets/{swift-wY9II8hY.js → swift-wb5gyb6a.js} +0 -0
  451. /package/dist/client/assets/{tcl-BGywDEsi.js → tcl-BJA7GgWY.js} +0 -0
  452. /package/dist/client/assets/{textile-K_mvsehZ.js → textile-BQjiYu-x.js} +0 -0
  453. /package/dist/client/assets/{tiddlywiki-BrpeQ34q.js → tiddlywiki-D2vUXB6n.js} +0 -0
  454. /package/dist/client/assets/{tiki-z2eQQPgI.js → tiki-BFhpdznG.js} +0 -0
  455. /package/dist/client/assets/{toml-Dcu7S7XA.js → toml-DN06iQUw.js} +0 -0
  456. /package/dist/client/assets/{troff-Djlumm7T.js → troff-DuQfjhPH.js} +0 -0
  457. /package/dist/client/assets/{ttcn-XqU6tthJ.js → ttcn-BCTy6d50.js} +0 -0
  458. /package/dist/client/assets/{ttcn-cfg-BzD0wr3i.js → ttcn-cfg-BYnZQqGa.js} +0 -0
  459. /package/dist/client/assets/{turtle-DcjXkx6M.js → turtle-BvN-Me9x.js} +0 -0
  460. /package/dist/client/assets/{vault-utils-BM4i-Ofm.js → vault-utils-BW53lKl1.js} +0 -0
  461. /package/dist/client/assets/{vb-DV4y2QrD.js → vb-DYk3wW9u.js} +0 -0
  462. /package/dist/client/assets/{vbscript-BS8DsYJ_.js → vbscript-BKI61VS6.js} +0 -0
  463. /package/dist/client/assets/{velocity-CS6Ly2yV.js → velocity-BrtitHHA.js} +0 -0
  464. /package/dist/client/assets/{verilog-DbEC7ose.js → verilog-CjUx3yiL.js} +0 -0
  465. /package/dist/client/assets/{vhdl-DBLrW9bF.js → vhdl-CPWwYF4V.js} +0 -0
  466. /package/dist/client/assets/{webidl-CnE8KY-y.js → webidl-PiVOzma8.js} +0 -0
  467. /package/dist/client/assets/{xquery--K5Za5EW.js → xquery-CiTzM_oK.js} +0 -0
  468. /package/dist/client/assets/{yacas-ClQfYBmX.js → yacas-4QS9CntY.js} +0 -0
  469. /package/dist/client/assets/{z80-Dr2oR3X2.js → z80-BxidrTKR.js} +0 -0
@@ -30,7 +30,9 @@ const VERSION_RELOAD_TOAST_DURATION_MS = 0;
30
30
 
31
31
  /** @this {UiShellContext} */
32
32
  function initialize() {
33
+ this.initializeExportBridge?.();
33
34
  this.renderMarkdownToolbar?.();
35
+ this.initializeVisualViewportBinding?.();
34
36
  this.themeController.initialize();
35
37
  this.previewRenderer.applyTheme(this.themeController.getTheme());
36
38
  this.previewRenderer.scheduleWorkerPrewarm();
@@ -79,6 +81,40 @@ function initializeVersionMonitoring() {
79
81
  this.versionMonitor?.start();
80
82
  }
81
83
 
84
+ /** @this {UiShellContext} */
85
+ function syncVisualViewportBounds() {
86
+ const root = document.documentElement;
87
+ const viewport = window.visualViewport;
88
+
89
+ if (!root) {
90
+ return;
91
+ }
92
+
93
+ if (!viewport) {
94
+ root.style.setProperty('--app-viewport-height', '100dvh');
95
+ root.style.setProperty('--app-viewport-offset-top', '0px');
96
+ return;
97
+ }
98
+
99
+ root.style.setProperty('--app-viewport-height', `${Math.round(viewport.height)}px`);
100
+ root.style.setProperty('--app-viewport-offset-top', `${Math.round(viewport.offsetTop)}px`);
101
+ }
102
+
103
+ /** @this {UiShellContext} */
104
+ function initializeVisualViewportBinding() {
105
+ this.syncVisualViewportBounds?.();
106
+
107
+ const viewport = window.visualViewport;
108
+ if (!viewport) {
109
+ return;
110
+ }
111
+
112
+ const handler = () => this.syncVisualViewportBounds?.();
113
+ viewport.addEventListener('resize', handler, { passive: true });
114
+ viewport.addEventListener('scroll', handler, { passive: true });
115
+ window.addEventListener('orientationchange', handler);
116
+ }
117
+
82
118
  /** @this {UiShellContext} */
83
119
  function promptForVersionReload(payload = null) {
84
120
  if (this._reloadPromptShown) {
@@ -130,6 +166,21 @@ function bindEvents() {
130
166
  this.closeToolbarOverflowMenu?.();
131
167
  });
132
168
 
169
+ this.elements.searchFilesButton?.addEventListener('click', () => {
170
+ void this.toggleQuickSwitcher();
171
+ this.closeToolbarOverflowMenu?.();
172
+ });
173
+
174
+ this.elements.exportDocxButton?.addEventListener('click', () => {
175
+ void this.handleExportRequest?.('docx');
176
+ this.closeToolbarOverflowMenu?.();
177
+ });
178
+
179
+ this.elements.exportPdfButton?.addEventListener('click', () => {
180
+ void this.handleExportRequest?.('pdf');
181
+ this.closeToolbarOverflowMenu?.();
182
+ });
183
+
133
184
  this.elements.fileHistoryButton?.addEventListener('click', () => {
134
185
  const route = this.navigation.getHashRoute();
135
186
  if (route.type === 'git-file-preview') {
@@ -208,6 +259,10 @@ function bindEvents() {
208
259
  this.toggleLineWrapping();
209
260
  });
210
261
 
262
+ this.elements.editorFindButton?.addEventListener('click', () => {
263
+ this.runEditorCommand?.('openSearch');
264
+ });
265
+
211
266
  this.elements.toolbarOverflowToggle?.addEventListener('click', (event) => {
212
267
  event.preventDefault();
213
268
  this.toggleToolbarOverflowMenu();
@@ -220,13 +275,7 @@ function bindEvents() {
220
275
  });
221
276
 
222
277
  this.elements.previewContent?.addEventListener('click', (event) => {
223
- const wikiLink = event.target.closest('a.wiki-link[data-wiki-target]');
224
- if (!wikiLink) {
225
- return;
226
- }
227
-
228
- event.preventDefault();
229
- this.handleWikiLinkClick(wikiLink.dataset.wikiTarget);
278
+ this.handlePreviewContentClick?.(event);
230
279
  });
231
280
 
232
281
  this.elements.sidebarToggle?.addEventListener('click', () => {
@@ -289,12 +338,60 @@ function bindEvents() {
289
338
  });
290
339
  }
291
340
 
341
+ function isNestedTaskListClickTarget(target, taskItem) {
342
+ const nestedList = target.closest('ul, ol');
343
+ return nestedList instanceof Element && nestedList.parentElement === taskItem;
344
+ }
345
+
346
+ function isInteractiveTaskListDescendant(target) {
347
+ const taskCheckbox = target.closest('input[data-task-checkbox="true"]');
348
+ if (taskCheckbox) {
349
+ return false;
350
+ }
351
+
352
+ return Boolean(target.closest('a, button, input, select, textarea, summary, [contenteditable="true"], [role="button"], [role="link"]'));
353
+ }
354
+
355
+ /** @this {UiShellContext} */
356
+ function handlePreviewContentClick(event) {
357
+ if (!(event.target instanceof Element)) {
358
+ return;
359
+ }
360
+
361
+ const wikiLink = event.target.closest('a.wiki-link[data-wiki-target]');
362
+ if (wikiLink) {
363
+ event.preventDefault();
364
+ this.handleWikiLinkClick(wikiLink.dataset.wikiTarget);
365
+ return;
366
+ }
367
+
368
+ const taskItem = event.target.closest('.task-list-item[data-source-line]');
369
+ if (!taskItem || isNestedTaskListClickTarget(event.target, taskItem) || isInteractiveTaskListDescendant(event.target)) {
370
+ return;
371
+ }
372
+
373
+ event.preventDefault();
374
+
375
+ const sourceLine = Number.parseInt(taskItem.getAttribute('data-source-line') || '', 10);
376
+ if (!Number.isFinite(sourceLine)) {
377
+ return;
378
+ }
379
+
380
+ this.session?.toggleTaskListItem?.(sourceLine);
381
+ }
382
+
292
383
  /** @this {UiShellContext} */
293
384
  function setToolbarOverflowOpen(nextState) {
294
- this.toolbarOverflowOpen = Boolean(nextState) && this.isMobileViewport?.();
385
+ this.toolbarOverflowOpen = Boolean(nextState);
295
386
  this.elements.toolbarOverflowToggle?.setAttribute('aria-expanded', String(this.toolbarOverflowOpen));
296
387
  this.elements.toolbarOverflowToggle?.classList.toggle('active', this.toolbarOverflowOpen);
297
388
  this.elements.toolbarOverflowToggle?.closest('.toolbar-right')?.classList.toggle('is-overflow-open', this.toolbarOverflowOpen);
389
+
390
+ if (!this.toolbarOverflowOpen) {
391
+ this.elements.toolbarOverflowMenu?.querySelectorAll('details[open]').forEach((detail) => {
392
+ detail.removeAttribute('open');
393
+ });
394
+ }
298
395
  }
299
396
 
300
397
  /** @this {UiShellContext} */
@@ -304,14 +401,9 @@ function syncToolbarOverflowVisibility() {
304
401
  return;
305
402
  }
306
403
 
307
- const isMobile = this.isMobileViewport?.();
308
- if (!isMobile) {
309
- this.setToolbarOverflowOpen(false);
310
- }
311
-
312
- toggle.classList.toggle('hidden', !isMobile);
313
- toggle.hidden = !isMobile;
314
- toggle.setAttribute('aria-hidden', String(!isMobile));
404
+ toggle.classList.remove('hidden');
405
+ toggle.hidden = false;
406
+ toggle.setAttribute('aria-hidden', 'false');
315
407
  }
316
408
 
317
409
  /** @this {UiShellContext} */
@@ -429,15 +521,18 @@ export const uiFeatureShellMethods = {
429
521
  closeToolbarOverflowMenu,
430
522
  getStoredLineWrapping,
431
523
  handleConnectionChange,
524
+ handlePreviewContentClick,
432
525
  handleThemeChange,
433
526
  hideEditorLoading,
434
527
  initialize,
528
+ initializeVisualViewportBinding,
435
529
  initializeVersionMonitoring,
436
- setToolbarOverflowOpen,
437
530
  promptForVersionReload,
438
531
  scheduleBacklinkRefresh,
532
+ setToolbarOverflowOpen,
439
533
  showEditorLoadError,
440
534
  showEditorLoading,
535
+ syncVisualViewportBounds,
441
536
  syncToolbarOverflowVisibility,
442
537
  syncWrapToggle,
443
538
  toggleToolbarOverflowMenu,
@@ -29,7 +29,9 @@ function normalizeToolbarAction(action) {
29
29
 
30
30
  function renderToolbarButtons(actions) {
31
31
  return actions.map((item) => (
32
- `<button type="button" class="ui-icon-button ui-icon-button--toolbar ui-toolbar-action" data-markdown-action="${escapeHtml(item.action)}" aria-label="${escapeHtml(item.label)}" title="${escapeHtml(item.title)}">${item.icon}</button>`
32
+ `<button type="button" class="ui-icon-button ui-icon-button--toolbar ui-toolbar-action" ${item.commandId
33
+ ? `data-editor-command="${escapeHtml(item.commandId)}"`
34
+ : `data-markdown-action="${escapeHtml(item.action)}"`} aria-label="${escapeHtml(item.label)}" title="${escapeHtml(item.title)}">${item.icon}</button>`
33
35
  )).join('');
34
36
  }
35
37
 
@@ -41,7 +43,7 @@ function renderBlockMenuMarkup(activeAction) {
41
43
  <div class="markdown-toolbar-block-menu-shell">
42
44
  <button
43
45
  type="button"
44
- class="ui-button btn btn-ghost markdown-toolbar-block-trigger"
46
+ class="ui-button ui-button--ghost markdown-toolbar-block-trigger"
45
47
  data-markdown-block-menu-toggle
46
48
  aria-haspopup="menu"
47
49
  aria-expanded="false"
@@ -80,7 +82,7 @@ function renderMarkdownToolbarMarkup(activeAction) {
80
82
  }
81
83
 
82
84
  return `
83
- <div class="markdown-toolbar-group" role="group" aria-label="${escapeHtml(group.groupLabel)}">
85
+ <div class="markdown-toolbar-group${group.mobileOnly ? ' markdown-toolbar-group--mobile-only' : ''}" role="group" aria-label="${escapeHtml(group.groupLabel)}">
84
86
  ${renderToolbarButtons(group.actions)}
85
87
  </div>
86
88
  `;
@@ -95,7 +97,7 @@ function renderMarkdownToolbarMarkup(activeAction) {
95
97
  * @property {{ refresh(): Promise<void> }} fileExplorer
96
98
  * @property {{ show(message: string): void }} toastController
97
99
  * @property {{ uploadImageAttachment(payload: { file: File, fileName: string, sourcePath: string }): Promise<{ markdown?: string, path?: string }>} } vaultApiClient
98
- * @property {{ applyMarkdownToolbarAction(action: string): boolean, insertText(text: string): void } | null} session
100
+ * @property {{ applyMarkdownToolbarAction(action: string): boolean, insertText(text: string): void, runEditorCommand?(commandId: string): boolean } | null} session
99
101
  * @property {() => Promise<File | null>} pickImageFile
100
102
  * @property {(file: File) => Promise<boolean>} handleEditorImageInsert
101
103
  * @property {() => Promise<void>} handleToolbarImageInsert
@@ -273,6 +275,14 @@ function handleMarkdownToolbarClick(event) {
273
275
  return;
274
276
  }
275
277
 
278
+ const editorCommandButton = target.closest('[data-editor-command]');
279
+ const editorCommandId = editorCommandButton?.getAttribute('data-editor-command');
280
+ if (editorCommandId) {
281
+ event.preventDefault();
282
+ this.runEditorCommand(editorCommandId);
283
+ return;
284
+ }
285
+
276
286
  const blockMenuToggle = target.closest('[data-markdown-block-menu-toggle]');
277
287
  if (blockMenuToggle) {
278
288
  event.preventDefault();
@@ -379,6 +389,17 @@ function applyMarkdownToolbarAction(action) {
379
389
  }
380
390
  }
381
391
 
392
+ /** @this {UiToolbarContext} */
393
+ function runEditorCommand(commandId) {
394
+ const ran = this.session?.runEditorCommand?.(commandId);
395
+ if (!ran) {
396
+ this.toastController.show('Editor action is unavailable');
397
+ return false;
398
+ }
399
+
400
+ return true;
401
+ }
402
+
382
403
  /** @this {UiToolbarContext} */
383
404
  async function handleToolbarImageInsert() {
384
405
  const file = await this.pickImageFile();
@@ -514,6 +535,7 @@ export const uiFeatureToolbarMethods = {
514
535
  renderMarkdownBlockMenuPopover,
515
536
  pickImageFile,
516
537
  renderMarkdownToolbar,
538
+ runEditorCommand,
517
539
  setActiveMarkdownBlockAction,
518
540
  syncMarkdownToolbarBlockUi,
519
541
  toggleMarkdownBlockMenu,
@@ -48,7 +48,9 @@ export const workspaceFeature = {
48
48
  return String(previewDocument.content ?? '');
49
49
  }
50
50
 
51
- return this.workspacePreviewController.getPreviewSource(this.currentFilePath);
51
+ return this.workspacePreviewController.getPreviewSource(this.currentFilePath, {
52
+ drawioMode: this.currentDrawioMode ?? null,
53
+ });
52
54
  },
53
55
 
54
56
  getStaticPreviewDocument() {
@@ -88,8 +90,34 @@ export const workspaceFeature = {
88
90
  this.workspacePreviewController.resetPreviewMode();
89
91
  },
90
92
 
91
- syncFileChrome(filePath) {
92
- this.workspacePreviewController.syncFileChrome(filePath);
93
+ syncFileChrome(filePath, options = {}) {
94
+ this.workspacePreviewController.syncFileChrome(filePath, options);
95
+ },
96
+
97
+ handleLayoutViewRequest(view) {
98
+ if (!this.currentFilePath || !this.isDrawioFile(this.currentFilePath)) {
99
+ return true;
100
+ }
101
+
102
+ if (this.currentDrawioMode === 'text') {
103
+ if (view !== 'preview') {
104
+ return true;
105
+ }
106
+
107
+ if (this.layoutController.isMobileViewport?.()) {
108
+ this.layoutController.primeView(view);
109
+ }
110
+ this.navigation.navigateToFile(this.currentFilePath);
111
+ return false;
112
+ }
113
+
114
+ if (view === 'preview') {
115
+ return true;
116
+ }
117
+
118
+ this.layoutController.primeView(view);
119
+ this.navigation.navigateToFile(this.currentFilePath, { drawioMode: 'text' });
120
+ return false;
93
121
  },
94
122
 
95
123
  renderExcalidrawFilePreview(filePath) {
@@ -33,7 +33,11 @@ export function bindAppShellElements(doc = document) {
33
33
  displayNameSubmit: doc.getElementById('displayNameSubmit'),
34
34
  displayNameTitle: doc.getElementById('displayNameTitle'),
35
35
  editNameButton: doc.getElementById('editNameBtn'),
36
+ editorFindButton: doc.getElementById('editorFindBtn'),
36
37
  editorContainer: doc.getElementById('editorContainer'),
38
+ exportDocxButton: doc.getElementById('exportDocxBtn'),
39
+ exportMenuGroup: doc.getElementById('exportMenuGroup'),
40
+ exportPdfButton: doc.getElementById('exportPdfBtn'),
37
41
  markdownToolbar: doc.getElementById('markdownToolbar'),
38
42
  editorPage: doc.getElementById('editor-page'),
39
43
  diffPage: doc.getElementById('diff-page'),
@@ -49,6 +53,7 @@ export function bindAppShellElements(doc = document) {
49
53
  mobileViewToggle: doc.getElementById('mobileViewToggle'),
50
54
  previewContent: doc.getElementById('previewContent'),
51
55
  previewContainer: doc.getElementById('previewContainer'),
56
+ searchFilesButton: doc.getElementById('searchFilesBtn'),
52
57
  shareButton: doc.getElementById('shareBtn'),
53
58
  toastContainer: doc.getElementById('toastContainer'),
54
59
  toggleWrapButton: doc.getElementById('toggleWrapBtn'),
@@ -291,7 +291,7 @@ export class DiagramPreviewHydrator {
291
291
  this.hydrationInProgress = true;
292
292
  this.renderer.setPhase('hydrating');
293
293
 
294
- let batchContext = null;
294
+ let batchContext;
295
295
  try {
296
296
  batchContext = await this.prepareHydrationBatch(shells);
297
297
  } catch (error) {
@@ -0,0 +1,152 @@
1
+ import yaml from 'js-yaml';
2
+
3
+ import { escapeHtml } from '../domain/vault-utils.js';
4
+
5
+ function getDocumentNewline(markdownText = '') {
6
+ return String(markdownText).includes('\r\n') ? '\r\n' : '\n';
7
+ }
8
+
9
+ function normalizeLine(line = '') {
10
+ return String(line).replace(/\r$/, '');
11
+ }
12
+
13
+ function isPlainObject(value) {
14
+ return Object.prototype.toString.call(value) === '[object Object]';
15
+ }
16
+
17
+ function isScalarValue(value) {
18
+ return (
19
+ value == null
20
+ || typeof value === 'string'
21
+ || typeof value === 'number'
22
+ || typeof value === 'boolean'
23
+ || value instanceof Date
24
+ );
25
+ }
26
+
27
+ function formatScalarValue(value) {
28
+ if (value instanceof Date) {
29
+ return value.toISOString();
30
+ }
31
+
32
+ if (value == null) {
33
+ return 'null';
34
+ }
35
+
36
+ return String(value);
37
+ }
38
+
39
+ function serializeComplexValue(value) {
40
+ return yaml.dump(value, {
41
+ lineWidth: -1,
42
+ noRefs: true,
43
+ }).trim();
44
+ }
45
+
46
+ function createFrontmatterValueMarkup(value) {
47
+ if (isScalarValue(value)) {
48
+ return `<span class="frontmatter-value-text">${escapeHtml(formatScalarValue(value))}</span>`;
49
+ }
50
+
51
+ if (Array.isArray(value) && value.every((item) => isScalarValue(item))) {
52
+ return `<div class="frontmatter-value-list">${value
53
+ .map((item) => `<span class="frontmatter-value-pill">${escapeHtml(formatScalarValue(item))}</span>`)
54
+ .join('')}</div>`;
55
+ }
56
+
57
+ return `<pre class="frontmatter-value-code"><code>${escapeHtml(serializeComplexValue(value))}</code></pre>`;
58
+ }
59
+
60
+ function createFrontmatterEntries(data) {
61
+ if (isPlainObject(data)) {
62
+ return Object.entries(data);
63
+ }
64
+
65
+ return [['value', data]];
66
+ }
67
+
68
+ function createHiddenSummary(entries) {
69
+ if (entries.length === 0) {
70
+ return 'No properties';
71
+ }
72
+
73
+ return `${entries.length} propert${entries.length === 1 ? 'y' : 'ies'} hidden`;
74
+ }
75
+
76
+ export function extractYamlFrontmatter(markdownText = '') {
77
+ const normalizedMarkdown = String(markdownText ?? '');
78
+ if (!normalizedMarkdown.startsWith('---')) {
79
+ return null;
80
+ }
81
+
82
+ const newline = getDocumentNewline(normalizedMarkdown);
83
+ const lines = normalizedMarkdown.split(/\r?\n/);
84
+ if (normalizeLine(lines[0]) !== '---') {
85
+ return null;
86
+ }
87
+
88
+ let closingIndex = -1;
89
+ for (let index = 1; index < lines.length; index += 1) {
90
+ if (normalizeLine(lines[index]) === '---') {
91
+ closingIndex = index;
92
+ break;
93
+ }
94
+ }
95
+
96
+ if (closingIndex < 0) {
97
+ return null;
98
+ }
99
+
100
+ const rawFrontmatter = lines.slice(0, closingIndex + 1).join(newline);
101
+ const frontmatterSource = lines.slice(1, closingIndex).join(newline);
102
+
103
+ let parsedData;
104
+ try {
105
+ parsedData = yaml.load(frontmatterSource || '{}');
106
+ } catch {
107
+ return null;
108
+ }
109
+
110
+ const lineCount = closingIndex + 1;
111
+ const bodyMarkdown = [
112
+ ...Array.from({ length: lineCount }, () => ''),
113
+ ...lines.slice(closingIndex + 1),
114
+ ].join(newline);
115
+
116
+ return {
117
+ bodyMarkdown,
118
+ data: parsedData ?? {},
119
+ endLine: lineCount,
120
+ rawFrontmatter,
121
+ startLine: 1,
122
+ };
123
+ }
124
+
125
+ export function renderFrontmatterBlock(frontmatter, {
126
+ collapsed = false,
127
+ interactive = false,
128
+ } = {}) {
129
+ if (!frontmatter) {
130
+ return '';
131
+ }
132
+
133
+ const entries = createFrontmatterEntries(frontmatter.data);
134
+ const collapsedState = interactive && collapsed;
135
+ const sourceAttributes = ` data-source-line="${frontmatter.startLine}" data-source-line-end="${frontmatter.endLine}"${interactive ? ` data-collapsed="${collapsedState ? 'true' : 'false'}"` : ''}`;
136
+ const bodyId = `frontmatter-body-${frontmatter.startLine}-${frontmatter.endLine}`;
137
+ const emptyState = entries.length === 0
138
+ ? '<div class="frontmatter-empty">No properties</div>'
139
+ : '';
140
+ const items = entries.map(([key, value]) => (
141
+ `<div class="frontmatter-property"><dt class="frontmatter-key">${escapeHtml(key)}</dt><dd class="frontmatter-value">${createFrontmatterValueMarkup(value)}</dd></div>`
142
+ )).join('');
143
+ const header = interactive
144
+ ? `<div class="frontmatter-header"><div class="frontmatter-label">Properties</div><button type="button" class="frontmatter-toggle" aria-controls="${bodyId}" aria-expanded="${collapsedState ? 'false' : 'true'}">${collapsedState ? 'Show' : 'Hide'}</button></div>`
145
+ : '<div class="frontmatter-label">Properties</div>';
146
+ const summary = interactive
147
+ ? `<div class="frontmatter-summary"${collapsedState ? '' : ' hidden'}>${escapeHtml(createHiddenSummary(entries))}</div>`
148
+ : '';
149
+ const bodyAttributes = ` class="frontmatter-content"${interactive ? ` id="${bodyId}"` : ''}${collapsedState ? ' hidden' : ''}`;
150
+
151
+ return `<section class="frontmatter-block"${sourceAttributes}>${header}${summary}<div${bodyAttributes}><dl class="frontmatter-properties">${items}</dl>${emptyState}</div></section>`;
152
+ }
@@ -3,6 +3,7 @@ import hljs from 'highlight.js';
3
3
 
4
4
  import { isImageAttachmentFilePath } from '../../domain/file-kind.js';
5
5
  import { escapeHtml, resolveVaultRelativePath, resolveWikiTarget } from '../domain/vault-utils.js';
6
+ import { extractYamlFrontmatter, renderFrontmatterBlock } from './markdown-frontmatter.js';
6
7
  import { analyzeMarkdownComplexity } from './preview-render-profile.js';
7
8
 
8
9
  const DIRECT_VIDEO_MIME_TYPES = Object.freeze({
@@ -161,12 +162,14 @@ function createVideoEmbedPlaceholder({
161
162
  kind,
162
163
  label,
163
164
  mimeType = '',
165
+ originalUrl = '',
164
166
  source,
165
167
  url,
166
168
  }) {
167
169
  const subtitle = kind === 'youtube' ? 'YouTube video' : 'Video file';
168
170
  const mimeTypeAttribute = mimeType ? ` data-video-embed-mime-type="${escapeHtml(mimeType)}"` : '';
169
- return `<span class="video-embed-placeholder video-embed-shell diagram-preview-shell" data-video-embed-key="${escapeHtml(embedKey)}" data-video-embed-kind="${escapeHtml(kind)}" data-video-embed-label="${escapeHtml(label)}" data-video-embed-source="${escapeHtml(source)}" data-video-embed-url="${escapeHtml(url)}"${mimeTypeAttribute}><span class="video-embed-placeholder-card diagram-preview-placeholder-card"><span class="video-embed-placeholder-copy diagram-preview-placeholder-copy"><strong>${escapeHtml(label)}</strong><span>${escapeHtml(subtitle)}</span></span></span></span>`;
171
+ const originalUrlAttribute = originalUrl ? ` data-video-embed-original-url="${escapeHtml(originalUrl)}"` : '';
172
+ return `<span class="video-embed-placeholder video-embed-shell diagram-preview-shell" data-video-embed-key="${escapeHtml(embedKey)}" data-video-embed-kind="${escapeHtml(kind)}" data-video-embed-label="${escapeHtml(label)}" data-video-embed-source="${escapeHtml(source)}" data-video-embed-url="${escapeHtml(url)}"${mimeTypeAttribute}${originalUrlAttribute}><span class="video-embed-placeholder-card diagram-preview-placeholder-card"><span class="video-embed-placeholder-copy diagram-preview-placeholder-copy"><strong>${escapeHtml(label)}</strong><span>${escapeHtml(subtitle)}</span></span></span></span>`;
170
173
  }
171
174
 
172
175
  function renderVideoEmbed(token, videoEmbedCounts) {
@@ -189,6 +192,7 @@ function renderVideoEmbed(token, videoEmbedCounts) {
189
192
  kind: classification.type,
190
193
  label: title || 'Embedded video',
191
194
  mimeType: classification.mimeType,
195
+ originalUrl: source,
192
196
  source: preserveSource,
193
197
  url: classification.type === 'youtube' ? classification.embedUrl : classification.sourceUrl,
194
198
  });
@@ -411,7 +415,7 @@ function createMarkdownRenderer(fileList = [], {
411
415
  const content = tokens[index].content;
412
416
 
413
417
  if (content.startsWith('[x] ') || content.startsWith('[X] ')) {
414
- return `<input type="checkbox" checked disabled> ${renderInlineWikiText(content.slice(4), {
418
+ return `<input type="checkbox" checked data-task-checkbox="true"> ${renderInlineWikiText(content.slice(4), {
415
419
  drawioEmbedCounts,
416
420
  excalidrawEmbedCounts,
417
421
  fileList,
@@ -421,7 +425,7 @@ function createMarkdownRenderer(fileList = [], {
421
425
  }
422
426
 
423
427
  if (content.startsWith('[ ] ')) {
424
- return `<input type="checkbox" disabled> ${renderInlineWikiText(content.slice(4), {
428
+ return `<input type="checkbox" data-task-checkbox="true"> ${renderInlineWikiText(content.slice(4), {
425
429
  drawioEmbedCounts,
426
430
  excalidrawEmbedCounts,
427
431
  fileList,
@@ -477,17 +481,25 @@ function createMarkdownRenderer(fileList = [], {
477
481
  export function compilePreviewDocument({
478
482
  attachmentApiPath = '/api/attachment',
479
483
  fileList = [],
484
+ frontmatterCollapsed = false,
485
+ frontmatterInteractive = false,
480
486
  markdownText = '',
481
487
  sourceFilePath = '',
482
488
  } = {}) {
483
489
  const normalizedMarkdown = String(markdownText);
490
+ const frontmatter = extractYamlFrontmatter(normalizedMarkdown);
484
491
  const renderer = createMarkdownRenderer(fileList, {
485
492
  attachmentApiPath,
486
493
  sourceFilePath,
487
494
  });
495
+ const renderedMarkdown = frontmatter ? frontmatter.bodyMarkdown : normalizedMarkdown;
496
+ const frontmatterHtml = renderFrontmatterBlock(frontmatter, {
497
+ collapsed: frontmatterCollapsed,
498
+ interactive: frontmatterInteractive,
499
+ });
488
500
 
489
501
  return {
490
- html: renderer.render(normalizedMarkdown),
502
+ html: `${frontmatterHtml}${renderer.render(renderedMarkdown)}`,
491
503
  stats: analyzeMarkdownComplexity(normalizedMarkdown),
492
504
  };
493
505
  }
@@ -97,7 +97,10 @@ export class PreviewRenderExecutor {
97
97
  }
98
98
  }
99
99
 
100
- async compile(markdownText, renderVersion) {
100
+ async compile(markdownText, renderVersion, {
101
+ frontmatterCollapsed = false,
102
+ frontmatterInteractive = false,
103
+ } = {}) {
101
104
  const worker = this.ensureWorker();
102
105
 
103
106
  if (worker) {
@@ -111,6 +114,8 @@ export class PreviewRenderExecutor {
111
114
  activeWorker.postMessage({
112
115
  attachmentApiPath: this.attachmentApiPath,
113
116
  fileList: this.getFileList?.() ?? [],
117
+ frontmatterCollapsed,
118
+ frontmatterInteractive,
114
119
  markdownText,
115
120
  renderVersion,
116
121
  sourceFilePath: this.getSourceFilePath?.() ?? '',
@@ -122,6 +127,8 @@ export class PreviewRenderExecutor {
122
127
  return compilePreviewDocument({
123
128
  attachmentApiPath: this.attachmentApiPath,
124
129
  fileList: this.getFileList?.() ?? [],
130
+ frontmatterCollapsed,
131
+ frontmatterInteractive,
125
132
  markdownText,
126
133
  sourceFilePath: this.getSourceFilePath?.() ?? '',
127
134
  });
@@ -4,6 +4,8 @@ self.onmessage = (event) => {
4
4
  const {
5
5
  attachmentApiPath,
6
6
  fileList,
7
+ frontmatterCollapsed,
8
+ frontmatterInteractive,
7
9
  markdownText,
8
10
  renderVersion,
9
11
  sourceFilePath,
@@ -13,6 +15,8 @@ self.onmessage = (event) => {
13
15
  const result = compilePreviewDocument({
14
16
  attachmentApiPath,
15
17
  fileList,
18
+ frontmatterCollapsed,
19
+ frontmatterInteractive,
16
20
  markdownText,
17
21
  sourceFilePath,
18
22
  });