collabmd 0.1.39 → 0.1.41

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 (502) hide show
  1. package/README.md +75 -1
  2. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-75Zi8U_A.js → CodeMirrorEditor-UCMRAMCV-DHEFSr_E.js} +1 -1
  3. package/dist/client/assets/{ar-SA-NXDWD63E-CTf_wpt3.js → ar-SA-NXDWD63E-S8m2UyIj.js} +1 -1
  4. package/dist/client/assets/{arc-DD8jaAGl.js → arc-OeTCl9Oy.js} +1 -1
  5. package/dist/client/assets/architecture-7EHR7CIX-BQpCYB3J.js +1 -0
  6. package/dist/client/assets/{architectureDiagram-Q4EWVU46-BftXiJA8.js → architectureDiagram-3BPJPVTR-CDqq0KA0.js} +3 -3
  7. package/dist/client/assets/{az-AZ-MXSORGZV-C_C9i9u3.js → az-AZ-MXSORGZV-DSzWvZBB.js} +1 -1
  8. package/dist/client/assets/bases-preview-controller-CBHDzzot.js +143 -0
  9. package/dist/client/assets/{bg-BG-O6MV2KSF-YmfvQf63.js → bg-BG-O6MV2KSF-C5nBekx3.js} +1 -1
  10. package/dist/client/assets/blockDiagram-GPEHLZMM-Z9jBLpGg.js +132 -0
  11. package/dist/client/assets/{bn-IN-MMW2ORAC-BTEFR4Ed.js → bn-BD-T2VJNT7N-D-8xXOzM.js} +1 -1
  12. package/dist/client/assets/{bn-BD-T2VJNT7N-BD0ob0JE.js → bn-IN-MMW2ORAC-D-8xXOzM.js} +1 -1
  13. package/dist/client/assets/button-2ZnWQkWV.js +1 -0
  14. package/dist/client/assets/{c4Diagram-AHTNJAMY-Gz7ZAK0d.js → c4Diagram-AAUBKEIU-UA_Eopag.js} +2 -2
  15. package/dist/client/assets/{ca-ES-MKBCGNOG-aLX_cjA0.js → ca-ES-MKBCGNOG-B3Ly68p3.js} +1 -1
  16. package/dist/client/assets/channel-CpvwJaGK.js +1 -0
  17. package/dist/client/assets/{chunk-EDXVE4YY-M4QxyGNt.js → chunk-2J33WTMH-DjYq2kZ3.js} +1 -1
  18. package/dist/client/assets/chunk-3OPIFGDE-DucrRywM.js +62 -0
  19. package/dist/client/assets/{chunk-4BX2VUAB-D5YiFdu1.js → chunk-4BX2VUAB-DcdHBPEH.js} +1 -1
  20. package/dist/client/assets/chunk-4EGX6M5U-BfCFom1o.js +1 -0
  21. package/dist/client/assets/{chunk-55IACEB6-VHgZjidg.js → chunk-55IACEB6-B7ycySPI.js} +1 -1
  22. package/dist/client/assets/chunk-5DO6E6H7-DP8QnaJj.js +1 -0
  23. package/dist/client/assets/chunk-5ZQYHXKU-C4q4UVKa.js +2 -0
  24. package/dist/client/assets/chunk-727SXJPM-DdWH2cfs.js +206 -0
  25. package/dist/client/assets/chunk-AQP2D5EJ-D8o8QwFY.js +231 -0
  26. package/dist/client/assets/{chunk-LIHQZDEY-DtYrHuCi.js → chunk-BR22UD5L-CT6fcRkN.js} +1 -1
  27. package/dist/client/assets/{chunk-BSJP7CBP-D2KkrA_B.js → chunk-BSJP7CBP-COmh28sk.js} +1 -1
  28. package/dist/client/assets/chunk-CSCIHK7Q-D0bHjxCO.js +123 -0
  29. package/dist/client/assets/chunk-FHYWG6QK-Ce318laP.js +1 -0
  30. package/dist/client/assets/{chunk-FMBD7UC4-qQT7MtX2.js → chunk-FMBD7UC4-CM39cCCr.js} +1 -1
  31. package/dist/client/assets/chunk-KSCS5N6A-Bk33m7yK.js +10 -0
  32. package/dist/client/assets/{chunk-ZZ45TVLE-DGIhE_ST.js → chunk-L5ZTLDWV-J2sQu4Os.js} +1 -1
  33. package/dist/client/assets/chunk-LZXEDZCA-CTmBbzaL.js +2 -0
  34. package/dist/client/assets/chunk-MMN3DZ5N-pTRxhVYl.js +35 -0
  35. package/dist/client/assets/chunk-MPE355IW-C_vkbqLj.js +1 -0
  36. package/dist/client/assets/chunk-MZUSXYTE-BnVcgphH.js +1 -0
  37. package/dist/client/assets/chunk-N66VUXT2-B6CG-CnY.js +1 -0
  38. package/dist/client/assets/{chunk-YZCP3GAM-D1jf1WUI.js → chunk-ND2GUHAM-D-_vkA5V.js} +1 -1
  39. package/dist/client/assets/chunk-NNHCCRGN-DlpIbxXb.js +159 -0
  40. package/dist/client/assets/{chunk-X2U36JSP-D3OEPG7k.js → chunk-NZK2D7GU-Dc42C0Jt.js} +1 -1
  41. package/dist/client/assets/{chunk-U2HBQHQK-BBXgsocS.js → chunk-O5CBEL6O-DdEDfb8z.js} +4 -4
  42. package/dist/client/assets/chunk-PUPMXCY4-BZ88kQjK.js +1 -0
  43. package/dist/client/assets/chunk-QZHKN3VN-D5YLQvjj.js +1 -0
  44. package/dist/client/assets/{chunk-SRAX5OIU-yDw8XRsi.js → chunk-SRAX5OIU-CiRgnkYo.js} +1 -1
  45. package/dist/client/assets/chunk-UIBZB4QT-r8p3pBHw.js +1 -0
  46. package/dist/client/assets/chunk-WCWK7LTN-DrKYkgXF.js +1 -0
  47. package/dist/client/assets/chunk-WU5MYG2G-Cg2iUbET.js +1 -0
  48. package/dist/client/assets/{chunk-XPW4576I-BUfyrOtN.js → chunk-XPW4576I-BZyvtu42.js} +1 -1
  49. package/dist/client/assets/{chunk-Z5NKEFVG-Vu8zBV4H.js → chunk-Z5NKEFVG-Dknufskm.js} +7 -7
  50. package/dist/client/assets/chunk-aKtaBQYM.js +1 -0
  51. package/dist/client/assets/classDiagram-4FO5ZUOK-CGWY0cfg.js +1 -0
  52. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CGWY0cfg.js +1 -0
  53. package/dist/client/assets/{cose-bilkent-S5V4N54A-A8ssRFyt.js → cose-bilkent-S5V4N54A-BuQb9WEM.js} +1 -1
  54. package/dist/client/assets/{cs-CZ-V77HGUP7-Du3y53BB.js → cs-CZ-V77HGUP7-6BCNHMpz.js} +1 -1
  55. package/dist/client/assets/{cytoscape.esm-BurByw8X.js → cytoscape.esm-DelgaX4f.js} +2 -2
  56. package/dist/client/assets/{da-DK-I5RFNTM4-CDJtjf5s.js → da-DK-I5RFNTM4-CVeCWpi2.js} +1 -1
  57. package/dist/client/assets/dagre-BM42HDAG-ux5hA7G6.js +4 -0
  58. package/dist/client/assets/dagre-Bx709z4p.js +1 -0
  59. package/dist/client/assets/{de-CH-WLRDEVBV-CLV2tVw6.js → de-CH-WLRDEVBV-CV-FNCkY.js} +1 -1
  60. package/dist/client/assets/{de-DE-DTI4WUSC-B53J0BQ8.js → de-DE-DTI4WUSC-CV-FNCkY.js} +1 -1
  61. package/dist/client/assets/diagram-2AECGRRQ-Cx-EPj3F.js +43 -0
  62. package/dist/client/assets/{diagram-5BDNPKRD-BuK-UBuN.js → diagram-5GNKFQAL-B6qUTxVg.js} +2 -2
  63. package/dist/client/assets/diagram-KO2AKTUF-BedClayW.js +3 -0
  64. package/dist/client/assets/{diagram-TYMM5635-CT8BdT4s.js → diagram-LMA3HP47-DCwyG0i5.js} +1 -1
  65. package/dist/client/assets/diagram-OG6HWLK6-BZD0jSxR.js +24 -0
  66. package/dist/client/assets/diagram-action-icons-aa_KOv9h.js +36 -0
  67. package/dist/client/assets/{dist-BXiFOexW.js → dist-B-m0-H59.js} +1 -1
  68. package/dist/client/assets/dist-B6Q0y0J8.js +1 -0
  69. package/dist/client/assets/dist-BCQCG0we.js +1 -0
  70. package/dist/client/assets/{dist-Bz-8_JmE.js → dist-BEyxdnUD.js} +1 -1
  71. package/dist/client/assets/{dist-eAgBpkKv.js → dist-BYneHrvV.js} +1 -1
  72. package/dist/client/assets/dist-BsPHL5xw2.js +1 -0
  73. package/dist/client/assets/{dist-CRyP6okk.js → dist-CX-kKEdL.js} +1 -1
  74. package/dist/client/assets/{dist-Bp_j2hKC.js → dist-CaLooK5r.js} +1 -1
  75. package/dist/client/assets/{dist-CQZDuOJ9.js → dist-Cd4FT8TV.js} +1 -1
  76. package/dist/client/assets/{dist-CIt_ogHO.js → dist-ClWZ99Dh.js} +1 -1
  77. package/dist/client/assets/{dist-D8d0IGSI.js → dist-D01mg-Uh.js} +1 -1
  78. package/dist/client/assets/{dist-fpFkgu34.js → dist-D36UTodj.js} +1 -1
  79. package/dist/client/assets/{dist-bkoMCmF7.js → dist-D6YOhZ_d.js} +1 -1
  80. package/dist/client/assets/{dist-CH3l6nVf.js → dist-D8jTFU06.js} +1 -1
  81. package/dist/client/assets/dist-DGI-0uwF.js +1 -0
  82. package/dist/client/assets/{dist-Das5WX49.js → dist-DGO-wCq8.js} +1 -1
  83. package/dist/client/assets/dist-DMKYvLqD.js +1 -0
  84. package/dist/client/assets/{dist-8EAyH6_p.js → dist-DRQhk99i.js} +1 -1
  85. package/dist/client/assets/{dist-uyVGTnZh.js → dist-DScq22KK.js} +1 -1
  86. package/dist/client/assets/{dist-wkd-N1L5.js → dist-DbpddOpB.js} +1 -1
  87. package/dist/client/assets/{dist-1SMeCZhf.js → dist-Dl5uZm2T.js} +1 -1
  88. package/dist/client/assets/{dist-_THc9HiJ.js → dist-DvpEZjAN.js} +1 -1
  89. package/dist/client/assets/dist-Dw8hKOQm.js +1 -0
  90. package/dist/client/assets/{dist-NcJIpTJ8.js → dist-G7j-noyR.js} +1 -1
  91. package/dist/client/assets/dist-PItC1DRE.js +1 -0
  92. package/dist/client/assets/{dist-QktK6LIH.js → dist-cMoydUa-.js} +1 -1
  93. package/dist/client/assets/dist-cTuGB1EW.js +9 -0
  94. package/dist/client/assets/{dist-yy8SO13g.js → dist-efgaKpVU.js} +1 -1
  95. package/dist/client/assets/{dist-B7XQNod9.js → dist-nx-MGJIM.js} +1 -1
  96. package/dist/client/assets/{dist-DplP0BiK.js → dist-pww3cL4Q.js} +7 -7
  97. package/dist/client/assets/dist-uhQ-mkuh.js +2 -0
  98. package/dist/client/assets/{dockerfile-D8_6_FRV.js → dockerfile-BLkNEvjs.js} +1 -1
  99. package/dist/client/assets/drawio-editor-BM_W6Lkj.js +9 -0
  100. package/dist/client/assets/drawio-embed-controller-BKHnRnaj.js +1 -0
  101. package/dist/client/assets/drawioEditor-DBfHYCO5.js +2 -0
  102. package/dist/client/assets/editor-session-VueuoR_r.js +16 -0
  103. package/dist/client/assets/{el-GR-ZXDJ2OS4-DFmRQv0o.js → el-GR-ZXDJ2OS4-DzgGVibO.js} +1 -1
  104. package/dist/client/assets/{en-CMP6EMR6-D9x8hVSu.js → en-CMP6EMR6-l-4iz8RC.js} +1 -1
  105. package/dist/client/assets/{erDiagram-SMLLAGMA-6VFZA3Qb.js → erDiagram-TEJ5UH35-7XmGIzui.js} +2 -2
  106. package/dist/client/assets/{es-ES-DYQHAD43-BiGWIrBG.js → es-ES-DYQHAD43-DP98e8ox.js} +1 -1
  107. package/dist/client/assets/{eu-ES-QDSYU5Y3-BjwS0kZi.js → eu-ES-QDSYU5Y3-DrEfH-2N.js} +1 -1
  108. package/dist/client/assets/eventmodeling-FCH6USID-D-VxYsbw.js +1 -0
  109. package/dist/client/assets/excalidraw-editor-B3ffLqi6.css +1 -0
  110. package/dist/client/assets/excalidraw-editor-C6fTkMBx.js +9 -0
  111. package/dist/client/assets/excalidraw-embed-controller-BKx05cjZ.js +1 -0
  112. package/dist/client/assets/excalidraw-embed-reconciler-DGiagExg.js +1 -0
  113. package/dist/client/assets/{excalidraw-mermaid-stub-Df0Q2qkW.js → excalidraw-mermaid-stub-DE5FTiZB.js} +1 -1
  114. package/dist/client/assets/excalidraw-scene-DjODomMW.js +176 -0
  115. package/dist/client/assets/excalidrawEditor-DQD_lLF4.js +2 -0
  116. package/dist/client/assets/{export-page-Bnk-YQp-.js → export-page-D0iHYSPi.js} +4 -4
  117. package/dist/client/assets/exportDocument-Ct-Zvf7_.js +2 -0
  118. package/dist/client/assets/{fa-IR-26LZG4PM-BgANg2TD.js → fa-IR-26LZG4PM-CEwnMxEY.js} +1 -1
  119. package/dist/client/assets/{factor-Cz-hzBGH.js → factor-D7LVTn2l.js} +1 -1
  120. package/dist/client/assets/{fi-FI-6YS4KDE4-CBL5f3oN.js → fi-FI-6YS4KDE4-DPKGe_vC.js} +1 -1
  121. package/dist/client/assets/file-history-view-controller-CK3oHDCT.js +112 -0
  122. package/dist/client/assets/{flowDiagram-DWJPFMVM-DO9RH8YQ.js → flowDiagram-I6XJVG4X-DgTAG2K2.js} +6 -6
  123. package/dist/client/assets/{fr-FR-BRLLPTZC-CRibNSLG.js → fr-FR-BRLLPTZC-CgMmN9yd.js} +1 -1
  124. package/dist/client/assets/ganttDiagram-6RSMTGT7-Curra433.js +292 -0
  125. package/dist/client/assets/git-diff-view-controller-qorJ_Quo.js +150 -0
  126. package/dist/client/assets/git-panel-controller-DG8ws6B_.js +203 -0
  127. package/dist/client/assets/gitGraph-WXDBUCRP-CRS5XD98.js +1 -0
  128. package/dist/client/assets/gitGraphDiagram-PVQCEYII-DVf7-iH0.js +106 -0
  129. package/dist/client/assets/{gl-ES-OKUZTLYG-DEDwa_xt.js → gl-ES-OKUZTLYG-qCIGpEXP.js} +1 -1
  130. package/dist/client/assets/graphlib-B8gBHxth.js +1 -0
  131. package/dist/client/assets/{haxe-CcPA1xnA.js → haxe-DjVOVvNP.js} +1 -1
  132. package/dist/client/assets/{he-IL-26MGYIU7-47wxy70N.js → he-IL-26MGYIU7-_Pd-m9Sj.js} +1 -1
  133. package/dist/client/assets/{hi-IN-Q4ZOGTP2-bhV7c3dK.js → hi-IN-Q4ZOGTP2-B4kd5rva.js} +1 -1
  134. package/dist/client/assets/{hu-HU-P2OXPSN5-xG-gBMzE.js → hu-HU-P2OXPSN5-DL2sEPhQ.js} +1 -1
  135. package/dist/client/assets/{id-ID-2EIKXYN6-MQuYaNHo.js → id-ID-2EIKXYN6-DqXHubyc.js} +1 -1
  136. package/dist/client/assets/image-MLCQRF34-BT938jMR.js +1 -0
  137. package/dist/client/assets/index-AdGl0Mjr.js +2 -0
  138. package/dist/client/assets/index-V7z92VYK.css +1 -0
  139. package/dist/client/assets/info-J43DQDTF-CdrjkAmK.js +1 -0
  140. package/dist/client/assets/{infoDiagram-42DDH7IO-C77Pt7T1.js → infoDiagram-5YYISTIA-DT8NjvZp.js} +1 -1
  141. package/dist/client/assets/input-CXk9Zxz9.js +1 -0
  142. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-Cy1fwvvg.js → ishikawaDiagram-YF4QCWOH-axeWdm72.js} +2 -2
  143. package/dist/client/assets/{it-IT-4CFKVXI2-v2kj-y7j.js → it-IT-4CFKVXI2-CyToZF8R.js} +1 -1
  144. package/dist/client/assets/{ja-JP-MAND2Z4V-BahXSQz-.js → ja-JP-MAND2Z4V-CdMMUzyq.js} +1 -1
  145. package/dist/client/assets/{javascript-gTK9fxz6.js → javascript-B9TABJff.js} +1 -1
  146. package/dist/client/assets/javascript-BRzqD9BA.js +1 -0
  147. package/dist/client/assets/{journeyDiagram-VCZTEJTY-CYWaI6re.js → journeyDiagram-JHISSGLW-_K7qmGID.js} +3 -3
  148. package/dist/client/assets/{jsx-runtime-1KUJVfx8.js → jsx-runtime-DqMcooe2.js} +1 -1
  149. package/dist/client/assets/{kaa-HQRTCXTJ-BF26ydFa.js → kaa-HQRTCXTJ-D6kVHP9w.js} +1 -1
  150. package/dist/client/assets/{kab-KAB-JKIKKTGH-CEIH0F80.js → kab-KAB-JKIKKTGH-XYCYTUmV.js} +1 -1
  151. package/dist/client/assets/{kanban-definition-6JOO6SKY-DY1xE7tm.js → kanban-definition-UN3LZRKU-DaPREf-3.js} +6 -6
  152. package/dist/client/assets/keyboard-shortcuts-Ctp9_GHy.js +1 -0
  153. package/dist/client/assets/{kk-KZ-HXQ63ZFC-CxWjc9Sf.js → kk-KZ-HXQ63ZFC-Du2sGLmI.js} +1 -1
  154. package/dist/client/assets/{km-KH-PKL3LSGX-DJlCteEp.js → km-KH-PKL3LSGX-B2OnEat4.js} +1 -1
  155. package/dist/client/assets/{ko-KR-KXLREZX3-B1gtI_ci.js → ko-KR-KXLREZX3-CcxALsEE.js} +1 -1
  156. package/dist/client/assets/{ku-TR-MJ4IER3X-Bf41y2v2.js → ku-TR-MJ4IER3X-HDyr9f4z.js} +1 -1
  157. package/dist/client/assets/line-CbpIuf9e.js +1 -0
  158. package/dist/client/assets/{linear-dsIQT_iU.js → linear-BGe2G4b5.js} +1 -1
  159. package/dist/client/assets/{lt-LT-H6WFQ6FJ-DA1or-Eo.js → lt-LT-H6WFQ6FJ-BzZe8pg9.js} +1 -1
  160. package/dist/client/assets/{lv-LV-GOCK6SJW-qa0BoYMm.js → lv-LV-GOCK6SJW-CMspwH0q.js} +1 -1
  161. package/dist/client/assets/main-C8f6FlSO.js +789 -0
  162. package/dist/client/assets/mermaid-parser.core-C4gZtCl9.js +4 -0
  163. package/dist/client/assets/mermaid-runtime-CX_vmg3J.js +9 -0
  164. package/dist/client/assets/{mindmap-definition-QFDTVHPH-DB_M5r-j.js → mindmap-definition-RKZ34NQL-DB1uitpo.js} +23 -23
  165. package/dist/client/assets/{mr-IN-IXVLDMEQ-DXFRgvgb.js → mr-IN-IXVLDMEQ-C6mqoMmX.js} +1 -1
  166. package/dist/client/assets/{my-MM-YG6MYTTD-BKDIfalJ.js → my-MM-YG6MYTTD-Q33bVx2B.js} +1 -1
  167. package/dist/client/assets/navigation-D173qvIt.css +1 -0
  168. package/dist/client/assets/{nb-NO-XGWJISD2-DbwbopH8.js → nb-NO-XGWJISD2-B1jdnBFb.js} +1 -1
  169. package/dist/client/assets/{nl-NL-XVDVCPNC-ChSneTSU.js → nl-NL-XVDVCPNC-DoQkA2lu.js} +1 -1
  170. package/dist/client/assets/{nn-NO-EMX5MJX5-Cf7ZWKWZ.js → nn-NO-EMX5MJX5-Db3tHf5b.js} +1 -1
  171. package/dist/client/assets/{nsis-QPGhLAeY.js → nsis-AQ_alPln.js} +1 -1
  172. package/dist/client/assets/{oc-FR-ROEINTVO-lM7Nl7hD.js → oc-FR-ROEINTVO-DLu-4Ze0.js} +1 -1
  173. package/dist/client/assets/{ordinal-Dz3y_j0K.js → ordinal-hYBb2elL.js} +1 -1
  174. package/dist/client/assets/{pa-IN-ZYN6SUDY-C9WNUTeR.js → pa-IN-ZYN6SUDY-XvJuMxJR.js} +1 -1
  175. package/dist/client/assets/packet-YPE3B663-r4oAflYS.js +1 -0
  176. package/dist/client/assets/percentages-5DKR754L-D_KAYeu8.js +1 -0
  177. package/dist/client/assets/{pica-CgGaIJly.js → pica-DjQMjoX_.js} +1 -1
  178. package/dist/client/assets/pie-LRSECV5Y-DkaVktH1.js +1 -0
  179. package/dist/client/assets/pieDiagram-4H26LBE5-CdDwk3iQ.js +30 -0
  180. package/dist/client/assets/{pl-PL-6VTG7PHC-DqRVepnC.js → pl-PL-6VTG7PHC-DjJq8QfA.js} +1 -1
  181. package/dist/client/assets/preview-diagram-utils-DnqteI9Q.js +1 -0
  182. package/dist/client/assets/preview-render-compiler-Dts88fM3.js +35 -0
  183. package/dist/client/assets/preview-render-compiler-VKNqrOZN.js +1 -0
  184. package/dist/client/assets/preview-render-profile-CU6rvKx3.js +23 -0
  185. package/dist/client/assets/preview-render-worker-CFKBP7xz.js +59 -0
  186. package/dist/client/assets/{pt-BR-5YFKRR5G-CopLYEA6.js → pt-BR-5YFKRR5G-Dg2lIz1V.js} +1 -1
  187. package/dist/client/assets/{pt-PT-GEIXXZ67-BjZ_Lphg.js → pt-PT-GEIXXZ67-COIg15TS.js} +1 -1
  188. package/dist/client/assets/{pug-lkTEco3G.js → pug-Ck0YjsGM.js} +1 -1
  189. package/dist/client/assets/quadrantDiagram-W4KKPZXB-C6n3eYzo.js +7 -0
  190. package/dist/client/assets/quick-switcher-controller-CVRUPEKp.js +12 -0
  191. package/dist/client/assets/radar-GUYGQ44K-Bjhhjq-k.js +1 -0
  192. package/dist/client/assets/{requirementDiagram-MS252O5E-CtUIQnWa.js → requirementDiagram-4Y6WPE33-B-sVI-jx.js} +4 -4
  193. package/dist/client/assets/{ro-RO-E2P6TFZI-DakDz5Xu.js → ro-RO-E2P6TFZI-CdCIa8N3.js} +1 -1
  194. package/dist/client/assets/{room-z2w9b96b.js → room-CpCcgtG8.js} +1 -1
  195. package/dist/client/assets/{ru-RU-YBIIY43T-BMvCT-XT.js → ru-RU-YBIIY43T-C5TT1jTX.js} +1 -1
  196. package/dist/client/assets/runtime-config-CDgeuPWN.js +1 -0
  197. package/dist/client/assets/runtime-paths-DvpihCEq.js +1 -0
  198. package/dist/client/assets/{sankeyDiagram-XADWPNL6-tcSeuifE.js → sankeyDiagram-5OEKKPKP-EY2cdbUV.js} +36 -6
  199. package/dist/client/assets/segmented-control-DhUkW6ro.js +1 -0
  200. package/dist/client/assets/sequenceDiagram-3UESZ5HK-D6h6knAb.js +162 -0
  201. package/dist/client/assets/{si-LK-673C2CI2-hGdH1S9E.js → si-LK-673C2CI2-f_5ZzunQ.js} +1 -1
  202. package/dist/client/assets/{sk-SK-CKZHQ4AP-DiRA-fj8.js → sk-SK-CKZHQ4AP-4jimlXp1.js} +1 -1
  203. package/dist/client/assets/{sl-SI-557H2GWM-DN94n_1-.js → sl-SI-557H2GWM-BnZ04ZfX.js} +1 -1
  204. package/dist/client/assets/{src-BuiVcSz-.js → src-DSz_pbBa.js} +1 -1
  205. package/dist/client/assets/stateDiagram-AJRCARHV-Ca8ZuIR2.js +1 -0
  206. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DGRDwQhE.js +1 -0
  207. package/dist/client/assets/subset-shared.chunk-DcaFK0zo.js +1 -0
  208. package/dist/client/assets/{subset-worker.chunk-kj1e3wjW.js → subset-worker.chunk-CVu8sQYq.js} +1 -1
  209. package/dist/client/assets/{sv-SE-XOPKKDWS-CkHUNABj.js → sv-SE-XOPKKDWS-B2uKmd06.js} +1 -1
  210. package/dist/client/assets/{ta-IN-XBH7DQI3-W-157oVK.js → ta-IN-XBH7DQI3-Bld4KtCz.js} +1 -1
  211. package/dist/client/assets/{th-TH-TOCWH3R4-BsU-Pydr.js → th-TH-TOCWH3R4-DUlvnJTX.js} +1 -1
  212. package/dist/client/assets/{timeline-definition-GMOUNBTQ-Bs6U53Mo.js → timeline-definition-PNZ67QCA-BAhvj49M.js} +5 -5
  213. package/dist/client/assets/{tr-TR-GXW6CYY5-CTddyq89.js → tr-TR-GXW6CYY5-BXTTqJlZ.js} +1 -1
  214. package/dist/client/assets/treeView-BLDUP644-DbX5QpdZ.js +1 -0
  215. package/dist/client/assets/treemap-LRROVOQU-DT4YRX1p.js +1 -0
  216. package/dist/client/assets/turtle-Cx3rYX2g.js +1 -0
  217. package/dist/client/assets/{uk-UA-IJKTNUDG-1LzXkII3.js → uk-UA-IJKTNUDG-DbQpa2ug.js} +1 -1
  218. package/dist/client/assets/{uz-UZ-TBZZEA4V-kqm-qcUj.js → uz-UZ-TBZZEA4V-Dt35hEMk.js} +1 -1
  219. package/dist/client/assets/vault-api-client-BPVNCJZC.js +1 -0
  220. package/dist/client/assets/vault-api-client-VAfZ8okg.js +1 -0
  221. package/dist/client/assets/{vault-utils-CRpy8MQz.js → vault-utils-kIbqyWPm.js} +1 -1
  222. package/dist/client/assets/vennDiagram-CIIHVFJN-GGrxyoPK.js +34 -0
  223. package/dist/client/assets/{vi-VN-MULSGNVB-C3H2AUhm.js → vi-VN-MULSGNVB-BgxNIE1N.js} +1 -1
  224. package/dist/client/assets/wardley-L42UT6IY-Ba5lVG9E.js +1 -0
  225. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-C-scJfPY.js → wardleyDiagram-YWT4CUSO-BgYuJM9o.js} +61 -3
  226. package/dist/client/assets/{xychartDiagram-5P7HB3ND-D3nQoxhz.js → xychartDiagram-2RQKCTM6-DKA6F9sv.js} +3 -3
  227. package/dist/client/assets/{yjs-provider-reset-guard-DSPzcvAO.js → yjs-provider-reset-guard-BicD2Ate.js} +1 -1
  228. package/dist/client/assets/{zh-CN-MVX3E32U-BULPbsyl.js → zh-CN-MVX3E32U-W0nclq-N.js} +1 -1
  229. package/dist/client/assets/{zh-HK-JNU5RLIE-bNGmeSaW.js → zh-HK-JNU5RLIE-C2VRLD9Z.js} +1 -1
  230. package/dist/client/assets/{zh-TW-LENVCA6T-CQDp064P.js → zh-TW-LENVCA6T-Ci7udZjZ.js} +1 -1
  231. package/dist/client/drawio-editor.html +3 -3
  232. package/dist/client/excalidraw-editor.html +3 -3
  233. package/dist/client/export-document.html +4 -4
  234. package/dist/client/index.html +5 -5
  235. package/package.json +21 -21
  236. package/src/client/application/app-shell/comments-feature.js +108 -0
  237. package/src/client/application/app-shell/git-feature.js +6 -1
  238. package/src/client/application/app-shell/ui-feature-shell.js +7 -4
  239. package/src/client/application/app-shell/ui-feature-sidebar.js +11 -2
  240. package/src/client/application/app-shell-elements.js +2 -0
  241. package/src/client/application/diagram-chrome.js +708 -0
  242. package/src/client/application/mermaid-preview-hydrator.js +44 -524
  243. package/src/client/application/plantuml-preview-hydrator.js +22 -518
  244. package/src/client/application/preview-renderer.js +21 -5
  245. package/src/client/application/quick-switcher-loader.js +14 -0
  246. package/src/client/application/workspace-route-controller.js +25 -1
  247. package/src/client/bootstrap/app-shell-feature-surface.js +67 -0
  248. package/src/client/bootstrap/collabmd-app-shell.js +111 -356
  249. package/src/client/bootstrap/lazy-controller-feature.js +434 -0
  250. package/src/client/domain/drawio-frame-load.js +28 -0
  251. package/src/client/domain/hash-routes.js +16 -1
  252. package/src/client/domain/runtime-paths.js +7 -0
  253. package/src/client/drawio-editor.js +23 -10
  254. package/src/client/excalidraw-editor.js +66 -13
  255. package/src/client/infrastructure/editor-session.js +4 -0
  256. package/src/client/infrastructure/editor-view-adapter.js +30 -0
  257. package/src/client/infrastructure/runtime-config.js +17 -2
  258. package/src/client/infrastructure/vault-api-client.js +16 -0
  259. package/src/client/presentation/app-shell-template.js +29 -12
  260. package/src/client/presentation/bases-preview-controller.js +33 -16
  261. package/src/client/presentation/comment-overview-controller.js +238 -0
  262. package/src/client/presentation/comment-ui/comment-ui-state.js +23 -0
  263. package/src/client/presentation/drawio-embed-controller.js +230 -64
  264. package/src/client/presentation/excalidraw-embed-controller.js +51 -60
  265. package/src/client/presentation/file-explorer-controller.js +9 -0
  266. package/src/client/presentation/file-explorer-view.js +11 -1
  267. package/src/client/presentation/quick-switcher-controller.js +217 -21
  268. package/src/client/presentation/quick-switcher-text-search.js +125 -0
  269. package/src/client/styles/components/navigation.css +43 -8
  270. package/src/client/styles/components/scrollbars.css +5 -0
  271. package/src/client/styles/features/comment-overview.css +196 -0
  272. package/src/client/styles/features/comments.css +1 -0
  273. package/src/client/styles/features/diagram-preview.css +43 -23
  274. package/src/client/styles/features/quick-switcher.css +153 -15
  275. package/src/client/styles/layout/responsive.css +3 -2
  276. package/src/client/styles/layout/shell.css +6 -3
  277. package/src/client/styles/surfaces/excalidraw-editor.css +4 -0
  278. package/src/server/application/workspace-reconciliation.js +446 -0
  279. package/src/server/config/env.js +74 -0
  280. package/src/server/create-app-server.js +68 -38
  281. package/src/server/domain/bases/base-expression-runtime.js +183 -147
  282. package/src/server/domain/bases/base-index-snapshot-store.js +53 -2
  283. package/src/server/domain/bases/base-query-service.js +55 -38
  284. package/src/server/domain/collaboration/collaboration-document-store.js +6 -2
  285. package/src/server/domain/collaboration/collaboration-room.js +66 -2
  286. package/src/server/domain/comment-overview.js +108 -0
  287. package/src/server/domain/hosted-workspace-contract.js +18 -0
  288. package/src/server/domain/hosted-workspace.js +744 -0
  289. package/src/server/domain/ripgrep-search-service.js +365 -0
  290. package/src/server/domain/workspace-state.js +848 -2
  291. package/src/server/infrastructure/github/github-app-client.js +205 -0
  292. package/src/server/infrastructure/github/github-setup-flow.js +86 -0
  293. package/src/server/infrastructure/http/create-git-api-command-handler.js +1 -1
  294. package/src/server/infrastructure/http/create-hosted-api-handler.js +200 -0
  295. package/src/server/infrastructure/http/create-request-handler.js +23 -1
  296. package/src/server/infrastructure/http/create-static-handler.js +14 -1
  297. package/src/server/infrastructure/http/create-vault-api-command-handler.js +44 -119
  298. package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
  299. package/src/server/infrastructure/http/create-vault-api-query-handler.js +56 -35
  300. package/src/server/infrastructure/http/request-body.js +12 -2
  301. package/src/server/infrastructure/persistence/hosted-metadata-store.js +500 -0
  302. package/src/server/infrastructure/persistence/sidecar-store.js +53 -2
  303. package/src/server/infrastructure/persistence/vault-content-adapter.js +8 -8
  304. package/src/server/infrastructure/persistence/vault-file-store.js +64 -135
  305. package/src/server/infrastructure/websocket/attach-collaboration-gateway.js +49 -5
  306. package/src/server/infrastructure/workspace/file-system-sync-service.js +28 -411
  307. package/src/server/infrastructure/workspace/workspace-mutation-coordinator.js +13 -621
  308. package/src/server/infrastructure/workspace/workspace-state-file-system-adapter.js +37 -0
  309. package/dist/client/assets/_baseFor-BSErPbF2.js +0 -1
  310. package/dist/client/assets/architecture-YZFGNWBL-DWWrde02.js +0 -1
  311. package/dist/client/assets/blockDiagram-DXYQGD6D-6UN-nR8-.js +0 -132
  312. package/dist/client/assets/channel-XGCkuPi6.js +0 -1
  313. package/dist/client/assets/chunk-2KRD3SAO-CFcF2aNP.js +0 -1
  314. package/dist/client/assets/chunk-336JU56O-DvrrHsJT.js +0 -2
  315. package/dist/client/assets/chunk-426QAEUC-CEbmCgux.js +0 -1
  316. package/dist/client/assets/chunk-4TB4RGXK-CoouNThi.js +0 -206
  317. package/dist/client/assets/chunk-5FUZZQ4R-CxIIxXPy.js +0 -62
  318. package/dist/client/assets/chunk-5PVQY5BW-ciE7eHID.js +0 -2
  319. package/dist/client/assets/chunk-67CJDMHE-CW-fbgQB.js +0 -1
  320. package/dist/client/assets/chunk-7N4EOEYR-DbAW6XnF.js +0 -1
  321. package/dist/client/assets/chunk-AA7GKIK3-ClDHDAza.js +0 -1
  322. package/dist/client/assets/chunk-CIAEETIT-BnB8a6HR.js +0 -1
  323. package/dist/client/assets/chunk-ENJZ2VHE-BQj_1YA_.js +0 -10
  324. package/dist/client/assets/chunk-FOC6F5B3-Bw6XfKDP.js +0 -1
  325. package/dist/client/assets/chunk-ICPOFSXX-DqJi89rc.js +0 -122
  326. package/dist/client/assets/chunk-K5T4RW27-CQtjKF2g.js +0 -94
  327. package/dist/client/assets/chunk-KGLVRYIC-BWSPiKjp.js +0 -1
  328. package/dist/client/assets/chunk-ORNJ4GCN-Csga44e5.js +0 -1
  329. package/dist/client/assets/chunk-OYMX7WX6-DvtmCasj.js +0 -231
  330. package/dist/client/assets/chunk-QZHKN3VN-CHVH9_3S.js +0 -1
  331. package/dist/client/assets/chunk-YHkbxXgt.js +0 -1
  332. package/dist/client/assets/chunk-YKPWT25G-GISHuloq.js +0 -35
  333. package/dist/client/assets/classDiagram-6PBFFD2Q-D1KhAUL3.js +0 -1
  334. package/dist/client/assets/classDiagram-v2-HSJHXN6E-BSyyJpnR.js +0 -1
  335. package/dist/client/assets/clone-DI0bYZ1L.js +0 -1
  336. package/dist/client/assets/dagre-Dn6rkrte.js +0 -1
  337. package/dist/client/assets/dagre-KV5264BT-COzej2en.js +0 -4
  338. package/dist/client/assets/diagram-G4DWMVQ6-CbswIU9X.js +0 -24
  339. package/dist/client/assets/diagram-MMDJMWI5-BE-yOVGX.js +0 -43
  340. package/dist/client/assets/dist-BCzW2jDH.js +0 -1
  341. package/dist/client/assets/dist-BEk5kTf_.js +0 -1
  342. package/dist/client/assets/dist-BOn786F3.js +0 -1
  343. package/dist/client/assets/dist-BwUX6zpo.js +0 -1
  344. package/dist/client/assets/dist-D-ixVAsS2.js +0 -1
  345. package/dist/client/assets/dist-DwgKARew.js +0 -2
  346. package/dist/client/assets/dist-GgGgSSbl.js +0 -1
  347. package/dist/client/assets/dist-ZuMKSK7c.js +0 -9
  348. package/dist/client/assets/dist-tRNsnttY.js +0 -1
  349. package/dist/client/assets/drawio-editor-B_Sr8Z_Z.js +0 -9
  350. package/dist/client/assets/drawioEditor-DBSyP3_d.js +0 -2
  351. package/dist/client/assets/editor-session-C1scHGLl.js +0 -16
  352. package/dist/client/assets/excalidraw-editor-B0XXVLHd.js +0 -9
  353. package/dist/client/assets/excalidraw-editor-BZCE9ydu.css +0 -1
  354. package/dist/client/assets/excalidraw-scene-wAbVSY1L.js +0 -176
  355. package/dist/client/assets/excalidrawEditor-37sk03H8.js +0 -2
  356. package/dist/client/assets/exportDocument-WQNApAbg.js +0 -2
  357. package/dist/client/assets/flatten-DjXjUsvv.js +0 -1
  358. package/dist/client/assets/ganttDiagram-T4ZO3ILL-B-NMvHWN.js +0 -292
  359. package/dist/client/assets/gitGraph-7Q5UKJZL-DWNinXu4.js +0 -1
  360. package/dist/client/assets/gitGraphDiagram-UUTBAWPF-B95qkCUx.js +0 -106
  361. package/dist/client/assets/graphlib-CAwOVCJc.js +0 -1
  362. package/dist/client/assets/image-J2CAS7OM-DD4DaQTs.js +0 -1
  363. package/dist/client/assets/index-BoKmcqkH.js +0 -2
  364. package/dist/client/assets/index-maPm_Kvk.css +0 -1
  365. package/dist/client/assets/info-OMHHGYJF-DtYG_rX0.js +0 -1
  366. package/dist/client/assets/isEmpty-CpfhGGBo.js +0 -1
  367. package/dist/client/assets/javascript-qUBHINSy.js +0 -1
  368. package/dist/client/assets/line-BCItEgq3.js +0 -1
  369. package/dist/client/assets/main-BKumyd95.js +0 -1410
  370. package/dist/client/assets/mermaid-parser.core-CsTVsPcD.js +0 -4
  371. package/dist/client/assets/mermaid-runtime-BGlnoUXY.js +0 -11
  372. package/dist/client/assets/navigation-Du6CLhvs.css +0 -1
  373. package/dist/client/assets/packet-4T2RLAQJ-CUVefhAv.js +0 -1
  374. package/dist/client/assets/percentages-5DKR754L-DuhOjTM2.js +0 -1
  375. package/dist/client/assets/pie-ZZUOXDRM-BHBJ1dLX.js +0 -1
  376. package/dist/client/assets/pieDiagram-DEJITSTG-BOo-WzjZ.js +0 -30
  377. package/dist/client/assets/preview-diagram-utils-Nqpp4FNV.js +0 -1
  378. package/dist/client/assets/preview-render-compiler-9SmLUP5V.js +0 -1
  379. package/dist/client/assets/preview-render-compiler-IUtgIlOM.js +0 -35
  380. package/dist/client/assets/preview-render-profile-Bf6R7v4w.js +0 -23
  381. package/dist/client/assets/preview-render-worker-BwQ5sPy9.js +0 -59
  382. package/dist/client/assets/quadrantDiagram-34T5L4WZ-2vfo0l5S.js +0 -7
  383. package/dist/client/assets/quick-switcher-controller-B1erSgJ1.js +0 -5
  384. package/dist/client/assets/radar-PYXPWWZC-2jR4qZNU.js +0 -1
  385. package/dist/client/assets/reduce-ChpYjEUB.js +0 -1
  386. package/dist/client/assets/runtime-config-BcUbZKho.js +0 -1
  387. package/dist/client/assets/sequenceDiagram-FGHM5R23-DtF-1Kt2.js +0 -157
  388. package/dist/client/assets/stateDiagram-FHFEXIEX-DKk7Sb0f.js +0 -1
  389. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DJUaiADr.js +0 -1
  390. package/dist/client/assets/subset-shared.chunk-CWNYNLru.js +0 -1
  391. package/dist/client/assets/treeView-SZITEDCU-DN5dP2ol.js +0 -1
  392. package/dist/client/assets/treemap-W4RFUUIX-Dva7DBJR.js +0 -1
  393. package/dist/client/assets/turtle-BkP3ExOG.js +0 -1
  394. package/dist/client/assets/vault-api-client-BDKKvtOF.js +0 -1
  395. package/dist/client/assets/vennDiagram-DHZGUBPP-DNnIjRae.js +0 -34
  396. package/dist/client/assets/wardley-RL74JXVD-CDZW5uzY.js +0 -1
  397. /package/dist/client/assets/{apl-C1JYSI8J.js → apl-CnwPGSsG.js} +0 -0
  398. /package/dist/client/assets/{array-B3agRrCs.js → array-BifhSqXX.js} +0 -0
  399. /package/dist/client/assets/{asciiarmor-DHW75j1s.js → asciiarmor-qTkVPQu6.js} +0 -0
  400. /package/dist/client/assets/{asn1-CQiG40kG.js → asn1-Dr8qZg38.js} +0 -0
  401. /package/dist/client/assets/{asterisk-BWExh0n4.js → asterisk-Bja0s6e1.js} +0 -0
  402. /package/dist/client/assets/{base-h1uscjTi.js → base-CxPEiHuy.js} +0 -0
  403. /package/dist/client/assets/{brainfuck-CTNFyOLg.js → brainfuck-D5EjA2JK.js} +0 -0
  404. /package/dist/client/assets/{chunk-3PELD44J-DymL2rGq.js → chunk-3PELD44J-C625MXe_.js} +0 -0
  405. /package/dist/client/assets/{chunk-A66AFZZU-BFHL744F.js → chunk-A66AFZZU-BbU3ThId.js} +0 -0
  406. /package/dist/client/assets/{chunk-LOOWOR4L-C5BUwXgZ.js → chunk-LOOWOR4L-CGCAV5nC.js} +0 -0
  407. /package/dist/client/assets/{clike-BFTLRaGS.js → clike-DHH8Ad3s.js} +0 -0
  408. /package/dist/client/assets/{clojure-D-DYVqu7.js → clojure-BflJGmDX.js} +0 -0
  409. /package/dist/client/assets/{cmake-DtGL-Unu.js → cmake-CyVbuzPu.js} +0 -0
  410. /package/dist/client/assets/{cobol-DP4QggbL.js → cobol-B_OZ4V-R.js} +0 -0
  411. /package/dist/client/assets/{coffeescript-B7GZajzV.js → coffeescript-B2pKbFk8.js} +0 -0
  412. /package/dist/client/assets/{commonlisp-COlJYiQT.js → commonlisp-CcllspGY.js} +0 -0
  413. /package/dist/client/assets/{crystal-I_dE9xG-.js → crystal-M5-qzICs.js} +0 -0
  414. /package/dist/client/assets/{css-CmhPNxBE.js → css-CYpP4FRV.js} +0 -0
  415. /package/dist/client/assets/{cypher-DEGl2llJ.js → cypher-p9eYesGn.js} +0 -0
  416. /package/dist/client/assets/{d-BspB0dox.js → d-BhMjBjQP.js} +0 -0
  417. /package/dist/client/assets/{defaultLocale-B_FbTTbl.js → defaultLocale-C8Fc0cco.js} +0 -0
  418. /package/dist/client/assets/{diff-BWuPUsEo.js → diff-ChtP43wD.js} +0 -0
  419. /package/dist/client/assets/{drawio-room-1i6Nn0_Z.js → drawio-room-B3OZRHTH.js} +0 -0
  420. /package/dist/client/assets/{dtd-C6brJFPg.js → dtd-DTF72YNO.js} +0 -0
  421. /package/dist/client/assets/{dylan-Bft86ZSB.js → dylan-C6jEEEk-.js} +0 -0
  422. /package/dist/client/assets/{ebnf-D6ifG44A.js → ebnf-D4c0_ac3.js} +0 -0
  423. /package/dist/client/assets/{ecl-D9rhJ9-u.js → ecl-BSZaIHnp.js} +0 -0
  424. /package/dist/client/assets/{eiffel-DwxtewZF.js → eiffel-BEjRio4Q.js} +0 -0
  425. /package/dist/client/assets/{elm-B1TncobV.js → elm-Cshzl8qu.js} +0 -0
  426. /package/dist/client/assets/{erlang-BDJZNtt8.js → erlang-DaB2Rkuy.js} +0 -0
  427. /package/dist/client/assets/{excalidraw-mermaid-stub-DzxtBcQW.js → excalidraw-mermaid-stub-BNckbX2n.js} +0 -0
  428. /package/dist/client/assets/{fcl-CUXJFJn1.js → fcl-ClOhbFR7.js} +0 -0
  429. /package/dist/client/assets/{file-kind-DmKq2MvD.js → file-kind-BKPOIRPE.js} +0 -0
  430. /package/dist/client/assets/{forth-nvhcMz63.js → forth-Cezjo90N.js} +0 -0
  431. /package/dist/client/assets/{fortran-BZID-z10.js → fortran-Bt6PBEDR.js} +0 -0
  432. /package/dist/client/assets/{gas-DjQsZDGE.js → gas-BHEdbvp9.js} +0 -0
  433. /package/dist/client/assets/{gherkin-S0kHlzux.js → gherkin-oBAE_ms0.js} +0 -0
  434. /package/dist/client/assets/{groovy-Di--Vb9Z.js → groovy-BC3IOsC8.js} +0 -0
  435. /package/dist/client/assets/{haskell-C6qH3-aI.js → haskell-BRsoo5mP.js} +0 -0
  436. /package/dist/client/assets/{http-DG1Y9fpK.js → http-CLVgA2GD.js} +0 -0
  437. /package/dist/client/assets/{idl-B64p3NTJ.js → idl-BUZw3wgd.js} +0 -0
  438. /package/dist/client/assets/{image-blob-reduce.esm-D8JQdTFk.js → image-blob-reduce.esm-NzmDxm1v.js} +0 -0
  439. /package/dist/client/assets/{init-DtLQcSuO.js → init-D6jRqBbL.js} +0 -0
  440. /package/dist/client/assets/{julia-B22G9Bym.js → julia-CQfgDRfP.js} +0 -0
  441. /package/dist/client/assets/{katex-CXYULLWy.js → katex-C7GtLiLd.js} +0 -0
  442. /package/dist/client/assets/{vault-api-client-D7Ck0CvR.css → keyboard-shortcuts-D7Ck0CvR.css} +0 -0
  443. /package/dist/client/assets/{livescript-CkcuHqeS.js → livescript-BXxG0Yva.js} +0 -0
  444. /package/dist/client/assets/{lua-Cg0FqIlO.js → lua-CL1SqxuB.js} +0 -0
  445. /package/dist/client/assets/{mathematica-CKVhKnoY.js → mathematica-u8YMmbU0.js} +0 -0
  446. /package/dist/client/assets/{mbox-DANyzFJ2.js → mbox-BEMVcqjs.js} +0 -0
  447. /package/dist/client/assets/{mirc-BVG2S5rO.js → mirc-C9zpzAZU.js} +0 -0
  448. /package/dist/client/assets/{mllike-C0p7lv48.js → mllike-B45xgp2S.js} +0 -0
  449. /package/dist/client/assets/{modelica-vJ-Qa9jV.js → modelica-CqHI_q-D.js} +0 -0
  450. /package/dist/client/assets/{mscgen-vUD-SWGJ.js → mscgen-qgSLujhx.js} +0 -0
  451. /package/dist/client/assets/{mumps-D0KfUTSd.js → mumps-CW_TBmxz.js} +0 -0
  452. /package/dist/client/assets/{nginx-DkVceJrH.js → nginx-BMaDbqW3.js} +0 -0
  453. /package/dist/client/assets/{ntriples-BBuCIfS0.js → ntriples-d28e9m0E.js} +0 -0
  454. /package/dist/client/assets/{octave-BTv2CqSQ.js → octave-D2Q8cUp1.js} +0 -0
  455. /package/dist/client/assets/{oz-D8SjVDNU.js → oz-BwTct_5T.js} +0 -0
  456. /package/dist/client/assets/{pascal-T-tfhVyx.js → pascal-Dp_KdFgX.js} +0 -0
  457. /package/dist/client/assets/{path-DIlZIGue.js → path-BWPyau1x.js} +0 -0
  458. /package/dist/client/assets/{perl-BDrCkHRd.js → perl-CdEHsPfU.js} +0 -0
  459. /package/dist/client/assets/{pig-BEyI4fPq.js → pig-AF4Hwhju.js} +0 -0
  460. /package/dist/client/assets/{powershell-DtnFc6GG.js → powershell-CzG71I4L.js} +0 -0
  461. /package/dist/client/assets/{preload-helper-Bo9GmnuQ.js → preload-helper-kNaey6uv.js} +0 -0
  462. /package/dist/client/assets/{properties-DWUvbxV9.js → properties-C357ku5U.js} +0 -0
  463. /package/dist/client/assets/{protobuf-CQGoYyfE.js → protobuf-D1ij_kNL.js} +0 -0
  464. /package/dist/client/assets/{puppet-Dd-qWO3p.js → puppet-B4hC2X4m.js} +0 -0
  465. /package/dist/client/assets/{python-BUyhM0Ew.js → python-BqYw9LYJ.js} +0 -0
  466. /package/dist/client/assets/{q-Dls1OX0D.js → q-B9NhS7L_.js} +0 -0
  467. /package/dist/client/assets/{r-DeZ8Mdev.js → r-DADKenSm.js} +0 -0
  468. /package/dist/client/assets/{rough.esm-BU2knLt9.js → rough.esm-CSKSodPl.js} +0 -0
  469. /package/dist/client/assets/{roundRect-BzEouiv_.js → roundRect-D01gJrlt.js} +0 -0
  470. /package/dist/client/assets/{rpm-CjWxLM68.js → rpm-gpDK5sbt.js} +0 -0
  471. /package/dist/client/assets/{ruby-CB34f2Gf.js → ruby-DsYpTuWg.js} +0 -0
  472. /package/dist/client/assets/{runtime-config-loader-_D2KZKn-.js → runtime-config-loader-BUK56BZz.js} +0 -0
  473. /package/dist/client/assets/{sas-Bji4HDQq.js → sas-C2OyD2Y6.js} +0 -0
  474. /package/dist/client/assets/{scheme-C3elI80V.js → scheme-CyDdOh7e.js} +0 -0
  475. /package/dist/client/assets/{shell-DUveK2Hb.js → shell-Du5Qg9im.js} +0 -0
  476. /package/dist/client/assets/{sieve-2ogwMVx4.js → sieve-BAxa3IjF.js} +0 -0
  477. /package/dist/client/assets/{simple-mode-pOKc0mfx.js → simple-mode-DRpGK0lJ.js} +0 -0
  478. /package/dist/client/assets/{smalltalk-BuGhc6lW.js → smalltalk-BLp5-jwC.js} +0 -0
  479. /package/dist/client/assets/{solr-DTxshpm8.js → solr-BBopId9w.js} +0 -0
  480. /package/dist/client/assets/{sparql-vm8qNO8J.js → sparql-Dz-mlCAC.js} +0 -0
  481. /package/dist/client/assets/{spreadsheet-C6Vbtl9-.js → spreadsheet-CTIncYxj.js} +0 -0
  482. /package/dist/client/assets/{sql-GL7dVWcd.js → sql-DcCJ9jop.js} +0 -0
  483. /package/dist/client/assets/{stex-CEwW0Q_0.js → stex-sDrdk2BW.js} +0 -0
  484. /package/dist/client/assets/{stylus-D1SZIMDs.js → stylus-DLLZ8dgm.js} +0 -0
  485. /package/dist/client/assets/{swift-CKcKnWv9.js → swift-DKB6_1j6.js} +0 -0
  486. /package/dist/client/assets/{tcl-SPk7uiDB.js → tcl-BGfruO1u.js} +0 -0
  487. /package/dist/client/assets/{textile-C48beRus.js → textile-DWBqthVk.js} +0 -0
  488. /package/dist/client/assets/{tiddlywiki-CiImjFLN.js → tiddlywiki-VlUiK86J.js} +0 -0
  489. /package/dist/client/assets/{tiki-HkXZ4BIW.js → tiki-CxVlf5KZ.js} +0 -0
  490. /package/dist/client/assets/{toml-BmfpMy1_.js → toml-LvoKBwCs.js} +0 -0
  491. /package/dist/client/assets/{troff-BjbEOT5E.js → troff-C2dAgh7P.js} +0 -0
  492. /package/dist/client/assets/{ttcn-NA-V4KnY.js → ttcn-BePYh-hG.js} +0 -0
  493. /package/dist/client/assets/{ttcn-cfg-TPHncdGN.js → ttcn-cfg-CY0aot7Q.js} +0 -0
  494. /package/dist/client/assets/{vb-C19AQWqO.js → vb-BthdM_4N.js} +0 -0
  495. /package/dist/client/assets/{vbscript-CHJk3s95.js → vbscript-D9f6rSsU.js} +0 -0
  496. /package/dist/client/assets/{velocity-Ya0P4sQU.js → velocity-CqftRsjg.js} +0 -0
  497. /package/dist/client/assets/{verilog-DSARZZPc.js → verilog-D-x6ne0Z.js} +0 -0
  498. /package/dist/client/assets/{vhdl-CnYyYTpa.js → vhdl-CMrOq2q1.js} +0 -0
  499. /package/dist/client/assets/{webidl-DttrYZRT.js → webidl-D5jiJvOU.js} +0 -0
  500. /package/dist/client/assets/{xquery-CEDTd8qs.js → xquery-fj_R-kMw.js} +0 -0
  501. /package/dist/client/assets/{yacas-C7dxlPB0.js → yacas-CXXgtw0p.js} +0 -0
  502. /package/dist/client/assets/{z80-BqEfFSnA.js → z80-CL1naaMV.js} +0 -0
