collabmd 0.1.34 → 0.1.36
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.
- package/dist/client/assets/{CodeMirrorEditor-UCMRAMCV-Bg0dawOb.js → CodeMirrorEditor-UCMRAMCV-DnBV8gCm.js} +1 -1
- package/dist/client/assets/_baseFor-BSErPbF2.js +1 -0
- package/dist/client/assets/{ar-SA-NXDWD63E-WivLHHDW.js → ar-SA-NXDWD63E-CTf_wpt3.js} +1 -1
- package/dist/client/assets/arc-DD8jaAGl.js +1 -0
- package/dist/client/assets/architecture-YZFGNWBL-DWWrde02.js +1 -0
- package/dist/client/assets/{architectureDiagram-2XIMDMQ5-kYbOThe4.js → architectureDiagram-Q4EWVU46-BftXiJA8.js} +4 -4
- package/dist/client/assets/{az-AZ-MXSORGZV-DOdq1TKC.js → az-AZ-MXSORGZV-C_C9i9u3.js} +1 -1
- package/dist/client/assets/{bg-BG-O6MV2KSF-CYucKuDS.js → bg-BG-O6MV2KSF-YmfvQf63.js} +1 -1
- package/dist/client/assets/blockDiagram-DXYQGD6D-6UN-nR8-.js +132 -0
- package/dist/client/assets/{bn-IN-MMW2ORAC-DYr8kqNL.js → bn-BD-T2VJNT7N-BD0ob0JE.js} +1 -1
- package/dist/client/assets/{bn-BD-T2VJNT7N-2OKWLCYa.js → bn-IN-MMW2ORAC-BTEFR4Ed.js} +1 -1
- package/dist/client/assets/c4Diagram-AHTNJAMY-Gz7ZAK0d.js +10 -0
- package/dist/client/assets/{ca-ES-MKBCGNOG-B9Aeb43I.js → ca-ES-MKBCGNOG-aLX_cjA0.js} +1 -1
- package/dist/client/assets/channel-XGCkuPi6.js +1 -0
- package/dist/client/assets/chunk-2KRD3SAO-CFcF2aNP.js +1 -0
- package/dist/client/assets/chunk-336JU56O-DvrrHsJT.js +2 -0
- package/dist/client/assets/chunk-426QAEUC-CEbmCgux.js +1 -0
- package/dist/client/assets/{chunk-4BX2VUAB-2e7V-uuE.js → chunk-4BX2VUAB-D5YiFdu1.js} +1 -1
- package/dist/client/assets/chunk-4TB4RGXK-CoouNThi.js +206 -0
- package/dist/client/assets/{chunk-55IACEB6-CpncB3ru.js → chunk-55IACEB6-VHgZjidg.js} +1 -1
- package/dist/client/assets/chunk-5FUZZQ4R-CxIIxXPy.js +62 -0
- package/dist/client/assets/chunk-5PVQY5BW-ciE7eHID.js +2 -0
- package/dist/client/assets/chunk-67CJDMHE-CW-fbgQB.js +1 -0
- package/dist/client/assets/chunk-7N4EOEYR-DbAW6XnF.js +1 -0
- package/dist/client/assets/chunk-AA7GKIK3-ClDHDAza.js +1 -0
- package/dist/client/assets/chunk-BSJP7CBP-D2KkrA_B.js +1 -0
- package/dist/client/assets/chunk-CIAEETIT-BnB8a6HR.js +1 -0
- package/dist/client/assets/{chunk-KX2RTZJC-BTiOJb7N.js → chunk-EDXVE4YY-M4QxyGNt.js} +1 -1
- package/dist/client/assets/chunk-ENJZ2VHE-BQj_1YA_.js +10 -0
- package/dist/client/assets/{chunk-FMBD7UC4-CMahlBa_.js → chunk-FMBD7UC4-qQT7MtX2.js} +1 -1
- package/dist/client/assets/chunk-FOC6F5B3-Bw6XfKDP.js +1 -0
- package/dist/client/assets/chunk-ICPOFSXX-DqJi89rc.js +122 -0
- package/dist/client/assets/chunk-K5T4RW27-CQtjKF2g.js +94 -0
- package/dist/client/assets/chunk-KGLVRYIC-BWSPiKjp.js +1 -0
- package/dist/client/assets/chunk-LIHQZDEY-DtYrHuCi.js +1 -0
- package/dist/client/assets/{chunk-AXZTUZBK-DuMiJYO9.js → chunk-LOOWOR4L-C5BUwXgZ.js} +2 -2
- package/dist/client/assets/chunk-ORNJ4GCN-Csga44e5.js +1 -0
- package/dist/client/assets/{chunk-NQ4KR5QH-CMJKI6Oj.js → chunk-OYMX7WX6-DvtmCasj.js} +25 -14
- package/dist/client/assets/chunk-QZHKN3VN-CHVH9_3S.js +1 -0
- package/dist/client/assets/{chunk-SRAX5OIU-CLVBQRWC.js → chunk-SRAX5OIU-yDw8XRsi.js} +1 -1
- package/dist/client/assets/{chunk-PU5JKC2W-D_6N6t8f.js → chunk-U2HBQHQK-BBXgsocS.js} +6 -6
- package/dist/client/assets/{chunk-PQ6SQG4A-D1AbThjy.js → chunk-X2U36JSP-D3OEPG7k.js} +1 -1
- package/dist/client/assets/{chunk-XPW4576I-DJr4_4Yy.js → chunk-XPW4576I-BUfyrOtN.js} +2 -2
- package/dist/client/assets/chunk-YHkbxXgt.js +1 -0
- package/dist/client/assets/chunk-YKPWT25G-GISHuloq.js +35 -0
- package/dist/client/assets/{chunk-JSJVCQXG-DPQ9cPJt.js → chunk-YZCP3GAM-D1jf1WUI.js} +1 -1
- package/dist/client/assets/{chunk-Z5NKEFVG-HOkYqaKa.js → chunk-Z5NKEFVG-Vu8zBV4H.js} +1 -1
- package/dist/client/assets/chunk-ZZ45TVLE-DGIhE_ST.js +1 -0
- package/dist/client/assets/classDiagram-6PBFFD2Q-D1KhAUL3.js +1 -0
- package/dist/client/assets/classDiagram-v2-HSJHXN6E-BSyyJpnR.js +1 -0
- package/dist/client/assets/clike-BFTLRaGS.js +1 -0
- package/dist/client/assets/clone-DI0bYZ1L.js +1 -0
- package/dist/client/assets/{coffeescript-B_7eyHAa.js → coffeescript-B7GZajzV.js} +1 -1
- package/dist/client/assets/{cose-bilkent-S5V4N54A-DASO2hrk.js → cose-bilkent-S5V4N54A-A8ssRFyt.js} +1 -1
- package/dist/client/assets/{cs-CZ-V77HGUP7-BDg-F0CJ.js → cs-CZ-V77HGUP7-Du3y53BB.js} +1 -1
- package/dist/client/assets/{cypher-DE6I2lIA.js → cypher-DEGl2llJ.js} +1 -1
- package/dist/client/assets/cytoscape.esm-BurByw8X.js +321 -0
- package/dist/client/assets/{d-BNkKjn0o.js → d-BspB0dox.js} +1 -1
- package/dist/client/assets/{da-DK-I5RFNTM4-wtSQ0Jxa.js → da-DK-I5RFNTM4-CDJtjf5s.js} +1 -1
- package/dist/client/assets/dagre-Dn6rkrte.js +1 -0
- package/dist/client/assets/dagre-KV5264BT-COzej2en.js +4 -0
- package/dist/client/assets/{de-CH-WLRDEVBV-C1swvmZy.js → de-CH-WLRDEVBV-CLV2tVw6.js} +1 -1
- package/dist/client/assets/{de-DE-DTI4WUSC-C0L6Nz8X.js → de-DE-DTI4WUSC-B53J0BQ8.js} +1 -1
- package/dist/client/assets/diagram-5BDNPKRD-BuK-UBuN.js +10 -0
- package/dist/client/assets/diagram-G4DWMVQ6-CbswIU9X.js +24 -0
- package/dist/client/assets/diagram-MMDJMWI5-BE-yOVGX.js +43 -0
- package/dist/client/assets/diagram-TYMM5635-CT8BdT4s.js +24 -0
- package/dist/client/assets/{dist-3uAMa5w5.js → dist-B98fHn5m.js} +1 -1
- package/dist/client/assets/{dist-BtnXjRx0.js → dist-BE8C_ouo.js} +1 -1
- package/dist/client/assets/{dist-rMhng5DK.js → dist-BEKQo64E.js} +1 -1
- package/dist/client/assets/{dist-DsL7sqZR.js → dist-BOP-dC-R.js} +1 -1
- package/dist/client/assets/{dist-DUvaQ-Bj.js → dist-BPEi1dEF.js} +1 -1
- package/dist/client/assets/{dist-B4uQVR_X.js → dist-BScEL4VP.js} +1 -1
- package/dist/client/assets/dist-BfVljg0L2.js +1 -0
- package/dist/client/assets/{dist-CGV1S_as.js → dist-BiCgLddE.js} +1 -1
- package/dist/client/assets/{dist-CxfohGIV.js → dist-Bn8WRPs1.js} +1 -1
- package/dist/client/assets/dist-Brrlevif.js +6 -0
- package/dist/client/assets/{dist-BLAlZer_.js → dist-CBEw2W2P.js} +1 -1
- package/dist/client/assets/{dist-B-02vKOA.js → dist-CJWCCWEW.js} +1 -1
- package/dist/client/assets/{dist-Dyt7n5Ui.js → dist-CQVTTk81.js} +1 -1
- package/dist/client/assets/dist-CaMl1R6P.js +13 -0
- package/dist/client/assets/dist-CcG3Y7Wp.js +1 -0
- package/dist/client/assets/dist-CghBwrO3.js +1 -0
- package/dist/client/assets/dist-Csbx9lQ-.js +1 -0
- package/dist/client/assets/dist-D34Xzrah.js +1 -0
- package/dist/client/assets/dist-DLyohOXi.js +1 -0
- package/dist/client/assets/{dist-Bc2ND6i3.js → dist-DPCUH5MO.js} +1 -1
- package/dist/client/assets/{dist-BzpfHRaE.js → dist-DQiph4qx.js} +1 -1
- package/dist/client/assets/{dist-CL-jjdvG.js → dist-DWRyOl2w.js} +1 -1
- package/dist/client/assets/{dist-CXpKYW9s.js → dist-DZ2t5lUX.js} +1 -1
- package/dist/client/assets/{dist-BzbYwa8m.js → dist-Dbg8P4C5.js} +1 -1
- package/dist/client/assets/{dist-k47-Io7D.js → dist-DdAqzGFU.js} +1 -1
- package/dist/client/assets/dist-DwvSvkOE.js +1 -0
- package/dist/client/assets/dist-WXLmfDGg.js +1 -0
- package/dist/client/assets/{dist-lDhnP-K1.js → dist-aE0_04fl.js} +1 -1
- package/dist/client/assets/{dist-E_jPb93e.js → dist-mPPUaHhq.js} +1 -1
- package/dist/client/assets/{dist-CjII8VDS.js → dist-v3i1ifes.js} +1 -1
- package/dist/client/assets/dist-wkd-N1L5.js +1 -0
- package/dist/client/assets/drawio-editor-D4Qoluwz.js +9 -0
- package/dist/client/assets/{drawioEditor-D6clB5OH.js → drawioEditor-B65FWq-b.js} +2 -2
- package/dist/client/assets/{ecl-M7Iek4lq.js → ecl-D9rhJ9-u.js} +1 -1
- package/dist/client/assets/editor-session-DV80PhYL.js +16 -0
- package/dist/client/assets/{el-GR-ZXDJ2OS4-BH0saXds.js → el-GR-ZXDJ2OS4-DFmRQv0o.js} +1 -1
- package/dist/client/assets/{en-IQZW2TQM-CzlcEpq3.js → en-CMP6EMR6-D9x8hVSu.js} +1 -1
- package/dist/client/assets/{erDiagram-INFDFZHY-DlIf-fb7.js → erDiagram-SMLLAGMA-6VFZA3Qb.js} +33 -18
- package/dist/client/assets/{es-ES-DYQHAD43-CyzL9Mni.js → es-ES-DYQHAD43-BiGWIrBG.js} +1 -1
- package/dist/client/assets/{eu-ES-QDSYU5Y3-D2-x316S.js → eu-ES-QDSYU5Y3-BjwS0kZi.js} +1 -1
- package/dist/client/assets/excalidraw-editor-BZCE9ydu.css +1 -0
- package/dist/client/assets/excalidraw-editor-hiJQt1cX.js +9 -0
- package/dist/client/assets/{excalidraw-mermaid-stub-Bwe-bKcT.js → excalidraw-mermaid-stub-Df0Q2qkW.js} +1 -1
- package/dist/client/assets/excalidraw-scene-MyNAJi2A.js +176 -0
- package/dist/client/assets/excalidrawEditor-BnbblxK4.js +2 -0
- package/dist/client/assets/{export-page-PeexH2QK.js → export-page-BKDarp9x.js} +3 -3
- package/dist/client/assets/exportDocument-CULEGKmb.js +2 -0
- package/dist/client/assets/{fa-IR-26LZG4PM-D8-trU2x.js → fa-IR-26LZG4PM-BgANg2TD.js} +1 -1
- package/dist/client/assets/{fcl-BWKK0S4-.js → fcl-CUXJFJn1.js} +1 -1
- package/dist/client/assets/{fi-FI-6YS4KDE4-CCdRVFDQ.js → fi-FI-6YS4KDE4-CBL5f3oN.js} +1 -1
- package/dist/client/assets/flatten-DjXjUsvv.js +1 -0
- package/dist/client/assets/flowDiagram-DWJPFMVM-DO9RH8YQ.js +162 -0
- package/dist/client/assets/{fr-FR-BRLLPTZC-Dqq-O5T_.js → fr-FR-BRLLPTZC-CRibNSLG.js} +1 -1
- package/dist/client/assets/ganttDiagram-T4ZO3ILL-B-NMvHWN.js +292 -0
- package/dist/client/assets/gitGraph-7Q5UKJZL-DWNinXu4.js +1 -0
- package/dist/client/assets/gitGraphDiagram-UUTBAWPF-B95qkCUx.js +106 -0
- package/dist/client/assets/{gl-ES-OKUZTLYG-BK7pbLbm.js → gl-ES-OKUZTLYG-DEDwa_xt.js} +1 -1
- package/dist/client/assets/graphlib-CAwOVCJc.js +1 -0
- package/dist/client/assets/{groovy-BEKazBrO.js → groovy-Di--Vb9Z.js} +1 -1
- package/dist/client/assets/{haxe-BY9d_5nB.js → haxe-CcPA1xnA.js} +1 -1
- package/dist/client/assets/{he-IL-26MGYIU7-C3BuYKyY.js → he-IL-26MGYIU7-47wxy70N.js} +1 -1
- package/dist/client/assets/{hi-IN-Q4ZOGTP2-BEvXWXnH.js → hi-IN-Q4ZOGTP2-bhV7c3dK.js} +1 -1
- package/dist/client/assets/{hu-HU-P2OXPSN5-BWWZeJNp.js → hu-HU-P2OXPSN5-xG-gBMzE.js} +1 -1
- package/dist/client/assets/{id-ID-2EIKXYN6-DxSKi_aJ.js → id-ID-2EIKXYN6-MQuYaNHo.js} +1 -1
- package/dist/client/assets/image-J2CAS7OM-DD4DaQTs.js +1 -0
- package/dist/client/assets/image-blob-reduce.esm-D8JQdTFk.js +2 -0
- package/dist/client/assets/{index-BLrtj9YM.js → index-BjdYZiBM.js} +2 -2
- package/dist/client/assets/{index-BIt5EZXz.css → index-BryqP9QY.css} +1 -1
- package/dist/client/assets/info-OMHHGYJF-DtYG_rX0.js +1 -0
- package/dist/client/assets/{infoDiagram-LFFYTUFH-DFTI0nfs.js → infoDiagram-42DDH7IO-C77Pt7T1.js} +1 -1
- package/dist/client/assets/isEmpty-CpfhGGBo.js +1 -0
- package/dist/client/assets/ishikawaDiagram-UXIWVN3A-Cy1fwvvg.js +70 -0
- package/dist/client/assets/{it-IT-4CFKVXI2-BmA8wW6q.js → it-IT-4CFKVXI2-v2kj-y7j.js} +1 -1
- package/dist/client/assets/{ja-JP-MAND2Z4V-CLS1jI9o.js → ja-JP-MAND2Z4V-BahXSQz-.js} +1 -1
- package/dist/client/assets/{javascript-CdiVhQeA.js → javascript-gTK9fxz6.js} +1 -1
- package/dist/client/assets/javascript-qUBHINSy.js +1 -0
- package/dist/client/assets/{journeyDiagram-4ABVD52K-DDur6iHm.js → journeyDiagram-VCZTEJTY-CYWaI6re.js} +2 -2
- package/dist/client/assets/{jsx-runtime-C2p7wRmT.js → jsx-runtime-1KUJVfx8.js} +1 -1
- package/dist/client/assets/{kaa-HQRTCXTJ-W15DEDPz.js → kaa-HQRTCXTJ-BF26ydFa.js} +1 -1
- package/dist/client/assets/{kab-KAB-JKIKKTGH-MLh1inqS.js → kab-KAB-JKIKKTGH-CEIH0F80.js} +1 -1
- package/dist/client/assets/{kanban-definition-K7BYSVSG-dA6NPLsg.js → kanban-definition-6JOO6SKY-DY1xE7tm.js} +2 -2
- package/dist/client/assets/{kk-KZ-HXQ63ZFC-BtFrPeLs.js → kk-KZ-HXQ63ZFC-CxWjc9Sf.js} +1 -1
- package/dist/client/assets/{km-KH-PKL3LSGX-xO5FyM9T.js → km-KH-PKL3LSGX-DJlCteEp.js} +1 -1
- package/dist/client/assets/{ko-KR-KXLREZX3-NZFoRybS.js → ko-KR-KXLREZX3-B1gtI_ci.js} +1 -1
- package/dist/client/assets/{ku-TR-MJ4IER3X-B5eVPIpK.js → ku-TR-MJ4IER3X-Bf41y2v2.js} +1 -1
- package/dist/client/assets/line-BCItEgq3.js +1 -0
- package/dist/client/assets/{linear-B2dOdA24.js → linear-dsIQT_iU.js} +1 -1
- package/dist/client/assets/{lt-LT-H6WFQ6FJ-D_7_OeJD.js → lt-LT-H6WFQ6FJ-DA1or-Eo.js} +1 -1
- package/dist/client/assets/{lua-kutgyRGY.js → lua-Cg0FqIlO.js} +1 -1
- package/dist/client/assets/{lv-LV-GOCK6SJW-CnpKr0oQ.js → lv-LV-GOCK6SJW-qa0BoYMm.js} +1 -1
- package/dist/client/assets/main-QJcxyvDa.js +1404 -0
- package/dist/client/assets/mermaid-parser.core-CsTVsPcD.js +4 -0
- package/dist/client/assets/mermaid-runtime-BGlnoUXY.js +11 -0
- package/dist/client/assets/{mindmap-definition-YRQLILUH-DjQcsPoe.js → mindmap-definition-QFDTVHPH-DB_M5r-j.js} +39 -11
- package/dist/client/assets/{mr-IN-IXVLDMEQ-Pht2X_GK.js → mr-IN-IXVLDMEQ-DXFRgvgb.js} +1 -1
- package/dist/client/assets/{my-MM-YG6MYTTD-Cgq4HhPO.js → my-MM-YG6MYTTD-BKDIfalJ.js} +1 -1
- package/dist/client/assets/{nb-NO-XGWJISD2-Bn_Bk2un.js → nb-NO-XGWJISD2-DbwbopH8.js} +1 -1
- package/dist/client/assets/{nl-NL-XVDVCPNC-YkWSJS94.js → nl-NL-XVDVCPNC-ChSneTSU.js} +1 -1
- package/dist/client/assets/{nn-NO-EMX5MJX5-DhP5eZJ7.js → nn-NO-EMX5MJX5-Cf7ZWKWZ.js} +1 -1
- package/dist/client/assets/{oc-FR-ROEINTVO-D3udMPnr.js → oc-FR-ROEINTVO-lM7Nl7hD.js} +1 -1
- package/dist/client/assets/{pa-IN-ZYN6SUDY-CR5YzFig.js → pa-IN-ZYN6SUDY-C9WNUTeR.js} +1 -1
- package/dist/client/assets/packet-4T2RLAQJ-CUVefhAv.js +1 -0
- package/dist/client/assets/percentages-5DKR754L-DuhOjTM2.js +1 -0
- package/dist/client/assets/pica-CgGaIJly.js +2 -0
- package/dist/client/assets/pie-ZZUOXDRM-BHBJ1dLX.js +1 -0
- package/dist/client/assets/pieDiagram-DEJITSTG-BOo-WzjZ.js +30 -0
- package/dist/client/assets/{pl-PL-6VTG7PHC-_wZuoIDM.js → pl-PL-6VTG7PHC-DqRVepnC.js} +1 -1
- package/dist/client/assets/{preview-diagram-utils-COt-IYMD.js → preview-diagram-utils-Nqpp4FNV.js} +1 -1
- package/dist/client/assets/preview-render-compiler-BCB8u6iM.js +1 -0
- package/dist/client/assets/{preview-render-compiler-BjLlHmiQ.js → preview-render-compiler-Tkc6JX1O.js} +2 -2
- package/dist/client/assets/{preview-render-profile-CR4dJZrp.js → preview-render-profile-Bf6R7v4w.js} +6 -6
- package/dist/client/assets/{preview-render-worker-B4dH2yxj.js → preview-render-worker-1LBLqgKu.js} +7 -7
- package/dist/client/assets/{pt-BR-5YFKRR5G-M7gIm2Hi.js → pt-BR-5YFKRR5G-CopLYEA6.js} +1 -1
- package/dist/client/assets/{pt-PT-GEIXXZ67-CcxWpkGj.js → pt-PT-GEIXXZ67-BjZ_Lphg.js} +1 -1
- package/dist/client/assets/{pug-DkUcLYWt.js → pug-lkTEco3G.js} +1 -1
- package/dist/client/assets/{python-CZtTmYkS.js → python-BUyhM0Ew.js} +1 -1
- package/dist/client/assets/{q-I27iQntV.js → q-Dls1OX0D.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-337W2JSQ-CYKgdx7K.js → quadrantDiagram-34T5L4WZ-2vfo0l5S.js} +1 -1
- package/dist/client/assets/{quick-switcher-controller-DcyllYpm.js → quick-switcher-controller-B1erSgJ1.js} +1 -1
- package/dist/client/assets/{r-DN_EydfL.js → r-DeZ8Mdev.js} +1 -1
- package/dist/client/assets/radar-PYXPWWZC-2jR4qZNU.js +1 -0
- package/dist/client/assets/reduce-ChpYjEUB.js +1 -0
- package/dist/client/assets/requirementDiagram-MS252O5E-CtUIQnWa.js +84 -0
- package/dist/client/assets/{ro-RO-E2P6TFZI-qR9noVzP.js → ro-RO-E2P6TFZI-DakDz5Xu.js} +1 -1
- package/dist/client/assets/{room-yJaBAoEU.js → room-z2w9b96b.js} +1 -1
- package/dist/client/assets/{ru-RU-YBIIY43T-CE4S_RX8.js → ru-RU-YBIIY43T-BMvCT-XT.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-WA2Y5GQK-CfHe3D6R.js → sankeyDiagram-XADWPNL6-tcSeuifE.js} +1 -1
- package/dist/client/assets/sequenceDiagram-FGHM5R23-DtF-1Kt2.js +157 -0
- package/dist/client/assets/{si-LK-673C2CI2-Bv6Avh3z.js → si-LK-673C2CI2-hGdH1S9E.js} +1 -1
- package/dist/client/assets/{sk-SK-CKZHQ4AP-Cnlpp55z.js → sk-SK-CKZHQ4AP-DiRA-fj8.js} +1 -1
- package/dist/client/assets/{sl-SI-557H2GWM-BfGq7AQF.js → sl-SI-557H2GWM-DN94n_1-.js} +1 -1
- package/dist/client/assets/{sparql-BOvq0dv7.js → sparql-vm8qNO8J.js} +1 -1
- package/dist/client/assets/sql-GL7dVWcd.js +1 -0
- package/dist/client/assets/src-BuiVcSz-.js +1 -0
- package/dist/client/assets/stateDiagram-FHFEXIEX-DKk7Sb0f.js +1 -0
- package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DJUaiADr.js +1 -0
- package/dist/client/assets/subset-shared.chunk-CWNYNLru.js +1 -0
- package/dist/client/assets/{subset-worker.chunk-BSCP6IiC.js → subset-worker.chunk-kj1e3wjW.js} +1 -1
- package/dist/client/assets/{sv-SE-XOPKKDWS-B2_Vk-sp.js → sv-SE-XOPKKDWS-CkHUNABj.js} +1 -1
- package/dist/client/assets/{swift-BCxe4-cw.js → swift-CKcKnWv9.js} +1 -1
- package/dist/client/assets/{ta-IN-XBH7DQI3-BXQMZZIx.js → ta-IN-XBH7DQI3-W-157oVK.js} +1 -1
- package/dist/client/assets/{th-TH-TOCWH3R4-C-ZIYMfH.js → th-TH-TOCWH3R4-BsU-Pydr.js} +1 -1
- package/dist/client/assets/timeline-definition-GMOUNBTQ-Bs6U53Mo.js +120 -0
- package/dist/client/assets/{tr-TR-GXW6CYY5-dl702PMA.js → tr-TR-GXW6CYY5-CTddyq89.js} +1 -1
- package/dist/client/assets/treeView-SZITEDCU-DN5dP2ol.js +1 -0
- package/dist/client/assets/treemap-W4RFUUIX-Dva7DBJR.js +1 -0
- package/dist/client/assets/{turtle-GBz_E4RG.js → turtle-BkP3ExOG.js} +1 -1
- package/dist/client/assets/{uk-UA-IJKTNUDG-CUYQvSSF.js → uk-UA-IJKTNUDG-1LzXkII3.js} +1 -1
- package/dist/client/assets/{uz-UZ-TBZZEA4V-B9qw0PXX.js → uz-UZ-TBZZEA4V-kqm-qcUj.js} +1 -1
- package/dist/client/assets/{vault-api-client-p7h7cXKM.js → vault-api-client-DSx3mWkH.js} +1 -1
- package/dist/client/assets/{vault-utils-5Xr0MXCb.js → vault-utils-CRpy8MQz.js} +1 -1
- package/dist/client/assets/vennDiagram-DHZGUBPP-DNnIjRae.js +34 -0
- package/dist/client/assets/{verilog-C4wTycyo.js → verilog-DSARZZPc.js} +1 -1
- package/dist/client/assets/{vhdl-Bwndeg44.js → vhdl-CnYyYTpa.js} +1 -1
- package/dist/client/assets/{vi-VN-MULSGNVB-DqxZ_sVc.js → vi-VN-MULSGNVB-C3H2AUhm.js} +1 -1
- package/dist/client/assets/wardley-RL74JXVD-CDZW5uzY.js +1 -0
- package/dist/client/assets/wardleyDiagram-NUSXRM2D-C-scJfPY.js +20 -0
- package/dist/client/assets/{xychartDiagram-JWTSCODW-C3vA70iJ.js → xychartDiagram-5P7HB3ND-D3nQoxhz.js} +6 -6
- package/dist/client/assets/yjs-provider-reset-guard-DSPzcvAO.js +4 -0
- package/dist/client/assets/{zh-CN-MVX3E32U-BM0aLuGc.js → zh-CN-MVX3E32U-BULPbsyl.js} +1 -1
- package/dist/client/assets/{zh-HK-JNU5RLIE-dmG_YD0d.js → zh-HK-JNU5RLIE-bNGmeSaW.js} +1 -1
- package/dist/client/assets/{zh-TW-LENVCA6T-LFgbiOi3.js → zh-TW-LENVCA6T-CQDp064P.js} +1 -1
- package/dist/client/drawio-editor.html +1 -1
- package/dist/client/excalidraw-editor.html +1 -1
- package/dist/client/export-document.html +1 -1
- package/dist/client/index.html +2 -2
- package/package.json +15 -15
- package/src/client/application/app-shell/presence-feature.js +265 -34
- package/src/client/application/app-shell/ui-feature-shell.js +31 -5
- package/src/client/application/app-shell/ui-feature-tab-activity.js +1 -0
- package/src/client/application/app-shell/workspace-feature.js +5 -2
- package/src/client/application/app-shell-elements.js +3 -0
- package/src/client/application/diagram-preview-export.js +304 -0
- package/src/client/application/mermaid-preview-hydrator.js +153 -23
- package/src/client/application/plantuml-preview-hydrator.js +155 -20
- package/src/client/application/preview-diagram-utils.js +48 -8
- package/src/client/application/preview-renderer.js +2 -0
- package/src/client/application/quick-switcher-loader.js +42 -0
- package/src/client/application/workspace-route-controller.js +35 -2
- package/src/client/application/workspace-state-store.js +1 -0
- package/src/client/bootstrap/collabmd-app-shell.js +25 -20
- package/src/client/domain/diagram-action-icons.js +21 -0
- package/src/client/domain/excalidraw-api-scene-sync.js +70 -0
- package/src/client/domain/keyboard-shortcuts.js +8 -0
- package/src/client/drawio-editor.js +13 -0
- package/src/client/excalidraw-editor.js +119 -18
- package/src/client/infrastructure/excalidraw-room-client.js +42 -5
- package/src/client/infrastructure/workspace-sync-client.js +26 -3
- package/src/client/presentation/app-shell-template.js +18 -1
- package/src/client/presentation/comment-ui/comment-ui-card.js +83 -3
- package/src/client/presentation/comment-ui/comment-ui-state.js +25 -2
- package/src/client/presentation/drawio-embed-controller.js +18 -0
- package/src/client/presentation/excalidraw-embed-controller.js +7 -0
- package/src/client/presentation/file-explorer-controller.js +10 -0
- package/src/client/presentation/file-explorer-view.js +6 -0
- package/src/client/presentation/git-panel-controller.js +2 -0
- package/src/client/presentation/image-lightbox-controller.js +290 -29
- package/src/client/styles/features/collaboration-presence.css +212 -0
- package/src/client/styles/features/diagram-preview.css +71 -4
- package/src/client/styles/features/embedded-preview.css +4 -6
- package/src/client/styles/features/media-lightbox.css +2 -0
- package/src/server/config/env.js +4 -0
- package/src/server/create-app-server.js +2 -0
- package/src/server/domain/backlink-index.js +33 -72
- package/src/server/domain/bases/base-index-snapshot-store.js +46 -62
- package/src/server/domain/bases/base-query-service.js +89 -7
- package/src/server/domain/collaboration/collaboration-room.js +10 -1
- package/src/server/domain/markdown-reference-extractor.js +233 -0
- package/src/server/infrastructure/http/create-request-handler.js +1 -0
- package/src/server/infrastructure/http/create-vault-api-handler.js +2 -0
- package/src/server/infrastructure/http/create-vault-api-query-handler.js +100 -26
- package/src/server/infrastructure/persistence/vault-file-store.js +175 -4
- package/src/server/infrastructure/workspace/file-system-sync-service.js +45 -21
- package/dist/client/assets/_basePickBy-Dv0sK1l7.js +0 -1
- package/dist/client/assets/_baseUniq-DKYX57ji.js +0 -1
- package/dist/client/assets/arc-DrfYGhWk.js +0 -1
- package/dist/client/assets/architecture-PBZL5I3N-DiglIZi9.js +0 -1
- package/dist/client/assets/blockDiagram-WCTKOSBZ-GIgTqnhk.js +0 -132
- package/dist/client/assets/c4Diagram-IC4MRINW-CkHO1i_L.js +0 -10
- package/dist/client/assets/channel-CgsU9TSN.js +0 -1
- package/dist/client/assets/chunk-7E7YKBS2-TdU92i9i.js +0 -1
- package/dist/client/assets/chunk-7R4GIKGN-mqd2GwMg.js +0 -80
- package/dist/client/assets/chunk-C72U2L5F-CJKQWBtz.js +0 -1
- package/dist/client/assets/chunk-DpHwWhuW.js +0 -1
- package/dist/client/assets/chunk-EGIJ26TM-C4nq20om.js +0 -1
- package/dist/client/assets/chunk-GEFDOKGD-Bs7FmFox.js +0 -2
- package/dist/client/assets/chunk-GLR3WWYH-qQe2O5VQ.js +0 -2
- package/dist/client/assets/chunk-HHEYEP7N-DlevL8bq.js +0 -1
- package/dist/client/assets/chunk-KYZI473N-CTSCuqRb.js +0 -53
- package/dist/client/assets/chunk-L3YUKLVL-CJZMBtKF.js +0 -1
- package/dist/client/assets/chunk-MX3YWQON-DQpSwRf6.js +0 -1
- package/dist/client/assets/chunk-NU2UP6EN-DlUENSHU.js +0 -35
- package/dist/client/assets/chunk-O4XLMI2P-CcVxZh41.js +0 -7
- package/dist/client/assets/chunk-OZEHJAEY-DjBZbgu0.js +0 -1
- package/dist/client/assets/chunk-QZHKN3VN-CgLPFSk5.js +0 -1
- package/dist/client/assets/chunk-R5LLSJPH-CkjKXM73.js +0 -1
- package/dist/client/assets/chunk-WL4C6EOR-axcuKSup.js +0 -189
- package/dist/client/assets/chunk-XIRO2GV7-4wqVHjs_.js +0 -1
- package/dist/client/assets/chunk-XZSTWKYB-C8Y_hIKZ.js +0 -94
- package/dist/client/assets/chunk-YBOYWFTD-CKg4ymFF.js +0 -1
- package/dist/client/assets/classDiagram-VBA2DB6C-BHZpvOxK.js +0 -1
- package/dist/client/assets/classDiagram-v2-RAHNMMFH-DA7HMUUs.js +0 -1
- package/dist/client/assets/clike-1_ZsiVV8.js +0 -1
- package/dist/client/assets/clone-Dgi8Z4IL.js +0 -1
- package/dist/client/assets/cytoscape.esm-Czjc507F.js +0 -321
- package/dist/client/assets/dagre-CfB3Fw33.js +0 -1
- package/dist/client/assets/dagre-KLK3FWXG-CC7tq2Ky.js +0 -4
- package/dist/client/assets/diagram-E7M64L7V-CMt7BN5M.js +0 -24
- package/dist/client/assets/diagram-IFDJBPK2-BFMBUGpd.js +0 -43
- package/dist/client/assets/diagram-P4PSJMXO-CviA1xXr.js +0 -24
- package/dist/client/assets/dist-3bQB_we3.js +0 -1
- package/dist/client/assets/dist-8Igu3Ee_2.js +0 -1
- package/dist/client/assets/dist-BU8uusJX.js +0 -1
- package/dist/client/assets/dist-BVB8rn7o.js +0 -1
- package/dist/client/assets/dist-D5QOYy7y.js +0 -6
- package/dist/client/assets/dist-DIi0uqLJ.js +0 -1
- package/dist/client/assets/dist-DJ16N7ol.js +0 -1
- package/dist/client/assets/dist-DWJL3_bF.js +0 -13
- package/dist/client/assets/dist-O1z0Ayg0.js +0 -1
- package/dist/client/assets/dist-OQE68wIX.js +0 -1
- package/dist/client/assets/dist-x7PIEmJu.js +0 -1
- package/dist/client/assets/drawio-editor-BMTwP5mD.js +0 -9
- package/dist/client/assets/editor-session-Dzy_85Wp.js +0 -16
- package/dist/client/assets/excalidraw-editor-CAP9F8CB.js +0 -9
- package/dist/client/assets/excalidraw-editor-Dj3i59LW.css +0 -1
- package/dist/client/assets/excalidraw-scene-BF_bT1OL.js +0 -176
- package/dist/client/assets/excalidrawEditor-DD4AvzYP.js +0 -2
- package/dist/client/assets/exportDocument-Zfwq1XVx.js +0 -2
- package/dist/client/assets/flowDiagram-PKNHOUZH-C_t-mkwb.js +0 -162
- package/dist/client/assets/ganttDiagram-A5KZAMGK-BtK9Tb--.js +0 -292
- package/dist/client/assets/gitGraph-HDMCJU4V-CT7YfbD3.js +0 -1
- package/dist/client/assets/gitGraphDiagram-K3NZZRJ6-DULDLGiJ.js +0 -65
- package/dist/client/assets/graphlib-BgRST-Qg.js +0 -1
- package/dist/client/assets/image-XLNPCCAD-CFiKwiWK.js +0 -1
- package/dist/client/assets/image-blob-reduce.esm-DriR2zT9.js +0 -2
- package/dist/client/assets/info-3K5VOQVL-DUpNyDC-.js +0 -1
- package/dist/client/assets/isArrayLikeObject-BId_dPHM.js +0 -1
- package/dist/client/assets/isEmpty-CVvRj8fj.js +0 -1
- package/dist/client/assets/ishikawaDiagram-PHBUUO56-DpBuDpC6.js +0 -70
- package/dist/client/assets/javascript-UJe68_xi.js +0 -1
- package/dist/client/assets/line-B2GMovaI.js +0 -1
- package/dist/client/assets/main-CfSHaGes.js +0 -1368
- package/dist/client/assets/math-B-LMBwub.js +0 -1
- package/dist/client/assets/mermaid-parser.core-B1ogGcR8.js +0 -4
- package/dist/client/assets/mermaid-runtime-Bn8A6DGx.js +0 -11
- package/dist/client/assets/packet-RMMSAZCW-DEwNbIrA.js +0 -1
- package/dist/client/assets/percentages-5DKR754L-D7n4T776.js +0 -1
- package/dist/client/assets/pica-C1TdTz-C.js +0 -2
- package/dist/client/assets/pie-UPGHQEXC-D5M_lSjo.js +0 -1
- package/dist/client/assets/pieDiagram-SKSYHLDU-jhHouFpk.js +0 -30
- package/dist/client/assets/preview-render-compiler-Duy_3IcP.js +0 -1
- package/dist/client/assets/radar-KQ55EAFF-AU1qh3Bw.js +0 -1
- package/dist/client/assets/requirementDiagram-Z7DCOOCP-D9SHxoW7.js +0 -73
- package/dist/client/assets/sequenceDiagram-2WXFIKYE-CZsMMqAJ.js +0 -145
- package/dist/client/assets/sql-DDFeQNTK.js +0 -1
- package/dist/client/assets/src-Pgt9Gp65.js +0 -1
- package/dist/client/assets/stateDiagram-RAJIS63D-CoNZjTYV.js +0 -1
- package/dist/client/assets/stateDiagram-v2-FVOUBMTO-1zOw6NmQ.js +0 -1
- package/dist/client/assets/subset-shared.chunk-C9HjwTXy.js +0 -1
- package/dist/client/assets/timeline-definition-YZTLITO2-DSe2mrG8.js +0 -61
- package/dist/client/assets/treemap-KZPCXAKY-C9UI2fwP.js +0 -1
- package/dist/client/assets/vennDiagram-LZ73GAT5-xSzaIpy1.js +0 -34
- package/dist/client/assets/yjs-provider-reset-guard-CtERLBID.js +0 -4
- /package/dist/client/assets/{drawio-room-DEivFyNV.js → drawio-room-1i6Nn0_Z.js} +0 -0
- /package/dist/client/assets/{excalidraw-mermaid-stub-BZPU4ZhU.js → excalidraw-mermaid-stub-DzxtBcQW.js} +0 -0
- /package/dist/client/assets/{file-kind-DBptLlF_.js → file-kind-DmKq2MvD.js} +0 -0
- /package/dist/client/assets/{rough.esm-DE_lJ5Ge.js → rough.esm-BU2knLt9.js} +0 -0
- /package/dist/client/assets/{runtime-config-CqhchMC4.js → runtime-config-DWTejofP.js} +0 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isMermaidFilePath,
|
|
3
|
+
isPlantUmlFilePath,
|
|
4
|
+
stripVaultFileExtension,
|
|
5
|
+
} from '../../domain/file-kind.js';
|
|
6
|
+
import { sanitizeSvgMarkup, serializeSvgElement } from './preview-diagram-utils.js';
|
|
7
|
+
|
|
8
|
+
const LIGHT_EXPORT_MERMAID_CONFIG = Object.freeze({
|
|
9
|
+
htmlLabels: false,
|
|
10
|
+
flowchart: {
|
|
11
|
+
defaultRenderer: 'dagre-wrapper',
|
|
12
|
+
htmlLabels: false,
|
|
13
|
+
useMaxWidth: true,
|
|
14
|
+
},
|
|
15
|
+
class: {
|
|
16
|
+
defaultRenderer: 'dagre-wrapper',
|
|
17
|
+
htmlLabels: false,
|
|
18
|
+
useMaxWidth: true,
|
|
19
|
+
},
|
|
20
|
+
startOnLoad: false,
|
|
21
|
+
theme: 'default',
|
|
22
|
+
});
|
|
23
|
+
const MERMAID_INIT_DIRECTIVE_PATTERN = /^\s*%%\{\s*(?:init|initialize)\s*:[\s\S]*?\}%%\s*\n?/gim;
|
|
24
|
+
|
|
25
|
+
let mermaidExportCounter = 0;
|
|
26
|
+
|
|
27
|
+
function getPathLeaf(pathValue) {
|
|
28
|
+
return String(pathValue ?? '')
|
|
29
|
+
.replace(/\/+$/u, '')
|
|
30
|
+
.split('/')
|
|
31
|
+
.filter(Boolean)
|
|
32
|
+
.pop() || '';
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function encodeSvgDataUrl(svgMarkup) {
|
|
36
|
+
return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgMarkup)}`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function createMermaidExportId() {
|
|
40
|
+
mermaidExportCounter += 1;
|
|
41
|
+
return `mermaid-export-${mermaidExportCounter.toString(36)}`;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function resolveSvgDimensions(svgElement) {
|
|
45
|
+
const widthAttr = Number.parseFloat(svgElement.getAttribute('width') || '');
|
|
46
|
+
const heightAttr = Number.parseFloat(svgElement.getAttribute('height') || '');
|
|
47
|
+
const viewBox = svgElement.getAttribute('viewBox') || '';
|
|
48
|
+
const viewBoxParts = viewBox.split(/\s+/u).map((value) => Number.parseFloat(value));
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
height: Number.isFinite(heightAttr) && heightAttr > 0
|
|
52
|
+
? heightAttr
|
|
53
|
+
: (Number.isFinite(viewBoxParts[3]) && viewBoxParts[3] > 0 ? viewBoxParts[3] : 800),
|
|
54
|
+
width: Number.isFinite(widthAttr) && widthAttr > 0
|
|
55
|
+
? widthAttr
|
|
56
|
+
: (Number.isFinite(viewBoxParts[2]) && viewBoxParts[2] > 0 ? viewBoxParts[2] : 1200),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function loadImage(src) {
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const image = new Image();
|
|
63
|
+
image.decoding = 'async';
|
|
64
|
+
image.addEventListener('load', () => resolve(image), { once: true });
|
|
65
|
+
image.addEventListener('error', () => reject(new Error(`Failed to load image: ${src}`)), { once: true });
|
|
66
|
+
image.src = src;
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async function canvasToPngBlob(canvas) {
|
|
71
|
+
if (typeof canvas.toBlob === 'function') {
|
|
72
|
+
const blob = await new Promise((resolve) => canvas.toBlob(resolve, 'image/png'));
|
|
73
|
+
if (blob instanceof Blob) {
|
|
74
|
+
return blob;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const dataUrl = canvas.toDataURL('image/png');
|
|
79
|
+
return dataUrlToBlob(dataUrl);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function dataUrlToBlob(dataUrl) {
|
|
83
|
+
const [header = '', payload = ''] = String(dataUrl).split(',', 2);
|
|
84
|
+
const mimeMatch = header.match(/^data:([^;,]+)?/u);
|
|
85
|
+
const mimeType = mimeMatch?.[1] || 'application/octet-stream';
|
|
86
|
+
|
|
87
|
+
if (header.includes(';base64')) {
|
|
88
|
+
const binary = atob(payload);
|
|
89
|
+
const bytes = new Uint8Array(binary.length);
|
|
90
|
+
for (let index = 0; index < binary.length; index += 1) {
|
|
91
|
+
bytes[index] = binary.charCodeAt(index);
|
|
92
|
+
}
|
|
93
|
+
return new Blob([bytes], { type: mimeType });
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return new Blob([decodeURIComponent(payload)], { type: mimeType });
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function cleanupExportSvg(svgElement) {
|
|
100
|
+
const clonedSvg = svgElement.cloneNode(true);
|
|
101
|
+
if (!(clonedSvg instanceof SVGSVGElement)) {
|
|
102
|
+
throw new Error('Renderer returned invalid SVG');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
clonedSvg.style.removeProperty('display');
|
|
106
|
+
clonedSvg.style.removeProperty('margin');
|
|
107
|
+
clonedSvg.style.removeProperty('max-width');
|
|
108
|
+
clonedSvg.style.removeProperty('height');
|
|
109
|
+
clonedSvg.style.removeProperty('width');
|
|
110
|
+
clonedSvg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
|
|
111
|
+
|
|
112
|
+
const { width, height } = resolveSvgDimensions(clonedSvg);
|
|
113
|
+
clonedSvg.setAttribute('width', String(Math.max(1, Math.ceil(width))));
|
|
114
|
+
clonedSvg.setAttribute('height', String(Math.max(1, Math.ceil(height))));
|
|
115
|
+
|
|
116
|
+
return clonedSvg;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function trimExportSvgElement(svgElement, { padding = 16 } = {}) {
|
|
120
|
+
const cleanedSvg = cleanupExportSvg(svgElement);
|
|
121
|
+
|
|
122
|
+
if (typeof svgElement.getBBox !== 'function') {
|
|
123
|
+
return cleanedSvg;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
try {
|
|
127
|
+
const bounds = svgElement.getBBox();
|
|
128
|
+
if (!bounds || bounds.width <= 0 || bounds.height <= 0) {
|
|
129
|
+
return cleanedSvg;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const inset = Math.max(0, Number(padding) || 0);
|
|
133
|
+
const width = Math.ceil(bounds.width + (inset * 2));
|
|
134
|
+
const height = Math.ceil(bounds.height + (inset * 2));
|
|
135
|
+
const viewBox = [
|
|
136
|
+
Math.floor(bounds.x - inset),
|
|
137
|
+
Math.floor(bounds.y - inset),
|
|
138
|
+
width,
|
|
139
|
+
height,
|
|
140
|
+
];
|
|
141
|
+
|
|
142
|
+
cleanedSvg.setAttribute('viewBox', viewBox.join(' '));
|
|
143
|
+
cleanedSvg.setAttribute('width', String(width));
|
|
144
|
+
cleanedSvg.setAttribute('height', String(height));
|
|
145
|
+
cleanedSvg.setAttribute('preserveAspectRatio', 'xMidYMid meet');
|
|
146
|
+
return cleanedSvg;
|
|
147
|
+
} catch {
|
|
148
|
+
return cleanedSvg;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export function createDiagramExportBaseName({
|
|
153
|
+
currentFilePath = '',
|
|
154
|
+
diagramKind = 'diagram',
|
|
155
|
+
sourceLine = '',
|
|
156
|
+
targetPath = '',
|
|
157
|
+
} = {}) {
|
|
158
|
+
const targetLeaf = getPathLeaf(targetPath);
|
|
159
|
+
if (targetLeaf) {
|
|
160
|
+
return stripVaultFileExtension(targetLeaf) || `${diagramKind}-diagram`;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const currentLeaf = getPathLeaf(currentFilePath);
|
|
164
|
+
const currentStem = stripVaultFileExtension(currentLeaf) || 'document';
|
|
165
|
+
const isStandaloneDiagram = (
|
|
166
|
+
(diagramKind === 'mermaid' && isMermaidFilePath(currentFilePath))
|
|
167
|
+
|| (diagramKind === 'plantuml' && isPlantUmlFilePath(currentFilePath))
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
if (isStandaloneDiagram) {
|
|
171
|
+
return currentStem;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (sourceLine) {
|
|
175
|
+
return `${currentStem}-${diagramKind}-L${sourceLine}`;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return `${currentStem}-${diagramKind}`;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export function createDiagramExportFileNames(options = {}) {
|
|
182
|
+
const baseName = createDiagramExportBaseName(options);
|
|
183
|
+
return {
|
|
184
|
+
baseName,
|
|
185
|
+
pngFileName: `${baseName}.png`,
|
|
186
|
+
svgFileName: `${baseName}.svg`,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export function exportSvgMarkupFromElement(svgElement) {
|
|
191
|
+
const cleanedSvg = cleanupExportSvg(svgElement);
|
|
192
|
+
return serializeSvgElement(cleanedSvg);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export function exportTrimmedSvgMarkupFromElement(svgElement, options = {}) {
|
|
196
|
+
return serializeSvgElement(trimExportSvgElement(svgElement, options));
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
function prepareMermaidExportSource(source) {
|
|
200
|
+
let text = String(source ?? '').replace(MERMAID_INIT_DIRECTIVE_PATTERN, '');
|
|
201
|
+
|
|
202
|
+
text = `%%{init: ${JSON.stringify(LIGHT_EXPORT_MERMAID_CONFIG)}}%%\n${text}`;
|
|
203
|
+
|
|
204
|
+
if (/^\s*gantt\b/m.test(text) && !/\btodayMarker\b/.test(text)) {
|
|
205
|
+
const lines = text.split('\n');
|
|
206
|
+
const ganttLineIndex = lines.findIndex((line) => /^\s*gantt\b/.test(line));
|
|
207
|
+
if (ganttLineIndex !== -1) {
|
|
208
|
+
lines.splice(ganttLineIndex + 1, 0, ' todayMarker off');
|
|
209
|
+
text = lines.join('\n');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return text;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export async function renderMermaidExportSvgMarkup(mermaid, source) {
|
|
217
|
+
if (!mermaid?.initialize || !mermaid?.run) {
|
|
218
|
+
throw new Error('Mermaid runtime is unavailable');
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
mermaid.initialize(LIGHT_EXPORT_MERMAID_CONFIG);
|
|
222
|
+
|
|
223
|
+
const renderHost = document.createElement('div');
|
|
224
|
+
renderHost.style.position = 'fixed';
|
|
225
|
+
renderHost.style.left = '-10000px';
|
|
226
|
+
renderHost.style.top = '0';
|
|
227
|
+
renderHost.style.width = '1200px';
|
|
228
|
+
renderHost.style.visibility = 'hidden';
|
|
229
|
+
renderHost.style.pointerEvents = 'none';
|
|
230
|
+
document.body.appendChild(renderHost);
|
|
231
|
+
|
|
232
|
+
try {
|
|
233
|
+
const diagram = document.createElement('div');
|
|
234
|
+
diagram.className = 'mermaid mermaid-export-node';
|
|
235
|
+
diagram.id = createMermaidExportId();
|
|
236
|
+
diagram.textContent = prepareMermaidExportSource(source);
|
|
237
|
+
renderHost.appendChild(diagram);
|
|
238
|
+
|
|
239
|
+
await mermaid.run({ nodes: [diagram] });
|
|
240
|
+
const svg = diagram.querySelector('svg');
|
|
241
|
+
if (!(svg instanceof SVGSVGElement)) {
|
|
242
|
+
throw new Error('Mermaid export returned no SVG');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return exportTrimmedSvgMarkupFromElement(svg, { padding: 24 });
|
|
246
|
+
} finally {
|
|
247
|
+
renderHost.remove();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export async function rasterizeSvgMarkupToPngBlob(svgMarkup) {
|
|
252
|
+
const safeSvgMarkup = sanitizeSvgMarkup(svgMarkup);
|
|
253
|
+
const image = await loadImage(encodeSvgDataUrl(safeSvgMarkup));
|
|
254
|
+
|
|
255
|
+
const probe = document.createElement('div');
|
|
256
|
+
probe.innerHTML = safeSvgMarkup;
|
|
257
|
+
const svgElement = probe.querySelector('svg');
|
|
258
|
+
const { width, height } = svgElement
|
|
259
|
+
? resolveSvgDimensions(svgElement)
|
|
260
|
+
: {
|
|
261
|
+
height: image.naturalHeight || 800,
|
|
262
|
+
width: image.naturalWidth || 1200,
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
const canvas = document.createElement('canvas');
|
|
266
|
+
canvas.width = Math.max(1, Math.ceil(width));
|
|
267
|
+
canvas.height = Math.max(1, Math.ceil(height));
|
|
268
|
+
|
|
269
|
+
const context = canvas.getContext('2d');
|
|
270
|
+
if (!context) {
|
|
271
|
+
throw new Error('Canvas is unavailable');
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
context.fillStyle = '#ffffff';
|
|
275
|
+
context.fillRect(0, 0, canvas.width, canvas.height);
|
|
276
|
+
context.drawImage(image, 0, 0, canvas.width, canvas.height);
|
|
277
|
+
return canvasToPngBlob(canvas);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export function downloadBlob(blob, fileName) {
|
|
281
|
+
const downloadUrl = URL.createObjectURL(blob);
|
|
282
|
+
const anchor = document.createElement('a');
|
|
283
|
+
anchor.href = downloadUrl;
|
|
284
|
+
anchor.download = fileName;
|
|
285
|
+
anchor.style.display = 'none';
|
|
286
|
+
document.body.appendChild(anchor);
|
|
287
|
+
anchor.click();
|
|
288
|
+
window.setTimeout(() => {
|
|
289
|
+
anchor.remove();
|
|
290
|
+
URL.revokeObjectURL(downloadUrl);
|
|
291
|
+
}, 30_000);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export async function writeBlobToClipboard(blob) {
|
|
295
|
+
if (typeof ClipboardItem !== 'function' || !navigator.clipboard?.write) {
|
|
296
|
+
throw new Error('Clipboard image copy is unavailable');
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
await navigator.clipboard.write([
|
|
300
|
+
new ClipboardItem({
|
|
301
|
+
[blob.type || 'image/png']: blob,
|
|
302
|
+
}),
|
|
303
|
+
]);
|
|
304
|
+
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { clamp } from '../domain/vault-utils.js';
|
|
2
2
|
import { setDiagramActionButtonIcon } from '../domain/diagram-action-icons.js';
|
|
3
|
+
import {
|
|
4
|
+
createDiagramExportFileNames,
|
|
5
|
+
downloadBlob,
|
|
6
|
+
rasterizeSvgMarkupToPngBlob,
|
|
7
|
+
renderMermaidExportSvgMarkup,
|
|
8
|
+
writeBlobToClipboard,
|
|
9
|
+
} from './diagram-preview-export.js';
|
|
3
10
|
import { DiagramPreviewHydrator } from './diagram-preview-hydrator.js';
|
|
4
11
|
import {
|
|
5
12
|
createMermaidPlaceholderCard,
|
|
@@ -37,6 +44,8 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
37
44
|
this.loader = null;
|
|
38
45
|
this.runtime = null;
|
|
39
46
|
this.shellRefits = new WeakMap();
|
|
47
|
+
this.shellResizeObservers = new WeakMap();
|
|
48
|
+
this.resizeObservers = new Set();
|
|
40
49
|
this.activeMaximizedShell = null;
|
|
41
50
|
this.maximizedRoot = null;
|
|
42
51
|
}
|
|
@@ -45,6 +54,7 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
45
54
|
this.cancelHydration();
|
|
46
55
|
this.preservedShells.clear();
|
|
47
56
|
this.clearActiveShell();
|
|
57
|
+
this.disconnectResizeObservers();
|
|
48
58
|
this.maximizedRoot?.remove();
|
|
49
59
|
this.maximizedRoot = null;
|
|
50
60
|
}
|
|
@@ -70,6 +80,36 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
70
80
|
}
|
|
71
81
|
}
|
|
72
82
|
|
|
83
|
+
disconnectResizeObservers() {
|
|
84
|
+
this.resizeObservers.forEach((observer) => observer.disconnect());
|
|
85
|
+
this.resizeObservers.clear();
|
|
86
|
+
this.shellResizeObservers = new WeakMap();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
disconnectShellResizeObserver(shell) {
|
|
90
|
+
const observer = this.shellResizeObservers.get(shell);
|
|
91
|
+
if (!observer) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
observer.disconnect();
|
|
96
|
+
this.resizeObservers.delete(observer);
|
|
97
|
+
this.shellResizeObservers.delete(shell);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
attachShellResizeObserver(shell, frame, onResize) {
|
|
101
|
+
this.disconnectShellResizeObserver(shell);
|
|
102
|
+
if (typeof ResizeObserver !== 'function' || !shell?.isConnected || !(frame instanceof HTMLElement)) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const observer = new ResizeObserver(() => onResize());
|
|
107
|
+
observer.observe(frame);
|
|
108
|
+
observer.observe(shell);
|
|
109
|
+
this.shellResizeObservers.set(shell, observer);
|
|
110
|
+
this.resizeObservers.add(observer);
|
|
111
|
+
}
|
|
112
|
+
|
|
73
113
|
syncActiveShell() {
|
|
74
114
|
if (
|
|
75
115
|
this.activeMaximizedShell?.isConnected
|
|
@@ -347,6 +387,7 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
347
387
|
}
|
|
348
388
|
|
|
349
389
|
hydratedShells.forEach((shell) => {
|
|
390
|
+
this.disconnectShellResizeObserver(shell);
|
|
350
391
|
this.shellRefits.delete(shell);
|
|
351
392
|
shell.removeAttribute('data-mermaid-hydrated');
|
|
352
393
|
shell.querySelector(':scope > .mermaid-toolbar')?.remove();
|
|
@@ -359,6 +400,43 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
359
400
|
});
|
|
360
401
|
}
|
|
361
402
|
|
|
403
|
+
async renderExportSvgMarkup(shell) {
|
|
404
|
+
const mermaid = await this.ensureMermaid();
|
|
405
|
+
try {
|
|
406
|
+
const source = shell.querySelector('.mermaid-source')?.textContent ?? '';
|
|
407
|
+
return await renderMermaidExportSvgMarkup(mermaid, source);
|
|
408
|
+
} finally {
|
|
409
|
+
this.configureMermaid(mermaid);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
async copyExportImage(shell, exportFileNames) {
|
|
414
|
+
try {
|
|
415
|
+
const { pngFileName } = exportFileNames();
|
|
416
|
+
const pngBlob = await rasterizeSvgMarkupToPngBlob(await this.renderExportSvgMarkup(shell));
|
|
417
|
+
try {
|
|
418
|
+
await writeBlobToClipboard(pngBlob);
|
|
419
|
+
this.renderer.toastController?.show?.('Diagram copied');
|
|
420
|
+
} catch {
|
|
421
|
+
downloadBlob(pngBlob, pngFileName);
|
|
422
|
+
this.renderer.toastController?.show?.('Clipboard image copy is unavailable here. Downloaded PNG instead.');
|
|
423
|
+
}
|
|
424
|
+
} catch {
|
|
425
|
+
this.renderer.toastController?.show?.('Failed to copy diagram');
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
async downloadExportSvg(shell, exportFileNames) {
|
|
430
|
+
try {
|
|
431
|
+
const { svgFileName } = exportFileNames();
|
|
432
|
+
const svgBlob = new Blob([await this.renderExportSvgMarkup(shell)], { type: 'image/svg+xml;charset=utf-8' });
|
|
433
|
+
downloadBlob(svgBlob, svgFileName);
|
|
434
|
+
this.renderer.toastController?.show?.('Diagram download started');
|
|
435
|
+
} catch {
|
|
436
|
+
this.renderer.toastController?.show?.('Failed to download diagram');
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
362
440
|
enhanceDiagram(shell, renderedDiagram) {
|
|
363
441
|
const svg = renderedDiagram.querySelector('svg');
|
|
364
442
|
if (!svg) {
|
|
@@ -368,18 +446,25 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
368
446
|
|
|
369
447
|
const toolbar = document.createElement('div');
|
|
370
448
|
toolbar.className = 'mermaid-toolbar diagram-preview-toolbar';
|
|
449
|
+
const leftGroup = document.createElement('div');
|
|
450
|
+
leftGroup.className = 'diagram-preview-toolbar-group diagram-preview-toolbar-group--zoom';
|
|
451
|
+
const rightGroup = document.createElement('div');
|
|
452
|
+
rightGroup.className = 'diagram-preview-toolbar-group diagram-preview-toolbar-group--actions';
|
|
371
453
|
|
|
372
454
|
const decreaseButton = this.createZoomButton('−', 'Zoom out');
|
|
373
455
|
const increaseButton = this.createZoomButton('+', 'Zoom in');
|
|
374
|
-
const resetButton = this.createZoomButton('
|
|
375
|
-
const
|
|
456
|
+
const resetButton = this.createZoomButton('', 'Reset zoom', { icon: 'fit' });
|
|
457
|
+
const copyButton = this.createZoomButton('', 'Copy image', { icon: 'copy' });
|
|
458
|
+
const downloadButton = this.createZoomButton('', 'Download SVG', { icon: 'download' });
|
|
459
|
+
const maximizeButton = this.createZoomButton('', 'Maximize diagram', { icon: 'maximize' });
|
|
376
460
|
maximizeButton.classList.add('mermaid-maximize-btn');
|
|
377
|
-
setDiagramActionButtonIcon(maximizeButton, 'maximize');
|
|
378
461
|
const zoomLabel = document.createElement('span');
|
|
379
462
|
zoomLabel.className = 'mermaid-zoom-label diagram-preview-zoom-label';
|
|
380
463
|
zoomLabel.setAttribute('aria-live', 'polite');
|
|
381
464
|
|
|
382
|
-
|
|
465
|
+
leftGroup.append(decreaseButton, zoomLabel, resetButton, increaseButton);
|
|
466
|
+
rightGroup.append(copyButton, downloadButton, maximizeButton);
|
|
467
|
+
toolbar.append(leftGroup, rightGroup);
|
|
383
468
|
|
|
384
469
|
const frame = document.createElement('div');
|
|
385
470
|
frame.className = 'mermaid-frame diagram-preview-frame';
|
|
@@ -389,6 +474,7 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
389
474
|
let defaultZoom = 1;
|
|
390
475
|
let zoomAnimationFrameId = null;
|
|
391
476
|
let resetZoomFrameId = null;
|
|
477
|
+
let layoutFrameId = null;
|
|
392
478
|
let hasManualZoom = false;
|
|
393
479
|
let lastAutoFitViewportWidth = 0;
|
|
394
480
|
let isPanning = false;
|
|
@@ -402,6 +488,13 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
402
488
|
svg.style.margin = '0 auto';
|
|
403
489
|
svg.style.maxWidth = 'none';
|
|
404
490
|
|
|
491
|
+
const exportFileNames = () => createDiagramExportFileNames({
|
|
492
|
+
currentFilePath: this.renderer.getSourceFilePath?.() ?? '',
|
|
493
|
+
diagramKind: 'mermaid',
|
|
494
|
+
sourceLine: shell.getAttribute('data-source-line') || '',
|
|
495
|
+
targetPath: shell.dataset.mermaidTarget || '',
|
|
496
|
+
});
|
|
497
|
+
|
|
405
498
|
const calculateDefaultZoom = () => {
|
|
406
499
|
const viewport = getFrameViewportSize(frame);
|
|
407
500
|
if (!Number.isFinite(baseWidth) || baseWidth <= 0 || viewport.width <= 0) {
|
|
@@ -512,33 +605,44 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
512
605
|
if (resetZoomFrameId) {
|
|
513
606
|
cancelAnimationFrame(resetZoomFrameId);
|
|
514
607
|
}
|
|
608
|
+
if (layoutFrameId) {
|
|
609
|
+
cancelAnimationFrame(layoutFrameId);
|
|
610
|
+
}
|
|
515
611
|
|
|
516
612
|
resetZoomFrameId = requestAnimationFrame(() => {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
613
|
+
layoutFrameId = requestAnimationFrame(() => {
|
|
614
|
+
layoutFrameId = requestAnimationFrame(() => {
|
|
615
|
+
layoutFrameId = null;
|
|
616
|
+
resetZoomFrameId = null;
|
|
617
|
+
if (!shell.isConnected) {
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
const viewportWidth = getFrameViewportSize(frame).width;
|
|
622
|
+
const viewportChanged = Math.abs(viewportWidth - lastAutoFitViewportWidth) > 1;
|
|
623
|
+
if (!force && hasManualZoom) {
|
|
624
|
+
return;
|
|
625
|
+
}
|
|
626
|
+
if (!force && viewportWidth > 0 && lastAutoFitViewportWidth > 0 && !viewportChanged) {
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
resetZoomToFit();
|
|
631
|
+
});
|
|
632
|
+
});
|
|
532
633
|
});
|
|
533
634
|
};
|
|
534
635
|
|
|
535
636
|
this.shellRefits.set(shell, scheduleResetZoomToFit);
|
|
637
|
+
this.attachShellResizeObserver(shell, frame, () => scheduleResetZoomToFit());
|
|
536
638
|
|
|
537
639
|
decreaseButton.addEventListener('click', () => zoomBy(-MERMAID_ZOOM.step));
|
|
538
640
|
increaseButton.addEventListener('click', () => zoomBy(MERMAID_ZOOM.step));
|
|
539
641
|
resetButton.addEventListener('click', () => {
|
|
540
|
-
|
|
642
|
+
scheduleResetZoomToFit({ force: true });
|
|
541
643
|
});
|
|
644
|
+
copyButton.addEventListener('click', () => this.copyExportImage(shell, exportFileNames));
|
|
645
|
+
downloadButton.addEventListener('click', () => this.downloadExportSvg(shell, exportFileNames));
|
|
542
646
|
|
|
543
647
|
const syncMaximizeButtonState = () => {
|
|
544
648
|
const isMaximized = shell.classList.contains('is-maximized');
|
|
@@ -598,6 +702,12 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
598
702
|
|
|
599
703
|
isPanning = false;
|
|
600
704
|
frame.classList.remove('is-dragging');
|
|
705
|
+
window.removeEventListener('pointerup', stopPanning, true);
|
|
706
|
+
window.removeEventListener('pointercancel', stopPanning, true);
|
|
707
|
+
window.removeEventListener('mouseup', stopPanning, true);
|
|
708
|
+
window.removeEventListener('touchend', stopPanning, true);
|
|
709
|
+
window.removeEventListener('touchcancel', stopPanning, true);
|
|
710
|
+
window.removeEventListener('blur', stopPanning, true);
|
|
601
711
|
|
|
602
712
|
if (activePointerId !== null && typeof frame.releasePointerCapture === 'function') {
|
|
603
713
|
try {
|
|
@@ -628,7 +738,19 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
628
738
|
panStartScrollTop = frame.scrollTop;
|
|
629
739
|
|
|
630
740
|
frame.classList.add('is-dragging');
|
|
631
|
-
|
|
741
|
+
window.addEventListener('pointerup', stopPanning, true);
|
|
742
|
+
window.addEventListener('pointercancel', stopPanning, true);
|
|
743
|
+
window.addEventListener('mouseup', stopPanning, true);
|
|
744
|
+
window.addEventListener('touchend', stopPanning, true);
|
|
745
|
+
window.addEventListener('touchcancel', stopPanning, true);
|
|
746
|
+
window.addEventListener('blur', stopPanning, true);
|
|
747
|
+
if (typeof frame.setPointerCapture === 'function') {
|
|
748
|
+
try {
|
|
749
|
+
frame.setPointerCapture(event.pointerId);
|
|
750
|
+
} catch {
|
|
751
|
+
// Safari can reject pointer capture during rapid layout transitions.
|
|
752
|
+
}
|
|
753
|
+
}
|
|
632
754
|
event.preventDefault();
|
|
633
755
|
});
|
|
634
756
|
|
|
@@ -644,6 +766,10 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
644
766
|
frame.addEventListener('pointerup', stopPanning);
|
|
645
767
|
frame.addEventListener('pointercancel', stopPanning);
|
|
646
768
|
frame.addEventListener('lostpointercapture', stopPanning);
|
|
769
|
+
frame.addEventListener('mouseleave', stopPanning);
|
|
770
|
+
frame.addEventListener('mouseup', stopPanning);
|
|
771
|
+
frame.addEventListener('touchend', stopPanning);
|
|
772
|
+
frame.addEventListener('touchcancel', stopPanning);
|
|
647
773
|
|
|
648
774
|
frame.appendChild(svg);
|
|
649
775
|
const sourceNode = shell.querySelector('.mermaid-source');
|
|
@@ -675,13 +801,17 @@ export class MermaidPreviewHydrator extends DiagramPreviewHydrator {
|
|
|
675
801
|
});
|
|
676
802
|
}
|
|
677
803
|
|
|
678
|
-
createZoomButton(label, ariaLabel) {
|
|
804
|
+
createZoomButton(label, ariaLabel, { icon = '' } = {}) {
|
|
679
805
|
const button = document.createElement('button');
|
|
680
806
|
button.type = 'button';
|
|
681
807
|
button.className = 'mermaid-zoom-btn ui-preview-action';
|
|
682
808
|
button.setAttribute('aria-label', ariaLabel);
|
|
683
809
|
button.title = ariaLabel;
|
|
684
|
-
|
|
810
|
+
if (icon) {
|
|
811
|
+
setDiagramActionButtonIcon(button, icon);
|
|
812
|
+
} else {
|
|
813
|
+
button.textContent = label;
|
|
814
|
+
}
|
|
685
815
|
return button;
|
|
686
816
|
}
|
|
687
817
|
}
|