collabmd 0.1.54 → 0.1.56
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/README.md +1 -1
- package/bin/collabmd.js +19 -38
- package/dist/client/assets/CodeMirrorEditor-UCMRAMCV-CW5HP9uy.js +1 -0
- package/dist/client/assets/{Middleware-DUgFSleI.js → Middleware-DbxtuTyG.js} +1 -1
- package/dist/client/assets/{abnfDiagram-VCTEODGH-DxNxad6-.js → abnfDiagram-VCTEODGH-DY5tILUg.js} +1 -1
- package/dist/client/assets/{abnfDiagram-O67JEVCF-Dwt6a0Ds.js → abnfDiagram-WEYOIA3C-BqtDVimc.js} +1 -1
- package/dist/client/assets/api-client-utils-DkW9xiiw.js +1 -0
- package/dist/client/assets/{ar-SA-5WIASEJP-Di7OimCN.js → ar-SA-5WIASEJP-DbGUC-Fx.js} +1 -1
- package/dist/client/assets/{arc-DgcGdgmL.js → arc-Y1ARJVZ4.js} +1 -1
- package/dist/client/assets/architecture-7GRP2DOG-DndzY1Hb.js +1 -0
- package/dist/client/assets/architecture-WOLXFQ4H-tER6YKVA.js +1 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-C1uvg5id.js → architectureDiagram-5GKGNRK7-D_ZiDWLO.js} +2 -2
- package/dist/client/assets/{architectureDiagram-NJMV4G6O-D5CGiX3G.js → architectureDiagram-ZHVYKT53-CCmYbVDm.js} +3 -3
- package/dist/client/assets/{az-AZ-V5EUQD6C-C19OGTT_.js → az-AZ-V5EUQD6C-qK0euR1T.js} +1 -1
- package/dist/client/assets/babel-BaOs8qJH.js +16 -0
- package/dist/client/assets/base-CaIEJUF9.css +1 -0
- package/dist/client/assets/{bg-BG-EXASCMTR-BIt0xWyb.js → bg-BG-EXASCMTR-DHvN8nO_.js} +1 -1
- package/dist/client/assets/{blockDiagram-I7D4REHJ-B2YonsoG.js → blockDiagram-I7D4REHJ-CeN7xDSG.js} +2 -2
- package/dist/client/assets/{blockDiagram-BEXU5L5S-BgTM0var.js → blockDiagram-RJAE7QA3-CsHpm8AL.js} +3 -3
- package/dist/client/assets/{bn-BD-U4SYNFCO-CdNaPy4Q.js → bn-BD-U4SYNFCO-BKKqqvJ1.js} +1 -1
- package/dist/client/assets/{bn-IN-HKDJIITE-CdNaPy4Q.js → bn-IN-HKDJIITE-BKKqqvJ1.js} +1 -1
- package/dist/client/assets/{browser-BKLM0ThC-BCLQGPD6-K2seJgRL.js → browser-BKLM0ThC-BCLQGPD6-B6uxmOe1.js} +1 -1
- package/dist/client/assets/{c4Diagram-7LVT6UL2-r4IwomZm.js → c4Diagram-7LVT6UL2-Bezmsa8k.js} +1 -1
- package/dist/client/assets/{c4Diagram-YGBWAQC7-_xZPrNkB.js → c4Diagram-XDPPPE54-COKPOr_O.js} +2 -2
- package/dist/client/assets/{ca-ES-2KGUU5XB-C9t-c0cH.js → ca-ES-2KGUU5XB-CYClUOgC.js} +1 -1
- package/dist/client/assets/canvasEditor-BJkwGzO1.css +1 -0
- package/dist/client/assets/canvasEditor-CWbY0cMf.js +1 -0
- package/dist/client/assets/channel-COwKkfba.js +1 -0
- package/dist/client/assets/{chunk-6AZGARVD--pTGpDnx.js → chunk-24IY7LWP-DUl0BbtV.js} +1 -1
- package/dist/client/assets/chunk-2E4U76K2-CPmbCsOa.js +1 -0
- package/dist/client/assets/{chunk-GTNCS2PH-ChgkzEIi.js → chunk-2E7WHVMD-CnfGYKwC.js} +3 -3
- package/dist/client/assets/chunk-2ZTRR5NV-CowhtTwB.js +2 -0
- package/dist/client/assets/{chunk-5V3GS4D5-B5uC2oxu.js → chunk-3M4EKCLJ-BeG5ZU4c.js} +1 -1
- package/dist/client/assets/{chunk-3Z5EZCMW-BAnA6eQ7.js → chunk-3Z5EZCMW-DQ1fwqmG.js} +1 -1
- package/dist/client/assets/{chunk-NETBCI7D-CmUwDWUZ.js → chunk-4EMNKR2T-B97vb0rp.js} +1 -1
- package/dist/client/assets/{chunk-4HAMMTFA-q0ldNVvr.js → chunk-4HAMMTFA-B3s0XvP_.js} +1 -1
- package/dist/client/assets/{chunk-6K3QC6MW-DGVRzL6v.js → chunk-4S7OKTRW-DIpJGzf1.js} +1 -1
- package/dist/client/assets/{chunk-ICYGCRZG-D97UeqJs.js → chunk-53FOQ5SW-C3TQxbLr.js} +1 -1
- package/dist/client/assets/{chunk-GWA4HPMP-CGmv2yIq.js → chunk-55XCU76K-CZBj2eVM.js} +1 -1
- package/dist/client/assets/{chunk-5V3GS4D5-BR7kgIgJ.js → chunk-5V3GS4D5-CD51GF-u.js} +1 -1
- package/dist/client/assets/{chunk-6AZGARVD-CnZDr4Cj.js → chunk-6AZGARVD-BD9EvFmU.js} +1 -1
- package/dist/client/assets/{chunk-6EIED4P4-Bp8dpTvX.js → chunk-6EIED4P4-CZFyd-Ct.js} +1 -1
- package/dist/client/assets/{chunk-6K3QC6MW-JnuvEGV4.js → chunk-6K3QC6MW-BJWmnHdF.js} +1 -1
- package/dist/client/assets/{chunk-6TQVIW2G-BSj0l_pu.js → chunk-6TQVIW2G-DaBcb454.js} +1 -1
- package/dist/client/assets/chunk-747NJXEK-D08Z0c6r.js +2 -0
- package/dist/client/assets/{chunk-75Z2AOVW-DitkSoSG.js → chunk-75Z2AOVW-DLVzmKuL.js} +1 -1
- package/dist/client/assets/chunk-7S6XSTFO-CXBGoJ7Z.js +2 -0
- package/dist/client/assets/{chunk-MBY4JIJT-DTJ4UcAm.js → chunk-AQDTSKZB-BpOOnFv4.js} +3 -3
- package/dist/client/assets/chunk-BP2KR52E-yBDJ_0ib.js +2 -0
- package/dist/client/assets/{chunk-CLGD4ZFX-BfYJtJm1.js → chunk-CLGD4ZFX-BBNA_mHW.js} +1 -1
- package/dist/client/assets/chunk-DSNLSHJZ-DkAaVKkN.js +127 -0
- package/dist/client/assets/{chunk-DU6HZSFF-CWlP1Dk_.js → chunk-DU6HZSFF-Dz0Q7VKE.js} +2 -2
- package/dist/client/assets/{chunk-GNY47TPC-CTrH5O5R.js → chunk-EJLWFMJV-CxNRZ5Ez.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-DPcsPcEs.js → chunk-F27PBJKO-BziR3pku.js} +1 -1
- package/dist/client/assets/chunk-F6S3BTY2-Dw9FK6Vq.js +2 -0
- package/dist/client/assets/chunk-FBWCRPUE-PUG6Mjdg.js +12 -0
- package/dist/client/assets/{chunk-FOHPRMQF-Dmmo5Kak.js → chunk-FOHPRMQF-COOliuUh.js} +8 -8
- package/dist/client/assets/{chunk-GMAD6QVW-Bgk8qnty.js → chunk-GMAD6QVW-B6zS4VJx.js} +1 -1
- package/dist/client/assets/{chunk-GVQU2GXP-CQ8cl-Uu.js → chunk-GVQU2GXP-BA8Vt-19.js} +1 -1
- package/dist/client/assets/chunk-HAGFOTED-miSk6HXc.js +62 -0
- package/dist/client/assets/chunk-HNE4Q36P-BTbX-t8_.js +1 -0
- package/dist/client/assets/{chunk-I5DQTOEV-B98XA8VK.js → chunk-I5DQTOEV-qgbr-MbI.js} +1 -1
- package/dist/client/assets/{chunk-ICYGCRZG-odvlDZyA.js → chunk-ICYGCRZG-Dv6Hl9ds.js} +1 -1
- package/dist/client/assets/{chunk-IH6LHLGP-BNevEHZK.js → chunk-IH6LHLGP-DCTJcBuf.js} +1 -1
- package/dist/client/assets/{chunk-IMKFNOWR-CBqxfpcP.js → chunk-IMKFNOWR-DN2Mwt1n.js} +1 -1
- package/dist/client/assets/{chunk-KI3K4JFJ-D5XCPRZv.js → chunk-KI3K4JFJ-Hb_e7W2X.js} +1 -1
- package/dist/client/assets/{chunk-IH6LHLGP-CvXe34hB.js → chunk-KPI5JJXK-BoDlpdVM.js} +1 -1
- package/dist/client/assets/{chunk-L3NEJ4N5-BflzkdTI.js → chunk-L3NEJ4N5-M6XySblQ.js} +1 -1
- package/dist/client/assets/{chunk-LNGE3PJU-5nWSl6jJ.js → chunk-LNGE3PJU-CxdyKuxt.js} +4 -4
- package/dist/client/assets/{chunk-LNGE3PJU-5-SxdO55.js → chunk-LNGE3PJU-DRjopGY8.js} +4 -4
- package/dist/client/assets/chunk-NGNAAXSQ-Bw6tHVuc.js +136 -0
- package/dist/client/assets/chunk-NQOKRVIF-B_sOt25u.js +213 -0
- package/dist/client/assets/chunk-NZIJZ2A6-CmC5bqJr.js +42 -0
- package/dist/client/assets/{chunk-UY3FDG6J-DqSM_0FB.js → chunk-OD3NTWWA-D7wmrqo1.js} +1 -1
- package/dist/client/assets/{chunk-OSK3NFVY-DqeKV_pg.js → chunk-OSK3NFVY-DJyrXrea.js} +1 -1
- package/dist/client/assets/chunk-OUJLGHUK-DIWqBvm0.js +2 -0
- package/dist/client/assets/chunk-OYAV6JZA-kXOh375k.js +1 -0
- package/dist/client/assets/{chunk-P2QGCYS3-BA--DhpW.js → chunk-P2QGCYS3-DejntbnV.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-V_NEc45n.js → chunk-POPQ4Y6H-D3VayDzJ.js} +1 -1
- package/dist/client/assets/{chunk-PWAF6VOD-D_kLse-N.js → chunk-PWAF6VOD-CmxcnYFJ.js} +1 -1
- package/dist/client/assets/{chunk-3Z5EZCMW-Yx4Q5AcN.js → chunk-QNH66VMT-De2vWRUE.js} +1 -1
- package/dist/client/assets/{chunk-SHT3W25Y-YM3S-A_M.js → chunk-SHT3W25Y-SAi_Zk5G.js} +1 -1
- package/dist/client/assets/{chunk-SRAX5OIU-KFQikY-4.js → chunk-SRAX5OIU-wzfotNc-.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-DdNhDOmW.js → chunk-SVP7TREG-BtK2J628.js} +1 -1
- package/dist/client/assets/{chunk-TICWLB2K-BGGgCr4x.js → chunk-TICWLB2K-wmAorf_a.js} +1 -1
- package/dist/client/assets/{chunk-TLUHSLCS-DCZhIDYA.js → chunk-TLUHSLCS-DA3Sq1kc.js} +1 -1
- package/dist/client/assets/{chunk-6EIED4P4-DBVWq7Tz.js → chunk-TPMEZKFX-CarinQak.js} +1 -1
- package/dist/client/assets/{chunk-7PRAP22T-9uTvtc_-.js → chunk-UHW7PFBP-ClLfHtva.js} +1 -1
- package/dist/client/assets/{chunk-UY3FDG6J-QT-rkt0y.js → chunk-UY3FDG6J-BT57Gakr.js} +1 -1
- package/dist/client/assets/{chunk-6TQVIW2G-DgBX-Pv0.js → chunk-VPELOWWC-Dk0xIrB-.js} +1 -1
- package/dist/client/assets/{chunk-WEXAMYUT-DDlVNp8J.js → chunk-VQ5W62QI-CxUPWJRX.js} +1 -1
- package/dist/client/assets/{chunk-I5DQTOEV-aBZooNp1.js → chunk-VTWWFHGB-BZsdnDPL.js} +1 -1
- package/dist/client/assets/{chunk-KI3K4JFJ-FTtDwx3-.js → chunk-VZTHESGH-D6CHzqGr.js} +1 -1
- package/dist/client/assets/chunk-WQQL4CDK-BiuwKtd-.js +10 -0
- package/dist/client/assets/{chunk-X3CZISLH-DwWpRaN8.js → chunk-X3CZISLH-Bwnh_YJ7.js} +1 -1
- package/dist/client/assets/{chunk-X3CZISLH-BixgQztF.js → chunk-X3CZISLH-DayjKu55.js} +1 -1
- package/dist/client/assets/{chunk-XHIXRSVI-BSN7JlfK.js → chunk-XHIXRSVI-C0fC7dJN.js} +1 -1
- package/dist/client/assets/{chunk-XXDRQBXY-C7hQHDmQ.js → chunk-XXDRQBXY-BxVnmMBx.js} +1 -1
- package/dist/client/assets/{chunk-XXDRQBXY-CdRN9Akd.js → chunk-XXDRQBXY-DBb3y0NH.js} +1 -1
- package/dist/client/assets/{chunk-XHIXRSVI-DN_fEwws.js → chunk-YK26KJH5-ywVSJDLS.js} +1 -1
- package/dist/client/assets/{chunk-742MDFTN-D1nh6vNv.js → chunk-YZO67HFG-Bg5cZX5R.js} +1 -1
- package/dist/client/assets/{chunk-Z5NKEFVG-q6fHH75m.js → chunk-Z5NKEFVG-BPqw37Lj.js} +3 -3
- package/dist/client/assets/{chunk-5DYCD2WN-BKWCKnK-.js → chunk-ZAUX2LTX-Yte1ozQc.js} +1 -1
- package/dist/client/assets/chunk-ZCHMQSOR-B3FSat8d.js +1 -0
- package/dist/client/assets/chunk-ZO67DCNQ-DnpDWW4I.js +2 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-CLl-Ahxw.js +1 -0
- package/dist/client/assets/{classDiagram-v2-NBCMYWYE-3TQORq33.js → classDiagram-v2-4MYWR3UA-rPd2Vhml.js} +3 -3
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-CLl-Ahxw.js +1 -0
- package/dist/client/assets/{clike-D_6L3tnO.js → clike-xvONpD0Z.js} +1 -1
- package/dist/client/assets/{clone-C1hp9FUh.js → clone-BoYpPplK.js} +1 -1
- package/dist/client/assets/{comment-markdown-renderer-Bxi_JRSR.js → comment-markdown-renderer-a1B3HT_T.js} +1 -1
- package/dist/client/assets/comment-thread-store-da3_1rfw.js +1 -0
- package/dist/client/assets/comment-threads-mG1CkBKO.js +4 -0
- package/dist/client/assets/comment-ui-shared-4bhpJQpv.js +7 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-Czr0rwGr.js → cose-bilkent-JH36ORCC-BMHIGaXC.js} +1 -1
- package/dist/client/assets/{cose-bilkent-JH36ORCC-DLmEf9HS.js → cose-bilkent-JH36ORCC-Chlyw-Nt.js} +1 -1
- package/dist/client/assets/crystal-Bl6YKCG_.js +1 -0
- package/dist/client/assets/{cs-CZ-VUCGPRML-BfCoYAgj.js → cs-CZ-VUCGPRML-KFMLw537.js} +1 -1
- package/dist/client/assets/cynefin-EF2NZ3EQ-CwzF3ccb.js +1 -0
- package/dist/client/assets/cynefin-OW5HDTMX-CeLVR4kL.js +1 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-DTnLZaO7.js → cynefinDiagram-5FMLGOSQ-No5A0--Q.js} +1 -1
- package/dist/client/assets/{cynefinDiagram-VND7K2PF-DwfMZ3vk.js → cynefinDiagram-WF24UDRP-BvwG2vI4.js} +1 -1
- package/dist/client/assets/cytoscape-cose-bilkent-iiiP-uiT.js +1 -0
- package/dist/client/assets/cytoscape-fcose-CiCTciSr.js +1 -0
- package/dist/client/assets/cytoscape.esm-CCmQRb78.js +321 -0
- package/dist/client/assets/{da-DK-NNDP2IVP-DBw9ZNTR.js → da-DK-NNDP2IVP-BpM-jMGR.js} +1 -1
- package/dist/client/assets/dagre-D7JM2Yhv.js +1 -0
- package/dist/client/assets/dagre-GXQ25YYZ-B0VZWLr5.js +4 -0
- package/dist/client/assets/dagre-NK4GIZVX-DoXdmyVb.js +4 -0
- package/dist/client/assets/{de-CH-I7RAVIZN-DYW18Vsr.js → de-CH-I7RAVIZN-BNkaUG5V.js} +1 -1
- package/dist/client/assets/{de-DE-WBQ3DQLR-DYW18Vsr.js → de-DE-WBQ3DQLR-BNkaUG5V.js} +1 -1
- 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-3UASUU5V-DmhdYv6_.js → diagram-CBK3MWTC-hfExzGJR.js} +2 -2
- package/dist/client/assets/{diagram-MLGK6HIB-DIBG6Ivu.js → diagram-I5XIIV2D-Diz84D6I.js} +1 -1
- package/dist/client/assets/{diagram-CDSNMT55-D_qyS11R.js → diagram-ODIL2UCW-lVgTk1r8.js} +4 -4
- package/dist/client/assets/diagram-PFBEJUXE-Dm-wXUUU.js +3 -0
- package/dist/client/assets/{diagram-MPIPVDR6-D9XsALDV.js → diagram-RJA3I4VV-Bv4ZAy4v.js} +2 -2
- package/dist/client/assets/{diagram-S7CK7UJ4-CGTzfo2f.js → diagram-S7CK7UJ4-ClAT_J6s.js} +2 -2
- package/dist/client/assets/diagram-TYUNFSNR-CN-Xc6z9.js +200 -0
- package/dist/client/assets/{diagram-UQ7AKVKN-CWZS8QtB.js → diagram-UQ7AKVKN-DJ6uTWCE.js} +1 -1
- package/dist/client/assets/{diagram-VSXAHHWV-DaO1nOZF.js → diagram-VSXAHHWV-C2k4OYGw.js} +1 -1
- package/dist/client/assets/{diagram-VX7I27RA-B54P6Cyf.js → diagram-VX7I27RA-CLX2KoMs.js} +1 -1
- package/dist/client/assets/{diagram-Z3DM3KII-Cl2EXiXp.js → diagram-Z3DM3KII-BZcZUF57.js} +1 -1
- package/dist/client/assets/{direct-engine-DVLMOJWp-C-YL5NFb.js → direct-engine-DVLMOJWp-C_tInsJx.js} +1 -1
- package/dist/client/assets/dist-7kwQLW_E.js +1 -0
- package/dist/client/assets/dist-B-G-pifG.js +11 -0
- package/dist/client/assets/dist-B0vhBQTT.js +13 -0
- package/dist/client/assets/dist-BBVAlyPS.js +1 -0
- package/dist/client/assets/dist-BGDa8poZ.js +1 -0
- package/dist/client/assets/{dist-uk11ih8u.js → dist-BJ93nZVx.js} +2 -2
- package/dist/client/assets/dist-BS271jN_.js +1 -0
- package/dist/client/assets/dist-BUgvZKJ6.js +39 -0
- package/dist/client/assets/dist-BXomWIuA.js +2 -0
- package/dist/client/assets/dist-BbrmdpPb.js +1 -0
- package/dist/client/assets/dist-BfvzS-2t.js +1 -0
- package/dist/client/assets/dist-Bt7Xaqyp.js +1 -0
- package/dist/client/assets/dist-BtOSkvqt.js +1 -0
- package/dist/client/assets/{dist-Ch6Sr9KF.js → dist-C150LLfi.js} +6 -6
- package/dist/client/assets/dist-C6YYSeP1.js +9 -0
- package/dist/client/assets/dist-CFzMlwAz.js +1 -0
- package/dist/client/assets/dist-CH86sVcz.js +1 -0
- package/dist/client/assets/dist-CP97HJ4M.js +1 -0
- package/dist/client/assets/dist-CVDt4G0T.js +1 -0
- package/dist/client/assets/dist-CbwTIhZ4.js +1 -0
- package/dist/client/assets/dist-CfwwN8_Y.js +1 -0
- package/dist/client/assets/{dist-B_J_HbC0.js → dist-CumnGVmJ.js} +1 -1
- package/dist/client/assets/dist-CvwwJhwr.js +1 -0
- package/dist/client/assets/dist-D-detfUV.js +1 -0
- package/dist/client/assets/dist-DCaysCNp.js +1 -0
- package/dist/client/assets/dist-DCgncsfc.js +6 -0
- package/dist/client/assets/dist-DFWn8cbH.js +1 -0
- package/dist/client/assets/dist-DKBDZ7Fw.js +1 -0
- package/dist/client/assets/dist-DUrzEppq.js +1 -0
- package/dist/client/assets/dist-Db2OLA3a.js +1 -0
- package/dist/client/assets/dist-Dd0BffVR.js +1 -0
- package/dist/client/assets/dist-X-11q-Vc.js +1 -0
- package/dist/client/assets/dist-aNZ025fx.js +23 -0
- package/dist/client/assets/dist-ftwTHAfS.js +1 -0
- package/dist/client/assets/dist-hiG7zUCa.js +1 -0
- package/dist/client/assets/document-formatter-B_jrdFGJ.js +1 -0
- package/dist/client/assets/drawioEditor-DhRXvyRT.js +9 -0
- package/dist/client/assets/{duration-BiuFXtXd.js → duration-DPNtiFfE.js} +1 -1
- package/dist/client/assets/{dylan-BCDoL_-p.js → dylan-S7ucR4pR.js} +1 -1
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-PfC84FyI.js → ebnfDiagram-PWID7BFC-B8zzvt1e.js} +1 -1
- package/dist/client/assets/{ebnfDiagram-ZINNZB2B-DYvm_QtE.js → ebnfDiagram-V4P3TTPT-PjRB23H_.js} +1 -1
- package/dist/client/assets/editor-session-BnTvcvzz.js +13 -0
- package/dist/client/assets/{el-GR-TYQHVGXW-Dx82YYAS.js → el-GR-TYQHVGXW-BHUJHVd3.js} +1 -1
- package/dist/client/assets/elk-QONTBCTQ-DknSb2FG.js +27 -0
- package/dist/client/assets/embedded-editor-base-C44ZcCZv.css +1 -0
- package/dist/client/assets/embedpdf-VVX-wFIh.js +1 -0
- package/dist/client/assets/{embedpdf-cl9qiF45-itpgqvGY.js → embedpdf-cl9qiF45-Cv92w6Wn.js} +6 -6
- package/dist/client/assets/en-AUO4QW63-CgjNrgHv.js +1 -0
- package/dist/client/assets/{erDiagram-OPXOYQCR-o8GRv8A_.js → erDiagram-KYQIGQAA-BHguakEd.js} +2 -2
- package/dist/client/assets/{erDiagram-RLTQ6QDP-C9cJl5NB.js → erDiagram-RLTQ6QDP-YPD0-iRc.js} +1 -1
- package/dist/client/assets/{es-ES-JEUOREKJ-Rx0NUQDl.js → es-ES-JEUOREKJ-CeuoqqTN.js} +1 -1
- package/dist/client/assets/{esm-BzZ1JFVo.js → esm-nC3n5xMZ.js} +5 -5
- package/dist/client/assets/{estree-DGmLqopC.js → estree-Cw-tQG5d.js} +4 -4
- package/dist/client/assets/{eu-ES-SO5DEEAN-CDYm-BcK.js → eu-ES-SO5DEEAN-D_7bAcKh.js} +1 -1
- package/dist/client/assets/eventmodeling-K75KTNOO-BsPoof5R.js +1 -0
- package/dist/client/assets/eventmodeling-NTZA5JFV-Bwo1LIKP.js +1 -0
- package/dist/client/assets/excalidraw-element-link-BduFAMXS.js +1 -0
- package/dist/client/assets/excalidraw-scene-DzfbvjqT.js +1 -0
- package/dist/client/assets/excalidrawEditor-3jfVRVmE.js +9 -0
- package/dist/client/assets/excalidrawEditor-DiKOIudt.css +1 -0
- package/dist/client/assets/export-page-BiB1AeMg.js +46 -0
- package/dist/client/assets/exportDocument-BwukVyB9.js +2 -0
- package/dist/client/assets/exportDocument-D0mONgQ4.css +1 -0
- package/dist/client/assets/{fa-IR-I4JNTJHK-CFtHZqoT.js → fa-IR-I4JNTJHK-BeoSOVqB.js} +1 -1
- package/dist/client/assets/{fi-FI-REAEF6HQ-BIpjJqIb.js → fi-FI-REAEF6HQ-BqIp6GiK.js} +1 -1
- package/dist/client/assets/file-kind-BGxTVHan.js +1 -0
- package/dist/client/assets/file-search-D2UfqaRv.js +1 -0
- package/dist/client/assets/flowDiagram-HODETNUW-CVKOAnD7.js +1 -0
- package/dist/client/assets/flowDiagram-IUGLLWBU-BjEyR0dW.js +1 -0
- package/dist/client/assets/{fr-FR-SUCL7J6B-DGAKE8jH.js → fr-FR-SUCL7J6B-Dl3EFjA3.js} +1 -1
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-x40PW0Ah.js → ganttDiagram-EL5Y4UJY-CCUwTKb4.js} +1 -1
- package/dist/client/assets/ganttDiagram-R7GPNTJY-CXLqT-aU.js +292 -0
- package/dist/client/assets/gitGraph-4MIJSDKK-CWZptYrG.js +1 -0
- package/dist/client/assets/gitGraph-VSP46ZUC-x2Q42NFN.js +1 -0
- package/dist/client/assets/gitGraphDiagram-PDYL7XHY-BJ9CsrRo.js +106 -0
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-ahsNaZsp.js → gitGraphDiagram-WWUBYQGX-OqdVjcEn.js} +1 -1
- package/dist/client/assets/{gl-ES-KHCSOGVH-DWKh0CMu.js → gl-ES-KHCSOGVH-DGHdzXnJ.js} +1 -1
- package/dist/client/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/client/assets/groovy-CUrWKPia.js +1 -0
- package/dist/client/assets/{he-IL-JYXVXV2Q-zqbcM-4g.js → he-IL-JYXVXV2Q-DP8F40TD.js} +1 -1
- package/dist/client/assets/{hi-IN-BU52H3BO-CY8v6eG9.js → hi-IN-BU52H3BO-B1huAT2Y.js} +1 -1
- package/dist/client/assets/{html-BryNQ_yx.js → html-Drt7kOJE.js} +2 -2
- package/dist/client/assets/{hu-HU-OWADXDQ3-CEl6Udfh.js → hu-HU-OWADXDQ3-87zhVnWy.js} +1 -1
- package/dist/client/assets/{id-ID-2WY7E4VX-CCAeQpPr.js → id-ID-2WY7E4VX-BdFs5w71.js} +1 -1
- package/dist/client/assets/image-V6E7PHAZ-DSZxKLH0.js +1 -0
- package/dist/client/assets/image-blob-reduce.esm-ZiL83eII.js +2 -0
- package/dist/client/assets/image-lightbox-controller-DH39QMBp.js +184 -0
- package/dist/client/assets/index-BebSD0ym.js +960 -0
- package/dist/client/assets/index-CglpXOg7.css +1 -0
- package/dist/client/assets/info-A6RAGUB7-D_xaPiSc.js +1 -0
- package/dist/client/assets/info-OHQRW6UA-CBi78irM.js +1 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-MrZyptIy.js → infoDiagram-27XIBGKW-Ck9hyDJb.js} +1 -1
- package/dist/client/assets/{infoDiagram-VRGFBTTK-KkUjDRAQ.js → infoDiagram-MVDRKAX5-DcpftzUS.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-Bnt9yM0O.js → ishikawaDiagram-5VMMS53U-CazBMMkQ.js} +2 -2
- package/dist/client/assets/{ishikawaDiagram-OU5B5YK6-Di9BcpOY.js → ishikawaDiagram-HPEHV2GE-BG5PpI0A.js} +3 -3
- package/dist/client/assets/{it-IT-INVHSAJF-DytAgndh.js → it-IT-INVHSAJF-DnUnri32.js} +1 -1
- package/dist/client/assets/{ja-JP-JBNTKYP4-BflWlGhw.js → ja-JP-JBNTKYP4-DIs2dSob.js} +1 -1
- package/dist/client/assets/javascript-DZ4Qsoqy.js +1 -0
- package/dist/client/assets/javascript-lj9EKOz0.js +1 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-Bl0abK1r.js → journeyDiagram-3NMN7TZE-DJFGpA3F.js} +1 -1
- package/dist/client/assets/{journeyDiagram-ZHPQQLJL-J-sGrs9e.js → journeyDiagram-BOSHW7O7-CAdC3Sr9.js} +3 -3
- package/dist/client/assets/{jsx-runtime-DKj5X9O4.js → jsx-runtime-CldxteV5.js} +1 -1
- package/dist/client/assets/{kaa-TC3VIB7V-B-xtZfy0.js → kaa-TC3VIB7V-wP2hxPDI.js} +1 -1
- package/dist/client/assets/{kab-KAB-UOUDSQKM-BmO0O4Y4.js → kab-KAB-UOUDSQKM-CwUZUlMm.js} +1 -1
- package/dist/client/assets/{kanban-definition-PNTS6WVX-5ZDV_yIa.js → kanban-definition-FNSA4HC5-DLzqpQsC.js} +4 -4
- package/dist/client/assets/{kanban-definition-UXKFOSKX-DMgUfNt0.js → kanban-definition-UXKFOSKX-R91H_Ua5.js} +1 -1
- package/dist/client/assets/katex-B_JcIwqj.js +257 -0
- package/dist/client/assets/{katex-9NBMfU68.js → katex-DJhrJSbw.js} +1 -1
- package/dist/client/assets/keyboard-shortcuts-BWNCBJqw.js +1 -0
- package/dist/client/assets/{kk-KZ-P5H2X7YS-CSQFB8IN.js → kk-KZ-P5H2X7YS-Q3XzFKqf.js} +1 -1
- package/dist/client/assets/{km-KH-IHMV2US7-BxrjuEzr.js → km-KH-IHMV2US7-CxtoNVOY.js} +1 -1
- package/dist/client/assets/{ko-KR-ZTMANIDF-BnNRXd5J.js → ko-KR-ZTMANIDF-CJeG69_5.js} +1 -1
- package/dist/client/assets/{ku-TR-GPJTRB5G-BZM7f2aT.js → ku-TR-GPJTRB5G-D4gY4ec8.js} +1 -1
- package/dist/client/assets/{line-DEbP8Ok6.js → line-CttJWsP1.js} +1 -1
- package/dist/client/assets/linear-DGppY5mt.js +1 -0
- package/dist/client/assets/lobby-presence-DWGiwZgG.js +1 -0
- package/dist/client/assets/{lt-LT-V3XDOK3P-MVQBOHmF.js → lt-LT-V3XDOK3P-DTiFqRKt.js} +1 -1
- package/dist/client/assets/{lv-LV-DVQ3FADO-CrenwAhS.js → lv-LV-DVQ3FADO-BDx0eM98.js} +1 -1
- package/dist/client/assets/{markdown-CZ1tYEW8.js → markdown-C7cnJl_Q.js} +12 -12
- package/dist/client/assets/markdown-headings-CHNl_tgP.js +41 -0
- package/dist/client/assets/markdown-it-DWMS_G3H.js +13 -0
- package/dist/client/assets/{markdown-math-CyyBVuDO.js → markdown-math-CBhbNj1w.js} +13 -13
- package/dist/client/assets/{merge-CALoRt3l.js → merge-5Ig019a6.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-DBy--Jc0.js → mermaid-parser.core-B89UfKha.js} +3 -3
- package/dist/client/assets/{mermaid-parser.core-Bpogunsh.js → mermaid-parser.core-Dns-W-xX.js} +1 -1
- package/dist/client/assets/mermaid.core-8OvaaBlM.js +10 -0
- package/dist/client/assets/{mindmap-definition-NLK3R4M7-ByVb-0vj.js → mindmap-definition-6OY57UG3-0aQEcLTH.js} +11 -9
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-DBZN5_GH.js → mindmap-definition-YA3MSWOX-CCSfi8SE.js} +1 -1
- package/dist/client/assets/{mr-IN-VZ6HH5FE-B-PHPglH.js → mr-IN-VZ6HH5FE-Cofn25fc.js} +1 -1
- package/dist/client/assets/{my-MM-XYKWHRK6-Be5sYp5q.js → my-MM-XYKWHRK6-lMTCoeax.js} +1 -1
- package/dist/client/assets/{nb-NO-UNO2GGZJ-BvSKGdja.js → nb-NO-UNO2GGZJ-CEFDplVi.js} +1 -1
- package/dist/client/assets/{nginx-8H7HVH4w.js → nginx-C-ORUuei.js} +1 -1
- package/dist/client/assets/{nl-NL-76EFHT4P-C2yNx1Cj.js → nl-NL-76EFHT4P-2WbCYdRT.js} +1 -1
- package/dist/client/assets/{nn-NO-CFKD7ABE-4NsqlDRP.js → nn-NO-CFKD7ABE-DfK-9yuu.js} +1 -1
- package/dist/client/assets/{ntriples-B9h1VB_g.js → ntriples-CzMBulkp.js} +1 -1
- package/dist/client/assets/{oc-FR-YBJTCJ3J-B4OTQsWW.js → oc-FR-YBJTCJ3J-BSWusGxV.js} +1 -1
- package/dist/client/assets/{pa-IN-SNOXSMRV-CKj_sOG7.js → pa-IN-SNOXSMRV-BYkNTWiO.js} +1 -1
- package/dist/client/assets/packet-AYTQ26CC-D6Y_lKZt.js +1 -0
- package/dist/client/assets/packet-JDAUHWVQ-DAR0r-Im.js +1 -0
- package/dist/client/assets/{pegDiagram-GJSIUBJH-aost1sSO.js → pegDiagram-ECIUJNBX-VujrKWCK.js} +1 -1
- package/dist/client/assets/{pegDiagram-XKGWAZYB-DRo8CZu3.js → pegDiagram-XKGWAZYB-DTA3EjtF.js} +1 -1
- package/dist/client/assets/percentages-LWOC67ZH-BO-ZFv57.js +1 -0
- package/dist/client/assets/pica-CXv_OHDX.js +2 -0
- package/dist/client/assets/{pie-DzWLGKAD.js → pie-Ba_4rf3r.js} +1 -1
- package/dist/client/assets/pie-WAS4IAKB-DLhltotv.js +1 -0
- package/dist/client/assets/pie-XZMESJXO-5MOdYfI0.js +1 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-CZThaHsc.js → pieDiagram-E7YTZNPT-DBz-eVG3.js} +1 -1
- package/dist/client/assets/{pieDiagram-5QR66LMP-BICdpEuz.js → pieDiagram-GNMPY74T-CjRzeDCN.js} +2 -2
- package/dist/client/assets/{pl-PL-BSY6YFZ3-CFuzA6L0.js → pl-PL-BSY6YFZ3-DQTYFenp.js} +1 -1
- package/dist/client/assets/{powershell-BcIto6Sf.js → powershell-D8WpQPaX.js} +1 -1
- package/dist/client/assets/preload-helper-khBccGFq.js +1 -0
- package/dist/client/assets/preview-diagram-utils-ByzpiwPu.js +3 -0
- package/dist/client/assets/preview-render-compiler-B_gyVIfk.js +3 -0
- package/dist/client/assets/preview-render-worker-DYGDgbKA.js +579 -0
- package/dist/client/assets/prod-BTPZlnru.js +1 -0
- package/dist/client/assets/prod-CUXkwl3E.js +144 -0
- package/dist/client/assets/{pt-BR-CZDV62R3-CkPMtyNx.js → pt-BR-CZDV62R3-qKOF4THL.js} +1 -1
- package/dist/client/assets/{pt-PT-JO57XJJW-CBSnfGtF.js → pt-PT-JO57XJJW-CVFFmqez.js} +1 -1
- package/dist/client/assets/pug-CGoiHVBP.js +1 -0
- package/dist/client/assets/purify.es-BP9p1Dbb.js +3 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-C5iowkl_.js → quadrantDiagram-AXDQQJYC-DaTj4J-B.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-O4NWA36T-Bgx5bF97.js → quadrantDiagram-D57K4MC3-Bvy8uMKb.js} +3 -3
- package/dist/client/assets/quick-switcher-controller-m2gikuD-.js +1 -0
- package/dist/client/assets/radar-ABXABTNO-hhs6i-b1.js +1 -0
- package/dist/client/assets/radar-RG4KPBEZ-B-2eETsZ.js +1 -0
- package/dist/client/assets/railroad-74A4TZTK-B18ef5-Z.js +1 -0
- package/dist/client/assets/railroad-I3PHUGI6-v8Mk380c.js +1 -0
- package/dist/client/assets/railroad-abnf-HS5TGJTU-CTQaqjqj.js +1 -0
- package/dist/client/assets/railroad-abnf-LNEFI6M7-C3t6jbSY.js +1 -0
- package/dist/client/assets/railroad-ebnf-DWYD2UWJ-BvF5fO2B.js +1 -0
- package/dist/client/assets/railroad-ebnf-LZEXJU2U-BU_P5mpS.js +1 -0
- package/dist/client/assets/railroad-peg-JR7BVNR7-B90veE1n.js +1 -0
- package/dist/client/assets/railroad-peg-WCYAUIDC-CQCPL33M.js +1 -0
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-BTt_rKjT.js → railroadDiagram-O6MQD6OU-DJRswcTS.js} +1 -1
- package/dist/client/assets/{railroadDiagram-XR7U4H2S-DbVoNgSz.js → railroadDiagram-Y72NRBL7-BNjzJfAu.js} +1 -1
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-BkvazG7r.js → requirementDiagram-BXWQKSXE-DsljP03a.js} +1 -1
- package/dist/client/assets/{requirementDiagram-PLB6GJNP-BT0j9C40.js → requirementDiagram-EQYSW5RA-BKm3hJ3g.js} +4 -4
- package/dist/client/assets/{ro-RO-UZ5ICYYN-BOuntc_r.js → ro-RO-UZ5ICYYN-BgFoGyRb.js} +1 -1
- package/dist/client/assets/rolldown-runtime-COiEfhsA.js +1 -0
- package/dist/client/assets/{ru-RU-AN7JPREC-D-ow3SNR.js → ru-RU-AN7JPREC-C1Q9hhMw.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-C_IemB9h.js → sankeyDiagram-P5KCCOFB-7e3snR42.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-IPEJSGJF-X1BCUIrf.js → sankeyDiagram-SY24JHO5-X6282wPp.js} +3 -3
- package/dist/client/assets/sequenceDiagram-BLEHNHQU-BytEbBel.js +169 -0
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-CxFBgLGd.js → sequenceDiagram-WJ2MYXX4-Fy1RHQht.js} +2 -2
- package/dist/client/assets/{si-LK-7CBLD6QQ-c91EepX0.js → si-LK-7CBLD6QQ-B0AJbYON.js} +1 -1
- package/dist/client/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
- package/dist/client/assets/sizeCapture-INFHLROL-BMR1ovSU.js +1 -0
- package/dist/client/assets/{sk-SK-SWR6DKBI-D5vFMIL6.js → sk-SK-SWR6DKBI-BSd-r0Zi.js} +1 -1
- package/dist/client/assets/{sl-SI-QY5KCFGA-RZhwMpQL.js → sl-SI-QY5KCFGA-Dzrhm7-L.js} +1 -1
- package/dist/client/assets/src-C2pSFGeK.js +1 -0
- package/dist/client/assets/src-GGgGZJfE.js +2 -0
- package/dist/client/assets/{standalone-DbyFjvTU.js → standalone-YobQElH8.js} +3 -3
- package/dist/client/assets/{stateDiagram-D77RDMKH-BaSQ6Owj.js → stateDiagram-D77RDMKH-CW2cSnDj.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-GCMORJYK-CsVcfwVp.js → stateDiagram-v2-A6IESKWZ-DZU6pVog.js} +2 -2
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-iqEUZMAD.js +1 -0
- package/dist/client/assets/subset-shared.chunk-CL3Oizwd.js +1 -0
- package/dist/client/assets/{subset-worker.chunk-CoaGye2U.js → subset-worker.chunk-BdPjfgp2.js} +1 -1
- package/dist/client/assets/{sv-SE-O3OFCY3J-DnS86_7q.js → sv-SE-O3OFCY3J-6NoVnLTE.js} +1 -1
- package/dist/client/assets/swimlanes-42K2YHIH-8FngRMNT.js +1 -0
- package/dist/client/assets/swimlanes-B3ENRKFQ-D6BYdY9J.js +1 -0
- package/dist/client/assets/swimlanesDiagram-AYQRV4AK-hRw-7uL-.js +8 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DvDPHOsc.js +8 -0
- package/dist/client/assets/{ta-IN-V6NHHU6Z-D5jy7_AE.js → ta-IN-V6NHHU6Z-MAwuBBtS.js} +1 -1
- package/dist/client/assets/{th-TH-WLSZUSBX-DHehoYR2.js → th-TH-WLSZUSBX-D--o8vzw.js} +1 -1
- package/dist/client/assets/{tiki-AK6FwT8q.js → tiki-CvUEFusT.js} +1 -1
- package/dist/client/assets/{timeline-definition-24CTP7MA-zse-5Dbm.js → timeline-definition-24CTP7MA-C_Q-Br6X.js} +1 -1
- package/dist/client/assets/{timeline-definition-EJHVYXUP-BhqPlKkN.js → timeline-definition-JXYKGLGB-7HLQ94MK.js} +3 -3
- package/dist/client/assets/{tr-TR-GUFYG22B-ClVaf8h1.js → tr-TR-GUFYG22B-Bd-NNmz1.js} +1 -1
- package/dist/client/assets/treeView-D4JQ5SDB-BR1FV1TU.js +1 -0
- package/dist/client/assets/treeView-Q6P3EWNA-3N1U2hq1.js +1 -0
- package/dist/client/assets/treemap-SAJKECNS-yO7fe4dH.js +1 -0
- package/dist/client/assets/treemap-WGGIJYW6-BFO1obBW.js +1 -0
- package/dist/client/assets/{uk-UA-K6SV5NFQ-BLTTtyNB.js → uk-UA-K6SV5NFQ-_OJVmMT9.js} +1 -1
- package/dist/client/assets/usecaseDiagram-WPOLBNNX-uIlXI205.js +328 -0
- package/dist/client/assets/{uz-UZ-TVKTZO2G-Bm02Eg3D.js → uz-UZ-TVKTZO2G-BPXzC1bJ.js} +1 -1
- package/dist/client/assets/vault-api-client-DORNT49K.js +25 -0
- package/dist/client/assets/{vault-paths-BT-6nztu.js → vault-paths-R2qcfmE0.js} +1 -1
- package/dist/client/assets/{venn.esm-C5rDfA9t.js → venn.esm-BxwF8YNp.js} +1 -1
- package/dist/client/assets/{vennDiagram-4TSXK5OY-DgHr6cJD.js → vennDiagram-4TSXK5OY-Cl6f16-U.js} +1 -1
- package/dist/client/assets/{vennDiagram-UO4OBE2U-BRwLn2Q1.js → vennDiagram-Q3Y3IDCW-DZFF_ntk.js} +3 -3
- package/dist/client/assets/{vi-VN-7FKFXJNO-CL3WPhmG.js → vi-VN-7FKFXJNO-CjP0avHF.js} +1 -1
- package/dist/client/assets/wardley-7MLQ67FV-CCVlnR9Q.js +1 -0
- package/dist/client/assets/wardley-WFR3VGLG-BuSMKsul.js +1 -0
- package/dist/client/assets/{wardleyDiagram-VNRHLVJA-B_tMcVFG.js → wardleyDiagram-IVAIDKWA-bwMSFCgK.js} +4 -4
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-9A60XZis.js → wardleyDiagram-VM6X3IG4-BbU7rAxb.js} +1 -1
- package/dist/client/assets/{wiki-link-resolver-Dch88erO.js → wiki-link-resolver-BCdGUpdu.js} +1 -1
- package/dist/client/assets/{worker-engine-BCCrxWYm-CX0qJ_cG.js → worker-engine-BCCrxWYm-BU5lrbSm.js} +1 -1
- package/dist/client/assets/workspace-sync-client-B7dmdJGR.js +1 -0
- package/dist/client/assets/xychartDiagram-4URNHDU4-AjWzA402.js +7 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-D00iy-wB.js → xychartDiagram-S5SC5T6Z-C5L6jReS.js} +1 -1
- package/dist/client/assets/{yaml-BcZaqAz8.js → yaml-Breo7DWT.js} +4 -4
- package/dist/client/assets/yjs-ZDLwhBUu.js +4 -0
- package/dist/client/assets/yjs-provider-reset-guard-D5pm5yx8.js +1 -0
- package/dist/client/assets/{zh-CN-AOKVLNNK-DGidDH2b.js → zh-CN-AOKVLNNK-CU0vKHKs.js} +1 -1
- package/dist/client/assets/{zh-HK-CDKPF5DC-CRcNR3rk.js → zh-HK-CDKPF5DC-BBhn88ei.js} +1 -1
- package/dist/client/assets/{zh-TW-ZVGYESGW-C7Qji1y6.js → zh-TW-ZVGYESGW-od6h3pTc.js} +1 -1
- package/dist/client/canvas-editor.html +16 -0
- package/dist/client/drawio-editor.html +7 -6
- package/dist/client/excalidraw-editor.html +43 -42
- package/dist/client/export-document.html +4 -3
- package/dist/client/index.html +2 -2
- package/package.json +37 -39
- package/scripts/local-compose.mjs +101 -0
- package/src/client/app/canvas-editor.html +13 -0
- 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-export.js +2 -1
- package/src/client/application/diagram-preview-hydrator.js +5 -5
- package/src/client/application/mermaid-preview-hydrator.js +5 -3
- 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 +28 -13
- package/src/client/canvas-editor.js +143 -0
- package/src/client/domain/canvas-view.js +50 -0
- package/src/client/domain/excalidraw-scene.js +17 -60
- 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/mermaid-source.js +44 -0
- package/src/client/domain/wiki-link-completions.js +42 -10
- package/src/client/export/export-pipeline.js +7 -6
- 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/vault-api-client.js +4 -4
- package/src/client/infrastructure/webmcp-tool-registry.js +5 -8
- 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 +1 -3
- package/src/client/presentation/excalidraw-embed-controller.js +10 -3
- package/src/client/presentation/file-action-controller.js +37 -0
- package/src/client/presentation/file-explorer-controller.js +1 -2
- package/src/client/presentation/file-explorer-view.js +7 -1
- package/src/client/presentation/file-icon-svg.js +1 -1
- package/src/client/presentation/file-tree-state.js +4 -1
- package/src/client/presentation/git-diff-view-controller.js +3 -3
- package/src/client/presentation/image-lightbox-controller.js +1 -5
- package/src/client/presentation/team-settings-controller.js +44 -10
- 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 +1 -2
- package/src/client/styles/layout/editor-page.css +0 -13
- package/src/client/styles/layout/responsive.css +2 -7
- package/src/client/styles/layout/shell.css +13 -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 +34 -83
- 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/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 +214 -49
- 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-vault-api-query-handler.js +2 -2
- 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/sidecar-store.js +5 -1
- 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-kJfwukbn.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-BBwRXFv3.js +0 -1
- package/dist/client/assets/architecture-7GRP2DOG-DJVtYNt-.js +0 -1
- package/dist/client/assets/babel-Bi_28hhi.js +0 -16
- package/dist/client/assets/browser-utils-S4QYY31r.js +0 -1
- package/dist/client/assets/channel-CgcHBnmr.js +0 -1
- package/dist/client/assets/chunk-2E4U76K2-CIQUuV9n.js +0 -1
- package/dist/client/assets/chunk-2ZTRR5NV-CnDP55cn.js +0 -2
- package/dist/client/assets/chunk-2ZTRR5NV-DcPRfelM.js +0 -2
- package/dist/client/assets/chunk-3FUC2YCW-8tZlhTGX.js +0 -1
- package/dist/client/assets/chunk-6AEJRKK7-DTVZj5bY.js +0 -1
- package/dist/client/assets/chunk-747NJXEK-BjqqAsS9.js +0 -2
- package/dist/client/assets/chunk-747NJXEK-Cur1aosP.js +0 -2
- package/dist/client/assets/chunk-7INBJB4K-CDmiHbaX.js +0 -62
- package/dist/client/assets/chunk-7M6MHVWA-BDakkknV.js +0 -213
- package/dist/client/assets/chunk-FOHPRMQF-DzxwRta7.js +0 -161
- package/dist/client/assets/chunk-ISPTBLVO-BMsDq9Ha.js +0 -12
- package/dist/client/assets/chunk-O7XYJQB3-D0_ZY2za.js +0 -126
- package/dist/client/assets/chunk-OUJLGHUK-75UXlPjl.js +0 -2
- package/dist/client/assets/chunk-OUJLGHUK-DA95-S9B.js +0 -2
- package/dist/client/assets/chunk-T5WUORNS-DD7KlyY6.js +0 -40
- package/dist/client/assets/chunk-UA2S7LBM-DicYDjDM.js +0 -1
- 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/crystal-Bsdphhtm.js +0 -1
- package/dist/client/assets/cynefin-OW5HDTMX-CF3N9j1_.js +0 -1
- package/dist/client/assets/cynefin-OW5HDTMX-e-Quc9Yl.js +0 -1
- package/dist/client/assets/cytoscape-cose-bilkent-NdTYBUiT.js +0 -1
- package/dist/client/assets/cytoscape-fcose-DE9_QRG_.js +0 -1
- package/dist/client/assets/cytoscape.esm-EK2DW5Qr.js +0 -321
- package/dist/client/assets/dagre-6A5THRUB-DewyAGK6.js +0 -4
- package/dist/client/assets/dagre-D7FiCLLP.js +0 -1
- package/dist/client/assets/dagre-GXQ25YYZ-Vtyx08Qh.js +0 -4
- 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-22UHCM2B-DbZirFfl.js +0 -200
- package/dist/client/assets/diagram-ATOU4E4O-B5uX-jVO.js +0 -3
- package/dist/client/assets/dist-9Eodxf4G.js +0 -1
- package/dist/client/assets/dist-B2ZNQifU.js +0 -1
- package/dist/client/assets/dist-B6QCMNze.js +0 -1
- package/dist/client/assets/dist-BIAv19LO.js +0 -1
- package/dist/client/assets/dist-BKYp1-dl.js +0 -13
- package/dist/client/assets/dist-BSAZ-Hek.js +0 -39
- package/dist/client/assets/dist-BSTbcioM.js +0 -11
- package/dist/client/assets/dist-BT9gJXCb.js +0 -1
- package/dist/client/assets/dist-BTVg1m-V.js +0 -1
- package/dist/client/assets/dist-Bi9ZIYXq.js +0 -9
- package/dist/client/assets/dist-BpAUe9sL.js +0 -1
- package/dist/client/assets/dist-Bqo-XRVG.js +0 -1
- package/dist/client/assets/dist-BrKhPlc9.js +0 -1
- package/dist/client/assets/dist-CBsvKPcT.js +0 -1
- package/dist/client/assets/dist-CJBYh9Wy.js +0 -23
- package/dist/client/assets/dist-CRwfjtwz.js +0 -2
- package/dist/client/assets/dist-CX7Kc61C.js +0 -1
- package/dist/client/assets/dist-CYfPeupF.js +0 -1
- package/dist/client/assets/dist-CoXN2D3R.js +0 -1
- package/dist/client/assets/dist-CucpLxUY.js +0 -1
- package/dist/client/assets/dist-DHBMeCxC.js +0 -6
- package/dist/client/assets/dist-DLEg9d4u.js +0 -1
- package/dist/client/assets/dist-DOHWxIty.js +0 -1
- package/dist/client/assets/dist-DYFBD-wW.js +0 -1
- package/dist/client/assets/dist-DeCV9FU4.js +0 -1
- package/dist/client/assets/dist-DugWGOjQ.js +0 -1
- package/dist/client/assets/dist-KrdpB_GB.js +0 -1
- package/dist/client/assets/dist-NNrRnB-f.js +0 -1
- package/dist/client/assets/dist-PUxZqhFe.js +0 -1
- package/dist/client/assets/dist-cYiJMWHJ.js +0 -1
- package/dist/client/assets/dist-iKC7go4m.js +0 -1
- package/dist/client/assets/dist-lw5TGjI6.js +0 -1
- package/dist/client/assets/document-formatter-6I63vstk.js +0 -1
- package/dist/client/assets/drawioEditor-DNTjsjzJ.js +0 -9
- package/dist/client/assets/editor-session-D8GGkJak.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/embedpdf-TkbBYowM.js +0 -1
- package/dist/client/assets/en-JTHJ2SIP-DBz9bRq4.js +0 -1
- package/dist/client/assets/eventmodeling-NTZA5JFV-CDy1bN6j.js +0 -1
- package/dist/client/assets/eventmodeling-NTZA5JFV-Dxtv5D-P.js +0 -1
- package/dist/client/assets/excalidraw-element-link-BRZOTIeI.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-D0orhhku.js +0 -9
- package/dist/client/assets/export-page-CVJNMERq.js +0 -46
- package/dist/client/assets/exportDocument-Ba-n1X4U.css +0 -1
- package/dist/client/assets/exportDocument-DSshnmnZ.js +0 -2
- package/dist/client/assets/file-kind-BwMIcZbi.js +0 -1
- package/dist/client/assets/file-search-BA8o_gs0.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-B-rpDYbz.js +0 -1
- 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/groovy-CUpZ7dEl.js +0 -1
- package/dist/client/assets/image-I42VHMUI-B2-c_ifV.js +0 -1
- package/dist/client/assets/image-blob-reduce.esm-BFq-Mx5V.js +0 -2
- package/dist/client/assets/index-BCgNcVNs.css +0 -1
- package/dist/client/assets/index-BpmR5Qqk.js +0 -1140
- package/dist/client/assets/info-A6RAGUB7-BcGxhjED.js +0 -1
- package/dist/client/assets/info-A6RAGUB7-BlutK7BT.js +0 -1
- package/dist/client/assets/javascript-B9I2pbsP.js +0 -1
- package/dist/client/assets/javascript-DctB8BJo.js +0 -1
- package/dist/client/assets/katex-ZlcWpGUi.js +0 -257
- package/dist/client/assets/linear-DExL6ILt.js +0 -1
- package/dist/client/assets/lobby-presence-KJrYhMdN.js +0 -1
- package/dist/client/assets/markdown-it-DpvIRaVq.js +0 -13
- package/dist/client/assets/mermaid.core-BeOUPE3Q.js +0 -10
- package/dist/client/assets/packet-AYTQ26CC-CqpSjTWl.js +0 -1
- package/dist/client/assets/packet-AYTQ26CC-DvbY8dI6.js +0 -1
- package/dist/client/assets/percentages-LWOC67ZH-VhvllE7L.js +0 -1
- package/dist/client/assets/pica-BPrp-GK1.js +0 -2
- package/dist/client/assets/pie-WAS4IAKB-Bg2eCNl5.js +0 -1
- package/dist/client/assets/pie-WAS4IAKB-DWSm9SSD.js +0 -1
- package/dist/client/assets/preload-helper-BAlEavIC.js +0 -1
- package/dist/client/assets/preview-diagram-utils-txBCoW8d.js +0 -1
- package/dist/client/assets/preview-render-compiler-BmWQStaL.js +0 -43
- package/dist/client/assets/preview-render-worker-BA4VK_GY.js +0 -575
- package/dist/client/assets/prod-CA0ie9yD.js +0 -145
- package/dist/client/assets/prod-yKJZ3E4s.js +0 -1
- package/dist/client/assets/pug-CqqUmdG7.js +0 -1
- package/dist/client/assets/purify.es-go7v6Te-.js +0 -3
- package/dist/client/assets/quick-switcher-controller-B5vT9Vj5.js +0 -1
- package/dist/client/assets/radar-RG4KPBEZ-BfNQUEQy.js +0 -1
- package/dist/client/assets/radar-RG4KPBEZ-DxExotg6.js +0 -1
- package/dist/client/assets/railroad-74A4TZTK-BaQ6U6eJ.js +0 -1
- package/dist/client/assets/railroad-74A4TZTK-FfHmeIQk.js +0 -1
- package/dist/client/assets/railroad-abnf-HS5TGJTU-BJ3KZw7J.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-ebnf-LZEXJU2U-DA0sEq7w.js +0 -1
- package/dist/client/assets/railroad-peg-WCYAUIDC-CGs5GeJ5.js +0 -1
- package/dist/client/assets/railroad-peg-WCYAUIDC-DCmlICzO.js +0 -1
- package/dist/client/assets/rolldown-runtime-Dd_uD5pT.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/src-XiVvaevx.js +0 -1
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CLlwrdvU.js +0 -1
- package/dist/client/assets/subset-shared.chunk-BXlA-9CO.js +0 -1
- package/dist/client/assets/swimlanes-2SLR337P-CnYTVqRX.js +0 -1
- package/dist/client/assets/swimlanes-42K2YHIH-CALFEmiS.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-BvHOzbu9.js +0 -1
- package/dist/client/assets/treeView-Q6P3EWNA-Cccy0ngL.js +0 -1
- package/dist/client/assets/treemap-WGGIJYW6-oety7paS.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-NS_EVHJ3.js +0 -7
- package/dist/client/assets/wardley-WFR3VGLG-BdwDpX_I.js +0 -1
- package/dist/client/assets/wardley-WFR3VGLG-Y7xty_3m.js +0 -1
- package/dist/client/assets/workspace-sync-client-BrMtf6zN.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,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-DORNT49K.js";import{a as o,c as s,d as c,f as l,g as u,h as d,i as f,l as p,m,n as h,o as g,p as ee,r as te,s as ne,t as _,u as re}from"./preview-diagram-utils-ByzpiwPu.js";import{a as ie,l as v,o as ae,r as y,s as oe}from"./api-client-utils-DkW9xiiw.js";import{t as b}from"./preload-helper-khBccGFq.js";import{r as x,t as S}from"./vault-utils-Bct69Xw2.js";import{n as C,r as w}from"./preview-render-profile-D652PAjA.js";import{a as T,i as E,r as D,s as O,t as k}from"./runtime-paths-qQGhzNx4.js";import{r as se}from"./drawio-room-yBUzk-vg.js";import{n as ce}from"./excalidraw-element-link-BduFAMXS.js";var A=Object.freeze({htmlLabels:!1,flowchart:{defaultRenderer:`dagre-wrapper`,htmlLabels:!1,useMaxWidth:!0},class:{defaultRenderer:`dagre-wrapper`,htmlLabels:!1,useMaxWidth:!0},startOnLoad:!1,theme:`default`}),le=/^\s*%%\{\s*(?:init|initialize)\s*:[\s\S]*?\}%%\s*\n?/gim,ue=0;function j(){return ue+=1,`mermaid-export-${ue.toString(36)}`}async function de(e){if(typeof e.toBlob==`function`){let t=await new Promise(t=>e.toBlob(t,`image/png`));if(t instanceof Blob)return t}return fe(e.toDataURL(`image/png`))}function fe(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 pe(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}=c(t);return t.setAttribute(`width`,String(Math.max(1,Math.ceil(n)))),t.setAttribute(`height`,String(Math.max(1,Math.ceil(r)))),t}function me(e,{padding:t=16}={}){let n=pe(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 he({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 ge(e={}){let t=he(e);return{baseName:t,pngFileName:`${t}.png`,svgFileName:`${t}.svg`}}function _e(e){let t=pe(e);return ee(t)}function ve(e,t={}){return ee(me(e,t))}function M(e){let t=u(String(e??``).replace(le,``));if(t=`%%{init: ${JSON.stringify(A)}}%%\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 ye(e,t){if(!e?.initialize||!e?.run)throw Error(`Mermaid runtime is unavailable`);e.initialize(A);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=j(),r.textContent=M(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 ve(i,{padding:24})}finally{n.remove()}}async function be(e){let t=l(e),n=await s(o(t)),r=document.createElement(`div`);r.innerHTML=t;let i=r.querySelector(`svg`),{width:a,height:u}=i?c(i):{height:n.naturalHeight||800,width:n.naturalWidth||1200},d=document.createElement(`canvas`);d.width=Math.max(1,Math.ceil(a)),d.height=Math.max(1,Math.ceil(u));let f=d.getContext(`2d`);if(!f)throw Error(`Canvas is unavailable`);return f.fillStyle=`#ffffff`,f.fillRect(0,0,d.width,d.height),f.drawImage(n,0,0,d.width,d.height),de(d)}async function xe(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 Se(e){return`data-${e.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}`}var Ce=class{constructor(e,{batchSize:t,datasetKeys:n,loadFileSource:r=null,filePathLabel:i,requestIdleRenderFn:a=v,cancelIdleRenderFn:o=y,intersectionObserverFactory:s=(e,t)=>new IntersectionObserver(e,t),isNearViewportFn:c=ae,requestAnimationFrameFn:l=e=>requestAnimationFrame(e),shellClassName:u,sourceClassName:d}){this.renderer=e,this.batchSize=t,this.datasetKeys=n,this.loadFileSource=r,this.filePathLabel=i,this.requestIdleRenderFn=a,this.cancelIdleRenderFn=o,this.intersectionObserverFactory=s,this.isNearViewportFn=c,this.requestAnimationFrameFn=l,this.shellClassName=u,this.sourceClassName=d,this.shellSelector=`.${u}`,this.sourceSelector=`.${d}`,this.attributeNames=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,Se(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(!m({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}={}){d(e,t,this.attributeNames.sourceLine),d(e,t,this.attributeNames.sourceLineEnd),d(e,t,this.attributeNames.key),d(e,t,this.attributeNames.target),d(e,t,this.attributeNames.label),d(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}n?this.markShellPending(e):this.isShellError(e)?e.dataset[this.datasetKeys.hydrated]=`true`: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=p(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(_({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 we(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 N=class extends Ce{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||=b(()=>import(`./mermaid.core-8OvaaBlM.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=p(t);i?.after(_({key:n,kind:`mermaid`,label:e.dataset.mermaidLabel||`Mermaid diagram`,message:r}))}}}prepareSource(e){let t=u(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(h(e.dataset.mermaidKey||`mermaid`)),this.enqueueShell(e,{prioritize:!0})})}async renderExportSvgMarkup(e){let t=await this.ensureMermaid();try{return await ye(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}=re(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:()=>ge({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=we(a);if(this.isHydrationCurrent(i,e,t)&&o){let{width:t,height:n}=c(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)}}},Te=30,P=class extends Ce{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=p(t);e.querySelector(`:scope > .plantuml-toolbar`)?.remove(),e.querySelector(`:scope > .plantuml-frame`)?.remove(),e.querySelector(`.plantuml-placeholder-card`)||i?.after(_({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=l(e);for(this.svgCache.delete(t);this.svgCache.size>=Te;)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(te(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}=ne(r);this.diagramChrome.mount(e,{baseHeight:a,baseWidth:i,diagramElement:r,exportFileNames:()=>ge({currentFilePath:this.renderer.getSourceFilePath?.()??``,diagramKind:`plantuml`,sourceLine:e.getAttribute(`data-source-line`)||``,targetPath:e.dataset.plantumlTarget||``}),exportSvgMarkup:()=>_e(r),kind:`plantuml`,onReload:()=>{this.resetShell(e,{clearCache:!0,message:`Refreshing…`}),this.enqueueShell(e,{prioritize:!0})},sourceSelector:`.plantuml-source`})}},Ee={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 F(e,t){if(!(e instanceof HTMLElement))return;let n=Ee[t];n?(e.classList.add(`is-icon-only`),e.classList.add(`ui-preview-action--icon-only`),e.dataset.icon=t,e.innerHTML=n.trim()):(e.classList.remove(`is-icon-only`),e.classList.remove(`ui-preview-action--icon-only`))}var De=Object.freeze({animationDurationMs:160,default:1,max:3,min:.1,step:.1,wheelSensitivity:.01}),Oe=Object.freeze({mermaid:{...De,fitMax:De.max,min:.5},plantuml:{...De,fitMax:De.default}}),ke=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 Ae(e){return ke[e]??ke.mermaid}function je(e){return Oe[e]??Oe.mermaid}function Me(e){return e instanceof SVGSVGElement}var Ne=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=Ae(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(ke))this.document.body.classList.toggle(t.bodyClassName,!!this.document.querySelector?.(`.${e}-shell.is-maximized`))}createButton(e,t,n,{icon:r=``}={}){let i=Ae(e),a=this.document.createElement(`button`);return a.type=`button`,a.className=i.buttonClassName,a.setAttribute(`aria-label`,n),a.title=n,r?F(a,r):a.textContent=t,a}createToolbar({kind:e,includeReload:t=!1}){let n=Ae(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 be(await e());try{await xe(r),this.toastController?.show?.(`Diagram copied`)}catch{ie(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`});ie(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`);F(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})}else 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||!Me(r))return null;let l=Ae(o),u=je(o),d=e.querySelector(l.frameClassName.split(` `).map(e=>`.${e}`).join(``)),p=d?g(d).width:0,m=this.getShellViewState(e);this.destroyShell(e);let{copyButton:h,decreaseButton:ee,downloadButton:te,increaseButton:ne,maximizeButton:_,reloadButton:re,resetButton:ie,toolbar:v,zoomLabel:ae}=this.createToolbar({includeReload:typeof s==`function`,kind:o}),y=this.document.createElement(`div`);y.className=l.frameClassName;let oe=!!(m&&(m.scrollLeft>0||m.scrollTop>0)),b=!!(oe&&d?.isConnected&&d.clientWidth>0&&d.clientHeight>0),x=!(!b||e.classList.contains(`is-maximized`)||e.style.position);x&&(e.style.position=`relative`),oe&&!b&&(y.style.visibility=`hidden`),b&&Object.assign(y.style,{height:`${d.clientHeight}px`,left:`0`,pointerEvents:`none`,position:`absolute`,top:`0`,visibility:`hidden`,width:`${d.clientWidth}px`});let C=u.default,w=null,T=null,E=null,D=null,O=null,k=!!(m?.hasManualZoom||m?.scrollLeft>0||m?.scrollTop>0),se=p>0&&Number.isFinite(n)&&n>0,ce=Number.isFinite(m?.zoom),A=se?p:0,le=!1;r.style.maxWidth=`none`;let ue=()=>{let e=g(y);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:S(t,u.min,u.fitMax)},j=e=>{C=S(e,u.min,u.max),r.style.width=`${n*C}px`,r.style.height=`${t*C}px`,ae.textContent=`${Math.round(C*100)}%`,ee.disabled=C<=u.min,ne.disabled=C>=u.max},de=ce?S(m.zoom,u.min,u.max):se?S(p/n,u.min,u.fitMax):u.default,fe=()=>({x:y.scrollLeft+y.clientWidth/2,y:y.scrollTop+y.clientHeight/2}),pe=(e,t,n,r)=>{if(e===0)return;let i=t/e;y.scrollLeft=n.x*i-r.x,y.scrollTop=n.y*i-r.y},me=(e,t,n)=>{pe(e,t,n,{x:y.clientWidth/2,y:y.clientHeight/2})},he=e=>{let t=S(e,u.min,u.max);if(w){T=t;return}let n=C;if(t===n)return;T=t;let r=fe(),i=performance.now(),a=e=>{let t=S((e-i)/u.animationDurationMs,0,1),o=f(t),s=n+(T-n)*o;if(j(s),me(n,s,r),t<1){w=this.window.requestAnimationFrame(a);return}w=null;let c=T;T=null,j(c),me(n,c,r)};w=this.window.requestAnimationFrame(a)},ge=()=>{w&&=(this.window.cancelAnimationFrame(w),null),T=null},_e=e=>{k=!0,he((T??C)+e)},ve=()=>{let e=ue();k=!1,A=g(y).width,O=null,ge(),j(e),y.scrollLeft=0,y.scrollTop=0},M=({force:t=!1}={})=>{le||=t,E&&this.window.cancelAnimationFrame(E),E=this.window.requestAnimationFrame(()=>{if(E=null,!e.isConnected)return;let t=le;le=!1;let n=g(y).width,r=Math.abs(n-A)>1;!t&&k||!t&&n>0&&A>0&&!r||ve()})},ye=this.attachShellResizeObserver(e,y,()=>M()),be=(e,t)=>{let n=y.getBoundingClientRect();return{x:Number(e)-n.left,y:Number(t)-n.top}},xe=e=>{if(!e||e.length!==2)return null;let t=e[0],n=e[1],r=be((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}},Se=e=>{let t=xe(e);return t?(ge(),O={contentPoint:{x:y.scrollLeft+t.center.x,y:y.scrollTop+t.center.y},distance:t.distance,zoom:C},!0):!1},Ce=e=>{let t=xe(e);return!t||!O&&!Se(e)?!1:(k=!0,j(O.zoom*(t.distance/O.distance)),pe(O.zoom,C,O.contentPoint,t.center),!0)};ee.addEventListener(`click`,()=>_e(-u.step)),ne.addEventListener(`click`,()=>_e(u.step)),y.addEventListener(`wheel`,e=>{if(!e.ctrlKey)return;e.preventDefault();let t=Number.isFinite(e.deltaY)?e.deltaY:0,n=S(-t*u.wheelSensitivity,-u.step/2,u.step/2);n!==0&&_e(n)},{passive:!1}),y.addEventListener(`touchstart`,e=>{e.touches.length===2&&Se(e.touches)},{passive:!0}),y.addEventListener(`touchmove`,e=>{e.touches.length===2&&Ce(e.touches)&&e.preventDefault()},{passive:!1});let we=e=>{e.touches.length!==2&&(O=null)};y.addEventListener(`touchend`,we),y.addEventListener(`touchcancel`,we),ie.addEventListener(`click`,()=>{M({force:!0})}),h.addEventListener(`click`,()=>this.copyExportImage(a,i)),te.addEventListener(`click`,()=>this.downloadExportSvg(a,i)),re?.addEventListener(`click`,()=>s()),_.addEventListener(`click`,()=>{this.setMaximizedState(e,o,_,M,!e.classList.contains(`is-maximized`))}),y.appendChild(r);let N=c?e.querySelector(c):null,Te=N?[N,v,y]:[v,y];N&&(N.hidden=!0),b?e.append(y):e.replaceChildren(...Te),j(de);let P=()=>{let e=Math.max(0,y.scrollWidth-y.clientWidth),t=Math.max(0,y.scrollHeight-y.clientHeight),n=S(m.scrollLeft??0,0,e),r=S(m.scrollTop??0,0,t);return y.scrollLeft=n,y.scrollTop=r,y.clientWidth>0&&y.clientHeight>0&&y.scrollLeft===n&&y.scrollTop===r};b?(P(),D=this.window.requestAnimationFrame(()=>{D=null,e.replaceChildren(...Te),y.removeAttribute(`style`),x&&(e.style.position=``),j(de),P()})):oe&&(P()?y.style.visibility=``:this.window.requestAnimationFrame(()=>{y.isConnected&&(P(),y.style.visibility=``)}));let Ee={destroy:()=>{w&&this.window.cancelAnimationFrame(w),E&&this.window.cancelAnimationFrame(E),D&&this.window.cancelAnimationFrame(D),ye?.disconnect?.(),this.resizeObservers.delete(ye)},getViewState:()=>({hasManualZoom:k,scrollLeft:y.scrollLeft,scrollTop:y.scrollTop,zoom:C}),scheduleResetZoomToFit:M,syncMaximizeButtonState:()=>this.syncMaximizeButtonState(e,_)};return this.shellControllers.set(e,Ee),this.shellRefits.set(e,M),this.syncMaximizeButtonState(e,_),!se&&!ce&&M({force:!0}),Ee}};function Pe(){return new Worker(new URL(new URL(`preview-render-worker-DYGDgbKA.js`,import.meta.url).href,``+import.meta.url),{type:`module`})}var Fe=class{constructor({attachmentApiPath:e=`/api/attachment`,compilePreviewDocumentLoader:t=()=>b(()=>import(`./preview-render-compiler-B_gyVIfk.js`),[],import.meta.url),createWorkerFn:n=Pe,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;this.workerJob=null,e.data?.error?t.reject(Error(e.data.error)):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)}},Ie=class{constructor({getRenderProfileFn:e=C}={}){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=()=>{r.deferUntilIdle?this.idleId=v(()=>{this.idleId=null,i()},500):i()};this.timeoutId=setTimeout(a,r.debounceMs)}cancel(){clearTimeout(this.timeoutId),this.frameId&&cancelAnimationFrame(this.frameId),y(this.idleId),this.frameId=null,this.idleId=null,this.timeoutId=null}destroy(){this.cancel()}},Le=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:g=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=g,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 Ne({toastController:g}),this.mermaidHydrator=new N(this,{loadFileSource:s}),this.plantUmlHydrator=new P(this,{loadFileSource:s,renderClient:p}),this.renderScheduler=new Ie,this.renderExecutor=new Fe({attachmentApiPath:D(`/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([b(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`)}),b(()=>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){this.hydrationPaused=!!e,this.hydrationPaused?(this.mermaidHydrator.cancelPendingIdleWork(),this.plantUmlHydrator.cancelPendingIdleWork()):(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=w(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(){this.hydrationPaused&&(this.mermaidHydrator.hasPendingWork()||this.plantUmlHydrator.hasPendingWork())?this.setPhase(`base`):this.mermaidHydrator.hasPendingWork()||this.plantUmlHydrator.hasPendingWork()?this.setPhase(`hydrating`):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 Re(...e){return e.flat().flatMap(e=>e&&typeof e==`object`?Object.keys(e).filter(t=>e[t]):e||[]).join(` `)}function I(e={}){return Re(`ui-input`,e.extra??[])}function L(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 Re(`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 ze(e={}){return Re(`ui-segmented-control`,{"ui-segmented-control--pill":e.pill,hidden:e.hidden},e.extra??[])}function Be(e={}){return Re(`ui-segmented-btn`,{active:e.active,hidden:e.hidden},e.extra??[])}function Ve(){return`base-${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}`}function R(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)}else Reflect.set(e,`innerHTML`,n)}function He(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 Ue(e=``){return/^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/iu.test(String(e??``).trim())}function We(e=``){return/^https?:\/\/.+\.(?:png|jpe?g|webp|gif|svg)(?:[?#].*)?$/iu.test(String(e??``).trim())}function Ge(e){return Object.prototype.toString.call(e)===`[object Object]`}function z(e=`and`){return{children:[],conjunction:e,type:`group`}}function Ke(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 B(e){return String(e?.text??``)}function qe(e=``){return D(`/attachment?path=${encodeURIComponent(e)}`)}function Je(t={}){if(t?.type===`image`&&t.path)return qe(t.path);if(t?.type===`link`){if(t.external&&We(t.url))return t.url;if(t.path&&e(t.path))return qe(t.path)}let n=B(t);return We(n)?n:e(n)?qe(n):``}function Ye(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="${x(qe(e.path))}" alt="${x(B(e))}">`;if(t===`list`)return`<span class="bases-value-list">${(e.items??[]).map(e=>`<span class="bases-value-pill">${Ye(e)}</span>`).join(``)}</span>`;if(t===`link`){if(e.external&&e.url)return`<a class="bases-link" href="${x(e.url)}" target="_blank" rel="noopener noreferrer">${x(B(e))}</a>`;if(e.path)return`<button type="button" class="${x(L({variant:`secondary`,size:`compact`,pill:!0,extra:[`bases-link`,`bases-link-button`]}))}" data-base-open-file="${x(e.path)}">${x(B(e))}</button>`}if(t===`file`&&e.path)return`<button type="button" class="${x(L({variant:`secondary`,size:`compact`,pill:!0,extra:[`bases-link`,`bases-link-button`]}))}" data-base-open-file="${x(e.path)}">${x(B(e))}</button>`;let n=B(e);return`<span class="bases-value">${x(n)}</span>`}function Xe(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="${x(L({variant:`secondary`,size:`compact`,pill:!0,extra:[`bases-link`,`bases-link-button`]}))}" data-base-open-file="${x(t.path)}">${x(B(n))}</button>`:Ye(n)}function V(e=[]){return!Array.isArray(e)||e.length===0?``:`<div class="bases-summaries">${e.map(e=>`<div class="bases-summary"><span class="bases-summary-label">${x(e.label)}</span><span class="bases-summary-value">${x(B(e.value))}</span></div>`).join(``)}</div>`}function Ze(e,t){return t.map(t=>`<section class="bases-group"><header class="bases-group-header"><h3>${x(t.label)}</h3>${V(t.summaries)}</header><div class="bases-table-shell"><table class="bases-table"><thead><tr>${e.map(e=>`<th>${x(e.label)}</th>`).join(``)}</tr></thead><tbody>${(t.rows??[]).map(t=>`<tr>${e.map(e=>`<td>${Xe(e,t)}</td>`).join(``)}</tr>`).join(``)}</tbody></table></div></section>`).join(``)}function Qe(e,t){return t.map(t=>`<section class="bases-group"><header class="bases-group-header"><h3>${x(t.label)}</h3>${V(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>${x(e.label)}:</strong> ${Xe(e,t)}</span>`}).join(``)}</li>`).join(``)}</ul></section>`).join(``)}function $e(e,t,n){return t.map(t=>`<section class="bases-group"><header class="bases-group-header"><h3>${x(t.label)}</h3>${V(t.summaries)}</header><div class="bases-cards">${(t.rows??[]).map(t=>{let r=Ke(n,e,t),i=B(r),a=``;if(Ue(i))a=`<div class="bases-card-media bases-card-media-color" style="--bases-card-swatch:${x(i)}"></div>`;else{let e=Je(r);e&&(a=`<img class="bases-card-media" src="${x(e)}" alt="${x(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">${x(e.label)}</div><div class="bases-card-value">${Xe(e,t)}</div></div>`}).join(``)}</div></article>`}).join(``)}</div></section>`).join(``)}function et(e){if(!e.view.supported)return`<div class="bases-unsupported">CollabMD parsed this view but does not render the <code>${x(e.view.type)}</code> layout yet.</div>`;switch(e.view.type){case`cards`:return $e(e.columns,e.groups,e.view);case`list`:return Qe(e.columns,e.groups);default:return Ze(e.columns,e.groups)}}function tt(e){return(e.views??[]).map(t=>`<button type="button" class="${x(Be({active:t.id===e.view.id,extra:`bases-view-tab`}))}" data-base-view="${x(t.id)}">${x(t.name)}</button>`).join(``)}function H(e){return e?.meta??{}}function U(e){return H(e).availableProperties??[]}function nt(e){let t=H(e).activeViewConfig?.order;return Array.isArray(t)&&t.length>0?[...t]:Array.isArray(e?.columns)?e.columns.map(e=>e.id).filter(Boolean):[]}function rt(e,t=``){return U(e).find(e=>e.id===t)??null}function it(e,t=``){return rt(e,t)?.filterOperators??[`is`,`is not`,`contains`,`does not contain`,`is empty`,`is not empty`]}function W(e){let t=H(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 at(e){return!!(e?.payload?.path&&e?.payload?.sourcePath&&e.payload.path===e.payload.sourcePath)}function ot(e,t,n,r){let i=n.ui?.openPanel===t,a=!!H(r).editable;return`<button type="button" class="${x(L({variant:i?`primary`:`secondary`,pill:!0,extra:[`bases-toolbar-btn`,i?`is-active`:``]}))}" data-base-panel="${x(t)}"${a?``:` disabled`}>${x(e)}</button>`}function st(e,t=``){if(!e||e.type!==`group`||!t)return e;let n=(e.children??[]).flatMap(e=>{if(e?.type===`group`){let n=st(e,t);return n?[n]:[]}return e?.propertyId===t?[]:[e]});return{...e,children:n}}function ct(e,t=``,n=e?.result){let r=H(n).activeViewConfig?.filters??null,i=J(r),a=t&&i?_t(st(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 lt(e,t=``,n=e?.result){let r=e?.propertyValueOptions?.get(t)??null;return r&&r.cacheKey===ct(e,t,n)?r.values??[]:[]}function ut(e,t){return[ot(`Sort`,`sort`,t,e),ot(`Filter`,`filter`,t,e),ot(`Properties`,`properties`,t,e)].join(``)}function dt(e,{allowBlank:t=!1,selected:n=``}={}){let r=[];return t&&r.push(`<option value=""${n?``:` selected`}>Property</option>`),U(e).forEach(e=>{r.push(`<option value="${x(e.id)}"${e.id===n?` selected`:``}>${x(e.label)}</option>`)}),r.join(``)}function ft(e){let t=W(e),n=rt(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="${x(I({extra:`bases-select bases-sort-property`}))}" data-base-group-by-property aria-label="Group by property">
|
|
47
|
+
${dt(e,{allowBlank:!0,selected:t.groupBy?.property??``})}
|
|
48
|
+
</select>
|
|
49
|
+
<select class="${x(I({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="${x(e.id)}"${e.id===(t.groupBy?.direction??`asc`)?` selected`:``}>${x(e.label)}</option>`).join(``)}
|
|
51
|
+
</select>
|
|
52
|
+
<button type="button" class="${x(L({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=rt(e,t.property)?.sortDirections??[{id:`asc`,label:`A → Z`},{id:`desc`,label:`Z → A`}];return`
|
|
59
|
+
<div class="bases-sort-row">
|
|
60
|
+
<select class="${x(I({extra:`bases-select bases-sort-property`}))}" data-base-sort-property="${n}" aria-label="Sort rule ${n+1} property">
|
|
61
|
+
${dt(e,{selected:t.property})}
|
|
62
|
+
</select>
|
|
63
|
+
<select class="${x(I({extra:`bases-select bases-sort-direction`}))}" data-base-sort-direction="${n}" aria-label="Sort rule ${n+1} direction">
|
|
64
|
+
${i.map(e=>`<option value="${x(e.id)}"${e.id===t.direction?` selected`:``}>${x(e.label)}</option>`).join(``)}
|
|
65
|
+
</select>
|
|
66
|
+
<button type="button" class="${x(L({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="${x(L({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="${x(L({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="${x(L({variant:`secondary`,size:`compact`}))}" data-base-sort-add>Add sort</button>
|
|
73
|
+
</div>
|
|
74
|
+
</section>
|
|
75
|
+
`}function pt(e=[]){return e.join(`.`)}function mt(e=[]){return e.map(e=>e+1).join(`.`)}function G(e=``){return String(e??``).split(`.`).filter(e=>e!==``).map(e=>Number.parseInt(e,10)).filter(Number.isFinite)}function ht(e=``){return JSON.stringify(String(e??``))}function K(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)):ht(r)}function gt(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(${K(e.value,r,e.operator)})`;case`does not contain`:return`!${n}.contains(${K(e.value,r,e.operator)})`;case`starts with`:return`${n}.startsWith(${K(e.value,r,e.operator)})`;case`ends with`:return`${n}.endsWith(${K(e.value,r,e.operator)})`;case`is`:return`${n} == ${K(e.value,r,e.operator)}`;case`is not`:return`${n} != ${K(e.value,r,e.operator)}`;case`>`:case`>=`:case`<`:case`<=`:return`${n} ${e.operator} ${K(e.value,r,e.operator)}`;case`is empty`:return`${n}.isEmpty()`;case`is not empty`:return`!${n}.isEmpty()`;default:return``}}function _t(e,t){if(!e||e.type!==`group`)return null;let n=(e.children??[]).map(e=>e?.type===`group`?_t(e,t):gt(e,rt(t,e?.propertyId))).filter(Boolean);return n.length===0?null:e.conjunction===`not`?{not:n}:{[e.conjunction]:n}}function q(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 vt(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:q(n)})],[/^([A-Za-z0-9_.]+)\.contains\((.+)\)$/u,(e,t,n)=>({operator:`contains`,propertyId:t,type:`rule`,value:q(n)})],[/^([A-Za-z0-9_.]+)\.startsWith\((.+)\)$/u,(e,t,n)=>({operator:`starts with`,propertyId:t,type:`rule`,value:q(n)})],[/^([A-Za-z0-9_.]+)\.endsWith\((.+)\)$/u,(e,t,n)=>({operator:`ends with`,propertyId:t,type:`rule`,value:q(n)})],[/^([A-Za-z0-9_.]+)\s*(==|!=|>=|<=|>|<)\s*(.+)$/u,(e,t,n,r)=>({operator:{"!=":`is not`,"==":`is`,"<":`<`,"<=":`<=`,">":`>`,">=":`>=`}[n]??n,propertyId:t,type:`rule`,value:q(r)})]];for(let[e,r]of n){let n=t.match(e);if(n)return r(...n)}return null}function J(e){if(!e)return z(`and`);if(typeof e==`string`){let t=vt(e);return t?{children:[t],conjunction:`and`,type:`group`}:null}if(!Ge(e))return null;if(Array.isArray(e.and)){let t=e.and.map(e=>J(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=>J(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=J(e.not);return t?t.type===`group`&&t.conjunction===`or`?t.children??[]:[t]:[]})()).flatMap(e=>{let t=e?.type?e:J(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 yt(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 Y(e,t=[],n){if(t.length===0)return n(e);let[r,...i]=t;return{...e,children:(e.children??[]).map((e,t)=>t===r?Y(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 Y(e,n,e=>({...e,children:(e.children??[]).filter((e,t)=>t!==r)}))}function Ct(e,t=[],n){return Y(e,t,e=>({...e,children:[...e.children??[],n]}))}function wt(e,t=``){return dt(e,{allowBlank:!0,selected:t})}function Tt(e={}){return String(e?.text??e?.value??``).trim()}function Et(e,t){return e.ui.builderFilter??J(W(t).filters)??z(`and`)}function Dt(e,t,n,r){let i=pt(n),a=it(e,t.propertyId),o=String(t.value??``).trim().toLowerCase(),s=lt(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-${x(r.key)}-${x(i.replace(/\./g,`-`))}`,suggestionsEnabled:d,valueInputClasses:I({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="${x(e.encodedPath)}"
|
|
82
|
+
data-base-filter-suggestion-value="${x(n.text)}"
|
|
83
|
+
role="option"
|
|
84
|
+
aria-selected="${n.text===String(t??``)?`true`:`false`}"
|
|
85
|
+
>
|
|
86
|
+
<span class="bases-filter-suggestion-label">${x(n.text)}</span>
|
|
87
|
+
${n.count==null?``:`<span class="bases-filter-suggestion-meta">${x(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 ${mt(n)}`;return`
|
|
92
|
+
<div class="bases-filter-value-combobox${i.suggestionsEnabled?` has-suggestions`:``}">
|
|
93
|
+
<input class="${x(i.valueInputClasses)}" type="text" value="${x(t.value??``)}" data-base-filter-value="${x(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 ${mt(n)}`;return`
|
|
97
|
+
<div class="bases-filter-row">
|
|
98
|
+
<select class="${x(I({extra:`bases-select bases-filter-property`}))}" data-base-filter-property="${x(i.encodedPath)}" aria-label="${a} property">
|
|
99
|
+
${wt(e,t.propertyId)}
|
|
100
|
+
</select>
|
|
101
|
+
<select class="${x(I({extra:`bases-select bases-filter-operator`}))}" data-base-filter-operator="${x(i.encodedPath)}" aria-label="${a} operator">
|
|
102
|
+
${i.operators.map(e=>`<option value="${x(e)}"${e===t.operator?` selected`:``}>${x(e)}</option>`).join(``)}
|
|
103
|
+
</select>
|
|
104
|
+
${kt(e,t,n,r)}
|
|
105
|
+
<button type="button" class="${x(L({variant:`secondary`,size:`compact`}))}" data-base-filter-remove="${x(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=pt(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&&Ut(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 ${mt(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&&He(o,Ot(l,c.value??``)),!0}function Mt(e,t,n=[]){e&&(e.type===`rule`?t(e,n):(e.children??[]).forEach((e,r)=>{Mt(e,t,[...n,r])}))}function Nt(e,t,n,r,{isRoot:i=!1}={}){let a=pt(n),o=i?`Root filter group`:`Filter group ${mt(n)}`;return`
|
|
108
|
+
<div class="bases-filter-group"${i?` data-base-filter-root`:``}>
|
|
109
|
+
<div class="bases-filter-group-header">
|
|
110
|
+
<select class="${x(I({extra:`bases-select bases-filter-conjunction`}))}" data-base-filter-conjunction="${x(a)}" aria-label="${o} condition">
|
|
111
|
+
${[`and`,`or`,`not`].map(e=>`<option value="${e}"${t.conjunction===e?` selected`:``}>${x({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="${x(L({variant:`secondary`,size:`compact`}))}" data-base-filter-remove="${x(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="${x(L({variant:`secondary`,size:`compact`}))}" data-base-filter-add-rule="${x(a)}" aria-label="Add filter to ${o.toLowerCase()}">Add filter</button>
|
|
120
|
+
<button type="button" class="${x(L({variant:`secondary`,size:`compact`}))}" data-base-filter-add-group="${x(a)}" aria-label="Add filter group to ${o.toLowerCase()}">Add filter group</button>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
`}function Pt(e,t){let n=W(e).filters,r=t.ui.builderFilter??J(n);t.ui.builderFilter??(t.ui.builderFilter=r);let i=r?t.ui.filterMode??`builder`:`advanced`,a=t.ui.rawFilterText??yt(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="${x(L({variant:i===`builder`?`primary`:`secondary`,size:`compact`}))}" data-base-filter-mode="builder">Builder</button>
|
|
130
|
+
<button type="button" class="${x(L({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="${x(I({extra:`bases-filter-advanced`}))}" data-base-filter-advanced>${x(a)}</textarea>
|
|
138
|
+
</label>
|
|
139
|
+
<div class="bases-filter-actions-row">
|
|
140
|
+
<button type="button" class="${x(L({variant:`primary`,size:`compact`}))}" data-base-filter-save-advanced>Save filter</button>
|
|
141
|
+
</div>
|
|
142
|
+
`:Nt(e,r??z(`and`),[],t,{isRoot:!0})}
|
|
143
|
+
</section>
|
|
144
|
+
`}function Ft(e,t){let n=String(t.ui.propertySearch??``).trim().toLowerCase(),r=new Set(nt(e)),i=U(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="${x(I({extra:`bases-properties-search-input`}))}" type="search" value="${x(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="${x(e.id)}"${r.has(e.id)?` checked`:``}>
|
|
153
|
+
<span class="bases-property-option-label">${x(e.label)}</span>
|
|
154
|
+
<span class="bases-property-option-meta">${x(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))}else 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(!H(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 ft(e)}}function zt(e,t){return`
|
|
160
|
+
<section class="bases-shell" data-base-shell-key="${x(t.key)}">
|
|
161
|
+
<header class="bases-toolbar">
|
|
162
|
+
<div class="bases-toolbar-main">
|
|
163
|
+
<div class="${x(ze({pill:!0,extra:`bases-tabs`}))}" data-base-tabs>
|
|
164
|
+
${tt(e)}
|
|
165
|
+
</div>
|
|
166
|
+
<div class="bases-meta" data-base-meta>${x(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>${ut(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="${x(I({extra:`bases-search-input`}))}" type="search" value="${x(t.search)}" placeholder="Search this base" aria-label="Search this base">
|
|
176
|
+
</label>
|
|
177
|
+
<button type="button" class="${x(L({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>${V(e.summaries)}</div>
|
|
182
|
+
<div class="bases-content" data-base-content>${et(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){R(e.placeholder,zt(t,e)),Vt(e.placeholder);return}let l=c.querySelector(`[data-base-tabs]`);s&&l&&R(l,tt(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&&R(d,ut(t,e));let f=c.querySelector(`[data-base-panel-slot]`);if(a&&f){let n=It(f);R(f,Rt(t,e)),Lt(f,n)}let p=c.querySelector(`[data-base-summary-slot]`);o&&p&&R(p,V(t.summaries));let m=c.querySelector(`[data-base-content]`);r&&m&&R(m,et(t));let h=c.querySelector(`.bases-search-input`);h&&h.value!==e.search&&(h.value=e.search)}function Ut(e,t){Ht(e,t,{actions:!1,body:!1,meta:!1,summary:!1,tabs:!1})}var Wt=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=>Y(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=_t(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=G(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=yt(W(r.result).filters),Ut(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=U(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||([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=yt(W(r.result).filters),r.ui.builderFilter=null),Ut(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=G(l.dataset.baseFilterAddRule||``);this.updateBuilderFilter(r,t=>Ct(t,e,{operator:`is`,propertyId:U(r.result)[0]?.id??`file.name`,type:`rule`,value:``}));return}let u=e.target.closest(`[data-base-filter-add-group]`);if(u){let e=G(u.dataset.baseFilterAddGroup||``);this.updateBuilderFilter(r,t=>Ct(t,e,z(`and`)));return}let d=e.target.closest(`[data-base-filter-remove]`);if(d){let e=G(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=G(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||``,Ut(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=G(i.dataset.baseFilterValue||``),r=t.ui.builderFilter??J(W(t.result).filters)??z(`and`);t.ui.builderFilter=Y(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]:nt(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=G(c.dataset.baseFilterConjunction||``);this.updateBuilderFilter(n,t=>Y(t,e,e=>({...e,conjunction:c.value||`and`})));return}let l=e.target.closest(`[data-base-filter-property]`);if(l){let e=G(l.dataset.baseFilterProperty||``);(async()=>{await this.updateBuilderFilter(n,t=>Y(t,e,e=>{let t=it(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=G(u.dataset.baseFilterOperator||``);this.updateBuilderFilter(n,t=>Y(t,e,e=>({...e,operator:u.value||`is`})))}else 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=G(t.dataset.baseFilterValue||``),a=J(W(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||Ve(),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||R(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=J(W(e.result).filters),e.ui.rawFilterText||(e.ui.rawFilterText=yt(W(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){R(t,`<div class="preview-shell" role="alert">Failed to load base: ${x(r.message||`Unknown error`)}</div>`);return}}R(e.placeholder,`<div class="preview-shell" role="alert">Failed to load base: ${x(r.message||`Unknown error`)}</div>`)}}async exportEntry(e){this.ensureEntryState(e);try{let t=await this.vaultApiClient.exportBaseCsv({activeFilePath:this.getActiveFilePath?.()??``,...e.payload});ie(t.blob,oe(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=ct(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||Ut(e,e.result)}}catch{e.propertyValueOptions.set(t,{cacheKey:n,values:[]})}}async applyTransformedSource(e,t){this.ensureEntryState(e),at(e)?(e.payload.source=t.source,this.replaceBaseSource?.({path:e.payload.path,source:t.source})):(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||!H(e.result).editable)return;let n=t(W(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=yt(W(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??J(W(e.result).filters)??z(`and`));e.ui.builderFilter=n,await this.updateViewConfig(e,t=>(t.filters=_t(n,e.result),t))}async saveAdvancedFilter(e){this.ensureEntryState(e);try{let t=bt(e.ui.rawFilterText??``);e.ui.builderFilter=J(t),await this.updateViewConfig(e,e=>(e.filters=t,e))}catch(e){this.toastController?.show?.(e.message||`Invalid advanced filter`)}}},Gt=`https://viewer.diagrams.net/js/viewer-static.min.js`,Kt=null;function qt(){return window.GraphViewer?.processElements?Promise.resolve(window.GraphViewer):Kt||(Kt=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(),Kt=null,t(Error(`Failed to load draw.io viewer`))},o=()=>{i(),window.GraphViewer?.processElements?e(window.GraphViewer):(Kt=null,t(Error(`draw.io viewer did not initialize`)))};r.addEventListener(`error`,a,{once:!0}),r.addEventListener(`load`,o,{once:!0}),n?window.GraphViewer?.processElements&&o():(r.src=Gt,r.async=!0,r.dataset.collabmdDrawioViewer=`true`,document.head.append(r))}),Kt)}function Jt({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 Yt(e,t={}){let n=await qt(),r=Jt(t);return e.replaceChildren(r),typeof n.createViewerForElement==`function`?n.createViewerForElement(r):n.processElements(),r}var Xt=360,Zt=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(),y(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(),y(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=>{!e.wrapper&&e.placeholder?.isConnected&&(e.mode===`edit`?this.enqueueHydration(e):typeof IntersectionObserver>`u`?ae(e.placeholder,this.previewContainer,Xt)&&this.enqueueHydration(e):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:`${Xt}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=v(()=>{this.hydrationIdleId=null,this.hydrationQueue.splice(0).forEach(e=>{e.queued=!1,this.hydrateEntry(e)})},200)))}hydrateEntry(e){e.placeholder?.isConnected&&!e.wrapper&&(e.mode===`view`?this.hydrateViewerEntry(e):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 Yt(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(T(`/drawio-editor.html`)),n=this.getLocalUser?.()??{},r=k();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`,se(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;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=``):(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`),F(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;F(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;F(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)}else 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`)}else t.type===`request-open-file`?this.onOpenFile?.(n.filePath):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))}}_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 Qt(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 X=420,$t=500,en=15e3,tn=800,nn=3,rn=200,an=`/excalidraw-editor.html`;function on(e,t){let n=e?.querySelectorAll?.(`.excalidraw-embed-placeholder[data-embed-key]`);return Array.from(n||[]).find(e=>e.dataset?.embedKey===t)||null}var sn=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(),y(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(),y(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){this.hydrationPaused=!!e,this.hydrationPaused?(y(this.hydrationIdleId),this.hydrationIdleId=null):(this.hydrateVisibleEmbeds(),this._scheduleHydration())}reconcileEmbeds(e,{isLargeDocument:t=!1}={}){this.isLargeDocument=!!t,this._disconnectPlaceholderObserver(),y(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}=Qt(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=>{e.queued=!1,e.followedPeerId=this.followedPeerIdsByFilePath.get(e.filePath),e.wrapper?this._hydrateEntry(e):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;ae(e.placeholder,this.previewContainer,t)&&this._enqueueHydration(e,{prioritize:!0})}else 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);this.pendingAgentBridgeRequests.set(a,{abort:c,entry:e,resolve:s,timeoutId:l}),r?.addEventListener?.(`abort`,c,{once:!0}),r?.aborted?c():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}={}){!e||e.wrapper||e.queued||(e.queued=!0,t?this.hydrationQueue.unshift(e.key):this.hydrationQueue.push(e.key),!this.hydrationPaused&&(t&&!this.hydrationInProgress&&this.hydrationIdleId===null?this._flushHydrationQueue():this._scheduleHydration()))}_scheduleHydration(){this.hydrationPaused||this.hydrationInProgress||this.hydrationIdleId!==null||(this.hydrationIdleId=v(()=>{this.hydrationIdleId=null,this._flushHydrationQueue()},$t))}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);!n||n.wrapper||!n.placeholder?.isConnected?n&&(n.queued=!1):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:on(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=en){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){e?.iframe?.isConnected&&((e.bootAttempts??0)>=nn?(this._clearEntryBootTimeout(e),this.toastController?.show(`Excalidraw embed timed out: ${e.label}`)):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(T(an))}catch{return null}let n=this.getTheme?.()||`dark`,r=k();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=O();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`),F(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`),F(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=`${X}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=`${X}px`,p=()=>{F(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||`${X}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,rn),tn);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:on(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||``)||X,a=n?0:e.wrapper.querySelector(`.excalidraw-embed-resizer`)?.offsetHeight||0,o=Math.ceil(r+i+a);n||(e.inlineHeightPx=o),t.style.height=`${Math.ceil(e.inlineHeightPx||o||X)}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`):(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)}else if(t.type===`request-toggle-quick-switcher`)this.onToggleQuickSwitcher?.();else if(t.type===`stop-following`)this.onStopFollowing?.();else if(t.type===`open-element-link`){let e=ce(t.href,{appPath:E(`/`),origin:window.location.origin});e&&this.onOpenElement?.(e)}else if(t.type===`error`){if(n.isParked)return;n.isReady=!1,this._handleEntryBootTimeout(n)}else if(t.type===`disconnect-ready`){let e=this.pendingDisconnectRequests.get(t.requestId);e?.entry===n&&e.resolve(!0)}else 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`)})}else t.type===`disconnect-blocked`?(n.authorityState=t.state||`reconnecting-readonly`,this.toastController?.show?.(`Waiting for the diagram to reconnect before leaving`)):t.type===`excalidraw-authority-state`?(n.authorityState=t.state||`closed`,n.hasPendingWrites=!!t.hasPendingWrites):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})}},cn=16/9,ln=240,un=720,dn=180;function fn(e){return Math.max(dn,Math.min(un,Math.ceil(e||ln)))}var pn=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}=Qt(this.embedEntries,t);r.forEach(e=>this._destroyEntry(e)),this.embedEntries=n,this.embedEntries.forEach(e=>{e.aspectRatio=e.aspectRatio||cn,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=fn(n>0?n/(e.aspectRatio||cn):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 mn(e,t=[],n=[],r=[]){for(let i of e)i?.path&&i?.type&&(n.push({lowerPath:String(i.path).toLowerCase(),name:i.name,path:i.path,type:i.type}),i.type===`directory`?i.type===`directory`&&Array.isArray(i.children)&&mn(i.children,t,n,r):(t.push(i.path),r.push({mtimeMs:i.mtimeMs,path:i.path})));return{fileEntries:r,files:t,searchEntries:n}}function hn(e,t){for(let n of e??[]){if(n?.path===t)return n;if(n?.type===`directory`&&Array.isArray(n.children)){let e=hn(n.children,t);if(e)return e}}return null}function gn(e){let t=0,n=0;for(let r of e?.children??[])if(r?.type===`directory`){t+=1;let e=gn(r);t+=e.directoryCount,n+=e.fileCount}else n+=1;return{directoryCount:t,fileCount:n}}function _n(e,t,n){return e===t?n:`${n}${e.slice(t.length)}`}var vn=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=mn(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 hn(this.tree,e)}getDirectoryDescendantSummary(e){let t=this.getNode(e);return!t||t.type!==`directory`?{directoryCount:0,fileCount:0}:gn(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=>{r===e||r.startsWith(`${e}/`)?n.add(_n(r,e,t)):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,yn=6,bn=.25,xn=2,$=6;function Sn(e){let t=Number(e);return Number.isFinite(t)?Math.min(yn,Math.max(Q,Math.round(t*100)/100)):Q}function Cn(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 wn=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=>{this.isOpen&&(e.key===`+`||e.key===`=`?(e.preventDefault(),this.zoomBy(bn)):e.key===`-`?(e.preventDefault(),this.zoomBy(-.25)):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=Sn(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=Sn(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();else 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)}else this.stopDrag()}clampOffsets(){!this.viewport||!this.imageElement?(this.offsetX=0,this.offsetY=0):(this.offsetX=Cn(this.offsetX,{contentSize:this.imageElement.offsetWidth||0,scale:this.scale,viewportSize:this.viewport.clientWidth||0}),this.offsetY=Cn(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(bn)),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?bn:-.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=>{this.isOpen&&(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()):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()}else this.updateDrag(e.pointerId,e.clientX,e.clientY)}});let p=e=>{e.pointerType===`touch`?(this.touchPointers.delete(e.pointerId),this.releasePointer(e.pointerId),this.activePointerId===e.pointerId&&this.stopDrag(e.pointerId),this.syncTouchGestureAfterPointerChange()):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=>{this.isOpen&&(e.preventDefault(),e.stopPropagation(),this.didDrag?this.didDrag=!1:this.scale<=Q&&this.setScale(xn))}),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{sn as a,Wt as c,L as d,I as f,ye as g,be as h,pn as i,Be as l,F as m,vn as n,Zt as o,Le as p,mn as r,Yt as s,wn as t,ze as u};
|