collabmd 0.1.52 → 0.1.55
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/bin/collabmd.js +22 -40
- package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-cMeDxAEL.js +1 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-DxNxad6-.js → abnfDiagram-VCTEODGH-D2UdmYvj.js} +1 -1
- package/dist/client/assets/{abnfDiagram-O67JEVCF-Dwt6a0Ds.js → abnfDiagram-YUKMZFIV-DbmU4Q-X.js} +1 -1
- package/dist/client/assets/api-client-utils-C5ESDKMG.js +1 -0
- package/dist/client/assets/architecture-7GRP2DOG-BBwRXFv3.js +1 -1
- package/dist/client/assets/architecture-WOLXFQ4H-C0NxYiG7.js +1 -0
- package/dist/client/assets/{architectureDiagram-NJMV4G6O-D5CGiX3G.js → architectureDiagram-47P4ROYG-C7OjXK9S.js} +3 -3
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-C1uvg5id.js → architectureDiagram-5GKGNRK7-CSiUzzeN.js} +1 -1
- package/dist/client/assets/base-CaIEJUF9.css +1 -0
- package/dist/client/assets/{blockDiagram-BEXU5L5S-BgTM0var.js → blockDiagram-E7TT5TSB-DMG-YlZw.js} +3 -3
- package/dist/client/assets/{blockDiagram-I7D4REHJ-B2YonsoG.js → blockDiagram-I7D4REHJ-sXfAgK2w.js} +1 -1
- package/dist/client/assets/{browser-BKLM0ThC-IxjwuOIz-C0mP17s1.js → browser-BKLM0ThC-BCLQGPD6-CcMAHZXi.js} +1 -1
- package/dist/client/assets/{c4Diagram-7LVT6UL2-r4IwomZm.js → c4Diagram-7LVT6UL2-C88V_K-8.js} +1 -1
- package/dist/client/assets/{c4Diagram-YGBWAQC7-_xZPrNkB.js → c4Diagram-CRA5TL53-D3F9ElJv.js} +2 -2
- package/dist/client/assets/canvasEditor-BJkwGzO1.css +1 -0
- package/dist/client/assets/canvasEditor-sBK7KfrD.js +1 -0
- package/dist/client/assets/{chunk-6AZGARVD--pTGpDnx.js → chunk-24IY7LWP-flnn6SWX.js} +1 -1
- package/dist/client/assets/chunk-2BW5OAIV-CNFO1U_e.js +10 -0
- package/dist/client/assets/{chunk-2E4U76K2-CIQUuV9n.js → chunk-2E4U76K2-DEnS5IbF.js} +1 -1
- package/dist/client/assets/{chunk-5V3GS4D5-B5uC2oxu.js → chunk-3M4EKCLJ-D-sZGCtO.js} +1 -1
- package/dist/client/assets/chunk-3YJQHVM4-Ctp__8EK.js +2 -0
- package/dist/client/assets/{chunk-7PRAP22T-9uTvtc_-.js → chunk-4EA7E6EY-bU4wRJot.js} +1 -1
- package/dist/client/assets/{chunk-4HAMMTFA-q0ldNVvr.js → chunk-4HAMMTFA-CQy6Skzw.js} +1 -1
- package/dist/client/assets/{chunk-6K3QC6MW-JnuvEGV4.js → chunk-4S7OKTRW-BpUW13a3.js} +1 -1
- package/dist/client/assets/{chunk-ICYGCRZG-odvlDZyA.js → chunk-53FOQ5SW-5lPdGYP4.js} +1 -1
- package/dist/client/assets/{chunk-75Z2AOVW-DitkSoSG.js → chunk-75Z2AOVW-BRdhvVTZ.js} +1 -1
- package/dist/client/assets/{chunk-GWA4HPMP-CGmv2yIq.js → chunk-7TKQ45FW-rA2u-WUl.js} +1 -1
- package/dist/client/assets/{chunk-GTNCS2PH-ChgkzEIi.js → chunk-AW2ZBBNX-DL0KGAdi.js} +3 -3
- package/dist/client/assets/{chunk-747NJXEK-BjqqAsS9.js → chunk-BP2KR52E-DAQ1pzDV.js} +1 -1
- package/dist/client/assets/{chunk-CLGD4ZFX-BfYJtJm1.js → chunk-CLGD4ZFX-DJiSE0gD.js} +1 -1
- package/dist/client/assets/{chunk-5DYCD2WN-BKWCKnK-.js → chunk-DBDB3WZW-CXleNlok.js} +1 -1
- package/dist/client/assets/{chunk-DU6HZSFF-CWlP1Dk_.js → chunk-DU6HZSFF-C-18UZkS.js} +1 -1
- package/dist/client/assets/{chunk-MBY4JIJT-DTJ4UcAm.js → chunk-E2ZNV5FY-D_07zfWd.js} +3 -3
- package/dist/client/assets/chunk-EU5HNXII-CETVNUXF.js +213 -0
- package/dist/client/assets/{chunk-F27PBJKO-DPcsPcEs.js → chunk-F27PBJKO-_beIJos4.js} +1 -1
- package/dist/client/assets/{chunk-2ZTRR5NV-DcPRfelM.js → chunk-F6S3BTY2-DVWKCAHp.js} +1 -1
- package/dist/client/assets/{chunk-RUX4WMZV-BGnd3s_C.js → chunk-FLFP27SU-CydzbSsY.js} +2 -2
- package/dist/client/assets/chunk-FVRAUYC3-C7b9SJ81.js +1 -0
- package/dist/client/assets/{chunk-GMAD6QVW-Bgk8qnty.js → chunk-GMAD6QVW-DnZH7DxV.js} +1 -1
- package/dist/client/assets/{chunk-GVQU2GXP-CQ8cl-Uu.js → chunk-GVQU2GXP-B0Vm415C.js} +1 -1
- package/dist/client/assets/chunk-H5A3YXKD-ChP7mNJq.js +41 -0
- package/dist/client/assets/{chunk-742MDFTN-D1nh6vNv.js → chunk-HJ2JQQFS-DQX7RePR.js} +1 -1
- package/dist/client/assets/{chunk-NETBCI7D-CmUwDWUZ.js → chunk-HTAEGDNF-C0PA_N-c.js} +1 -1
- package/dist/client/assets/{chunk-IMKFNOWR-CBqxfpcP.js → chunk-IMKFNOWR-DoO8IHzF.js} +1 -1
- package/dist/client/assets/{chunk-IH6LHLGP-BNevEHZK.js → chunk-KPI5JJXK-B2ld5-w4.js} +1 -1
- package/dist/client/assets/{chunk-WEXAMYUT-DDlVNp8J.js → chunk-KQW6MTUR-OQ4MyMr_.js} +1 -1
- package/dist/client/assets/{chunk-L3NEJ4N5-BflzkdTI.js → chunk-L3NEJ4N5-CvHossEU.js} +1 -1
- package/dist/client/assets/chunk-NGNAAXSQ-DqoPQk1a.js +136 -0
- package/dist/client/assets/{chunk-UA2S7LBM-DicYDjDM.js → chunk-NTY3LDVX-CVWLK_fh.js} +1 -1
- package/dist/client/assets/{chunk-UY3FDG6J-QT-rkt0y.js → chunk-OD3NTWWA-Dz9nCUGX.js} +1 -1
- package/dist/client/assets/{chunk-OSK3NFVY-DqeKV_pg.js → chunk-OSK3NFVY-C3JOcBao.js} +1 -1
- package/dist/client/assets/{chunk-P2QGCYS3-BA--DhpW.js → chunk-P2QGCYS3-Bfo8qS8r.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-V_NEc45n.js → chunk-POPQ4Y6H-sv6rCftH.js} +1 -1
- package/dist/client/assets/{chunk-PWAF6VOD-D_kLse-N.js → chunk-PWAF6VOD-B-AT-L2H.js} +1 -1
- package/dist/client/assets/{chunk-3Z5EZCMW-BAnA6eQ7.js → chunk-QNH66VMT-Cb9xxTwQ.js} +1 -1
- package/dist/client/assets/{chunk-SHT3W25Y-YM3S-A_M.js → chunk-SHT3W25Y-C1lu518T.js} +1 -1
- package/dist/client/assets/{chunk-GNY47TPC-CTrH5O5R.js → chunk-SVEVUXB4-BnM-LXop.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-DdNhDOmW.js → chunk-SVP7TREG-CKqt0syj.js} +1 -1
- package/dist/client/assets/{chunk-TICWLB2K-BGGgCr4x.js → chunk-TICWLB2K-D2ZnWAfF.js} +1 -1
- package/dist/client/assets/{chunk-TLUHSLCS-DCZhIDYA.js → chunk-TLUHSLCS-BMIhqv1X.js} +1 -1
- package/dist/client/assets/{chunk-6EIED4P4-DBVWq7Tz.js → chunk-TPMEZKFX-DIPHIqGb.js} +1 -1
- package/dist/client/assets/{chunk-6TQVIW2G-BSj0l_pu.js → chunk-VPELOWWC-DXayM28-.js} +1 -1
- package/dist/client/assets/chunk-VPRB5NB3-BqaJfj_v.js +127 -0
- package/dist/client/assets/{chunk-I5DQTOEV-aBZooNp1.js → chunk-VTWWFHGB-SZnJiyWY.js} +1 -1
- package/dist/client/assets/{chunk-KI3K4JFJ-FTtDwx3-.js → chunk-VZTHESGH-eHyXmK8W.js} +1 -1
- package/dist/client/assets/{chunk-7INBJB4K-CDmiHbaX.js → chunk-XC4XBNZT-D9oehSn8.js} +20 -20
- package/dist/client/assets/{chunk-XHIXRSVI-DN_fEwws.js → chunk-YK26KJH5-DVy3MGMd.js} +1 -1
- package/dist/client/assets/{chunk-6AEJRKK7-DTVZj5bY.js → chunk-Z6ETV63D-DOcrnz-P.js} +1 -1
- package/dist/client/assets/{chunk-OUJLGHUK-75UXlPjl.js → chunk-ZO67DCNQ-BAOMIkLF.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-BmETdFmC.js +1 -0
- package/dist/client/assets/{classDiagram-v2-NBCMYWYE-3TQORq33.js → classDiagram-v2-K4WV4PDN-eaadfJDB.js} +3 -3
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-BmETdFmC.js +1 -0
- package/dist/client/assets/{comment-markdown-renderer-Bxi_JRSR.js → comment-markdown-renderer-CpBKaj7H.js} +1 -1
- package/dist/client/assets/comment-thread-store-DUQsWtnu.js +1 -0
- package/dist/client/assets/comment-threads-DnfkLVJA.js +4 -0
- package/dist/client/assets/comment-ui-shared-D_pgPUti.js +7 -0
- package/dist/client/assets/cynefin-EF2NZ3EQ-DVkJeZ8i.js +1 -0
- package/dist/client/assets/cynefin-OW5HDTMX-CF3N9j1_.js +1 -1
- package/dist/client/assets/{cynefinDiagram-VND7K2PF-DwfMZ3vk.js → cynefinDiagram-3GCD6N5R-DjpAsBHC.js} +1 -1
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-DTnLZaO7.js → cynefinDiagram-5FMLGOSQ-D2rFQG67.js} +1 -1
- package/dist/client/assets/dagre-C-rnJpZF.js +1 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-Vtyx08Qh.js → dagre-GXQ25YYZ-Cku9eia9.js} +2 -2
- package/dist/client/assets/{dagre-6A5THRUB-DewyAGK6.js → dagre-W4DXFKR2-DOMOIsPd.js} +2 -2
- package/dist/client/assets/deferred-collab-C9aa9cvT.css +1 -0
- package/dist/client/assets/deferred-git-BPQ-UgrN.css +1 -0
- package/dist/client/assets/deferred-preview-B-RebLry.css +1 -0
- package/dist/client/assets/{diagram-22UHCM2B-DbZirFfl.js → diagram-2UJZ2QOL-D8WvnEyx.js} +6 -6
- package/dist/client/assets/{diagram-3UASUU5V-DmhdYv6_.js → diagram-OVF4WLC6-D8_escYE.js} +2 -2
- package/dist/client/assets/{diagram-CDSNMT55-D_qyS11R.js → diagram-PFPMY2P6-B1izZfrN.js} +3 -3
- package/dist/client/assets/{diagram-S7CK7UJ4-CGTzfo2f.js → diagram-S7CK7UJ4-BzicH2t-.js} +1 -1
- package/dist/client/assets/{diagram-MLGK6HIB-DIBG6Ivu.js → diagram-UMYRVEAY-Djf7WDjZ.js} +1 -1
- package/dist/client/assets/{diagram-UQ7AKVKN-CWZS8QtB.js → diagram-UQ7AKVKN-DqX4zTtr.js} +1 -1
- package/dist/client/assets/{diagram-VSXAHHWV-DaO1nOZF.js → diagram-VSXAHHWV-DnVbfI4Y.js} +1 -1
- package/dist/client/assets/{diagram-VX7I27RA-B54P6Cyf.js → diagram-VX7I27RA-D-Dj0TQC.js} +1 -1
- package/dist/client/assets/{diagram-MPIPVDR6-D9XsALDV.js → diagram-YEKJPTXX-B40bP3Yr.js} +2 -2
- package/dist/client/assets/{diagram-Z3DM3KII-Cl2EXiXp.js → diagram-Z3DM3KII-_iT7Uz5p.js} +1 -1
- package/dist/client/assets/diagram-ZIFT7M5P-BUUK0oNw.js +3 -0
- package/dist/client/assets/{direct-engine-DdrQKpgq-4QysbH_V.js → direct-engine-DVLMOJWp-DWtWIifK.js} +1 -1
- package/dist/client/assets/dist-26Ce-5t4.js +1 -0
- package/dist/client/assets/dist-8MLNn-I6.js +1 -0
- package/dist/client/assets/dist-Amm5Pr1C.js +1 -0
- package/dist/client/assets/dist-BXXPaoUV.js +1 -0
- package/dist/client/assets/{dist-zHDLm1oE.js → dist-Bkb-_VdB.js} +1 -1
- package/dist/client/assets/dist-Bl4yuUS9.js +1 -0
- package/dist/client/assets/{dist-CKf7LlAo.js → dist-C2CGvCPd.js} +1 -1
- package/dist/client/assets/dist-C2niyEh0.js +1 -0
- package/dist/client/assets/{dist-Y6zYRI-A.js → dist-CFCSUmJk.js} +1 -1
- package/dist/client/assets/dist-CHUI56fT.js +6 -0
- package/dist/client/assets/dist-CJh3Qrid.js +13 -0
- package/dist/client/assets/{dist-Ch6Sr9KF.js → dist-CKxETpSC.js} +3 -3
- package/dist/client/assets/dist-CSHJthAI.js +2 -0
- package/dist/client/assets/dist-CbKnZGN4.js +1 -0
- package/dist/client/assets/{dist-BVCNc-Es.js → dist-Cik4RJXj.js} +1 -1
- package/dist/client/assets/{dist-DGa-2MNX.js → dist-CqkAY6Ot.js} +2 -2
- package/dist/client/assets/dist-D2ql2LCd.js +1 -0
- package/dist/client/assets/{dist-CvVoyTRF.js → dist-D47MOYFN.js} +1 -1
- package/dist/client/assets/dist-DBhUaexM.js +1 -0
- package/dist/client/assets/dist-DJux6Vc5.js +1 -0
- package/dist/client/assets/{dist-CXOUa90Q.js → dist-DLNdMWPH.js} +1 -1
- package/dist/client/assets/dist-DPJj-Y3l.js +1 -0
- package/dist/client/assets/{dist-DI6c02Da.js → dist-DRYFMufe.js} +6 -6
- package/dist/client/assets/{dist-CUsXdnU4.js → dist-DTGcVSU8.js} +1 -1
- package/dist/client/assets/dist-DlOxjzWi.js +9 -0
- package/dist/client/assets/{dist-BfpAc922.js → dist-DogjjM_B.js} +1 -1
- package/dist/client/assets/dist-Dyv_RvyB.js +23 -0
- package/dist/client/assets/dist-FUFeH5Cx.js +1 -0
- package/dist/client/assets/dist-It70ktCU.js +1 -0
- package/dist/client/assets/dist-QMvcnJHf.js +1 -0
- package/dist/client/assets/dist-QN1K2czv.js +11 -0
- package/dist/client/assets/dist-W8ilOKl3.js +1 -0
- package/dist/client/assets/dist-_17-t9qP.js +1 -0
- package/dist/client/assets/{dist-CsQTfQFi.js → dist-uE774WWs.js} +1 -1
- package/dist/client/assets/document-formatter-DtXmKZcy.js +1 -0
- package/dist/client/assets/drawioEditor-DO6IOaJ1.js +9 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-PfC84FyI.js → ebnfDiagram-PWID7BFC-IemGPf9X.js} +1 -1
- package/dist/client/assets/{ebnfDiagram-ZINNZB2B-DYvm_QtE.js → ebnfDiagram-VR2GEFS7-9fXqy1DI.js} +1 -1
- package/dist/client/assets/editor-session-CPsqXY_A.js +13 -0
- package/dist/client/assets/elk-IJKZMXRS-DsbrbBYg.js +27 -0
- package/dist/client/assets/embedded-editor-base-C44ZcCZv.css +1 -0
- package/dist/client/assets/{embedpdf-DyOonRvx.js → embedpdf-BfUI-3pv.js} +1 -1
- package/dist/client/assets/{embedpdf-DA4bA119-DsoNiPlQ.js → embedpdf-cl9qiF45-CLMxJTMP.js} +3 -3
- package/dist/client/assets/en-7ZVUCEYH-C_VXKxxb.js +1 -0
- package/dist/client/assets/{erDiagram-OPXOYQCR-o8GRv8A_.js → erDiagram-O2IAPWRE-Cdadm-HN.js} +2 -2
- package/dist/client/assets/{erDiagram-RLTQ6QDP-C9cJl5NB.js → erDiagram-RLTQ6QDP-CGGmjm8t.js} +1 -1
- package/dist/client/assets/{estree-DCT3Jm65.js → estree-DGmLqopC.js} +17 -17
- package/dist/client/assets/eventmodeling-K75KTNOO-BWBlZ5cR.js +1 -0
- package/dist/client/assets/eventmodeling-NTZA5JFV-CDy1bN6j.js +1 -1
- package/dist/client/assets/excalidraw-element-link-NQnskRkm.js +1 -0
- package/dist/client/assets/excalidraw-scene-DLlw4jyc.js +1 -0
- package/dist/client/assets/excalidrawEditor-DiKOIudt.css +1 -0
- package/dist/client/assets/excalidrawEditor-W2lZ5Mej.js +9 -0
- package/dist/client/assets/export-page-Bomh9oEr.js +46 -0
- package/dist/client/assets/exportDocument-BFIOECJ3.js +2 -0
- package/dist/client/assets/exportDocument-D0mONgQ4.css +1 -0
- package/dist/client/assets/file-kind-BGxTVHan.js +1 -0
- package/dist/client/assets/{file-search-3hYF4cYa.js → file-search-Dk2O14Vw.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-DcVVYJUZ.js +1 -0
- package/dist/client/assets/flowDiagram-OXPTDLAJ-Dy6y46oF.js +1 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-x40PW0Ah.js → ganttDiagram-EL5Y4UJY-Duu4KnsU.js} +1 -1
- package/dist/client/assets/ganttDiagram-R7TSEDQI-BWy52pjn.js +292 -0
- package/dist/client/assets/gitGraph-4MIJSDKK-B-rpDYbz.js +1 -1
- package/dist/client/assets/gitGraph-VSP46ZUC-1499lQAI.js +1 -0
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-ahsNaZsp.js → gitGraphDiagram-WWUBYQGX-CaJ0vC1a.js} +1 -1
- package/dist/client/assets/gitGraphDiagram-XJZIOB7I-DJwp9ilx.js +106 -0
- package/dist/client/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/client/assets/{html-CBXMuS97.js → html-BryNQ_yx.js} +6 -6
- package/dist/client/assets/image-6XY3GD3F-DCWbu6d4.js +1 -0
- package/dist/client/assets/image-lightbox-controller-DAcXEXxT.js +184 -0
- package/dist/client/assets/index-CglpXOg7.css +1 -0
- package/dist/client/assets/index-D3WGkxfI.js +960 -0
- package/dist/client/assets/info-A6RAGUB7-BlutK7BT.js +1 -1
- package/dist/client/assets/info-OHQRW6UA-BDFQOo4H.js +1 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-MrZyptIy.js → infoDiagram-27XIBGKW-DBJh7QOu.js} +1 -1
- package/dist/client/assets/{infoDiagram-VRGFBTTK-KkUjDRAQ.js → infoDiagram-5W2HQ5XZ-DmWsqJ0w.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-Bnt9yM0O.js → ishikawaDiagram-5VMMS53U-CeEbSJem.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-OU5B5YK6-Di9BcpOY.js → ishikawaDiagram-K3B6WC7H-DH1NI35G.js} +2 -2
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-Bl0abK1r.js → journeyDiagram-3NMN7TZE-BoIEEr6U.js} +1 -1
- package/dist/client/assets/{journeyDiagram-ZHPQQLJL-J-sGrs9e.js → journeyDiagram-COXZFDF6-CnHV2f9V.js} +3 -3
- package/dist/client/assets/{kanban-definition-PNTS6WVX-5ZDV_yIa.js → kanban-definition-P3RFRI5V-Cxvn5ZAG.js} +4 -4
- package/dist/client/assets/{kanban-definition-UXKFOSKX-DMgUfNt0.js → kanban-definition-UXKFOSKX-BY16Tgbr.js} +1 -1
- package/dist/client/assets/keyboard-shortcuts-BWNCBJqw.js +1 -0
- package/dist/client/assets/lobby-presence-DNNXcuwR.js +1 -0
- package/dist/client/assets/{markdown-Bo71X2X2.js → markdown-DU84620G.js} +17 -17
- package/dist/client/assets/markdown-headings-zYEUahfW.js +41 -0
- package/dist/client/assets/{markdown-math-CyyBVuDO.js → markdown-math-B96cnrz1.js} +11 -11
- package/dist/client/assets/{mermaid-parser.core-Bpogunsh.js → mermaid-parser.core-R-uwU5kf.js} +3 -3
- package/dist/client/assets/{mermaid-parser.core-DBy--Jc0.js → mermaid-parser.core-mE6t1qEO.js} +1 -1
- package/dist/client/assets/mermaid.core-D8Z6LN7O.js +10 -0
- package/dist/client/assets/{mindmap-definition-NLK3R4M7-ByVb-0vj.js → mindmap-definition-LZFPQGKD-DVfFenfJ.js} +3 -3
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-DBZN5_GH.js → mindmap-definition-YA3MSWOX-DtiE80UJ.js} +1 -1
- package/dist/client/assets/packet-AYTQ26CC-DvbY8dI6.js +1 -1
- package/dist/client/assets/packet-JDAUHWVQ-DJ9K2MA4.js +1 -0
- package/dist/client/assets/{pdfium-RAgkpwfK.wasm → pdfium-BJ2Yip8Q.wasm} +0 -0
- package/dist/client/assets/{pegDiagram-GJSIUBJH-aost1sSO.js → pegDiagram-BGZESJAR-DxfvEcwv.js} +1 -1
- package/dist/client/assets/{pegDiagram-XKGWAZYB-DRo8CZu3.js → pegDiagram-XKGWAZYB-CyozY-Kt.js} +1 -1
- package/dist/client/assets/pie-WAS4IAKB-DWSm9SSD.js +1 -1
- package/dist/client/assets/pie-XZMESJXO-CQIQasY-.js +1 -0
- package/dist/client/assets/{pieDiagram-5QR66LMP-BICdpEuz.js → pieDiagram-CAPJLFHJ-CRlMcrv3.js} +2 -2
- package/dist/client/assets/{pieDiagram-E7YTZNPT-CZThaHsc.js → pieDiagram-E7YTZNPT-BRdmTkDq.js} +1 -1
- package/dist/client/assets/preload-helper-CYtfOYgs.js +1 -0
- package/dist/client/assets/preview-render-compiler-D_aJv7Ew.js +3 -0
- package/dist/client/assets/{preview-render-worker-BI2bFVqM.js → preview-render-worker-dFNyrVyB.js} +47 -43
- package/dist/client/assets/prod-ItolaHmf.js +145 -0
- package/dist/client/assets/prod-rdly4JJQ.js +1 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-C5iowkl_.js → quadrantDiagram-AXDQQJYC-7QyPIXkF.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-O4NWA36T-Bgx5bF97.js → quadrantDiagram-GDMTTRAM-DE30uqTl.js} +3 -3
- package/dist/client/assets/quick-switcher-controller-DsK70I7K.js +1 -0
- package/dist/client/assets/radar-ABXABTNO-ByfpCXh9.js +1 -0
- package/dist/client/assets/radar-RG4KPBEZ-BfNQUEQy.js +1 -1
- package/dist/client/assets/railroad-74A4TZTK-BaQ6U6eJ.js +1 -1
- package/dist/client/assets/railroad-I3PHUGI6-CTUn9HhI.js +1 -0
- package/dist/client/assets/railroad-abnf-HS5TGJTU-BJ3KZw7J.js +1 -1
- package/dist/client/assets/railroad-abnf-LNEFI6M7-Ct-b-y0F.js +1 -0
- package/dist/client/assets/railroad-ebnf-DWYD2UWJ-BZMYMWOe.js +1 -0
- package/dist/client/assets/railroad-ebnf-LZEXJU2U-DA0sEq7w.js +1 -1
- package/dist/client/assets/railroad-peg-JR7BVNR7-Dj23PxYc.js +1 -0
- package/dist/client/assets/railroad-peg-WCYAUIDC-DCmlICzO.js +1 -1
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-BTt_rKjT.js → railroadDiagram-O6MQD6OU-BPk3RS2D.js} +1 -1
- package/dist/client/assets/{railroadDiagram-XR7U4H2S-DbVoNgSz.js → railroadDiagram-SM67HX2B-CZRXJ647.js} +1 -1
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-BkvazG7r.js → requirementDiagram-BXWQKSXE-BRwfym6z.js} +1 -1
- package/dist/client/assets/{requirementDiagram-PLB6GJNP-BT0j9C40.js → requirementDiagram-X7JNWC4A-BofCuLJA.js} +4 -4
- package/dist/client/assets/runtime-config-CvrkHb0n.js +1 -0
- package/dist/client/assets/runtime-paths-qQGhzNx4.js +1 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-C_IemB9h.js → sankeyDiagram-P5KCCOFB-D4LcrKpW.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-IPEJSGJF-X1BCUIrf.js → sankeyDiagram-UM26HJRW-CLKMDbej.js} +3 -3
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-CxFBgLGd.js → sequenceDiagram-WJ2MYXX4-DQjtv-Bs.js} +1 -1
- package/dist/client/assets/sequenceDiagram-ZO4K6R2Y-CDP_m6ma.js +169 -0
- package/dist/client/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
- package/dist/client/assets/sizeCapture-INFHLROL-BMR1ovSU.js +1 -0
- package/dist/client/assets/src-D5mvpivG.js +2 -0
- package/dist/client/assets/{standalone-6z5x8CWe.js → standalone-D_lg5NC9.js} +1 -1
- package/dist/client/assets/{stateDiagram-D77RDMKH-BaSQ6Owj.js → stateDiagram-D77RDMKH-DSMvV-kF.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-ClmOOUsT.js +1 -0
- package/dist/client/assets/{stateDiagram-v2-GCMORJYK-CsVcfwVp.js → stateDiagram-v2-TBUQTH76-Dc5-FKzd.js} +2 -2
- package/dist/client/assets/{swimlanes-42K2YHIH-CALFEmiS.js → swimlanes-42K2YHIH-BUz31lO3.js} +1 -1
- package/dist/client/assets/{swimlanes-2SLR337P-CnYTVqRX.js → swimlanes-N4OXWK64-Dd3dFdPD.js} +1 -1
- package/dist/client/assets/swimlanesDiagram-K3J5GTZL-Bz9gFdls.js +8 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DoDs3zod.js +8 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-zse-5Dbm.js → timeline-definition-24CTP7MA-BvqCvSjy.js} +1 -1
- package/dist/client/assets/{timeline-definition-EJHVYXUP-BhqPlKkN.js → timeline-definition-YOQAKGHF-D2XWPSLs.js} +3 -3
- package/dist/client/assets/treeView-D4JQ5SDB-DcX7Bx0H.js +1 -0
- package/dist/client/assets/treeView-Q6P3EWNA-BvHOzbu9.js +1 -1
- package/dist/client/assets/treemap-SAJKECNS-BcCHmcAX.js +1 -0
- package/dist/client/assets/treemap-WGGIJYW6-oety7paS.js +1 -1
- package/dist/client/assets/usecaseDiagram-VIAY4XPW-CDe-IMjS.js +328 -0
- package/dist/client/assets/vault-api-client-DrRW0QwO.js +7 -0
- package/dist/client/assets/{vennDiagram-4TSXK5OY-DgHr6cJD.js → vennDiagram-4TSXK5OY-BW6Qp12d.js} +1 -1
- package/dist/client/assets/{vennDiagram-UO4OBE2U-BRwLn2Q1.js → vennDiagram-BLWOH2XV-KxIPKpHi.js} +3 -3
- package/dist/client/assets/wardley-7MLQ67FV-DOahSwbZ.js +1 -0
- package/dist/client/assets/wardley-WFR3VGLG-BdwDpX_I.js +1 -1
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-9A60XZis.js → wardleyDiagram-VM6X3IG4-BoCETVsK.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-VNRHLVJA-B_tMcVFG.js → wardleyDiagram-YMQ3BMBF-BNYqEy7M.js} +4 -4
- package/dist/client/assets/{wiki-link-resolver-Dch88erO.js → wiki-link-resolver-BCdGUpdu.js} +1 -1
- package/dist/client/assets/{worker-engine-m0rlHn8R-5h66k403.js → worker-engine-BCCrxWYm-1fphds7O.js} +1 -1
- package/dist/client/assets/workspace-sync-client-C_P9wtjf.js +1 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-D00iy-wB.js → xychartDiagram-S5SC5T6Z-eB5Fu9P7.js} +1 -1
- package/dist/client/assets/xychartDiagram-TAQBALBS-Sv6aaptV.js +7 -0
- package/dist/client/assets/yjs-Jd9fna_Y.js +4 -0
- package/dist/client/assets/yjs-provider-reset-guard-Cqu0Z6xH.js +1 -0
- package/dist/client/canvas-editor.html +16 -0
- package/dist/client/drawio-editor.html +9 -8
- package/dist/client/excalidraw-editor.html +33 -32
- package/dist/client/export-document.html +4 -3
- package/dist/client/index.html +13 -2
- package/package.json +31 -33
- package/scripts/local-compose.mjs +101 -0
- package/src/client/app/canvas-editor.html +13 -0
- package/src/client/app/index.html +11 -0
- package/src/client/app/main-entry.js +30 -4
- package/src/client/application/app-shell/git-feature.js +3 -2
- package/src/client/application/app-shell/ui-feature-identity.js +1 -0
- package/src/client/application/app-shell/ui-feature-shell.js +2 -0
- package/src/client/application/app-shell/ui-feature-tab-activity.js +4 -0
- package/src/client/application/app-shell/workspace-feature.js +8 -34
- package/src/client/application/diagram-chrome.js +8 -11
- package/src/client/application/diagram-preview-hydrator.js +5 -5
- package/src/client/application/mermaid-preview-hydrator.js +3 -2
- package/src/client/application/plantuml-preview-hydrator.js +6 -0
- package/src/client/application/preview-render-compiler.js +34 -98
- package/src/client/application/preview-render-executor.js +3 -0
- package/src/client/application/preview-render-worker.js +2 -0
- package/src/client/application/preview-renderer.js +9 -5
- package/src/client/application/workspace-coordinator.js +18 -10
- package/src/client/application/workspace-preview-controller.js +105 -158
- package/src/client/application/workspace-route-controller.js +29 -54
- package/src/client/bootstrap/canvas-markdown-preview.js +87 -0
- package/src/client/bootstrap/collabmd-app-shell.js +31 -14
- package/src/client/browser-utils.js +21 -0
- package/src/client/canvas-editor.js +143 -0
- package/src/client/domain/canvas-view.js +50 -0
- package/src/client/domain/excalidraw-scene.js +4 -49
- package/src/client/domain/file-search.js +1 -1
- package/src/client/domain/highlight-runtime.js +0 -4
- package/src/client/domain/markdown-formatting.js +12 -94
- package/src/client/domain/markdown-headings.js +98 -0
- package/src/client/domain/runtime-paths.js +4 -0
- package/src/client/domain/wiki-link-completions.js +42 -10
- package/src/client/infrastructure/browser-preferences-port.js +27 -33
- package/src/client/infrastructure/canvas-room-client.js +210 -0
- package/src/client/infrastructure/canvas-text-editor.js +36 -0
- package/src/client/infrastructure/comment-thread-store.js +19 -77
- package/src/client/infrastructure/editor-view-adapter.js +0 -30
- package/src/client/infrastructure/excalidraw-room-client.js +22 -10
- package/src/client/infrastructure/hosted-api-client.js +4 -2
- package/src/client/infrastructure/runtime-config.js +14 -0
- package/src/client/infrastructure/vault-api-client.js +4 -4
- package/src/client/presentation/canvas-editor-view.js +1028 -0
- package/src/client/presentation/canvas-embed-controller.js +116 -0
- package/src/client/presentation/canvas-picker.js +111 -0
- package/src/client/presentation/drawio-embed-controller.js +4 -4
- package/src/client/presentation/excalidraw-embed-controller.js +13 -4
- package/src/client/presentation/file-action-controller.js +58 -1
- package/src/client/presentation/file-explorer-controller.js +1 -2
- package/src/client/presentation/file-explorer-view.js +31 -7
- package/src/client/presentation/file-icon-svg.js +1 -1
- package/src/client/presentation/file-tree-state.js +4 -1
- package/src/client/presentation/image-lightbox-controller.js +1 -5
- package/src/client/presentation/team-settings-controller.js +44 -10
- package/src/client/presentation/vault-dashboard.js +63 -0
- package/src/client/styles/components/actions.css +4 -16
- package/src/client/styles/components/surfaces.css +0 -7
- package/src/client/styles/features/comment-card.css +1 -2
- package/src/client/styles/features/comment-markdown.css +0 -18
- package/src/client/styles/features/diagram-preview.css +0 -18
- package/src/client/styles/features/git-branch.css +0 -4
- package/src/client/styles/foundation/themes.css +6 -0
- package/src/client/styles/foundation/utilities.css +3 -2
- package/src/client/styles/layout/editor-page.css +0 -13
- package/src/client/styles/layout/overlays.css +5 -0
- package/src/client/styles/layout/responsive.css +2 -7
- package/src/client/styles/layout/shell.css +165 -1
- package/src/client/styles/layout/view-modes.css +1 -0
- package/src/client/styles/surfaces/canvas-editor.css +239 -0
- package/src/domain/canvas-room-codec.js +359 -0
- package/src/domain/collabmd-content-capabilities.js +10 -1
- package/src/domain/comment-threads.js +49 -5
- package/src/domain/excalidraw-room-codec.js +23 -73
- package/src/domain/excalidraw-scene.js +48 -0
- package/src/domain/file-kind.js +13 -1
- package/src/server/application/workspace-reconciliation.js +0 -14
- package/src/server/config/env.js +39 -6
- package/src/server/domain/backlink-index.js +1 -36
- package/src/server/domain/bases/base-index-snapshot-store.js +41 -24
- package/src/server/domain/bases/base-query-service.js +1 -47
- package/src/server/domain/collaboration/collaboration-room.js +149 -15
- package/src/server/domain/collaboration/room-registry.js +7 -7
- package/src/server/domain/hosted-workspace.js +29 -2
- package/src/server/domain/plantuml-encoder.js +7 -43
- package/src/server/infrastructure/git/diff-service.js +1 -5
- package/src/server/infrastructure/git/history-service.js +18 -2
- package/src/server/infrastructure/git/untracked-files.js +1 -1
- package/src/server/infrastructure/http/create-git-api-command-handler.js +60 -149
- package/src/server/infrastructure/http/create-hosted-api-handler.js +5 -2
- package/src/server/infrastructure/http/create-static-handler.js +3 -1
- package/src/server/infrastructure/http/create-vault-api-query-handler.js +3 -3
- package/src/server/infrastructure/http/http-response.js +2 -36
- package/src/server/infrastructure/http/request-body.js +14 -49
- package/src/server/infrastructure/persistence/hosted-metadata-store.js +12 -3
- package/src/server/infrastructure/persistence/path-utils.js +8 -2
- package/src/server/infrastructure/persistence/vault-file-store.js +26 -60
- package/src/server/{infrastructure/git → shared}/image-mime.js +2 -2
- package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-BEz2BKN1.js +0 -1
- package/dist/client/assets/_basePickBy-QJXUw_pr.js +0 -1
- package/dist/client/assets/_baseUniq-DR4vVjyC.js +0 -1
- package/dist/client/assets/architecture-7GRP2DOG-DJVtYNt-.js +0 -1
- package/dist/client/assets/browser-utils-vlHL9goC.js +0 -1
- package/dist/client/assets/chunk-3FUC2YCW-8tZlhTGX.js +0 -1
- package/dist/client/assets/chunk-4SOEAONT-C3fufoVl.js +0 -40
- package/dist/client/assets/chunk-7M6MHVWA-BDakkknV.js +0 -213
- package/dist/client/assets/chunk-FOHPRMQF-Dmmo5Kak.js +0 -161
- package/dist/client/assets/chunk-O7XYJQB3-D0_ZY2za.js +0 -126
- package/dist/client/assets/chunk-Z7XXMR3K-P4Vaq8hD.js +0 -10
- package/dist/client/assets/chunk-ZIGJFQKS-b8OUHKK5.js +0 -2
- package/dist/client/assets/classDiagram-ZZMXUADV-QLbh_Nkf.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-QLbh_Nkf.js +0 -1
- package/dist/client/assets/comment-thread-store-CHvy8GF8.js +0 -1
- package/dist/client/assets/comment-threads-nJhK1yfc.js +0 -4
- package/dist/client/assets/cynefin-OW5HDTMX-e-Quc9Yl.js +0 -1
- package/dist/client/assets/dagre-D7FiCLLP.js +0 -1
- package/dist/client/assets/deferred-collab-D4cxEdad.css +0 -1
- package/dist/client/assets/deferred-git-BHKtkFYi.css +0 -1
- package/dist/client/assets/deferred-preview-BAXYgf4T.css +0 -1
- package/dist/client/assets/diagram-ATOU4E4O-B5uX-jVO.js +0 -3
- package/dist/client/assets/dist-B7fBbwrO.js +0 -1
- package/dist/client/assets/dist-BYBF4LtZ.js +0 -1
- package/dist/client/assets/dist-B_1hMrc6.js +0 -1
- package/dist/client/assets/dist-BnVaoRgZ.js +0 -1
- package/dist/client/assets/dist-Bog8M5U3.js +0 -13
- package/dist/client/assets/dist-CAG5sIOj.js +0 -1
- package/dist/client/assets/dist-CYMCikZo.js +0 -1
- package/dist/client/assets/dist-CYfPeupF.js +0 -1
- package/dist/client/assets/dist-Ck-B8onw.js +0 -2
- package/dist/client/assets/dist-CrkYYcOU.js +0 -1
- package/dist/client/assets/dist-Cu5Ze2cs.js +0 -6
- package/dist/client/assets/dist-D4kDR0g8.js +0 -1
- package/dist/client/assets/dist-D8LnhZzy.js +0 -1
- package/dist/client/assets/dist-DNONgI1P.js +0 -11
- package/dist/client/assets/dist-DVBYH83t.js +0 -1
- package/dist/client/assets/dist-DX6qtdxv.js +0 -1
- package/dist/client/assets/dist-Da-jLrCf.js +0 -1
- package/dist/client/assets/dist-DofvCYzJ.js +0 -1
- package/dist/client/assets/dist-Dx37MHWs.js +0 -1
- package/dist/client/assets/dist-GTGhtpyW.js +0 -9
- package/dist/client/assets/dist-W0FoeIxk.js +0 -23
- package/dist/client/assets/dist-jVKfryIL.js +0 -1
- package/dist/client/assets/document-formatter-gO8qM2qY.js +0 -1
- package/dist/client/assets/drawioEditor-DCkWweiy.js +0 -9
- package/dist/client/assets/editor-session-DxRyr4EM.js +0 -14
- package/dist/client/assets/elk-276RUBZZ-B8LB3Pac.js +0 -27
- package/dist/client/assets/embedded-editor-base-elU0Avik.css +0 -1
- package/dist/client/assets/en-GNC3RJIS-CEy_oGTd.js +0 -1
- package/dist/client/assets/eventmodeling-NTZA5JFV-Dxtv5D-P.js +0 -1
- package/dist/client/assets/excalidraw-element-link-CGZ5934B.js +0 -7
- package/dist/client/assets/excalidraw-scene-6uROebca.js +0 -1
- package/dist/client/assets/excalidrawEditor-BCTFp_CV.css +0 -1
- package/dist/client/assets/excalidrawEditor-BVfSxjSO.js +0 -9
- package/dist/client/assets/export-page-BCo_e15t.js +0 -46
- package/dist/client/assets/exportDocument-Ba-n1X4U.css +0 -1
- package/dist/client/assets/exportDocument-DP6oE_or.js +0 -2
- package/dist/client/assets/file-kind-BwMIcZbi.js +0 -1
- package/dist/client/assets/flowDiagram-HODETNUW-Bq4470NR.js +0 -1
- package/dist/client/assets/flowDiagram-KWPJA3E3-DQG9qGiU.js +0 -1
- package/dist/client/assets/ganttDiagram-FUAMR5RP-BQpsI7gQ.js +0 -292
- package/dist/client/assets/gitGraph-4MIJSDKK-ZaBIE4Lb.js +0 -1
- package/dist/client/assets/gitGraphDiagram-X574FWY7-wbs_2m9f.js +0 -106
- package/dist/client/assets/graphlib-C9Tl7QrK.js +0 -1
- package/dist/client/assets/image-EJJKRVD3-BQfi5nWJ.js +0 -1
- package/dist/client/assets/index-BxAuGDoN.css +0 -1
- package/dist/client/assets/index-uw9O0z1c.js +0 -1112
- package/dist/client/assets/info-A6RAGUB7-BcGxhjED.js +0 -1
- package/dist/client/assets/lobby-presence-Cz5jGOPg.js +0 -1
- package/dist/client/assets/mermaid.core-BeOUPE3Q.js +0 -10
- package/dist/client/assets/packet-AYTQ26CC-CqpSjTWl.js +0 -1
- package/dist/client/assets/pie-WAS4IAKB-Bg2eCNl5.js +0 -1
- package/dist/client/assets/preload-helper-BAlEavIC.js +0 -1
- package/dist/client/assets/preview-render-compiler-ktU0SXxY.js +0 -43
- package/dist/client/assets/prod-DU-0VfI7.js +0 -145
- package/dist/client/assets/prod-cXUNdmYV.js +0 -1
- package/dist/client/assets/quick-switcher-controller-DSlOwOsU.js +0 -1
- package/dist/client/assets/radar-RG4KPBEZ-DxExotg6.js +0 -1
- package/dist/client/assets/railroad-74A4TZTK-FfHmeIQk.js +0 -1
- package/dist/client/assets/railroad-abnf-HS5TGJTU-CLkdDRsJ.js +0 -1
- package/dist/client/assets/railroad-ebnf-LZEXJU2U-B162zvcG.js +0 -1
- package/dist/client/assets/railroad-peg-WCYAUIDC-CGs5GeJ5.js +0 -1
- package/dist/client/assets/runtime-config-BFVdhnJu.js +0 -1
- package/dist/client/assets/runtime-paths-Cn0snt_9.js +0 -1
- package/dist/client/assets/sequenceDiagram-PO4LG4MO-B-2QfXhV.js +0 -169
- package/dist/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -1
- package/dist/client/assets/sizeCapture-INFHLROL-DrzwYt5z.js +0 -1
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CLlwrdvU.js +0 -1
- package/dist/client/assets/swimlanesDiagram-TC7HE7FX-Bh4tmz27.js +0 -8
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-xhehUG9e.js +0 -8
- package/dist/client/assets/treeView-Q6P3EWNA-Cccy0ngL.js +0 -1
- package/dist/client/assets/treemap-WGGIJYW6-sMRCjCtX.js +0 -1
- package/dist/client/assets/usecaseDiagram-POWQR4AR-DR2LHQYs.js +0 -328
- package/dist/client/assets/vault-api-client-BQxLVPeF.js +0 -7
- package/dist/client/assets/wardley-WFR3VGLG-Y7xty_3m.js +0 -1
- package/dist/client/assets/workspace-sync-client-C2pdaQUN.js +0 -1
- package/dist/client/assets/xychartDiagram-PMCCYNJV-fRpZ1MA5.js +0 -7
- package/dist/client/assets/yjs-B41tM6Sz.js +0 -4
- package/dist/client/assets/yjs-provider-reset-guard-DpntzUDR.js +0 -1
- package/scripts/local-plantuml-compose.mjs +0 -92
- package/scripts/local-structurizr-compose.mjs +0 -101
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{H as e,o as t}from"./chunk-H5A3YXKD-ChP7mNJq.js";import"./chunk-SRAX5OIU-KFQikY-4.js";export{e as decodePngMetadata,t as encodePngMetadata};
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./deferred-preview-B-RebLry.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{d as e,h as t,p as n,v as r}from"./file-kind-BGxTVHan.js";import{d as i,p as a}from"./vault-api-client-DrRW0QwO.js";import{a as o,l as s,o as c,r as l,s as u}from"./api-client-utils-C5ESDKMG.js";import{a as d,c as f,d as p,f as m,h,i as ee,l as te,m as ne,n as g,o as re,p as ie,r as ae,s as oe,t as se,u as _}from"./preview-diagram-utils-txBCoW8d.js";import{t as v}from"./preload-helper-CYtfOYgs.js";import{r as y,t as b}from"./vault-utils-Bct69Xw2.js";import{n as ce,r as x}from"./preview-render-profile-D652PAjA.js";import{a as S,i as C,r as w,s as T,t as E}from"./runtime-paths-qQGhzNx4.js";import{r as D}from"./drawio-room-yBUzk-vg.js";import{n as le}from"./excalidraw-element-link-NQnskRkm.js";var ue=Object.freeze({htmlLabels:!1,flowchart:{defaultRenderer:`dagre-wrapper`,htmlLabels:!1,useMaxWidth:!0},class:{defaultRenderer:`dagre-wrapper`,htmlLabels:!1,useMaxWidth:!0},startOnLoad:!1,theme:`default`}),de=/^\s*%%\{\s*(?:init|initialize)\s*:[\s\S]*?\}%%\s*\n?/gim,O=0;function fe(){return O+=1,`mermaid-export-${O.toString(36)}`}async function k(e){if(typeof e.toBlob==`function`){let t=await new Promise(t=>e.toBlob(t,`image/png`));if(t instanceof Blob)return t}return pe(e.toDataURL(`image/png`))}function pe(e){let[t=``,n=``]=String(e).split(`,`,2),r=t.match(/^data:([^;,]+)?/u)?.[1]||`application/octet-stream`;if(t.includes(`;base64`)){let e=atob(n),t=new Uint8Array(e.length);for(let n=0;n<e.length;n+=1)t[n]=e.charCodeAt(n);return new Blob([t],{type:r})}return new Blob([decodeURIComponent(n)],{type:r})}function me(e){let t=e.cloneNode(!0);if(!(t instanceof SVGSVGElement))throw Error(`Renderer returned invalid SVG`);t.style.removeProperty(`display`),t.style.removeProperty(`margin`),t.style.removeProperty(`max-width`),t.style.removeProperty(`height`),t.style.removeProperty(`width`),t.setAttribute(`xmlns`,`http://www.w3.org/2000/svg`);let{width:n,height:r}=p(t);return t.setAttribute(`width`,String(Math.max(1,Math.ceil(n)))),t.setAttribute(`height`,String(Math.max(1,Math.ceil(r)))),t}function he(e,{padding:t=16}={}){let n=me(e);if(typeof e.getBBox!=`function`)return n;try{let r=e.getBBox();if(!r||r.width<=0||r.height<=0)return n;let i=Math.max(0,Number(t)||0),a=Math.ceil(r.width+i*2),o=Math.ceil(r.height+i*2),s=[Math.floor(r.x-i),Math.floor(r.y-i),a,o];return n.setAttribute(`viewBox`,s.join(` `)),n.setAttribute(`width`,String(a)),n.setAttribute(`height`,String(o)),n.setAttribute(`preserveAspectRatio`,`xMidYMid meet`),n}catch{return n}}function ge({currentFilePath:e=``,diagramKind:a=`diagram`,sourceLine:o=``,targetPath:s=``}={}){let c=i(s);if(c)return r(c)||`${a}-diagram`;let l=i(e),u=r(l)||`document`;return a===`mermaid`&&n(e)||a===`plantuml`&&t(e)?u:o?`${u}-${a}-L${o}`:`${u}-${a}`}function _e(e={}){let t=ge(e);return{baseName:t,pngFileName:`${t}.png`,svgFileName:`${t}.svg`}}function ve(e){let t=me(e);return ie(t)}function ye(e,t={}){return ie(he(e,t))}function be(e){let t=String(e??``).replace(de,``);if(t=`%%{init: ${JSON.stringify(ue)}}%%\n${t}`,/^\s*gantt\b/m.test(t)&&!/\btodayMarker\b/.test(t)){let e=t.split(`
|
|
3
|
+
`),n=e.findIndex(e=>/^\s*gantt\b/.test(e));n!==-1&&(e.splice(n+1,0,` todayMarker off`),t=e.join(`
|
|
4
|
+
`))}return t}async function A(e,t){if(!e?.initialize||!e?.run)throw Error(`Mermaid runtime is unavailable`);e.initialize(ue);let n=document.createElement(`div`);n.style.position=`fixed`,n.style.left=`-10000px`,n.style.top=`0`,n.style.width=`1200px`,n.style.visibility=`hidden`,n.style.pointerEvents=`none`,document.body.appendChild(n);try{let r=document.createElement(`div`);r.className=`mermaid mermaid-export-node`,r.id=fe(),r.textContent=be(t),n.appendChild(r),await e.run({nodes:[r]});let i=r.querySelector(`svg`);if(!(i instanceof SVGSVGElement))throw Error(`Mermaid export returned no SVG`);return ye(i,{padding:24})}finally{n.remove()}}async function xe(e){let t=m(e),n=await f(d(t)),r=document.createElement(`div`);r.innerHTML=t;let i=r.querySelector(`svg`),{width:a,height:o}=i?p(i):{height:n.naturalHeight||800,width:n.naturalWidth||1200},s=document.createElement(`canvas`);s.width=Math.max(1,Math.ceil(a)),s.height=Math.max(1,Math.ceil(o));let c=s.getContext(`2d`);if(!c)throw Error(`Canvas is unavailable`);return c.fillStyle=`#ffffff`,c.fillRect(0,0,s.width,s.height),c.drawImage(n,0,0,s.width,s.height),k(s)}async function Se(e){if(typeof ClipboardItem!=`function`||!navigator.clipboard?.write)throw Error(`Clipboard image copy is unavailable`);await navigator.clipboard.write([new ClipboardItem({[e.type||`image/png`]:e})])}function Ce(e){return`data-${e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}`}var we=class{constructor(e,{batchSize:t,datasetKeys:n,loadFileSource:r=null,filePathLabel:i,requestIdleRenderFn:a=s,cancelIdleRenderFn:o=l,intersectionObserverFactory:u=(e,t)=>new IntersectionObserver(e,t),isNearViewportFn:d=c,requestAnimationFrameFn:f=e=>requestAnimationFrame(e),shellClassName:p,sourceClassName:m}){this.renderer=e,this.batchSize=t,this.datasetKeys=n,this.loadFileSource=r,this.filePathLabel=i,this.requestIdleRenderFn=a,this.cancelIdleRenderFn=o,this.intersectionObserverFactory=u,this.isNearViewportFn=d,this.requestAnimationFrameFn=f,this.shellClassName=p,this.sourceClassName=m,this.shellSelector=`.${p}`,this.sourceSelector=`.${m}`,this.attributeNames=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,Ce(t)])),this.observer=null,this.idleId=null,this.pendingShells=[],this.hydrationInProgress=!1,this.hydrationToken=0,this.hydrationRenderVersion=null,this.instanceCounter=0,this.preservedShells=[],this.fileInflightRequests=new Map}destroy(){this.cancelHydration(),this.clearPreservedShells()}cancelHydration(){this.hydrationToken+=1,this.hydrationRenderVersion=null,this.observer&&=(this.observer.disconnect(),null),this.cancelIdleRenderFn(this.idleId),this.idleId=null,this.pendingShells=[],this.hydrationInProgress=!1}cancelPendingIdleWork(){this.cancelIdleRenderFn(this.idleId),this.idleId=null}clearPreservedShells(){this.preservedShells.forEach(({shell:e})=>{this.renderer.diagramChrome?.destroyShell?.(e)}),this.preservedShells.length=0}getPreviewShells(){let e=this.renderer.previewElement;if(!e)return[];let t=Array.from(e.querySelectorAll(this.shellSelector)),n=this.renderer.diagramChrome?.syncActiveShell?.();return n?.classList.contains(this.shellClassName)&&!t.includes(n)&&t.push(n),t}getPreservationIdentity(e){let t=e?.getAttribute?.(this.attributeNames.sourceLine);return t?`${this.shellClassName}:${t}`:null}isShellRenderable(e){return this.isShellHydrated(e)||e?.getAttribute?.(`data-diagram-output`)===`true`}isShellError(e){return e?.getAttribute?.(`data-diagram-state`)===`error`}hasPendingWork(){return this.hydrationInProgress||this.pendingShells.length>0}preserveHydratedShellsForCommit(){this.preservedShells.length=0,this.renderer.previewElement&&this.getPreviewShells().filter(e=>this.isShellRenderable(e)).forEach(e=>{let t=e.dataset[this.datasetKeys.key],n=e.querySelector(this.sourceSelector)?.textContent??``,r=e.dataset[this.datasetKeys.target]??``;t&&(n||r)&&(e.isConnected&&(this.renderer.diagramChrome?.captureShellViewState?.(e),e.remove()),this.preservedShells.push({key:t,identity:this.getPreservationIdentity(e),shell:e,source:n,target:r}))})}reconcileHydratedShells(){let e=this.renderer.previewElement;if(!e||this.preservedShells.length===0){this.clearPreservedShells();return}let t=!1;Array.from(e.querySelectorAll(`${this.shellSelector}[${this.attributeNames.key}]`)).forEach(e=>{let n=e.dataset[this.datasetKeys.key],r=n?this.preservedShells.findIndex(e=>e.key===n):-1;if(r===-1){let t=this.getPreservationIdentity(e);r=t?this.preservedShells.findIndex(e=>e.identity===t):-1}if(r===-1)return;let i=this.preservedShells[r],a=e.querySelector(this.sourceSelector)?.textContent??``,o=e.dataset[this.datasetKeys.target]??``,s=this.isShellRenderable(i.shell)&&a!==i.source&&!o;if(!ne({nextSource:a,nextTarget:o,preservedSource:i.source,preservedTarget:i.target})&&!s)return;this.syncPreservedShell(i.shell,e,{sourceChanged:s}),e.replaceWith(i.shell);let c=this.renderer.diagramChrome?.getShellViewState?.(i.shell),l=i.shell.querySelector(`.diagram-preview-frame`);c&&l&&(l.scrollLeft=c.scrollLeft??0,l.scrollTop=c.scrollTop??0),t||=i.shell.classList.contains(`is-maximized`),this.preservedShells.splice(r,1)}),this.preservedShells.forEach(({shell:e})=>{this.renderer.diagramChrome?.destroyShell?.(e)}),this.preservedShells.length=0,this.handleReconcile({restoredMaximizedShell:t})}handleReconcile(){}syncPreservedShell(e,t,{sourceChanged:n=!1}={}){h(e,t,this.attributeNames.sourceLine),h(e,t,this.attributeNames.sourceLineEnd),h(e,t,this.attributeNames.key),h(e,t,this.attributeNames.target),h(e,t,this.attributeNames.label),h(e,t,this.attributeNames.sourceHash),e.classList.add(this.shellClassName),this.removeDatasetValue(e,`queued`);let r=t.querySelector(this.sourceSelector),i=e.querySelector(this.sourceSelector);if(!i&&r&&(i=r.cloneNode(!0),e.prepend(i)),i&&r){let e=r.textContent??``;(e||!t.dataset[this.datasetKeys.target])&&(i.textContent=e),i.hidden=!0}if(n){this.markShellPending(e);return}if(this.isShellError(e)){e.dataset[this.datasetKeys.hydrated]=`true`;return}this.markShellHydrated(e)}getShellErrorCard(e){return e?.querySelector?.(`:scope > .diagram-preview-error-card`)??null}notifyShellLayoutChange(){this.renderer.onPreviewLayoutChange?.({renderVersion:this.renderer.activeRenderVersion})}clearShellErrorCard(e){e&&(this.getShellErrorCard(e)?.remove?.(),this.notifyShellLayoutChange())}getShellLabel(e){return e?.dataset?.[this.datasetKeys.label]||`${this.filePathLabel} diagram`}markShellRendered(e){e&&(e.setAttribute(`data-diagram-output`,`true`),e.removeAttribute(`data-diagram-state`),e.removeAttribute(`aria-busy`),this.clearShellErrorCard(e))}markShellPending(e){return this.isShellRenderable(e)?(this.removeDatasetValue(e,`hydrated`),e.setAttribute(`data-diagram-output`,`true`),e.setAttribute(`data-diagram-state`,`pending`),e.setAttribute(`aria-busy`,`true`),this.getShellErrorCard(e)&&this.clearShellErrorCard(e),!0):!1}markShellError(e,t){if(!this.isShellRenderable(e))return!1;let n=te(t);e.dataset[this.datasetKeys.hydrated]=`true`,e.setAttribute(`data-diagram-output`,`true`),e.setAttribute(`data-diagram-state`,`error`),e.removeAttribute(`aria-busy`),this.getShellErrorCard(e)?.remove?.();let r=this.shellClassName.replace(/-shell$/,``);return e.append(se({key:e.dataset[this.datasetKeys.key],kind:r,label:this.getShellLabel(e),message:n,subtitle:`Showing the last valid result.`})),this.notifyShellLayoutChange(),!0}clearShellOutput(e){this.removeDatasetValue(e,`hydrated`),e?.removeAttribute?.(`data-diagram-output`),e?.removeAttribute?.(`data-diagram-state`),e?.removeAttribute?.(`aria-busy`),this.clearShellErrorCard(e)}markPending(){this.cancelHydration(),this.getPreviewShells().filter(e=>this.isShellRenderable(e)).forEach(e=>{this.markShellPending(e)})}retryShell(e){e?.isConnected&&(this.removeDatasetValue(e,`hydrated`),this.markShellPending(e),this.enqueueShell(e,{prioritize:!0}))}isHydrationCurrent(e,t,n=this.hydrationToken){return!!(t?.isConnected&&n===this.hydrationToken&&(e==null||e===this.hydrationRenderVersion&&e===this.renderer.activeRenderVersion))}setupHydration(e){let t=this.renderer.previewElement,n=this.renderer.previewContainer;if(!t||!n)return 0;let r=Array.from(t.querySelectorAll(this.shellSelector));if(r.length===0)return 0;this.hydrationToken+=1;let i=this.hydrationToken;return this.hydrationRenderVersion=e,this.observer=this.intersectionObserverFactory(e=>{e.forEach(e=>{e.isIntersecting&&this.enqueueShell(e.target)})},{root:n,rootMargin:this.renderer.isLargeDocument?`180px 0px`:`420px 0px`}),r.forEach(e=>this.observer.observe(e)),this.requestAnimationFrameFn(()=>{this.isHydrationCurrent(e,t,i)&&(this.hydrateVisibleShells(),this.renderer.updateHydrationPhase())}),r.length}hydrateVisibleShells(){let e=this.renderer.previewElement,t=this.renderer.previewContainer;if(this.renderer.hydrationPaused||!e||!t)return;if(this.observer&&typeof IntersectionObserver<`u`){Array.from(e.querySelectorAll(this.shellSelector)).forEach(e=>{this.observer.observe(e)});return}let n=this.renderer.isLargeDocument?180:420;Array.from(e.querySelectorAll(this.shellSelector)).forEach(e=>{this.isNearViewportFn(e,t,n)&&this.enqueueShell(e,{prioritize:!0})})}enqueueShell(e,{prioritize:t=!1}={}){!e?.isConnected||this.isShellHydrated(e)||this.isShellQueued(e)||(e.dataset[this.datasetKeys.queued]=`true`,t?this.pendingShells.unshift(e):this.pendingShells.push(e),!this.renderer.hydrationPaused&&(this.renderer.updateHydrationPhase(),this.scheduleHydration()))}scheduleHydration(){this.renderer.hydrationPaused||this.hydrationInProgress||this.idleId!==null||(this.idleId=this.requestIdleRenderFn(()=>{this.idleId=null,this.flushHydrationQueue()},500))}async flushHydrationQueue(){if(this.renderer.hydrationPaused||this.hydrationInProgress)return;let e=this.hydrationToken,t=this.hydrationRenderVersion,n=[];for(;this.pendingShells.length>0&&n.length<this.batchSize;){let e=this.pendingShells.shift();e?.isConnected&&!this.isShellHydrated(e)&&(this.removeDatasetValue(e,`queued`),n.push(e))}if(n.length===0){this.renderer.updateHydrationPhase();return}this.hydrationInProgress=!0,this.renderer.setPhase(`hydrating`);let r;try{r=await this.prepareHydrationBatch(n)}catch(t){if(e!==this.hydrationToken)return;this.handlePrepareHydrationBatchError(n,t),this.hydrationInProgress=!1,this.renderer.updateHydrationPhase();return}for(let i of n){if(e!==this.hydrationToken)return;await this.hydrateShell(i,r,{hydrationToken:e,renderVersion:t})}e===this.hydrationToken&&(this.hydrationInProgress=!1,this.pendingShells.length>0&&this.scheduleHydration(),this.renderer.updateHydrationPhase())}async prepareHydrationBatch(){return null}handlePrepareHydrationBatchError(e,t){}async hydrateShell(){throw Error(`hydrateShell must be implemented by subclasses`)}markShellHydrated(e){this.markShellRendered(e),e.dataset[this.datasetKeys.hydrated]=`true`,e.dataset[this.datasetKeys.instanceId]=String(++this.instanceCounter)}isShellHydrated(e){return e?.dataset?.[this.datasetKeys.hydrated]===`true`}removeDatasetValue(e,t){let n=this.datasetKeys[t];n&&e&&(e.removeAttribute?.(this.attributeNames[t]),e.dataset&&delete e.dataset[n])}isShellQueued(e){return e?.dataset?.[this.datasetKeys.queued]===`true`}async fetchSource(e){let t=String(e??``).trim();if(!t)throw Error(`Missing ${this.filePathLabel} file path`);if(this.fileInflightRequests.has(t))return this.fileInflightRequests.get(t);if(typeof this.loadFileSource!=`function`)throw Error(`Missing ${this.filePathLabel} source loader`);let n=this.loadFileSource(t).finally(()=>{this.fileInflightRequests.delete(t)});return this.fileInflightRequests.set(t,n),n}};function Te(e){try{let t=document.createElement(`template`);t.innerHTML=String(e);let n=t.content?.querySelector?.(`svg`);if(n?.nodeName?.toLowerCase()===`svg`)return n}catch{}return null}var Ee=class extends we{constructor(e,{loadFileSource:t=null}={}){super(e,{batchSize:2,datasetKeys:{hydrated:`mermaidHydrated`,instanceId:`mermaidInstanceId`,key:`mermaidKey`,label:`mermaidLabel`,queued:`mermaidQueued`,sourceHash:`mermaidSourceHash`,sourceLine:`sourceLine`,sourceLineEnd:`sourceLineEnd`,target:`mermaidTarget`},filePathLabel:`Mermaid`,loadFileSource:t,shellClassName:`mermaid-shell`,sourceClassName:`mermaid-source`}),this.currentTheme=document.documentElement?.dataset.theme===`light`?`light`:`dark`,this.diagramChrome=e.diagramChrome,this.loader=null,this.runtime=null,this.renderCache=new Map}cancelHydration({preserveActiveShell:e=!1}={}){super.cancelHydration(),e||this.diagramChrome?.cancelActiveShell?.(`mermaid`)}applyTheme(e){if(e===this.currentTheme)return;this.currentTheme=e;let t=this.runtime;t&&(this.configureMermaid(t),this.resetHydratedShells())}configureMermaid(e){e.initialize({startOnLoad:!1,htmlLabels:!1,flowchart:{defaultRenderer:`dagre-wrapper`,htmlLabels:!1,useMaxWidth:!0},class:{defaultRenderer:`dagre-wrapper`,useMaxWidth:!0},theme:this.currentTheme===`dark`?`dark`:`default`,themeVariables:this.currentTheme===`dark`?{background:`#11161d`,clusterBkg:`#141a22`,edgeLabelBackground:`#11161d`,lineColor:`#9aa7b4`,mainBkg:`#171d26`,nodeBorder:`#303c4b`,primaryBorderColor:`#60a5fa`,primaryColor:`#172a45`,primaryTextColor:`#e6edf3`,secondaryColor:`#1c2530`,tertiaryColor:`#11161d`,titleColor:`#e6edf3`}:{}})}ensureMermaid(){return this.runtime?(this.configureMermaid(this.runtime),Promise.resolve(this.runtime)):(this.loader||=v(()=>import(`./mermaid.core-D8Z6LN7O.js`).then(e=>{let t=e?.default;if(!t)throw Error(`Mermaid runtime failed to initialize`);return this.runtime=t,this.configureMermaid(t),t}),[],import.meta.url).catch(e=>{throw this.loader=null,this.runtime=null,Error(e instanceof Error?e.message:`Failed to load Mermaid runtime`)}),this.loader)}handleReconcile({restoredMaximizedShell:e}){e&&document.body.classList.add(`mermaid-maximized-open`),this.diagramChrome?.syncActiveShell?.()}async prepareHydrationBatch(){return this.ensureMermaid()}handlePrepareHydrationBatchError(e,t){console.warn(`[preview] Mermaid runtime failed to load:`,t)}createRenderHost(){let e=document.createElement(`div`);return e.style.position=`fixed`,e.style.left=`-10000px`,e.style.top=`0`,e.style.width=`1200px`,e.style.visibility=`hidden`,e.style.pointerEvents=`none`,document.body.appendChild(e),e}async hydrateShell(e,t,{hydrationToken:n,renderVersion:r}={}){if(!t||!e?.isConnected||this.isShellHydrated(e)||!this.isHydrationCurrent(r,e,n))return;let i=e.querySelector(`.mermaid-source`);i||(i=document.createElement(`span`),i.className=`mermaid-source`,i.hidden=!0,e.appendChild(i));let a=i.textContent??``;try{if(!a.trim()&&e.dataset.mermaidTarget){if(a=await this.fetchSource(e.dataset.mermaidTarget),!e.isConnected)return;i.textContent=a}if(!a.trim())throw Error(e.dataset.mermaidTarget?`Mermaid file is empty`:`Mermaid source is empty`);if(!this.isHydrationCurrent(r,e,n))return;let o=a;a=this.prepareSource(a);let s=this.getRenderCacheKey(a);if(this.tryMountCachedDiagram(e,{hydrationToken:n,renderCacheKey:s,renderedSource:o,renderVersion:r}))return;e.querySelector(`.mermaid-placeholder-card`)?.remove();let c=document.createElement(`div`);c.className=`mermaid mermaid-render-node`;let l=e.getAttribute(`data-source-line`),u=e.getAttribute(`data-source-line-end`);l&&c.setAttribute(`data-source-line`,l),u&&c.setAttribute(`data-source-line-end`,u),c.textContent=a;let d=this.createRenderHost();try{d.appendChild(c);let{svg:i,bindFunctions:l}=await t.render(`mermaid-${crypto.randomUUID()}`,a,c);if(!this.isHydrationCurrent(r,e,n)||!c.isConnected||c.parentElement!==d)return;c.innerHTML=i,l?.(c),this.enhanceDiagram(e,c,o,s),this.markShellHydrated(e)}finally{d.remove()}}catch(t){if(console.warn(`[preview] Mermaid render failed:`,t),!this.isHydrationCurrent(r,e,n)||this.markShellError(e,t))return;if(this.diagramChrome?.destroyShell?.(e),e.querySelector(`:scope > .mermaid-toolbar`)?.remove(),e.querySelector(`:scope > .mermaid-frame`)?.remove(),e.querySelector(`:scope > .mermaid-render-node`)?.remove(),!e.querySelector(`.mermaid-placeholder-card`)){let n=e.dataset.mermaidKey||`mermaid`,r=te(t);i?.after(se({key:n,kind:`mermaid`,label:e.dataset.mermaidLabel||`Mermaid diagram`,message:r}))}}}prepareSource(e){let t=String(e??``);if(!/%%\{[\s\S]*?\binit\s*:/m.test(t)){let e=this.getPreviewInitConfig(t);e&&(t=`%%{init: ${JSON.stringify(e)}}%%\n${t}`)}if(!/^\s*gantt\b/m.test(t)||/\btodayMarker\b/.test(t))return t;let n=t.split(`
|
|
5
|
+
`),r=n.findIndex(e=>/^\s*gantt\b/.test(e));return r===-1?t:(n.splice(r+1,0,` todayMarker off`),n.join(`
|
|
6
|
+
`))}getPreviewInitConfig(e){return/^\s*stateDiagram(?:-v2)?\b/m.test(e)||/^\s*classDiagram\b/m.test(e)||/^\s*gantt\b/m.test(e)?{htmlLabels:!1}:null}resetHydratedShells(){let e=this.renderer.previewElement;if(!e)return;let t=Array.from(e.querySelectorAll(`.mermaid-shell[data-mermaid-hydrated="true"]`)),n=this.diagramChrome?.syncActiveShell?.();n?.classList?.contains(`mermaid-shell`)&&!t.includes(n)&&t.push(n),t.length!==0&&t.forEach(e=>{this.diagramChrome?.destroyShell?.(e),this.clearShellOutput(e),e.querySelector(`:scope > .mermaid-toolbar`)?.remove(),e.querySelector(`:scope > .mermaid-frame`)?.remove(),e.querySelector(`:scope > .mermaid-render-node`)?.remove(),e.querySelector(`.mermaid-placeholder-card`)||e.querySelector(`.mermaid-source`)?.after(g(e.dataset.mermaidKey||`mermaid`)),this.enqueueShell(e,{prioritize:!0})})}async renderExportSvgMarkup(e){let t=await this.ensureMermaid();try{return await A(t,e._diagramRenderedSource??e.querySelector(`.mermaid-source`)?.textContent??``)}finally{this.configureMermaid(t)}}enhanceDiagram(e,t,n=``,r=null){let i=t.querySelector(`svg`);if(!i){t.remove();return}let{width:a,height:o}=_(i);r&&this.storeRenderCache(r,i.outerHTML),t.remove(),this.mountDiagramSvg(e,i,{baseWidth:a,baseHeight:o,renderedSource:n})}mountDiagramSvg(e,t,{baseWidth:n,baseHeight:r,renderedSource:i=``}={}){this.diagramChrome.mount(e,{baseHeight:r,baseWidth:n,diagramElement:t,exportFileNames:()=>_e({currentFilePath:this.renderer.getSourceFilePath?.()??``,diagramKind:`mermaid`,sourceLine:e.getAttribute(`data-source-line`)||``,targetPath:e.dataset.mermaidTarget||``}),exportSvgMarkup:()=>this.renderExportSvgMarkup(e),kind:`mermaid`,sourceSelector:`.mermaid-source`}),e._diagramRenderedSource=i}tryMountCachedDiagram(e,{hydrationToken:t,renderCacheKey:n,renderedSource:r=``,renderVersion:i}={}){let a=this.renderCache.get(n)??null;if(!a)return!1;e.querySelector(`.mermaid-placeholder-card`)?.remove();let o=Te(a);if(this.isHydrationCurrent(i,e,t)&&o){let{width:t,height:n}=p(o);return this.mountDiagramSvg(e,o,{baseWidth:t,baseHeight:n,renderedSource:r}),this.markShellHydrated(e),!0}return this.renderCache.delete(n),!1}getRenderCacheKey(e){return`${this.currentTheme}\n${e}`}storeRenderCache(e,t){if(e&&t){for(this.renderCache.has(e)&&this.renderCache.delete(e);this.renderCache.size>=30;)this.renderCache.delete(this.renderCache.keys().next().value);this.renderCache.set(e,t)}}},j=30,De=class extends we{constructor(e,{loadFileSource:t=null,renderClient:n=null}={}){super(e,{batchSize:2,datasetKeys:{hydrated:`plantumlHydrated`,instanceId:`plantumlInstanceId`,key:`plantumlKey`,label:`plantumlLabel`,queued:`plantumlQueued`,sourceHash:`plantumlSourceHash`,sourceLine:`sourceLine`,sourceLineEnd:`sourceLineEnd`,target:`plantumlTarget`},filePathLabel:`PlantUML`,loadFileSource:t,shellClassName:`plantuml-shell`,sourceClassName:`plantuml-source`}),this.diagramChrome=e.diagramChrome,this.renderClient=n,this.svgCache=new Map,this.svgInflightRequests=new Map}cancelHydration({preserveActiveShell:e=!1}={}){super.cancelHydration(),e||this.diagramChrome?.cancelActiveShell?.(`plantuml`)}handleReconcile({restoredMaximizedShell:e}){e&&document.body.classList.add(`plantuml-maximized-open`),this.diagramChrome?.syncActiveShell?.()}async hydrateShell(e,t,{hydrationToken:n,renderVersion:r}={}){if(!e?.isConnected||this.isShellHydrated(e)||!this.isHydrationCurrent(r,e,n))return;let i=e.querySelector(`.plantuml-source`);i||(i=document.createElement(`span`),i.className=`plantuml-source`,i.hidden=!0,e.appendChild(i)),e.querySelector(`.plantuml-placeholder-card`)?.remove();try{let t=i.textContent??``;if(!t.trim()&&e.dataset.plantumlTarget){if(t=await this.fetchSource(e.dataset.plantumlTarget),!e.isConnected)return;i.textContent=t}if(!t.trim())throw Error(e.dataset.plantumlTarget?`PlantUML file is empty`:`PlantUML source is empty`);if(!this.isHydrationCurrent(r,e,n))return;let a=await this.fetchSvg(t);if(!this.isHydrationCurrent(r,e,n))return;this.enhanceDiagram(e,a),this.markShellHydrated(e)}catch(t){if(console.warn(`[preview] PlantUML render failed:`,t),!this.isHydrationCurrent(r,e,n)||this.markShellError(e,t))return;let a=e.dataset.plantumlKey||`plantuml`,o=te(t);e.querySelector(`:scope > .plantuml-toolbar`)?.remove(),e.querySelector(`:scope > .plantuml-frame`)?.remove(),e.querySelector(`.plantuml-placeholder-card`)||i?.after(se({key:a,kind:`plantuml`,label:e.dataset.plantumlLabel||`PlantUML diagram`,message:o}))}}async fetchSvg(e){let t=e;if(this.svgCache.has(t))return this.svgCache.get(t);if(this.svgInflightRequests.has(t))return this.svgInflightRequests.get(t);let n=this.renderClient.renderSvg(e).then(e=>{let n=m(e);for(this.svgCache.delete(t);this.svgCache.size>=j;)this.svgCache.delete(this.svgCache.keys().next().value);return this.svgCache.set(t,n),n}).finally(()=>{this.svgInflightRequests.delete(t)});return this.svgInflightRequests.set(t,n),n}resetShell(e,{clearCache:t=!1,message:n=`Renders server-side when visible`}={}){let r=e.querySelector(`.plantuml-source`)?.textContent??``;t&&r&&(this.svgCache.delete(r),this.svgInflightRequests.delete(r)),this.diagramChrome?.destroyShell?.(e),this.clearShellOutput(e),e.removeAttribute(`data-plantuml-instance-id`),e.removeAttribute(`data-plantuml-queued`),e.classList.remove(`is-maximized`),this.diagramChrome?.syncBodyMaximizedClasses?.(),e.querySelector(`:scope > .plantuml-toolbar`)?.remove(),e.querySelector(`:scope > .plantuml-frame`)?.remove(),e.querySelector(`.plantuml-placeholder-card`)||e.querySelector(`.plantuml-source`)?.after(ae(e.dataset.plantumlKey||`plantuml`,n))}enhanceDiagram(e,t){let n=document.createElement(`div`);n.innerHTML=t;let r=n.querySelector(`svg`);if(!r)throw Error(`Renderer returned invalid SVG`);let{width:i,height:a}=oe(r);this.diagramChrome.mount(e,{baseHeight:a,baseWidth:i,diagramElement:r,exportFileNames:()=>_e({currentFilePath:this.renderer.getSourceFilePath?.()??``,diagramKind:`plantuml`,sourceLine:e.getAttribute(`data-source-line`)||``,targetPath:e.dataset.plantumlTarget||``}),exportSvgMarkup:()=>ve(r),kind:`plantuml`,onReload:()=>{this.resetShell(e,{clearCache:!0,message:`Refreshing…`}),this.enqueueShell(e,{prioritize:!0})},sourceSelector:`.plantuml-source`})}},M={copy:`
|
|
7
|
+
<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
8
|
+
<path d="M5.5 5.5h6.8v8h-6.8z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
9
|
+
<path d="M3.7 10.5H3a1 1 0 0 1-1-1v-6a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v.7" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
10
|
+
</svg>
|
|
11
|
+
`,download:`
|
|
12
|
+
<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
13
|
+
<path d="M8 2.2v7.2" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
14
|
+
<path d="M5.3 7.2 8 10l2.7-2.8" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
15
|
+
<path d="M3 12.8h10" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
16
|
+
</svg>
|
|
17
|
+
`,edit:`
|
|
18
|
+
<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
19
|
+
<path d="M11.8 1.8a1.5 1.5 0 0 1 2.1 2.1l-7.2 7.2-3.2.9.9-3.2z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
20
|
+
<path d="M10.7 2.9l2.4 2.4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
21
|
+
</svg>
|
|
22
|
+
`,fit:`
|
|
23
|
+
<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
24
|
+
<path d="M5.5 6.2V3H2.3M10.5 6.2V3h3.2M10.5 9.8V13h3.2M5.5 9.8V13H2.3" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
25
|
+
<path d="M5.5 6.2h5M5.5 9.8h5" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
26
|
+
</svg>
|
|
27
|
+
`,maximize:`
|
|
28
|
+
<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
29
|
+
<path d="M6 2H2v4M10 2h4v4M14 10v4h-4M2 10v4h4" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
30
|
+
</svg>
|
|
31
|
+
`,refresh:`
|
|
32
|
+
<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
33
|
+
<path d="M13 4.5V1.8M13 1.8h-2.7M13 11.5v2.7M13 14.2h-2.7" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
34
|
+
<path d="M12.3 4.2A5.3 5.3 0 1 0 13 11.8" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
35
|
+
</svg>
|
|
36
|
+
`,restore:`
|
|
37
|
+
<svg viewBox="0 0 16 16" aria-hidden="true" focusable="false">
|
|
38
|
+
<path d="M6 5V2H2M10 5V2h4M10 11v3h4M6 11v3H2" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
39
|
+
<path d="M4.5 4.5h7v7h-7z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.4"/>
|
|
40
|
+
</svg>
|
|
41
|
+
`};function N(e,t){if(!(e instanceof HTMLElement))return;let n=M[t];if(!n){e.classList.remove(`is-icon-only`),e.classList.remove(`ui-preview-action--icon-only`);return}e.classList.add(`is-icon-only`),e.classList.add(`ui-preview-action--icon-only`),e.dataset.icon=t,e.innerHTML=n.trim()}var Oe=Object.freeze({animationDurationMs:160,default:1,max:3,min:.1,step:.1,wheelSensitivity:.01}),ke=Object.freeze({mermaid:{...Oe,fitMax:Oe.max,min:.5},plantuml:{...Oe,fitMax:Oe.default}}),Ae=Object.freeze({mermaid:{bodyClassName:`mermaid-maximized-open`,buttonClassName:`mermaid-zoom-btn ui-preview-action`,frameClassName:`mermaid-frame diagram-preview-frame`,maximizeButtonClassName:`mermaid-maximize-btn`,maximizedRootClassName:`mermaid-maximized-root`,maximizedRootDatasetKey:`mermaidMaximizedRoot`,toolbarClassName:`mermaid-toolbar diagram-preview-toolbar`,zoomLabelClassName:`mermaid-zoom-label diagram-preview-zoom-label`},plantuml:{bodyClassName:`plantuml-maximized-open`,buttonClassName:`plantuml-tool-btn ui-preview-action`,frameClassName:`plantuml-frame diagram-preview-frame`,maximizeButtonClassName:`plantuml-maximize-btn`,maximizedRootClassName:`plantuml-maximized-root`,maximizedRootDatasetKey:`plantumlMaximizedRoot`,toolbarClassName:`plantuml-toolbar diagram-preview-toolbar`,zoomLabelClassName:`plantuml-zoom-label diagram-preview-zoom-label`}});function je(e){return Ae[e]??Ae.mermaid}function Me(e){return ke[e]??ke.mermaid}function Ne(e){return e instanceof SVGSVGElement}var Pe=class{constructor({documentRef:e=document,toastController:t=null,windowRef:n=window}={}){this.document=e,this.window=n,this.toastController=t,this.activeMaximizedShell=null,this.maximizedRoots=new Map,this.resizeObservers=new Set,this.shellControllers=new WeakMap,this.shellViewStates=new WeakMap,this.shellRefits=new WeakMap}destroy(){this.destroyAllShells(),this.resizeObservers.forEach(e=>e.disconnect()),this.resizeObservers.clear(),this.maximizedRoots.forEach(e=>e.remove()),this.maximizedRoots.clear(),this.activeMaximizedShell=null,this.syncBodyMaximizedClasses()}destroyAllShells(){this.resizeObservers.forEach(e=>e.disconnect()),this.resizeObservers.clear(),this.activeMaximizedShell=null,this.syncBodyMaximizedClasses()}destroyShell(e){this.shellControllers.get(e)?.destroy?.(),this.shellControllers.delete(e),this.shellViewStates.delete(e),this.shellRefits.delete(e),this.activeMaximizedShell===e&&(this.restoreShellMount(e),this.activeMaximizedShell=null),this.syncBodyMaximizedClasses()}captureShellViewState(e){let t=this.shellControllers.get(e)?.getViewState?.()??null;return t&&this.shellViewStates.set(e,t),t}getShellViewState(e){return this.shellViewStates.get(e)??this.shellControllers.get(e)?.getViewState?.()??null}cancelActiveShell(e){let t=this.syncActiveShell();if(!t?.classList?.contains(`${e}-shell`))return;let n=this.shellControllers.get(t);this.restoreShellMount(t),t.classList.remove(`is-maximized`),this.activeMaximizedShell=null,n?.syncMaximizeButtonState?.(),n?.scheduleResetZoomToFit?.({force:!0}),this.syncBodyMaximizedClasses()}clearActiveShell(){this.activeMaximizedShell=null,this.maximizedRoots.forEach(e=>{e.childElementCount===0&&(e.hidden=!0)}),this.syncBodyMaximizedClasses()}syncActiveShell(){return this.activeMaximizedShell?.isConnected&&this.activeMaximizedShell.classList.contains(`is-maximized`)?this.activeMaximizedShell:(this.activeMaximizedShell=null,this.maximizedRoots.forEach(e=>{e.childElementCount===0&&(e.hidden=!0)}),null)}scheduleActiveRefit({kind:e=null,root:t=null}={}){let n=this.syncActiveShell();if(n){this.shellRefits.get(n)?.({force:!0});return}let r=e?`.${e}-shell[data-${e}-hydrated="true"]`:`.mermaid-shell[data-mermaid-hydrated="true"], .plantuml-shell[data-plantuml-hydrated="true"]`;Array.from(t?.querySelectorAll?.(r)??[]).forEach(e=>{this.shellRefits.get(e)?.()})}ensureMaximizedRoot(e){let t=je(e),n=this.maximizedRoots.get(e);if(n?.isConnected&&n.parentElement===this.document.body)return n;let r=this.document.createElement(`div`);return r.dataset[t.maximizedRootDatasetKey]=`true`,r.className=t.maximizedRootClassName,this.document.body.appendChild(r),this.maximizedRoots.set(e,r),r}mountShellInMaximizedRoot(e,t){let n=this.ensureMaximizedRoot(t);n.hidden=!1,e._diagramChromeRestoreParent=e.parentElement||null,e._diagramChromeRestoreNextSibling=e.nextSibling||null,n.appendChild(e)}restoreShellMount(e){if(!e)return;let t=e._diagramChromeRestoreParent,n=e._diagramChromeRestoreNextSibling;t?.isConnected&&(n?.parentElement===t?t.insertBefore(e,n):t.appendChild(e)),e._diagramChromeRestoreParent=null,e._diagramChromeRestoreNextSibling=null,this.maximizedRoots.forEach(e=>{e.childElementCount===0&&(e.hidden=!0)})}syncBodyMaximizedClasses(){for(let[e,t]of Object.entries(Ae))this.document.body.classList.toggle(t.bodyClassName,!!this.document.querySelector?.(`.${e}-shell.is-maximized`))}createButton(e,t,n,{icon:r=``}={}){let i=je(e),a=this.document.createElement(`button`);return a.type=`button`,a.className=i.buttonClassName,a.setAttribute(`aria-label`,n),a.title=n,r?N(a,r):a.textContent=t,a}createToolbar({kind:e,includeReload:t=!1}){let n=je(e),r=this.document.createElement(`div`);r.className=n.toolbarClassName;let i=this.document.createElement(`div`);i.className=`diagram-preview-toolbar-group`;let a=this.document.createElement(`div`);a.className=`diagram-preview-toolbar-group diagram-preview-toolbar-group--actions`;let o=this.createButton(e,`−`,`Zoom out`),s=this.createButton(e,`+`,`Zoom in`),c=this.createButton(e,``,`Reset zoom`,{icon:`fit`}),l=this.createButton(e,``,`Copy image`,{icon:`copy`}),u=this.createButton(e,``,`Download SVG`,{icon:`download`}),d=t?this.createButton(e,``,`Reload diagram`,{icon:`refresh`}):null,f=this.createButton(e,``,`Maximize diagram`,{icon:`maximize`});f.classList.add(n.maximizeButtonClassName);let p=this.document.createElement(`span`);return p.className=n.zoomLabelClassName,p.setAttribute(`aria-live`,`polite`),i.append(o,p,c,s),a.append(l,u),d&&a.append(d),a.append(f),r.append(i,a),{copyButton:l,decreaseButton:o,downloadButton:u,increaseButton:s,maximizeButton:f,reloadButton:d,resetButton:c,toolbar:r,zoomLabel:p}}attachShellResizeObserver(e,t,n){if(typeof ResizeObserver!=`function`||!e?.isConnected||!(t instanceof HTMLElement))return null;let r=new ResizeObserver(()=>n());return r.observe(t),r.observe(e),this.resizeObservers.add(r),r}async copyExportImage(e,t){try{let{pngFileName:n}=t(),r=await xe(await e());try{await Se(r),this.toastController?.show?.(`Diagram copied`)}catch{o(r,n),this.toastController?.show?.(`Clipboard image copy is unavailable here. Downloaded PNG instead.`)}}catch{this.toastController?.show?.(`Failed to copy diagram`)}}async downloadExportSvg(e,t){try{let{svgFileName:n}=t(),r=new Blob([await e()],{type:`image/svg+xml;charset=utf-8`});o(r,n),this.toastController?.show?.(`Diagram download started`)}catch{this.toastController?.show?.(`Failed to download diagram`)}}syncMaximizeButtonState(e,t){let n=e.classList.contains(`is-maximized`);N(t,n?`restore`:`maximize`);let r=n?`Restore diagram size`:`Maximize diagram`;t.setAttribute(`aria-label`,r),t.title=r}setMaximizedState(e,t,n,r,i){if(i){let i=this.syncActiveShell();if(i&&i!==e){let e=this.shellControllers.get(i);this.restoreShellMount(i),i.classList.remove(`is-maximized`),this.activeMaximizedShell=null,e?.scheduleResetZoomToFit?.({force:!0}),e?.syncMaximizeButtonState?.()}this.mountShellInMaximizedRoot(e,t),e.classList.add(`is-maximized`),this.activeMaximizedShell=e,this.syncMaximizeButtonState(e,n),this.syncBodyMaximizedClasses(),r({force:!0});return}this.restoreShellMount(e),e.classList.remove(`is-maximized`),this.activeMaximizedShell===e&&(this.activeMaximizedShell=null),this.syncMaximizeButtonState(e,n),this.syncBodyMaximizedClasses(),r({force:!0})}mount(e,{baseHeight:t,baseWidth:n,diagramElement:r,exportFileNames:i,exportSvgMarkup:a,kind:o,onReload:s=null,sourceSelector:c}={}){if(!e?.isConnected||!Ne(r))return null;let l=je(o),u=Me(o),d=e.querySelector(l.frameClassName.split(` `).map(e=>`.${e}`).join(``)),f=d?re(d).width:0,p=this.getShellViewState(e);this.destroyShell(e);let{copyButton:m,decreaseButton:h,downloadButton:te,increaseButton:ne,maximizeButton:g,reloadButton:ie,resetButton:ae,toolbar:oe,zoomLabel:se}=this.createToolbar({includeReload:typeof s==`function`,kind:o}),_=this.document.createElement(`div`);_.className=l.frameClassName;let v=!!(p&&(p.scrollLeft>0||p.scrollTop>0)),y=!!(v&&d?.isConnected&&d.clientWidth>0&&d.clientHeight>0),ce=!(!y||e.classList.contains(`is-maximized`)||e.style.position);ce&&(e.style.position=`relative`),v&&!y&&(_.style.visibility=`hidden`),y&&Object.assign(_.style,{height:`${d.clientHeight}px`,left:`0`,pointerEvents:`none`,position:`absolute`,top:`0`,visibility:`hidden`,width:`${d.clientWidth}px`});let x=u.default,S=null,C=null,w=null,T=null,E=null,D=!!(p?.hasManualZoom||p?.scrollLeft>0||p?.scrollTop>0),le=f>0&&Number.isFinite(n)&&n>0,ue=Number.isFinite(p?.zoom),de=le?f:0,O=!1;r.style.maxWidth=`none`;let fe=()=>{let e=re(_);if(!Number.isFinite(n)||n<=0||e.width<=0)return u.default;let t=e.width/n;return!Number.isFinite(t)||t<=0?u.default:b(t,u.min,u.fitMax)},k=e=>{x=b(e,u.min,u.max),r.style.width=`${n*x}px`,r.style.height=`${t*x}px`,se.textContent=`${Math.round(x*100)}%`,h.disabled=x<=u.min,ne.disabled=x>=u.max},pe=ue?b(p.zoom,u.min,u.max):le?b(f/n,u.min,u.fitMax):u.default,me=()=>({x:_.scrollLeft+_.clientWidth/2,y:_.scrollTop+_.clientHeight/2}),he=(e,t,n,r)=>{if(e===0)return;let i=t/e;_.scrollLeft=n.x*i-r.x,_.scrollTop=n.y*i-r.y},ge=(e,t,n)=>{he(e,t,n,{x:_.clientWidth/2,y:_.clientHeight/2})},_e=e=>{let t=b(e,u.min,u.max);if(S){C=t;return}let n=x;if(t===n)return;C=t;let r=me(),i=performance.now(),a=e=>{let t=b((e-i)/u.animationDurationMs,0,1),o=ee(t),s=n+(C-n)*o;if(k(s),ge(n,s,r),t<1){S=this.window.requestAnimationFrame(a);return}S=null;let c=C;C=null,k(c),ge(n,c,r)};S=this.window.requestAnimationFrame(a)},ve=()=>{S&&=(this.window.cancelAnimationFrame(S),null),C=null},ye=e=>{D=!0,_e((C??x)+e)},be=()=>{let e=fe();D=!1,de=re(_).width,E=null,ve(),k(e),_.scrollLeft=0,_.scrollTop=0},A=({force:t=!1}={})=>{O||=t,w&&this.window.cancelAnimationFrame(w),w=this.window.requestAnimationFrame(()=>{if(w=null,!e.isConnected)return;let t=O;O=!1;let n=re(_).width,r=Math.abs(n-de)>1;(t||!D)&&(!t&&n>0&&de>0&&!r||be())})},xe=this.attachShellResizeObserver(e,_,()=>A()),Se=(e,t)=>{let n=_.getBoundingClientRect();return{x:Number(e)-n.left,y:Number(t)-n.top}},Ce=e=>{if(!e||e.length!==2)return null;let t=e[0],n=e[1],r=Se((t.clientX+n.clientX)/2,(t.clientY+n.clientY)/2),i=Math.hypot(n.clientX-t.clientX,n.clientY-t.clientY);return!Number.isFinite(i)||i<=0?null:{center:r,distance:i}},we=e=>{let t=Ce(e);return t?(ve(),E={contentPoint:{x:_.scrollLeft+t.center.x,y:_.scrollTop+t.center.y},distance:t.distance,zoom:x},!0):!1},Te=e=>{let t=Ce(e);return!t||!E&&!we(e)?!1:(D=!0,k(E.zoom*(t.distance/E.distance)),he(E.zoom,x,E.contentPoint,t.center),!0)};h.addEventListener(`click`,()=>ye(-u.step)),ne.addEventListener(`click`,()=>ye(u.step)),_.addEventListener(`wheel`,e=>{if(!e.ctrlKey)return;e.preventDefault();let t=Number.isFinite(e.deltaY)?e.deltaY:0,n=b(-t*u.wheelSensitivity,-u.step/2,u.step/2);n!==0&&ye(n)},{passive:!1}),_.addEventListener(`touchstart`,e=>{e.touches.length===2&&we(e.touches)},{passive:!0}),_.addEventListener(`touchmove`,e=>{e.touches.length===2&&Te(e.touches)&&e.preventDefault()},{passive:!1});let Ee=e=>{e.touches.length!==2&&(E=null)};_.addEventListener(`touchend`,Ee),_.addEventListener(`touchcancel`,Ee),ae.addEventListener(`click`,()=>{A({force:!0})}),m.addEventListener(`click`,()=>this.copyExportImage(a,i)),te.addEventListener(`click`,()=>this.downloadExportSvg(a,i)),ie?.addEventListener(`click`,()=>s()),g.addEventListener(`click`,()=>{this.setMaximizedState(e,o,g,A,!e.classList.contains(`is-maximized`))}),_.appendChild(r);let j=c?e.querySelector(c):null,De=j?[j,oe,_]:[oe,_];j&&(j.hidden=!0),y?e.append(_):e.replaceChildren(...De),k(pe);let M=()=>{let e=Math.max(0,_.scrollWidth-_.clientWidth),t=Math.max(0,_.scrollHeight-_.clientHeight),n=b(p.scrollLeft??0,0,e),r=b(p.scrollTop??0,0,t);return _.scrollLeft=n,_.scrollTop=r,_.clientWidth>0&&_.clientHeight>0&&_.scrollLeft===n&&_.scrollTop===r};y?(M(),T=this.window.requestAnimationFrame(()=>{T=null,e.replaceChildren(...De),_.removeAttribute(`style`),ce&&(e.style.position=``),k(pe),M()})):v&&(M()?_.style.visibility=``:this.window.requestAnimationFrame(()=>{_.isConnected&&(M(),_.style.visibility=``)}));let N={destroy:()=>{S&&this.window.cancelAnimationFrame(S),w&&this.window.cancelAnimationFrame(w),T&&this.window.cancelAnimationFrame(T),xe?.disconnect?.(),this.resizeObservers.delete(xe)},getViewState:()=>({hasManualZoom:D,scrollLeft:_.scrollLeft,scrollTop:_.scrollTop,zoom:x}),scheduleResetZoomToFit:A,syncMaximizeButtonState:()=>this.syncMaximizeButtonState(e,g)};return this.shellControllers.set(e,N),this.shellRefits.set(e,A),this.syncMaximizeButtonState(e,g),!le&&!ue&&A({force:!0}),N}};function Fe(){return new Worker(new URL(new URL(`preview-render-worker-dFNyrVyB.js`,import.meta.url).href,``+import.meta.url),{type:`module`})}var Ie=class{constructor({attachmentApiPath:e=`/api/attachment`,compilePreviewDocumentLoader:t=()=>v(()=>import(`./preview-render-compiler-D_aJv7Ew.js`),[],import.meta.url),createWorkerFn:n=Fe,getFileList:r,getSourceFilePath:i=null,getWikiLinkAutoCreate:a=null}={}){this.attachmentApiPath=e,this.compilePreviewDocumentLoader=t,this.createWorkerFn=n,this.getFileList=r,this.getSourceFilePath=i,this.getWikiLinkAutoCreate=a,this.worker=null,this.workerDisabled=!1,this.workerJob=null,this.handleWorkerMessage=e=>{if(!this.workerJob||e.data?.renderVersion!==this.workerJob.renderVersion)return;let t=this.workerJob;if(this.workerJob=null,e.data?.error){t.reject(Error(e.data.error));return}t.resolve({html:e.data.html,stats:e.data.stats})},this.handleWorkerError=e=>{let t=Error(e.message||`Preview worker failed`);this.workerJob&&=(this.workerJob.reject(t),null),this.reset(`Preview worker failed`,{disable:!0})}}hasPendingJob(){return this.workerJob!==null}ensureWorker(){if(this.workerDisabled)return null;if(this.worker)return this.worker;try{return this.worker=this.createWorkerFn(),this.worker.addEventListener(`message`,this.handleWorkerMessage),this.worker.addEventListener(`error`,this.handleWorkerError),this.worker}catch{return this.workerDisabled=!0,null}}async compile(e,t,{frontmatterCollapsed:n=!1,frontmatterInteractive:r=!1,subpath:i=``}={}){if(this.ensureWorker()){this.workerJob&&this.cancelWorkerJob(`Superseded preview render`);let a=this.ensureWorker();return new Promise((o,s)=>{this.workerJob={reject:s,renderVersion:t,resolve:o},a.postMessage({attachmentApiPath:this.attachmentApiPath,fileList:this.getFileList?.()??[],frontmatterCollapsed:n,frontmatterInteractive:r,markdownText:e,renderVersion:t,sourceFilePath:this.getSourceFilePath?.()??``,subpath:i,wikiLinkAutoCreate:this.getWikiLinkAutoCreate?.()??!0})})}let{compilePreviewDocument:a}=await this.compilePreviewDocumentLoader();return a({attachmentApiPath:this.attachmentApiPath,fileList:this.getFileList?.()??[],frontmatterCollapsed:n,frontmatterInteractive:r,markdownText:e,sourceFilePath:this.getSourceFilePath?.()??``,subpath:i,wikiLinkAutoCreate:this.getWikiLinkAutoCreate?.()??!0})}cancelWorkerJob(e){this.workerJob&&=(this.workerJob.reject(Error(e)),null)}reset(e,{disable:t=!1}={}){this.cancelWorkerJob(e),this.worker&&=(this.worker.removeEventListener(`message`,this.handleWorkerMessage),this.worker.removeEventListener(`error`,this.handleWorkerError),this.worker.terminate(),null),t&&(this.workerDisabled=!0)}destroy(e=`Preview renderer destroyed`){this.reset(e)}},Le=class{constructor({getRenderProfileFn:e=ce}={}){this.getRenderProfileFn=e,this.frameId=null,this.idleId=null,this.timeoutId=null}queue({markdownText:e,onRenderRequested:t,renderVersion:n}){let r=this.getRenderProfileFn(e);this.cancel();let i=()=>{this.frameId=requestAnimationFrame(()=>{this.frameId=null,this.timeoutId=null,t?.(e,n)})},a=()=>{if(r.deferUntilIdle){this.idleId=s(()=>{this.idleId=null,i()},500);return}i()};this.timeoutId=setTimeout(a,r.debounceMs)}cancel(){clearTimeout(this.timeoutId),this.frameId&&cancelAnimationFrame(this.frameId),l(this.idleId),this.frameId=null,this.idleId=null,this.timeoutId=null}destroy(){this.cancel()}},Re=class{constructor({getContent:e,getFileList:t,getPreviewVisible:n=null,getSourceFilePath:r,getSubpath:i=null,getTheme:a=null,getWikiLinkAutoCreate:o=null,loadFileSource:s=null,onAfterRenderCommit:c,onBeforeRenderCommit:l,onPreviewLayoutChange:u,onRenderComplete:d,outlineController:f,plantUmlRenderClient:p=null,previewContainer:m,previewElement:h,toastController:ee=null}){this.getContent=e,this.getFileList=t,this.getPreviewVisible=n,this.getSourceFilePath=r,this.getSubpath=i,this.getTheme=a,this.getWikiLinkAutoCreate=o,this.loadFileSource=s,this.onAfterRenderCommit=c,this.onBeforeRenderCommit=l,this.onPreviewLayoutChange=u,this.onRenderComplete=d,this.outlineController=f,this.plantUmlRenderClient=p,this.previewContainer=m,this.previewElement=h,this.toastController=ee,this.renderHost=null,this.pendingRenderVersion=0,this.activeRenderVersion=0,this.readyRenderVersion=0,this.currentStats=null,this.isLargeDocument=!1,this.hydrationPaused=!1,this.frontmatterCollapsed=!1,this.previewRenderStale=!1,this.handlePreviewClick=e=>{if(e.target.closest(`.frontmatter-toggle`)){e.preventDefault(),this.frontmatterCollapsed=!this.frontmatterCollapsed,this.applyFrontmatterState(),this.handleFrontmatterLayoutChange();return}let t=e.target.closest(`.mermaid-placeholder-btn`);if(t){let n=t.closest(`.mermaid-shell`);if(!n)return;e.preventDefault(),t.closest(`.diagram-preview-error-card`)?this.mermaidHydrator.retryShell(n):this.mermaidHydrator.enqueueShell(n,{prioritize:!0});return}let n=e.target.closest(`.plantuml-placeholder-btn`);if(n){let t=n.closest(`.plantuml-shell`);if(!t)return;e.preventDefault(),n.closest(`.diagram-preview-error-card`)?this.plantUmlHydrator.retryShell(t):this.plantUmlHydrator.enqueueShell(t,{prioritize:!0})}},this.handleWindowResize=()=>{this.scheduleActiveMermaidRefit(),this.scheduleActivePlantUmlRefit()},this.diagramChrome=new Pe({toastController:ee}),this.mermaidHydrator=new Ee(this,{loadFileSource:s}),this.plantUmlHydrator=new De(this,{loadFileSource:s,renderClient:p}),this.renderScheduler=new Le,this.renderExecutor=new Ie({attachmentApiPath:w(`/attachment`),getFileList:()=>this.getFileList?.()??[],getSourceFilePath:()=>this.getSourceFilePath?.()??``,getWikiLinkAutoCreate:()=>this.getWikiLinkAutoCreate?.()??!0}),this.previewElement?.addEventListener(`click`,this.handlePreviewClick),window.addEventListener(`resize`,this.handleWindowResize),this.setPhase(`ready`)}ensureRenderHost(){if(!this.previewElement)return null;if(this.renderHost?.isConnected&&this.renderHost.parentElement===this.previewElement)return this.renderHost;let e=this.previewElement.querySelector(`[data-preview-render-host="true"]`);return e||(e=document.createElement(`div`),e.dataset.previewRenderHost=`true`,this.previewElement.appendChild(e)),this.renderHost=e,this.renderHost}normalizePreviewChildren(e=this.renderHost){this.previewElement&&Array.from(this.previewElement.children).forEach(t=>{t!==e&&t.dataset.drawioOverlayRoot!==`true`&&t.dataset.excalidrawOverlayRoot!==`true`&&t.dataset.videoOverlayRoot!==`true`&&t.remove()})}getReservedPreviewHeight(){let e=this.renderHost?.getBoundingClientRect?.().height??0,t=this.previewContainer?.clientHeight??0;return Math.max(Math.round(e),Math.round(t),320)}beginDocumentLoad(){this.renderScheduler.cancel(),this.mermaidHydrator.cancelHydration(),this.plantUmlHydrator.cancelHydration(),this.mermaidHydrator.clearPreservedShells(),this.plantUmlHydrator.clearPreservedShells(),this.diagramChrome.clearActiveShell(),this.onBeforeRenderCommit?.(this.previewElement),this.pendingRenderVersion+=1,this.activeRenderVersion=this.pendingRenderVersion,this.readyRenderVersion=0,this.currentStats=null,this.isLargeDocument=!1,this.frontmatterCollapsed=!1,this.renderExecutor.hasPendingJob()&&this.renderExecutor.reset(`Document changed`);let e=this.ensureRenderHost();this.normalizePreviewChildren(e);let t=this.getReservedPreviewHeight();e&&(e.replaceChildren(),e.style.minHeight=`${t}px`);let n=document.createElement(`div`);n.className=`preview-shell`,n.style.minHeight=`${t}px`,n.textContent=`Rendering preview…`,e?.append(n),this.setPhase(`shell`)}applyTheme(e){let t=document.getElementById(`hljs-theme`);if(t){let{darkHref:n,lightHref:r}=t.dataset;t.href=e===`dark`?n:r}this.mermaidHydrator.applyTheme(e)}markStale(){this.previewRenderStale=!0,this.renderScheduler.cancel()}queueRender(){if(!(this.getPreviewVisible?.()??!0)){this.markStale();return}this.previewRenderStale=!1,this._deferredPreviewStylesPromise??=Promise.all([v(async()=>{let{ensureHighlightThemeStylesheet:e}=await import(`./highlight-theme-CzNkO-IJ.js`);return{ensureHighlightThemeStylesheet:e}},[],import.meta.url).then(({ensureHighlightThemeStylesheet:e})=>{e(),this.applyTheme(this.getTheme?.()??`dark`)}),v(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url)]);let e=this.getContent();this.renderScheduler.cancel(),this.mermaidHydrator.markPending(),this.plantUmlHydrator.markPending(),this.pendingRenderVersion+=1;let t=this.pendingRenderVersion;this.renderScheduler.queue({markdownText:e,onRenderRequested:(e,t)=>{this._deferredPreviewStylesPromise.then(()=>{if(t===this.pendingRenderVersion)return this.render(e,t)})},renderVersion:t})}async render(e=this.getContent(),t=this.pendingRenderVersion){if(this.previewElement)try{let n=await this.renderExecutor.compile(e,t,{frontmatterCollapsed:this.frontmatterCollapsed,frontmatterInteractive:!0,subpath:this.getSubpath?.()??``});if(t!==this.pendingRenderVersion)return;this.commitBaseRender(n,t)}catch(e){if(t!==this.pendingRenderVersion)return;console.warn(`[preview] Failed to render preview:`,e)}}destroy(){this.pendingRenderVersion+=1,this.renderScheduler.destroy(),this.diagramChrome.destroy(),this.mermaidHydrator.destroy(),this.plantUmlHydrator.destroy(),this.renderExecutor.destroy(),this.previewElement?.removeEventListener(`click`,this.handlePreviewClick),window.removeEventListener(`resize`,this.handleWindowResize)}setPhase(e){this.previewElement&&(this.previewElement.dataset.renderPhase=e)}scheduleActiveMermaidRefit(){this.diagramChrome.scheduleActiveRefit({kind:`mermaid`,root:this.previewElement})}scheduleActivePlantUmlRefit(){this.diagramChrome.scheduleActiveRefit({kind:`plantuml`,root:this.previewElement})}setHydrationPaused(e){if(this.hydrationPaused=!!e,this.hydrationPaused){this.mermaidHydrator.cancelPendingIdleWork(),this.plantUmlHydrator.cancelPendingIdleWork();return}this.mermaidHydrator.hydrateVisibleShells(),this.mermaidHydrator.scheduleHydration(),this.plantUmlHydrator.hydrateVisibleShells(),this.plantUmlHydrator.scheduleHydration(),this.updateHydrationPhase()}commitBaseRender({html:e,stats:t},n){let r=this.previewContainer?.scrollTop??0;this.activeRenderVersion=n,this.readyRenderVersion=0,this.currentStats=t,this.isLargeDocument=x(t),this.mermaidHydrator.cancelHydration({preserveActiveShell:!0}),this.plantUmlHydrator.cancelHydration({preserveActiveShell:!0}),this.mermaidHydrator.preserveHydratedShellsForCommit(),this.plantUmlHydrator.preserveHydratedShellsForCommit(),this.onBeforeRenderCommit?.(this.previewElement);let i=this.ensureRenderHost();this.normalizePreviewChildren(i),i&&(i.innerHTML=e),this.applyFrontmatterState(),this.mermaidHydrator.reconcileHydratedShells(),this.plantUmlHydrator.reconcileHydratedShells(),this.previewContainer&&(this.previewContainer.scrollTop=r),this.setPhase(`base`),this.outlineController?.refresh(),this.onAfterRenderCommit?.(this.previewElement,{...t,isLargeDocument:this.isLargeDocument,renderVersion:n});let a=this.mermaidHydrator.setupHydration(n),o=this.plantUmlHydrator.setupHydration(n);a===0&&o===0&&this.notifyReady()}applyFrontmatterState(){let e=this.renderHost?.querySelector?.(`.frontmatter-block`);if(!(e instanceof HTMLElement))return;let t=this.frontmatterCollapsed,n=e.querySelector(`.frontmatter-toggle`),r=e.querySelector(`.frontmatter-summary`),i=e.querySelector(`.frontmatter-content`);e.dataset.collapsed=t?`true`:`false`,n instanceof HTMLButtonElement&&(n.setAttribute(`aria-expanded`,t?`false`:`true`),n.textContent=t?`Show`:`Hide`),r instanceof HTMLElement&&(r.hidden=!t),i instanceof HTMLElement&&(i.hidden=t)}handleFrontmatterLayoutChange(){this.outlineController?.refresh(),this.onPreviewLayoutChange?.({isLargeDocument:this.isLargeDocument,renderVersion:this.activeRenderVersion,stats:this.currentStats})}updateHydrationPhase(){if(this.hydrationPaused&&(this.mermaidHydrator.hasPendingWork()||this.plantUmlHydrator.hasPendingWork())){this.setPhase(`base`);return}if(this.mermaidHydrator.hasPendingWork()||this.plantUmlHydrator.hasPendingWork()){this.setPhase(`hydrating`);return}this.notifyReady()}notifyReady(){this.renderHost&&(this.renderHost.style.minHeight=``),this.setPhase(`ready`),this.readyRenderVersion!==this.activeRenderVersion&&(this.readyRenderVersion=this.activeRenderVersion,this.onRenderComplete?.({isLargeDocument:this.isLargeDocument,stats:this.currentStats}))}};function ze(...e){return e.flat().flatMap(e=>e&&typeof e==`object`?Object.keys(e).filter(t=>e[t]):e||[]).join(` `)}function P(e={}){return ze(`ui-input`,e.extra??[])}function F(e={}){let{variant:t=`secondary`,size:n=`md`,toggle:r=!1,toolbar:i=!1,action:a=!1,wide:o=!1,surface:s=!1,pill:c=!1,hidden:l=!1,active:u=!1,extra:d=[]}=e;return ze(`ui-button`,t&&`ui-button--${t}`,n!==`md`&&`ui-button--${n}`,{"ui-button--toggle":r,"ui-button--toolbar":i,"ui-button--action":a,"ui-button--wide":o,"ui-button--surface":s,"ui-button--pill":c,active:u,hidden:l},d)}function Be(e={}){return ze(`ui-segmented-control`,{"ui-segmented-control--pill":e.pill,hidden:e.hidden},e.extra??[])}function Ve(e={}){return ze(`ui-segmented-btn`,{active:e.active,hidden:e.hidden},e.extra??[])}function He(){return`base-${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}`}function I(e,t){let n=String(t??``);if(typeof DOMParser==`function`&&typeof e?.replaceChildren==`function`){let t=new DOMParser().parseFromString(`<body>${n}</body>`,`text/html`);e.replaceChildren(...t.body.childNodes);return}Reflect.set(e,`innerHTML`,n)}function Ue(e,t){if(typeof DOMParser!=`function`||typeof e?.after!=`function`)return;let n=new DOMParser().parseFromString(`<body>${String(t??``)}</body>`,`text/html`);e.after(...n.body.childNodes)}function We(e=``){return/^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/iu.test(String(e??``).trim())}function Ge(e=``){return/^https?:\/\/.+\.(?:png|jpe?g|webp|gif|svg)(?:[?#].*)?$/iu.test(String(e??``).trim())}function Ke(e){return Object.prototype.toString.call(e)===`[object Object]`}function L(e=`and`){return{children:[],conjunction:e,type:`group`}}function qe(e,t,n){let r=e.image||t.find(e=>[`cover`,`image`].includes(String(e.id??``).toLowerCase()))?.id||null;return r?n.cells[r]??null:null}function R(e){return String(e?.text??``)}function Je(e=``){return w(`/attachment?path=${encodeURIComponent(e)}`)}function Ye(t={}){if(t?.type===`image`&&t.path)return Je(t.path);if(t?.type===`link`){if(t.external&&Ge(t.url))return t.url;if(t.path&&e(t.path))return Je(t.path)}let n=R(t);return Ge(n)?n:e(n)?Je(n):``}function Xe(e={}){let t=e?.type||`string`;if(t===`empty`)return`<span class="bases-value bases-value-empty">—</span>`;if(t===`boolean`)return`<span class="bases-value bases-value-boolean">${e.value?`True`:`False`}</span>`;if(t===`image`&&e.path)return`<img class="bases-inline-image" src="${y(Je(e.path))}" alt="${y(R(e))}">`;if(t===`list`)return`<span class="bases-value-list">${(e.items??[]).map(e=>`<span class="bases-value-pill">${Xe(e)}</span>`).join(``)}</span>`;if(t===`link`){if(e.external&&e.url)return`<a class="bases-link" href="${y(e.url)}" target="_blank" rel="noopener noreferrer">${y(R(e))}</a>`;if(e.path)return`<button type="button" class="${y(F({variant:`secondary`,size:`compact`,pill:!0,extra:[`bases-link`,`bases-link-button`]}))}" data-base-open-file="${y(e.path)}">${y(R(e))}</button>`}if(t===`file`&&e.path)return`<button type="button" class="${y(F({variant:`secondary`,size:`compact`,pill:!0,extra:[`bases-link`,`bases-link-button`]}))}" data-base-open-file="${y(e.path)}">${y(R(e))}</button>`;let n=R(e);return`<span class="bases-value">${y(n)}</span>`}function Ze(e,t){let n=t?.cells?.[e.id]??null;return t?.path&&n&&n.type!==`empty`&&(e.id===`file.name`||e.id===`file.basename`)?`<button type="button" class="${y(F({variant:`secondary`,size:`compact`,pill:!0,extra:[`bases-link`,`bases-link-button`]}))}" data-base-open-file="${y(t.path)}">${y(R(n))}</button>`:Xe(n)}function z(e=[]){return!Array.isArray(e)||e.length===0?``:`<div class="bases-summaries">${e.map(e=>`<div class="bases-summary"><span class="bases-summary-label">${y(e.label)}</span><span class="bases-summary-value">${y(R(e.value))}</span></div>`).join(``)}</div>`}function Qe(e,t){return t.map(t=>`<section class="bases-group"><header class="bases-group-header"><h3>${y(t.label)}</h3>${z(t.summaries)}</header><div class="bases-table-shell"><table class="bases-table"><thead><tr>${e.map(e=>`<th>${y(e.label)}</th>`).join(``)}</tr></thead><tbody>${(t.rows??[]).map(t=>`<tr>${e.map(e=>`<td>${Ze(e,t)}</td>`).join(``)}</tr>`).join(``)}</tbody></table></div></section>`).join(``)}function $e(e,t){return t.map(t=>`<section class="bases-group"><header class="bases-group-header"><h3>${y(t.label)}</h3>${z(t.summaries)}</header><ul class="bases-list">${(t.rows??[]).map(t=>`<li class="bases-list-item">${e.map(e=>{let n=t.cells[e.id];return!n||n.type===`empty`?``:`<span class="bases-list-field"><strong>${y(e.label)}:</strong> ${Ze(e,t)}</span>`}).join(``)}</li>`).join(``)}</ul></section>`).join(``)}function et(e,t,n){return t.map(t=>`<section class="bases-group"><header class="bases-group-header"><h3>${y(t.label)}</h3>${z(t.summaries)}</header><div class="bases-cards">${(t.rows??[]).map(t=>{let r=qe(n,e,t),i=R(r),a=``;if(We(i))a=`<div class="bases-card-media bases-card-media-color" style="--bases-card-swatch:${y(i)}"></div>`;else{let e=Ye(r);e&&(a=`<img class="bases-card-media" src="${y(e)}" alt="${y(i)}">`)}return`<article class="bases-card">${a}<div class="bases-card-body">${e.map(e=>{let n=t.cells[e.id];return!n||n.type===`empty`?``:`<div class="bases-card-field"><div class="bases-card-label">${y(e.label)}</div><div class="bases-card-value">${Ze(e,t)}</div></div>`}).join(``)}</div></article>`}).join(``)}</div></section>`).join(``)}function tt(e){if(!e.view.supported)return`<div class="bases-unsupported">CollabMD parsed this view but does not render the <code>${y(e.view.type)}</code> layout yet.</div>`;switch(e.view.type){case`cards`:return et(e.columns,e.groups,e.view);case`list`:return $e(e.columns,e.groups);default:return Qe(e.columns,e.groups)}}function nt(e){return(e.views??[]).map(t=>`<button type="button" class="${y(Ve({active:t.id===e.view.id,extra:`bases-view-tab`}))}" data-base-view="${y(t.id)}">${y(t.name)}</button>`).join(``)}function B(e){return e?.meta??{}}function V(e){return B(e).availableProperties??[]}function rt(e){let t=B(e).activeViewConfig?.order;return Array.isArray(t)&&t.length>0?[...t]:Array.isArray(e?.columns)?e.columns.map(e=>e.id).filter(Boolean):[]}function it(e,t=``){return V(e).find(e=>e.id===t)??null}function at(e,t=``){return it(e,t)?.filterOperators??[`is`,`is not`,`contains`,`does not contain`,`is empty`,`is not empty`]}function H(e){let t=B(e).activeViewConfig??{};return{filters:t.filters??null,groupBy:t.groupBy??null,order:Array.isArray(t.order)?[...t.order]:[],sort:Array.isArray(t.sort)?t.sort.map(e=>({...e})):[]}}function ot(e){return!!(e?.payload?.path&&e?.payload?.sourcePath&&e.payload.path===e.payload.sourcePath)}function st(e,t,n,r){let i=n.ui?.openPanel===t,a=!!B(r).editable;return`<button type="button" class="${y(F({variant:i?`primary`:`secondary`,pill:!0,extra:[`bases-toolbar-btn`,i?`is-active`:``]}))}" data-base-panel="${y(t)}"${a?``:` disabled`}>${y(e)}</button>`}function ct(e,t=``){if(!e||e.type!==`group`||!t)return e;let n=(e.children??[]).flatMap(e=>{if(e?.type===`group`){let n=ct(e,t);return n?[n]:[]}return e?.propertyId===t?[]:[e]});return{...e,children:n}}function lt(e,t=``,n=e?.result){let r=B(n).activeViewConfig?.filters??null,i=K(r),a=t&&i?vt(ct(i,t),n):r;return JSON.stringify({filters:a,path:e?.payload?.path??``,source:e?.payload?.source??null,sourcePath:e?.payload?.sourcePath??``,view:n?.view?.id??e?.payload?.view??``})}function ut(e,t=``,n=e?.result){let r=e?.propertyValueOptions?.get(t)??null;return r&&r.cacheKey===lt(e,t,n)?r.values??[]:[]}function dt(e,t){return[st(`Sort`,`sort`,t,e),st(`Filter`,`filter`,t,e),st(`Properties`,`properties`,t,e)].join(``)}function ft(e,{allowBlank:t=!1,selected:n=``}={}){let r=[];return t&&r.push(`<option value=""${n?``:` selected`}>Property</option>`),V(e).forEach(e=>{r.push(`<option value="${y(e.id)}"${e.id===n?` selected`:``}>${y(e.label)}</option>`)}),r.join(``)}function pt(e){let t=H(e),n=it(e,t.groupBy?.property)?.sortDirections??[{id:`asc`,label:`A → Z`},{id:`desc`,label:`Z → A`}],r=t.sort??[];return`
|
|
42
|
+
<section class="bases-panel-card">
|
|
43
|
+
<div class="bases-panel-section">
|
|
44
|
+
<div class="bases-panel-title">Group by</div>
|
|
45
|
+
<div class="bases-sort-row">
|
|
46
|
+
<select class="${y(P({extra:`bases-select bases-sort-property`}))}" data-base-group-by-property aria-label="Group by property">
|
|
47
|
+
${ft(e,{allowBlank:!0,selected:t.groupBy?.property??``})}
|
|
48
|
+
</select>
|
|
49
|
+
<select class="${y(P({extra:`bases-select bases-sort-direction`}))}" data-base-group-by-direction aria-label="Group direction"${t.groupBy?.property?``:` disabled`}>
|
|
50
|
+
${n.map(e=>`<option value="${y(e.id)}"${e.id===(t.groupBy?.direction??`asc`)?` selected`:``}>${y(e.label)}</option>`).join(``)}
|
|
51
|
+
</select>
|
|
52
|
+
<button type="button" class="${y(F({variant:`secondary`,size:`compact`}))}" data-base-clear-group-by${t.groupBy?.property?``:` disabled`}>Clear</button>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
<div class="bases-panel-section">
|
|
56
|
+
<div class="bases-panel-title">Sort by</div>
|
|
57
|
+
<div class="bases-sort-list">
|
|
58
|
+
${r.map((t,n)=>{let i=it(e,t.property)?.sortDirections??[{id:`asc`,label:`A → Z`},{id:`desc`,label:`Z → A`}];return`
|
|
59
|
+
<div class="bases-sort-row">
|
|
60
|
+
<select class="${y(P({extra:`bases-select bases-sort-property`}))}" data-base-sort-property="${n}" aria-label="Sort rule ${n+1} property">
|
|
61
|
+
${ft(e,{selected:t.property})}
|
|
62
|
+
</select>
|
|
63
|
+
<select class="${y(P({extra:`bases-select bases-sort-direction`}))}" data-base-sort-direction="${n}" aria-label="Sort rule ${n+1} direction">
|
|
64
|
+
${i.map(e=>`<option value="${y(e.id)}"${e.id===t.direction?` selected`:``}>${y(e.label)}</option>`).join(``)}
|
|
65
|
+
</select>
|
|
66
|
+
<button type="button" class="${y(F({variant:`secondary`,size:`compact`}))}" data-base-sort-move="${n}:up" aria-label="Move sort rule ${n+1} up"${n===0?` disabled`:``}>↑</button>
|
|
67
|
+
<button type="button" class="${y(F({variant:`secondary`,size:`compact`}))}" data-base-sort-move="${n}:down" aria-label="Move sort rule ${n+1} down"${n===r.length-1?` disabled`:``}>↓</button>
|
|
68
|
+
<button type="button" class="${y(F({variant:`secondary`,size:`compact`}))}" data-base-sort-delete="${n}" aria-label="Delete sort rule ${n+1}">Delete</button>
|
|
69
|
+
</div>
|
|
70
|
+
`}).join(``)}
|
|
71
|
+
</div>
|
|
72
|
+
<button type="button" class="${y(F({variant:`secondary`,size:`compact`}))}" data-base-sort-add>Add sort</button>
|
|
73
|
+
</div>
|
|
74
|
+
</section>
|
|
75
|
+
`}function mt(e=[]){return e.join(`.`)}function ht(e=[]){return e.map(e=>e+1).join(`.`)}function U(e=``){return String(e??``).split(`.`).filter(e=>e!==``).map(e=>Number.parseInt(e,10)).filter(Number.isFinite)}function gt(e=``){return JSON.stringify(String(e??``))}function W(e=``,t=`text`,n=`is`){let r=String(e??``).trim();return!r&&n!==`is`&&n!==`is not`?`""`:t===`boolean`?r===`false`?`false`:`true`:t===`number`&&Number.isFinite(Number(r))?String(Number(r)):gt(r)}function _t(e,t=null){if(!e?.propertyId||!e?.operator)return``;let n=e.propertyId,r=t?.valueType??`text`;switch(e.operator){case`contains`:return`${n}.contains(${W(e.value,r,e.operator)})`;case`does not contain`:return`!${n}.contains(${W(e.value,r,e.operator)})`;case`starts with`:return`${n}.startsWith(${W(e.value,r,e.operator)})`;case`ends with`:return`${n}.endsWith(${W(e.value,r,e.operator)})`;case`is`:return`${n} == ${W(e.value,r,e.operator)}`;case`is not`:return`${n} != ${W(e.value,r,e.operator)}`;case`>`:case`>=`:case`<`:case`<=`:return`${n} ${e.operator} ${W(e.value,r,e.operator)}`;case`is empty`:return`${n}.isEmpty()`;case`is not empty`:return`!${n}.isEmpty()`;default:return``}}function vt(e,t){if(!e||e.type!==`group`)return null;let n=(e.children??[]).map(e=>e?.type===`group`?vt(e,t):_t(e,it(t,e?.propertyId))).filter(Boolean);return n.length===0?null:e.conjunction===`not`?{not:n}:{[e.conjunction]:n}}function G(e=``){let t=String(e??``).trim();return t?t===`true`||t===`false`?t:t===`null`?``:/^-?\d+(?:\.\d+)?$/u.test(t)?t:t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1).replace(/\\(["'])/gu,`$1`):t:``}function yt(e=``){let t=String(e??``).trim(),n=[[/^!([A-Za-z0-9_.]+)\.isEmpty\(\)$/u,(e,t)=>({operator:`is not empty`,propertyId:t,type:`rule`,value:``})],[/^([A-Za-z0-9_.]+)\.isEmpty\(\)$/u,(e,t)=>({operator:`is empty`,propertyId:t,type:`rule`,value:``})],[/^!([A-Za-z0-9_.]+)\.contains\((.+)\)$/u,(e,t,n)=>({operator:`does not contain`,propertyId:t,type:`rule`,value:G(n)})],[/^([A-Za-z0-9_.]+)\.contains\((.+)\)$/u,(e,t,n)=>({operator:`contains`,propertyId:t,type:`rule`,value:G(n)})],[/^([A-Za-z0-9_.]+)\.startsWith\((.+)\)$/u,(e,t,n)=>({operator:`starts with`,propertyId:t,type:`rule`,value:G(n)})],[/^([A-Za-z0-9_.]+)\.endsWith\((.+)\)$/u,(e,t,n)=>({operator:`ends with`,propertyId:t,type:`rule`,value:G(n)})],[/^([A-Za-z0-9_.]+)\s*(==|!=|>=|<=|>|<)\s*(.+)$/u,(e,t,n,r)=>({operator:{"!=":`is not`,"==":`is`,"<":`<`,"<=":`<=`,">":`>`,">=":`>=`}[n]??n,propertyId:t,type:`rule`,value:G(r)})]];for(let[e,r]of n){let n=t.match(e);if(n)return r(...n)}return null}function K(e){if(!e)return L(`and`);if(typeof e==`string`){let t=yt(e);return t?{children:[t],conjunction:`and`,type:`group`}:null}if(!Ke(e))return null;if(Array.isArray(e.and)){let t=e.and.map(e=>K(e)).flatMap(e=>e?.type===`group`&&e.conjunction===`and`&&e.children?.length===1&&e.children[0]?.type===`rule`?e.children:[e]);return t.every(Boolean)?{children:t,conjunction:`and`,type:`group`}:null}if(Array.isArray(e.or)){let t=e.or.map(e=>K(e)).flatMap(e=>e?.type===`group`&&e.conjunction===`and`&&e.children?.length===1&&e.children[0]?.type===`rule`?e.children:[e]);return t.every(Boolean)?{children:t,conjunction:`or`,type:`group`}:null}if(e.not!=null){let t=(Array.isArray(e.not)?e.not:(()=>{let t=K(e.not);return t?t.type===`group`&&t.conjunction===`or`?t.children??[]:[t]:[]})()).flatMap(e=>{let t=e?.type?e:K(e);return t?t.type===`group`&&t.conjunction===`and`&&t.children?.length===1&&t.children[0]?.type===`rule`?t.children:[t]:[null]});return t.every(Boolean)?{children:t,conjunction:`not`,type:`group`}:null}return null}function q(e){return e?typeof e==`string`?e:JSON.stringify(e,null,2):``}function bt(e=``){let t=String(e??``).trim();if(!t)return null;if(t.startsWith(`{`)||t.startsWith(`[`))try{return JSON.parse(t)}catch(e){throw Error(`Invalid advanced filter JSON`,{cause:e})}return t}function xt(e,t=[]){let n=e;for(let e of t)n=n?.children?.[e];return n??null}function J(e,t=[],n){if(t.length===0)return n(e);let[r,...i]=t;return{...e,children:(e.children??[]).map((e,t)=>t===r?J(e,i,n):e)}}function St(e,t=[]){if(t.length===0)return e;let n=t.slice(0,-1),r=t[t.length-1];return J(e,n,e=>({...e,children:(e.children??[]).filter((e,t)=>t!==r)}))}function Ct(e,t=[],n){return J(e,t,e=>({...e,children:[...e.children??[],n]}))}function wt(e,t=``){return ft(e,{allowBlank:!0,selected:t})}function Tt(e={}){return String(e?.text??e?.value??``).trim()}function Et(e,t){return e.ui.builderFilter??K(H(t).filters)??L(`and`)}function Dt(e,t,n,r){let i=mt(n),a=at(e,t.propertyId),o=String(t.value??``).trim().toLowerCase(),s=ut(r,t.propertyId,e).map(e=>({count:e?.count,text:Tt(e)})).filter((e,t,n)=>e.text&&n.findIndex(t=>t.text===e.text)===t),c=s.some(e=>e.text.toLowerCase()===o),l=s.filter(e=>!o||e.text.toLowerCase().includes(o)),u=!o||c?s:l.length>0?l:s,d=u.length>0&&![`is empty`,`is not empty`].includes(t.operator);return{encodedPath:i,operators:a,suggestionListId:`bases-filter-suggestions-${y(r.key)}-${y(i.replace(/\./g,`-`))}`,suggestionsEnabled:d,valueInputClasses:P({extra:d?`bases-filter-value bases-filter-value--suggestions`:`bases-filter-value`}),valueSuggestions:u,valueDisabled:[`is empty`,`is not empty`].includes(t.operator)}}function Ot(e,t=``){return e.suggestionsEnabled?`
|
|
76
|
+
<div class="bases-filter-suggestion-list" id="${e.suggestionListId}" role="listbox">
|
|
77
|
+
${e.valueSuggestions.slice(0,8).map(n=>`
|
|
78
|
+
<button
|
|
79
|
+
type="button"
|
|
80
|
+
class="bases-filter-suggestion"
|
|
81
|
+
data-base-filter-suggestion="${y(e.encodedPath)}"
|
|
82
|
+
data-base-filter-suggestion-value="${y(n.text)}"
|
|
83
|
+
role="option"
|
|
84
|
+
aria-selected="${n.text===String(t??``)?`true`:`false`}"
|
|
85
|
+
>
|
|
86
|
+
<span class="bases-filter-suggestion-label">${y(n.text)}</span>
|
|
87
|
+
${n.count==null?``:`<span class="bases-filter-suggestion-meta">${y(String(n.count))}</span>`}
|
|
88
|
+
</button>
|
|
89
|
+
`).join(``)}
|
|
90
|
+
</div>
|
|
91
|
+
`:``}function kt(e,t,n,r){let i=Dt(e,t,n,r),a=`Filter ${ht(n)}`;return`
|
|
92
|
+
<div class="bases-filter-value-combobox${i.suggestionsEnabled?` has-suggestions`:``}">
|
|
93
|
+
<input class="${y(i.valueInputClasses)}" type="text" value="${y(t.value??``)}" data-base-filter-value="${y(i.encodedPath)}" aria-label="${a} value"${i.suggestionsEnabled?` aria-controls="${i.suggestionListId}" aria-haspopup="listbox" aria-autocomplete="list" autocomplete="off"`:``}${i.valueDisabled?` disabled`:``}>
|
|
94
|
+
${Ot(i,t.value??``)}
|
|
95
|
+
</div>
|
|
96
|
+
`}function At(e,t,n,r){let i=Dt(e,t,n,r),a=`Filter ${ht(n)}`;return`
|
|
97
|
+
<div class="bases-filter-row">
|
|
98
|
+
<select class="${y(P({extra:`bases-select bases-filter-property`}))}" data-base-filter-property="${y(i.encodedPath)}" aria-label="${a} property">
|
|
99
|
+
${wt(e,t.propertyId)}
|
|
100
|
+
</select>
|
|
101
|
+
<select class="${y(P({extra:`bases-select bases-filter-operator`}))}" data-base-filter-operator="${y(i.encodedPath)}" aria-label="${a} operator">
|
|
102
|
+
${i.operators.map(e=>`<option value="${y(e)}"${e===t.operator?` selected`:``}>${y(e)}</option>`).join(``)}
|
|
103
|
+
</select>
|
|
104
|
+
${kt(e,t,n,r)}
|
|
105
|
+
<button type="button" class="${y(F({variant:`secondary`,size:`compact`}))}" data-base-filter-remove="${y(i.encodedPath)}" aria-label="Delete ${a.toLowerCase()}">Delete</button>
|
|
106
|
+
</div>
|
|
107
|
+
`}function jt(e,t,n,{fallbackToFullRender:r=!0}={}){let i=Bt(e)?.querySelector?.(`[data-base-panel-slot]`)??null,a=mt(n),o=i?.querySelector?.(`[data-base-filter-value="${a}"]`)??null,s=o?.parentElement?.classList?.contains(`bases-filter-value-combobox`)?o.parentElement:null,c=xt(Et(e,t),n);if(!o||!s||!c||c.type!==`rule`||typeof o.insertAdjacentHTML!=`function`)return r&&Y(e,t),!1;let l=Dt(t,c,n,e);return s.classList.toggle(`has-suggestions`,l.suggestionsEnabled),o.className=l.valueInputClasses,o.disabled=l.valueDisabled,o.setAttribute(`aria-label`,`Filter ${ht(n)} value`),o.value!==String(c.value??``)&&(o.value=String(c.value??``)),l.suggestionsEnabled?(o.setAttribute(`aria-controls`,l.suggestionListId),o.setAttribute(`aria-haspopup`,`listbox`),o.setAttribute(`aria-autocomplete`,`list`),o.setAttribute(`autocomplete`,`off`)):(o.removeAttribute(`aria-controls`),o.removeAttribute(`aria-haspopup`),o.removeAttribute(`aria-autocomplete`),o.removeAttribute(`autocomplete`)),s.querySelector(`.bases-filter-suggestion-list`)?.remove?.(),l.suggestionsEnabled&&Ue(o,Ot(l,c.value??``)),!0}function Mt(e,t,n=[]){if(e){if(e.type===`rule`){t(e,n);return}(e.children??[]).forEach((e,r)=>{Mt(e,t,[...n,r])})}}function Nt(e,t,n,r,{isRoot:i=!1}={}){let a=mt(n),o=i?`Root filter group`:`Filter group ${ht(n)}`;return`
|
|
108
|
+
<div class="bases-filter-group"${i?` data-base-filter-root`:``}>
|
|
109
|
+
<div class="bases-filter-group-header">
|
|
110
|
+
<select class="${y(P({extra:`bases-select bases-filter-conjunction`}))}" data-base-filter-conjunction="${y(a)}" aria-label="${o} condition">
|
|
111
|
+
${[`and`,`or`,`not`].map(e=>`<option value="${e}"${t.conjunction===e?` selected`:``}>${y({and:`All the following are true`,not:`None of the following are true`,or:`Any of the following are true`}[e])}</option>`).join(``)}
|
|
112
|
+
</select>
|
|
113
|
+
${i?``:`<button type="button" class="${y(F({variant:`secondary`,size:`compact`}))}" data-base-filter-remove="${y(a)}" aria-label="Delete ${o.toLowerCase()}">Delete group</button>`}
|
|
114
|
+
</div>
|
|
115
|
+
<div class="bases-filter-children">
|
|
116
|
+
${(t.children??[]).map((t,i)=>t?.type===`group`?Nt(e,t,[...n,i],r):At(e,t,[...n,i],r)).join(``)}
|
|
117
|
+
</div>
|
|
118
|
+
<div class="bases-filter-actions-row">
|
|
119
|
+
<button type="button" class="${y(F({variant:`secondary`,size:`compact`}))}" data-base-filter-add-rule="${y(a)}" aria-label="Add filter to ${o.toLowerCase()}">Add filter</button>
|
|
120
|
+
<button type="button" class="${y(F({variant:`secondary`,size:`compact`}))}" data-base-filter-add-group="${y(a)}" aria-label="Add filter group to ${o.toLowerCase()}">Add filter group</button>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
`}function Pt(e,t){let n=H(e).filters,r=t.ui.builderFilter??K(n);t.ui.builderFilter??(t.ui.builderFilter=r);let i=r?t.ui.filterMode??`builder`:`advanced`,a=t.ui.rawFilterText??q(n);return`
|
|
124
|
+
<section class="bases-panel-card">
|
|
125
|
+
<div class="bases-panel-title-row">
|
|
126
|
+
<div class="bases-panel-title">This view</div>
|
|
127
|
+
${r?`
|
|
128
|
+
<div class="bases-toggle-row">
|
|
129
|
+
<button type="button" class="${y(F({variant:i===`builder`?`primary`:`secondary`,size:`compact`}))}" data-base-filter-mode="builder">Builder</button>
|
|
130
|
+
<button type="button" class="${y(F({variant:i===`advanced`?`primary`:`secondary`,size:`compact`}))}" data-base-filter-mode="advanced">Advanced</button>
|
|
131
|
+
</div>
|
|
132
|
+
`:``}
|
|
133
|
+
</div>
|
|
134
|
+
${i===`advanced`?`
|
|
135
|
+
<label class="bases-filter-advanced-label">
|
|
136
|
+
<span class="bases-panel-title">Filter expression</span>
|
|
137
|
+
<textarea class="${y(P({extra:`bases-filter-advanced`}))}" data-base-filter-advanced>${y(a)}</textarea>
|
|
138
|
+
</label>
|
|
139
|
+
<div class="bases-filter-actions-row">
|
|
140
|
+
<button type="button" class="${y(F({variant:`primary`,size:`compact`}))}" data-base-filter-save-advanced>Save filter</button>
|
|
141
|
+
</div>
|
|
142
|
+
`:Nt(e,r??L(`and`),[],t,{isRoot:!0})}
|
|
143
|
+
</section>
|
|
144
|
+
`}function Ft(e,t){let n=String(t.ui.propertySearch??``).trim().toLowerCase(),r=new Set(rt(e)),i=V(e).filter(e=>!n||e.label.toLowerCase().includes(n)||e.id.toLowerCase().includes(n));return`
|
|
145
|
+
<section class="bases-panel-card">
|
|
146
|
+
<label class="bases-properties-search">
|
|
147
|
+
<input class="${y(P({extra:`bases-properties-search-input`}))}" type="search" value="${y(t.ui.propertySearch??``)}" placeholder="Find property" data-base-properties-search>
|
|
148
|
+
</label>
|
|
149
|
+
<div class="bases-properties-list" data-base-properties-list>
|
|
150
|
+
${i.map(e=>`
|
|
151
|
+
<label class="bases-property-option">
|
|
152
|
+
<input type="checkbox" data-base-property-toggle="${y(e.id)}"${r.has(e.id)?` checked`:``}>
|
|
153
|
+
<span class="bases-property-option-label">${y(e.label)}</span>
|
|
154
|
+
<span class="bases-property-option-meta">${y(e.kind)}</span>
|
|
155
|
+
</label>
|
|
156
|
+
`).join(``)}
|
|
157
|
+
</div>
|
|
158
|
+
</section>
|
|
159
|
+
`}function It(e){let t=e?.querySelector?.(`[data-base-properties-list]`)??null,n=e?.querySelector?.(`[data-base-properties-search]`)??null,r=typeof document<`u`?document.activeElement:null,i=null;if(n&&r===n){let e=typeof n.selectionStart==`number`?n.selectionStart:null;i={selectionEnd:typeof n.selectionEnd==`number`?n.selectionEnd:e,selectionStart:e,type:`properties-search`}}else if(r?.dataset?.baseFilterValue!=null){let t=String(r.dataset.baseFilterValue),n=e?.querySelector?.(`[data-base-filter-value="${t}"]`)??null;if(n&&r===n){let e=typeof n.selectionStart==`number`?n.selectionStart:null;i={path:t,selectionEnd:typeof n.selectionEnd==`number`?n.selectionEnd:e,selectionStart:e,type:`filter-value`}}}return{focusedControl:i,propertiesListScrollTop:t?t.scrollTop:null}}function Lt(e,t){if(t){if(t.propertiesListScrollTop!=null){let n=e?.querySelector?.(`[data-base-properties-list]`)??null;n&&(n.scrollTop=t.propertiesListScrollTop)}if(t.focusedControl?.type===`properties-search`){let n=e?.querySelector?.(`[data-base-properties-search]`)??null;n&&(n.focus?.(),typeof n.setSelectionRange==`function`&&t.focusedControl.selectionStart!=null&&n.setSelectionRange(t.focusedControl.selectionStart,t.focusedControl.selectionEnd??t.focusedControl.selectionStart));return}if(t.focusedControl?.type===`filter-value`&&t.focusedControl.path!=null){let n=e?.querySelector?.(`[data-base-filter-value="${t.focusedControl.path}"]`)??null;n&&(n.focus?.(),typeof n.setSelectionRange==`function`&&t.focusedControl.selectionStart!=null&&n.setSelectionRange(t.focusedControl.selectionStart,t.focusedControl.selectionEnd??t.focusedControl.selectionStart))}}}function Rt(e,t){if(!t.ui?.openPanel)return``;if(!B(e).editable)return`<section class="bases-panel-card"><div class="bases-readonly-note">Inline base previews are read-only. Open the .base file to edit its sort, filter, and properties.</div></section>`;switch(t.ui.openPanel){case`filter`:return Pt(e,t);case`properties`:return Ft(e,t);default:return pt(e)}}function zt(e,t){return`
|
|
160
|
+
<section class="bases-shell" data-base-shell-key="${y(t.key)}">
|
|
161
|
+
<header class="bases-toolbar">
|
|
162
|
+
<div class="bases-toolbar-main">
|
|
163
|
+
<div class="${y(Be({pill:!0,extra:`bases-tabs`}))}" data-base-tabs>
|
|
164
|
+
${nt(e)}
|
|
165
|
+
</div>
|
|
166
|
+
<div class="bases-meta" data-base-meta>${y(String(e.totalRows??0))} results</div>
|
|
167
|
+
</div>
|
|
168
|
+
<div class="bases-toolbar-actions">
|
|
169
|
+
<div class="bases-toolbar-edit-actions" data-base-action-slot>${dt(e,t)}</div>
|
|
170
|
+
<label class="bases-search-shell" aria-label="Search this base">
|
|
171
|
+
<svg class="bases-search-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
172
|
+
<circle cx="11" cy="11" r="7"></circle>
|
|
173
|
+
<path d="m20 20-3.5-3.5"></path>
|
|
174
|
+
</svg>
|
|
175
|
+
<input class="${y(P({extra:`bases-search-input`}))}" type="search" value="${y(t.search)}" placeholder="Search this base" aria-label="Search this base">
|
|
176
|
+
</label>
|
|
177
|
+
<button type="button" class="${y(F({variant:`secondary`,pill:!0,extra:`bases-export-btn`}))}">Export CSV</button>
|
|
178
|
+
</div>
|
|
179
|
+
</header>
|
|
180
|
+
<div class="bases-panels" data-base-panel-slot>${Rt(e,t)}</div>
|
|
181
|
+
<div data-base-summary-slot>${z(e.summaries)}</div>
|
|
182
|
+
<div class="bases-content" data-base-content>${tt(e)}</div>
|
|
183
|
+
</section>
|
|
184
|
+
`}function Bt(e){return e?.placeholder?.querySelector?e.placeholder.querySelector(`[data-base-shell-key="${e.key}"]`)??e.placeholder.querySelector(`.bases-shell`):null}function Vt(e){e?.classList&&(e.classList.add(`is-hydrated`),e.classList.remove(`diagram-preview-shell`))}function Ht(e,t,{actions:n=!0,body:r=!0,meta:i=!0,panel:a=!0,summary:o=!0,tabs:s=!0}={}){let c=Bt(e);if(!c?.querySelector){I(e.placeholder,zt(t,e)),Vt(e.placeholder);return}let l=c.querySelector(`[data-base-tabs]`);s&&l&&I(l,nt(t));let u=c.querySelector(`[data-base-meta]`);i&&u&&(u.textContent=`${String(t.totalRows??0)} results`);let d=c.querySelector(`[data-base-action-slot]`);n&&d&&I(d,dt(t,e));let f=c.querySelector(`[data-base-panel-slot]`);if(a&&f){let n=It(f);I(f,Rt(t,e)),Lt(f,n)}let p=c.querySelector(`[data-base-summary-slot]`);o&&p&&I(p,z(t.summaries));let m=c.querySelector(`[data-base-content]`);r&&m&&I(m,tt(t));let h=c.querySelector(`.bases-search-input`);h&&h.value!==e.search&&(h.value=e.search)}function Y(e,t){Ht(e,t,{actions:!1,body:!1,meta:!1,summary:!1,tabs:!1})}var Ut=class{constructor({getActiveFilePath:e=()=>``,getSession:t=()=>null,onOpenFile:n,previewElement:r,replaceBaseSource:i=null,toastController:a,vaultApiClient:o}){this.getActiveFilePath=e,this.getSession=t,this.onOpenFile=n,this.previewElement=r,this.replaceBaseSource=i,this.toastController=a,this.vaultApiClient=o,this.entries=new Map,this.searchTimers=new Map,this.applyFilterSuggestion=(e,t,n)=>{this.updateBuilderFilter(e,e=>J(e,t,e=>({...e,value:n})))},this.persistBuilderFilter=e=>{let t=Et(e,e.result);e.ui.builderFilter=t,this.updateViewConfig(e,n=>(n.filters=vt(t,e.result),n))},this.handlePointerDown=e=>{let t=e.target.closest(`[data-base-filter-suggestion]`);if(!t)return;let n=e.target.closest(`[data-base-shell-key]`),r=n?this.entries.get(n.dataset.baseShellKey||``):null;if(!r)return;e.preventDefault();let i=U(t.dataset.baseFilterSuggestion||``),a=t.dataset.baseFilterSuggestionValue||``;this.applyFilterSuggestion(r,i,a)},this.handleClick=e=>{let t=e.target.closest(`[data-base-open-file]`);if(t){e.preventDefault(),this.onOpenFile?.(t.dataset.baseOpenFile||``);return}let n=e.target.closest(`[data-base-shell-key]`),r=n?this.entries.get(n.dataset.baseShellKey||``):null;if(!r)return;let i=e.target.closest(`.bases-view-tab`);if(i){r.payload.view=i.dataset.baseView||``,r.ui.openPanel=``,this.renderEntry(r);return}let a=e.target.closest(`[data-base-panel]`);if(a){let e=a.dataset.basePanel||``;r.ui.openPanel=r.ui.openPanel===e?``:e,r.ui.rawFilterText=q(H(r.result).filters),Y(r,r.result);return}if(e.target.closest(`.bases-export-btn`)){this.exportEntry(r);return}if(e.target.closest(`[data-base-sort-add]`)){this.updateViewConfig(r,e=>{let t=new Set((e.sort??[]).map(e=>e.property)),n=V(r.result).find(e=>!t.has(e.id))?.id??`file.name`;return e.sort=[...e.sort??[],{direction:`asc`,property:n}],e});return}let o=e.target.closest(`[data-base-sort-delete]`);if(o){let e=Number.parseInt(o.dataset.baseSortDelete||``,10);this.updateViewConfig(r,t=>(t.sort=(t.sort??[]).filter((t,n)=>n!==e),t));return}let s=e.target.closest(`[data-base-sort-move]`);if(s){let[e,t]=String(s.dataset.baseSortMove||``).split(`:`),n=Number.parseInt(e,10);this.updateViewConfig(r,e=>{let r=[...e.sort??[]],i=t===`up`?n-1:n+1;return i<0||i>=r.length?e:([r[n],r[i]]=[r[i],r[n]],e.sort=r,e)});return}if(e.target.closest(`[data-base-clear-group-by]`)){this.updateViewConfig(r,e=>(e.groupBy=null,e));return}let c=e.target.closest(`[data-base-filter-mode]`);if(c){r.ui.filterMode=c.dataset.baseFilterMode||`builder`,r.ui.filterMode===`advanced`&&(r.ui.rawFilterText=q(H(r.result).filters),r.ui.builderFilter=null),Y(r,r.result);return}if(e.target.closest(`[data-base-filter-save-advanced]`)){this.saveAdvancedFilter(r);return}let l=e.target.closest(`[data-base-filter-add-rule]`);if(l){let e=U(l.dataset.baseFilterAddRule||``);this.updateBuilderFilter(r,t=>Ct(t,e,{operator:`is`,propertyId:V(r.result)[0]?.id??`file.name`,type:`rule`,value:``}));return}let u=e.target.closest(`[data-base-filter-add-group]`);if(u){let e=U(u.dataset.baseFilterAddGroup||``);this.updateBuilderFilter(r,t=>Ct(t,e,L(`and`)));return}let d=e.target.closest(`[data-base-filter-remove]`);if(d){let e=U(d.dataset.baseFilterRemove||``);this.updateBuilderFilter(r,t=>St(t,e));return}let f=e.target.closest(`[data-base-filter-suggestion]`);if(f){if(e.preventDefault?.(),e.detail!=null&&e.detail!==0)return;let t=U(f.dataset.baseFilterSuggestion||``),n=f.dataset.baseFilterSuggestionValue||``;this.applyFilterSuggestion(r,t,n)}},this.handleInput=e=>{let t=e.target.closest(`.bases-search-input`);if(t){let e=t.closest(`[data-base-shell-key]`),n=e?this.entries.get(e.dataset.baseShellKey||``):null;if(!n)return;n.search=t.value||``,clearTimeout(this.searchTimers.get(n.key)),this.searchTimers.set(n.key,setTimeout(()=>{n.payload.search=n.search,this.renderEntry(n)},180));return}let n=e.target.closest(`[data-base-properties-search]`);if(n){let e=n.closest(`[data-base-shell-key]`),t=e?this.entries.get(e.dataset.baseShellKey||``):null;if(!t)return;t.ui.propertySearch=n.value||``,Y(t,t.result);return}let r=e.target.closest(`[data-base-filter-advanced]`);if(r){let e=r.closest(`[data-base-shell-key]`),t=e?this.entries.get(e.dataset.baseShellKey||``):null;if(!t)return;t.ui.rawFilterText=r.value||``;return}let i=e.target.closest(`[data-base-filter-value]`);if(i){let e=i.closest(`[data-base-shell-key]`),t=e?this.entries.get(e.dataset.baseShellKey||``):null;if(!t)return;let n=U(i.dataset.baseFilterValue||``),r=t.ui.builderFilter??K(H(t.result).filters)??L(`and`);t.ui.builderFilter=J(r,n,e=>({...e,value:i.value||``})),jt(t,t.result,n)}},this.handleChange=e=>{let t=e.target.closest(`[data-base-shell-key]`),n=t?this.entries.get(t.dataset.baseShellKey||``):null;if(!n)return;let r=e.target.closest(`[data-base-group-by-property]`);if(r){this.updateViewConfig(n,e=>(e.groupBy=r.value?{direction:e.groupBy?.direction??`asc`,property:r.value}:null,e));return}let i=e.target.closest(`[data-base-group-by-direction]`);if(i){this.updateViewConfig(n,e=>(e.groupBy=e.groupBy?.property?{direction:i.value||`asc`,property:e.groupBy.property}:null,e));return}let a=e.target.closest(`[data-base-sort-property]`);if(a){let e=Number.parseInt(a.dataset.baseSortProperty||``,10);this.updateViewConfig(n,t=>(t.sort=(t.sort??[]).map((t,n)=>n===e?{...t,property:a.value}:t),t));return}let o=e.target.closest(`[data-base-sort-direction]`);if(o){let e=Number.parseInt(o.dataset.baseSortDirection||``,10);this.updateViewConfig(n,t=>(t.sort=(t.sort??[]).map((t,n)=>n===e?{...t,direction:o.value||`asc`}:t),t));return}let s=e.target.closest(`[data-base-property-toggle]`);if(s){let e=s.dataset.basePropertyToggle||``;this.updateViewConfig(n,t=>{let r=t.order?.length>0?[...t.order]:rt(n.result),i=r.indexOf(e);return s.checked&&i===-1&&r.push(e),!s.checked&&i>=0&&r.splice(i,1),t.order=r,t});return}let c=e.target.closest(`[data-base-filter-conjunction]`);if(c){let e=U(c.dataset.baseFilterConjunction||``);this.updateBuilderFilter(n,t=>J(t,e,e=>({...e,conjunction:c.value||`and`})));return}let l=e.target.closest(`[data-base-filter-property]`);if(l){let e=U(l.dataset.baseFilterProperty||``);(async()=>{await this.updateBuilderFilter(n,t=>J(t,e,e=>{let t=at(n.result,l.value)[0]??`is`;return{...e,operator:t,propertyId:l.value,value:``}})),await this.ensurePropertyValues(n,l.value)})();return}let u=e.target.closest(`[data-base-filter-operator]`);if(u){let e=U(u.dataset.baseFilterOperator||``);this.updateBuilderFilter(n,t=>J(t,e,e=>({...e,operator:u.value||`is`})));return}e.target.closest(`[data-base-filter-value]`)&&this.persistBuilderFilter(n)},this.handleFocusIn=e=>{let t=e.target.closest(`[data-base-filter-value]`);if(!t)return;let n=t.closest(`[data-base-shell-key]`),r=n?this.entries.get(n.dataset.baseShellKey||``):null;if(!r)return;let i=U(t.dataset.baseFilterValue||``),a=K(H(r.result).filters),o=a?xt(a,i):null;o?.propertyId&&this.ensurePropertyValues(r,o.propertyId)},this.previewElement?.addEventListener(`pointerdown`,this.handlePointerDown),this.previewElement?.addEventListener(`click`,this.handleClick),this.previewElement?.addEventListener(`input`,this.handleInput),this.previewElement?.addEventListener(`change`,this.handleChange),this.previewElement?.addEventListener(`focusin`,this.handleFocusIn)}ensureEntryState(e){e.ui||={builderFilter:null,filterMode:`builder`,openPanel:``,propertySearch:``,rawFilterText:``},Object.prototype.hasOwnProperty.call(e.ui,`builderFilter`)||(e.ui.builderFilter=null),e.propertyValueOptions||=new Map}destroy(){this.previewElement?.removeEventListener(`pointerdown`,this.handlePointerDown),this.previewElement?.removeEventListener(`click`,this.handleClick),this.previewElement?.removeEventListener(`input`,this.handleInput),this.previewElement?.removeEventListener(`change`,this.handleChange),this.previewElement?.removeEventListener(`focusin`,this.handleFocusIn),this.searchTimers.forEach(e=>clearTimeout(e)),this.searchTimers.clear(),this.entries.clear()}reconcileEmbeds(e=this.previewElement){e&&Array.from(e.querySelectorAll(`.bases-embed-placeholder[data-base-key]`)).forEach(e=>{let t=e.dataset.baseKey||He(),n=this.entries.get(t),r={path:e.dataset.basePath||``,search:``,source:e.dataset.baseSource||null,sourcePath:e.dataset.baseSourcePath||``,view:e.dataset.baseView||``},i=n??{key:t,payload:r,placeholder:e,propertyValueOptions:new Map,requestVersion:0,result:null,search:``,ui:{builderFilter:null,filterMode:`builder`,openPanel:``,propertySearch:``,rawFilterText:``}};i.payload=r,i.placeholder=e,this.entries.set(t,i),this.renderEntry(i)})}async renderStandalone({filePath:e,renderHost:t,source:n=null}){let r=`standalone:${e}`,i=this.entries.get(r)??{key:r,payload:{path:e,search:``,source:n,sourcePath:e,view:``},placeholder:t,propertyValueOptions:new Map,requestVersion:0,result:null,search:``,ui:{builderFilter:null,filterMode:`builder`,openPanel:``,propertySearch:``,rawFilterText:``}};i.placeholder=t,i.payload.path=e,i.payload.source=typeof n==`string`?n:null,i.payload.sourcePath=e,this.entries.set(r,i),await this.renderEntry(i)}async renderEntry(e){if(this.ensureEntryState(e),!e?.placeholder?.isConnected)return;let t=(e.requestVersion??0)+1;e.requestVersion=t;let n=!!Bt(e);n||I(e.placeholder,`<div class="preview-shell" role="status" aria-live="polite">Loading base…</div>`);try{let n=await this.vaultApiClient.queryBase({activeFilePath:this.getActiveFilePath?.()??``,...e.payload});if(t!==e.requestVersion||!e?.placeholder?.isConnected)return;e.result=n.result,e.ui.builderFilter=K(H(e.result).filters),e.ui.rawFilterText||(e.ui.rawFilterText=q(H(e.result).filters)),Ht(e,e.result)}catch(r){if(t!==e.requestVersion||!e?.placeholder?.isConnected)return;if(n){let t=Bt(e)?.querySelector?.(`[data-base-content]`)??null;if(t){I(t,`<div class="preview-shell" role="alert">Failed to load base: ${y(r.message||`Unknown error`)}</div>`);return}}I(e.placeholder,`<div class="preview-shell" role="alert">Failed to load base: ${y(r.message||`Unknown error`)}</div>`)}}async exportEntry(e){this.ensureEntryState(e);try{let t=await this.vaultApiClient.exportBaseCsv({activeFilePath:this.getActiveFilePath?.()??``,...e.payload});o(t.blob,u(t.contentDisposition,`base.csv`),{removeDelayMs:0,revokeDelayMs:0})}catch(e){this.toastController?.show?.(e.message||`Failed to export base CSV`)}}async ensurePropertyValues(e,t=``){if(this.ensureEntryState(e),!t)return;let n=lt(e,t);if((e.propertyValueOptions.get(t)??null)?.cacheKey!==n)try{let r=await this.vaultApiClient.queryBasePropertyValues({activeFilePath:this.getActiveFilePath?.()??``,...e.payload,propertyId:t});if(e.propertyValueOptions.set(t,{cacheKey:n,values:r.result?.values??[]}),e.result&&e.ui.openPanel===`filter`){let n=!1;Mt(Et(e,e.result),(r,i)=>{r.propertyId===t&&(n=jt(e,e.result,i,{fallbackToFullRender:!1})||n)}),n||Y(e,e.result)}}catch{e.propertyValueOptions.set(t,{cacheKey:n,values:[]})}}async applyTransformedSource(e,t){if(this.ensureEntryState(e),ot(e)){e.payload.source=t.source,this.replaceBaseSource?.({path:e.payload.path,source:t.source});return}await this.vaultApiClient.writeFile({content:t.source,path:e.payload.path}),e.payload.source=null}async updateViewConfig(e,t){if(this.ensureEntryState(e),!e?.result||!B(e.result).editable)return;let n=t(H(e.result));try{let t=(await this.vaultApiClient.transformBase({activeFilePath:this.getActiveFilePath?.()??``,mutation:{config:n,type:`set-view-config`,view:e.result.view.id},...e.payload})).result;await this.applyTransformedSource(e,t),e.result=t.result,e.ui.rawFilterText=q(H(e.result).filters),Ht(e,e.result)}catch(e){this.toastController?.show?.(e.message||`Failed to update base`)}}async updateBuilderFilter(e,t){this.ensureEntryState(e);let n=t(e.ui.builderFilter??K(H(e.result).filters)??L(`and`));e.ui.builderFilter=n,await this.updateViewConfig(e,t=>(t.filters=vt(n,e.result),t))}async saveAdvancedFilter(e){this.ensureEntryState(e);try{let t=bt(e.ui.rawFilterText??``);e.ui.builderFilter=K(t),await this.updateViewConfig(e,e=>(e.filters=t,e))}catch(e){this.toastController?.show?.(e.message||`Invalid advanced filter`)}}},Wt=`https://viewer.diagrams.net/js/viewer-static.min.js`,X=null;function Gt(){return window.GraphViewer?.processElements?Promise.resolve(window.GraphViewer):X||(X=new Promise((e,t)=>{let n=document.querySelector(`script[data-collabmd-drawio-viewer]`),r=n instanceof HTMLScriptElement?n:document.createElement(`script`),i=()=>{r.removeEventListener(`error`,a),r.removeEventListener(`load`,o)},a=()=>{i(),X=null,t(Error(`Failed to load draw.io viewer`))},o=()=>{if(i(),!window.GraphViewer?.processElements){X=null,t(Error(`draw.io viewer did not initialize`));return}e(window.GraphViewer)};r.addEventListener(`error`,a,{once:!0}),r.addEventListener(`load`,o,{once:!0}),n?window.GraphViewer?.processElements&&o():(r.src=Wt,r.async=!0,r.dataset.collabmdDrawioViewer=`true`,document.head.append(r))}),X)}function Kt({ariaLabel:e=``,className:t=`drawio-viewer-frame`,onActivate:n=null,source:r=``,theme:i=`dark`}={}){let a=document.createElement(`div`);return a.className=t,e&&a.setAttribute(`aria-label`,e),typeof n==`function`&&(a.dataset.action=`open-file`,a.setAttribute(`role`,`button`),a.setAttribute(`tabindex`,`0`),a.addEventListener(`click`,e=>{e.preventDefault(),n()}),a.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n())})),a.dataset.mxgraph=JSON.stringify({"check-visible-state":!1,center:!0,border:0,"dark-mode":i===`light`?`light`:`dark`,editable:!1,fit:1,lightbox:!1,nav:!1,resize:!1,tooltips:!1,xml:String(r??``)}),a}async function qt(e,t={}){let n=await Gt(),r=Kt(t);return e.replaceChildren(r),typeof n.createViewerForElement==`function`?n.createViewerForElement(r):n.processElements(),r}var Jt=360,Yt=class{constructor({getLocalUser:e,getTheme:t,onOpenFile:n=null,onOpenTextFile:r=null,onToggleQuickSwitcher:i=null,previewContainer:a,previewElement:o,toastController:s,vaultApiClient:c}){this.getLocalUser=e,this.getTheme=t,this.onOpenFile=n,this.onOpenTextFile=r,this.onToggleQuickSwitcher=i,this.previewContainer=a,this.previewElement=o,this.toastController=s,this.vaultApiClient=c,this.embedEntries=new Map,this.hydrationQueue=[],this.hydrationIdleId=null,this.hydrationPaused=!1,this.instanceCounter=0,this.maximizedEntry=null,this.overlayRoot=null,this.placeholderObserver=null,this._onMessage=this._onMessage.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onPreviewClick=this._onPreviewClick.bind(this),this.listenerController=new AbortController;let{signal:l}=this.listenerController;window.addEventListener(`message`,this._onMessage,{signal:l}),window.addEventListener(`keydown`,this._onKeyDown,{signal:l}),this.previewElement?.addEventListener(`click`,this._onPreviewClick,{signal:l})}destroy(){this.listenerController?.abort(),this.listenerController=null,this._disconnectPlaceholderObserver(),l(this.hydrationIdleId),this.hydrationIdleId=null,this.hydrationQueue=[],this._exitMaximizedEntry(),this.embedEntries.forEach(e=>e.wrapper?.remove()),this.embedEntries.clear(),this.overlayRoot?.remove(),this.overlayRoot=null}detachForCommit(){this._disconnectPlaceholderObserver(),l(this.hydrationIdleId),this.hydrationIdleId=null,this.hydrationQueue=[],this._exitMaximizedEntry(),this.overlayRoot&&(this.overlayRoot.hidden=!0),this.embedEntries.forEach(e=>{e.queued=!1,e.placeholder=null})}setHydrationPaused(e){this.hydrationPaused=!!e,this.hydrationPaused||this.hydrateVisibleEmbeds()}reconcileEmbeds(e){this._exitMaximizedEntry();let t=Array.from(e.querySelectorAll(`.drawio-embed-placeholder[data-drawio-key]`)).map(e=>({filePath:e.dataset.drawioTarget||``,key:e.dataset.drawioKey||``,label:e.dataset.drawioLabel||e.dataset.drawioTarget||``,mode:e.dataset.drawioMode===`edit`?`edit`:`view`,placeholder:e})),n=new Map;t.forEach(e=>{let t=this.embedEntries.get(e.key)||null,r=t&&this.entryMatchesDescriptor(t,e)?t:this.createEntry(e);t&&t!==r&&this.destroyEntry(t),r.filePath=e.filePath,r.key=e.key,r.label=e.label,r.mode=e.mode,r.placeholder=e.placeholder,n.set(e.key,r)}),this.embedEntries.forEach((e,t)=>{n.has(t)||this.destroyEntry(e)}),this.embedEntries=n,this._disconnectPlaceholderObserver(),this._ensurePlaceholderObserver(),this.embedEntries.forEach(e=>{e.wrapper?this.attachWrapper(e):e.queued=!1}),this.hydrationPaused||this.hydrateVisibleEmbeds(),this.syncLayout()}createEntry(e){return{...e,iframe:null,imageElement:null,inlineHeightPx:null,instanceId:``,queued:!1,viewerElement:null,wrapper:null}}entryMatchesDescriptor(e,t){return!!(e&&e.filePath===t.filePath&&e.mode===t.mode)}hydrateVisibleEmbeds(){this.embedEntries.forEach(e=>{if(!e.wrapper&&e.placeholder?.isConnected){if(e.mode===`edit`){this.enqueueHydration(e);return}if(typeof IntersectionObserver>`u`){c(e.placeholder,this.previewContainer,Jt)&&this.enqueueHydration(e);return}this.placeholderObserver?.observe(e.placeholder)}})}_ensurePlaceholderObserver(){this.previewContainer&&typeof IntersectionObserver<`u`&&(this.placeholderObserver=new IntersectionObserver(e=>{e.forEach(e=>{if(!e.isIntersecting)return;let t=this.embedEntries.get(e.target.dataset.drawioKey);t&&!t.wrapper&&this.enqueueHydration(t)})},{root:this.previewContainer,rootMargin:`${Jt}px 0px`}))}_disconnectPlaceholderObserver(){this.placeholderObserver&&=(this.placeholderObserver.disconnect(),null)}enqueueHydration(e){e.queued||(e.queued=!0,this.hydrationQueue.push(e),this.hydrationIdleId===null&&(this.hydrationIdleId=s(()=>{this.hydrationIdleId=null,this.hydrationQueue.splice(0).forEach(e=>{e.queued=!1,this.hydrateEntry(e)})},200)))}hydrateEntry(e){if(e.placeholder?.isConnected&&!e.wrapper){if(e.mode===`view`){this.hydrateViewerEntry(e);return}this.hydrateIframeEntry(e)}}hydrateIframeEntry(e){if(!e.placeholder?.isConnected||e.wrapper)return;let t=document.createElement(`div`);t.className=`drawio-embed diagram-preview-shell${e.mode===`edit`?` is-direct-file`:``}`,t.dataset.file=e.filePath,t.dataset.drawioKey=e.key;let n=document.createElement(`div`);n.className=`drawio-embed-header diagram-preview-toolbar`;let r=document.createElement(`span`);r.className=`drawio-embed-icon`,r.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>`;let i=document.createElement(`span`);i.className=`drawio-embed-label`,i.textContent=e.label.replace(/\.drawio$/i,``),n.append(r,i),e.mode!==`edit`&&n.appendChild(this.createOpenButton(e)),n.appendChild(this.createMaximizeButton(e,t));let a=document.createElement(`iframe`);a.className=`drawio-embed-iframe`,a.loading=`lazy`,a.referrerPolicy=`strict-origin-when-cross-origin`,e.instanceId=`drawio-${++this.instanceCounter}`,a.dataset.instanceId=e.instanceId,a.src=this.buildIframeUrl(e),t.append(n,a),e.iframe=a,e.wrapper=t,this.attachWrapper(e)}async hydrateViewerEntry(e){if(!e.placeholder?.isConnected||e.wrapper)return;let t=document.createElement(`div`);t.className=`drawio-embed diagram-preview-shell is-static-preview`,t.dataset.file=e.filePath,t.dataset.drawioKey=e.key;let n=document.createElement(`div`);n.className=`drawio-embed-header diagram-preview-toolbar`;let r=document.createElement(`span`);r.className=`drawio-embed-icon`,r.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>`;let i=document.createElement(`span`);i.className=`drawio-embed-label`,i.textContent=e.label.replace(/\.drawio$/i,``),n.append(r,i),n.append(this.createOpenButton(e),this.createMaximizeButton(e,t));let a=document.createElement(`div`);a.className=`drawio-viewer-shell`,a.dataset.filePath=e.filePath;let o=document.createElement(`div`);o.className=`preview-shell`,o.textContent=`Rendering draw.io preview…`,a.appendChild(o),t.append(n,a),e.iframe=null,e.wrapper=t,e.viewerElement=a,this.attachWrapper(e);try{await this.renderViewerEntry(e),this.syncEntryLayout(e)}catch(t){this.renderViewerFallback(e,t instanceof Error?t.message:`Failed to render draw.io preview`),this.syncEntryLayout(e)}}async renderViewerEntry(e){let{content:t}=await this.vaultApiClient.readFile(e.filePath);if(!e.wrapper?.isConnected||!e.viewerElement?.isConnected)return;let n=this.getTheme?.()===`light`?`light`:`dark`;e.viewerElement=await qt(e.wrapper.querySelector(`.drawio-viewer-shell`)??e.viewerElement,{ariaLabel:`Open ${e.label.replace(/\.drawio$/i,``)}`,className:`mxgraph drawio-viewer-frame`,onActivate:()=>this.onOpenFile?.(e.filePath),source:String(t??``),theme:n})}buildIframeUrl(e){let t=new URL(S(`/drawio-editor.html`)),n=this.getLocalUser?.()??{},r=E();return r&&t.searchParams.set(`vault`,r),t.searchParams.set(`file`,e.filePath),t.searchParams.set(`hostMode`,e.mode===`edit`?`file-preview`:`embed`),t.searchParams.set(`instanceId`,e.instanceId),t.searchParams.set(`mode`,e.mode===`edit`?`edit`:`view`),t.searchParams.set(`theme`,this.getTheme?.()===`light`?`light`:`dark`),n.name&&t.searchParams.set(`userName`,n.name),n.peerId&&t.searchParams.set(`peerId`,n.peerId),e.mode===`edit`&&t.searchParams.set(`leaseRoom`,D(e.filePath)),t.toString()}updateTheme(e){this.embedEntries.forEach(t=>{t.iframe?.contentWindow&&t.iframe.contentWindow.postMessage({source:`collabmd-host`,theme:e,type:`set-theme`},window.location.origin),t.mode===`view`&&t.wrapper?.isConnected&&t.viewerElement?.isConnected&&this.renderViewerEntry(t).catch(e=>{this.renderViewerFallback(t,e instanceof Error?e.message:`Failed to render draw.io preview`)})})}updateLocalUser(){}syncLayout(){this.embedEntries.forEach(e=>{e.wrapper&&!this.shouldInlineEntry(e)&&this.syncEntryLayout(e)})}attachWrapper(e){let t=e.placeholder?.isConnected?e.placeholder:this.findPlaceholder(e);if(!t)return;if(e.placeholder=t,this.syncMountedEntryMetadata(e),this.shouldInlineEntry(e)){e.wrapper.style.position=``,e.wrapper.style.top=``,e.wrapper.style.left=``,e.wrapper.style.width=``,e.wrapper.style.margin=``,e.wrapper.style.pointerEvents=`auto`,t.replaceWith(e.wrapper),e.placeholder=null;return}let n=this.ensureOverlayRoot();n.hidden=!1,e.wrapper?.parentElement!==n&&n.appendChild(e.wrapper),this.syncEntryLayout(e)}destroyEntry(e){this.maximizedEntry?.key===e?.key&&this._exitMaximizedEntry(),this.resetPlaceholderLayout(e),e?.wrapper?.remove(),e&&(e.placeholder=null,e.wrapper=null,e.iframe=null,e.viewerElement=null)}findPlaceholder(e){return this.previewElement?.querySelector?.(`.drawio-embed-placeholder[data-drawio-key="${e.key}"]`)??null}ensureOverlayRoot(){if(this.overlayRoot?.isConnected&&this.overlayRoot.parentElement===this.previewElement)return this.overlayRoot;let e=this.previewElement?.querySelector?.(`[data-drawio-overlay-root="true"]`);return e||(e=document.createElement(`div`),e.dataset.drawioOverlayRoot=`true`,e.className=`drawio-embed-overlay-root`,this.previewElement?.appendChild(e)),this.overlayRoot=e,e}shouldInlineEntry(e){return e?.key===`${e?.filePath}#file-preview`}syncMountedEntryMetadata(e){e.wrapper&&(e.wrapper.dataset.drawioKey=e.key,e.wrapper.dataset.file=e.filePath,e.wrapper.classList.toggle(`is-direct-file`,this.shouldInlineEntry(e))),e.iframe&&(e.iframe.title=`draw.io: ${e.filePath}`)}resetPlaceholderLayout(e){e?.placeholder?.isConnected&&!this.shouldInlineEntry(e)&&(e.placeholder.classList.remove(`is-hydrated`),e.placeholder.removeAttribute(`data-drawio-hydrated`),e.placeholder.style.height=``,e.placeholder.style.pointerEvents=``)}syncEntryLayout(e){if(!e?.wrapper||this.shouldInlineEntry(e))return;let t=e.placeholder?.isConnected?e.placeholder:this.findPlaceholder(e);if(!t)return;e.placeholder=t,t.classList.add(`is-hydrated`),t.dataset.drawioHydrated=`true`,t.style.pointerEvents=`none`;let n=e.wrapper.classList.contains(`is-maximized`),r=e.wrapper.offsetHeight||Math.ceil(e.wrapper.getBoundingClientRect?.().height||0)||e.inlineHeightPx||420;if(n||(e.inlineHeightPx=r),t.style.height=`${Math.ceil(e.inlineHeightPx||r)}px`,e.wrapper.style.pointerEvents=`auto`,n){e.wrapper.style.position=``,e.wrapper.style.top=``,e.wrapper.style.left=``,e.wrapper.style.width=`auto`,e.wrapper.style.height=`auto`,e.wrapper.style.minHeight=`0`,e.wrapper.style.margin=``;return}e.wrapper.style.position=`absolute`,e.wrapper.style.top=`${t.offsetTop}px`,e.wrapper.style.left=`${t.offsetLeft}px`,e.wrapper.style.width=`${t.offsetWidth}px`,e.wrapper.style.margin=`0`}createOpenButton(e){let t=document.createElement(`button`);return t.type=`button`,t.className=`drawio-embed-btn ui-preview-action ui-preview-action--icon-only`,t.dataset.action=`open-file`,t.dataset.filePath=e.filePath,t.title=`Edit in draw.io`,t.setAttribute(`aria-label`,`Edit in draw.io`),N(t,`edit`),t.addEventListener(`click`,t=>{t.preventDefault(),this.onOpenFile?.(e.filePath)}),t}createMaximizeButton(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=`drawio-embed-btn ui-preview-action ui-preview-action--icon-only`,n.dataset.action=`toggle-maximize`,n.dataset.filePath=e.filePath,n.dataset.drawioKey=e.key,n.addEventListener(`click`,n=>{n.preventDefault(),this.maximizedEntry?.key===e.key?this._exitMaximizedEntry():this._enterMaximizedEntry(e,t),this._syncMaximizeButtons()}),(()=>{let t=this.maximizedEntry?.key===e.key;N(n,t?`restore`:`maximize`),n.title=t?`Restore diagram size`:`Maximize diagram`,n.setAttribute(`aria-label`,t?`Restore diagram size`:`Maximize diagram`)})(),n}_enterMaximizedEntry(e,t=e?.wrapper){if(e?.wrapper&&e.wrapper===t&&this.maximizedEntry?.key!==e.key){if(this._exitMaximizedEntry(),e.wrapper.parentElement){let t=document.createElement(`div`);t.className=`drawio-maximize-spacer`,t.style.height=`${Math.ceil(e.wrapper.getBoundingClientRect().height)}px`,e.maximizeSpacer=t,e.wrapper.parentElement.insertBefore(t,e.wrapper)}e.wrapper.classList.add(`is-maximized`),e.wrapper.dataset.drawioMaximized=`true`,e.wrapper.style.width=`auto`,e.wrapper.style.height=`auto`,e.wrapper.style.minHeight=`0`,document.body.classList.add(`drawio-maximized-open`),this.maximizedEntry=e,this.overlayRoot?.classList.add(`has-maximized-entry`),this.syncEntryLayout(e)}}_exitMaximizedEntry(){let e=this.maximizedEntry;if(!e?.wrapper){this.maximizedEntry=null;return}let{maximizeSpacer:t}=e;e.wrapper.classList.remove(`is-maximized`),delete e.wrapper.dataset.drawioMaximized,e.wrapper.style.width=``,e.wrapper.style.height=``,e.wrapper.style.minHeight=``,t?.parentElement&&t.remove(),e.maximizeSpacer=null,e.restoreParent=null,e.restoreNextSibling=null,this.maximizedEntry=null,document.body.classList.toggle(`drawio-maximized-open`,!!document.body.querySelector(`.drawio-embed.is-maximized`)),this.overlayRoot?.classList.remove(`has-maximized-entry`),this.syncEntryLayout(e)}_syncMaximizeButtons(){this.embedEntries.forEach(e=>{let t=e.wrapper?.querySelector(`.drawio-embed-btn[data-action="toggle-maximize"]`);if(!(t instanceof HTMLElement))return;let n=this.maximizedEntry?.key===e.key;N(t,n?`restore`:`maximize`),t.title=n?`Restore diagram size`:`Maximize diagram`,t.setAttribute(`aria-label`,n?`Restore diagram size`:`Maximize diagram`)})}_findEntryByInstanceId(e){for(let t of this.embedEntries.values())if(t.instanceId===e)return t;return null}_isMessageFromEntry(e,t){return!!(t?.iframe?.contentWindow&&e.source===t.iframe.contentWindow)}_onMessage(e){if(e.origin!==window.location.origin)return;let t=e.data;if(!t||t.source!==`drawio-editor`)return;let n=this._findEntryByInstanceId(t.instanceId);if(n&&this._isMessageFromEntry(e,n)){if(t.type===`fallback-text`){if(n.mode===`view`){this.renderViewerFallback(n,`Failed to render draw.io preview`);return}this.onOpenTextFile?.(n.filePath);return}if(t.type===`error`){if(n.mode===`view`){this.renderViewerFallback(n,t.message||`Failed to load draw.io preview`);return}this.toastController?.show?.(t.message||`Failed to load draw.io`);return}if(t.type===`request-open-file`){this.onOpenFile?.(n.filePath);return}t.type===`request-toggle-quick-switcher`&&this.onToggleQuickSwitcher?.()}}_onPreviewClick(e){let t=e.target.closest(`.drawio-embed-placeholder-btn`);if(t){let n=t.closest(`.drawio-embed-placeholder`)?.dataset.drawioKey||``,r=this.embedEntries.get(n);r&&(e.preventDefault(),this.hydrateEntry(r));return}}_onKeyDown(e){e.key===`Escape`&&(this._exitMaximizedEntry(),this._syncMaximizeButtons())}renderViewerFallback(e,t){if(!e.wrapper)return;let n=e.wrapper.querySelector(`.drawio-viewer-shell, .drawio-viewer-frame`);if(!n)return;let r=document.createElement(`div`);r.className=`preview-shell`,r.textContent=t,n.replaceChildren(r),e.viewerElement=r}};function Xt(e,t){let n=new Map;t.forEach(t=>{let r=e.get(t.key)??{filePath:t.filePath,iframe:null,instanceId:null,key:t.key,label:t.label,placeholder:t.placeholder,queued:!1,wrapper:null};r.filePath=t.filePath,r.key=t.key,r.label=t.label,r.placeholder=t.placeholder,n.set(t.key,r)});let r=[];return e.forEach((e,t)=>{n.has(t)||r.push(e)}),{nextEntries:n,removedEntries:r}}var Zt=420,Qt=500,$t=15e3,en=800,tn=3,nn=200,rn=`/excalidraw-editor.html`;function an(e,t){let n=e?.querySelectorAll?.(`.excalidraw-embed-placeholder[data-embed-key]`);return Array.from(n||[]).find(e=>e.dataset?.embedKey===t)||null}var on=class{constructor({getTheme:e,getLocalUser:t,onOpenElement:n=null,onOpenFile:r=null,onStopFollowing:i=null,onToggleQuickSwitcher:a=null,previewContainer:o,previewElement:s,toastController:c}){this.getTheme=e,this.getLocalUser=t,this.onOpenElement=n,this.onOpenFile=r,this.onStopFollowing=i,this.onToggleQuickSwitcher=a,this.previewContainer=o,this.previewElement=s,this.toastController=c,this.embedEntries=new Map,this.hydrationQueue=[],this.hydrationIdleId=null,this.hydrationPaused=!1,this.hydrationInProgress=!1,this.instanceCounter=0,this.isLargeDocument=!1,this.maximizedEmbed=null,this.overlayRoot=null,this.warmCacheRoot=null,this.warmEntry=null,this.placeholderObserver=null,this.followedPeerIdsByFilePath=new Map,this.pendingDisconnectRequests=new Map,this.disconnectRequestCounter=0,this.pendingAgentBridgeRequests=new Map,this.agentBridgeRequestCounter=0,this._onMessage=this._onMessage.bind(this),this._onKeyDown=this._onKeyDown.bind(this),this._onPreviewClick=this._onPreviewClick.bind(this),window.addEventListener(`message`,this._onMessage),window.addEventListener(`keydown`,this._onKeyDown),this.previewElement?.addEventListener(`click`,this._onPreviewClick)}destroy(){window.removeEventListener(`message`,this._onMessage),window.removeEventListener(`keydown`,this._onKeyDown),this.previewElement?.removeEventListener(`click`,this._onPreviewClick),this._disconnectPlaceholderObserver(),l(this.hydrationIdleId),this.hydrationIdleId=null,this.hydrationQueue=[],this._exitMaximizedEmbed(),this.embedEntries.forEach(e=>{this._clearEntryBootTimeout(e),e.resizerCleanup?.(),e.resizerCleanup=null,e.wrapper?.remove(),e.placeholder=null}),this.embedEntries.clear(),this.warmEntry&&=(this._clearEntryBootTimeout(this.warmEntry),this.warmEntry.resizerCleanup?.(),this.warmEntry.resizerCleanup=null,this.warmEntry.wrapper?.remove(),null),this.pendingDisconnectRequests.forEach(e=>{e.resolve(!1)}),this.pendingDisconnectRequests.clear(),this.pendingAgentBridgeRequests.forEach(e=>{e.resolve({status:`destroyed`})}),this.pendingAgentBridgeRequests.clear(),this.followedPeerIdsByFilePath.clear(),this.overlayRoot?.remove(),this.overlayRoot=null,this.warmCacheRoot?.remove(),this.warmCacheRoot=null}async setFollowedUser(e,t=null){if(!e)return!1;this.followedPeerIdsByFilePath.set(e,t||null);let n=this._findEntryByFilePath(e);return!n||(n.wrapper||await this._hydrateEntry(n),n.followedPeerId=this.followedPeerIdsByFilePath.get(e)??null,this._syncEntryFollowState(n),!0)}detachForCommit(){this._disconnectPlaceholderObserver(),l(this.hydrationIdleId),this.hydrationIdleId=null,this.hydrationQueue=[],this.hydrationInProgress=!1,this._exitMaximizedEmbed(),this.overlayRoot&&(this.overlayRoot.hidden=!0),this.embedEntries.forEach(e=>{e.queued=!1,e.placeholder=null})}setHydrationPaused(e){if(this.hydrationPaused=!!e,this.hydrationPaused){l(this.hydrationIdleId),this.hydrationIdleId=null;return}this.hydrateVisibleEmbeds(),this._scheduleHydration()}reconcileEmbeds(e,{isLargeDocument:t=!1}={}){this.isLargeDocument=!!t,this._disconnectPlaceholderObserver(),l(this.hydrationIdleId),this.hydrationIdleId=null,this.hydrationQueue=[],this.hydrationInProgress=!1;let n=Array.from(e.querySelectorAll(`.excalidraw-embed-placeholder[data-embed-key]`)).map(e=>({filePath:e.dataset.embedTarget,key:e.dataset.embedKey,label:e.dataset.embedLabel||e.dataset.embedTarget,placeholder:e})),{nextEntries:r,removedEntries:i}=Xt(this.embedEntries,n);this._captureWarmEntry(i),this._adoptReusableEntries(r,i),i.forEach(e=>this._destroyEntry(e)),this.embedEntries=r,this._ensurePlaceholderObserver(),this.embedEntries.forEach(e=>{if(e.queued=!1,e.followedPeerId=this.followedPeerIdsByFilePath.get(e.filePath),e.wrapper){this._hydrateEntry(e);return}e.placeholder&&this.placeholderObserver?.observe(e.placeholder)}),this.hydrationPaused||this.hydrateVisibleEmbeds(),this.syncLayout()}hydrateVisibleEmbeds(){this.hydrationPaused||this.embedEntries.forEach(e=>{if(!e.wrapper&&e.placeholder?.isConnected){if(typeof IntersectionObserver>`u`||!this.placeholderObserver){let t=this.isLargeDocument?180:420;c(e.placeholder,this.previewContainer,t)&&this._enqueueHydration(e,{prioritize:!0});return}this.placeholderObserver.observe(e.placeholder)}})}updateTheme(e){this._forEachManagedEntry(t=>{this._postMessageToEntry(t,{source:`collabmd-host`,type:`set-theme`,theme:e})})}updateLocalUser(e){this._forEachManagedEntry(t=>{this._syncEntryUser(t,e)})}openCommentThread(e,t){if(!e||!t)return!1;let n=this._findEntryByFilePath(e);return n?(n.pendingCommentThreadId=t,n.isReady?this._postPendingCommentThread(n):n.wrapper||this._enqueueHydration(n,{prioritize:!0}),!0):!1}openElement(e,t,n=`element`){if(!e||!t)return!1;let r=this._findEntryByFilePath(e);return r?(r.pendingElementFocus={elementId:String(t),elementType:n===`group`?`group`:`element`},r.isReady?this._postPendingElement(r):r.wrapper||this._enqueueHydration(r,{prioritize:!0}),!0):!1}prepareFileDisconnect(e,{timeoutMs:t=1e4}={}){let n=this._findEntryByFilePath(e);if(!n?.iframe?.contentWindow)return Promise.resolve(!0);let r=`disconnect-${++this.disconnectRequestCounter}`;return new Promise(e=>{let i=t=>{if(!this.pendingDisconnectRequests.has(r))return;let n=this.pendingDisconnectRequests.get(r);window.clearTimeout(n.timeoutId),this.pendingDisconnectRequests.delete(r),e(t)},a=window.setTimeout(()=>{if(!window.confirm(`This diagram has not reconnected, so its latest queued changes may not be saved. Discard pending changes and leave?`)){this._postMessageToEntry(n,{source:`collabmd-host`,type:`cancel-disconnect`,requestId:r}),this.toastController?.show?.(`Stayed on the diagram while it reconnects`),i(!1);return}this._postMessageToEntry(n,{source:`collabmd-host`,type:`discard-and-disconnect`,requestId:r});let e=this.pendingDisconnectRequests.get(r);e&&(e.timeoutId=window.setTimeout(()=>i(!0),1e3))},t);this.pendingDisconnectRequests.set(r,{entry:n,resolve:i,timeoutId:a}),this._postMessageToEntry(n,{source:`collabmd-host`,type:`prepare-disconnect`,requestId:r})})}flushPendingAgentWrites(e,{signal:t=null,timeoutMs:n=1500}={}){let r=this._findEntryByFilePath(e);return!r?.isReady||!r.iframe?.contentWindow||this._getEntryMode(r)!==`edit`?Promise.resolve({status:`not-active`}):this._requestAgentBridge(r,`flush-agent-writes`,{},{signal:t,timeoutMs:n})}waitForAgentPaint(e,t,{afterRevision:n=``,signal:r=null,timeoutMs:i=5e3}={}){let a=this._findEntryByFilePath(e);return!a?.isReady||!a.iframe?.contentWindow||!t?Promise.resolve({status:`not-active`}):this._requestAgentBridge(a,`wait-for-agent-revision`,{afterRevision:n,revision:t},{signal:r,timeoutMs:i})}_requestAgentBridge(e,t,n,{signal:r,timeoutMs:i}){let a=`agent-bridge-${++this.agentBridgeRequestCounter}`;return new Promise(o=>{let s=e=>{let t=this.pendingAgentBridgeRequests.get(a);t&&(window.clearTimeout(t.timeoutId),r?.removeEventListener?.(`abort`,t.abort),this.pendingAgentBridgeRequests.delete(a),o(e))},c=()=>s({status:`cancelled`}),l=window.setTimeout(()=>s({status:`timeout`}),i);if(this.pendingAgentBridgeRequests.set(a,{abort:c,entry:e,resolve:s,timeoutId:l}),r?.addEventListener?.(`abort`,c,{once:!0}),r?.aborted){c();return}this._postMessageToEntry(e,{...n,requestId:a,source:`collabmd-host`,type:t})})}_ensurePlaceholderObserver(){this.previewContainer&&(this.placeholderObserver=new IntersectionObserver(e=>{e.forEach(e=>{if(!e.isIntersecting)return;let t=this.embedEntries.get(e.target.dataset.embedKey);t&&this._enqueueHydration(t)})},{root:this.previewContainer,rootMargin:this.isLargeDocument?`180px 0px`:`420px 0px`}))}_disconnectPlaceholderObserver(){this.placeholderObserver&&=(this.placeholderObserver.disconnect(),null)}_enqueueHydration(e,{prioritize:t=!1}={}){if(!(!e||e.wrapper||e.queued)&&(e.queued=!0,t?this.hydrationQueue.unshift(e.key):this.hydrationQueue.push(e.key),!this.hydrationPaused)){if(t&&!this.hydrationInProgress&&this.hydrationIdleId===null){this._flushHydrationQueue();return}this._scheduleHydration()}}_scheduleHydration(){this.hydrationPaused||this.hydrationInProgress||this.hydrationIdleId!==null||(this.hydrationIdleId=s(()=>{this.hydrationIdleId=null,this._flushHydrationQueue()},Qt))}async _flushHydrationQueue(){if(this.hydrationPaused||this.hydrationInProgress)return;let e=null;for(;this.hydrationQueue.length>0&&!e;){let t=this.hydrationQueue.shift(),n=this.embedEntries.get(t);if(!n||n.wrapper||!n.placeholder?.isConnected){n&&(n.queued=!1);continue}e=n}e&&(this.hydrationInProgress=!0,e.queued=!1,await this._hydrateEntry(e),this.hydrationInProgress=!1,this.hydrationQueue.length>0&&this._scheduleHydration())}async _hydrateEntry(e){if(e.placeholder?.isConnected||e.wrapper){if(e.isParked=!1,!e.wrapper){let t=this._createEmbedContainer(e);if(!t)return;e.header=t.header,e.wrapper=t.wrapper,e.iframe=t.iframe,e.labelElement=t.labelElement,e.maxButton=t.maxButton,e.openButton=t.openButton,e.instanceId=t.instanceId,e.resizerCleanup=t.resizerCleanup,e.isReady=!1,e.bootFilePath=e.filePath,e.bootMode=this._getEntryMode(e),e.loadedFilePath=e.bootFilePath,e.loadedMode=e.bootMode,e.bootAttempts=(e.bootAttempts??0)+1,this._armEntryBootTimeout(e)}e.followedPeerId=this.followedPeerIdsByFilePath.get(e.filePath),this._updateEmbedLabel(e),this._entryNeedsHardReload(e)&&this._reloadEntry(e),this._attachWrapper(e)}}_attachWrapper(e){let t=e.placeholder?.isConnected?e.placeholder:an(this.previewElement,e.key);if(!t)return;if(e.placeholder=t,this._syncMountedEntryMetadata(e),this._shouldInlineFilePreview(e)){e.wrapper.style.position=``,e.wrapper.style.top=``,e.wrapper.style.left=``,e.wrapper.style.width=``,e.wrapper.style.margin=``,e.wrapper.style.pointerEvents=`auto`,e.isReady=!1,t.replaceWith(e.wrapper),e.placeholder=null;return}let n=this._ensureOverlayRoot();n.hidden=!1,e.wrapper?.parentElement!==n&&(e.isReady=!1,n.appendChild(e.wrapper)),this._syncEntryLayout(e)}_adoptReusableEntries(e,t){e.forEach((n,r)=>{if(n.wrapper||n.iframe)return;let i=this._claimReusableEntry(n,t);i&&(i.filePath=n.filePath,i.key=n.key,i.label=n.label,i.placeholder=n.placeholder,i.pendingElementFocus=null,i.queued=!1,e.set(r,i))})}_destroyEntry(e){this.pendingDisconnectRequests.forEach((t,n)=>{t.entry===e&&(t.resolve(!1),this.pendingDisconnectRequests.delete(n))}),this.maximizedEmbed?.wrapper===e.wrapper&&this._exitMaximizedEmbed(),this._clearEntryBootTimeout(e),e.resizerCleanup?.(),e.resizerCleanup=null,this.warmEntry===e&&(this.warmEntry=null),this._resetPlaceholderLayout(e),this._setEntryLoadingState(e,!1),e.wrapper?.remove(),e.placeholder=null}_armEntryBootTimeout(e,t=$t){this._clearEntryBootTimeout(e),e.bootTimerId=window.setTimeout(()=>{this._handleEntryBootTimeout(e)},t)}_clearEntryBootTimeout(e){e?.bootTimerId&&(window.clearTimeout(e.bootTimerId),e.bootTimerId=null)}async _handleEntryBootTimeout(e){if(e?.iframe?.isConnected){if((e.bootAttempts??0)>=tn){this._clearEntryBootTimeout(e),this.toastController?.show(`Excalidraw embed timed out: ${e.label}`);return}await this._retryEntryBootstrap(e)}}async _retryEntryBootstrap(e){e&&(this._clearEntryBootTimeout(e),this._resetPlaceholderLayout(e),this._setEntryLoadingState(e,!1),this.maximizedEmbed?.wrapper===e.wrapper&&this._exitMaximizedEmbed(),e.wrapper?.remove(),e.wrapper=null,e.iframe=null,e.header=null,e.labelElement=null,e.maxButton=null,e.openButton=null,e.instanceId=null,e.isReady=!1,e.isParked=!1,e.bootFilePath=null,e.bootMode=null,e.loadedFilePath=null,e.loadedMode=null,await this._hydrateEntry(e))}_findEntryByContentWindow(e){if(!e)return null;for(let t of this.embedEntries.values())if(t.iframe?.contentWindow===e)return t;return this.warmEntry?.iframe?.contentWindow===e?this.warmEntry:null}_findEntryByFilePath(e){if(!e)return null;for(let t of this.embedEntries.values())if(t.filePath===e)return t;return this.warmEntry?.filePath===e?this.warmEntry:null}_updateEmbedLabel(e){e.labelElement&&(e.labelElement.textContent=e.label.replace(/\.excalidraw$/i,``))}_syncMountedEntryMetadata(e){e.wrapper&&(e.wrapper.dataset.embedKey=e.key,e.wrapper.dataset.file=e.filePath,e.wrapper.classList.toggle(`is-direct-file`,this._isFilePreviewEntry(e))),e.iframe&&(e.iframe.title=`Excalidraw: ${e.filePath}`),e.openButton&&(this._isFilePreviewEntry(e)?e.openButton.remove():!e.openButton.isConnected&&e.header&&e.header.insertBefore(e.openButton,e.maxButton||null))}_buildIframeUrl(e){let t;try{t=new URL(S(rn))}catch{return null}let n=this.getTheme?.()||`dark`,r=E();r&&t.searchParams.set(`vault`,r),t.searchParams.set(`file`,e.filePath),t.searchParams.set(`theme`,n),t.searchParams.set(`boot`,e.instanceId||``),this._isFilePreviewEntry(e)||t.searchParams.set(`mode`,`preview`);let i=this.getLocalUser?.();i?.name&&t.searchParams.set(`userName`,i.name),i?.color&&t.searchParams.set(`userColor`,i.color),i?.colorLight&&t.searchParams.set(`userColorLight`,i.colorLight),i?.peerId&&t.searchParams.set(`userPeerId`,i.peerId);let a=new URLSearchParams(window.location.search),o=T();return o&&t.searchParams.set(`server`,o),a.get(`test`)===`1`&&t.searchParams.set(`test`,`1`),a.has(`syncTimeoutMs`)&&t.searchParams.set(`syncTimeoutMs`,a.get(`syncTimeoutMs`)),a.get(`excalidrawDebug`)===`1`&&t.searchParams.set(`excalidrawDebug`,`1`),t}_createEmbedContainer(e){let t=this._buildIframeUrl(e);if(!t)return null;let n=document.createElement(`div`);n.className=`excalidraw-embed diagram-preview-shell`,n.dataset.embedKey=e.key,n.dataset.file=e.filePath;let r=document.createElement(`div`);r.className=`excalidraw-embed-header diagram-preview-toolbar`;let i=document.createElement(`span`);i.className=`excalidraw-embed-icon`,i.innerHTML=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19l7-7 3 3-7 7-3-3z"/><path d="M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"/><path d="M2 2l7.586 7.586"/><circle cx="11" cy="11" r="2"/></svg>`;let a=document.createElement(`span`);a.className=`excalidraw-embed-label`,a.textContent=e.label.replace(/\.excalidraw$/i,``);let o=document.createElement(`button`);o.type=`button`,o.className=`excalidraw-embed-btn ui-preview-action ui-preview-action--icon-only`,o.title=`Edit in Excalidraw`,o.setAttribute(`aria-label`,`Edit in Excalidraw`),N(o,`edit`);let s=document.createElement(`button`);s.type=`button`,s.className=`excalidraw-embed-btn ui-preview-action ui-preview-action--icon-only`,s.title=`Maximize diagram`,s.setAttribute(`aria-label`,`Maximize diagram`),N(s,`maximize`),r.append(i,a),this._isFilePreviewEntry(e)||r.append(o),r.append(s);let c=document.createElement(`iframe`);c.className=`excalidraw-embed-iframe`,c.dataset.instanceId=String(++this.instanceCounter),e.instanceId=c.dataset.instanceId,c.src=t.toString(),c.setAttribute(`loading`,`eager`),c.title=`Excalidraw: ${e.filePath}`,c.style.height=`${Zt}px`;let l=document.createElement(`div`);l.className=`excalidraw-embed-resizer`,l.title=`Drag to resize`;let u=this._setupResizer(l,c,()=>{this._syncEntryLayout(e),this._requestPreviewViewportFit(e)});n.append(r,c,l);let d=!1,f=`${Zt}px`,p=()=>{N(s,d?`restore`:`maximize`),s.title=d?`Restore diagram size`:`Maximize diagram`,s.setAttribute(`aria-label`,d?`Restore diagram size`:`Maximize diagram`)},m=()=>{d&&(d=!1,n.classList.remove(`is-maximized`),p(),document.body.classList.toggle(`excalidraw-maximized-open`,!!document.body.querySelector(`.excalidraw-embed.is-maximized`)),this._restoreMaximizedEntryLayout(e),c.style.height=f,this.maximizedEmbed?.wrapper===n&&(this.maximizedEmbed=null),this._syncEntryLayout(e),this._requestPreviewViewportFit(e))},h=()=>{d||(this._exitMaximizedEmbed(),d=!0,f=c.style.height||`${Zt}px`,this._enterMaximizedEntryLayout(e),n.classList.add(`is-maximized`),p(),document.body.classList.add(`excalidraw-maximized-open`),this.maximizedEmbed={wrapper:n,exit:m},this._syncEntryLayout(e),this._requestPreviewViewportFit(e))};return s.addEventListener(`click`,()=>{d?m():h()}),o.addEventListener(`click`,t=>{t.preventDefault(),this._exitMaximizedEmbed(),this.onOpenFile?.(e.filePath)}),p(),{header:r,iframe:c,instanceId:c.dataset.instanceId,labelElement:a,maxButton:s,openButton:o,resizerCleanup:u,wrapper:n}}_ensureWarmCacheRoot(){if(this.warmCacheRoot?.isConnected&&this.warmCacheRoot.parentElement===document.body)return this.warmCacheRoot;let e=document.body.querySelector(`[data-excalidraw-warm-cache-root="true"]`);return e||(e=document.createElement(`div`),e.dataset.excalidrawWarmCacheRoot=`true`,e.className=`excalidraw-warm-cache-root`,document.body.appendChild(e)),this.warmCacheRoot=e,e}_setupResizer(e,t,n=null){let r=0,i=0,a=!1,o=e=>{let n=e.clientY-r,a=Math.min(Math.max(i+n,nn),en);t.style.height=`${a}px`,t.style.pointerEvents=`none`},s=()=>{a&&(a=!1,t.style.pointerEvents=``,document.removeEventListener(`pointermove`,o),document.removeEventListener(`pointerup`,c))},c=()=>{s(),n?.()},l=e=>{e.preventDefault(),a=!0,r=e.clientY,i=t.offsetHeight,document.addEventListener(`pointermove`,o),document.addEventListener(`pointerup`,c)};return e.addEventListener(`pointerdown`,l),()=>{e.removeEventListener?.(`pointerdown`,l),s()}}_ensureOverlayRoot(){if(this.overlayRoot?.isConnected&&this.overlayRoot.parentElement===this.previewElement)return this.overlayRoot;let e=this.previewElement?.querySelector(`[data-excalidraw-overlay-root="true"]`);return e||(e=document.createElement(`div`),e.dataset.excalidrawOverlayRoot=`true`,e.className=`excalidraw-embed-overlay-root`,this.previewElement?.appendChild(e)),this.overlayRoot=e,e}_isFilePreviewEntry(e){return e?.key===`${e?.filePath}#file-preview`}_getEntryMode(e){return this._isFilePreviewEntry(e)?`edit`:`preview`}_shouldInlineFilePreview(e){return this._isFilePreviewEntry(e)}_entryNeedsHardReload(e){let t=this._getEntryMode(e);return!!(e?.wrapper&&e.iframe&&(e.isReady?e.loadedFilePath!==e.filePath||e.loadedMode!==t:e.bootFilePath!==e.filePath||e.bootMode!==t))}_setEntryLoadingState(e,t){e?.wrapper&&(e.wrapper.classList.toggle(`is-loading`,!!t),e.wrapper.setAttribute(`aria-busy`,t?`true`:`false`))}_forEachManagedEntry(e){let t=new Set;this.embedEntries.forEach(n=>{n&&!t.has(n)&&(t.add(n),e(n))}),this.warmEntry&&!t.has(this.warmEntry)&&e(this.warmEntry)}_claimEntryFromRemovedEntries(e,t){let n=e.findIndex(e=>(e.wrapper||e.iframe)&&t(e));if(n<0)return null;let[r]=e.splice(n,1);return r}_claimReusableEntry(e,t){let n=this._getEntryMode(e);return this._claimEntryFromRemovedEntries(t,t=>t.filePath===e.filePath&&this._getEntryMode(t)===n)||(this._isFilePreviewEntry(e)?this._claimEntryFromRemovedEntries(t,t=>t.filePath===e.filePath)||this._claimWarmEntry()||this._claimEntryFromRemovedEntries(t,e=>this._isFilePreviewEntry(e)):null)}_claimWarmEntry(){let e=this.warmEntry;return e?(this.warmEntry=null,e):null}_captureWarmEntry(e){let t=this._claimEntryFromRemovedEntries(e,e=>this._isFilePreviewEntry(e));t&&(this.warmEntry&&this.warmEntry!==t&&this._destroyEntry(this.warmEntry),this.warmEntry=t,this._parkWarmEntry(t))}_parkWarmEntry(e){if(!e?.wrapper)return;this.maximizedEmbed?.wrapper===e.wrapper&&this._exitMaximizedEmbed();let t=this._ensureWarmCacheRoot();this._setEntryLoadingState(e,!1),e.isParked=!0,e.isReady=!1,e.bootFilePath=null,e.bootMode=null,e.loadedFilePath=null,e.loadedMode=null,e.pendingElementFocus=null,e.placeholder=null,e.wrapper.parentElement!==t&&t.appendChild(e.wrapper),this._postMessageToEntry(e,{source:`collabmd-host`,type:`park-room`})}_reloadEntry(e){if(!e?.iframe)return;this._clearEntryBootTimeout(e),this._setEntryLoadingState(e,!0),e.isReady=!1,e.bootAttempts=(e.bootAttempts??0)+1,e.bootFilePath=e.filePath,e.bootMode=this._getEntryMode(e),e.loadedFilePath=null,e.loadedMode=null;let t=this._buildIframeUrl(e);t&&(e.iframe.src=t.toString(),this._armEntryBootTimeout(e))}_resetPlaceholderLayout(e){e?.placeholder?.isConnected&&!this._shouldInlineFilePreview(e)&&(e.placeholder.classList.remove(`is-hydrated`),e.placeholder.removeAttribute(`data-embed-hydrated`),e.placeholder.style.height=``,e.placeholder.style.pointerEvents=``)}_enterMaximizedEntryLayout(e){if(e?.wrapper){if(this._shouldInlineFilePreview(e)&&e.wrapper.parentElement&&!e.maximizeSpacer){let t=document.createElement(`div`);t.className=`excalidraw-maximize-spacer`,t.style.height=`${Math.ceil(e.wrapper.getBoundingClientRect().height)}px`,e.maximizeSpacer=t,e.wrapper.parentElement.insertBefore(t,e.wrapper)}e.wrapper.dataset.excalidrawMaximized=`true`,e.wrapper.style.position=``,e.wrapper.style.top=``,e.wrapper.style.left=``,e.wrapper.style.width=`auto`,e.wrapper.style.height=`auto`,e.wrapper.style.minHeight=`0`,e.wrapper.style.margin=`0`,this.overlayRoot?.classList.add(`has-maximized-entry`)}}_restoreMaximizedEntryLayout(e){if(!e?.wrapper)return;let{maximizeSpacer:t}=e;delete e.wrapper.dataset.excalidrawMaximized,e.wrapper.style.width=``,e.wrapper.style.height=``,e.wrapper.style.minHeight=``,t?.parentElement&&t.remove(),e.maximizeSpacer=null,this.overlayRoot?.classList.remove(`has-maximized-entry`)}_syncEntryLayout(e){if(!e?.wrapper||this._shouldInlineFilePreview(e))return;let t=e.placeholder?.isConnected?e.placeholder:an(this.previewElement,e.key);if(!t)return;e.placeholder=t,t.classList.add(`is-hydrated`),t.dataset.embedHydrated=`true`,t.style.pointerEvents=`none`,this._isFilePreviewEntry(e)&&t.childElementCount>0&&t.replaceChildren();let n=e.wrapper.classList.contains(`is-maximized`),r=e.wrapper.querySelector(`.excalidraw-embed-header`)?.offsetHeight||0,i=e.iframe?.offsetHeight||Number.parseFloat(e.iframe?.style.height||``)||Zt,a=n?0:e.wrapper.querySelector(`.excalidraw-embed-resizer`)?.offsetHeight||0,o=Math.ceil(r+i+a);if(n||(e.inlineHeightPx=o),t.style.height=`${Math.ceil(e.inlineHeightPx||o||Zt)}px`,e.wrapper.style.pointerEvents=`auto`,n){e.wrapper.style.position=``,e.wrapper.style.top=``,e.wrapper.style.left=``,e.wrapper.style.width=`auto`,e.wrapper.style.height=`auto`,e.wrapper.style.minHeight=`0`,e.wrapper.style.margin=`0`;return}e.wrapper.style.position=`absolute`,e.wrapper.style.top=`${t.offsetTop}px`,e.wrapper.style.left=`${t.offsetLeft}px`,e.wrapper.style.width=`${t.offsetWidth}px`,e.wrapper.style.height=``,e.wrapper.style.minHeight=``,e.wrapper.style.margin=`0`}syncLayout(){this.embedEntries.forEach(e=>{e.wrapper&&!this._shouldInlineFilePreview(e)&&this._syncEntryLayout(e)})}_onPreviewClick(e){let t=e.target.closest(`.excalidraw-embed-placeholder-btn`);if(!t)return;e.preventDefault();let n=this.embedEntries.get(t.dataset.embedKey);n&&this._hydrateEntry(n)}_onMessage(e){if(e.origin!==window.location.origin)return;let t=e.data;if(!t||t.source!==`excalidraw-editor`)return;let n=this._findEntryByContentWindow(e.source);if(n){if(t.type===`ready`){if(n.isParked)return;n.isReady=!0,this._clearEntryBootTimeout(n),n.loadedFilePath=n.bootFilePath||n.filePath,n.loadedMode=n.bootMode||this._getEntryMode(n),this._setEntryLoadingState(n,!1),this._syncEntryUser(n),this._postMessageToEntry(n,{source:`collabmd-host`,type:`set-theme`,theme:this.getTheme?.()||`dark`}),this._syncEntryFollowState(n),this._postPendingCommentThread?.(n),this._postPendingElement?.(n),this.pendingDisconnectRequests?.forEach((e,t)=>{e.entry===n&&this._postMessageToEntry(n,{source:`collabmd-host`,type:`prepare-disconnect`,requestId:t})}),this._entryNeedsHardReload(n)&&this._hydrateEntry(n);return}if(t.type===`request-toggle-quick-switcher`){this.onToggleQuickSwitcher?.();return}if(t.type===`stop-following`){this.onStopFollowing?.();return}if(t.type===`open-element-link`){let e=le(t.href,{appPath:C(`/`),origin:window.location.origin});e&&this.onOpenElement?.(e);return}if(t.type===`error`){if(n.isParked)return;n.isReady=!1,this._handleEntryBootTimeout(n);return}if(t.type===`disconnect-ready`){let e=this.pendingDisconnectRequests.get(t.requestId);e?.entry===n&&e.resolve(!0);return}if(t.type===`agent-writes-flushed`||t.type===`agent-revision-painted`||t.type===`agent-revision-not-painted`){let e=this.pendingAgentBridgeRequests.get(t.requestId);e?.entry===n&&e.resolve({...t.revision?{revision:t.revision}:{},status:t.status||(t.type===`agent-writes-flushed`?`flushed`:t.type===`agent-revision-painted`?`painted`:`not-painted`)});return}if(t.type===`disconnect-blocked`){n.authorityState=t.state||`reconnecting-readonly`,this.toastController?.show?.(`Waiting for the diagram to reconnect before leaving`);return}if(t.type===`excalidraw-authority-state`){n.authorityState=t.state||`closed`,n.hasPendingWrites=!!t.hasPendingWrites;return}t.type===`park-blocked`&&(n.authorityState=t.state||`reconnecting-readonly`)}}_onKeyDown(e){e.key===`Escape`&&this._exitMaximizedEmbed()}_exitMaximizedEmbed(){this.maximizedEmbed?.exit&&this.maximizedEmbed.exit(),this.maximizedEmbed=null}_postMessageToEntry(e,t){e?.iframe?.contentWindow?.postMessage(t,window.location.origin)}_postPendingCommentThread(e){e?.isReady&&e.pendingCommentThreadId&&(this._postMessageToEntry(e,{source:`collabmd-host`,threadId:e.pendingCommentThreadId,type:`open-comment-thread`}),e.pendingCommentThreadId=null)}_postPendingElement(e){e?.isReady&&e.pendingElementFocus&&(this._postMessageToEntry(e,{elementId:e.pendingElementFocus.elementId,elementType:e.pendingElementFocus.elementType,source:`collabmd-host`,type:`focus-element`}),e.pendingElementFocus=null)}_requestPreviewViewportFit(e){this._isFilePreviewEntry(e)||this._postMessageToEntry(e,{source:`collabmd-host`,type:`fit-preview-viewport`})}_syncEntryUser(e,t=null){let n=t||this.getLocalUser?.();n&&this._postMessageToEntry(e,{source:`collabmd-host`,type:`set-user`,user:{color:n.color||``,colorLight:n.colorLight||``,name:n.name||``,peerId:n.peerId||``}})}_syncEntryFollowState(e){e?.isReady&&e.followedPeerId!==void 0&&this._postMessageToEntry(e,{source:`collabmd-host`,type:`follow-user`,peerId:e.followedPeerId})}},sn=16/9,cn=240,ln=720,un=180;function dn(e){return Math.max(un,Math.min(ln,Math.ceil(e||cn)))}var fn=class{constructor({previewElement:e}){this.previewElement=e,this.embedEntries=new Map,this.overlayRoot=null}destroy(){this.embedEntries.forEach(e=>{e.hydrateFrameId&&=(cancelAnimationFrame(e.hydrateFrameId),null),e.wrapper?.remove(),e.placeholder=null}),this.embedEntries.clear(),this.overlayRoot?.remove(),this.overlayRoot=null}detachForCommit(){this.embedEntries.forEach(e=>{e.placeholder=null})}reconcileEmbeds(e=this.previewElement){if(this.previewElement=e,!e)return;let t=Array.from(e.querySelectorAll(`.video-embed-placeholder[data-video-embed-key]`)).map(e=>({filePath:e.dataset.videoEmbedSource,key:e.dataset.videoEmbedKey,label:e.dataset.videoEmbedLabel||`Embedded video`,placeholder:e,source:e.dataset.videoEmbedSource||``,kind:e.dataset.videoEmbedKind||``,url:e.dataset.videoEmbedUrl||``,mimeType:e.dataset.videoEmbedMimeType||``})),{nextEntries:n,removedEntries:r}=Xt(this.embedEntries,t);r.forEach(e=>this._destroyEntry(e)),this.embedEntries=n,this.embedEntries.forEach(e=>{e.aspectRatio=e.aspectRatio||sn,e.kind=e.placeholder?.dataset.videoEmbedKind||e.kind,e.label=e.placeholder?.dataset.videoEmbedLabel||e.label,e.mimeType=e.placeholder?.dataset.videoEmbedMimeType||e.mimeType,e.source=e.placeholder?.dataset.videoEmbedSource||e.source,e.url=e.placeholder?.dataset.videoEmbedUrl||e.url,e.wrapper||this._createEmbed(e),this._attachWrapper(e)}),this.syncLayout(),this.embedEntries.size===0&&(this.overlayRoot?.remove(),this.overlayRoot=null)}syncLayout(){this.embedEntries.forEach(e=>{e.wrapper&&this._syncEntryLayout(e)})}_destroyEntry(e){e.hydrateFrameId&&=(cancelAnimationFrame(e.hydrateFrameId),null),e.wrapper?.remove(),e.placeholder=null}_createEmbed(e){let t=document.createElement(`div`);if(t.className=`video-embed video-embed-shell diagram-preview-shell is-${e.kind}`,e.kind===`youtube`){let n=document.createElement(`div`);n.className=`video-embed-frame video-embed-frame-youtube`;let r=document.createElement(`iframe`);r.className=`video-embed-iframe`,r.title=e.label||`Embedded YouTube video`,r.referrerPolicy=`strict-origin-when-cross-origin`,r.allow=`accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share`,r.allowFullscreen=!0,n.appendChild(r),t.appendChild(n),e.mediaElement=r}else{let n=document.createElement(`video`);n.className=`video-embed-player`,n.controls=!0,n.preload=`metadata`,n.playsInline=!0,e.label&&(n.title=e.label,n.setAttribute(`aria-label`,e.label));let r=document.createElement(`source`);r.src=e.url,e.mimeType&&(r.type=e.mimeType),n.appendChild(r),n.addEventListener(`loadedmetadata`,()=>{Number.isFinite(n.videoWidth)&&Number.isFinite(n.videoHeight)&&n.videoWidth>0&&n.videoHeight>0&&(e.aspectRatio=n.videoWidth/n.videoHeight,this._syncEntryLayout(e))}),t.appendChild(n),e.mediaElement=n}e.wrapper=t}_attachWrapper(e){let t=e.placeholder?.isConnected?e.placeholder:this.previewElement?.querySelector(`.video-embed-placeholder[data-video-embed-key="${e.key}"]`);if(!t)return;e.placeholder=t,t.classList.add(`is-hydrated`),t.dataset.videoEmbedHydrated=`true`,t.style.pointerEvents=`none`;let n=this._ensureOverlayRoot();e.wrapper?.parentElement!==n&&n.appendChild(e.wrapper)}_syncEntryLayout(e){let t=e.placeholder?.isConnected?e.placeholder:this.previewElement?.querySelector(`.video-embed-placeholder[data-video-embed-key="${e.key}"]`);if(!t||!e.wrapper)return;e.placeholder=t;let n=t.offsetWidth||t.clientWidth||0;if(n<=0&&e.inlineHeightPx)return;let r=dn(n>0?n/(e.aspectRatio||sn):e.inlineHeightPx);e.inlineHeightPx=r,Z(t,`height`,`${r}px`),Z(e.wrapper,`position`,`absolute`),Z(e.wrapper,`top`,`${t.offsetTop}px`),Z(e.wrapper,`left`,`${t.offsetLeft}px`),Z(e.wrapper,`width`,`${t.offsetWidth}px`),Z(e.wrapper,`height`,`${r}px`),Z(e.wrapper,`margin`,`0`),Z(e.wrapper,`pointerEvents`,`auto`),this._hydrateEntryMedia(e)}_ensureOverlayRoot(){let e=this.previewElement?.querySelector(`[data-video-overlay-root="true"]`);return e||(e=document.createElement(`div`),e.dataset.videoOverlayRoot=`true`,e.className=`video-embed-overlay-root`,this.previewElement?.appendChild(e)),this.overlayRoot=e,e}_hydrateEntryMedia(e){if(e.kind!==`youtube`)return;let t=e.mediaElement;t instanceof HTMLIFrameElement&&e.url&&t.getAttribute(`src`)!==e.url&&(e.wrapper?.offsetWidth<=0||e.wrapper?.offsetHeight<=0||(e.hydrateFrameId||=requestAnimationFrame(()=>{if(e.hydrateFrameId=null,!e.url||t.getAttribute(`src`)===e.url)return;let n=Math.round(e.wrapper?.offsetWidth||0),r=Math.round(e.wrapper?.offsetHeight||0);n<=0||r<=0||(t.width=String(n),t.height=String(r),t.src=e.url)})))}};function Z(e,t,n){e&&e.style[t]!==n&&(e.style[t]=n)}function pn(e,t=[],n=[],r=[]){for(let i of e)if(i?.path&&i?.type){if(n.push({lowerPath:String(i.path).toLowerCase(),name:i.name,path:i.path,type:i.type}),i.type!==`directory`){t.push(i.path),r.push({mtimeMs:i.mtimeMs,path:i.path});continue}i.type===`directory`&&Array.isArray(i.children)&&pn(i.children,t,n,r)}return{fileEntries:r,files:t,searchEntries:n}}function mn(e,t){for(let n of e??[]){if(n?.path===t)return n;if(n?.type===`directory`&&Array.isArray(n.children)){let e=mn(n.children,t);if(e)return e}}return null}function hn(e){let t=0,n=0;for(let r of e?.children??[]){if(r?.type===`directory`){t+=1;let e=hn(r);t+=e.directoryCount,n+=e.fileCount;continue}n+=1}return{directoryCount:t,fileCount:n}}function gn(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}var _n=class{constructor(){this.tree=[],this.flatFiles=[],this.flatDocumentFiles=[],this.flatFileEntries=[],this.flatSearchEntries=[],this.activeFilePath=null,this.expandedDirs=new Set,this.searchQuery=``}setTree(t){this.tree=Array.isArray(t)?t:[];let n=pn(this.tree,[],[],[]);this.flatFiles=n.files,this.flatDocumentFiles=n.files.filter(t=>!e(t)),this.flatFileEntries=n.fileEntries,this.flatSearchEntries=n.searchEntries}setSearchQuery(e){this.searchQuery=String(e??``)}getSearchMatches(){let e=this.searchQuery.trim().toLowerCase();return e?this.flatSearchEntries.filter(t=>t.type!==`directory`&&t.lowerPath.includes(e)).map(e=>({name:e.name,path:e.path,type:e.type})):[]}getNode(e){return mn(this.tree,e)}getDirectoryDescendantSummary(e){let t=this.getNode(e);return!t||t.type!==`directory`?{directoryCount:0,fileCount:0}:hn(t)}setActiveFile(e){this.activeFilePath=e||null,e&&this.expandDirectoryPath(e,{includeLeaf:!1})}toggleDirectory(e){return this.expandedDirs.has(e)?(this.expandedDirs.delete(e),!1):(this.expandedDirs.add(e),!0)}expandDirectoryPath(e,{includeLeaf:t=!0}={}){let n=a(e);if(!n)return;let r=n.split(`/`),i=t?r.length:Math.max(r.length-1,0),o=``;for(let e=0;e<i;e+=1)o=o?`${o}/${r[e]}`:r[e],this.expandedDirs.add(o)}replaceExpandedDirectoryPrefix(e,t){let n=new Set;this.expandedDirs.forEach(r=>{if(r===e||r.startsWith(`${e}/`)){n.add(gn(r,e,t));return}n.add(r)}),this.expandedDirs=n}removeExpandedDirectoryPrefix(e){let t=new Set;this.expandedDirs.forEach(n=>{n===e||n.startsWith(`${e}/`)||t.add(n)}),this.expandedDirs=t}},Q=1,vn=6,yn=.25,bn=2,$=6;function xn(e){let t=Number(e);return Number.isFinite(t)?Math.min(vn,Math.max(Q,Math.round(t*100)/100)):Q}function Sn(e,{contentSize:t=0,scale:n=1,viewportSize:r=0}={}){let i=Number(e),a=Number(t),o=Number(n),s=Number(r);if(!Number.isFinite(i)||!Number.isFinite(a)||!Number.isFinite(o)||!Number.isFinite(s))return 0;let c=(a*o-s)/2;return c<=0?0:Math.min(Math.max(i,-c),c)}var Cn=class{constructor({previewElement:e,documentRef:t=document,windowRef:n=window}){this.previewElement=e,this.document=t,this.window=n,this.overlayRoot=null,this.viewport=null,this.imageElement=null,this.zoomLabel=null,this.titleElement=null,this.isOpen=!1,this.scale=Q,this.offsetX=0,this.offsetY=0,this.activePointerId=null,this.dragStartX=0,this.dragStartY=0,this.dragOriginX=0,this.dragOriginY=0,this.touchPointers=new Map,this.pinchPointerIds=[],this.pinchStartDistance=0,this.pinchStartScale=Q,this.pinchStartOffsetX=0,this.pinchStartOffsetY=0,this.pinchStartCenter={x:0,y:0},this.didDrag=!1,this.resetButton=null,this.previouslyFocusedElement=null,this.blockingModalHandler=()=>this.close(),this.listenerController=new AbortController;let{signal:r}=this.listenerController;this.handlePreviewClick=e=>{let t=e.target;if(!(t instanceof this.window.Element))return;let n=t.closest(`img`);n&&this.previewElement?.contains(n)&&(n.closest(`[data-video-overlay-root="true"], [data-excalidraw-overlay-root="true"]`)||(e.preventDefault(),e.stopImmediatePropagation?.(),this.openFromImage(n)))},this.handleKeyDown=e=>{if(this.isOpen){if(e.key===`+`||e.key===`=`){e.preventDefault(),this.zoomBy(yn);return}if(e.key===`-`){e.preventDefault(),this.zoomBy(-.25);return}e.key===`0`&&(e.preventDefault(),this.resetView())}},this.handleWindowResize=()=>{this.isOpen&&(this.clampOffsets(),this.syncTransform())},this.previewElement?.addEventListener(`click`,this.handlePreviewClick,{signal:r}),this.document.addEventListener(`keydown`,this.handleKeyDown,{signal:r}),this.window.addEventListener(`resize`,this.handleWindowResize,{signal:r})}destroy(){this.listenerController?.abort(),this.listenerController=null,this.close(),this.overlayRoot?.remove(),this.overlayRoot=null,this.viewport=null,this.imageElement=null,this.zoomLabel=null,this.titleElement=null,this.resetButton=null}openFromImage(e){let t=e?.currentSrc||e?.getAttribute?.(`src`)||``;return t?(this.ensureOverlayRoot(),this.previouslyFocusedElement=this.document.activeElement instanceof this.window.HTMLElement?this.document.activeElement:null,this.resetView(),this.titleElement.textContent=e.getAttribute(`alt`)||`Image preview`,this.imageElement.src=t,this.imageElement.alt=e.getAttribute(`alt`)||``,this.overlayRoot.showModal(),this.isOpen=!0,this.document.body.classList.add(`image-lightbox-open`),this.document.addEventListener(`collabmd:close-custom-modals`,this.blockingModalHandler),this.syncTransform(),this.overlayRoot.querySelector(`button:not(:disabled)`)?.focus(),!0):!1}close(){(this.isOpen||this.overlayRoot)&&(this.stopDrag(),this.touchPointers.clear(),this.pinchPointerIds=[],this.pinchStartDistance=0,this.didDrag=!1,this.viewport?.classList?.remove(`is-dragging`),this.overlayRoot?.open&&this.overlayRoot.close(),this.isOpen=!1,this.document.body.classList.remove(`image-lightbox-open`),this.document.removeEventListener(`collabmd:close-custom-modals`,this.blockingModalHandler),this.previouslyFocusedElement?.focus?.(),this.previouslyFocusedElement=null)}resetView(){this.scale=Q,this.offsetX=0,this.offsetY=0,this.syncTransform()}zoomBy(e){this.setScale(this.scale+e)}setScale(e){this.scale=xn(e),this.clampOffsets(),this.syncTransform()}capturePointer(e){try{this.viewport?.setPointerCapture?.(e)}catch{}}releasePointer(e){try{this.viewport?.releasePointerCapture?.(e)}catch{}}getViewportPointFromClient(e,t){if(!this.viewport)return{x:0,y:0};let n=this.viewport.getBoundingClientRect();return{x:Number(e)-n.left-n.width/2,y:Number(t)-n.top-n.height/2}}setScaleAroundViewportPoint(e,t,{originScale:n=this.scale,originOffsetX:r=this.offsetX,originOffsetY:i=this.offsetY,targetViewportPoint:a=t}={}){let o=xn(e),s=Number(n)>0?Number(n):Q,c=Number.isFinite(t?.x)?t.x:0,l=Number.isFinite(t?.y)?t.y:0,u=Number.isFinite(a?.x)?a.x:c,d=Number.isFinite(a?.y)?a.y:l;this.scale=o,this.offsetX=u-(c-r)/s*o,this.offsetY=d-(l-i)/s*o,this.clampOffsets(),this.syncTransform()}startDrag(e,t,n){return!this.viewport||this.scale<=Q?!1:(this.activePointerId=e,this.dragStartX=t,this.dragStartY=n,this.dragOriginX=this.offsetX,this.dragOriginY=this.offsetY,this.viewport.classList.add(`is-dragging`),this.capturePointer(e),!0)}stopDrag(e=this.activePointerId){e===this.activePointerId&&(this.activePointerId=null),this.viewport?.classList?.remove(`is-dragging`),e!==null&&this.releasePointer(e),this.imageElement&&(this.imageElement.style.cursor=this.scale>Q?`grab`:`zoom-in`)}updateDrag(e,t,n){return!this.isOpen||this.activePointerId!==e?!1:(!this.didDrag&&(Math.abs(t-this.dragStartX)>=$||Math.abs(n-this.dragStartY)>=$)&&(this.didDrag=!0),this.offsetX=this.dragOriginX+(t-this.dragStartX),this.offsetY=this.dragOriginY+(n-this.dragStartY),this.clampOffsets(),this.syncTransform(),!0)}getTrackedTouchPointers(){return Array.from(this.touchPointers.values())}getActivePinchPointers(){if(this.pinchPointerIds.length===2){let e=this.pinchPointerIds.map(e=>this.touchPointers.get(e)).filter(Boolean);if(e.length===2)return e}return this.getTrackedTouchPointers().slice(0,2)}startPinchGesture(){let[e,t]=this.getActivePinchPointers();if(!e||!t)return!1;this.stopDrag(),this.pinchPointerIds=[e.pointerId,t.pointerId],this.pinchStartDistance=Math.hypot(t.clientX-e.clientX,t.clientY-e.clientY)||1,this.pinchStartScale=this.scale,this.pinchStartOffsetX=this.offsetX,this.pinchStartOffsetY=this.offsetY;let n=this.getViewportPointFromClient((e.clientX+t.clientX)/2,(e.clientY+t.clientY)/2);return this.pinchStartCenter=n,!0}updatePinchGesture(){let[e,t]=this.getActivePinchPointers();if(!e||!t)return!1;let n=Math.hypot(t.clientX-e.clientX,t.clientY-e.clientY);if(!Number.isFinite(n)||n<=0)return!1;let r=this.getViewportPointFromClient((e.clientX+t.clientX)/2,(e.clientY+t.clientY)/2),i=this.pinchStartScale*(n/this.pinchStartDistance);return this.setScaleAroundViewportPoint(i,this.pinchStartCenter,{originScale:this.pinchStartScale,originOffsetX:this.pinchStartOffsetX,originOffsetY:this.pinchStartOffsetY,targetViewportPoint:r}),!this.didDrag&&(Math.abs(n-this.pinchStartDistance)>=$||Math.abs(r.x-this.pinchStartCenter.x)>=$||Math.abs(r.y-this.pinchStartCenter.y)>=$)&&(this.didDrag=!0),!0}syncTouchGestureAfterPointerChange(){if(this.touchPointers.size>=2){this.startPinchGesture();return}if(this.pinchPointerIds=[],this.pinchStartDistance=0,this.touchPointers.size===1&&this.scale>Q){let[e]=this.getTrackedTouchPointers();this.startDrag(e.pointerId,e.clientX,e.clientY);return}this.stopDrag()}clampOffsets(){if(!this.viewport||!this.imageElement){this.offsetX=0,this.offsetY=0;return}this.offsetX=Sn(this.offsetX,{contentSize:this.imageElement.offsetWidth||0,scale:this.scale,viewportSize:this.viewport.clientWidth||0}),this.offsetY=Sn(this.offsetY,{contentSize:this.imageElement.offsetHeight||0,scale:this.scale,viewportSize:this.viewport.clientHeight||0})}syncTransform(){this.imageElement&&(this.imageElement.style.transform=`translate3d(${this.offsetX}px, ${this.offsetY}px, 0) scale(${this.scale})`,this.imageElement.style.cursor=this.scale>Q?`grab`:`zoom-in`,this.zoomLabel&&(this.zoomLabel.textContent=`${Math.round(this.scale*100)}%`),this.resetButton&&(this.resetButton.disabled=this.scale<=Q&&this.offsetX===0&&this.offsetY===0))}ensureOverlayRoot(){if(this.overlayRoot?.isConnected&&this.overlayRoot.parentElement===this.document.body)return this.overlayRoot;let e=this.document.createElement(`dialog`);e.className=`image-lightbox-root`,e.dataset.imageLightboxRoot=`true`,e.setAttribute(`aria-labelledby`,`imageLightboxTitle`),e.addEventListener(`cancel`,e=>{e.preventDefault(),this.close()});let t=this.document.createElement(`button`);t.className=`image-lightbox-backdrop`,t.type=`button`,t.setAttribute(`aria-label`,`Close image preview`),t.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),this.close()});let n=this.document.createElement(`div`);n.className=`image-lightbox-shell`,n.addEventListener(`click`,e=>e.stopPropagation()),n.addEventListener(`pointerdown`,e=>e.stopPropagation());let r=this.document.createElement(`div`);r.className=`image-lightbox-toolbar`;let i=this.document.createElement(`div`);i.className=`image-lightbox-title`,i.id=`imageLightboxTitle`,i.textContent=`Image preview`;let a=this.document.createElement(`div`);a.className=`image-lightbox-controls`;let o=this.createControlButton(`-`,`Zoom out`,()=>this.zoomBy(-.25)),s=this.document.createElement(`span`);s.className=`image-lightbox-zoom-label`,s.textContent=`100%`;let c=this.createControlButton(`+`,`Zoom in`,()=>this.zoomBy(yn)),l=this.createControlButton(`Reset`,`Reset zoom and position`,()=>this.resetView()),u=this.createControlButton(`Close`,`Close image preview`,()=>this.close());a.append(o,s,c,l,u),r.append(i,a);let d=this.document.createElement(`div`);d.className=`image-lightbox-viewport`;let f=this.document.createElement(`img`);f.className=`image-lightbox-image`,f.alt=``,f.addEventListener(`load`,()=>{this.clampOffsets(),this.syncTransform()}),d.addEventListener(`wheel`,e=>{if(!this.isOpen)return;if(e.ctrlKey){e.preventDefault(),this.zoomBy(e.deltaY<0?yn:-.25);return}if(this.scale<=Q)return;let t=Number.isFinite(e.deltaX)?e.deltaX:0,n=Number.isFinite(e.deltaY)?e.deltaY:0;(t!==0||n!==0)&&(e.preventDefault(),this.offsetX-=t,this.offsetY-=n,this.clampOffsets(),this.syncTransform())},{passive:!1}),d.addEventListener(`pointerdown`,e=>{if(this.isOpen){if(e.pointerType===`touch`){this.touchPointers.size===0&&(this.didDrag=!1),this.touchPointers.set(e.pointerId,{clientX:e.clientX,clientY:e.clientY,pointerId:e.pointerId}),this.capturePointer(e.pointerId),this.syncTouchGestureAfterPointerChange(),(this.touchPointers.size>1||this.scale>Q)&&e.preventDefault();return}this.scale<=Q||e.button!==0||(this.didDrag=!1,this.startDrag(e.pointerId,e.clientX,e.clientY),e.preventDefault())}}),d.addEventListener(`pointermove`,e=>{if(this.isOpen){if(e.pointerType===`touch`&&this.touchPointers.has(e.pointerId)){if(this.touchPointers.set(e.pointerId,{clientX:e.clientX,clientY:e.clientY,pointerId:e.pointerId}),this.touchPointers.size>=2){this.updatePinchGesture(),e.preventDefault();return}this.updateDrag(e.pointerId,e.clientX,e.clientY)&&e.preventDefault();return}this.updateDrag(e.pointerId,e.clientX,e.clientY)}});let p=e=>{if(e.pointerType===`touch`){this.touchPointers.delete(e.pointerId),this.releasePointer(e.pointerId),this.activePointerId===e.pointerId&&this.stopDrag(e.pointerId),this.syncTouchGestureAfterPointerChange();return}this.activePointerId===e.pointerId&&this.stopDrag(e.pointerId)};return d.addEventListener(`pointerup`,p),d.addEventListener(`pointercancel`,p),d.addEventListener(`lostpointercapture`,p),f.addEventListener(`click`,e=>{if(this.isOpen){if(e.preventDefault(),e.stopPropagation(),this.didDrag){this.didDrag=!1;return}this.scale<=Q&&this.setScale(bn)}}),d.appendChild(f),n.append(r,d),e.append(t,n),this.document.body.appendChild(e),this.overlayRoot=e,this.viewport=d,this.imageElement=f,this.zoomLabel=s,this.titleElement=i,this.resetButton=l,this.syncTransform(),e}createControlButton(e,t,n,{className:r=``}={}){let i=this.document.createElement(`button`);return i.className=`image-lightbox-btn ${r}`.trim(),i.type=`button`,i.setAttribute(`aria-label`,t),i.textContent=e,i.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),n(e)}),i}};export{on as a,Ut as c,F as d,P as f,A as g,xe as h,fn as i,Ve as l,N as m,_n as n,Yt as o,Re as p,pn as r,qt as s,Cn as t,Be as u};
|