collabmd 0.1.25 → 0.1.27

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 (386) hide show
  1. package/README.md +27 -6
  2. package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-BHWNpLuY.js → CodeMirrorEditor-UCMRAMCV-C5yVpm45.js} +1 -1
  3. package/dist/client/assets/{_basePickBy-CJWegqog.js → _basePickBy-Dr0N-hVE.js} +1 -1
  4. package/dist/client/assets/{_baseUniq-CFKN1k1n.js → _baseUniq-BddJc3B1.js} +1 -1
  5. package/dist/client/assets/{ar-SA-NXDWD63E-DND5MLpM.js → ar-SA-NXDWD63E-C3GLfrYV.js} +1 -1
  6. package/dist/client/assets/{arc-D1SV2GW0.js → arc-fx_D7wYg.js} +1 -1
  7. package/dist/client/assets/architecture-PBZL5I3N-C1Yv7agI.js +1 -0
  8. package/dist/client/assets/{architectureDiagram-2XIMDMQ5-DXpDe6lq.js → architectureDiagram-2XIMDMQ5-T__yxKk2.js} +1 -1
  9. package/dist/client/assets/{az-AZ-MXSORGZV-ILYw2sYr.js → az-AZ-MXSORGZV-BJ2t-y-C.js} +1 -1
  10. package/dist/client/assets/{bg-BG-O6MV2KSF-DmfoZHM8.js → bg-BG-O6MV2KSF-Cd3kEZI-.js} +1 -1
  11. package/dist/client/assets/{blockDiagram-WCTKOSBZ-DlJn0Rs1.js → blockDiagram-WCTKOSBZ-BivLpsk_.js} +1 -1
  12. package/dist/client/assets/{bn-IN-MMW2ORAC-CmlBLY7g.js → bn-BD-T2VJNT7N-BFCx9nbZ.js} +1 -1
  13. package/dist/client/assets/{bn-BD-T2VJNT7N-uYQx1Wph.js → bn-IN-MMW2ORAC-Dn9W9dUT.js} +1 -1
  14. package/dist/client/assets/{c4Diagram-IC4MRINW-C6S9MOEW.js → c4Diagram-IC4MRINW-nVzPTZmV.js} +1 -1
  15. package/dist/client/assets/{ca-ES-MKBCGNOG-DWiYvMvF.js → ca-ES-MKBCGNOG-D_BNlrmg.js} +1 -1
  16. package/dist/client/assets/channel-DBZin7O0.js +1 -0
  17. package/dist/client/assets/{chunk-27N2SPOM-RxZ2_zJJ.js → chunk-27N2SPOM-CyIruM79.js} +4 -4
  18. package/dist/client/assets/{chunk-4BX2VUAB-LBTVcC6-.js → chunk-4BX2VUAB-n_yl-toC.js} +1 -1
  19. package/dist/client/assets/{chunk-55IACEB6-T5nuDI6U.js → chunk-55IACEB6-CJ9i_5Da.js} +1 -1
  20. package/dist/client/assets/{chunk-7E7YKBS2-CBNUsbS7.js → chunk-7E7YKBS2-CebEBDsj.js} +1 -1
  21. package/dist/client/assets/{chunk-7R4GIKGN-Dh9p1sbP.js → chunk-7R4GIKGN-BXNhzFkP.js} +2 -2
  22. package/dist/client/assets/{chunk-C72U2L5F-DLNOvzEI.js → chunk-C72U2L5F-Cck8MvGP.js} +1 -1
  23. package/dist/client/assets/{chunk-EGIJ26TM-BkBsHEWn.js → chunk-EGIJ26TM-BDQ7tRV-.js} +1 -1
  24. package/dist/client/assets/{chunk-FMBD7UC4-BoiIqhkb.js → chunk-FMBD7UC4-DAcjCJR-.js} +1 -1
  25. package/dist/client/assets/{chunk-GEFDOKGD-CIg-LRSp.js → chunk-GEFDOKGD-CYSNVsp-.js} +1 -1
  26. package/dist/client/assets/chunk-GLR3WWYH-FplqAopN.js +2 -0
  27. package/dist/client/assets/chunk-HHEYEP7N-Bv_FKHmu.js +1 -0
  28. package/dist/client/assets/{chunk-JSJVCQXG-C6-G93S3.js → chunk-JSJVCQXG-CLgStmEI.js} +1 -1
  29. package/dist/client/assets/{chunk-KX2RTZJC-CJlt0Rne.js → chunk-KX2RTZJC-B__vUl1o.js} +1 -1
  30. package/dist/client/assets/{chunk-KYZI473N-C-ObF5L3.js → chunk-KYZI473N-BpfobHkp.js} +1 -1
  31. package/dist/client/assets/{chunk-L3YUKLVL-BzkNNFii.js → chunk-L3YUKLVL-B7jdwbRL.js} +1 -1
  32. package/dist/client/assets/{chunk-MX3YWQON-bjcMtEei.js → chunk-MX3YWQON-DNcuP5dS.js} +1 -1
  33. package/dist/client/assets/{chunk-NQ4KR5QH-DY9oh8PD.js → chunk-NQ4KR5QH-oaq5iS2W.js} +1 -1
  34. package/dist/client/assets/{chunk-O4XLMI2P-CVfnFXq8.js → chunk-O4XLMI2P-NI4OcSZ6.js} +1 -1
  35. package/dist/client/assets/{chunk-OZEHJAEY-DyD-ywvu.js → chunk-OZEHJAEY-BevHLeQ0.js} +1 -1
  36. package/dist/client/assets/{chunk-PQ6SQG4A-BOJs3QbF.js → chunk-PQ6SQG4A-fQ_Oml5n.js} +1 -1
  37. package/dist/client/assets/{chunk-PU5JKC2W-1nkyDxBh.js → chunk-PU5JKC2W-Bp4H-mwZ.js} +1 -1
  38. package/dist/client/assets/chunk-QZHKN3VN-Blawx8vd.js +1 -0
  39. package/dist/client/assets/{chunk-R5LLSJPH-D9t4mFiL.js → chunk-R5LLSJPH-CZzZlfdI.js} +1 -1
  40. package/dist/client/assets/{chunk-SRAX5OIU-B-Zdxy2r.js → chunk-SRAX5OIU-CtUYAya6.js} +1 -1
  41. package/dist/client/assets/{chunk-WL4C6EOR-Bs95uEnp.js → chunk-WL4C6EOR-DnV9nMco.js} +1 -1
  42. package/dist/client/assets/{chunk-XIRO2GV7-CtwY16Jh.js → chunk-XIRO2GV7-BnkmoLpc.js} +1 -1
  43. package/dist/client/assets/{chunk-XPW4576I-CvxG514V.js → chunk-XPW4576I-DOk6pMat.js} +1 -1
  44. package/dist/client/assets/{chunk-XZSTWKYB-BNB3Mgw3.js → chunk-XZSTWKYB-DZzfqgVn.js} +1 -1
  45. package/dist/client/assets/{chunk-YBOYWFTD-MIDp82ug.js → chunk-YBOYWFTD-CrI5WFnC.js} +1 -1
  46. package/dist/client/assets/{chunk-Z5NKEFVG-CIMf1Se5.js → chunk-Z5NKEFVG-EGvolisB.js} +1 -1
  47. package/dist/client/assets/classDiagram-VBA2DB6C-CreQafQu.js +1 -0
  48. package/dist/client/assets/classDiagram-v2-RAHNMMFH-BIYHzbiv.js +1 -0
  49. package/dist/client/assets/clone-C3ajWNce.js +1 -0
  50. package/dist/client/assets/{cose-bilkent-S5V4N54A-BKEY00wk.js → cose-bilkent-S5V4N54A-PcMOD_rX.js} +1 -1
  51. package/dist/client/assets/{cs-CZ-V77HGUP7-sLBAF2Iw.js → cs-CZ-V77HGUP7-gpioT6mv.js} +1 -1
  52. package/dist/client/assets/{da-DK-I5RFNTM4-B__PLwca.js → da-DK-I5RFNTM4-CVv-_qu9.js} +1 -1
  53. package/dist/client/assets/{dagre-Cm2w_QpZ.js → dagre-BD9xHP_z.js} +1 -1
  54. package/dist/client/assets/{dagre-KLK3FWXG-BddfhbwG.js → dagre-KLK3FWXG-Ct1xwvCC.js} +1 -1
  55. package/dist/client/assets/{de-DE-DTI4WUSC-Ba3fBYEU.js → de-CH-WLRDEVBV-CL0gsFEp.js} +1 -1
  56. package/dist/client/assets/{de-CH-WLRDEVBV-D61DKw_9.js → de-DE-DTI4WUSC-BQO1SHIK.js} +1 -1
  57. package/dist/client/assets/{diagram-E7M64L7V-BoyJ8kpo.js → diagram-E7M64L7V-DkHzt94k.js} +1 -1
  58. package/dist/client/assets/{diagram-IFDJBPK2-DLWembLL.js → diagram-IFDJBPK2-D4g8afpU.js} +1 -1
  59. package/dist/client/assets/{diagram-P4PSJMXO-CPmPa0OC.js → diagram-P4PSJMXO-DVwwx6ED.js} +1 -1
  60. package/dist/client/assets/{dist-gCWIHDgw.js → dist-2HWwyMLA.js} +1 -1
  61. package/dist/client/assets/{dist-Dy9oGocr.js → dist-60g3bzYH.js} +1 -1
  62. package/dist/client/assets/{dist-Czv7DXcw.js → dist-B2pRSR5A.js} +1 -1
  63. package/dist/client/assets/{dist-BpEcA20b.js → dist-BQhICHxD.js} +1 -1
  64. package/dist/client/assets/dist-BS6yAJ9F.js +1 -0
  65. package/dist/client/assets/dist-BUnp4fHW.js +1 -0
  66. package/dist/client/assets/dist-BWEDjv8G.js +1 -0
  67. package/dist/client/assets/{dist-DnpxzfoU.js → dist-BZc5d15t.js} +1 -1
  68. package/dist/client/assets/{dist-D7S1mzwR.js → dist-BdtPRC1F.js} +1 -1
  69. package/dist/client/assets/{dist-CKdaLumK.js → dist-BiFbHWxc.js} +1 -1
  70. package/dist/client/assets/{dist-DFIisyRk.js → dist-BlhsMbAl.js} +1 -1
  71. package/dist/client/assets/{dist-DGbPPlZ8.js → dist-CLsz2DCg.js} +1 -1
  72. package/dist/client/assets/{dist-tyxqXzyB.js → dist-Ciw3BJA2.js} +1 -1
  73. package/dist/client/assets/{dist-BtROnx4-.js → dist-CvMToPSN.js} +1 -1
  74. package/dist/client/assets/{dist-D4ebIlQB.js → dist-D2m8lD1h.js} +1 -1
  75. package/dist/client/assets/{dist-BATDm5JF.js → dist-DAwSRqIJ.js} +1 -1
  76. package/dist/client/assets/{dist-StJm6K24.js → dist-DZD5y4h6.js} +1 -1
  77. package/dist/client/assets/{dist-Cje3pdZH.js → dist-DhzldYic.js} +1 -1
  78. package/dist/client/assets/{dist-BiNL3fhN.js → dist-DrNF924C.js} +1 -1
  79. package/dist/client/assets/{dist-CPzoLjNz.js → dist-DzArd_Bk.js} +1 -1
  80. package/dist/client/assets/{dist-Le-AVwIk.js → dist-EPRNBXHp.js} +1 -1
  81. package/dist/client/assets/{dist-BDDCA7hC.js → dist-Q6uG0wie.js} +1 -1
  82. package/dist/client/assets/{dist-CQzPpOiH.js → dist-U9MIFRLF.js} +1 -1
  83. package/dist/client/assets/{dist-CxPc5kI6.js → dist-WrbPKwPQ.js} +1 -1
  84. package/dist/client/assets/{dist-BEs40fGb.js → dist-_L_gn5XE.js} +1 -1
  85. package/dist/client/assets/{dist-DhkKj77m.js → dist-a6bFAbQd.js} +1 -1
  86. package/dist/client/assets/{dist-vL71uaef.js → dist-fkQ6urpt.js} +1 -1
  87. package/dist/client/assets/{dist-BPyPcaZr.js → dist-lbtQBzLu.js} +1 -1
  88. package/dist/client/assets/dist-naAaVPPS.js +1 -0
  89. package/dist/client/assets/{dockerfile-BmylqEVx.js → dockerfile-Ci0-ApQC.js} +1 -1
  90. package/dist/client/assets/drawio-editor-BW2z4NH2.js +9 -0
  91. package/dist/client/assets/drawio-room-D6352KkV.js +1 -0
  92. package/dist/client/assets/drawioEditor-DgoA4Zqi.js +2 -0
  93. package/dist/client/assets/{editor-session-DsM3VgQv.js → editor-session-xPvmulmt.js} +2 -2
  94. package/dist/client/assets/{el-GR-ZXDJ2OS4-CpEbk42T.js → el-GR-ZXDJ2OS4-DGa9DqWI.js} +1 -1
  95. package/dist/client/assets/{en-CTDJDZ6K-C36Iqh9O.js → en-CTDJDZ6K-DC-4I8h8.js} +1 -1
  96. package/dist/client/assets/{erDiagram-INFDFZHY-Dwg_AhU2.js → erDiagram-INFDFZHY-Dnub3poK.js} +1 -1
  97. package/dist/client/assets/{es-ES-DYQHAD43-Ba-6t0Wr.js → es-ES-DYQHAD43-Cox3GUnj.js} +1 -1
  98. package/dist/client/assets/{eu-ES-QDSYU5Y3-CYzUKQ2_.js → eu-ES-QDSYU5Y3-DrPM2uSX.js} +1 -1
  99. package/dist/client/assets/{excalidraw-editor-Cs5p0lBn.js → excalidraw-editor-BAYca95w.js} +9 -9
  100. package/dist/client/assets/{excalidraw-mermaid-stub-C1ZaaI05.js → excalidraw-mermaid-stub-LpuTrLnr.js} +1 -1
  101. package/dist/client/assets/excalidrawEditor-BY5rq_Bn.js +2 -0
  102. package/dist/client/assets/{fa-IR-26LZG4PM-CxLc7ohL.js → fa-IR-26LZG4PM-ViTdxAWX.js} +1 -1
  103. package/dist/client/assets/{factor-Cc9mS1OI.js → factor-DMvifS-k.js} +1 -1
  104. package/dist/client/assets/{fi-FI-6YS4KDE4-DtYLOEJY.js → fi-FI-6YS4KDE4-BTBRGd69.js} +1 -1
  105. package/dist/client/assets/{flowDiagram-PKNHOUZH-BIJd4wAz.js → flowDiagram-PKNHOUZH-DF4dDV_8.js} +1 -1
  106. package/dist/client/assets/{fr-FR-BRLLPTZC-9O_U5gdi.js → fr-FR-BRLLPTZC-z-POHcHJ.js} +1 -1
  107. package/dist/client/assets/{ganttDiagram-A5KZAMGK-BiMwicnp.js → ganttDiagram-A5KZAMGK-CwrN53Gu.js} +1 -1
  108. package/dist/client/assets/gitGraph-HDMCJU4V-DbS2XnWK.js +1 -0
  109. package/dist/client/assets/{gitGraphDiagram-K3NZZRJ6-lk_paRel.js → gitGraphDiagram-K3NZZRJ6-BV9w0K-N.js} +1 -1
  110. package/dist/client/assets/{gl-ES-OKUZTLYG-Bb7TO64O.js → gl-ES-OKUZTLYG-BQtfDFNk.js} +1 -1
  111. package/dist/client/assets/{graphlib-B2nPo9Z4.js → graphlib-B7v-yqry.js} +1 -1
  112. package/dist/client/assets/{he-IL-26MGYIU7-CQW1igm9.js → he-IL-26MGYIU7-Dyw-xS4W.js} +1 -1
  113. package/dist/client/assets/{hi-IN-Q4ZOGTP2-BM91ENLs.js → hi-IN-Q4ZOGTP2-BqENUkZA.js} +1 -1
  114. package/dist/client/assets/{hu-HU-P2OXPSN5-HiGbsUwM.js → hu-HU-P2OXPSN5-D1HGK0_M.js} +1 -1
  115. package/dist/client/assets/{id-ID-2EIKXYN6-DEG8vRZ2.js → id-ID-2EIKXYN6-BEjyfllL.js} +1 -1
  116. package/dist/client/assets/image-32MOCVDX-BBXPyAeU.js +1 -0
  117. package/dist/client/assets/index-D4FS-o13.js +2 -0
  118. package/dist/client/assets/index-DRgeOr4A.css +1 -0
  119. package/dist/client/assets/info-3K5VOQVL-Bre4VStM.js +1 -0
  120. package/dist/client/assets/infoDiagram-LFFYTUFH-CuUbZqrG.js +2 -0
  121. package/dist/client/assets/{isEmpty-DGNCKhlT.js → isEmpty-CLDc0Kt_.js} +1 -1
  122. package/dist/client/assets/{ishikawaDiagram-PHBUUO56-CE3HierS.js → ishikawaDiagram-PHBUUO56-CmO_FyHY.js} +1 -1
  123. package/dist/client/assets/{it-IT-4CFKVXI2-DSrGqCKD.js → it-IT-4CFKVXI2-C24G-VcQ.js} +1 -1
  124. package/dist/client/assets/{ja-JP-MAND2Z4V-OFpEymIv.js → ja-JP-MAND2Z4V-DLhvsdYk.js} +1 -1
  125. package/dist/client/assets/javascript-DdEc60Aj.js +1 -0
  126. package/dist/client/assets/{journeyDiagram-4ABVD52K-CzoczPjW.js → journeyDiagram-4ABVD52K-DF4HAYLk.js} +1 -1
  127. package/dist/client/assets/{jsx-runtime-DRYOYO9I.js → jsx-runtime-DJkgQklN.js} +1 -1
  128. package/dist/client/assets/{kaa-HQRTCXTJ-CpOJ_vn4.js → kaa-HQRTCXTJ-DC8l3BuJ.js} +1 -1
  129. package/dist/client/assets/{kab-KAB-JKIKKTGH-CNPzzJH6.js → kab-KAB-JKIKKTGH-DVFog4hd.js} +1 -1
  130. package/dist/client/assets/{kanban-definition-K7BYSVSG-Cr6iNYl4.js → kanban-definition-K7BYSVSG-nQoJJABn.js} +1 -1
  131. package/dist/client/assets/{kk-KZ-HXQ63ZFC-CgtjU5JI.js → kk-KZ-HXQ63ZFC-CULUfwMg.js} +1 -1
  132. package/dist/client/assets/{km-KH-PKL3LSGX-BAJh8UnF.js → km-KH-PKL3LSGX-CnLlEv7i.js} +1 -1
  133. package/dist/client/assets/{ko-KR-KXLREZX3-BshOksBX.js → ko-KR-KXLREZX3-DNKXAYCx.js} +1 -1
  134. package/dist/client/assets/{ku-TR-MJ4IER3X-Bi3YtiD-.js → ku-TR-MJ4IER3X-DLUiMa4h.js} +1 -1
  135. package/dist/client/assets/{line-D2NTyhqv.js → line-DvLjT0Gv.js} +1 -1
  136. package/dist/client/assets/{linear-DntNI0Uj.js → linear-CEb8O7zv.js} +1 -1
  137. package/dist/client/assets/{lt-LT-H6WFQ6FJ-DQ2W0g7h.js → lt-LT-H6WFQ6FJ-CoFiurzb.js} +1 -1
  138. package/dist/client/assets/{lv-LV-GOCK6SJW-DeqTo8T7.js → lv-LV-GOCK6SJW-DzeEvHxX.js} +1 -1
  139. package/dist/client/assets/main-Q1xvhoqP.js +600 -0
  140. package/dist/client/assets/{mermaid-parser.core-Bh2Ta9ou.js → mermaid-parser.core-DllATXd7.js} +2 -2
  141. package/dist/client/assets/{mermaid-runtime-CLtta79D.js → mermaid-runtime-DbCLD8Ih.js} +3 -3
  142. package/dist/client/assets/{mindmap-definition-YRQLILUH-DufPyQO8.js → mindmap-definition-YRQLILUH-DaMULsE9.js} +1 -1
  143. package/dist/client/assets/{mr-IN-IXVLDMEQ-CnH5Wjc7.js → mr-IN-IXVLDMEQ-C5i5R9H5.js} +1 -1
  144. package/dist/client/assets/{my-MM-YG6MYTTD-BefEpouO.js → my-MM-YG6MYTTD-DvwceqO-.js} +1 -1
  145. package/dist/client/assets/{nb-NO-XGWJISD2-CNRrlrPY.js → nb-NO-XGWJISD2-BUhX8hX0.js} +1 -1
  146. package/dist/client/assets/{nl-NL-XVDVCPNC-CuLTw3kL.js → nl-NL-XVDVCPNC-BV6Y0-Q0.js} +1 -1
  147. package/dist/client/assets/{nn-NO-EMX5MJX5-NHFRnQkl.js → nn-NO-EMX5MJX5-CF_bB9Jq.js} +1 -1
  148. package/dist/client/assets/{nsis-YyYYKQIB.js → nsis-42hkxqLx.js} +1 -1
  149. package/dist/client/assets/{oc-FR-ROEINTVO-8kCbAtcr.js → oc-FR-ROEINTVO-CiNI8fg8.js} +1 -1
  150. package/dist/client/assets/{ordinal-BuNU9EgZ.js → ordinal-fW5lWpNM.js} +1 -1
  151. package/dist/client/assets/{pa-IN-ZYN6SUDY-Dh8USSIe.js → pa-IN-ZYN6SUDY-CsbIU150.js} +1 -1
  152. package/dist/client/assets/packet-RMMSAZCW-B7lnOkip.js +1 -0
  153. package/dist/client/assets/percentages-5DKR754L-Dp1vwDEq.js +1 -0
  154. package/dist/client/assets/{pica-BG8AR4mo.js → pica-BbcTjVoI.js} +1 -1
  155. package/dist/client/assets/{clone-CMmi3x0H.js → pie-UPGHQEXC-D0gHdMgb.js} +1 -1
  156. package/dist/client/assets/{pieDiagram-SKSYHLDU--YidSJxi.js → pieDiagram-SKSYHLDU-BPFp1WBd.js} +1 -1
  157. package/dist/client/assets/{pl-PL-6VTG7PHC-BMbgP62B.js → pl-PL-6VTG7PHC-D1Nnx7R3.js} +1 -1
  158. package/dist/client/assets/preview-render-compiler-BYiRMsPq.js +1 -0
  159. package/dist/client/assets/{preview-render-profile-BjrQVCWD.js → preview-render-profile-DQsam_Ol.js} +2 -2
  160. package/dist/client/assets/{preview-render-worker-DbMTa0Y6.js → preview-render-worker-CcASh3y3.js} +1 -1
  161. package/dist/client/assets/{pt-BR-5YFKRR5G-CyrwFw_N.js → pt-BR-5YFKRR5G-DEDTeWEP.js} +1 -1
  162. package/dist/client/assets/{pt-PT-GEIXXZ67-SpK5vaGR.js → pt-PT-GEIXXZ67-BpqPVZom.js} +1 -1
  163. package/dist/client/assets/{pug-CM36H1hd.js → pug-BANqyQJ9.js} +1 -1
  164. package/dist/client/assets/{quadrantDiagram-337W2JSQ-n7EIFT_f.js → quadrantDiagram-337W2JSQ-DjPGrcJM.js} +1 -1
  165. package/dist/client/assets/{quick-switcher-controller-CKrGBgcl.js → quick-switcher-controller-n6Jhu3Z9.js} +1 -1
  166. package/dist/client/assets/radar-KQ55EAFF-D48du2CB.js +1 -0
  167. package/dist/client/assets/{requirementDiagram-Z7DCOOCP-BrquJATD.js → requirementDiagram-Z7DCOOCP-BmiYAMKV.js} +1 -1
  168. package/dist/client/assets/{ro-RO-E2P6TFZI-90dn2iUp.js → ro-RO-E2P6TFZI-4vRM1jVT.js} +1 -1
  169. package/dist/client/assets/{room-zaSnuMv5.js → room-DyhEnogt.js} +1 -1
  170. package/dist/client/assets/{ru-RU-YBIIY43T-Cl52NZnQ.js → ru-RU-YBIIY43T-Cfbhz4Ew.js} +1 -1
  171. package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-IpD6lgfO.js → sankeyDiagram-WA2Y5GQK-BEoPAlcC.js} +1 -1
  172. package/dist/client/assets/{sequenceDiagram-2WXFIKYE-DxZ6glIZ.js → sequenceDiagram-2WXFIKYE-BXqojuDS.js} +1 -1
  173. package/dist/client/assets/{si-LK-673C2CI2-DMSUxT-y.js → si-LK-673C2CI2-0muNkOEn.js} +1 -1
  174. package/dist/client/assets/{sk-SK-CKZHQ4AP-DUDai5Oe.js → sk-SK-CKZHQ4AP-EnLgxyJL.js} +1 -1
  175. package/dist/client/assets/{sl-SI-557H2GWM-BbLeATfl.js → sl-SI-557H2GWM-BN6npqVj.js} +1 -1
  176. package/dist/client/assets/{src-H0-aBY9y.js → src-DUDi_GeV.js} +1 -1
  177. package/dist/client/assets/{stateDiagram-RAJIS63D-A-rbDcdL.js → stateDiagram-RAJIS63D-DTR2sQs8.js} +1 -1
  178. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-BwVII-kJ.js +1 -0
  179. package/dist/client/assets/subset-shared.chunk-C6pUl_Oh.js +1 -0
  180. package/dist/client/assets/{subset-worker.chunk-B7pmUG1o.js → subset-worker.chunk-1FoL7eL0.js} +1 -1
  181. package/dist/client/assets/{sv-SE-XOPKKDWS-BBa-AcMf.js → sv-SE-XOPKKDWS-D3VSs2SQ.js} +1 -1
  182. package/dist/client/assets/{ta-IN-XBH7DQI3-9uR7ADzx.js → ta-IN-XBH7DQI3-BKR1mqfo.js} +1 -1
  183. package/dist/client/assets/{th-TH-TOCWH3R4-Box9U3ny.js → th-TH-TOCWH3R4-Bek1dQcW.js} +1 -1
  184. package/dist/client/assets/{timeline-definition-YZTLITO2-DuTppHot.js → timeline-definition-YZTLITO2-BP09qqIh.js} +1 -1
  185. package/dist/client/assets/{tr-TR-GXW6CYY5-BA8pS3C5.js → tr-TR-GXW6CYY5-xdLb7Dgi.js} +1 -1
  186. package/dist/client/assets/treemap-KZPCXAKY-BBRObSiT.js +1 -0
  187. package/dist/client/assets/{uk-UA-IJKTNUDG-B6hoHqzM.js → uk-UA-IJKTNUDG-Cd0AhTti.js} +1 -1
  188. package/dist/client/assets/{uz-UZ-TBZZEA4V-CPuftH33.js → uz-UZ-TBZZEA4V-DQH4e-QC.js} +1 -1
  189. package/dist/client/assets/{vault-api-client-D7C_m9eq.js → vault-api-client-fFJfUVXM.js} +2 -2
  190. package/dist/client/assets/vault-utils-BM4i-Ofm.js +1 -0
  191. package/dist/client/assets/{vennDiagram-LZ73GAT5-J0SBkXj8.js → vennDiagram-LZ73GAT5-BvSlhnT0.js} +1 -1
  192. package/dist/client/assets/{vi-VN-MULSGNVB-yRFd9OXl.js → vi-VN-MULSGNVB-BYDcPrAo.js} +1 -1
  193. package/dist/client/assets/{xychartDiagram-JWTSCODW-Dn9dSYxn.js → xychartDiagram-JWTSCODW-BvZ78F0j.js} +1 -1
  194. package/dist/client/assets/{yjs-provider-reset-guard-BcnBGrS9.js → yjs-provider-reset-guard-Cj00kgyM.js} +1 -1
  195. package/dist/client/assets/{zh-CN-MVX3E32U-VzUIXB4K.js → zh-CN-MVX3E32U-BqZQ-18-.js} +1 -1
  196. package/dist/client/assets/{zh-HK-JNU5RLIE-i0G2jHO_.js → zh-HK-JNU5RLIE-CbF8Agwa.js} +1 -1
  197. package/dist/client/assets/{zh-TW-LENVCA6T-BkHZg3jv.js → zh-TW-LENVCA6T-CepoVycx.js} +1 -1
  198. package/dist/client/drawio-editor.html +38 -0
  199. package/dist/client/excalidraw-editor.html +3 -3
  200. package/dist/client/index.html +16 -22
  201. package/package.json +1 -1
  202. package/src/client/app/drawio-editor-entry.js +4 -0
  203. package/src/client/app/drawio-editor.html +36 -0
  204. package/src/client/app/index.html +12 -18
  205. package/src/client/application/app-shell/ui-feature-identity.js +5 -2
  206. package/src/client/application/app-shell/ui-feature-shell.js +28 -2
  207. package/src/client/application/app-shell/workspace-feature.js +9 -0
  208. package/src/client/application/preview-render-compiler.js +18 -1
  209. package/src/client/application/preview-render-profile.js +5 -1
  210. package/src/client/application/workspace-chrome-controller.js +6 -0
  211. package/src/client/application/workspace-coordinator.js +12 -4
  212. package/src/client/application/workspace-preview-controller.js +65 -3
  213. package/src/client/application/workspace-route-controller.js +6 -3
  214. package/src/client/bootstrap/collabmd-app-shell.js +20 -0
  215. package/src/client/domain/runtime-paths.js +1 -0
  216. package/src/client/domain/vault-paths.js +24 -0
  217. package/src/client/drawio-editor.js +479 -0
  218. package/src/client/infrastructure/browser-navigation-port.js +2 -2
  219. package/src/client/infrastructure/drawio-lease-client.js +345 -0
  220. package/src/client/infrastructure/runtime-config.js +5 -1
  221. package/src/client/infrastructure/vault-api-client.js +9 -0
  222. package/src/client/presentation/comments-panel.js +2 -2
  223. package/src/client/presentation/create-menu-presenter.js +274 -0
  224. package/src/client/presentation/drawio-embed-controller.js +659 -0
  225. package/src/client/presentation/file-action-controller.js +126 -16
  226. package/src/client/presentation/file-explorer-controller.js +1 -0
  227. package/src/client/presentation/file-explorer-view.js +10 -2
  228. package/src/client/presentation/file-tree-state.js +1 -0
  229. package/src/client/presentation/theme-controller.js +21 -4
  230. package/src/client/styles/components/navigation.css +24 -0
  231. package/src/client/styles/features/diagram-preview.css +176 -1
  232. package/src/client/styles/layout/responsive.css +85 -7
  233. package/src/client/styles/layout/shell.css +41 -0
  234. package/src/client/styles/layout/sidebar.css +194 -3
  235. package/src/client/styles/layout/view-modes.css +1 -0
  236. package/src/domain/drawio-room.js +47 -0
  237. package/src/domain/file-kind.js +13 -2
  238. package/src/server/config/env.js +5 -0
  239. package/src/server/create-app-server.js +4 -2
  240. package/src/server/domain/collaboration/collaboration-document-store.js +11 -0
  241. package/src/server/domain/collaboration/collaboration-room.js +5 -0
  242. package/src/server/infrastructure/http/create-static-handler.js +2 -0
  243. package/src/server/infrastructure/http/create-vault-api-command-handler.js +5 -0
  244. package/src/server/infrastructure/http/create-vault-api-query-handler.js +5 -0
  245. package/src/server/infrastructure/persistence/path-utils.js +1 -1
  246. package/src/server/infrastructure/persistence/vault-content-adapter.js +6 -0
  247. package/src/server/infrastructure/persistence/vault-file-store.js +8 -0
  248. package/dist/client/assets/architecture-PBZL5I3N-0dui3p7-.js +0 -1
  249. package/dist/client/assets/channel-CVwYcdlk.js +0 -1
  250. package/dist/client/assets/chunk-GLR3WWYH-CqGMuOti.js +0 -2
  251. package/dist/client/assets/chunk-HHEYEP7N-Czb3OX2v.js +0 -1
  252. package/dist/client/assets/chunk-QZHKN3VN-DU7fMcaP.js +0 -1
  253. package/dist/client/assets/classDiagram-VBA2DB6C-CBSmkOe7.js +0 -1
  254. package/dist/client/assets/classDiagram-v2-RAHNMMFH-CJarRy94.js +0 -1
  255. package/dist/client/assets/dist-CNcGnl0T.js +0 -1
  256. package/dist/client/assets/dist-CnKD4Y92.js +0 -1
  257. package/dist/client/assets/dist-DL-EaOiC.js +0 -1
  258. package/dist/client/assets/dist-mDBaykBY.js +0 -1
  259. package/dist/client/assets/excalidrawEditor-wgJb2hmP.js +0 -2
  260. package/dist/client/assets/gitGraph-HDMCJU4V-iPo6Lz4k.js +0 -1
  261. package/dist/client/assets/image-32MOCVDX-viHDtJGM.js +0 -1
  262. package/dist/client/assets/index-B6m_KATZ.css +0 -1
  263. package/dist/client/assets/index-D20GlrKF.js +0 -2
  264. package/dist/client/assets/info-3K5VOQVL-DePZHLA4.js +0 -1
  265. package/dist/client/assets/infoDiagram-LFFYTUFH-CiAT_kJZ.js +0 -2
  266. package/dist/client/assets/javascript-DcX_cm1u.js +0 -1
  267. package/dist/client/assets/main-DONXLDrC.js +0 -599
  268. package/dist/client/assets/packet-RMMSAZCW-BVw0pEk-.js +0 -1
  269. package/dist/client/assets/percentages-5DKR754L-RQFE76Sg.js +0 -1
  270. package/dist/client/assets/pie-UPGHQEXC-ChUWa5qF.js +0 -1
  271. package/dist/client/assets/preview-render-compiler-CWBdv5tw.js +0 -1
  272. package/dist/client/assets/radar-KQ55EAFF-B4gMcoDX.js +0 -1
  273. package/dist/client/assets/stateDiagram-v2-FVOUBMTO-CKhOHHLe.js +0 -1
  274. package/dist/client/assets/subset-shared.chunk-93a-Md8B.js +0 -1
  275. package/dist/client/assets/treemap-KZPCXAKY-on28XbV_.js +0 -1
  276. package/dist/client/assets/vault-utils-Js2T-e-h.js +0 -1
  277. /package/dist/client/assets/{apl-khHl8vBy.js → apl-CJPt5sW7.js} +0 -0
  278. /package/dist/client/assets/{array-BTHl6o_K.js → array-e43ctQmx.js} +0 -0
  279. /package/dist/client/assets/{asciiarmor-7xnRhA8w.js → asciiarmor-D0oCypDs.js} +0 -0
  280. /package/dist/client/assets/{asn1-_x-T1mFB.js → asn1-8xgVfRoq.js} +0 -0
  281. /package/dist/client/assets/{asterisk-Ct2NwVUw.js → asterisk-B5kv5AQp.js} +0 -0
  282. /package/dist/client/assets/{brainfuck-CAmdgqDN.js → brainfuck-Dh7M1Ucz.js} +0 -0
  283. /package/dist/client/assets/{chunk-3PELD44J-BvOh9EJp.js → chunk-3PELD44J-D4qJ8fq7.js} +0 -0
  284. /package/dist/client/assets/{chunk-A66AFZZU-D0IDIehU.js → chunk-A66AFZZU-CJuwmF1m.js} +0 -0
  285. /package/dist/client/assets/{chunk-Cq_f4orQ.js → chunk-D-fkvfCP.js} +0 -0
  286. /package/dist/client/assets/{chunk-ETSVUAFD-BnK5BhxL.js → chunk-ETSVUAFD-C8C1JDu2.js} +0 -0
  287. /package/dist/client/assets/{clike-BJcwKCE7.js → clike-zYz_LEkw.js} +0 -0
  288. /package/dist/client/assets/{clojure-uSRILJfc.js → clojure-CdWlIeQh.js} +0 -0
  289. /package/dist/client/assets/{cmake-j5-7WxMz.js → cmake-wWuF5ifR.js} +0 -0
  290. /package/dist/client/assets/{cobol-cnURuZ43.js → cobol-D3WLbLVy.js} +0 -0
  291. /package/dist/client/assets/{coffeescript-iQD116iO.js → coffeescript-DRtt-5a2.js} +0 -0
  292. /package/dist/client/assets/{commonlisp-DGzExN9H.js → commonlisp-DJV75lsU.js} +0 -0
  293. /package/dist/client/assets/{crystal-CnjkM1-q.js → crystal-C7mEw92C.js} +0 -0
  294. /package/dist/client/assets/{css-C-Nv0c9S.js → css-_6KgQwpu.js} +0 -0
  295. /package/dist/client/assets/{cypher-hxitpny2.js → cypher-B3uWx7jm.js} +0 -0
  296. /package/dist/client/assets/{cytoscape.esm-0xzpJ66h.js → cytoscape.esm-BbbuX1pV.js} +0 -0
  297. /package/dist/client/assets/{d-BtdAWoTB.js → d-D3kOh3JF.js} +0 -0
  298. /package/dist/client/assets/{defaultLocale-PG3Gbk8q.js → defaultLocale-DTn6RiRA.js} +0 -0
  299. /package/dist/client/assets/{diff-f_ZkWiYS.js → diff-CoamybWh.js} +0 -0
  300. /package/dist/client/assets/{dist-CCxn5Mk-.js → dist-yRVuIDKu.js} +0 -0
  301. /package/dist/client/assets/{dtd-B6xdyNDx.js → dtd-BjGQwMWL.js} +0 -0
  302. /package/dist/client/assets/{dylan-BzUoKQTn.js → dylan-B9W3X2GI.js} +0 -0
  303. /package/dist/client/assets/{ebnf-BlTaNq16.js → ebnf-d5D0otVn.js} +0 -0
  304. /package/dist/client/assets/{ecl-CffPaRqR.js → ecl-C5Q_IBPt.js} +0 -0
  305. /package/dist/client/assets/{eiffel-B66P6crR.js → eiffel-BQA_6I3b.js} +0 -0
  306. /package/dist/client/assets/{elm-DIwllOLv.js → elm-unPS17vB.js} +0 -0
  307. /package/dist/client/assets/{erlang-DwYA67QU.js → erlang-R8nOsUTx.js} +0 -0
  308. /package/dist/client/assets/{excalidraw-mermaid-stub-BtCKxPxK.js → excalidraw-mermaid-stub-BJq3n7pR.js} +0 -0
  309. /package/dist/client/assets/{fcl-DD6dBrvI.js → fcl-CVAfW9wK.js} +0 -0
  310. /package/dist/client/assets/{forth-DFLLMv-i.js → forth-DHbsK8X8.js} +0 -0
  311. /package/dist/client/assets/{fortran-CNZVMQdQ.js → fortran-4jMwxW9-.js} +0 -0
  312. /package/dist/client/assets/{gas-DyiCLKEJ.js → gas-zC_XGrQT.js} +0 -0
  313. /package/dist/client/assets/{gherkin-CHgE7bAJ.js → gherkin-CPBQou3u.js} +0 -0
  314. /package/dist/client/assets/{groovy-BZc3It91.js → groovy-Cqopym0q.js} +0 -0
  315. /package/dist/client/assets/{haskell-DJ4hTi3A.js → haskell-imzbNPgF.js} +0 -0
  316. /package/dist/client/assets/{haxe-sJjg_lHN.js → haxe-Doh225Ku.js} +0 -0
  317. /package/dist/client/assets/{http-DwAi3Ho1.js → http-j4R5uEso.js} +0 -0
  318. /package/dist/client/assets/{idl-CCIDRFwr.js → idl-l9d1__Hj.js} +0 -0
  319. /package/dist/client/assets/{image-blob-reduce.esm-D4wBfumB.js → image-blob-reduce.esm-CQfEe3_g.js} +0 -0
  320. /package/dist/client/assets/{init-Bb7Vx0CW.js → init-207s1ipc.js} +0 -0
  321. /package/dist/client/assets/{isArrayLikeObject-DxEG9mY7.js → isArrayLikeObject-ZCMZRndo.js} +0 -0
  322. /package/dist/client/assets/{javascript-BlUxwA0O.js → javascript-9dQYqEHJ.js} +0 -0
  323. /package/dist/client/assets/{julia-BU0qBb1w.js → julia-ByGjwiLn.js} +0 -0
  324. /package/dist/client/assets/{katex-DoaSnJ5T.js → katex-XOVNa2d9.js} +0 -0
  325. /package/dist/client/assets/{livescript-uk34VDGK.js → livescript-B8l2m7xO.js} +0 -0
  326. /package/dist/client/assets/{lua-ClQGOv84.js → lua-DrfAKnQQ.js} +0 -0
  327. /package/dist/client/assets/{math-DQo53qzt.js → math-BlD6rf4Z.js} +0 -0
  328. /package/dist/client/assets/{mathematica-BDmKpvRN.js → mathematica-DYk_2Ik_.js} +0 -0
  329. /package/dist/client/assets/{mbox-T5kA6jAQ.js → mbox-BOzVHzVt.js} +0 -0
  330. /package/dist/client/assets/{mirc-DRRKKkcJ.js → mirc-DStbUCmv.js} +0 -0
  331. /package/dist/client/assets/{mllike-iZXopbca.js → mllike-BmhQglqS.js} +0 -0
  332. /package/dist/client/assets/{modelica-DP8T2DKM.js → modelica-ZElxtbqD.js} +0 -0
  333. /package/dist/client/assets/{mscgen-DXIRw2qg.js → mscgen-f-YxHPr0.js} +0 -0
  334. /package/dist/client/assets/{mumps-BKUS05-y.js → mumps-B79RJJhR.js} +0 -0
  335. /package/dist/client/assets/{nginx-CzYOtr2G.js → nginx-c--axfuP.js} +0 -0
  336. /package/dist/client/assets/{ntriples-ZgZuaYbW.js → ntriples-CgD4YZZC.js} +0 -0
  337. /package/dist/client/assets/{octave-CnOndUN3.js → octave-BQk-bCrp.js} +0 -0
  338. /package/dist/client/assets/{oz-DjW322Rn.js → oz-DPCSPrx5.js} +0 -0
  339. /package/dist/client/assets/{pascal-BdeW5uRX.js → pascal-C1iGzZ53.js} +0 -0
  340. /package/dist/client/assets/{path-BxyPWlyM.js → path-CDSE7Nw0.js} +0 -0
  341. /package/dist/client/assets/{perl-_CDvIe1D.js → perl-DQ3L8ffg.js} +0 -0
  342. /package/dist/client/assets/{pig-inWo_B4W.js → pig-B4S8acys.js} +0 -0
  343. /package/dist/client/assets/{powershell-CO5KWJsy.js → powershell-BhSVdaeY.js} +0 -0
  344. /package/dist/client/assets/{preload-helper-Chd9yIcd.js → preload-helper-I1wKxk_B.js} +0 -0
  345. /package/dist/client/assets/{properties-CjVp4a6M.js → properties-B2nfdtxE.js} +0 -0
  346. /package/dist/client/assets/{protobuf-DybFT2KT.js → protobuf-BFW_iwVN.js} +0 -0
  347. /package/dist/client/assets/{puppet-Dw_NDgko.js → puppet-C1-CkyhQ.js} +0 -0
  348. /package/dist/client/assets/{python-2pwcWoy7.js → python-CYXPDD4I.js} +0 -0
  349. /package/dist/client/assets/{q-C47l8kdS.js → q-Bub5Xmxm.js} +0 -0
  350. /package/dist/client/assets/{r-BmcXGVZ5.js → r-C59ONZO2.js} +0 -0
  351. /package/dist/client/assets/{rough.esm-C7Rbwqik.js → rough.esm-xhKrnp4d.js} +0 -0
  352. /package/dist/client/assets/{roundRect-CDlbNkEg.js → roundRect-CTz-kxJH.js} +0 -0
  353. /package/dist/client/assets/{rpm-Cm0x5xT_.js → rpm-DiM-R-wd.js} +0 -0
  354. /package/dist/client/assets/{ruby-Dl-I4pxG.js → ruby-DTqG95KX.js} +0 -0
  355. /package/dist/client/assets/{runtime-config-loader--hxFvh23.js → runtime-config-loader-DwWsKc1-.js} +0 -0
  356. /package/dist/client/assets/{sas-Bxkg4GVX.js → sas-BjdhmGHX.js} +0 -0
  357. /package/dist/client/assets/{scheme-CO3zogua.js → scheme-CWNdoI17.js} +0 -0
  358. /package/dist/client/assets/{shell-gYrTvBTP.js → shell-iaorleRB.js} +0 -0
  359. /package/dist/client/assets/{sieve-COX4Kn1X.js → sieve-D8m9Etmd.js} +0 -0
  360. /package/dist/client/assets/{simple-mode-BY9UFVy7.js → simple-mode-kdHrpFjq.js} +0 -0
  361. /package/dist/client/assets/{smalltalk-Dma1z5eE.js → smalltalk-28WS1mUj.js} +0 -0
  362. /package/dist/client/assets/{solr-BvhcdkNH.js → solr-x8qQ6eAP.js} +0 -0
  363. /package/dist/client/assets/{sparql-gX7W9xeh.js → sparql-BvLmi7B6.js} +0 -0
  364. /package/dist/client/assets/{spreadsheet-BnlQRxWz.js → spreadsheet-BuqSwScP.js} +0 -0
  365. /package/dist/client/assets/{sql-CwA10oIk.js → sql-B8tBavZM.js} +0 -0
  366. /package/dist/client/assets/{stex-DhLUylSV.js → stex-Bx4bLPxI.js} +0 -0
  367. /package/dist/client/assets/{stylus-9ZGSp3KB.js → stylus-CMEhEjuV.js} +0 -0
  368. /package/dist/client/assets/{swift-CurfpLXH.js → swift-wY9II8hY.js} +0 -0
  369. /package/dist/client/assets/{tcl-BPvzXR-t.js → tcl-BGywDEsi.js} +0 -0
  370. /package/dist/client/assets/{textile-BUq3vgBH.js → textile-K_mvsehZ.js} +0 -0
  371. /package/dist/client/assets/{tiddlywiki-DRR6E4hS.js → tiddlywiki-BrpeQ34q.js} +0 -0
  372. /package/dist/client/assets/{tiki-C1XMixgx.js → tiki-z2eQQPgI.js} +0 -0
  373. /package/dist/client/assets/{toml-BQjoWSzq.js → toml-Dcu7S7XA.js} +0 -0
  374. /package/dist/client/assets/{troff-DbgTp3Cj.js → troff-Djlumm7T.js} +0 -0
  375. /package/dist/client/assets/{ttcn-1OxchGWH.js → ttcn-XqU6tthJ.js} +0 -0
  376. /package/dist/client/assets/{ttcn-cfg-CC8OhyHu.js → ttcn-cfg-BzD0wr3i.js} +0 -0
  377. /package/dist/client/assets/{turtle-D1WjVU4-.js → turtle-DcjXkx6M.js} +0 -0
  378. /package/dist/client/assets/{vb-Bf-XXYNJ.js → vb-DV4y2QrD.js} +0 -0
  379. /package/dist/client/assets/{vbscript-HeSyWuOi.js → vbscript-BS8DsYJ_.js} +0 -0
  380. /package/dist/client/assets/{velocity-CUkiDsJQ.js → velocity-CS6Ly2yV.js} +0 -0
  381. /package/dist/client/assets/{verilog-BFxB5RAN.js → verilog-DbEC7ose.js} +0 -0
  382. /package/dist/client/assets/{vhdl-BJUXQE-6.js → vhdl-DBLrW9bF.js} +0 -0
  383. /package/dist/client/assets/{webidl-advQMGTP.js → webidl-CnE8KY-y.js} +0 -0
  384. /package/dist/client/assets/{xquery-CNzoFgd7.js → xquery--K5Za5EW.js} +0 -0
  385. /package/dist/client/assets/{yacas-BsmlDKac.js → yacas-ClQfYBmX.js} +0 -0
  386. /package/dist/client/assets/{z80-Bnez4vZ_.js → z80-Dr2oR3X2.js} +0 -0