@@ -6,13 +6,6 @@ import { WorkspacePreviewController } from '../application/workspace-preview-con
6
6
  import { WorkspaceCoordinator } from '../application/workspace-coordinator.js';
7
7
  import { WorkspaceStateStore } from '../application/workspace-state-store.js';
8
8
  import { bindAppShellElements } from '../application/app-shell-elements.js';
9
- import { chatFeature } from '../application/app-shell/chat-feature.js';
10
- import { commentsFeature } from '../application/app-shell/comments-feature.js';
11
- import { exportFeature } from '../application/app-shell/export-feature.js';
12
- import { gitFeature } from '../application/app-shell/git-feature.js';
13
- import { presenceFeature } from '../application/app-shell/presence-feature.js';
14
- import { uiFeature } from '../application/app-shell/ui-feature.js';
15
- import { workspaceFeature } from '../application/app-shell/workspace-feature.js';
16
9
  import { LOBBY_CHAT_MESSAGE_MAX_LENGTH, LobbyPresence } from '../infrastructure/lobby-presence.js';
17
10
  import { BrowserNavigationPort } from '../infrastructure/browser-navigation-port.js';
18
11
  import { BrowserNotificationPort } from '../infrastructure/browser-notification-port.js';
@@ -26,14 +19,9 @@ import { TabActivityLock } from '../infrastructure/tab-activity-lock.js';
26
19
  import { vaultApiClient } from '../infrastructure/vault-api-client.js';
27
20
  import { WorkspaceSyncClient } from '../infrastructure/workspace-sync-client.js';
28
21
  import { BacklinksPanel } from '../presentation/backlinks-panel.js';
29
- import { BasesPreviewController } from '../presentation/bases-preview-controller.js';
22
+ import { CommentOverviewController } from '../presentation/comment-overview-controller.js';
30
23
  import { CommentUiController } from '../presentation/comment-ui-controller.js';
31
- import { DrawioEmbedController } from '../presentation/drawio-embed-controller.js';
32
- import { ExcalidrawEmbedController } from '../presentation/excalidraw-embed-controller.js';
33
24
  import { FileExplorerController } from '../presentation/file-explorer-controller.js';
34
- import { FileHistoryViewController } from '../presentation/file-history-view-controller.js';
35
- import { GitDiffViewController } from '../presentation/git-diff-view-controller.js';
36
- import { GitPanelController } from '../presentation/git-panel-controller.js';
37
25
  import { LayoutController } from '../presentation/layout-controller.js';
38
26
  import { OutlineController } from '../presentation/outline-controller.js';
39
27
  import { ScrollSyncController } from '../presentation/scroll-sync-controller.js';
@@ -42,185 +30,20 @@ import { ToastController } from '../presentation/toast-controller.js';
42
30
  import { VideoEmbedController } from '../presentation/video-embed-controller.js';