@@ -0,0 +1,659 @@
1
+ import { createDrawioLeaseRoomName } from '../../domain/drawio-room.js';
2
+ import { setDiagramActionButtonIcon } from '../domain/diagram-action-icons.js';
3
+ import { resolveAppUrl } from '../domain/runtime-paths.js';
4
+ import { vaultApiClient } from '../domain/vault-api-client.js';
5
+
6
+ const HYDRATE_VIEWPORT_MARGIN_PX = 360;
7
+ const DRAWIO_VIEWER_SCRIPT_URL = 'https://viewer.diagrams.net/js/viewer-static.min.js';
8
+
9
+ let drawioViewerLoadPromise = null;
10
+
11
+ function requestIdleRender(callback, timeout) {
12
+ if (typeof window.requestIdleCallback === 'function') {
13
+ return window.requestIdleCallback(callback, { timeout });
14
+ }
15
+
16
+ return window.setTimeout(() => callback({ didTimeout: false, timeRemaining: () => 0 }), 1);
17
+ }
18
+
19
+ function cancelIdleRender(id) {
20
+ if (id === null) {
21
+ return;
22
+ }
23
+
24
+ if (typeof window.cancelIdleCallback === 'function') {
25
+ window.cancelIdleCallback(id);
26
+ return;
27
+ }
28
+
29
+ window.clearTimeout(id);
30
+ }
31
+
32
+ function isNearViewport(element, root, marginPx) {
33
+ if (!element || !root) {
34
+ return false;
35
+ }
36
+
37
+ const rootRect = root.getBoundingClientRect();
38
+ const elementRect = element.getBoundingClientRect();
39
+ return elementRect.bottom >= (rootRect.top - marginPx) && elementRect.top <= (rootRect.bottom + marginPx);
40
+ }
41
+
42
+ function ensureDrawioViewerLoaded() {
43
+ if (window.GraphViewer?.processElements) {
44
+ return Promise.resolve(window.GraphViewer);
45
+ }
46
+
47
+ if (drawioViewerLoadPromise) {
48
+ return drawioViewerLoadPromise;
49
+ }
50
+
51
+ drawioViewerLoadPromise = new Promise((resolve, reject) => {
52
+ const existingScript = document.querySelector('script[data-collabmd-drawio-viewer]');
53
+ const script = existingScript instanceof HTMLScriptElement
54
+ ? existingScript
55
+ : document.createElement('script');
56
+
57
+ const cleanup = () => {
58
+ script.removeEventListener('error', handleError);
59
+ script.removeEventListener('load', handleLoad);
60
+ };
61
+
62
+ const handleError = () => {
63
+ cleanup();
64
+ drawioViewerLoadPromise = null;
65
+ reject(new Error('Failed to load draw.io viewer'));
66
+ };
67
+
68
+ const handleLoad = () => {
69
+ cleanup();
70
+ if (!window.GraphViewer?.processElements) {
71
+ drawioViewerLoadPromise = null;
72
+ reject(new Error('draw.io viewer did not initialize'));
73
+ return;
74
+ }
75
+
76
+ resolve(window.GraphViewer);
77
+ };
78
+
79
+ script.addEventListener('error', handleError, { once: true });
80
+ script.addEventListener('load', handleLoad, { once: true });
81
+
82
+ if (!existingScript) {
83
+ script.src = DRAWIO_VIEWER_SCRIPT_URL;
84
+ script.async = true;
85
+ script.dataset.collabmdDrawioViewer = 'true';
86
+ document.head.append(script);
87
+ } else if (window.GraphViewer?.processElements) {
88
+ handleLoad();
89
+ }
90
+ });
91
+
92
+ return drawioViewerLoadPromise;
93
+ }
94
+
95
+ export class DrawioEmbedController {
96
+ constructor({
97
+ getLocalUser,
98
+ getTheme,
99
+ onOpenFile = null,
100
+ onOpenTextFile = null,
101
+ previewContainer,
102
+ previewElement,
103
+ toastController,
104
+ }) {
105
+ this.getLocalUser = getLocalUser;
106
+ this.getTheme = getTheme;
107
+ this.onOpenFile = onOpenFile;
108
+ this.onOpenTextFile = onOpenTextFile;
109
+ this.previewContainer = previewContainer;
110
+ this.previewElement = previewElement;
111
+ this.toastController = toastController;
112
+ this.embedEntries = new Map();
113
+ this.hydrationQueue = [];
114
+ this.hydrationIdleId = null;
115
+ this.hydrationPaused = false;
116
+ this.instanceCounter = 0;
117
+ this.maximizedEntry = null;
118
+ this.maximizedRoot = null;
119
+
120
+ this._onMessage = this._onMessage.bind(this);
121
+ this._onKeyDown = this._onKeyDown.bind(this);
122
+ this._onPreviewClick = this._onPreviewClick.bind(this);
123
+
124
+ window.addEventListener('message', this._onMessage);
125
+ window.addEventListener('keydown', this._onKeyDown);
126
+ this.previewElement?.addEventListener('click', this._onPreviewClick);
127
+ }
128
+
129
+ destroy() {
130
+ window.removeEventListener('message', this._onMessage);
131
+ window.removeEventListener('keydown', this._onKeyDown);
132
+ this.previewElement?.removeEventListener('click', this._onPreviewClick);
133
+ cancelIdleRender(this.hydrationIdleId);
134
+ this.hydrationIdleId = null;
135
+ this.hydrationQueue = [];
136
+ this._exitMaximizedEntry();
137
+ document.body.classList.remove('drawio-maximized-open');
138
+ this.embedEntries.forEach((entry) => entry.wrapper?.remove());
139
+ this.embedEntries.clear();
140
+ this.maximizedRoot?.remove();
141
+ this.maximizedRoot = null;
142
+ }
143
+
144
+ detachForCommit() {
145
+ cancelIdleRender(this.hydrationIdleId);
146
+ this.hydrationIdleId = null;
147
+ this.hydrationQueue = [];
148
+ this.embedEntries.forEach((entry) => {
149
+ entry.placeholder = null;
150
+ });
151
+ }
152
+
153
+ setHydrationPaused(paused) {
154
+ this.hydrationPaused = Boolean(paused);
155
+ if (!this.hydrationPaused) {
156
+ this.hydrateVisibleEmbeds();
157
+ }
158
+ }
159
+
160
+ reconcileEmbeds(previewElement) {
161
+ this._exitMaximizedEntry();
162
+
163
+ const descriptors = Array.from(previewElement.querySelectorAll('.drawio-embed-placeholder[data-drawio-key]')).map((placeholder) => ({
164
+ filePath: placeholder.dataset.drawioTarget || '',
165
+ key: placeholder.dataset.drawioKey || '',
166
+ label: placeholder.dataset.drawioLabel || placeholder.dataset.drawioTarget || '',
167
+ mode: placeholder.dataset.drawioMode === 'edit' ? 'edit' : 'view',
168
+ placeholder,
169
+ }));
170
+
171
+ const nextEntries = new Map();
172
+ descriptors.forEach((descriptor) => {
173
+ const existingEntry = this.embedEntries.get(descriptor.key) || null;
174
+ const nextEntry = existingEntry
175
+ ? { ...existingEntry, ...descriptor }
176
+ : {
177
+ ...descriptor,
178
+ iframe: null,
179
+ imageElement: null,
180
+ instanceId: '',
181
+ queued: false,
182
+ viewerElement: null,
183
+ wrapper: null,
184
+ };
185
+ nextEntries.set(descriptor.key, nextEntry);
186
+ });
187
+
188
+ this.embedEntries.forEach((entry, key) => {
189
+ if (!nextEntries.has(key)) {
190
+ entry.wrapper?.remove();
191
+ }
192
+ });
193
+
194
+ this.embedEntries = nextEntries;
195
+
196
+ this.embedEntries.forEach((entry) => {
197
+ if (entry.wrapper) {
198
+ entry.placeholder?.replaceWith(entry.wrapper);
199
+ } else {
200
+ entry.queued = false;
201
+ }
202
+ });
203
+
204
+ if (!this.hydrationPaused) {
205
+ this.hydrateVisibleEmbeds();
206
+ }
207
+ }
208
+
209
+ hydrateVisibleEmbeds() {
210
+ this.embedEntries.forEach((entry) => {
211
+ if (entry.wrapper || !entry.placeholder?.isConnected) {
212
+ return;
213
+ }
214
+
215
+ if (entry.mode === 'edit' || isNearViewport(entry.placeholder, this.previewContainer, HYDRATE_VIEWPORT_MARGIN_PX)) {
216
+ this.enqueueHydration(entry);
217
+ }
218
+ });
219
+ }
220
+
221
+ enqueueHydration(entry) {
222
+ if (entry.queued) {
223
+ return;
224
+ }
225
+
226
+ entry.queued = true;
227
+ this.hydrationQueue.push(entry);
228
+ if (this.hydrationIdleId !== null) {
229
+ return;
230
+ }
231
+
232
+ this.hydrationIdleId = requestIdleRender(() => {
233
+ this.hydrationIdleId = null;
234
+ const nextQueue = this.hydrationQueue.splice(0);
235
+ nextQueue.forEach((queuedEntry) => {
236
+ queuedEntry.queued = false;
237
+ this.hydrateEntry(queuedEntry);
238
+ });
239
+ }, 200);
240
+ }
241
+
242
+ hydrateEntry(entry) {
243
+ if (!entry.placeholder?.isConnected || entry.wrapper) {
244
+ return;
245
+ }
246
+
247
+ if (entry.mode === 'view') {
248
+ void this.hydrateViewerEntry(entry);
249
+ return;
250
+ }
251
+
252
+ this.hydrateIframeEntry(entry);
253
+ }
254
+
255
+ hydrateIframeEntry(entry) {
256
+ if (!entry.placeholder?.isConnected || entry.wrapper) {
257
+ return;
258
+ }
259
+
260
+ const wrapper = document.createElement('div');
261
+ wrapper.className = `drawio-embed diagram-preview-shell${entry.mode === 'edit' ? ' is-direct-file' : ''}`;
262
+ wrapper.dataset.file = entry.filePath;
263
+ wrapper.dataset.drawioKey = entry.key;
264
+
265
+ const header = document.createElement('div');
266
+ header.className = 'drawio-embed-header diagram-preview-toolbar';
267
+
268
+ const icon = document.createElement('span');
269
+ icon.className = 'drawio-embed-icon';
270
+ icon.innerHTML = '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="7" height="6" rx="1"/><rect x="14" y="4" width="7" height="6" rx="1"/><rect x="8.5" y="14" width="7" height="6" rx="1"/><path d="M10 7h4"/><path d="M17.5 10v2.5"/><path d="M6.5 10v2.5"/><path d="M6.5 12.5h11"/></svg>';
271
+
272
+ const label = document.createElement('span');
273
+ label.className = 'drawio-embed-label';
274
+ label.textContent = entry.label.replace(/\.drawio$/i, '');
275
+ header.append(icon, label);
276
+
277
+ if (entry.mode !== 'edit') {
278
+ header.appendChild(this.createOpenButton(entry));
279
+ }
280
+
281
+ header.appendChild(this.createMaximizeButton(entry, wrapper));
282
+
283
+ const iframe = document.createElement('iframe');
284
+ iframe.className = 'drawio-embed-iframe';
285
+ iframe.loading = 'lazy';
286
+ iframe.referrerPolicy = 'strict-origin-when-cross-origin';
287
+ entry.instanceId = `drawio-${++this.instanceCounter}`;
288
+ iframe.dataset.instanceId = entry.instanceId;
289
+ iframe.src = this.buildIframeUrl(entry);
290
+
291
+ wrapper.append(header, iframe);
292
+ entry.iframe = iframe;
293
+ entry.wrapper = wrapper;
294
+ entry.placeholder.replaceWith(wrapper);
295
+ }
296
+
297
+ async hydrateViewerEntry(entry) {
298
+ if (!entry.placeholder?.isConnected || entry.wrapper) {
299
+ return;
300
+ }
301
+
302
+ const wrapper = document.createElement('div');
303
+ wrapper.className = 'drawio-embed diagram-preview-shell is-static-preview';
304
+ wrapper.dataset.file = entry.filePath;
305
+ wrapper.dataset.drawioKey = entry.key;
306
+
307
+ const header = document.createElement('div');
308
+ header.className = 'drawio-embed-header diagram-preview-toolbar';
309
+
310
+ const icon = document.createElement('span');
311
+ icon.className = 'drawio-embed-icon';
312
+ icon.innerHTML = '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="7" height="6" rx="1"/><rect x="14" y="4" width="7" height="6" rx="1"/><rect x="8.5" y="14" width="7" height="6" rx="1"/><path d="M10 7h4"/><path d="M17.5 10v2.5"/><path d="M6.5 10v2.5"/><path d="M6.5 12.5h11"/></svg>';
313
+
314
+ const label = document.createElement('span');
315
+ label.className = 'drawio-embed-label';
316
+ label.textContent = entry.label.replace(/\.drawio$/i, '');
317
+ header.append(icon, label);
318
+
319
+ header.append(this.createOpenButton(entry), this.createMaximizeButton(entry, wrapper));
320
+
321
+ const viewerShell = document.createElement('div');
322
+ viewerShell.className = 'drawio-viewer-shell';
323
+ viewerShell.dataset.filePath = entry.filePath;
324
+
325
+ const loadingShell = document.createElement('div');
326
+ loadingShell.className = 'preview-shell';
327
+ loadingShell.textContent = 'Rendering draw.io preview…';
328
+ viewerShell.appendChild(loadingShell);
329
+
330
+ wrapper.append(header, viewerShell);
331
+ entry.iframe = null;
332
+ entry.wrapper = wrapper;
333
+ entry.viewerElement = viewerShell;
334
+ entry.placeholder.replaceWith(wrapper);
335
+
336
+ try {
337
+ await this.renderViewerEntry(entry);
338
+ } catch (error) {
339
+ this.renderViewerFallback(entry, error instanceof Error ? error.message : 'Failed to render draw.io preview');
340
+ }
341
+ }
342
+
343
+ async renderViewerEntry(entry) {
344
+ const [{ content }, viewer] = await Promise.all([
345
+ vaultApiClient.readFile(entry.filePath),
346
+ ensureDrawioViewerLoaded(),
347
+ ]);
348
+
349
+ if (!entry.wrapper?.isConnected || !entry.viewerElement?.isConnected) {
350
+ return;
351
+ }
352
+
353
+ const theme = this.getTheme?.() === 'light' ? 'light' : 'dark';
354
+ const graphElement = document.createElement('div');
355
+ graphElement.className = 'mxgraph drawio-viewer-frame';
356
+ graphElement.dataset.action = 'open-file';
357
+ graphElement.dataset.filePath = entry.filePath;
358
+ graphElement.setAttribute('role', 'button');
359
+ graphElement.setAttribute('tabindex', '0');
360
+ graphElement.setAttribute('aria-label', `Open ${entry.label.replace(/\.drawio$/i, '')}`);
361
+ graphElement.addEventListener('click', (event) => {
362
+ event.preventDefault();
363
+ this.onOpenFile?.(entry.filePath);
364
+ });
365
+ graphElement.addEventListener('keydown', (event) => {
366
+ if (event.key !== 'Enter' && event.key !== ' ') {
367
+ return;
368
+ }
369
+
370
+ event.preventDefault();
371
+ this.onOpenFile?.(entry.filePath);
372
+ });
373
+ graphElement.dataset.mxgraph = JSON.stringify({
374
+ 'check-visible-state': false,
375
+ center: true,
376
+ border: 0,
377
+ 'dark-mode': theme,
378
+ editable: false,
379
+ fit: 1,
380
+ lightbox: false,
381
+ nav: false,
382
+ resize: false,
383
+ toolbar: '',
384
+ tooltips: false,
385
+ xml: String(content ?? ''),
386
+ });
387
+
388
+ entry.viewerElement.replaceChildren(graphElement);
389
+ entry.viewerElement = graphElement;
390
+ viewer.processElements();
391
+ }
392
+
393
+ buildIframeUrl(entry) {
394
+ const url = new URL(resolveAppUrl('/drawio-editor.html'));
395
+ const localUser = this.getLocalUser?.() ?? {};
396
+ url.searchParams.set('file', entry.filePath);
397
+ url.searchParams.set('hostMode', entry.mode === 'edit' ? 'file-preview' : 'embed');
398
+ url.searchParams.set('instanceId', entry.instanceId);
399
+ url.searchParams.set('mode', entry.mode === 'edit' ? 'edit' : 'view');
400
+ url.searchParams.set('theme', this.getTheme?.() === 'light' ? 'light' : 'dark');
401
+
402
+ if (localUser.name) {
403
+ url.searchParams.set('userName', localUser.name);
404
+ }
405
+ if (localUser.peerId) {
406
+ url.searchParams.set('peerId', localUser.peerId);
407
+ }
408
+
409
+ if (entry.mode === 'edit') {
410
+ url.searchParams.set('leaseRoom', createDrawioLeaseRoomName(entry.filePath));
411
+ }
412
+
413
+ return url.toString();
414
+ }
415
+
416
+ updateTheme(theme) {
417
+ this.embedEntries.forEach((entry) => {
418
+ if (entry.iframe?.contentWindow) {
419
+ entry.iframe.contentWindow.postMessage({
420
+ source: 'collabmd-host',
421
+ theme,
422
+ type: 'set-theme',
423
+ }, window.location.origin);
424
+ }
425
+
426
+ if (entry.mode === 'view' && entry.wrapper?.isConnected && entry.viewerElement?.isConnected) {
427
+ void this.renderViewerEntry(entry).catch((error) => {
428
+ this.renderViewerFallback(entry, error instanceof Error ? error.message : 'Failed to render draw.io preview');
429
+ });
430
+ }
431
+ });
432
+ }
433
+
434
+ updateLocalUser() {}
435
+
436
+ syncLayout() {}
437
+
438
+ createOpenButton(entry) {
439
+ const button = document.createElement('button');
440
+ button.type = 'button';
441
+ button.className = 'drawio-embed-btn ui-preview-action ui-preview-action--icon-only';
442
+ button.dataset.action = 'open-file';
443
+ button.dataset.filePath = entry.filePath;
444
+ button.title = 'Edit in draw.io';
445
+ button.setAttribute('aria-label', 'Edit in draw.io');
446
+ setDiagramActionButtonIcon(button, 'edit');
447
+ button.addEventListener('click', (event) => {
448
+ event.preventDefault();
449
+ this.onOpenFile?.(entry.filePath);
450
+ });
451
+ return button;
452
+ }
453
+
454
+ createMaximizeButton(entry, wrapper) {
455
+ const button = document.createElement('button');
456
+ button.type = 'button';
457
+ button.className = 'drawio-embed-btn ui-preview-action ui-preview-action--icon-only';
458
+ button.dataset.action = 'toggle-maximize';
459
+ button.dataset.filePath = entry.filePath;
460
+ button.dataset.drawioKey = entry.key;
461
+
462
+ const syncState = () => {
463
+ const isMaximized = this.maximizedEntry?.key === entry.key;
464
+ setDiagramActionButtonIcon(button, isMaximized ? 'restore' : 'maximize');
465
+ button.title = isMaximized ? 'Restore diagram size' : 'Maximize diagram';
466
+ button.setAttribute('aria-label', isMaximized ? 'Restore diagram size' : 'Maximize diagram');
467
+ };
468
+
469
+ button.addEventListener('click', (event) => {
470
+ event.preventDefault();
471
+ if (this.maximizedEntry?.key === entry.key) {
472
+ this._exitMaximizedEntry();
473
+ } else {
474
+ this._enterMaximizedEntry(entry, wrapper);
475
+ }
476
+ this._syncMaximizeButtons();
477
+ });
478
+
479
+ syncState();
480
+ return button;
481
+ }
482
+
483
+ _ensureMaximizedRoot() {
484
+ if (this.maximizedRoot?.isConnected && this.maximizedRoot.parentElement === document.body) {
485
+ return this.maximizedRoot;
486
+ }
487
+
488
+ let maximizedRoot = document.body.querySelector('[data-drawio-maximized-root="true"]');
489
+ if (!maximizedRoot) {
490
+ maximizedRoot = document.createElement('div');
491
+ maximizedRoot.dataset.drawioMaximizedRoot = 'true';
492
+ maximizedRoot.className = 'drawio-maximized-root';
493
+ document.body.appendChild(maximizedRoot);
494
+ }
495
+
496
+ this.maximizedRoot = maximizedRoot;
497
+ return maximizedRoot;
498
+ }
499
+
500
+ _enterMaximizedEntry(entry, wrapper = entry?.wrapper) {
501
+ if (!entry?.wrapper || entry.wrapper !== wrapper) {
502
+ return;
503
+ }
504
+
505
+ if (this.maximizedEntry?.key === entry.key) {
506
+ return;
507
+ }
508
+
509
+ this._exitMaximizedEntry();
510
+
511
+ const maximizedRoot = this._ensureMaximizedRoot();
512
+ const parent = entry.wrapper.parentElement;
513
+ if (!parent) {
514
+ return;
515
+ }
516
+
517
+ const spacer = document.createElement('div');
518
+ spacer.className = 'drawio-maximize-spacer';
519
+ spacer.style.height = `${Math.ceil(entry.wrapper.getBoundingClientRect().height)}px`;
520
+
521
+ entry.maximizeSpacer = spacer;
522
+ entry.restoreParent = parent;
523
+ entry.restoreNextSibling = entry.wrapper.nextSibling || null;
524
+ parent.insertBefore(spacer, entry.wrapper);
525
+
526
+ maximizedRoot.hidden = false;
527
+ maximizedRoot.appendChild(entry.wrapper);
528
+ entry.wrapper.classList.add('is-maximized');
529
+ document.body.classList.add('drawio-maximized-open');
530
+ this.maximizedEntry = entry;
531
+ }
532
+
533
+ _exitMaximizedEntry() {
534
+ const entry = this.maximizedEntry;
535
+ if (!entry?.wrapper) {
536
+ this.maximizedEntry = null;
537
+ document.body.classList.remove('drawio-maximized-open');
538
+ return;
539
+ }
540
+
541
+ const { maximizeSpacer, restoreNextSibling, restoreParent } = entry;
542
+ entry.wrapper.classList.remove('is-maximized');
543
+
544
+ if (maximizeSpacer?.parentElement) {
545
+ maximizeSpacer.replaceWith(entry.wrapper);
546
+ } else if (restoreParent?.isConnected) {
547
+ if (restoreNextSibling?.parentElement === restoreParent) {
548
+ restoreParent.insertBefore(entry.wrapper, restoreNextSibling);
549
+ } else {
550
+ restoreParent.appendChild(entry.wrapper);
551
+ }
552
+ }
553
+
554
+ entry.maximizeSpacer = null;
555
+ entry.restoreParent = null;
556
+ entry.restoreNextSibling = null;
557
+ this.maximizedEntry = null;
558
+ document.body.classList.remove('drawio-maximized-open');
559
+ if (this.maximizedRoot && this.maximizedRoot.childElementCount === 0) {
560
+ this.maximizedRoot.hidden = true;
561
+ }
562
+ }
563
+
564
+ _syncMaximizeButtons() {
565
+ this.embedEntries.forEach((entry) => {
566
+ const button = entry.wrapper?.querySelector('.drawio-embed-btn[data-action="toggle-maximize"]');
567
+ if (!(button instanceof HTMLElement)) {
568
+ return;
569
+ }
570
+
571
+ const isMaximized = this.maximizedEntry?.key === entry.key;
572
+ setDiagramActionButtonIcon(button, isMaximized ? 'restore' : 'maximize');
573
+ button.title = isMaximized ? 'Restore diagram size' : 'Maximize diagram';
574
+ button.setAttribute('aria-label', isMaximized ? 'Restore diagram size' : 'Maximize diagram');
575
+ });
576
+ }
577
+
578
+ _findEntryByInstanceId(instanceId) {
579
+ for (const entry of this.embedEntries.values()) {
580
+ if (entry.instanceId === instanceId) {
581
+ return entry;
582
+ }
583
+ }
584
+
585
+ return null;
586
+ }
587
+
588
+ _onMessage(event) {
589
+ const payload = event.data;
590
+ if (!payload || payload.source !== 'drawio-editor') {
591
+ return;
592
+ }
593
+
594
+ const entry = this._findEntryByInstanceId(payload.instanceId);
595
+ if (!entry) {
596
+ return;
597
+ }
598
+
599
+ if (payload.type === 'fallback-text') {
600
+ if (entry.mode === 'view') {
601
+ this.renderViewerFallback(entry, 'Failed to render draw.io preview');
602
+ return;
603
+ }
604
+ this.onOpenTextFile?.(entry.filePath);
605
+ return;
606
+ }
607
+
608
+ if (payload.type === 'error') {
609
+ if (entry.mode === 'view') {
610
+ this.renderViewerFallback(entry, payload.message || 'Failed to load draw.io preview');
611
+ return;
612
+ }
613
+ this.toastController?.show?.(payload.message || 'Failed to load draw.io');
614
+ return;
615
+ }
616
+
617
+ if (payload.type === 'request-open-file') {
618
+ this.onOpenFile?.(entry.filePath);
619
+ }
620
+ }
621
+
622
+ _onPreviewClick(event) {
623
+ const loadButton = event.target.closest('.drawio-embed-placeholder-btn');
624
+ if (loadButton) {
625
+ const placeholder = loadButton.closest('.drawio-embed-placeholder');
626
+ const key = placeholder?.dataset.drawioKey || '';
627
+ const entry = this.embedEntries.get(key);
628
+ if (entry) {
629
+ event.preventDefault();
630
+ this.hydrateEntry(entry);
631
+ }
632
+ return;
633
+ }
634
+ }
635
+
636
+ _onKeyDown(event) {
637
+ if (event.key === 'Escape') {
638
+ this._exitMaximizedEntry();
639
+ this._syncMaximizeButtons();
640
+ }
641
+ }
642
+
643
+ renderViewerFallback(entry, message) {
644
+ if (!entry.wrapper) {
645
+ return;
646
+ }
647
+
648
+ const viewerShell = entry.wrapper.querySelector('.drawio-viewer-shell, .drawio-viewer-frame');
649
+ if (!viewerShell) {
650
+ return;
651
+ }
652
+
653
+ const fallback = document.createElement('div');
654
+ fallback.className = 'preview-shell';
655
+ fallback.textContent = message;
656
+ viewerShell.replaceChildren(fallback);
657
+ entry.viewerElement = fallback;
658
+ }
659
+ }