43
31
  import { ImageLightboxController } from '../presentation/image-lightbox-controller.js';
44
32
  import { renderAppShell } from '../presentation/app-shell-renderer.js';
33
+ import { createAppShellFeatureSurface } from './app-shell-feature-surface.js';
45
34
 
46
35
  export class CollabMdAppShell {
47
- updateChatMessages(...args) { return chatFeature.updateChatMessages.apply(this, args); }
48
- toggleChatPanel(...args) { return chatFeature.toggleChatPanel.apply(this, args); }
49
- openChatPanel(...args) { return chatFeature.openChatPanel.apply(this, args); }
50
- closeChatPanel(...args) { return chatFeature.closeChatPanel.apply(this, args); }
51
- handleChatSubmit(...args) { return chatFeature.handleChatSubmit.apply(this, args); }
52
- renderChat(...args) { return chatFeature.renderChat.apply(this, args); }
53
- createChatMessageElement(...args) { return chatFeature.createChatMessageElement.apply(this, args); }
54
- scrollChatToBottom(...args) { return chatFeature.scrollChatToBottom.apply(this, args); }
55
- formatChatTimestamp(...args) { return chatFeature.formatChatTimestamp.apply(this, args); }
56
- getChatMessageFileLabel(...args) { return chatFeature.getChatMessageFileLabel.apply(this, args); }
57
- formatChatToastMessage(...args) { return chatFeature.formatChatToastMessage.apply(this, args); }
58
- syncChatToggleButton(...args) { return chatFeature.syncChatToggleButton.apply(this, args); }
59
- syncChatNotificationButton(...args) { return chatFeature.syncChatNotificationButton.apply(this, args); }
60
- handleChatNotificationToggle(...args) { return chatFeature.handleChatNotificationToggle.apply(this, args); }
61
- maybeNotifyChatMessage(...args) { return chatFeature.maybeNotifyChatMessage.apply(this, args); }
62
- maybeShowBrowserChatNotification(...args) { return chatFeature.maybeShowBrowserChatNotification.apply(this, args); }
63
- getCommentFileKind(...args) { return commentsFeature.getCommentFileKind.apply(this, args); }
64
- syncCommentChrome(...args) { return commentsFeature.syncCommentChrome.apply(this, args); }
65
- handleCommentSelectionChange(...args) { return commentsFeature.handleCommentSelectionChange.apply(this, args); }
66
- handleCommentThreadsChange(...args) { return commentsFeature.handleCommentThreadsChange.apply(this, args); }
67
- handleCommentEditorContentChange(...args) { return commentsFeature.handleCommentEditorContentChange.apply(this, args); }
68
- refreshCommentUiLayout(...args) { return commentsFeature.refreshCommentUiLayout.apply(this, args); }
69
- initializeExportBridge(...args) { return exportFeature.initializeExportBridge.apply(this, args); }
70
- handleExportRequest(...args) { return exportFeature.handleExportRequest.apply(this, args); }
71
- formatPullBackupToast(...args) { return gitFeature.formatPullBackupToast.apply(this, args); }
72
- setGitOperationStatus(...args) { return gitFeature.setGitOperationStatus.apply(this, args); }
73
- runGitActionWithStatus(...args) { return gitFeature.runGitActionWithStatus.apply(this, args); }
74
- handleGitDiffSelection(...args) { return gitFeature.handleGitDiffSelection.apply(this, args); }
75
- handleGitCommitSelection(...args) { return gitFeature.handleGitCommitSelection.apply(this, args); }
76
- handleGitHistorySelection(...args) { return gitFeature.handleGitHistorySelection.apply(this, args); }
77
- handleGitFileHistorySelection(...args) { return gitFeature.handleGitFileHistorySelection.apply(this, args); }
78
- handleGitFilePreviewSelection(...args) { return gitFeature.handleGitFilePreviewSelection.apply(this, args); }
79
- handleGitRepoChange(...args) { return gitFeature.handleGitRepoChange.apply(this, args); }
80
- syncFileHistoryButton(...args) { return gitFeature.syncFileHistoryButton.apply(this, args); }
81
- syncMainChrome(...args) { return gitFeature.syncMainChrome.apply(this, args); }
82
- showGitDiff(...args) { return gitFeature.showGitDiff.apply(this, args); }
83
- showGitCommit(...args) { return gitFeature.showGitCommit.apply(this, args); }
84
- showGitHistory(...args) { return gitFeature.showGitHistory.apply(this, args); }
85
- showGitFileHistory(...args) { return gitFeature.showGitFileHistory.apply(this, args); }
86
- showGitFilePreview(...args) { return gitFeature.showGitFilePreview.apply(this, args); }
87
- postGitAction(...args) { return gitFeature.postGitAction.apply(this, args); }
88
- refreshWorkspaceAfterGitAction(...args) { return gitFeature.refreshWorkspaceAfterGitAction.apply(this, args); }
89
- refreshGitAfterAction(...args) { return gitFeature.refreshGitAfterAction.apply(this, args); }
90
- finalizeGitAction(...args) { return gitFeature.finalizeGitAction.apply(this, args); }
91
- handleWorkspaceChangeForCurrentFile(...args) { return gitFeature.handleWorkspaceChangeForCurrentFile.apply(this, args); }
92
- handleIncomingWorkspaceEvent(...args) { return gitFeature.handleIncomingWorkspaceEvent.apply(this, args); }
93
- stageGitFile(...args) { return gitFeature.stageGitFile.apply(this, args); }
94
- unstageGitFile(...args) { return gitFeature.unstageGitFile.apply(this, args); }
95
- pushGitBranch(...args) { return gitFeature.pushGitBranch.apply(this, args); }
96
- pullGitBranch(...args) { return gitFeature.pullGitBranch.apply(this, args); }
97
- openGitResetDialog(...args) { return gitFeature.openGitResetDialog.apply(this, args); }
98
- handleGitResetSubmit(...args) { return gitFeature.handleGitResetSubmit.apply(this, args); }
99
- openGitCommitDialog(...args) { return gitFeature.openGitCommitDialog.apply(this, args); }
100
- handleGitCommitSubmit(...args) { return gitFeature.handleGitCommitSubmit.apply(this, args); }
101
- updateGlobalUsers(...args) { return presenceFeature.updateGlobalUsers.apply(this, args); }
102
- updateFileAwareness(...args) { return presenceFeature.updateFileAwareness.apply(this, args); }
103
- closePresencePanel(...args) { return presenceFeature.closePresencePanel.apply(this, args); }
104
- openPresencePanel(...args) { return presenceFeature.openPresencePanel.apply(this, args); }
105
- renderPresence(...args) { return presenceFeature.renderPresence.apply(this, args); }
106
- renderAvatars(...args) { return presenceFeature.renderAvatars.apply(this, args); }
107
- renderPresencePanel(...args) { return presenceFeature.renderPresencePanel.apply(this, args); }
108
- startFollowingUser(...args) { return presenceFeature.startFollowingUser.apply(this, args); }
109
- toggleFollowUser(...args) { return presenceFeature.toggleFollowUser.apply(this, args); }
110
- togglePresencePanel(...args) { return presenceFeature.togglePresencePanel.apply(this, args); }
111
- stopFollowingUser(...args) { return presenceFeature.stopFollowingUser.apply(this, args); }
112
- syncFollowedUser(...args) { return presenceFeature.syncFollowedUser.apply(this, args); }
113
- followUserCursor(...args) { return presenceFeature.followUserCursor.apply(this, args); }
114
- followExcalidrawUser(...args) { return presenceFeature.followExcalidrawUser.apply(this, args); }
115
- resolveFileClientId(...args) { return presenceFeature.resolveFileClientId.apply(this, args); }
116
- bindEvents(...args) { return uiFeature.bindEvents.apply(this, args); }
117
- clearInitialFileBootstrap(...args) { return uiFeature.clearInitialFileBootstrap.apply(this, args); }
118
- closeToolbarOverflowMenu(...args) { return uiFeature.closeToolbarOverflowMenu.apply(this, args); }
119
- applyPendingPreviewRouteAnchor(...args) { return uiFeature.applyPendingPreviewRouteAnchor.apply(this, args); }
120
- copyPreviewHeadingLink(...args) { return uiFeature.copyPreviewHeadingLink.apply(this, args); }
121
- createPreviewHeadingLinkUrl(...args) { return uiFeature.createPreviewHeadingLinkUrl.apply(this, args); }
122
- getStoredLineWrapping(...args) { return uiFeature.getStoredLineWrapping.apply(this, args); }
123
- handleConnectionChange(...args) { return uiFeature.handleConnectionChange.apply(this, args); }
124
- handleDocumentKeydown(...args) { return uiFeature.handleDocumentKeydown.apply(this, args); }
125
- handleDocumentPointerDown(...args) { return uiFeature.handleDocumentPointerDown.apply(this, args); }
126
- handlePreviewContentClick(...args) { return uiFeature.handlePreviewContentClick.apply(this, args); }
127
- handleThemeChange(...args) { return uiFeature.handleThemeChange.apply(this, args); }
128
- hideEditorLoading(...args) { return uiFeature.hideEditorLoading.apply(this, args); }
129
- initialize(...args) { return uiFeature.initialize.apply(this, args); }
130
- initializeVisualViewportBinding(...args) { return uiFeature.initializeVisualViewportBinding.apply(this, args); }
131
- initializeVersionMonitoring(...args) { return uiFeature.initializeVersionMonitoring.apply(this, args); }
132
- navigatePreviewHeading(...args) { return uiFeature.navigatePreviewHeading.apply(this, args); }
133
- promptForVersionReload(...args) { return uiFeature.promptForVersionReload.apply(this, args); }
134
- requestPreviewRouteAnchor(...args) { return uiFeature.requestPreviewRouteAnchor.apply(this, args); }
135
- scheduleBacklinkRefresh(...args) { return uiFeature.scheduleBacklinkRefresh.apply(this, args); }
136
- setToolbarOverflowOpen(...args) { return uiFeature.setToolbarOverflowOpen.apply(this, args); }
137
- showEditorLoadError(...args) { return uiFeature.showEditorLoadError.apply(this, args); }
138
- showEditorLoading(...args) { return uiFeature.showEditorLoading.apply(this, args); }
139
- syncPreviewHeadingLinkButtons(...args) { return uiFeature.syncPreviewHeadingLinkButtons.apply(this, args); }
140
- syncVisualViewportBounds(...args) { return uiFeature.syncVisualViewportBounds.apply(this, args); }
141
- syncToolbarOverflowVisibility(...args) { return uiFeature.syncToolbarOverflowVisibility.apply(this, args); }
142
- syncWrapToggle(...args) { return uiFeature.syncWrapToggle.apply(this, args); }
143
- toggleToolbarOverflowMenu(...args) { return uiFeature.toggleToolbarOverflowMenu.apply(this, args); }
144
- toggleLineWrapping(...args) { return uiFeature.toggleLineWrapping.apply(this, args); }
145
- applySidebarVisibility(...args) { return uiFeature.applySidebarVisibility.apply(this, args); }
146
- closeSidebarOnMobile(...args) { return uiFeature.closeSidebarOnMobile.apply(this, args); }
147
- isMobileViewport(...args) { return uiFeature.isMobileViewport.apply(this, args); }
148
- restoreSidebarState(...args) { return uiFeature.restoreSidebarState.apply(this, args); }
149
- setSidebarTab(...args) { return uiFeature.setSidebarTab.apply(this, args); }
150
- setSidebarVisibility(...args) { return uiFeature.setSidebarVisibility.apply(this, args); }
151
- toggleSidebar(...args) { return uiFeature.toggleSidebar.apply(this, args); }
152
- getCurrentUser(...args) { return uiFeature.getCurrentUser.apply(this, args); }
153
- getCurrentUserName(...args) { return uiFeature.getCurrentUserName.apply(this, args); }
154
- getStoredUserName(...args) { return uiFeature.getStoredUserName.apply(this, args); }
155
- handleDisplayNameSubmit(...args) { return uiFeature.handleDisplayNameSubmit.apply(this, args); }
156
- isIdentityManagedByAuth(...args) { return uiFeature.isIdentityManagedByAuth.apply(this, args); }
157
- openDisplayNameDialog(...args) { return uiFeature.openDisplayNameDialog.apply(this, args); }
158
- promptForDisplayNameIfNeeded(...args) { return uiFeature.promptForDisplayNameIfNeeded.apply(this, args); }
159
- syncCurrentUserName(...args) { return uiFeature.syncCurrentUserName.apply(this, args); }
160
- syncIdentityManagementUi(...args) { return uiFeature.syncIdentityManagementUi.apply(this, args); }
161
- applyMarkdownToolbarAction(...args) { return uiFeature.applyMarkdownToolbarAction.apply(this, args); }
162
- copyCurrentLink(...args) { return uiFeature.copyCurrentLink.apply(this, args); }
163
- closeMarkdownBlockMenu(...args) { return uiFeature.closeMarkdownBlockMenu.apply(this, args); }
164
- getActiveMarkdownBlockAction(...args) { return uiFeature.getActiveMarkdownBlockAction.apply(this, args); }
165
- getMarkdownBlockMenuPopover(...args) { return uiFeature.getMarkdownBlockMenuPopover.apply(this, args); }
166
- handleEditorImageInsert(...args) { return uiFeature.handleEditorImageInsert.apply(this, args); }
167
- handleMarkdownToolbarClick(...args) { return uiFeature.handleMarkdownToolbarClick.apply(this, args); }
168
- handleMarkdownToolbarDocumentPointerDown(...args) { return uiFeature.handleMarkdownToolbarDocumentPointerDown.apply(this, args); }
169
- handleMarkdownToolbarKeydown(...args) { return uiFeature.handleMarkdownToolbarKeydown.apply(this, args); }
170
- handleToolbarImageInsert(...args) { return uiFeature.handleToolbarImageInsert.apply(this, args); }
171
- isMarkdownBlockMenuOpen(...args) { return uiFeature.isMarkdownBlockMenuOpen.apply(this, args); }
172
- openMarkdownBlockMenu(...args) { return uiFeature.openMarkdownBlockMenu.apply(this, args); }
173
- positionMarkdownBlockMenu(...args) { return uiFeature.positionMarkdownBlockMenu.apply(this, args); }
174
- renderMarkdownBlockMenuPopover(...args) { return uiFeature.renderMarkdownBlockMenuPopover.apply(this, args); }
175
- pickImageFile(...args) { return uiFeature.pickImageFile.apply(this, args); }
176
- renderMarkdownToolbar(...args) { return uiFeature.renderMarkdownToolbar.apply(this, args); }
177
- runEditorCommand(...args) { return uiFeature.runEditorCommand.apply(this, args); }
178
- setActiveMarkdownBlockAction(...args) { return uiFeature.setActiveMarkdownBlockAction.apply(this, args); }
179
- syncMarkdownToolbarBlockUi(...args) { return uiFeature.syncMarkdownToolbarBlockUi.apply(this, args); }
180
- toggleMarkdownBlockMenu(...args) { return uiFeature.toggleMarkdownBlockMenu.apply(this, args); }
181
- handleTabActivated(...args) { return uiFeature.handleTabActivated.apply(this, args); }
182
- handleTabBlocked(...args) { return uiFeature.handleTabBlocked.apply(this, args); }
183
- handleTabTakeover(...args) { return uiFeature.handleTabTakeover.apply(this, args); }
184
- hideTabLockOverlay(...args) { return uiFeature.hideTabLockOverlay.apply(this, args); }
185
- showTabLockOverlay(...args) { return uiFeature.showTabLockOverlay.apply(this, args); }
186
- isExcalidrawFile(...args) { return workspaceFeature.isExcalidrawFile.apply(this, args); }
187
- isBaseFile(...args) { return workspaceFeature.isBaseFile.apply(this, args); }
188
- isDrawioFile(...args) { return workspaceFeature.isDrawioFile.apply(this, args); }
189
- isImageFile(...args) { return workspaceFeature.isImageFile.apply(this, args); }
190
- isMermaidFile(...args) { return workspaceFeature.isMermaidFile.apply(this, args); }
191
- isPlantUmlFile(...args) { return workspaceFeature.isPlantUmlFile.apply(this, args); }
192
- createDiagramPreviewDocument(...args) { return workspaceFeature.createDiagramPreviewDocument.apply(this, args); }
193
- getPreviewSource(...args) { return workspaceFeature.getPreviewSource.apply(this, args); }
194
- getStaticPreviewDocument(...args) { return workspaceFeature.getStaticPreviewDocument.apply(this, args); }
195
- setStaticPreviewDocument(...args) { return workspaceFeature.setStaticPreviewDocument.apply(this, args); }
196
- clearStaticPreviewDocument(...args) { return workspaceFeature.clearStaticPreviewDocument.apply(this, args); }
197
- supportsFileHistory(...args) { return workspaceFeature.supportsFileHistory.apply(this, args); }
198
- getDisplayName(...args) { return workspaceFeature.getDisplayName.apply(this, args); }
199
- resetPreviewMode(...args) { return workspaceFeature.resetPreviewMode.apply(this, args); }
200
- syncFileChrome(...args) { return workspaceFeature.syncFileChrome.apply(this, args); }
201
- handleLayoutViewRequest(...args) { return workspaceFeature.handleLayoutViewRequest.apply(this, args); }
202
- renderExcalidrawFilePreview(...args) { return workspaceFeature.renderExcalidrawFilePreview.apply(this, args); }
203
- renderDrawioFilePreview(...args) { return workspaceFeature.renderDrawioFilePreview.apply(this, args); }
204
- renderImageFilePreview(...args) { return workspaceFeature.renderImageFilePreview.apply(this, args); }
205
- renderBaseFilePreview(...args) { return workspaceFeature.renderBaseFilePreview.apply(this, args); }
206
- renderTextFilePreview(...args) { return workspaceFeature.renderTextFilePreview.apply(this, args); }
207
- createResizeHandler(...args) { return workspaceFeature.createResizeHandler.apply(this, args); }
208
- initializePreviewLayoutObserver(...args) { return workspaceFeature.initializePreviewLayoutObserver.apply(this, args); }
209
- schedulePreviewLayoutSync(...args) { return workspaceFeature.schedulePreviewLayoutSync.apply(this, args); }
210
- handleEditorScrollActivityChange(...args) { return workspaceFeature.handleEditorScrollActivityChange.apply(this, args); }
211
- handleHashChange(...args) { return workspaceFeature.handleHashChange.apply(this, args); }
212
- showEmptyState(...args) { return workspaceFeature.showEmptyState.apply(this, args); }
213
- showDiffState(...args) { return workspaceFeature.showDiffState.apply(this, args); }
214
- openFile(...args) { return workspaceFeature.openFile.apply(this, args); }
215
- cleanupSession(...args) { return workspaceFeature.cleanupSession.apply(this, args); }
216
- handleWikiLinkClick(...args) { return workspaceFeature.handleWikiLinkClick.apply(this, args); }
217
- normalizeNewWikiFilePath(...args) { return workspaceFeature.normalizeNewWikiFilePath.apply(this, args); }
218
- createAndOpenFile(...args) { return workspaceFeature.createAndOpenFile.apply(this, args); }
219
- handleFileSelection(...args) { return workspaceFeature.handleFileSelection.apply(this, args); }
36
+ initialize(...args) { return this.features.initialize(...args); }
37
+ handleHashChange(...args) { return this.features.handleHashChange(...args); }
38
+ handleDocumentKeydown(...args) { return this.features.handleDocumentKeydown(...args); }
39
+ handleDocumentPointerDown(...args) { return this.features.handleDocumentPointerDown(...args); }
40
+ handleFileSelection(...args) { return this.features.handleFileSelection(...args); }
41
+ navigatePreviewHeading(...args) { return this.features.navigatePreviewHeading(...args); }
220
42
 
221
43
  constructor() {
222
44
  renderAppShell(document);
223
45
  this.elements = bindAppShellElements(document);
46
+ this.features = createAppShellFeatureSurface(this);
224
47
  this.runtimeConfig = getRuntimeConfig();
225
48
  this.stateStore = new WorkspaceStateStore();
226
49
  this.navigation = new BrowserNavigationPort();
@@ -252,31 +75,33 @@ export class CollabMdAppShell {
252
75
  this.quickSwitcher = null;
253
76
  this.quickSwitcherModulePromise = null;
254
77
  this.fileExplorerReadyPromise = Promise.resolve();
78
+ this._gitControllerPrewarmHandle = null;
255
79
  this.mobileBreakpointQuery = window.matchMedia('(max-width: 768px)');
256
80
  this.pendingWorkspaceRequestIds = new Set();
257
81
  this._fileOpenPerf = null;
258
82
  this.versionMonitor = new AppVersionMonitor({
259
83
  currentBuildId: this.runtimeConfig.build?.id,
260
- onUpdateAvailable: (payload) => this.promptForVersionReload(payload),
84
+ onUpdateAvailable: (payload) => this.features.promptForVersionReload(payload),
261
85
  runtimeConfig: this.runtimeConfig,
262
86
  });
263
87
 
264
88
  this.lobby = new LobbyPresence({
265
- preferredUserName: this.getStoredUserName(),
266
- onChange: (users) => this.updateGlobalUsers(users),
267
- onChatChange: (messages, meta) => this.updateChatMessages(messages, meta),
89
+ preferredUserName: this.features.getStoredUserName(),
90
+ onChange: (users) => this.features.updateGlobalUsers(users),
91
+ onChatChange: (messages, meta) => this.features.updateChatMessages(messages, meta),
268
92
  });
269
93
  this.workspaceSync = new WorkspaceSyncClient({
270
94
  onTreeChange: (tree, metadata = {}) => {
271
95
  const wasReady = this.fileExplorerReady;
272
96
  this.fileExplorer.setTree(tree, metadata);
97
+ this.features.handleCommentOverviewWorkspaceTreeChange?.();
273
98
  this.fileExplorerReady = true;
274
99
  if (!wasReady && this.isTabActive) {
275
- void this.handleHashChange();
100
+ void this.features.handleHashChange();
276
101
  }
277
102
  },
278
103
  onWorkspaceEvent: (event) => {
279
- void this.handleIncomingWorkspaceEvent(event);
104
+ void this.features.handleIncomingWorkspaceEvent(event);
280
105
  },
281
106
  });
282
107
 
@@ -285,27 +110,20 @@ export class CollabMdAppShell {
285
110
  this.fileExplorer = new FileExplorerController({
286
111
  mobileBreakpointQuery: this.mobileBreakpointQuery,
287
112
  onFileDelete: () => this.navigation.navigateToFile(null),
288
- onFileSelect: (filePath) => this.handleFileSelection(filePath, { closeSidebarOnMobile: true }),
113
+ onFileSelect: (filePath) => this.features.handleFileSelection(filePath, { closeSidebarOnMobile: true }),
289
114
  pendingWorkspaceRequestIds: this.pendingWorkspaceRequestIds,
290
115
  toastController: this.toastController,
291
116
  });
292
- this.gitPanel = new GitPanelController({
293
- enabled: this.runtimeConfig.gitEnabled !== false,
294
- gitApiClient: this.gitApiClient,
295
- onCommitStaged: () => this.openGitCommitDialog(),
296
- onOpenPullBackup: (filePath) => filePath && this.navigation.navigateToFile(filePath),
297
- onPullBranch: () => this.pullGitBranch(),
298
- onPushBranch: () => this.pushGitBranch(),
299
- onRepoChange: (isGitRepo, status) => this.handleGitRepoChange(isGitRepo, status),
300
- onResetFile: (filePath, { scope }) => this.openGitResetDialog(filePath, { scope }),
301
- onSelectCommit: (hash, { path }) => this.handleGitCommitSelection(hash, { closeSidebarOnMobile: true, path }),
302
- onSelectDiff: (filePath, { scope }) => this.handleGitDiffSelection(filePath, { closeSidebarOnMobile: true, scope }),
303
- onStageFile: (filePath, { scope }) => this.stageGitFile(filePath, { scope }),
304
- onUnstageFile: (filePath, { scope }) => this.unstageGitFile(filePath, { scope }),
305
- onViewAllDiff: () => this.handleGitDiffSelection(null, { closeSidebarOnMobile: true, scope: 'all' }),
306
- searchInput: this.elements.gitSearchInput,
117
+ this.commentsOverview = new CommentOverviewController({
118
+ onOverviewChange: (_overview, { threadCounts }) => {
119
+ this.fileExplorer.setThreadCounts(threadCounts);
120
+ },
121
+ onThreadSelect: (payload) => this.features.openCommentOverviewThread(payload),
122
+ panelElement: this.elements.commentOverviewPanel,
307
123
  toastController: this.toastController,
124
+ vaultApiClient: this.vaultApiClient,
308
125
  });
126
+ this.gitPanel = this.features.createLazyGitPanelController();
309
127
  this.outlineController = new OutlineController({
310
128
  mobileBreakpointQuery: this.mobileBreakpointQuery,
311
129
  onNavigateToHeading: ({ sourceLine }) => {
@@ -318,24 +136,12 @@ export class CollabMdAppShell {
318
136
  this.videoEmbed = new VideoEmbedController({
319
137
  previewElement: this.elements.previewContent,
320
138
  });
321
- this.basesPreview = new BasesPreviewController({
322
- getActiveFilePath: () => this.currentFilePath,
323
- getSession: () => this.session,
324
- onOpenFile: (filePath) => filePath && this.navigation.navigateToFile(filePath),
325
- previewElement: this.elements.previewContent,
326
- replaceBaseSource: ({ path, source }) => {
327
- if (path && path === this.currentFilePath) {
328
- this.session?.replaceText?.(source);
329
- }
330
- },
331
- toastController: this.toastController,
332
- vaultApiClient: this.vaultApiClient,
333
- });
139
+ this.basesPreview = this.features.createLazyBasesPreviewController();
334
140
  this.imageLightbox = new ImageLightboxController({
335
141
  previewElement: this.elements.previewContent,
336
142
  });
337
143
  this.previewRenderer = new PreviewRenderer({
338
- getContent: () => this.getPreviewSource(),
144
+ getContent: () => this.features.getPreviewSource(),
339
145
  getFileList: () => this.fileExplorer.flatDocumentFiles,
340
146
  getWikiLinkAutoCreate: () => this.runtimeConfig.wikiLinkAutoCreate !== false,
341
147
  loadFileSource: async (filePath) => {
@@ -356,10 +162,10 @@ export class CollabMdAppShell {
356
162
  this.excalidrawEmbed.reconcileEmbeds(this.elements.previewContent, { isLargeDocument: stats.isLargeDocument });
357
163
  this.excalidrawEmbed.syncLayout();
358
164
  this.scrollSyncController.setLargeDocumentMode(stats.isLargeDocument);
359
- this.syncPreviewHeadingLinkButtons();
360
- this.applyPendingPreviewRouteAnchor({ behavior: 'auto', clearMissing: true });
361
- this.schedulePreviewLayoutSync({ delayMs: 0 });
362
- this.refreshCommentUiLayout();
165
+ this.features.syncPreviewHeadingLinkButtons();
166
+ this.features.applyPendingPreviewRouteAnchor({ behavior: 'auto', clearMissing: true });
167
+ this.features.schedulePreviewLayoutSync({ delayMs: 0 });
168
+ this.features.refreshCommentUiLayout();
363
169
  },
364
170
  onBeforeRenderCommit: () => {
365
171
  this.videoEmbed.detachForCommit();
@@ -368,17 +174,17 @@ export class CollabMdAppShell {
368
174
  },
369
175
  onPreviewLayoutChange: () => {
370
176
  this.scrollSyncController.invalidatePreviewBlocks();
371
- this.applyPendingPreviewRouteAnchor({ behavior: 'auto', clearMissing: false });
372
- this.schedulePreviewLayoutSync({ delayMs: 0 });
373
- this.refreshCommentUiLayout();
177
+ this.features.applyPendingPreviewRouteAnchor({ behavior: 'auto', clearMissing: false });
178
+ this.features.schedulePreviewLayoutSync({ delayMs: 0 });
179
+ this.features.refreshCommentUiLayout();
374
180
  },
375
181
  onRenderComplete: () => {
376
182
  this.videoEmbed.syncLayout();
377
183
  this.drawioEmbed.syncLayout();
378
184
  this.excalidrawEmbed.syncLayout();
379
- this.applyPendingPreviewRouteAnchor({ allowExpired: true, behavior: 'auto', clearMissing: true });
380
- this.schedulePreviewLayoutSync({ delayMs: 0 });
381
- this.refreshCommentUiLayout();
185
+ this.features.applyPendingPreviewRouteAnchor({ allowExpired: true, behavior: 'auto', clearMissing: true });
186
+ this.features.schedulePreviewLayoutSync({ delayMs: 0 });
187
+ this.features.refreshCommentUiLayout();
382
188
  },
383
189
  outlineController: this.outlineController,
384
190
  plantUmlRenderClient: this.plantUmlApiClient,
@@ -386,15 +192,15 @@ export class CollabMdAppShell {
386
192
  previewElement: this.elements.previewContent,
387
193
  toastController: this.toastController,
388
194
  });
389
- this.themeController = new ThemeController({ onChange: (theme) => this.handleThemeChange(theme) });
195
+ this.themeController = new ThemeController({ onChange: (theme) => this.features.handleThemeChange(theme) });
390
196
  this.layoutController = new LayoutController({
391
197
  mobileBreakpointQuery: this.mobileBreakpointQuery,
392
198
  onMeasureEditor: () => this.session?.requestMeasure(),
393
- onViewRequest: (view) => this.handleLayoutViewRequest(view),
199
+ onViewRequest: (view) => this.features.handleLayoutViewRequest(view),
394
200
  });
395
201
  this.scrollSyncController = new ScrollSyncController({
396
202
  getEditorLineNumber: () => this.session?.getTopVisibleLineNumber(0.35) ?? 1,
397
- onEditorScrollActivityChange: (isActive) => this.handleEditorScrollActivityChange(isActive),
203
+ onEditorScrollActivityChange: (isActive) => this.features.handleEditorScrollActivityChange(isActive),
398
204
  previewContainer: this.elements.previewContainer,
399
205
  previewElement: this.elements.previewContent,
400
206
  scrollEditorToLine: (lineNumber, viewportRatio) => this.session?.scrollToLine(lineNumber, viewportRatio),
@@ -403,32 +209,11 @@ export class CollabMdAppShell {
403
209
  headerPanelElement: this.elements.backlinksHeaderPanel,
404
210
  inlinePanelElement: this.elements.backlinksInlinePanel,
405
211
  loadBacklinks: (filePath, options = {}) => this.backlinksApiClient.readBacklinks(filePath, options),
406
- onFileSelect: (filePath) => this.handleFileSelection(filePath, { closeSidebarOnMobile: true }),
212
+ onFileSelect: (filePath) => this.features.handleFileSelection(filePath, { closeSidebarOnMobile: true }),
407
213
  panelElement: this.elements.backlinksPanel,
408
214
  });
409
- this.excalidrawEmbed = new ExcalidrawEmbedController({
410
- getLocalUser: () => this.lobby.getLocalUser(),
411
- getTheme: () => this.themeController.getTheme(),
412
- onOpenFile: (filePath) => filePath && this.navigation.navigateToFile(filePath),
413
- onToggleQuickSwitcher: () => {
414
- void this.toggleQuickSwitcher();
415
- },
416
- previewContainer: this.elements.previewContainer,
417
- previewElement: this.elements.previewContent,
418
- toastController: this.toastController,
419
- });
420
- this.drawioEmbed = new DrawioEmbedController({
421
- getLocalUser: () => this.lobby.getLocalUser(),
422
- getTheme: () => this.themeController.getTheme(),
423
- onOpenFile: (filePath) => filePath && this.navigation.navigateToFile(filePath),
424
- onOpenTextFile: (filePath) => filePath && this.navigation.navigateToFile(filePath, { drawioMode: 'text' }),
425
- onToggleQuickSwitcher: () => {
426
- void this.toggleQuickSwitcher();
427
- },
428
- previewContainer: this.elements.previewContainer,
429
- previewElement: this.elements.previewContent,
430
- toastController: this.toastController,
431
- });
215
+ this.excalidrawEmbed = this.features.createLazyExcalidrawEmbedController();
216
+ this.drawioEmbed = this.features.createLazyDrawioEmbedController();
432
217
  this.commentUi = new CommentUiController({
433
218
  commentSelectionButton: this.elements.commentSelectionButton,
434
219
  commentsDrawer: this.elements.commentsDrawer,
@@ -439,14 +224,14 @@ export class CollabMdAppShell {
439
224
  onWillOpenDrawer: () => this.outlineController.close(),
440
225
  previewContainer: this.elements.previewContainer,
441
226
  previewElement: this.elements.previewContent,
442
- onCreateThread: ({ anchor, body }) => this.session?.createCommentThread({ anchor, body }),
227
+ onCreateThread: ({ anchor, body }) => this.features.createCommentThread({ anchor, body }),
443
228
  onNavigateToLine: (lineNumber) => {
444
229
  this.scrollSyncController.suspendSync(250);
445
230
  this.session?.scrollToLine(lineNumber, 0.2);
446
231
  },
447
- onReplyToThread: (threadId, body) => this.session?.replyToCommentThread(threadId, body),
232
+ onReplyToThread: (threadId, body) => this.features.replyToCommentThread(threadId, body),
448
233
  onToggleReaction: (threadId, messageId, emoji) => this.session?.toggleCommentReaction(threadId, messageId, emoji),
449
- onResolveThread: (threadId) => this.session?.deleteCommentThread(threadId),
234
+ onResolveThread: (threadId) => this.features.resolveCommentThread(threadId),
450
235
  });
451
236
  this.workspacePreviewController = new WorkspacePreviewController({
452
237
  backlinksPanel: this.backlinksPanel,
@@ -454,18 +239,18 @@ export class CollabMdAppShell {
454
239
  drawioEmbed: this.drawioEmbed,
455
240
  elements: this.elements,
456
241
  excalidrawEmbed: this.excalidrawEmbed,
457
- getDisplayName: (filePath) => this.getDisplayName(filePath),
242
+ getDisplayName: (filePath) => this.features.getDisplayName(filePath),
458
243
  getSession: () => this.session,
459
- isBaseFile: (filePath) => this.isBaseFile(filePath),
460
- isDrawioFile: (filePath) => this.isDrawioFile(filePath),
461
- isExcalidrawFile: (filePath) => this.isExcalidrawFile(filePath),
462
- isImageFile: (filePath) => this.isImageFile(filePath),
463
- isMermaidFile: (filePath) => this.isMermaidFile(filePath),
464
- isPlantUmlFile: (filePath) => this.isPlantUmlFile(filePath),
244
+ isBaseFile: (filePath) => this.features.isBaseFile(filePath),
245
+ isDrawioFile: (filePath) => this.features.isDrawioFile(filePath),
246
+ isExcalidrawFile: (filePath) => this.features.isExcalidrawFile(filePath),
247
+ isImageFile: (filePath) => this.features.isImageFile(filePath),
248
+ isMermaidFile: (filePath) => this.features.isMermaidFile(filePath),
249
+ isPlantUmlFile: (filePath) => this.features.isPlantUmlFile(filePath),
465
250
  layoutController: this.layoutController,
466
251
  outlineController: this.outlineController,
467
252
  previewRenderer: this.previewRenderer,
468
- schedulePreviewLayoutSync: (options) => this.schedulePreviewLayoutSync(options),
253
+ schedulePreviewLayoutSync: (options) => this.features.schedulePreviewLayoutSync(options),
469
254
  scrollSyncController: this.scrollSyncController,
470
255
  videoEmbed: this.videoEmbed,
471
256
  });
@@ -477,42 +262,12 @@ export class CollabMdAppShell {
477
262
  vaultApiClient: this.vaultApiClient,
478
263
  wikiLinkAutoCreate: this.runtimeConfig.wikiLinkAutoCreate !== false,
479
264
  });
480
- this.gitDiffView = new GitDiffViewController({
481
- gitApiClient: this.gitApiClient,
482
- onBackToHistory: ({ historyFilePath } = {}) => {
483
- if (historyFilePath) {
484
- this.navigation.navigateToGitFileHistory({ filePath: historyFilePath });
485
- return;
486
- }
487
- this.navigation.navigateToGitHistory();
488
- },
489
- onCommitStaged: () => this.openGitCommitDialog(),
490
- onOpenFile: (filePath) => filePath && this.navigation.navigateToFile(filePath),
491
- onStageFile: (filePath, { scope }) => this.stageGitFile(filePath, { scope }),
492
- onUnstageFile: (filePath, { scope }) => this.unstageGitFile(filePath, { scope }),
493
- toastController: this.toastController,
494
- });
495
- this.fileHistoryView = new FileHistoryViewController({
496
- diffRenderer: this.gitDiffView,
497
- gitApiClient: this.gitApiClient,
498
- onOpenCommitDiff: (hash, { historyFilePath, path }) => this.handleGitCommitSelection(hash, {
499
- closeSidebarOnMobile: false,
500
- historyFilePath,
501
- path,
502
- }),
503
- onOpenFile: (filePath) => filePath && this.navigation.navigateToFile(filePath),
504
- onOpenPreview: ({ hash, path, currentFilePath }) => this.handleGitFilePreviewSelection({
505
- hash,
506
- path,
507
- currentFilePath,
508
- }),
509
- onOpenWorkspaceDiff: (filePath) => this.handleGitDiffSelection(filePath, { closeSidebarOnMobile: false, scope: 'all' }),
510
- toastController: this.toastController,
511
- });
265
+ this.gitDiffView = this.features.createLazyGitDiffViewController();
266
+ this.fileHistoryView = this.features.createLazyFileHistoryViewController();
512
267
  this.tabActivityLock = new TabActivityLock({
513
- onActivated: ({ takeover }) => this.handleTabActivated({ takeover }),
514
- onBlocked: () => this.handleTabBlocked({ reason: 'active-elsewhere' }),
515
- onStolen: () => this.handleTabBlocked({ reason: 'taken-over' }),
268
+ onActivated: ({ takeover }) => this.features.handleTabActivated({ takeover }),
269
+ onBlocked: () => this.features.handleTabBlocked({ reason: 'active-elsewhere' }),
270
+ onStolen: () => this.features.handleTabBlocked({ reason: 'taken-over' }),
516
271
  });
517
272
  this.workspaceCoordinator = new WorkspaceCoordinator({
518
273
  attachEditorScroller: (scroller) => this.scrollSyncController.attachEditorScroller(scroller),
@@ -539,18 +294,18 @@ export class CollabMdAppShell {
539
294
  onSelectionChange: options.onSelectionChange,
540
295
  preferredUserName: options.preferredUserName,
541
296
  }),
542
- getDisplayName: (filePath) => this.getDisplayName(filePath),
297
+ getDisplayName: (filePath) => this.features.getDisplayName(filePath),
543
298
  getFileList: () => this.fileExplorer.flatDocumentFiles,
544
- getLineWrappingEnabled: () => this.getStoredLineWrapping(),
299
+ getLineWrappingEnabled: () => this.features.getStoredLineWrapping(),
545
300
  getLocalUser: () => this.lobby.getLocalUser(),
546
- getStoredUserName: () => this.getStoredUserName(),
301
+ getStoredUserName: () => this.features.getStoredUserName(),
547
302
  getTheme: () => this.themeController.getTheme(),
548
- isBaseFile: (filePath) => this.isBaseFile(filePath),
549
- isDrawioFile: (filePath) => this.isDrawioFile(filePath),
550
- isExcalidrawFile: (filePath) => this.isExcalidrawFile(filePath),
551
- isImageFile: (filePath) => this.isImageFile(filePath),
552
- isMermaidFile: (filePath) => this.isMermaidFile(filePath),
553
- isPlantUmlFile: (filePath) => this.isPlantUmlFile(filePath),
303
+ isBaseFile: (filePath) => this.features.isBaseFile(filePath),
304
+ isDrawioFile: (filePath) => this.features.isDrawioFile(filePath),
305
+ isExcalidrawFile: (filePath) => this.features.isExcalidrawFile(filePath),
306
+ isImageFile: (filePath) => this.features.isImageFile(filePath),
307
+ isMermaidFile: (filePath) => this.features.isMermaidFile(filePath),
308
+ isPlantUmlFile: (filePath) => this.features.isPlantUmlFile(filePath),
554
309
  isTabActive: () => this.isTabActive,
555
310
  loadBootstrapContent: async (filePath) => {
556
311
  const response = await this.vaultApiClient.readFile(filePath);
@@ -562,17 +317,17 @@ export class CollabMdAppShell {
562
317
  this.session = null;
563
318
  this.commentUi.attachSession(null);
564
319
  this.layoutController.reset();
565
- this.resetPreviewMode();
320
+ this.features.resetPreviewMode();
566
321
  this.elements.emptyState?.classList.add('hidden');
567
322
  this.elements.editorPage?.classList.remove('hidden');
568
323
  this.elements.diffPage?.classList.add('hidden');
569
- this.clearInitialFileBootstrap();
324
+ this.features.clearInitialFileBootstrap();
570
325
  },
571
- onConnectionChange: (state) => this.handleConnectionChange(state),
326
+ onConnectionChange: (state) => this.features.handleConnectionChange(state),
572
327
  onContentChange: ({ isBase, isMermaid, isPlantUml }) => {
573
- this.handleCommentEditorContentChange();
328
+ this.features.handleCommentEditorContentChange();
574
329
  if (isBase) {
575
- void this.renderBaseFilePreview(this.currentFilePath, {
330
+ void this.features.renderBaseFilePreview(this.currentFilePath, {
576
331
  source: this.session?.getText?.() ?? '',
577
332
  });
578
333
  return;
@@ -580,59 +335,59 @@ export class CollabMdAppShell {
580
335
 
581
336
  this.previewRenderer.queueRender();
582
337
  if (!isMermaid && !isPlantUml) {
583
- this.scheduleBacklinkRefresh();
338
+ this.features.scheduleBacklinkRefresh();
584
339
  }
585
340
  },
586
- onCommentsChange: (threads) => this.handleCommentThreadsChange(threads),
587
- onFileAwarenessChange: (users) => this.updateFileAwareness(users),
341
+ onCommentsChange: (threads) => this.features.handleCommentThreadsChange(threads),
342
+ onFileAwarenessChange: (users) => this.features.updateFileAwareness(users),
588
343
  onFileOpenError: () => {
589
- this.showEditorLoadError();
590
- this.syncWrapToggle();
344
+ this.features.showEditorLoadError();
345
+ this.features.syncWrapToggle();
591
346
  this.toastController.show('Failed to initialize editor');
592
347
  },
593
348
  onFileOpenReady: () => {
594
- this.hideEditorLoading();
349
+ this.features.hideEditorLoading();
595
350
  },
596
- onSelectionChange: (anchor) => this.handleCommentSelectionChange(anchor),
597
- onImagePaste: (file) => this.handleEditorImageInsert(file),
351
+ onSelectionChange: (anchor) => this.features.handleCommentSelectionChange(anchor),
352
+ onImagePaste: (file) => this.features.handleEditorImageInsert(file),
598
353
  onFileOpenMetric: (name, payload) => this.recordFileOpenMetric(name, payload),
599
354
  onSessionAssigned: (session) => {
600
355
  this.session = session;
601
356
  this.commentUi.attachSession(session);
602
357
  },
603
- onRenderDrawioPreview: (filePath) => this.renderDrawioFilePreview(filePath),
604
- onRenderBasePreview: (filePath) => this.renderBaseFilePreview(filePath),
605
- onRenderExcalidrawPreview: (filePath) => this.renderExcalidrawFilePreview(filePath),
606
- onRenderImagePreview: (filePath) => this.renderImageFilePreview(filePath),
607
- onSyncWrapToggle: () => this.syncWrapToggle(),
358
+ onRenderDrawioPreview: (filePath) => this.features.renderDrawioFilePreview(filePath),
359
+ onRenderBasePreview: (filePath) => this.features.renderBaseFilePreview(filePath),
360
+ onRenderExcalidrawPreview: (filePath) => this.features.renderExcalidrawFilePreview(filePath),
361
+ onRenderImagePreview: (filePath) => this.features.renderImageFilePreview(filePath),
362
+ onSyncWrapToggle: () => this.features.syncWrapToggle(),
608
363
  onUpdateActiveFile: (filePath) => this.fileExplorer.setActiveFile(filePath),
609
364
  onUpdateCurrentFile: (filePath) => {
610
365
  this.currentFilePath = filePath;
611
366
  },
612
367
  onUpdateLobbyCurrentFile: (filePath) => this.lobby.setCurrentFile(filePath),
613
368
  onUpdateVisibleChrome: (filePath, { displayName }) => {
614
- this.syncFileChrome(filePath, {
369
+ this.features.syncFileChrome(filePath, {
615
370
  drawioMode: this.currentDrawioMode,
616
- preferPreviewForBase: this.isBaseFile(filePath),
371
+ preferPreviewForBase: this.features.isBaseFile(filePath),
617
372
  });
618
- this.syncCommentChrome(filePath);
619
- this.syncFileHistoryButton({ filePath, mode: 'editor' });
373
+ this.features.syncCommentChrome(filePath);
374
+ this.features.syncFileHistoryButton({ filePath, mode: 'editor' });
620
375
  if (this.elements.activeFileName) {
621
376
  this.elements.activeFileName.textContent = displayName;
622
377
  }
623
378
  },
624
- onViewModeReset: () => this.resetPreviewMode(),
625
- renderPresence: () => this.renderPresence(),
379
+ onViewModeReset: () => this.features.resetPreviewMode(),
380
+ renderPresence: () => this.features.renderPresence(),
626
381
  scrollContainerForSession: (session) => session.getScrollContainer(),
627
382
  shouldUseDrawioPreview: () => Boolean(this.runtimeConfig.drawioBaseUrl),
628
- showEditorLoading: () => this.showEditorLoading(),
383
+ showEditorLoading: () => this.features.showEditorLoading(),
629
384
  stateStore: this.stateStore,
630
385
  });
631
386
  this.workspaceRouteController = new WorkspaceRouteController({
632
387
  backlinksPanel: this.backlinksPanel,
633
- clearInitialFileBootstrap: () => this.clearInitialFileBootstrap(),
634
- clearStaticPreviewDocument: () => this.clearStaticPreviewDocument(),
635
- closeSidebarOnMobile: () => this.closeSidebarOnMobile(),
388
+ clearInitialFileBootstrap: () => this.features.clearInitialFileBootstrap(),
389
+ clearStaticPreviewDocument: () => this.features.clearStaticPreviewDocument(),
390
+ closeSidebarOnMobile: () => this.features.closeSidebarOnMobile(),
636
391
  drawioEmbed: this.drawioEmbed,
637
392
  elements: this.elements,
638
393
  excalidrawEmbed: this.excalidrawEmbed,
@@ -647,17 +402,17 @@ export class CollabMdAppShell {
647
402
  lobby: this.lobby,
648
403
  navigation: this.navigation,
649
404
  previewRenderer: this.previewRenderer,
650
- requestPreviewRouteAnchor: (anchorId, filePath) => this.requestPreviewRouteAnchor(anchorId, filePath),
651
- renderAvatars: () => this.renderAvatars(),
652
- renderPresence: () => this.renderPresence(),
653
- resetPreviewMode: () => this.resetPreviewMode(),
405
+ requestPreviewRouteAnchor: (anchorId, filePath) => this.features.requestPreviewRouteAnchor(anchorId, filePath),
406
+ renderAvatars: () => this.features.renderAvatars(),
407
+ renderPresence: () => this.features.renderPresence(),
408
+ resetPreviewMode: () => this.features.resetPreviewMode(),
654
409
  scrollSyncController: this.scrollSyncController,
655
410
  setCurrentFilePath: (value) => {
656
411
  this.currentFilePath = value;
657
412
  if (!value) {
658
413
  this.commentUi.setCurrentFile(null, { supported: false });
659
- this.handleCommentThreadsChange([]);
660
- this.handleCommentSelectionChange(null);
414
+ this.features.handleCommentThreadsChange([]);
415
+ this.features.handleCommentSelectionChange(null);
661
416
  }
662
417
  },
663
418
  setSession: (value) => {
@@ -667,14 +422,14 @@ export class CollabMdAppShell {
667
422
  setSessionLoadToken: (value) => {
668
423
  this.sessionLoadToken = value;
669
424
  },
670
- setSidebarTab: (value) => this.setSidebarTab(value),
671
- setSidebarVisibility: (showSidebar) => this.setSidebarVisibility(showSidebar),
672
- showGitCommit: (route) => this.showGitCommit(route),
673
- showGitDiff: (route) => this.showGitDiff(route),
674
- showGitFileHistory: (route) => this.showGitFileHistory(route),
675
- showGitFilePreview: (route) => this.showGitFilePreview(route),
676
- showGitHistory: () => this.showGitHistory(),
677
- syncMainChrome: (payload) => this.syncMainChrome(payload),
425
+ setSidebarTab: (value) => this.features.setSidebarTab(value),
426
+ setSidebarVisibility: (showSidebar) => this.features.setSidebarVisibility(showSidebar),
427
+ showGitCommit: (route) => this.features.showGitCommit(route),
428
+ showGitDiff: (route) => this.features.showGitDiff(route),
429
+ showGitFileHistory: (route) => this.features.showGitFileHistory(route),
430
+ showGitFilePreview: (route) => this.features.showGitFilePreview(route),
431
+ showGitHistory: () => this.features.showGitHistory(),
432
+ syncMainChrome: (payload) => this.features.syncMainChrome(payload),
678
433
  videoEmbed: this.videoEmbed,
679
434
  workspaceCoordinator: this.workspaceCoordinator,
680
435
  });