tmg-media-player 0.0.1
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/LICENSE +21 -0
- package/README.md +38 -0
- package/dist/chunk-25AZZYCL.js +85 -0
- package/dist/chunk-25AZZYCL.js.map +1 -0
- package/dist/chunk-25IKIKAB.js +60 -0
- package/dist/chunk-25IKIKAB.js.map +1 -0
- package/dist/chunk-25ZZLGZ6.js +45 -0
- package/dist/chunk-25ZZLGZ6.js.map +1 -0
- package/dist/chunk-274C5J22.js +12 -0
- package/dist/chunk-274C5J22.js.map +1 -0
- package/dist/chunk-27FHLV4M.js +12 -0
- package/dist/chunk-27FHLV4M.js.map +1 -0
- package/dist/chunk-27MVVVJ7.js +405 -0
- package/dist/chunk-27MVVVJ7.js.map +1 -0
- package/dist/chunk-27SBY2N7.js +50 -0
- package/dist/chunk-27SBY2N7.js.map +1 -0
- package/dist/chunk-2J3FJY73.js +9 -0
- package/dist/chunk-2J3FJY73.js.map +1 -0
- package/dist/chunk-2JW4RYM4.js +170 -0
- package/dist/chunk-2JW4RYM4.js.map +1 -0
- package/dist/chunk-2PA7FU47.js +185 -0
- package/dist/chunk-2PA7FU47.js.map +1 -0
- package/dist/chunk-2VOAIUTU.js +9 -0
- package/dist/chunk-2VOAIUTU.js.map +1 -0
- package/dist/chunk-2W5XWGGE.js +7 -0
- package/dist/chunk-2W5XWGGE.js.map +1 -0
- package/dist/chunk-3C3GK24X.js +88 -0
- package/dist/chunk-3C3GK24X.js.map +1 -0
- package/dist/chunk-3KD22Z7D.js +9 -0
- package/dist/chunk-3KD22Z7D.js.map +1 -0
- package/dist/chunk-3OLEZVYI.js +196 -0
- package/dist/chunk-3OLEZVYI.js.map +1 -0
- package/dist/chunk-3OZEBWCF.js +12 -0
- package/dist/chunk-3OZEBWCF.js.map +1 -0
- package/dist/chunk-3T5CFCYB.js +45 -0
- package/dist/chunk-3T5CFCYB.js.map +1 -0
- package/dist/chunk-3VCTHGL6.js +86 -0
- package/dist/chunk-3VCTHGL6.js.map +1 -0
- package/dist/chunk-3WHPH6Q5.js +9 -0
- package/dist/chunk-3WHPH6Q5.js.map +1 -0
- package/dist/chunk-43MLKGCT.js +45 -0
- package/dist/chunk-43MLKGCT.js.map +1 -0
- package/dist/chunk-46QVDU2K.js +25 -0
- package/dist/chunk-46QVDU2K.js.map +1 -0
- package/dist/chunk-474PEQ33.js +78 -0
- package/dist/chunk-474PEQ33.js.map +1 -0
- package/dist/chunk-4FCGFO2J.js +9 -0
- package/dist/chunk-4FCGFO2J.js.map +1 -0
- package/dist/chunk-4JOPUUAL.js +185 -0
- package/dist/chunk-4JOPUUAL.js.map +1 -0
- package/dist/chunk-4QQXED6P.js +11 -0
- package/dist/chunk-4QQXED6P.js.map +1 -0
- package/dist/chunk-4VG5KHDO.js +52 -0
- package/dist/chunk-4VG5KHDO.js.map +1 -0
- package/dist/chunk-4W6H5CZF.js +1 -0
- package/dist/chunk-4W6H5CZF.js.map +1 -0
- package/dist/chunk-56CRICX7.js +154 -0
- package/dist/chunk-56CRICX7.js.map +1 -0
- package/dist/chunk-57L2PE3B.js +9 -0
- package/dist/chunk-57L2PE3B.js.map +1 -0
- package/dist/chunk-5CLVIO4N.js +33 -0
- package/dist/chunk-5CLVIO4N.js.map +1 -0
- package/dist/chunk-5GX67WSG.js +7 -0
- package/dist/chunk-5GX67WSG.js.map +1 -0
- package/dist/chunk-5SGNTRPL.js +47 -0
- package/dist/chunk-5SGNTRPL.js.map +1 -0
- package/dist/chunk-5TJURBKV.js +9 -0
- package/dist/chunk-5TJURBKV.js.map +1 -0
- package/dist/chunk-63E6JXTT.js +162 -0
- package/dist/chunk-63E6JXTT.js.map +1 -0
- package/dist/chunk-66HGOYPR.js +180 -0
- package/dist/chunk-66HGOYPR.js.map +1 -0
- package/dist/chunk-6IFGKHVM.js +9 -0
- package/dist/chunk-6IFGKHVM.js.map +1 -0
- package/dist/chunk-6K4HCMUL.js +32 -0
- package/dist/chunk-6K4HCMUL.js.map +1 -0
- package/dist/chunk-6KYXFWBF.js +32 -0
- package/dist/chunk-6KYXFWBF.js.map +1 -0
- package/dist/chunk-6R5BZZM6.js +95 -0
- package/dist/chunk-6R5BZZM6.js.map +1 -0
- package/dist/chunk-6S5BMP4A.js +9 -0
- package/dist/chunk-6S5BMP4A.js.map +1 -0
- package/dist/chunk-6SHHKTGD.js +73 -0
- package/dist/chunk-6SHHKTGD.js.map +1 -0
- package/dist/chunk-6U3M7V32.js +46 -0
- package/dist/chunk-6U3M7V32.js.map +1 -0
- package/dist/chunk-73XT2QVM.js +47 -0
- package/dist/chunk-73XT2QVM.js.map +1 -0
- package/dist/chunk-7FB3XGXR.js +471 -0
- package/dist/chunk-7FB3XGXR.js.map +1 -0
- package/dist/chunk-7HRR4LG4.js +115 -0
- package/dist/chunk-7HRR4LG4.js.map +1 -0
- package/dist/chunk-7I6DRKIN.js +58 -0
- package/dist/chunk-7I6DRKIN.js.map +1 -0
- package/dist/chunk-7MOZI57I.js +59 -0
- package/dist/chunk-7MOZI57I.js.map +1 -0
- package/dist/chunk-7PHLWSKV.js +95 -0
- package/dist/chunk-7PHLWSKV.js.map +1 -0
- package/dist/chunk-7Y4LQ5ED.js +45 -0
- package/dist/chunk-7Y4LQ5ED.js.map +1 -0
- package/dist/chunk-7YDZDHZH.js +19 -0
- package/dist/chunk-7YDZDHZH.js.map +1 -0
- package/dist/chunk-A7EG6K2X.js +54 -0
- package/dist/chunk-A7EG6K2X.js.map +1 -0
- package/dist/chunk-ABRBZ4IH.js +108 -0
- package/dist/chunk-ABRBZ4IH.js.map +1 -0
- package/dist/chunk-ACF6B245.js +17 -0
- package/dist/chunk-ACF6B245.js.map +1 -0
- package/dist/chunk-ACUUGJUG.js +53 -0
- package/dist/chunk-ACUUGJUG.js.map +1 -0
- package/dist/chunk-AIYSHJLG.js +42 -0
- package/dist/chunk-AIYSHJLG.js.map +1 -0
- package/dist/chunk-AKHJD2A3.js +50 -0
- package/dist/chunk-AKHJD2A3.js.map +1 -0
- package/dist/chunk-ATE4NMIF.js +22 -0
- package/dist/chunk-ATE4NMIF.js.map +1 -0
- package/dist/chunk-AZTSMVMN.js +138 -0
- package/dist/chunk-AZTSMVMN.js.map +1 -0
- package/dist/chunk-BFFQZMZX.js +108 -0
- package/dist/chunk-BFFQZMZX.js.map +1 -0
- package/dist/chunk-BKJRLSXA.js +329 -0
- package/dist/chunk-BKJRLSXA.js.map +1 -0
- package/dist/chunk-BLJDDFX2.js +228 -0
- package/dist/chunk-BLJDDFX2.js.map +1 -0
- package/dist/chunk-BROAUWON.js +123 -0
- package/dist/chunk-BROAUWON.js.map +1 -0
- package/dist/chunk-BU4AX4DA.js +49 -0
- package/dist/chunk-BU4AX4DA.js.map +1 -0
- package/dist/chunk-C2TANFKK.js +167 -0
- package/dist/chunk-C2TANFKK.js.map +1 -0
- package/dist/chunk-CAIDFMLB.js +164 -0
- package/dist/chunk-CAIDFMLB.js.map +1 -0
- package/dist/chunk-CCD3ZXIT.js +54 -0
- package/dist/chunk-CCD3ZXIT.js.map +1 -0
- package/dist/chunk-CEEX3HQ2.js +44 -0
- package/dist/chunk-CEEX3HQ2.js.map +1 -0
- package/dist/chunk-CIN7HWLH.js +26 -0
- package/dist/chunk-CIN7HWLH.js.map +1 -0
- package/dist/chunk-CL24QYM6.js +48 -0
- package/dist/chunk-CL24QYM6.js.map +1 -0
- package/dist/chunk-CTSPKWKN.js +9 -0
- package/dist/chunk-CTSPKWKN.js.map +1 -0
- package/dist/chunk-CYUYF57A.js +139 -0
- package/dist/chunk-CYUYF57A.js.map +1 -0
- package/dist/chunk-D5XNDZ4S.js +21 -0
- package/dist/chunk-D5XNDZ4S.js.map +1 -0
- package/dist/chunk-D7JQDN74.js +9 -0
- package/dist/chunk-D7JQDN74.js.map +1 -0
- package/dist/chunk-DKS7SZFN.js +165 -0
- package/dist/chunk-DKS7SZFN.js.map +1 -0
- package/dist/chunk-DM4ZIS4L.js +50 -0
- package/dist/chunk-DM4ZIS4L.js.map +1 -0
- package/dist/chunk-DNY72SCR.js +9 -0
- package/dist/chunk-DNY72SCR.js.map +1 -0
- package/dist/chunk-DQLWWVM3.js +25 -0
- package/dist/chunk-DQLWWVM3.js.map +1 -0
- package/dist/chunk-E56H3EOR.js +1 -0
- package/dist/chunk-E56H3EOR.js.map +1 -0
- package/dist/chunk-E56PSUT2.js +435 -0
- package/dist/chunk-E56PSUT2.js.map +1 -0
- package/dist/chunk-EF7RQIJK.js +9 -0
- package/dist/chunk-EF7RQIJK.js.map +1 -0
- package/dist/chunk-EHQJNRJV.js +449 -0
- package/dist/chunk-EHQJNRJV.js.map +1 -0
- package/dist/chunk-EIT6CZXJ.js +50 -0
- package/dist/chunk-EIT6CZXJ.js.map +1 -0
- package/dist/chunk-ERPQNMED.js +292 -0
- package/dist/chunk-ERPQNMED.js.map +1 -0
- package/dist/chunk-ESAOH6X5.js +15 -0
- package/dist/chunk-ESAOH6X5.js.map +1 -0
- package/dist/chunk-ESNKONBW.js +80 -0
- package/dist/chunk-ESNKONBW.js.map +1 -0
- package/dist/chunk-EUQ7SC5J.js +33 -0
- package/dist/chunk-EUQ7SC5J.js.map +1 -0
- package/dist/chunk-EUX3RZ3L.js +66 -0
- package/dist/chunk-EUX3RZ3L.js.map +1 -0
- package/dist/chunk-EVUTNLHC.js +7 -0
- package/dist/chunk-EVUTNLHC.js.map +1 -0
- package/dist/chunk-EY7PB3LA.js +59 -0
- package/dist/chunk-EY7PB3LA.js.map +1 -0
- package/dist/chunk-FCQDAU2C.js +7 -0
- package/dist/chunk-FCQDAU2C.js.map +1 -0
- package/dist/chunk-FHL5Z6MX.js +13 -0
- package/dist/chunk-FHL5Z6MX.js.map +1 -0
- package/dist/chunk-FIUVWAAQ.js +35 -0
- package/dist/chunk-FIUVWAAQ.js.map +1 -0
- package/dist/chunk-FN32KVQT.js +188 -0
- package/dist/chunk-FN32KVQT.js.map +1 -0
- package/dist/chunk-FX3UTAZK.js +31 -0
- package/dist/chunk-FX3UTAZK.js.map +1 -0
- package/dist/chunk-FXIL7BGP.js +43 -0
- package/dist/chunk-FXIL7BGP.js.map +1 -0
- package/dist/chunk-G7KANQFO.js +131 -0
- package/dist/chunk-G7KANQFO.js.map +1 -0
- package/dist/chunk-GDC7I2CJ.js +66 -0
- package/dist/chunk-GDC7I2CJ.js.map +1 -0
- package/dist/chunk-GM7YMURS.js +14 -0
- package/dist/chunk-GM7YMURS.js.map +1 -0
- package/dist/chunk-GQ7ITX5B.js +7 -0
- package/dist/chunk-GQ7ITX5B.js.map +1 -0
- package/dist/chunk-GSKI4IRL.js +34 -0
- package/dist/chunk-GSKI4IRL.js.map +1 -0
- package/dist/chunk-GUIBL2MZ.js +1 -0
- package/dist/chunk-GUIBL2MZ.js.map +1 -0
- package/dist/chunk-H24E5FRE.js +9 -0
- package/dist/chunk-H24E5FRE.js.map +1 -0
- package/dist/chunk-HA2GK6KH.js +9 -0
- package/dist/chunk-HA2GK6KH.js.map +1 -0
- package/dist/chunk-HCSCY6DU.js +458 -0
- package/dist/chunk-HCSCY6DU.js.map +1 -0
- package/dist/chunk-HGXGXW2U.js +26 -0
- package/dist/chunk-HGXGXW2U.js.map +1 -0
- package/dist/chunk-HH7PMFLU.js +33 -0
- package/dist/chunk-HH7PMFLU.js.map +1 -0
- package/dist/chunk-HJORMYPQ.js +66 -0
- package/dist/chunk-HJORMYPQ.js.map +1 -0
- package/dist/chunk-HN2UT66M.js +9 -0
- package/dist/chunk-HN2UT66M.js.map +1 -0
- package/dist/chunk-HNPBSC2A.js +132 -0
- package/dist/chunk-HNPBSC2A.js.map +1 -0
- package/dist/chunk-HNTARWVL.js +57 -0
- package/dist/chunk-HNTARWVL.js.map +1 -0
- package/dist/chunk-HPPHGUTD.js +1 -0
- package/dist/chunk-HPPHGUTD.js.map +1 -0
- package/dist/chunk-HPWORM77.js +199 -0
- package/dist/chunk-HPWORM77.js.map +1 -0
- package/dist/chunk-HYG6W442.js +66 -0
- package/dist/chunk-HYG6W442.js.map +1 -0
- package/dist/chunk-I3LBJOUW.js +249 -0
- package/dist/chunk-I3LBJOUW.js.map +1 -0
- package/dist/chunk-I47VPMZS.js +40 -0
- package/dist/chunk-I47VPMZS.js.map +1 -0
- package/dist/chunk-ID72UAJE.js +7 -0
- package/dist/chunk-ID72UAJE.js.map +1 -0
- package/dist/chunk-IENUYESB.js +33 -0
- package/dist/chunk-IENUYESB.js.map +1 -0
- package/dist/chunk-IFYBKLFH.js +15 -0
- package/dist/chunk-IFYBKLFH.js.map +1 -0
- package/dist/chunk-IJJ4F6HI.js +105 -0
- package/dist/chunk-IJJ4F6HI.js.map +1 -0
- package/dist/chunk-IKKQYZNA.js +43 -0
- package/dist/chunk-IKKQYZNA.js.map +1 -0
- package/dist/chunk-IUS3FRXS.js +446 -0
- package/dist/chunk-IUS3FRXS.js.map +1 -0
- package/dist/chunk-IVA7LFT2.js +12 -0
- package/dist/chunk-IVA7LFT2.js.map +1 -0
- package/dist/chunk-IXLSSEE7.js +39 -0
- package/dist/chunk-IXLSSEE7.js.map +1 -0
- package/dist/chunk-J2SIL62L.js +142 -0
- package/dist/chunk-J2SIL62L.js.map +1 -0
- package/dist/chunk-J54J2AED.js +117 -0
- package/dist/chunk-J54J2AED.js.map +1 -0
- package/dist/chunk-JFWYJV3J.js +61 -0
- package/dist/chunk-JFWYJV3J.js.map +1 -0
- package/dist/chunk-JP5X5JDL.js +10 -0
- package/dist/chunk-JP5X5JDL.js.map +1 -0
- package/dist/chunk-JPWNE7JO.js +11 -0
- package/dist/chunk-JPWNE7JO.js.map +1 -0
- package/dist/chunk-JRWYWTTT.js +9 -0
- package/dist/chunk-JRWYWTTT.js.map +1 -0
- package/dist/chunk-JZXJAJNW.js +316 -0
- package/dist/chunk-JZXJAJNW.js.map +1 -0
- package/dist/chunk-K4UHBEDT.js +9 -0
- package/dist/chunk-K4UHBEDT.js.map +1 -0
- package/dist/chunk-K7AAKFQF.js +12 -0
- package/dist/chunk-K7AAKFQF.js.map +1 -0
- package/dist/chunk-KD3OBG25.js +15 -0
- package/dist/chunk-KD3OBG25.js.map +1 -0
- package/dist/chunk-KJ74PGBI.js +45 -0
- package/dist/chunk-KJ74PGBI.js.map +1 -0
- package/dist/chunk-KLAI7YSD.js +7 -0
- package/dist/chunk-KLAI7YSD.js.map +1 -0
- package/dist/chunk-KMENKVHP.js +110 -0
- package/dist/chunk-KMENKVHP.js.map +1 -0
- package/dist/chunk-KOAHN3L5.js +9 -0
- package/dist/chunk-KOAHN3L5.js.map +1 -0
- package/dist/chunk-KQXT3GDF.js +16 -0
- package/dist/chunk-KQXT3GDF.js.map +1 -0
- package/dist/chunk-L6J66EOL.js +44 -0
- package/dist/chunk-L6J66EOL.js.map +1 -0
- package/dist/chunk-LNUYM3ZX.js +26 -0
- package/dist/chunk-LNUYM3ZX.js.map +1 -0
- package/dist/chunk-LSKNTXY2.js +57 -0
- package/dist/chunk-LSKNTXY2.js.map +1 -0
- package/dist/chunk-LTEL7NEG.js +219 -0
- package/dist/chunk-LTEL7NEG.js.map +1 -0
- package/dist/chunk-LTVS74EO.js +45 -0
- package/dist/chunk-LTVS74EO.js.map +1 -0
- package/dist/chunk-LVDP2QOX.js +99 -0
- package/dist/chunk-LVDP2QOX.js.map +1 -0
- package/dist/chunk-LWLNQS3O.js +569 -0
- package/dist/chunk-LWLNQS3O.js.map +1 -0
- package/dist/chunk-LYKZAKVN.js +19 -0
- package/dist/chunk-LYKZAKVN.js.map +1 -0
- package/dist/chunk-M2NVOKGL.js +97 -0
- package/dist/chunk-M2NVOKGL.js.map +1 -0
- package/dist/chunk-M3UOD7TX.js +427 -0
- package/dist/chunk-M3UOD7TX.js.map +1 -0
- package/dist/chunk-M5C4XQO2.js +45 -0
- package/dist/chunk-M5C4XQO2.js.map +1 -0
- package/dist/chunk-M5DFGJF7.js +10 -0
- package/dist/chunk-M5DFGJF7.js.map +1 -0
- package/dist/chunk-MAXX5M6N.js +9 -0
- package/dist/chunk-MAXX5M6N.js.map +1 -0
- package/dist/chunk-MEAGFRLE.js +37 -0
- package/dist/chunk-MEAGFRLE.js.map +1 -0
- package/dist/chunk-MFYNCWAO.js +25 -0
- package/dist/chunk-MFYNCWAO.js.map +1 -0
- package/dist/chunk-MJ26PFRF.js +12 -0
- package/dist/chunk-MJ26PFRF.js.map +1 -0
- package/dist/chunk-MP2GRDUX.js +10 -0
- package/dist/chunk-MP2GRDUX.js.map +1 -0
- package/dist/chunk-MTQLUS5O.js +51 -0
- package/dist/chunk-MTQLUS5O.js.map +1 -0
- package/dist/chunk-MUDO3ZPJ.js +10 -0
- package/dist/chunk-MUDO3ZPJ.js.map +1 -0
- package/dist/chunk-N2Q3TZXW.js +9 -0
- package/dist/chunk-N2Q3TZXW.js.map +1 -0
- package/dist/chunk-N52KK6K5.js +48 -0
- package/dist/chunk-N52KK6K5.js.map +1 -0
- package/dist/chunk-N5F2YHLD.js +28 -0
- package/dist/chunk-N5F2YHLD.js.map +1 -0
- package/dist/chunk-NGX5YDCB.js +7 -0
- package/dist/chunk-NGX5YDCB.js.map +1 -0
- package/dist/chunk-NHDRXRXA.js +33 -0
- package/dist/chunk-NHDRXRXA.js.map +1 -0
- package/dist/chunk-NPK5ITEG.js +7 -0
- package/dist/chunk-NPK5ITEG.js.map +1 -0
- package/dist/chunk-NPTM6BGC.js +15 -0
- package/dist/chunk-NPTM6BGC.js.map +1 -0
- package/dist/chunk-NTNVW4BG.js +7 -0
- package/dist/chunk-NTNVW4BG.js.map +1 -0
- package/dist/chunk-OBASYXH2.js +26 -0
- package/dist/chunk-OBASYXH2.js.map +1 -0
- package/dist/chunk-OBQNTU5F.js +7 -0
- package/dist/chunk-OBQNTU5F.js.map +1 -0
- package/dist/chunk-OEHNS7YX.js +7 -0
- package/dist/chunk-OEHNS7YX.js.map +1 -0
- package/dist/chunk-OJAUFHEW.js +107 -0
- package/dist/chunk-OJAUFHEW.js.map +1 -0
- package/dist/chunk-ONW4BD2Z.js +38 -0
- package/dist/chunk-ONW4BD2Z.js.map +1 -0
- package/dist/chunk-OOXUZMZ7.js +9 -0
- package/dist/chunk-OOXUZMZ7.js.map +1 -0
- package/dist/chunk-OP3PIADD.js +45 -0
- package/dist/chunk-OP3PIADD.js.map +1 -0
- package/dist/chunk-OSDM6ZVT.js +7 -0
- package/dist/chunk-OSDM6ZVT.js.map +1 -0
- package/dist/chunk-OZEEIRCS.js +9 -0
- package/dist/chunk-OZEEIRCS.js.map +1 -0
- package/dist/chunk-PGSBJUJ4.js +9 -0
- package/dist/chunk-PGSBJUJ4.js.map +1 -0
- package/dist/chunk-PPIDZONA.js +38 -0
- package/dist/chunk-PPIDZONA.js.map +1 -0
- package/dist/chunk-PTMZQ7E3.js +7 -0
- package/dist/chunk-PTMZQ7E3.js.map +1 -0
- package/dist/chunk-PV24XKW2.js +11 -0
- package/dist/chunk-PV24XKW2.js.map +1 -0
- package/dist/chunk-PXU563OY.js +26 -0
- package/dist/chunk-PXU563OY.js.map +1 -0
- package/dist/chunk-Q2XYS26I.js +11 -0
- package/dist/chunk-Q2XYS26I.js.map +1 -0
- package/dist/chunk-Q5NG3DY7.js +31 -0
- package/dist/chunk-Q5NG3DY7.js.map +1 -0
- package/dist/chunk-QADXAWA6.js +71 -0
- package/dist/chunk-QADXAWA6.js.map +1 -0
- package/dist/chunk-QG2FZCJ6.js +7 -0
- package/dist/chunk-QG2FZCJ6.js.map +1 -0
- package/dist/chunk-QMLGJPHC.js +7 -0
- package/dist/chunk-QMLGJPHC.js.map +1 -0
- package/dist/chunk-QQKXAEXW.js +50 -0
- package/dist/chunk-QQKXAEXW.js.map +1 -0
- package/dist/chunk-QS3C4KCF.js +95 -0
- package/dist/chunk-QS3C4KCF.js.map +1 -0
- package/dist/chunk-R4HNE7TL.js +7 -0
- package/dist/chunk-R4HNE7TL.js.map +1 -0
- package/dist/chunk-R5PBXGKK.js +10 -0
- package/dist/chunk-R5PBXGKK.js.map +1 -0
- package/dist/chunk-RFQXCN62.js +13 -0
- package/dist/chunk-RFQXCN62.js.map +1 -0
- package/dist/chunk-RGPGW4ZJ.js +9 -0
- package/dist/chunk-RGPGW4ZJ.js.map +1 -0
- package/dist/chunk-RKBRRJY6.js +9 -0
- package/dist/chunk-RKBRRJY6.js.map +1 -0
- package/dist/chunk-RM6NFJ7V.js +32 -0
- package/dist/chunk-RM6NFJ7V.js.map +1 -0
- package/dist/chunk-RRYAXULQ.js +48 -0
- package/dist/chunk-RRYAXULQ.js.map +1 -0
- package/dist/chunk-RS4W2FAL.js +89 -0
- package/dist/chunk-RS4W2FAL.js.map +1 -0
- package/dist/chunk-RSUFDTAH.js +110 -0
- package/dist/chunk-RSUFDTAH.js.map +1 -0
- package/dist/chunk-S2XKXJNC.js +30 -0
- package/dist/chunk-S2XKXJNC.js.map +1 -0
- package/dist/chunk-S4NKJDRC.js +79 -0
- package/dist/chunk-S4NKJDRC.js.map +1 -0
- package/dist/chunk-S7QGB2FC.js +27 -0
- package/dist/chunk-S7QGB2FC.js.map +1 -0
- package/dist/chunk-SCL4FW6F.js +425 -0
- package/dist/chunk-SCL4FW6F.js.map +1 -0
- package/dist/chunk-SITF6GNM.js +7 -0
- package/dist/chunk-SITF6GNM.js.map +1 -0
- package/dist/chunk-SPCINICO.js +5 -0
- package/dist/chunk-SPCINICO.js.map +1 -0
- package/dist/chunk-SPOTTHMN.js +24 -0
- package/dist/chunk-SPOTTHMN.js.map +1 -0
- package/dist/chunk-SWYNIQHD.js +77 -0
- package/dist/chunk-SWYNIQHD.js.map +1 -0
- package/dist/chunk-SXXITYPP.js +69 -0
- package/dist/chunk-SXXITYPP.js.map +1 -0
- package/dist/chunk-T4YZKI3Y.js +133 -0
- package/dist/chunk-T4YZKI3Y.js.map +1 -0
- package/dist/chunk-T7AIKZ6A.js +44 -0
- package/dist/chunk-T7AIKZ6A.js.map +1 -0
- package/dist/chunk-T7EX6RI2.js +34 -0
- package/dist/chunk-T7EX6RI2.js.map +1 -0
- package/dist/chunk-TB3GE2MH.js +93 -0
- package/dist/chunk-TB3GE2MH.js.map +1 -0
- package/dist/chunk-TE4JFCHB.js +52 -0
- package/dist/chunk-TE4JFCHB.js.map +1 -0
- package/dist/chunk-TGQYCEFL.js +37 -0
- package/dist/chunk-TGQYCEFL.js.map +1 -0
- package/dist/chunk-TMTWPBFD.js +10 -0
- package/dist/chunk-TMTWPBFD.js.map +1 -0
- package/dist/chunk-TSAEQFDM.js +65 -0
- package/dist/chunk-TSAEQFDM.js.map +1 -0
- package/dist/chunk-U3FX24C6.js +1 -0
- package/dist/chunk-U3FX24C6.js.map +1 -0
- package/dist/chunk-U776U22S.js +45 -0
- package/dist/chunk-U776U22S.js.map +1 -0
- package/dist/chunk-UCBDCGYX.js +9 -0
- package/dist/chunk-UCBDCGYX.js.map +1 -0
- package/dist/chunk-UGNYASFC.js +59 -0
- package/dist/chunk-UGNYASFC.js.map +1 -0
- package/dist/chunk-UJTVBENE.js +7 -0
- package/dist/chunk-UJTVBENE.js.map +1 -0
- package/dist/chunk-UKVFVAOO.js +75 -0
- package/dist/chunk-UKVFVAOO.js.map +1 -0
- package/dist/chunk-URKWHZXA.js +25 -0
- package/dist/chunk-URKWHZXA.js.map +1 -0
- package/dist/chunk-UVKRO5ER.js +13 -0
- package/dist/chunk-UVKRO5ER.js.map +1 -0
- package/dist/chunk-V3D7FBSR.js +14 -0
- package/dist/chunk-V3D7FBSR.js.map +1 -0
- package/dist/chunk-VCVMCKZI.js +10 -0
- package/dist/chunk-VCVMCKZI.js.map +1 -0
- package/dist/chunk-VNGMGQF5.js +1 -0
- package/dist/chunk-VNGMGQF5.js.map +1 -0
- package/dist/chunk-VSK7766S.js +163 -0
- package/dist/chunk-VSK7766S.js.map +1 -0
- package/dist/chunk-VZLDFZC7.js +241 -0
- package/dist/chunk-VZLDFZC7.js.map +1 -0
- package/dist/chunk-W2KUESDN.js +25 -0
- package/dist/chunk-W2KUESDN.js.map +1 -0
- package/dist/chunk-W2SHHRYX.js +420 -0
- package/dist/chunk-W2SHHRYX.js.map +1 -0
- package/dist/chunk-WBLZ5GBM.js +158 -0
- package/dist/chunk-WBLZ5GBM.js.map +1 -0
- package/dist/chunk-WODJ2VQH.js +41 -0
- package/dist/chunk-WODJ2VQH.js.map +1 -0
- package/dist/chunk-WQXLL5IV.js +9 -0
- package/dist/chunk-WQXLL5IV.js.map +1 -0
- package/dist/chunk-WR3327CL.js +89 -0
- package/dist/chunk-WR3327CL.js.map +1 -0
- package/dist/chunk-WSBH5QD6.js +309 -0
- package/dist/chunk-WSBH5QD6.js.map +1 -0
- package/dist/chunk-WTHHXWQM.js +7 -0
- package/dist/chunk-WTHHXWQM.js.map +1 -0
- package/dist/chunk-WW56NFQS.js +7 -0
- package/dist/chunk-WW56NFQS.js.map +1 -0
- package/dist/chunk-WYVXNXZI.js +73 -0
- package/dist/chunk-WYVXNXZI.js.map +1 -0
- package/dist/chunk-X3MYMAS2.js +56 -0
- package/dist/chunk-X3MYMAS2.js.map +1 -0
- package/dist/chunk-X7CDYCQF.js +22 -0
- package/dist/chunk-X7CDYCQF.js.map +1 -0
- package/dist/chunk-XGVDXMS3.js +90 -0
- package/dist/chunk-XGVDXMS3.js.map +1 -0
- package/dist/chunk-XHXIXEGS.js +7 -0
- package/dist/chunk-XHXIXEGS.js.map +1 -0
- package/dist/chunk-XJ6HO3WP.js +46 -0
- package/dist/chunk-XJ6HO3WP.js.map +1 -0
- package/dist/chunk-XMR6HHTA.js +59 -0
- package/dist/chunk-XMR6HHTA.js.map +1 -0
- package/dist/chunk-XR2KBJIP.js +54 -0
- package/dist/chunk-XR2KBJIP.js.map +1 -0
- package/dist/chunk-XVN5W3A7.js +50 -0
- package/dist/chunk-XVN5W3A7.js.map +1 -0
- package/dist/chunk-XXYOJDOZ.js +11 -0
- package/dist/chunk-XXYOJDOZ.js.map +1 -0
- package/dist/chunk-XZROR7RJ.js +25 -0
- package/dist/chunk-XZROR7RJ.js.map +1 -0
- package/dist/chunk-YF3LWJL4.js +7 -0
- package/dist/chunk-YF3LWJL4.js.map +1 -0
- package/dist/chunk-YFM4P3Z3.js +309 -0
- package/dist/chunk-YFM4P3Z3.js.map +1 -0
- package/dist/chunk-YFVOBSKP.js +52 -0
- package/dist/chunk-YFVOBSKP.js.map +1 -0
- package/dist/chunk-YFZW72PC.js +45 -0
- package/dist/chunk-YFZW72PC.js.map +1 -0
- package/dist/chunk-YHTCXXEG.js +9 -0
- package/dist/chunk-YHTCXXEG.js.map +1 -0
- package/dist/chunk-YJVUJ6AA.js +93 -0
- package/dist/chunk-YJVUJ6AA.js.map +1 -0
- package/dist/chunk-YKB67FZ5.js +46 -0
- package/dist/chunk-YKB67FZ5.js.map +1 -0
- package/dist/chunk-YS2PK7QA.js +35 -0
- package/dist/chunk-YS2PK7QA.js.map +1 -0
- package/dist/chunk-YURDFQ6X.js +33 -0
- package/dist/chunk-YURDFQ6X.js.map +1 -0
- package/dist/chunk-YVCKIDL5.js +61 -0
- package/dist/chunk-YVCKIDL5.js.map +1 -0
- package/dist/chunk-YXO6NQ4E.js +49 -0
- package/dist/chunk-YXO6NQ4E.js.map +1 -0
- package/dist/chunk-Z2AEG3J7.js +53 -0
- package/dist/chunk-Z2AEG3J7.js.map +1 -0
- package/dist/chunk-Z4I2MQ7B.js +26 -0
- package/dist/chunk-Z4I2MQ7B.js.map +1 -0
- package/dist/chunk-ZBPKZKIJ.js +25 -0
- package/dist/chunk-ZBPKZKIJ.js.map +1 -0
- package/dist/chunk-ZCMJVQ6P.js +10 -0
- package/dist/chunk-ZCMJVQ6P.js.map +1 -0
- package/dist/chunk-ZCQ5UWVE.js +27 -0
- package/dist/chunk-ZCQ5UWVE.js.map +1 -0
- package/dist/chunk-ZFCTBLWX.js +12 -0
- package/dist/chunk-ZFCTBLWX.js.map +1 -0
- package/dist/chunk-ZJ6KVLUS.js +296 -0
- package/dist/chunk-ZJ6KVLUS.js.map +1 -0
- package/dist/chunk-ZRCFHUS4.js +37 -0
- package/dist/chunk-ZRCFHUS4.js.map +1 -0
- package/dist/chunk-ZSB6HGB5.js +50 -0
- package/dist/chunk-ZSB6HGB5.js.map +1 -0
- package/dist/chunk-ZSG6ROJA.js +45 -0
- package/dist/chunk-ZSG6ROJA.js.map +1 -0
- package/dist/chunk-ZSQIEOQO.js +61 -0
- package/dist/chunk-ZSQIEOQO.js.map +1 -0
- package/dist/chunk-ZTMXXISI.js +158 -0
- package/dist/chunk-ZTMXXISI.js.map +1 -0
- package/dist/chunk-ZUMPSWHW.js +138 -0
- package/dist/chunk-ZUMPSWHW.js.map +1 -0
- package/dist/chunk-ZUYSQ37E.js +88 -0
- package/dist/chunk-ZUYSQ37E.js.map +1 -0
- package/dist/components/base/index.cjs +156 -0
- package/dist/components/base/index.cjs.map +1 -0
- package/dist/components/base/index.js +15 -0
- package/dist/components/base/index.js.map +1 -0
- package/dist/components/base/types.cjs +19 -0
- package/dist/components/base/types.cjs.map +1 -0
- package/dist/components/base/types.js +1 -0
- package/dist/components/base/types.js.map +1 -0
- package/dist/components/buffer.cjs +184 -0
- package/dist/components/buffer.cjs.map +1 -0
- package/dist/components/buffer.js +18 -0
- package/dist/components/buffer.js.map +1 -0
- package/dist/components/captionsview.cjs +378 -0
- package/dist/components/captionsview.cjs.map +1 -0
- package/dist/components/captionsview.js +22 -0
- package/dist/components/captionsview.js.map +1 -0
- package/dist/components/controls/airplay.cjs +441 -0
- package/dist/components/controls/airplay.cjs.map +1 -0
- package/dist/components/controls/airplay.js +21 -0
- package/dist/components/controls/airplay.js.map +1 -0
- package/dist/components/controls/backward10.cjs +427 -0
- package/dist/components/controls/backward10.cjs.map +1 -0
- package/dist/components/controls/backward10.js +21 -0
- package/dist/components/controls/backward10.js.map +1 -0
- package/dist/components/controls/bignext.cjs +448 -0
- package/dist/components/controls/bignext.cjs.map +1 -0
- package/dist/components/controls/bignext.js +21 -0
- package/dist/components/controls/bignext.js.map +1 -0
- package/dist/components/controls/bigplaypause.cjs +440 -0
- package/dist/components/controls/bigplaypause.cjs.map +1 -0
- package/dist/components/controls/bigplaypause.js +21 -0
- package/dist/components/controls/bigplaypause.js.map +1 -0
- package/dist/components/controls/bigprev.cjs +448 -0
- package/dist/components/controls/bigprev.cjs.map +1 -0
- package/dist/components/controls/bigprev.js +21 -0
- package/dist/components/controls/bigprev.js.map +1 -0
- package/dist/components/controls/brightness/index.cjs +767 -0
- package/dist/components/controls/brightness/index.cjs.map +1 -0
- package/dist/components/controls/brightness/index.js +25 -0
- package/dist/components/controls/brightness/index.js.map +1 -0
- package/dist/components/controls/brightness/slider.cjs +460 -0
- package/dist/components/controls/brightness/slider.cjs.map +1 -0
- package/dist/components/controls/brightness/slider.js +21 -0
- package/dist/components/controls/brightness/slider.js.map +1 -0
- package/dist/components/controls/captions.cjs +452 -0
- package/dist/components/controls/captions.cjs.map +1 -0
- package/dist/components/controls/captions.js +21 -0
- package/dist/components/controls/captions.js.map +1 -0
- package/dist/components/controls/capture.cjs +455 -0
- package/dist/components/controls/capture.cjs.map +1 -0
- package/dist/components/controls/capture.js +21 -0
- package/dist/components/controls/capture.js.map +1 -0
- package/dist/components/controls/cast.cjs +441 -0
- package/dist/components/controls/cast.cjs.map +1 -0
- package/dist/components/controls/cast.js +21 -0
- package/dist/components/controls/cast.js.map +1 -0
- package/dist/components/controls/chapter.cjs +213 -0
- package/dist/components/controls/chapter.cjs.map +1 -0
- package/dist/components/controls/chapter.js +18 -0
- package/dist/components/controls/chapter.js.map +1 -0
- package/dist/components/controls/duration.cjs +217 -0
- package/dist/components/controls/duration.cjs.map +1 -0
- package/dist/components/controls/duration.js +18 -0
- package/dist/components/controls/duration.js.map +1 -0
- package/dist/components/controls/expandminiplayer.cjs +430 -0
- package/dist/components/controls/expandminiplayer.cjs.map +1 -0
- package/dist/components/controls/expandminiplayer.js +21 -0
- package/dist/components/controls/expandminiplayer.js.map +1 -0
- package/dist/components/controls/forward10.cjs +427 -0
- package/dist/components/controls/forward10.cjs.map +1 -0
- package/dist/components/controls/forward10.js +21 -0
- package/dist/components/controls/forward10.js.map +1 -0
- package/dist/components/controls/fullscreen.cjs +441 -0
- package/dist/components/controls/fullscreen.cjs.map +1 -0
- package/dist/components/controls/fullscreen.js +21 -0
- package/dist/components/controls/fullscreen.js.map +1 -0
- package/dist/components/controls/fullscreenlock.cjs +433 -0
- package/dist/components/controls/fullscreenlock.cjs.map +1 -0
- package/dist/components/controls/fullscreenlock.js +21 -0
- package/dist/components/controls/fullscreenlock.js.map +1 -0
- package/dist/components/controls/fullscreenorientation.cjs +436 -0
- package/dist/components/controls/fullscreenorientation.cjs.map +1 -0
- package/dist/components/controls/fullscreenorientation.js +21 -0
- package/dist/components/controls/fullscreenorientation.js.map +1 -0
- package/dist/components/controls/meta.cjs +298 -0
- package/dist/components/controls/meta.cjs.map +1 -0
- package/dist/components/controls/meta.js +18 -0
- package/dist/components/controls/meta.js.map +1 -0
- package/dist/components/controls/next.cjs +444 -0
- package/dist/components/controls/next.cjs.map +1 -0
- package/dist/components/controls/next.js +21 -0
- package/dist/components/controls/next.js.map +1 -0
- package/dist/components/controls/objectfit.cjs +444 -0
- package/dist/components/controls/objectfit.cjs.map +1 -0
- package/dist/components/controls/objectfit.js +21 -0
- package/dist/components/controls/objectfit.js.map +1 -0
- package/dist/components/controls/pictureinpicture.cjs +441 -0
- package/dist/components/controls/pictureinpicture.cjs.map +1 -0
- package/dist/components/controls/pictureinpicture.js +21 -0
- package/dist/components/controls/pictureinpicture.js.map +1 -0
- package/dist/components/controls/playpause.cjs +441 -0
- package/dist/components/controls/playpause.cjs.map +1 -0
- package/dist/components/controls/playpause.js +21 -0
- package/dist/components/controls/playpause.js.map +1 -0
- package/dist/components/controls/prev.cjs +444 -0
- package/dist/components/controls/prev.cjs.map +1 -0
- package/dist/components/controls/prev.js +21 -0
- package/dist/components/controls/prev.js.map +1 -0
- package/dist/components/controls/removeminiplayer.cjs +432 -0
- package/dist/components/controls/removeminiplayer.cjs.map +1 -0
- package/dist/components/controls/removeminiplayer.js +21 -0
- package/dist/components/controls/removeminiplayer.js.map +1 -0
- package/dist/components/controls/settings.cjs +443 -0
- package/dist/components/controls/settings.cjs.map +1 -0
- package/dist/components/controls/settings.js +21 -0
- package/dist/components/controls/settings.js.map +1 -0
- package/dist/components/controls/theater.cjs +441 -0
- package/dist/components/controls/theater.cjs.map +1 -0
- package/dist/components/controls/theater.js +21 -0
- package/dist/components/controls/theater.js.map +1 -0
- package/dist/components/controls/time.cjs +230 -0
- package/dist/components/controls/time.cjs.map +1 -0
- package/dist/components/controls/time.js +18 -0
- package/dist/components/controls/time.js.map +1 -0
- package/dist/components/controls/timeandduration.cjs +251 -0
- package/dist/components/controls/timeandduration.cjs.map +1 -0
- package/dist/components/controls/timeandduration.js +18 -0
- package/dist/components/controls/timeandduration.js.map +1 -0
- package/dist/components/controls/timeline/index.cjs +713 -0
- package/dist/components/controls/timeline/index.cjs.map +1 -0
- package/dist/components/controls/timeline/index.js +25 -0
- package/dist/components/controls/timeline/index.js.map +1 -0
- package/dist/components/controls/timeline/types.cjs +19 -0
- package/dist/components/controls/timeline/types.cjs.map +1 -0
- package/dist/components/controls/timeline/types.js +1 -0
- package/dist/components/controls/timeline/types.js.map +1 -0
- package/dist/components/controls/volume/index.cjs +767 -0
- package/dist/components/controls/volume/index.cjs.map +1 -0
- package/dist/components/controls/volume/index.js +25 -0
- package/dist/components/controls/volume/index.js.map +1 -0
- package/dist/components/controls/volume/slider.cjs +460 -0
- package/dist/components/controls/volume/slider.cjs.map +1 -0
- package/dist/components/controls/volume/slider.js +21 -0
- package/dist/components/controls/volume/slider.js.map +1 -0
- package/dist/components/holders/airplayplaceholder.cjs +446 -0
- package/dist/components/holders/airplayplaceholder.cjs.map +1 -0
- package/dist/components/holders/airplayplaceholder.js +21 -0
- package/dist/components/holders/airplayplaceholder.js.map +1 -0
- package/dist/components/holders/castplaceholder.cjs +446 -0
- package/dist/components/holders/castplaceholder.cjs.map +1 -0
- package/dist/components/holders/castplaceholder.js +21 -0
- package/dist/components/holders/castplaceholder.js.map +1 -0
- package/dist/components/holders/pipplaceholder.cjs +446 -0
- package/dist/components/holders/pipplaceholder.cjs.map +1 -0
- package/dist/components/holders/pipplaceholder.js +30 -0
- package/dist/components/holders/pipplaceholder.js.map +1 -0
- package/dist/components/icons/add.cjs +27 -0
- package/dist/components/icons/add.cjs.map +1 -0
- package/dist/components/icons/add.js +8 -0
- package/dist/components/icons/add.js.map +1 -0
- package/dist/components/icons/airplay.cjs +30 -0
- package/dist/components/icons/airplay.cjs.map +1 -0
- package/dist/components/icons/airplay.js +8 -0
- package/dist/components/icons/airplay.js.map +1 -0
- package/dist/components/icons/airplayplaceholder.cjs +39 -0
- package/dist/components/icons/airplayplaceholder.cjs.map +1 -0
- package/dist/components/icons/airplayplaceholder.js +8 -0
- package/dist/components/icons/airplayplaceholder.js.map +1 -0
- package/dist/components/icons/ambience.cjs +27 -0
- package/dist/components/icons/ambience.cjs.map +1 -0
- package/dist/components/icons/ambience.js +8 -0
- package/dist/components/icons/ambience.js.map +1 -0
- package/dist/components/icons/audiotrack.cjs +27 -0
- package/dist/components/icons/audiotrack.cjs.map +1 -0
- package/dist/components/icons/audiotrack.js +8 -0
- package/dist/components/icons/audiotrack.js.map +1 -0
- package/dist/components/icons/autoplay.cjs +27 -0
- package/dist/components/icons/autoplay.cjs.map +1 -0
- package/dist/components/icons/autoplay.js +8 -0
- package/dist/components/icons/autoplay.js.map +1 -0
- package/dist/components/icons/backward10.cjs +29 -0
- package/dist/components/icons/backward10.cjs.map +1 -0
- package/dist/components/icons/backward10.js +8 -0
- package/dist/components/icons/backward10.js.map +1 -0
- package/dist/components/icons/brightnessdark.cjs +29 -0
- package/dist/components/icons/brightnessdark.cjs.map +1 -0
- package/dist/components/icons/brightnessdark.js +8 -0
- package/dist/components/icons/brightnessdark.js.map +1 -0
- package/dist/components/icons/brightnesshigh.cjs +29 -0
- package/dist/components/icons/brightnesshigh.cjs.map +1 -0
- package/dist/components/icons/brightnesshigh.js +8 -0
- package/dist/components/icons/brightnesshigh.js.map +1 -0
- package/dist/components/icons/brightnesslow.cjs +29 -0
- package/dist/components/icons/brightnesslow.cjs.map +1 -0
- package/dist/components/icons/brightnesslow.js +8 -0
- package/dist/components/icons/brightnesslow.js.map +1 -0
- package/dist/components/icons/bwd.cjs +31 -0
- package/dist/components/icons/bwd.cjs.map +1 -0
- package/dist/components/icons/bwd.js +8 -0
- package/dist/components/icons/bwd.js.map +1 -0
- package/dist/components/icons/captions.cjs +29 -0
- package/dist/components/icons/captions.cjs.map +1 -0
- package/dist/components/icons/captions.js +8 -0
- package/dist/components/icons/captions.js.map +1 -0
- package/dist/components/icons/capture.cjs +29 -0
- package/dist/components/icons/capture.cjs.map +1 -0
- package/dist/components/icons/capture.js +8 -0
- package/dist/components/icons/capture.js.map +1 -0
- package/dist/components/icons/cast.cjs +29 -0
- package/dist/components/icons/cast.cjs.map +1 -0
- package/dist/components/icons/cast.js +8 -0
- package/dist/components/icons/cast.js.map +1 -0
- package/dist/components/icons/castplaceholder.cjs +42 -0
- package/dist/components/icons/castplaceholder.cjs.map +1 -0
- package/dist/components/icons/castplaceholder.js +8 -0
- package/dist/components/icons/castplaceholder.js.map +1 -0
- package/dist/components/icons/chapters.cjs +27 -0
- package/dist/components/icons/chapters.cjs.map +1 -0
- package/dist/components/icons/chapters.js +8 -0
- package/dist/components/icons/chapters.js.map +1 -0
- package/dist/components/icons/configure.cjs +27 -0
- package/dist/components/icons/configure.cjs.map +1 -0
- package/dist/components/icons/configure.js +8 -0
- package/dist/components/icons/configure.js.map +1 -0
- package/dist/components/icons/deleteicon.cjs +27 -0
- package/dist/components/icons/deleteicon.cjs.map +1 -0
- package/dist/components/icons/deleteicon.js +8 -0
- package/dist/components/icons/deleteicon.js.map +1 -0
- package/dist/components/icons/doubletriangleleft.cjs +27 -0
- package/dist/components/icons/doubletriangleleft.cjs.map +1 -0
- package/dist/components/icons/doubletriangleleft.js +8 -0
- package/dist/components/icons/doubletriangleleft.js.map +1 -0
- package/dist/components/icons/doubletriangleright.cjs +27 -0
- package/dist/components/icons/doubletriangleright.cjs.map +1 -0
- package/dist/components/icons/doubletriangleright.js +8 -0
- package/dist/components/icons/doubletriangleright.js.map +1 -0
- package/dist/components/icons/dragindicator.cjs +27 -0
- package/dist/components/icons/dragindicator.cjs.map +1 -0
- package/dist/components/icons/dragindicator.js +8 -0
- package/dist/components/icons/dragindicator.js.map +1 -0
- package/dist/components/icons/edit.cjs +27 -0
- package/dist/components/icons/edit.cjs.map +1 -0
- package/dist/components/icons/edit.js +8 -0
- package/dist/components/icons/edit.js.map +1 -0
- package/dist/components/icons/enterfullscreen.cjs +32 -0
- package/dist/components/icons/enterfullscreen.cjs.map +1 -0
- package/dist/components/icons/enterfullscreen.js +8 -0
- package/dist/components/icons/enterfullscreen.js.map +1 -0
- package/dist/components/icons/enterpip.cjs +29 -0
- package/dist/components/icons/enterpip.cjs.map +1 -0
- package/dist/components/icons/enterpip.js +8 -0
- package/dist/components/icons/enterpip.js.map +1 -0
- package/dist/components/icons/entertheater.cjs +29 -0
- package/dist/components/icons/entertheater.cjs.map +1 -0
- package/dist/components/icons/entertheater.js +8 -0
- package/dist/components/icons/entertheater.js.map +1 -0
- package/dist/components/icons/expandminiplayer.cjs +29 -0
- package/dist/components/icons/expandminiplayer.cjs.map +1 -0
- package/dist/components/icons/expandminiplayer.js +8 -0
- package/dist/components/icons/expandminiplayer.js.map +1 -0
- package/dist/components/icons/forward10.cjs +29 -0
- package/dist/components/icons/forward10.cjs.map +1 -0
- package/dist/components/icons/forward10.js +8 -0
- package/dist/components/icons/forward10.js.map +1 -0
- package/dist/components/icons/fullscreenorientation.cjs +30 -0
- package/dist/components/icons/fullscreenorientation.cjs.map +1 -0
- package/dist/components/icons/fullscreenorientation.js +8 -0
- package/dist/components/icons/fullscreenorientation.js.map +1 -0
- package/dist/components/icons/fwd.cjs +31 -0
- package/dist/components/icons/fwd.cjs.map +1 -0
- package/dist/components/icons/fwd.js +8 -0
- package/dist/components/icons/fwd.js.map +1 -0
- package/dist/components/icons/leavefullscreen.cjs +32 -0
- package/dist/components/icons/leavefullscreen.cjs.map +1 -0
- package/dist/components/icons/leavefullscreen.js +8 -0
- package/dist/components/icons/leavefullscreen.js.map +1 -0
- package/dist/components/icons/leavepip.cjs +29 -0
- package/dist/components/icons/leavepip.cjs.map +1 -0
- package/dist/components/icons/leavepip.js +8 -0
- package/dist/components/icons/leavepip.js.map +1 -0
- package/dist/components/icons/leavetheater.cjs +29 -0
- package/dist/components/icons/leavetheater.cjs.map +1 -0
- package/dist/components/icons/leavetheater.js +8 -0
- package/dist/components/icons/leavetheater.js.map +1 -0
- package/dist/components/icons/lock.cjs +30 -0
- package/dist/components/icons/lock.cjs.map +1 -0
- package/dist/components/icons/lock.js +8 -0
- package/dist/components/icons/lock.js.map +1 -0
- package/dist/components/icons/loop.cjs +27 -0
- package/dist/components/icons/loop.cjs.map +1 -0
- package/dist/components/icons/loop.js +8 -0
- package/dist/components/icons/loop.js.map +1 -0
- package/dist/components/icons/next.cjs +30 -0
- package/dist/components/icons/next.cjs.map +1 -0
- package/dist/components/icons/next.js +8 -0
- package/dist/components/icons/next.js.map +1 -0
- package/dist/components/icons/objectfitcontain.cjs +32 -0
- package/dist/components/icons/objectfitcontain.cjs.map +1 -0
- package/dist/components/icons/objectfitcontain.js +8 -0
- package/dist/components/icons/objectfitcontain.js.map +1 -0
- package/dist/components/icons/objectfitcover.cjs +32 -0
- package/dist/components/icons/objectfitcover.cjs.map +1 -0
- package/dist/components/icons/objectfitcover.js +8 -0
- package/dist/components/icons/objectfitcover.js.map +1 -0
- package/dist/components/icons/objectfitfill.cjs +32 -0
- package/dist/components/icons/objectfitfill.cjs.map +1 -0
- package/dist/components/icons/objectfitfill.js +8 -0
- package/dist/components/icons/objectfitfill.js.map +1 -0
- package/dist/components/icons/pause.cjs +29 -0
- package/dist/components/icons/pause.cjs.map +1 -0
- package/dist/components/icons/pause.js +8 -0
- package/dist/components/icons/pause.js.map +1 -0
- package/dist/components/icons/pipplaceholder.cjs +50 -0
- package/dist/components/icons/pipplaceholder.cjs.map +1 -0
- package/dist/components/icons/pipplaceholder.js +8 -0
- package/dist/components/icons/pipplaceholder.js.map +1 -0
- package/dist/components/icons/play.cjs +29 -0
- package/dist/components/icons/play.cjs.map +1 -0
- package/dist/components/icons/play.js +8 -0
- package/dist/components/icons/play.js.map +1 -0
- package/dist/components/icons/playbackrate.cjs +27 -0
- package/dist/components/icons/playbackrate.cjs.map +1 -0
- package/dist/components/icons/playbackrate.js +8 -0
- package/dist/components/icons/playbackrate.js.map +1 -0
- package/dist/components/icons/playlist.cjs +27 -0
- package/dist/components/icons/playlist.cjs.map +1 -0
- package/dist/components/icons/playlist.js +8 -0
- package/dist/components/icons/playlist.js.map +1 -0
- package/dist/components/icons/prev.cjs +30 -0
- package/dist/components/icons/prev.cjs.map +1 -0
- package/dist/components/icons/prev.js +8 -0
- package/dist/components/icons/prev.js.map +1 -0
- package/dist/components/icons/quality.cjs +27 -0
- package/dist/components/icons/quality.cjs.map +1 -0
- package/dist/components/icons/quality.js +8 -0
- package/dist/components/icons/quality.js.map +1 -0
- package/dist/components/icons/removeminiplayer.cjs +29 -0
- package/dist/components/icons/removeminiplayer.cjs.map +1 -0
- package/dist/components/icons/removeminiplayer.js +8 -0
- package/dist/components/icons/removeminiplayer.js.map +1 -0
- package/dist/components/icons/replay.cjs +29 -0
- package/dist/components/icons/replay.cjs.map +1 -0
- package/dist/components/icons/replay.js +8 -0
- package/dist/components/icons/replay.js.map +1 -0
- package/dist/components/icons/returnback.cjs +30 -0
- package/dist/components/icons/returnback.cjs.map +1 -0
- package/dist/components/icons/returnback.js +8 -0
- package/dist/components/icons/returnback.js.map +1 -0
- package/dist/components/icons/settings.cjs +29 -0
- package/dist/components/icons/settings.cjs.map +1 -0
- package/dist/components/icons/settings.js +8 -0
- package/dist/components/icons/settings.js.map +1 -0
- package/dist/components/icons/shuffle.cjs +27 -0
- package/dist/components/icons/shuffle.cjs.map +1 -0
- package/dist/components/icons/shuffle.js +8 -0
- package/dist/components/icons/shuffle.js.map +1 -0
- package/dist/components/icons/subtitles.cjs +29 -0
- package/dist/components/icons/subtitles.cjs.map +1 -0
- package/dist/components/icons/subtitles.js +8 -0
- package/dist/components/icons/subtitles.js.map +1 -0
- package/dist/components/icons/timer.cjs +27 -0
- package/dist/components/icons/timer.cjs.map +1 -0
- package/dist/components/icons/timer.js +8 -0
- package/dist/components/icons/timer.js.map +1 -0
- package/dist/components/icons/triangleleft.cjs +29 -0
- package/dist/components/icons/triangleleft.cjs.map +1 -0
- package/dist/components/icons/triangleleft.js +8 -0
- package/dist/components/icons/triangleleft.js.map +1 -0
- package/dist/components/icons/tripletriangleleft.cjs +27 -0
- package/dist/components/icons/tripletriangleleft.cjs.map +1 -0
- package/dist/components/icons/tripletriangleleft.js +8 -0
- package/dist/components/icons/tripletriangleleft.js.map +1 -0
- package/dist/components/icons/tripletriangleright.cjs +27 -0
- package/dist/components/icons/tripletriangleright.cjs.map +1 -0
- package/dist/components/icons/tripletriangleright.js +8 -0
- package/dist/components/icons/tripletriangleright.js.map +1 -0
- package/dist/components/icons/unlock.cjs +30 -0
- package/dist/components/icons/unlock.cjs.map +1 -0
- package/dist/components/icons/unlock.js +8 -0
- package/dist/components/icons/unlock.js.map +1 -0
- package/dist/components/icons/videotrack.cjs +27 -0
- package/dist/components/icons/videotrack.cjs.map +1 -0
- package/dist/components/icons/videotrack.js +8 -0
- package/dist/components/icons/videotrack.js.map +1 -0
- package/dist/components/icons/volumehigh.cjs +29 -0
- package/dist/components/icons/volumehigh.cjs.map +1 -0
- package/dist/components/icons/volumehigh.js +8 -0
- package/dist/components/icons/volumehigh.js.map +1 -0
- package/dist/components/icons/volumelow.cjs +29 -0
- package/dist/components/icons/volumelow.cjs.map +1 -0
- package/dist/components/icons/volumelow.js +8 -0
- package/dist/components/icons/volumelow.js.map +1 -0
- package/dist/components/icons/volumemuted.cjs +29 -0
- package/dist/components/icons/volumemuted.cjs.map +1 -0
- package/dist/components/icons/volumemuted.js +8 -0
- package/dist/components/icons/volumemuted.js.map +1 -0
- package/dist/components/icons/z-register.cjs +633 -0
- package/dist/components/icons/z-register.cjs.map +1 -0
- package/dist/components/icons/z-register.js +66 -0
- package/dist/components/icons/z-register.js.map +1 -0
- package/dist/components/notifiers/airplay.cjs +450 -0
- package/dist/components/notifiers/airplay.cjs.map +1 -0
- package/dist/components/notifiers/airplay.js +22 -0
- package/dist/components/notifiers/airplay.js.map +1 -0
- package/dist/components/notifiers/base.cjs +191 -0
- package/dist/components/notifiers/base.cjs.map +1 -0
- package/dist/components/notifiers/base.js +16 -0
- package/dist/components/notifiers/base.js.map +1 -0
- package/dist/components/notifiers/brightness.cjs +469 -0
- package/dist/components/notifiers/brightness.cjs.map +1 -0
- package/dist/components/notifiers/brightness.js +22 -0
- package/dist/components/notifiers/brightness.js.map +1 -0
- package/dist/components/notifiers/cancelscrub.cjs +216 -0
- package/dist/components/notifiers/cancelscrub.cjs.map +1 -0
- package/dist/components/notifiers/cancelscrub.js +19 -0
- package/dist/components/notifiers/cancelscrub.js.map +1 -0
- package/dist/components/notifiers/captions.cjs +450 -0
- package/dist/components/notifiers/captions.cjs.map +1 -0
- package/dist/components/notifiers/captions.js +22 -0
- package/dist/components/notifiers/captions.js.map +1 -0
- package/dist/components/notifiers/capture.cjs +450 -0
- package/dist/components/notifiers/capture.cjs.map +1 -0
- package/dist/components/notifiers/capture.js +22 -0
- package/dist/components/notifiers/capture.js.map +1 -0
- package/dist/components/notifiers/cast.cjs +450 -0
- package/dist/components/notifiers/cast.cjs.map +1 -0
- package/dist/components/notifiers/cast.js +22 -0
- package/dist/components/notifiers/cast.js.map +1 -0
- package/dist/components/notifiers/chapter.cjs +225 -0
- package/dist/components/notifiers/chapter.cjs.map +1 -0
- package/dist/components/notifiers/chapter.js +19 -0
- package/dist/components/notifiers/chapter.js.map +1 -0
- package/dist/components/notifiers/fastplay.cjs +467 -0
- package/dist/components/notifiers/fastplay.cjs.map +1 -0
- package/dist/components/notifiers/fastplay.js +22 -0
- package/dist/components/notifiers/fastplay.js.map +1 -0
- package/dist/components/notifiers/fwdbwd.cjs +457 -0
- package/dist/components/notifiers/fwdbwd.cjs.map +1 -0
- package/dist/components/notifiers/fwdbwd.js +22 -0
- package/dist/components/notifiers/fwdbwd.js.map +1 -0
- package/dist/components/notifiers/objectfit.cjs +468 -0
- package/dist/components/notifiers/objectfit.cjs.map +1 -0
- package/dist/components/notifiers/objectfit.js +22 -0
- package/dist/components/notifiers/objectfit.js.map +1 -0
- package/dist/components/notifiers/playbackrate.cjs +466 -0
- package/dist/components/notifiers/playbackrate.cjs.map +1 -0
- package/dist/components/notifiers/playbackrate.js +22 -0
- package/dist/components/notifiers/playbackrate.js.map +1 -0
- package/dist/components/notifiers/playpause.cjs +457 -0
- package/dist/components/notifiers/playpause.cjs.map +1 -0
- package/dist/components/notifiers/playpause.js +22 -0
- package/dist/components/notifiers/playpause.js.map +1 -0
- package/dist/components/notifiers/prevnext.cjs +457 -0
- package/dist/components/notifiers/prevnext.cjs.map +1 -0
- package/dist/components/notifiers/prevnext.js +22 -0
- package/dist/components/notifiers/prevnext.js.map +1 -0
- package/dist/components/notifiers/scrub.cjs +449 -0
- package/dist/components/notifiers/scrub.cjs.map +1 -0
- package/dist/components/notifiers/scrub.js +22 -0
- package/dist/components/notifiers/scrub.js.map +1 -0
- package/dist/components/notifiers/timer.cjs +451 -0
- package/dist/components/notifiers/timer.cjs.map +1 -0
- package/dist/components/notifiers/timer.js +22 -0
- package/dist/components/notifiers/timer.js.map +1 -0
- package/dist/components/notifiers/touchbrightness.cjs +474 -0
- package/dist/components/notifiers/touchbrightness.cjs.map +1 -0
- package/dist/components/notifiers/touchbrightness.js +22 -0
- package/dist/components/notifiers/touchbrightness.js.map +1 -0
- package/dist/components/notifiers/touchtimeline.cjs +218 -0
- package/dist/components/notifiers/touchtimeline.cjs.map +1 -0
- package/dist/components/notifiers/touchtimeline.js +21 -0
- package/dist/components/notifiers/touchtimeline.js.map +1 -0
- package/dist/components/notifiers/touchvolume.cjs +474 -0
- package/dist/components/notifiers/touchvolume.cjs.map +1 -0
- package/dist/components/notifiers/touchvolume.js +22 -0
- package/dist/components/notifiers/touchvolume.js.map +1 -0
- package/dist/components/notifiers/volume.cjs +469 -0
- package/dist/components/notifiers/volume.cjs.map +1 -0
- package/dist/components/notifiers/volume.js +22 -0
- package/dist/components/notifiers/volume.js.map +1 -0
- package/dist/components/notifiers/z-register.cjs +778 -0
- package/dist/components/notifiers/z-register.cjs.map +1 -0
- package/dist/components/notifiers/z-register.js +36 -0
- package/dist/components/notifiers/z-register.js.map +1 -0
- package/dist/components/rangeinput/build.cjs +52 -0
- package/dist/components/rangeinput/build.cjs.map +1 -0
- package/dist/components/rangeinput/build.js +8 -0
- package/dist/components/rangeinput/build.js.map +1 -0
- package/dist/components/rangeinput/index.cjs +433 -0
- package/dist/components/rangeinput/index.cjs.map +1 -0
- package/dist/components/rangeinput/index.js +20 -0
- package/dist/components/rangeinput/index.js.map +1 -0
- package/dist/components/rangeinput/types.cjs +19 -0
- package/dist/components/rangeinput/types.cjs.map +1 -0
- package/dist/components/rangeinput/types.js +1 -0
- package/dist/components/rangeinput/types.js.map +1 -0
- package/dist/components/screenlock.cjs +438 -0
- package/dist/components/screenlock.cjs.map +1 -0
- package/dist/components/screenlock.js +21 -0
- package/dist/components/screenlock.js.map +1 -0
- package/dist/components/z-register.cjs +2345 -0
- package/dist/components/z-register.cjs.map +1 -0
- package/dist/components/z-register.js +64 -0
- package/dist/components/z-register.js.map +1 -0
- package/dist/consts/actions.cjs +79 -0
- package/dist/consts/actions.cjs.map +1 -0
- package/dist/consts/actions.js +8 -0
- package/dist/consts/actions.js.map +1 -0
- package/dist/consts/config.cjs +105 -0
- package/dist/consts/config.cjs.map +1 -0
- package/dist/consts/config.js +9 -0
- package/dist/consts/config.js.map +1 -0
- package/dist/consts/generics.cjs +29 -0
- package/dist/consts/generics.cjs.map +1 -0
- package/dist/consts/generics.js +10 -0
- package/dist/consts/generics.js.map +1 -0
- package/dist/consts/media.cjs +201 -0
- package/dist/consts/media.cjs.map +1 -0
- package/dist/consts/media.js +16 -0
- package/dist/consts/media.js.map +1 -0
- package/dist/core/controllable.cjs +91 -0
- package/dist/core/controllable.cjs.map +1 -0
- package/dist/core/controllable.js +13 -0
- package/dist/core/controllable.js.map +1 -0
- package/dist/core/controller.cjs +1664 -0
- package/dist/core/controller.cjs.map +1 -0
- package/dist/core/controller.js +27 -0
- package/dist/core/controller.js.map +1 -0
- package/dist/core/registries.cjs +268 -0
- package/dist/core/registries.cjs.map +1 -0
- package/dist/core/registries.js +24 -0
- package/dist/core/registries.js.map +1 -0
- package/dist/index.cjs +1934 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +3148 -0
- package/dist/index.css.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/init.cjs +1890 -0
- package/dist/init.cjs.map +1 -0
- package/dist/init.js +24 -0
- package/dist/init.js.map +1 -0
- package/dist/plugs/base/index.cjs +407 -0
- package/dist/plugs/base/index.cjs.map +1 -0
- package/dist/plugs/base/index.js +19 -0
- package/dist/plugs/base/index.js.map +1 -0
- package/dist/plugs/base/slider.cjs +458 -0
- package/dist/plugs/base/slider.cjs.map +1 -0
- package/dist/plugs/base/slider.js +18 -0
- package/dist/plugs/base/slider.js.map +1 -0
- package/dist/plugs/base/types.cjs +19 -0
- package/dist/plugs/base/types.cjs.map +1 -0
- package/dist/plugs/base/types.js +1 -0
- package/dist/plugs/base/types.js.map +1 -0
- package/dist/plugs/main/disabled/build.cjs +27 -0
- package/dist/plugs/main/disabled/build.cjs.map +1 -0
- package/dist/plugs/main/disabled/build.js +8 -0
- package/dist/plugs/main/disabled/build.js.map +1 -0
- package/dist/plugs/main/disabled/index.cjs +421 -0
- package/dist/plugs/main/disabled/index.cjs.map +1 -0
- package/dist/plugs/main/disabled/index.js +22 -0
- package/dist/plugs/main/disabled/index.js.map +1 -0
- package/dist/plugs/main/disabled/types.cjs +19 -0
- package/dist/plugs/main/disabled/types.cjs.map +1 -0
- package/dist/plugs/main/disabled/types.js +1 -0
- package/dist/plugs/main/disabled/types.js.map +1 -0
- package/dist/plugs/main/lightState/build.cjs +34 -0
- package/dist/plugs/main/lightState/build.cjs.map +1 -0
- package/dist/plugs/main/lightState/build.js +8 -0
- package/dist/plugs/main/lightState/build.js.map +1 -0
- package/dist/plugs/main/lightState/index.cjs +458 -0
- package/dist/plugs/main/lightState/index.cjs.map +1 -0
- package/dist/plugs/main/lightState/index.js +22 -0
- package/dist/plugs/main/lightState/index.js.map +1 -0
- package/dist/plugs/main/lightState/types.cjs +19 -0
- package/dist/plugs/main/lightState/types.cjs.map +1 -0
- package/dist/plugs/main/lightState/types.js +1 -0
- package/dist/plugs/main/lightState/types.js.map +1 -0
- package/dist/plugs/main/playlist/build.cjs +59 -0
- package/dist/plugs/main/playlist/build.cjs.map +1 -0
- package/dist/plugs/main/playlist/build.js +10 -0
- package/dist/plugs/main/playlist/build.js.map +1 -0
- package/dist/plugs/main/playlist/index.cjs +511 -0
- package/dist/plugs/main/playlist/index.cjs.map +1 -0
- package/dist/plugs/main/playlist/index.js +25 -0
- package/dist/plugs/main/playlist/index.js.map +1 -0
- package/dist/plugs/main/playlist/types.cjs +19 -0
- package/dist/plugs/main/playlist/types.cjs.map +1 -0
- package/dist/plugs/main/playlist/types.js +1 -0
- package/dist/plugs/main/playlist/types.js.map +1 -0
- package/dist/plugs/main/skeleton/build.cjs +29 -0
- package/dist/plugs/main/skeleton/build.cjs.map +1 -0
- package/dist/plugs/main/skeleton/build.js +8 -0
- package/dist/plugs/main/skeleton/build.js.map +1 -0
- package/dist/plugs/main/skeleton/index.cjs +539 -0
- package/dist/plugs/main/skeleton/index.cjs.map +1 -0
- package/dist/plugs/main/skeleton/index.js +25 -0
- package/dist/plugs/main/skeleton/index.js.map +1 -0
- package/dist/plugs/main/skeleton/types.cjs +19 -0
- package/dist/plugs/main/skeleton/types.cjs.map +1 -0
- package/dist/plugs/main/skeleton/types.js +1 -0
- package/dist/plugs/main/skeleton/types.js.map +1 -0
- package/dist/plugs/menus/main/playlist.cjs +98 -0
- package/dist/plugs/menus/main/playlist.cjs.map +1 -0
- package/dist/plugs/menus/main/playlist.js +9 -0
- package/dist/plugs/menus/main/playlist.js.map +1 -0
- package/dist/plugs/menus/main/skeleton.cjs +34 -0
- package/dist/plugs/menus/main/skeleton.cjs.map +1 -0
- package/dist/plugs/menus/main/skeleton.js +8 -0
- package/dist/plugs/menus/main/skeleton.js.map +1 -0
- package/dist/plugs/menus/settings/actions.cjs +492 -0
- package/dist/plugs/menus/settings/actions.cjs.map +1 -0
- package/dist/plugs/menus/settings/actions.js +15 -0
- package/dist/plugs/menus/settings/actions.js.map +1 -0
- package/dist/plugs/menus/settings/ambience.cjs +35 -0
- package/dist/plugs/menus/settings/ambience.cjs.map +1 -0
- package/dist/plugs/menus/settings/ambience.js +8 -0
- package/dist/plugs/menus/settings/ambience.js.map +1 -0
- package/dist/plugs/menus/settings/auto.cjs +153 -0
- package/dist/plugs/menus/settings/auto.cjs.map +1 -0
- package/dist/plugs/menus/settings/auto.js +12 -0
- package/dist/plugs/menus/settings/auto.js.map +1 -0
- package/dist/plugs/menus/settings/brightness.cjs +45 -0
- package/dist/plugs/menus/settings/brightness.cjs.map +1 -0
- package/dist/plugs/menus/settings/brightness.js +8 -0
- package/dist/plugs/menus/settings/brightness.js.map +1 -0
- package/dist/plugs/menus/settings/captions.cjs +437 -0
- package/dist/plugs/menus/settings/captions.cjs.map +1 -0
- package/dist/plugs/menus/settings/captions.js +13 -0
- package/dist/plugs/menus/settings/captions.js.map +1 -0
- package/dist/plugs/menus/settings/controlPanel.cjs +442 -0
- package/dist/plugs/menus/settings/controlPanel.cjs.map +1 -0
- package/dist/plugs/menus/settings/controlPanel.js +14 -0
- package/dist/plugs/menus/settings/controlPanel.js.map +1 -0
- package/dist/plugs/menus/settings/fastPlay.cjs +166 -0
- package/dist/plugs/menus/settings/fastPlay.cjs.map +1 -0
- package/dist/plugs/menus/settings/fastPlay.js +12 -0
- package/dist/plugs/menus/settings/fastPlay.js.map +1 -0
- package/dist/plugs/menus/settings/frame.cjs +90 -0
- package/dist/plugs/menus/settings/frame.cjs.map +1 -0
- package/dist/plugs/menus/settings/frame.js +12 -0
- package/dist/plugs/menus/settings/frame.js.map +1 -0
- package/dist/plugs/menus/settings/gesture.cjs +255 -0
- package/dist/plugs/menus/settings/gesture.cjs.map +1 -0
- package/dist/plugs/menus/settings/gesture.js +17 -0
- package/dist/plugs/menus/settings/gesture.js.map +1 -0
- package/dist/plugs/menus/settings/keys.cjs +173 -0
- package/dist/plugs/menus/settings/keys.cjs.map +1 -0
- package/dist/plugs/menus/settings/keys.js +12 -0
- package/dist/plugs/menus/settings/keys.js.map +1 -0
- package/dist/plugs/menus/settings/locked.cjs +53 -0
- package/dist/plugs/menus/settings/locked.cjs.map +1 -0
- package/dist/plugs/menus/settings/locked.js +8 -0
- package/dist/plugs/menus/settings/locked.js.map +1 -0
- package/dist/plugs/menus/settings/metadata.cjs +202 -0
- package/dist/plugs/menus/settings/metadata.cjs.map +1 -0
- package/dist/plugs/menus/settings/metadata.js +13 -0
- package/dist/plugs/menus/settings/metadata.js.map +1 -0
- package/dist/plugs/menus/settings/modes.cjs +238 -0
- package/dist/plugs/menus/settings/modes.cjs.map +1 -0
- package/dist/plugs/menus/settings/modes.js +12 -0
- package/dist/plugs/menus/settings/modes.js.map +1 -0
- package/dist/plugs/menus/settings/objectFit.cjs +45 -0
- package/dist/plugs/menus/settings/objectFit.cjs.map +1 -0
- package/dist/plugs/menus/settings/objectFit.js +8 -0
- package/dist/plugs/menus/settings/objectFit.js.map +1 -0
- package/dist/plugs/menus/settings/overlay.cjs +112 -0
- package/dist/plugs/menus/settings/overlay.cjs.map +1 -0
- package/dist/plugs/menus/settings/overlay.js +12 -0
- package/dist/plugs/menus/settings/overlay.js.map +1 -0
- package/dist/plugs/menus/settings/persist.cjs +73 -0
- package/dist/plugs/menus/settings/persist.cjs.map +1 -0
- package/dist/plugs/menus/settings/persist.js +8 -0
- package/dist/plugs/menus/settings/persist.js.map +1 -0
- package/dist/plugs/menus/settings/playbackRate.cjs +119 -0
- package/dist/plugs/menus/settings/playbackRate.cjs.map +1 -0
- package/dist/plugs/menus/settings/playbackRate.js +12 -0
- package/dist/plugs/menus/settings/playbackRate.js.map +1 -0
- package/dist/plugs/menus/settings/poster.cjs +53 -0
- package/dist/plugs/menus/settings/poster.cjs.map +1 -0
- package/dist/plugs/menus/settings/poster.js +8 -0
- package/dist/plugs/menus/settings/poster.js.map +1 -0
- package/dist/plugs/menus/settings/settingsView.cjs +79 -0
- package/dist/plugs/menus/settings/settingsView.cjs.map +1 -0
- package/dist/plugs/menus/settings/settingsView.js +8 -0
- package/dist/plugs/menus/settings/settingsView.js.map +1 -0
- package/dist/plugs/menus/settings/sleepTimer.cjs +89 -0
- package/dist/plugs/menus/settings/sleepTimer.cjs.map +1 -0
- package/dist/plugs/menus/settings/sleepTimer.js +10 -0
- package/dist/plugs/menus/settings/sleepTimer.js.map +1 -0
- package/dist/plugs/menus/settings/time.cjs +48 -0
- package/dist/plugs/menus/settings/time.cjs.map +1 -0
- package/dist/plugs/menus/settings/time.js +8 -0
- package/dist/plugs/menus/settings/time.js.map +1 -0
- package/dist/plugs/menus/settings/timeTravel.cjs +133 -0
- package/dist/plugs/menus/settings/timeTravel.cjs.map +1 -0
- package/dist/plugs/menus/settings/timeTravel.js +11 -0
- package/dist/plugs/menus/settings/timeTravel.js.map +1 -0
- package/dist/plugs/menus/settings/toasts.cjs +232 -0
- package/dist/plugs/menus/settings/toasts.cjs.map +1 -0
- package/dist/plugs/menus/settings/toasts.js +18 -0
- package/dist/plugs/menus/settings/toasts.js.map +1 -0
- package/dist/plugs/menus/settings/voice.cjs +216 -0
- package/dist/plugs/menus/settings/voice.cjs.map +1 -0
- package/dist/plugs/menus/settings/voice.js +12 -0
- package/dist/plugs/menus/settings/voice.js.map +1 -0
- package/dist/plugs/menus/settings/volume.cjs +45 -0
- package/dist/plugs/menus/settings/volume.cjs.map +1 -0
- package/dist/plugs/menus/settings/volume.js +8 -0
- package/dist/plugs/menus/settings/volume.js.map +1 -0
- package/dist/plugs/menus/z-register.cjs +3212 -0
- package/dist/plugs/menus/z-register.cjs.map +1 -0
- package/dist/plugs/menus/z-register.js +48 -0
- package/dist/plugs/menus/z-register.js.map +1 -0
- package/dist/plugs/settings/airplay/build.cjs +27 -0
- package/dist/plugs/settings/airplay/build.cjs.map +1 -0
- package/dist/plugs/settings/airplay/build.js +8 -0
- package/dist/plugs/settings/airplay/build.js.map +1 -0
- package/dist/plugs/settings/airplay/index.cjs +416 -0
- package/dist/plugs/settings/airplay/index.cjs.map +1 -0
- package/dist/plugs/settings/airplay/index.js +19 -0
- package/dist/plugs/settings/airplay/index.js.map +1 -0
- package/dist/plugs/settings/ambience/build.cjs +33 -0
- package/dist/plugs/settings/ambience/build.cjs.map +1 -0
- package/dist/plugs/settings/ambience/build.js +8 -0
- package/dist/plugs/settings/ambience/build.js.map +1 -0
- package/dist/plugs/settings/ambience/index.cjs +464 -0
- package/dist/plugs/settings/ambience/index.cjs.map +1 -0
- package/dist/plugs/settings/ambience/index.js +24 -0
- package/dist/plugs/settings/ambience/index.js.map +1 -0
- package/dist/plugs/settings/ambience/types.cjs +19 -0
- package/dist/plugs/settings/ambience/types.cjs.map +1 -0
- package/dist/plugs/settings/ambience/types.js +1 -0
- package/dist/plugs/settings/ambience/types.js.map +1 -0
- package/dist/plugs/settings/auto/build.cjs +76 -0
- package/dist/plugs/settings/auto/build.cjs.map +1 -0
- package/dist/plugs/settings/auto/build.js +13 -0
- package/dist/plugs/settings/auto/build.js.map +1 -0
- package/dist/plugs/settings/auto/index.cjs +533 -0
- package/dist/plugs/settings/auto/index.cjs.map +1 -0
- package/dist/plugs/settings/auto/index.js +30 -0
- package/dist/plugs/settings/auto/index.js.map +1 -0
- package/dist/plugs/settings/auto/types.cjs +19 -0
- package/dist/plugs/settings/auto/types.cjs.map +1 -0
- package/dist/plugs/settings/auto/types.js +1 -0
- package/dist/plugs/settings/auto/types.js.map +1 -0
- package/dist/plugs/settings/brightness/build.cjs +31 -0
- package/dist/plugs/settings/brightness/build.cjs.map +1 -0
- package/dist/plugs/settings/brightness/build.js +8 -0
- package/dist/plugs/settings/brightness/build.js.map +1 -0
- package/dist/plugs/settings/brightness/index.cjs +522 -0
- package/dist/plugs/settings/brightness/index.cjs.map +1 -0
- package/dist/plugs/settings/brightness/index.js +24 -0
- package/dist/plugs/settings/brightness/index.js.map +1 -0
- package/dist/plugs/settings/brightness/types.cjs +19 -0
- package/dist/plugs/settings/brightness/types.cjs.map +1 -0
- package/dist/plugs/settings/brightness/types.js +1 -0
- package/dist/plugs/settings/brightness/types.js.map +1 -0
- package/dist/plugs/settings/captions/build.cjs +184 -0
- package/dist/plugs/settings/captions/build.cjs.map +1 -0
- package/dist/plugs/settings/captions/build.js +12 -0
- package/dist/plugs/settings/captions/build.js.map +1 -0
- package/dist/plugs/settings/captions/index.cjs +793 -0
- package/dist/plugs/settings/captions/index.cjs.map +1 -0
- package/dist/plugs/settings/captions/index.js +32 -0
- package/dist/plugs/settings/captions/index.js.map +1 -0
- package/dist/plugs/settings/captions/types.cjs +19 -0
- package/dist/plugs/settings/captions/types.cjs.map +1 -0
- package/dist/plugs/settings/captions/types.js +1 -0
- package/dist/plugs/settings/captions/types.js.map +1 -0
- package/dist/plugs/settings/cast/build.cjs +27 -0
- package/dist/plugs/settings/cast/build.cjs.map +1 -0
- package/dist/plugs/settings/cast/build.js +8 -0
- package/dist/plugs/settings/cast/build.js.map +1 -0
- package/dist/plugs/settings/cast/index.cjs +644 -0
- package/dist/plugs/settings/cast/index.cjs.map +1 -0
- package/dist/plugs/settings/cast/index.js +24 -0
- package/dist/plugs/settings/cast/index.js.map +1 -0
- package/dist/plugs/settings/cast/types.cjs +19 -0
- package/dist/plugs/settings/cast/types.cjs.map +1 -0
- package/dist/plugs/settings/cast/types.js +1 -0
- package/dist/plugs/settings/cast/types.js.map +1 -0
- package/dist/plugs/settings/controlPanel/build.cjs +144 -0
- package/dist/plugs/settings/controlPanel/build.cjs.map +1 -0
- package/dist/plugs/settings/controlPanel/build.js +17 -0
- package/dist/plugs/settings/controlPanel/build.js.map +1 -0
- package/dist/plugs/settings/controlPanel/draggable.cjs +1021 -0
- package/dist/plugs/settings/controlPanel/draggable.cjs.map +1 -0
- package/dist/plugs/settings/controlPanel/draggable.js +24 -0
- package/dist/plugs/settings/controlPanel/draggable.js.map +1 -0
- package/dist/plugs/settings/controlPanel/index.cjs +1031 -0
- package/dist/plugs/settings/controlPanel/index.cjs.map +1 -0
- package/dist/plugs/settings/controlPanel/index.js +37 -0
- package/dist/plugs/settings/controlPanel/index.js.map +1 -0
- package/dist/plugs/settings/controlPanel/types.cjs +19 -0
- package/dist/plugs/settings/controlPanel/types.cjs.map +1 -0
- package/dist/plugs/settings/controlPanel/types.js +1 -0
- package/dist/plugs/settings/controlPanel/types.js.map +1 -0
- package/dist/plugs/settings/css/build.cjs +29 -0
- package/dist/plugs/settings/css/build.cjs.map +1 -0
- package/dist/plugs/settings/css/build.js +8 -0
- package/dist/plugs/settings/css/build.js.map +1 -0
- package/dist/plugs/settings/css/index.cjs +444 -0
- package/dist/plugs/settings/css/index.cjs.map +1 -0
- package/dist/plugs/settings/css/index.js +22 -0
- package/dist/plugs/settings/css/index.js.map +1 -0
- package/dist/plugs/settings/css/types.cjs +19 -0
- package/dist/plugs/settings/css/types.cjs.map +1 -0
- package/dist/plugs/settings/css/types.js +1 -0
- package/dist/plugs/settings/css/types.js.map +1 -0
- package/dist/plugs/settings/errors/build.cjs +45 -0
- package/dist/plugs/settings/errors/build.cjs.map +1 -0
- package/dist/plugs/settings/errors/build.js +10 -0
- package/dist/plugs/settings/errors/build.js.map +1 -0
- package/dist/plugs/settings/errors/index.cjs +417 -0
- package/dist/plugs/settings/errors/index.cjs.map +1 -0
- package/dist/plugs/settings/errors/index.js +24 -0
- package/dist/plugs/settings/errors/index.js.map +1 -0
- package/dist/plugs/settings/errors/types.cjs +19 -0
- package/dist/plugs/settings/errors/types.cjs.map +1 -0
- package/dist/plugs/settings/errors/types.js +1 -0
- package/dist/plugs/settings/errors/types.js.map +1 -0
- package/dist/plugs/settings/fastPlay/build.cjs +46 -0
- package/dist/plugs/settings/fastPlay/build.cjs.map +1 -0
- package/dist/plugs/settings/fastPlay/build.js +8 -0
- package/dist/plugs/settings/fastPlay/build.js.map +1 -0
- package/dist/plugs/settings/fastPlay/index.cjs +510 -0
- package/dist/plugs/settings/fastPlay/index.cjs.map +1 -0
- package/dist/plugs/settings/fastPlay/index.js +23 -0
- package/dist/plugs/settings/fastPlay/index.js.map +1 -0
- package/dist/plugs/settings/fastPlay/types.cjs +19 -0
- package/dist/plugs/settings/fastPlay/types.cjs.map +1 -0
- package/dist/plugs/settings/fastPlay/types.js +1 -0
- package/dist/plugs/settings/fastPlay/types.js.map +1 -0
- package/dist/plugs/settings/frame/build.cjs +31 -0
- package/dist/plugs/settings/frame/build.cjs.map +1 -0
- package/dist/plugs/settings/frame/build.js +8 -0
- package/dist/plugs/settings/frame/build.js.map +1 -0
- package/dist/plugs/settings/frame/index.cjs +542 -0
- package/dist/plugs/settings/frame/index.cjs.map +1 -0
- package/dist/plugs/settings/frame/index.js +29 -0
- package/dist/plugs/settings/frame/index.js.map +1 -0
- package/dist/plugs/settings/frame/types.cjs +19 -0
- package/dist/plugs/settings/frame/types.cjs.map +1 -0
- package/dist/plugs/settings/frame/types.js +1 -0
- package/dist/plugs/settings/frame/types.js.map +1 -0
- package/dist/plugs/settings/gesture/base.cjs +187 -0
- package/dist/plugs/settings/gesture/base.cjs.map +1 -0
- package/dist/plugs/settings/gesture/base.js +24 -0
- package/dist/plugs/settings/gesture/base.js.map +1 -0
- package/dist/plugs/settings/gesture/build.cjs +116 -0
- package/dist/plugs/settings/gesture/build.cjs.map +1 -0
- package/dist/plugs/settings/gesture/build.js +13 -0
- package/dist/plugs/settings/gesture/build.js.map +1 -0
- package/dist/plugs/settings/gesture/index.cjs +877 -0
- package/dist/plugs/settings/gesture/index.cjs.map +1 -0
- package/dist/plugs/settings/gesture/index.js +38 -0
- package/dist/plugs/settings/gesture/index.js.map +1 -0
- package/dist/plugs/settings/gesture/touch.cjs +784 -0
- package/dist/plugs/settings/gesture/touch.cjs.map +1 -0
- package/dist/plugs/settings/gesture/touch.js +27 -0
- package/dist/plugs/settings/gesture/touch.js.map +1 -0
- package/dist/plugs/settings/gesture/types.cjs +19 -0
- package/dist/plugs/settings/gesture/types.cjs.map +1 -0
- package/dist/plugs/settings/gesture/types.js +1 -0
- package/dist/plugs/settings/gesture/types.js.map +1 -0
- package/dist/plugs/settings/gesture/wheel.cjs +757 -0
- package/dist/plugs/settings/gesture/wheel.cjs.map +1 -0
- package/dist/plugs/settings/gesture/wheel.js +27 -0
- package/dist/plugs/settings/gesture/wheel.js.map +1 -0
- package/dist/plugs/settings/keys/build.cjs +117 -0
- package/dist/plugs/settings/keys/build.cjs.map +1 -0
- package/dist/plugs/settings/keys/build.js +13 -0
- package/dist/plugs/settings/keys/build.js.map +1 -0
- package/dist/plugs/settings/keys/index.cjs +612 -0
- package/dist/plugs/settings/keys/index.cjs.map +1 -0
- package/dist/plugs/settings/keys/index.js +34 -0
- package/dist/plugs/settings/keys/index.js.map +1 -0
- package/dist/plugs/settings/keys/types.cjs +19 -0
- package/dist/plugs/settings/keys/types.cjs.map +1 -0
- package/dist/plugs/settings/keys/types.js +1 -0
- package/dist/plugs/settings/keys/types.js.map +1 -0
- package/dist/plugs/settings/locked/build.cjs +92 -0
- package/dist/plugs/settings/locked/build.cjs.map +1 -0
- package/dist/plugs/settings/locked/build.js +9 -0
- package/dist/plugs/settings/locked/build.js.map +1 -0
- package/dist/plugs/settings/locked/index.cjs +532 -0
- package/dist/plugs/settings/locked/index.cjs.map +1 -0
- package/dist/plugs/settings/locked/index.js +25 -0
- package/dist/plugs/settings/locked/index.js.map +1 -0
- package/dist/plugs/settings/locked/types.cjs +19 -0
- package/dist/plugs/settings/locked/types.cjs.map +1 -0
- package/dist/plugs/settings/locked/types.js +1 -0
- package/dist/plugs/settings/locked/types.js.map +1 -0
- package/dist/plugs/settings/metadata/build.cjs +29 -0
- package/dist/plugs/settings/metadata/build.cjs.map +1 -0
- package/dist/plugs/settings/metadata/build.js +8 -0
- package/dist/plugs/settings/metadata/build.js.map +1 -0
- package/dist/plugs/settings/metadata/index.cjs +455 -0
- package/dist/plugs/settings/metadata/index.cjs.map +1 -0
- package/dist/plugs/settings/metadata/index.js +24 -0
- package/dist/plugs/settings/metadata/index.js.map +1 -0
- package/dist/plugs/settings/metadata/types.cjs +19 -0
- package/dist/plugs/settings/metadata/types.cjs.map +1 -0
- package/dist/plugs/settings/metadata/types.js +1 -0
- package/dist/plugs/settings/metadata/types.js.map +1 -0
- package/dist/plugs/settings/modes/build.cjs +162 -0
- package/dist/plugs/settings/modes/build.cjs.map +1 -0
- package/dist/plugs/settings/modes/build.js +22 -0
- package/dist/plugs/settings/modes/build.js.map +1 -0
- package/dist/plugs/settings/modes/fullscreen.cjs +625 -0
- package/dist/plugs/settings/modes/fullscreen.cjs.map +1 -0
- package/dist/plugs/settings/modes/fullscreen.js +30 -0
- package/dist/plugs/settings/modes/fullscreen.js.map +1 -0
- package/dist/plugs/settings/modes/index.cjs +1031 -0
- package/dist/plugs/settings/modes/index.cjs.map +1 -0
- package/dist/plugs/settings/modes/index.js +51 -0
- package/dist/plugs/settings/modes/index.js.map +1 -0
- package/dist/plugs/settings/modes/miniplayer.cjs +618 -0
- package/dist/plugs/settings/modes/miniplayer.cjs.map +1 -0
- package/dist/plugs/settings/modes/miniplayer.js +30 -0
- package/dist/plugs/settings/modes/miniplayer.js.map +1 -0
- package/dist/plugs/settings/modes/pictureInPicture.cjs +704 -0
- package/dist/plugs/settings/modes/pictureInPicture.cjs.map +1 -0
- package/dist/plugs/settings/modes/pictureInPicture.js +30 -0
- package/dist/plugs/settings/modes/pictureInPicture.js.map +1 -0
- package/dist/plugs/settings/modes/theater.cjs +557 -0
- package/dist/plugs/settings/modes/theater.cjs.map +1 -0
- package/dist/plugs/settings/modes/theater.js +30 -0
- package/dist/plugs/settings/modes/theater.js.map +1 -0
- package/dist/plugs/settings/modes/types.cjs +19 -0
- package/dist/plugs/settings/modes/types.cjs.map +1 -0
- package/dist/plugs/settings/modes/types.js +1 -0
- package/dist/plugs/settings/modes/types.js.map +1 -0
- package/dist/plugs/settings/notifiers/build.cjs +30 -0
- package/dist/plugs/settings/notifiers/build.cjs.map +1 -0
- package/dist/plugs/settings/notifiers/build.js +8 -0
- package/dist/plugs/settings/notifiers/build.js.map +1 -0
- package/dist/plugs/settings/notifiers/index.cjs +451 -0
- package/dist/plugs/settings/notifiers/index.cjs.map +1 -0
- package/dist/plugs/settings/notifiers/index.js +24 -0
- package/dist/plugs/settings/notifiers/index.js.map +1 -0
- package/dist/plugs/settings/notifiers/types.cjs +19 -0
- package/dist/plugs/settings/notifiers/types.cjs.map +1 -0
- package/dist/plugs/settings/notifiers/types.js +1 -0
- package/dist/plugs/settings/notifiers/types.js.map +1 -0
- package/dist/plugs/settings/objectFit/build.cjs +35 -0
- package/dist/plugs/settings/objectFit/build.cjs.map +1 -0
- package/dist/plugs/settings/objectFit/build.js +10 -0
- package/dist/plugs/settings/objectFit/build.js.map +1 -0
- package/dist/plugs/settings/objectFit/index.cjs +514 -0
- package/dist/plugs/settings/objectFit/index.cjs.map +1 -0
- package/dist/plugs/settings/objectFit/index.js +30 -0
- package/dist/plugs/settings/objectFit/index.js.map +1 -0
- package/dist/plugs/settings/objectFit/types.cjs +19 -0
- package/dist/plugs/settings/objectFit/types.cjs.map +1 -0
- package/dist/plugs/settings/objectFit/types.js +1 -0
- package/dist/plugs/settings/objectFit/types.js.map +1 -0
- package/dist/plugs/settings/overlay/build.cjs +46 -0
- package/dist/plugs/settings/overlay/build.cjs.map +1 -0
- package/dist/plugs/settings/overlay/build.js +8 -0
- package/dist/plugs/settings/overlay/build.js.map +1 -0
- package/dist/plugs/settings/overlay/index.cjs +502 -0
- package/dist/plugs/settings/overlay/index.cjs.map +1 -0
- package/dist/plugs/settings/overlay/index.js +24 -0
- package/dist/plugs/settings/overlay/index.js.map +1 -0
- package/dist/plugs/settings/overlay/types.cjs +19 -0
- package/dist/plugs/settings/overlay/types.cjs.map +1 -0
- package/dist/plugs/settings/overlay/types.js +1 -0
- package/dist/plugs/settings/overlay/types.js.map +1 -0
- package/dist/plugs/settings/persist/build.cjs +41 -0
- package/dist/plugs/settings/persist/build.cjs.map +1 -0
- package/dist/plugs/settings/persist/build.js +8 -0
- package/dist/plugs/settings/persist/build.js.map +1 -0
- package/dist/plugs/settings/persist/index.cjs +413 -0
- package/dist/plugs/settings/persist/index.cjs.map +1 -0
- package/dist/plugs/settings/persist/index.js +22 -0
- package/dist/plugs/settings/persist/index.js.map +1 -0
- package/dist/plugs/settings/persist/types.cjs +19 -0
- package/dist/plugs/settings/persist/types.cjs.map +1 -0
- package/dist/plugs/settings/persist/types.js +1 -0
- package/dist/plugs/settings/persist/types.js.map +1 -0
- package/dist/plugs/settings/playbackRate/build.cjs +32 -0
- package/dist/plugs/settings/playbackRate/build.cjs.map +1 -0
- package/dist/plugs/settings/playbackRate/build.js +8 -0
- package/dist/plugs/settings/playbackRate/build.js.map +1 -0
- package/dist/plugs/settings/playbackRate/index.cjs +448 -0
- package/dist/plugs/settings/playbackRate/index.cjs.map +1 -0
- package/dist/plugs/settings/playbackRate/index.js +23 -0
- package/dist/plugs/settings/playbackRate/index.js.map +1 -0
- package/dist/plugs/settings/playbackRate/types.cjs +19 -0
- package/dist/plugs/settings/playbackRate/types.cjs.map +1 -0
- package/dist/plugs/settings/playbackRate/types.js +1 -0
- package/dist/plugs/settings/playbackRate/types.js.map +1 -0
- package/dist/plugs/settings/poster/build.cjs +29 -0
- package/dist/plugs/settings/poster/build.cjs.map +1 -0
- package/dist/plugs/settings/poster/build.js +8 -0
- package/dist/plugs/settings/poster/build.js.map +1 -0
- package/dist/plugs/settings/poster/index.cjs +435 -0
- package/dist/plugs/settings/poster/index.cjs.map +1 -0
- package/dist/plugs/settings/poster/index.js +24 -0
- package/dist/plugs/settings/poster/index.js.map +1 -0
- package/dist/plugs/settings/poster/types.cjs +19 -0
- package/dist/plugs/settings/poster/types.cjs.map +1 -0
- package/dist/plugs/settings/poster/types.js +1 -0
- package/dist/plugs/settings/poster/types.js.map +1 -0
- package/dist/plugs/settings/settingsView/build.cjs +35 -0
- package/dist/plugs/settings/settingsView/build.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/build.js +8 -0
- package/dist/plugs/settings/settingsView/build.js.map +1 -0
- package/dist/plugs/settings/settingsView/index.cjs +1369 -0
- package/dist/plugs/settings/settingsView/index.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/index.js +42 -0
- package/dist/plugs/settings/settingsView/index.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/index.cjs +1164 -0
- package/dist/plugs/settings/settingsView/menu/index.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/index.js +36 -0
- package/dist/plugs/settings/settingsView/menu/index.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/panel/index.cjs +144 -0
- package/dist/plugs/settings/settingsView/menu/panel/index.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/panel/index.js +16 -0
- package/dist/plugs/settings/settingsView/menu/panel/index.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/panel/main.cjs +524 -0
- package/dist/plugs/settings/settingsView/menu/panel/main.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/panel/main.js +33 -0
- package/dist/plugs/settings/settingsView/menu/panel/main.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/panel/sub.cjs +617 -0
- package/dist/plugs/settings/settingsView/menu/panel/sub.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/panel/sub.js +33 -0
- package/dist/plugs/settings/settingsView/menu/panel/sub.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/base.cjs +357 -0
- package/dist/plugs/settings/settingsView/menu/widgets/base.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/base.js +19 -0
- package/dist/plugs/settings/settingsView/menu/widgets/base.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/button.cjs +392 -0
- package/dist/plugs/settings/settingsView/menu/widgets/button.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/button.js +20 -0
- package/dist/plugs/settings/settingsView/menu/widgets/button.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/color.cjs +498 -0
- package/dist/plugs/settings/settingsView/menu/widgets/color.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/color.js +31 -0
- package/dist/plugs/settings/settingsView/menu/widgets/color.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/dragselect.cjs +563 -0
- package/dist/plugs/settings/settingsView/menu/widgets/dragselect.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/dragselect.js +31 -0
- package/dist/plugs/settings/settingsView/menu/widgets/dragselect.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/group.cjs +500 -0
- package/dist/plugs/settings/settingsView/menu/widgets/group.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/group.js +31 -0
- package/dist/plugs/settings/settingsView/menu/widgets/group.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/index.cjs +912 -0
- package/dist/plugs/settings/settingsView/menu/widgets/index.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/index.js +53 -0
- package/dist/plugs/settings/settingsView/menu/widgets/index.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/input.cjs +409 -0
- package/dist/plugs/settings/settingsView/menu/widgets/input.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/input.js +31 -0
- package/dist/plugs/settings/settingsView/menu/widgets/input.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/limits.cjs +411 -0
- package/dist/plugs/settings/settingsView/menu/widgets/limits.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/limits.js +31 -0
- package/dist/plugs/settings/settingsView/menu/widgets/limits.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/range.cjs +420 -0
- package/dist/plugs/settings/settingsView/menu/widgets/range.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/range.js +31 -0
- package/dist/plugs/settings/settingsView/menu/widgets/range.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/select.cjs +490 -0
- package/dist/plugs/settings/settingsView/menu/widgets/select.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/select.js +31 -0
- package/dist/plugs/settings/settingsView/menu/widgets/select.js.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/toggle.cjs +401 -0
- package/dist/plugs/settings/settingsView/menu/widgets/toggle.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/menu/widgets/toggle.js +31 -0
- package/dist/plugs/settings/settingsView/menu/widgets/toggle.js.map +1 -0
- package/dist/plugs/settings/settingsView/types.cjs +19 -0
- package/dist/plugs/settings/settingsView/types.cjs.map +1 -0
- package/dist/plugs/settings/settingsView/types.js +1 -0
- package/dist/plugs/settings/settingsView/types.js.map +1 -0
- package/dist/plugs/settings/sleepTimer/build.cjs +29 -0
- package/dist/plugs/settings/sleepTimer/build.cjs.map +1 -0
- package/dist/plugs/settings/sleepTimer/build.js +8 -0
- package/dist/plugs/settings/sleepTimer/build.js.map +1 -0
- package/dist/plugs/settings/sleepTimer/index.cjs +431 -0
- package/dist/plugs/settings/sleepTimer/index.cjs.map +1 -0
- package/dist/plugs/settings/sleepTimer/index.js +24 -0
- package/dist/plugs/settings/sleepTimer/index.js.map +1 -0
- package/dist/plugs/settings/sleepTimer/types.cjs +19 -0
- package/dist/plugs/settings/sleepTimer/types.cjs.map +1 -0
- package/dist/plugs/settings/sleepTimer/types.js +2 -0
- package/dist/plugs/settings/sleepTimer/types.js.map +1 -0
- package/dist/plugs/settings/time/build.cjs +32 -0
- package/dist/plugs/settings/time/build.cjs.map +1 -0
- package/dist/plugs/settings/time/build.js +8 -0
- package/dist/plugs/settings/time/build.js.map +1 -0
- package/dist/plugs/settings/time/index.cjs +604 -0
- package/dist/plugs/settings/time/index.cjs.map +1 -0
- package/dist/plugs/settings/time/index.js +29 -0
- package/dist/plugs/settings/time/index.js.map +1 -0
- package/dist/plugs/settings/time/types.cjs +19 -0
- package/dist/plugs/settings/time/types.cjs.map +1 -0
- package/dist/plugs/settings/time/types.js +1 -0
- package/dist/plugs/settings/time/types.js.map +1 -0
- package/dist/plugs/settings/timeTravel/build.cjs +36 -0
- package/dist/plugs/settings/timeTravel/build.cjs.map +1 -0
- package/dist/plugs/settings/timeTravel/build.js +8 -0
- package/dist/plugs/settings/timeTravel/build.js.map +1 -0
- package/dist/plugs/settings/timeTravel/index.cjs +461 -0
- package/dist/plugs/settings/timeTravel/index.cjs.map +1 -0
- package/dist/plugs/settings/timeTravel/index.js +33 -0
- package/dist/plugs/settings/timeTravel/index.js.map +1 -0
- package/dist/plugs/settings/timeTravel/types.cjs +19 -0
- package/dist/plugs/settings/timeTravel/types.cjs.map +1 -0
- package/dist/plugs/settings/timeTravel/types.js +1 -0
- package/dist/plugs/settings/timeTravel/types.js.map +1 -0
- package/dist/plugs/settings/toasts/build.cjs +35 -0
- package/dist/plugs/settings/toasts/build.cjs.map +1 -0
- package/dist/plugs/settings/toasts/build.js +8 -0
- package/dist/plugs/settings/toasts/build.js.map +1 -0
- package/dist/plugs/settings/toasts/index.cjs +450 -0
- package/dist/plugs/settings/toasts/index.cjs.map +1 -0
- package/dist/plugs/settings/toasts/index.js +26 -0
- package/dist/plugs/settings/toasts/index.js.map +1 -0
- package/dist/plugs/settings/toasts/types.cjs +19 -0
- package/dist/plugs/settings/toasts/types.cjs.map +1 -0
- package/dist/plugs/settings/toasts/types.js +1 -0
- package/dist/plugs/settings/toasts/types.js.map +1 -0
- package/dist/plugs/settings/voice/build.cjs +81 -0
- package/dist/plugs/settings/voice/build.cjs.map +1 -0
- package/dist/plugs/settings/voice/build.js +8 -0
- package/dist/plugs/settings/voice/build.js.map +1 -0
- package/dist/plugs/settings/voice/index.cjs +757 -0
- package/dist/plugs/settings/voice/index.cjs.map +1 -0
- package/dist/plugs/settings/voice/index.js +26 -0
- package/dist/plugs/settings/voice/index.js.map +1 -0
- package/dist/plugs/settings/voice/types.cjs +19 -0
- package/dist/plugs/settings/voice/types.cjs.map +1 -0
- package/dist/plugs/settings/voice/types.js +1 -0
- package/dist/plugs/settings/voice/types.js.map +1 -0
- package/dist/plugs/settings/volume/build.cjs +31 -0
- package/dist/plugs/settings/volume/build.cjs.map +1 -0
- package/dist/plugs/settings/volume/build.js +8 -0
- package/dist/plugs/settings/volume/build.js.map +1 -0
- package/dist/plugs/settings/volume/index.cjs +592 -0
- package/dist/plugs/settings/volume/index.cjs.map +1 -0
- package/dist/plugs/settings/volume/index.js +34 -0
- package/dist/plugs/settings/volume/index.js.map +1 -0
- package/dist/plugs/settings/volume/types.cjs +19 -0
- package/dist/plugs/settings/volume/types.cjs.map +1 -0
- package/dist/plugs/settings/volume/types.js +1 -0
- package/dist/plugs/settings/volume/types.js.map +1 -0
- package/dist/plugs/z-register.cjs +5901 -0
- package/dist/plugs/z-register.cjs.map +1 -0
- package/dist/plugs/z-register.js +105 -0
- package/dist/plugs/z-register.js.map +1 -0
- package/dist/super/components/icons.cjs +630 -0
- package/dist/super/components/icons.cjs.map +1 -0
- package/dist/super/components/icons.js +248 -0
- package/dist/super/components/icons.js.map +1 -0
- package/dist/super/components/index.cjs +3111 -0
- package/dist/super/components/index.cjs.map +1 -0
- package/dist/super/components/index.js +498 -0
- package/dist/super/components/index.js.map +1 -0
- package/dist/super/components/notifiers.cjs +784 -0
- package/dist/super/components/notifiers.cjs.map +1 -0
- package/dist/super/components/notifiers.js +96 -0
- package/dist/super/components/notifiers.js.map +1 -0
- package/dist/super/consts.cjs +289 -0
- package/dist/super/consts.cjs.map +1 -0
- package/dist/super/consts.js +28 -0
- package/dist/super/consts.js.map +1 -0
- package/dist/super/plugs/index.cjs +5988 -0
- package/dist/super/plugs/index.cjs.map +1 -0
- package/dist/super/plugs/index.js +388 -0
- package/dist/super/plugs/index.js.map +1 -0
- package/dist/super/plugs/menus.cjs +2572 -0
- package/dist/super/plugs/menus.cjs.map +1 -0
- package/dist/super/plugs/menus.js +132 -0
- package/dist/super/plugs/menus.js.map +1 -0
- package/dist/super/techs.cjs +256 -0
- package/dist/super/techs.cjs.map +1 -0
- package/dist/super/techs.js +32 -0
- package/dist/super/techs.js.map +1 -0
- package/dist/super/utils.cjs +1379 -0
- package/dist/super/utils.cjs.map +1 -0
- package/dist/super/utils.js +400 -0
- package/dist/super/utils.js.map +1 -0
- package/dist/super.cjs +10191 -0
- package/dist/super.cjs.map +1 -0
- package/dist/super.css +3148 -0
- package/dist/super.css.map +1 -0
- package/dist/super.global.js +12460 -0
- package/dist/super.global.js.map +1 -0
- package/dist/super.js +380 -0
- package/dist/super.js.map +1 -0
- package/dist/techs/base.cjs +256 -0
- package/dist/techs/base.cjs.map +1 -0
- package/dist/techs/base.js +19 -0
- package/dist/techs/base.js.map +1 -0
- package/dist/techs/dash.cjs +1160 -0
- package/dist/techs/dash.cjs.map +1 -0
- package/dist/techs/dash.js +24 -0
- package/dist/techs/dash.js.map +1 -0
- package/dist/techs/hls.cjs +1164 -0
- package/dist/techs/hls.cjs.map +1 -0
- package/dist/techs/hls.js +24 -0
- package/dist/techs/hls.js.map +1 -0
- package/dist/techs/html5.cjs +988 -0
- package/dist/techs/html5.cjs.map +1 -0
- package/dist/techs/html5.js +23 -0
- package/dist/techs/html5.js.map +1 -0
- package/dist/techs/shaka.cjs +1183 -0
- package/dist/techs/shaka.cjs.map +1 -0
- package/dist/techs/shaka.js +197 -0
- package/dist/techs/shaka.js.map +1 -0
- package/dist/techs/vimeo.cjs +731 -0
- package/dist/techs/vimeo.cjs.map +1 -0
- package/dist/techs/vimeo.js +24 -0
- package/dist/techs/vimeo.js.map +1 -0
- package/dist/techs/youtube.cjs +730 -0
- package/dist/techs/youtube.cjs.map +1 -0
- package/dist/techs/youtube.js +22 -0
- package/dist/techs/youtube.js.map +1 -0
- package/dist/techs/z-register.cjs +2354 -0
- package/dist/techs/z-register.cjs.map +1 -0
- package/dist/techs/z-register.js +26 -0
- package/dist/techs/z-register.js.map +1 -0
- package/dist/tools/player.cjs +1804 -0
- package/dist/tools/player.cjs.map +1 -0
- package/dist/tools/player.js +29 -0
- package/dist/tools/player.js.map +1 -0
- package/dist/tools/queue.cjs +63 -0
- package/dist/tools/queue.cjs.map +1 -0
- package/dist/tools/queue.js +8 -0
- package/dist/tools/queue.js.map +1 -0
- package/dist/tools/runtime.cjs +1919 -0
- package/dist/tools/runtime.cjs.map +1 -0
- package/dist/tools/runtime.js +49 -0
- package/dist/tools/runtime.js.map +1 -0
- package/dist/types/UIOptions.d.cjs +19 -0
- package/dist/types/UIOptions.d.cjs.map +1 -0
- package/dist/types/UIOptions.d.js +1 -0
- package/dist/types/UIOptions.d.js.map +1 -0
- package/dist/types/actions.d.cjs +19 -0
- package/dist/types/actions.d.cjs.map +1 -0
- package/dist/types/actions.d.js +1 -0
- package/dist/types/actions.d.js.map +1 -0
- package/dist/types/config.d.cjs +19 -0
- package/dist/types/config.d.cjs.map +1 -0
- package/dist/types/config.d.js +1 -0
- package/dist/types/config.d.js.map +1 -0
- package/dist/types/contract.d.cjs +19 -0
- package/dist/types/contract.d.cjs.map +1 -0
- package/dist/types/contract.d.js +1 -0
- package/dist/types/contract.d.js.map +1 -0
- package/dist/types/generics.d.cjs +19 -0
- package/dist/types/generics.d.cjs.map +1 -0
- package/dist/types/generics.d.js +1 -0
- package/dist/types/generics.d.js.map +1 -0
- package/dist/types/global.d.cjs +22 -0
- package/dist/types/global.d.cjs.map +1 -0
- package/dist/types/global.d.js +2 -0
- package/dist/types/global.d.js.map +1 -0
- package/dist/types/registries.d.cjs +19 -0
- package/dist/types/registries.d.cjs.map +1 -0
- package/dist/types/registries.d.js +1 -0
- package/dist/types/registries.d.js.map +1 -0
- package/dist/utils/color.cjs +111 -0
- package/dist/utils/color.cjs.map +1 -0
- package/dist/utils/color.js +21 -0
- package/dist/utils/color.js.map +1 -0
- package/dist/utils/dom.cjs +269 -0
- package/dist/utils/dom.cjs.map +1 -0
- package/dist/utils/dom.js +58 -0
- package/dist/utils/dom.js.map +1 -0
- package/dist/utils/env.cjs +110 -0
- package/dist/utils/env.cjs.map +1 -0
- package/dist/utils/env.js +56 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/file.cjs +176 -0
- package/dist/utils/file.cjs.map +1 -0
- package/dist/utils/file.js +20 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/fn.cjs +133 -0
- package/dist/utils/fn.cjs.map +1 -0
- package/dist/utils/fn.js +41 -0
- package/dist/utils/fn.js.map +1 -0
- package/dist/utils/keys.cjs +66 -0
- package/dist/utils/keys.cjs.map +1 -0
- package/dist/utils/keys.js +28 -0
- package/dist/utils/keys.js.map +1 -0
- package/dist/utils/match.cjs +119 -0
- package/dist/utils/match.cjs.map +1 -0
- package/dist/utils/match.js +30 -0
- package/dist/utils/match.js.map +1 -0
- package/dist/utils/media.cjs +546 -0
- package/dist/utils/media.cjs.map +1 -0
- package/dist/utils/media.js +84 -0
- package/dist/utils/media.js.map +1 -0
- package/dist/utils/methd.cjs +50 -0
- package/dist/utils/methd.cjs.map +1 -0
- package/dist/utils/methd.js +15 -0
- package/dist/utils/methd.js.map +1 -0
- package/dist/utils/num.cjs +92 -0
- package/dist/utils/num.cjs.map +1 -0
- package/dist/utils/num.js +22 -0
- package/dist/utils/num.js.map +1 -0
- package/dist/utils/obj.cjs +204 -0
- package/dist/utils/obj.cjs.map +1 -0
- package/dist/utils/obj.js +58 -0
- package/dist/utils/obj.js.map +1 -0
- package/dist/utils/str.cjs +134 -0
- package/dist/utils/str.cjs.map +1 -0
- package/dist/utils/str.js +35 -0
- package/dist/utils/str.js.map +1 -0
- package/dist/utils/time.cjs +103 -0
- package/dist/utils/time.cjs.map +1 -0
- package/dist/utils/time.js +11 -0
- package/dist/utils/time.js.map +1 -0
- package/package.json +124 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/ts/super/plugs/index.ts","../../../src/ts/core/controllable.ts","../../../../t007-tools/packages/utils/dist/chunk-ZALPHCSJ.js","../../../src/ts/consts/generics.ts","../../../src/ts/utils/str.ts","../../../src/ts/utils/obj.ts","../../../src/ts/plugs/base/index.ts","../../../src/ts/consts/config.ts","../../../src/ts/consts/actions.ts","../../../src/ts/core/registries.ts","../../../src/ts/plugs/main/disabled/build.ts","../../../src/ts/plugs/main/disabled/index.ts","../../../src/ts/plugs/main/lightState/build.ts","../../../src/ts/plugs/main/lightState/index.ts","../../../src/ts/plugs/main/playlist/build.ts","../../../src/ts/plugs/main/playlist/index.ts","../../../src/ts/utils/num.ts","../../../src/ts/plugs/main/skeleton/build.ts","../../../src/ts/utils/dom.ts","../../../src/ts/utils/fn.ts","../../../../t007-tools/packages/utils/dist/chunk-NX2LWYD6.js","../../../../t007-tools/packages/utils/dist/hooks/vanilla.js","../../../src/ts/utils/env.ts","../../../src/ts/plugs/main/skeleton/index.ts","../../../src/ts/plugs/settings/airplay/build.ts","../../../src/ts/plugs/settings/airplay/index.ts","../../../src/ts/plugs/settings/ambience/build.ts","../../../src/ts/plugs/settings/ambience/index.ts","../../../src/ts/plugs/settings/auto/build.ts","../../../src/ts/utils/time.ts","../../../src/ts/utils/media.ts","../../../src/ts/plugs/settings/auto/index.ts","../../../src/ts/plugs/base/slider.ts","../../../src/ts/plugs/settings/brightness/build.ts","../../../src/ts/plugs/settings/brightness/index.ts","../../../src/ts/plugs/settings/captions/build.ts","../../../src/ts/plugs/settings/captions/index.ts","../../../src/ts/plugs/settings/cast/build.ts","../../../src/ts/plugs/settings/cast/index.ts","../../../src/ts/utils/file.ts","../../../src/ts/utils/match.ts","../../../src/ts/plugs/settings/controlPanel/build.ts","../../../src/ts/plugs/settings/controlPanel/index.ts","../../../src/ts/plugs/settings/controlPanel/draggable.ts","../../../src/ts/plugs/settings/toasts/build.ts","../../../src/ts/plugs/settings/toasts/index.ts","../../../src/ts/plugs/settings/css/build.ts","../../../src/ts/plugs/settings/css/index.ts","../../../src/ts/plugs/settings/errors/build.ts","../../../src/ts/plugs/settings/errors/index.ts","../../../src/ts/plugs/settings/fastPlay/index.ts","../../../src/ts/plugs/settings/fastPlay/build.ts","../../../src/ts/plugs/settings/frame/build.ts","../../../src/ts/utils/color.ts","../../../src/ts/plugs/settings/frame/index.ts","../../../src/ts/plugs/settings/gesture/build.ts","../../../src/ts/plugs/settings/gesture/index.ts","../../../src/ts/plugs/settings/gesture/base.ts","../../../src/ts/plugs/settings/gesture/touch.ts","../../../src/ts/plugs/settings/gesture/wheel.ts","../../../src/ts/plugs/settings/keys/build.ts","../../../src/ts/plugs/settings/keys/index.ts","../../../src/ts/plugs/settings/locked/build.ts","../../../src/ts/plugs/settings/locked/index.ts","../../../src/ts/plugs/settings/metadata/build.ts","../../../src/ts/plugs/settings/metadata/index.ts","../../../src/ts/plugs/settings/modes/build.ts","../../../src/ts/plugs/settings/modes/fullscreen.ts","../../../src/ts/plugs/settings/modes/theater.ts","../../../src/ts/tools/player.ts","../../../src/ts/tools/runtime.ts","../../../src/ts/plugs/settings/modes/pictureInPicture.ts","../../../src/ts/plugs/settings/modes/miniplayer.ts","../../../src/ts/plugs/settings/modes/index.ts","../../../src/ts/plugs/settings/notifiers/build.ts","../../../src/ts/plugs/settings/notifiers/index.ts","../../../src/ts/plugs/settings/objectFit/build.ts","../../../src/ts/plugs/settings/objectFit/index.ts","../../../src/ts/plugs/settings/overlay/build.ts","../../../src/ts/plugs/settings/overlay/index.ts","../../../src/ts/plugs/settings/persist/build.ts","../../../src/ts/plugs/settings/persist/index.ts","../../../src/ts/plugs/settings/playbackRate/build.ts","../../../src/ts/plugs/settings/playbackRate/index.ts","../../../src/ts/plugs/settings/poster/build.ts","../../../src/ts/plugs/settings/poster/index.ts","../../../src/ts/plugs/settings/settingsView/index.ts","../../../src/ts/plugs/settings/settingsView/build.ts","../../../src/ts/components/base/index.ts","../../../src/ts/plugs/settings/settingsView/menu/index.ts","../../../src/ts/plugs/settings/settingsView/menu/panel/index.ts","../../../src/ts/plugs/settings/settingsView/menu/widgets/base.ts","../../../src/ts/plugs/settings/settingsView/menu/widgets/group.ts","../../../src/ts/plugs/settings/settingsView/menu/panel/main.ts","../../../src/ts/plugs/settings/settingsView/menu/panel/sub.ts","../../../src/ts/plugs/settings/sleepTimer/build.ts","../../../src/ts/plugs/settings/sleepTimer/index.ts","../../../src/ts/plugs/settings/time/build.ts","../../../src/ts/plugs/settings/time/index.ts","../../../src/ts/plugs/settings/timeTravel/build.ts","../../../src/ts/plugs/settings/timeTravel/index.ts","../../../src/ts/plugs/settings/voice/index.ts","../../../src/ts/plugs/settings/voice/build.ts","../../../src/ts/plugs/settings/volume/build.ts","../../../src/ts/plugs/settings/volume/index.ts"],"sourcesContent":["export * from \"@plugs/base\";\nexport * from \"@plugs/main/disabled\";\nexport * from \"@plugs/main/lightState\";\nexport * from \"@plugs/main/playlist\";\nexport * from \"@plugs/main/skeleton\";\nexport * from \"@plugs/settings/airplay\";\nexport * from \"@plugs/settings/ambience\";\nexport * from \"@plugs/settings/auto\";\nexport * from \"@plugs/settings/brightness\";\nexport * from \"@plugs/settings/captions\";\nexport * from \"@plugs/settings/cast\";\nexport * from \"@plugs/settings/controlPanel\";\nexport * from \"@plugs/settings/css\";\nexport * from \"@plugs/settings/errors\";\nexport * from \"@plugs/settings/fastPlay\";\nexport * from \"@plugs/settings/frame\";\nexport * from \"@plugs/settings/gesture\";\nexport * from \"@plugs/settings/keys\";\nexport * from \"@plugs/settings/locked\";\nexport * from \"@plugs/settings/metadata\";\nexport * from \"@plugs/settings/modes\";\nexport * from \"@plugs/settings/notifiers\";\nexport * from \"@plugs/settings/objectFit\";\nexport * from \"@plugs/settings/overlay\";\nexport * from \"@plugs/settings/persist\";\nexport * from \"@plugs/settings/playbackRate\";\nexport * from \"@plugs/settings/poster\";\nexport * from \"@plugs/settings/settingsView\";\nexport * from \"@plugs/settings/sleepTimer\";\nexport * from \"@plugs/settings/time\";\nexport * from \"@plugs/settings/timeTravel\";\nexport * from \"@plugs/settings/toasts\";\nexport * from \"@plugs/settings/voice\";\nexport * from \"@plugs/settings/volume\";\nimport \"../../plugs/z-register\";\nimport \"./menus\";\n","import { Controller } from \"./controller\";\r\nimport { type Reactive, reactive } from \"sia-reactor\";\r\nimport { nuke } from \"sia-reactor/utils\";\r\nimport { guardAllMethods } from \"@utils/methd\";\r\nimport { isObj } from \"@utils/obj\";\r\nimport { isFunc } from \"@t007/utils\";\r\n\r\n// A lifecylce controlled by it's Controller\r\n// Try to use methods for most things so they can be customized when extended and also auto guarded\r\nexport abstract class Controllable<Config = any, State = any> {\r\n protected readonly ac = new AbortController();\r\n protected readonly signal = this.ac.signal;\r\n public readonly ctlr: Controller;\r\n public readonly media: Controller[\"media\"];\r\n public readonly state!: State extends object ? Reactive<State> : State; // for reactivity needs of those who pass it up\r\n public config: Config; // may be a reactive obj node or the obj itself\r\n public get settings() {\r\n return this.ctlr.settings; // can change ref\r\n } // for easy reach, better devx\r\n\r\n constructor(ctlr: Controller, config: Config, state?: State) {\r\n guardAllMethods(this, ctlr.guard);\r\n this.signal = AbortSignal.any([this.signal, ctlr.signal]);\r\n this.ctlr = ctlr;\r\n this.media = ctlr.media; // can't change ref\r\n this.state = (isObj(state) ? reactive(state) : state) as Controllable[\"state\"];\r\n this.config = config;\r\n }\r\n\r\n public setup(): this {\r\n return this.onSetup(), this; // We let the subclass do its work\r\n }\r\n protected abstract onSetup(): void;\r\n\r\n public destroy(): void {\r\n !this.signal.aborted && this.ac.abort(`[TMG Controllable] Instance is being destroyed`); // incase controller already aborted, kills all listeners and timers before proper destruction below\r\n this.onDestroy(), (this.state as any)?.destroy?.(), this.config !== this.media && isFunc((this.config as any)?.destroy) && (this.config as any)?.destroy?.(); // Can I clean here?... Anatoly :)\r\n nuke(this);\r\n }\r\n protected onDestroy(): void {}\r\n}\r\n","// src/ts/core/dom.ts\nimport { createEl, assignEl } from \"sia-reactor/utils\";\nimport { getActiveEl } from \"sia-reactor/utils\";\nimport { NOOP } from \"sia-reactor\";\nvar INTERACTIVE_SELECTOR = \":is(button,[href],input:not([type='hidden']),select,textarea,details>summary,[contenteditable],iframe,audio[controls],video[controls],[tabindex]):not([disabled],[tabindex='-1'],[data-focus-guard],[inert],[inert] *)\";\nvar isInteractive = (target) => target instanceof HTMLElement && target.matches(INTERACTIVE_SELECTOR);\nvar VIRTUAL_RESOURCE = /* @__PURE__ */ Symbol.for(\"T007_VIRTUAL_RESOURCE\");\nfunction loadResource(req, type = \"style\", { module, media, crossOrigin, integrity, referrerPolicy, nonce, fetchPriority, attempts = 3, retryKey = false } = {}, win = window) {\n win.t007 ??= {}, win.t007._resourceCache ??= {};\n if (req === VIRTUAL_RESOURCE || isSym(req)) return Promise.resolve();\n const src = req;\n if (win.t007._resourceCache[src]) return win.t007._resourceCache[src];\n const existing = type === \"script\" ? Array.prototype.find.call(win.document.scripts, (s) => isSameURL(s.src, src)) : type === \"style\" ? Array.prototype.find.call(win.document.styleSheets, (s) => isSameURL(s.href, src)) : null;\n if (existing) return win.t007._resourceCache[src] = Promise.resolve(existing);\n win.t007._resourceCache[src] = new Promise((resolve, reject) => {\n (function tryLoad(remaining, el) {\n const onerror = () => {\n el?.remove?.();\n if (remaining > 1) {\n setTimeout(tryLoad, 1e3, remaining - 1);\n console.warn(`Retrying ${type} load for \"${src}\" (${attempts - remaining + 1})...`);\n } else {\n delete win.t007._resourceCache[src];\n reject(new Error(`${capitalize(type)} load failed for \"${src}\" after ${attempts - 1} attempts`));\n }\n };\n const url = retryKey && remaining < attempts ? `${src}${src.includes(\"?\") ? \"&\" : \"?\"}_${retryKey}=${Date.now()}` : src;\n if (type === \"script\") win.document.body.append(el = createEl(\"script\", { src: url, type: module ? \"module\" : \"text/javascript\", crossOrigin, integrity, referrerPolicy, nonce, fetchPriority, onload: () => resolve(el), onerror }) || \"\");\n else if (type === \"style\") win.document.head.append(el = createEl(\"link\", { rel: \"stylesheet\", href: url, media, crossOrigin, integrity, referrerPolicy, nonce, fetchPriority, onload: () => resolve(el), onerror }) || \"\");\n else reject(new Error(`Unsupported resource type: ${type}`));\n })(attempts);\n });\n return win.t007._resourceCache[src];\n}\nfunction getWindow(el = window) {\n return el?.ownerDocument?.defaultView ?? el?.defaultView ?? window;\n}\nfunction createListRenderer({ container, getKey, createNode, updateNode = NOOP, destroyNode = NOOP, initNode }) {\n let nodeRegistry = /* @__PURE__ */ new Map();\n if (initNode) {\n const children = Array.from(container.children);\n for (let i = 0, len = children.length; i < len; i++) initNode(children[i], (key) => nodeRegistry.set(key, children[i]));\n }\n return function syncDOM(array, strict = true) {\n const newRegistry = /* @__PURE__ */ new Map(), seenKeys = /* @__PURE__ */ new Set(), oldPositions = /* @__PURE__ */ new WeakMap(), children = Array.from(container.children);\n for (let i = 0, len = children.length; i < len; i++) oldPositions.set(children[i], i);\n const futureNodes = [], oldIndices = [];\n for (let i = 0, len = array.length; i < len; i++) {\n const item = array[i], key = getKey(item);\n if (seenKeys.has(key)) throw new Error(`[List Renderer] Duplicate key \"${key}\" detected`);\n let node = nodeRegistry.get(key);\n if (!node) {\n node = createNode(item);\n if (!node) {\n if (strict) throw new Error(`[List Renderer] No HTMLElement for key \"${key}\"`);\n continue;\n }\n oldIndices.push(-1);\n } else updateNode(node, item), oldIndices.push(oldPositions.get(node) ?? -1);\n seenKeys.add(key), futureNodes.push(node), newRegistry.set(key, node);\n }\n for (const [key, node] of nodeRegistry.entries()) !seenKeys.has(key) && node.parentElement === container && (destroyNode(node, key), node.remove());\n const sequence = longestIncreasingSubsequence(oldIndices), stable = new Set(sequence);\n let anchor = null;\n for (let i = futureNodes.length - 1; i >= 0; i--) {\n const node = futureNodes[i];\n if (oldIndices[i] !== -1 && stable.has(i)) {\n anchor = node;\n continue;\n }\n container.insertBefore(node, anchor), anchor = node;\n }\n nodeRegistry = newRegistry;\n };\n}\n\n// src/ts/index.ts\nimport { NIL, NOOP as NOOP2 } from \"sia-reactor\";\n\n// src/ts/core/obj.ts\nimport { isObj } from \"sia-reactor/utils\";\nfunction isDef(val) {\n return \"undefined\" !== typeof val;\n}\nfunction isSym(val) {\n return \"symbol\" === typeof val;\n}\nfunction isBool(val) {\n return \"boolean\" === typeof val;\n}\nfunction isNum(val) {\n return \"number\" === typeof val;\n}\nfunction isStr(val) {\n return \"string\" === typeof val;\n}\nfunction isArr(obj) {\n return Array.isArray(obj);\n}\nfunction isPOJO(obj, crossRealms = false, typecheck = true) {\n return (typecheck ? isObj(obj, false) : true) && (crossRealms ? Object.prototype.toString.call(obj) === \"[object Object]\" : obj.constructor === Object);\n}\nfunction isIter(obj) {\n return obj != null && \"function\" === typeof obj[Symbol.iterator];\n}\nfunction isFunc(val) {\n return \"function\" === typeof val;\n}\nfunction inBoolArrOpt(opt, str) {\n return opt?.includes?.(str) ?? opt;\n}\n\n// src/ts/core/num.ts\nimport { clamp } from \"sia-reactor/utils\";\nfunction longestIncreasingSubsequence(array) {\n const n = array.length, parent = new Array(n), tails = [];\n for (let i = 0; i < n; i++) {\n const value = array[i];\n if (value === -1) continue;\n let left = 0;\n let right = tails.length;\n while (left < right) {\n const mid = left + right >> 1;\n if (array[tails[mid]] < value) left = mid + 1;\n else right = mid;\n }\n if (left > 0) parent[i] = tails[left - 1];\n else parent[i] = -1;\n tails[left] = i;\n }\n if (!tails.length) return [];\n const result = [];\n let k = tails[tails.length - 1];\n while (k >= 0) result.push(k), k = parent[k];\n return result.reverse(), result;\n}\n\n// src/ts/core/str.ts\nfunction uid(prefix = \"\") {\n return prefix + Date.now().toString(36) + \"_\" + performance.now().toString(36).replace(\".\", \"\") + \"_\" + Math.random().toString(36).slice(2);\n}\nfunction capitalize(word = \"\") {\n return word.replace(/^(\\s*)([a-z])/i, (_, s, l) => s + l.toUpperCase());\n}\nfunction camelize(str = \"\", { source } = /[\\s_-]+/, { preserveInnerCase: pIC = true, upperFirst: uF = false } = {}) {\n return (pIC ? str : str.toLowerCase()).replace(new RegExp(source + \"(\\\\w)\", \"g\"), (_, c) => c.toUpperCase()).replace(/^\\w/, (c) => c[uF ? \"toUpperCase\" : \"toLowerCase\"]());\n}\nfunction uncamelize(str, separator = \" \") {\n return str.replace(/([a-z])([A-Z])/g, `$1${separator}$2`).toLowerCase();\n}\nfunction remToPx(rem, el = document.documentElement) {\n return rem * parseFloat(getComputedStyle(el).fontSize);\n}\nfunction pxToRem(px, el = document.documentElement) {\n return px / parseFloat(getComputedStyle(el).fontSize);\n}\nfunction parseCSSTime(time) {\n return time?.endsWith?.(\"ms\") ? parseFloat(time) : parseFloat(time) * 1e3;\n}\nfunction parseCSSSize(size, el) {\n return size?.endsWith?.(\"px\") ? parseFloat(size) : remToPx(parseFloat(size), el);\n}\nfunction cleanURL(url) {\n try {\n const u = new URL(url, window.location.href);\n return decodeURIComponent(u.origin + u.pathname);\n } catch {\n return url.replace(/\\\\/g, \"/\").split(\"?\")[0].trim();\n }\n}\nfunction isSameURL(url1, url2) {\n if (url1 === url2) return true;\n if (!isStr(url1) || !isStr(url2) || !url1 || !url2) return false;\n return cleanURL(url1) === cleanURL(url2);\n}\n\n// src/ts/core/fn.ts\nimport { setTimeout as setTimeout2, setInterval, requestAnimationFrame } from \"sia-reactor/utils\";\nfunction throttle(key, fn, delay = 30, strict = true, signal, win) {\n const throttleMap = t007._throttlers ??= /* @__PURE__ */ new Map();\n if (strict === true) {\n const now = performance.now();\n return now - (throttleMap.get(key) ?? 0) < delay ? void 0 : (throttleMap.set(key, now), fn());\n }\n if (throttleMap.has(key)) return;\n const id = strict === false ? setTimeout2(() => throttleMap.delete(key), delay, signal, win) : strict(() => throttleMap.delete(key));\n return throttleMap.set(key, id), fn();\n}\nfunction debounce(key, fn, delay = 30, strict = true, signal, win) {\n const debounceMap = t007._debouncers ??= /* @__PURE__ */ new Map();\n if (strict) {\n const now = performance.now(), prev = debounceMap.get(key) ?? 0;\n return debounceMap.set(key, now), now - prev < delay ? void 0 : fn();\n }\n const prevId = debounceMap.get(key);\n prevId !== void 0 && (win ?? window).clearTimeout(prevId);\n const id = setTimeout2(() => (debounceMap.delete(key), fn()), delay, signal, win);\n return void debounceMap.set(key, id);\n}\nfunction RAFLoop(key, fn, signal, win) {\n const rafLoopMap = t007._RAFLoopers ??= /* @__PURE__ */ new Map();\n if (rafLoopMap.has(key)) return void rafLoopMap.set(key, fn);\n rafLoopMap.set(key, fn);\n const loop = (_ = 0, fn2 = rafLoopMap.get(key)) => fn2 && (fn2(), requestAnimationFrame(loop, signal, win));\n loop();\n}\nvar cancelRAFLoop = (key) => t007._RAFLoopers ? t007._RAFLoopers.delete(key) : false;\nfunction limited(FN_KEY, fn, opts = {}) {\n let count = 0, { key, maxTimes: max = 1, oncePerSession = true } = isStr(opts) ? { key: opts } : opts;\n const getReg = () => JSON.parse(localStorage.getItem(FN_KEY) || \"{}\"), setReg = (r) => localStorage.setItem(FN_KEY, JSON.stringify(r));\n const handle = (...args) => {\n if (oncePerSession && count > 0) return void 0;\n if (!key) return count++ < max ? fn(...args) : void 0;\n const r = getReg(), c = r[key] || 0;\n return c < max ? (count++, r[key] = c + 1, setReg(r), fn(...args)) : void 0;\n };\n handle.left = max - (handle.count = count);\n handle.reset = () => (count = 0, key && ((r) => (delete r[key], setReg(r)))(getReg()));\n handle.block = () => (count = max, key && ((r) => (r[key] = max, setReg(r)))(getReg()));\n return handle;\n}\nvar mockAsync = (timeout = 250) => new Promise((resolve) => setTimeout2(resolve, timeout));\nvar breath = (w = window) => new Promise((res) => w.requestAnimationFrame(res));\nvar deepBreath = (w = window) => new Promise((res) => w.requestAnimationFrame(() => w.requestAnimationFrame(res)));\nfunction bindCleanupToSignal(cleanup, signal) {\n signal?.aborted ? cleanup() : signal?.addEventListener(\"abort\", cleanup, { once: true });\n if (signal && !signal.aborted) cleanup = (() => (signal.removeEventListener(\"abort\", cleanup), cleanup()));\n return cleanup;\n}\n\n// src/ts/core/keys.ts\nimport { KEYS_BLOCKS, parseKeyCombo, stringifyKeyEvent, cleanKeyCombo, matchKeys, getTermsForKey, keyEventAllowed, formatKeyForDisplay, formatKeyShortcutsForDisplay, parseForARIAKS } from \"sia-reactor/utils\";\n\n// src/ts/core/file.ts\nfunction formatSize(bytes, decimals = 3, base = 1e3) {\n if (bytes < base) return `${bytes} byte${bytes == 1 ? \"\" : \"s\"}`;\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"], exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(base)), units.length - 1);\n return `${(bytes / Math.pow(base, exponent)).toFixed(decimals).replace(/\\.0+$/, \"\")} ${units[exponent]}`;\n}\n\n// src/ts/mixins/methd.ts\nimport { onAllMethods, bindAllMethods, guardAllMethods, guardMethod } from \"sia-reactor/utils\";\n\n// src/ts/index.ts\nif (\"undefined\" !== typeof window) {\n (window.t007 ??= {}).VIRTUAL_RESOURCE = VIRTUAL_RESOURCE;\n window.T007_TOAST_JS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/toast@latest`;\n window.T007_INPUT_JS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/input@latest`;\n window.T007_DIALOG_JS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/dialog@latest`;\n window.T007_TOAST_CSS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/toast@latest/dist/index.min.css`;\n window.T007_INPUT_CSS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/input@latest/dist/index.min.css`;\n window.T007_DIALOG_CSS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/dialog@latest/dist/index.min.css`;\n}\n\nexport {\n createEl,\n assignEl,\n INTERACTIVE_SELECTOR,\n isInteractive,\n VIRTUAL_RESOURCE,\n loadResource,\n getWindow,\n createListRenderer,\n getActiveEl,\n isObj,\n isDef,\n isSym,\n isBool,\n isNum,\n isStr,\n isArr,\n isPOJO,\n isIter,\n isFunc,\n inBoolArrOpt,\n longestIncreasingSubsequence,\n clamp,\n uid,\n capitalize,\n camelize,\n uncamelize,\n remToPx,\n pxToRem,\n parseCSSTime,\n parseCSSSize,\n cleanURL,\n isSameURL,\n setTimeout2 as setTimeout,\n setInterval,\n requestAnimationFrame,\n throttle,\n debounce,\n RAFLoop,\n cancelRAFLoop,\n limited,\n mockAsync,\n breath,\n deepBreath,\n bindCleanupToSignal,\n KEYS_BLOCKS,\n parseKeyCombo,\n stringifyKeyEvent,\n cleanKeyCombo,\n matchKeys,\n getTermsForKey,\n keyEventAllowed,\n formatKeyForDisplay,\n formatKeyShortcutsForDisplay,\n parseForARIAKS,\n formatSize,\n onAllMethods,\n bindAllMethods,\n guardAllMethods,\n guardMethod,\n NIL,\n NOOP2 as NOOP\n};\n","// ============ Constants ============\r\n\r\nexport const FN_KEY = \"tmg_fn_registry\";\r\n\r\nexport const LUID_KEY = \"tmg_local_uid\";\r\n","import { uid as _uid } from \"@t007/utils\";\r\nimport { LUID_KEY } from \"@consts/generics\";\r\n\r\n// Case Conversion\r\nexport { capitalize, camelize, uncamelize } from \"@t007/utils\";\r\n\r\n// Generation\r\nexport const uid = (prefix = \"tmg_\") => _uid(prefix);\r\n\r\nexport function luid(key = LUID_KEY, prefix = \"tmg_local_\"): string {\r\n let id = localStorage.getItem(key);\r\n return !id && localStorage.setItem(key, (id = uid(prefix))), id || \"\";\r\n}\r\n\r\n// Parsers\r\nexport { remToPx, pxToRem, parseCSSTime, parseCSSSize } from \"@t007/utils\";\r\n\r\n// Checkers\r\nexport { cleanURL, isSameURL } from \"@t007/utils\";\r\n\r\n// Fuzzy String Matching\r\nexport function getSimilarity(target: string, spoken: string): number {\r\n if (target === spoken) return 1;\r\n if (target.length < 2 || spoken.length < 2) return 0;\r\n let matches = 0;\r\n for (let i = 0; i < target.length - 1; i++) {\r\n const bigram = target.substring(i, i + 2);\r\n if (spoken.includes(bigram)) matches++;\r\n }\r\n // console.log(`Fuzzy Match: ${target} vs ${spoken} = ${matches} / ${target.length - 1} = ${matches / (target.length - 1)}`);\r\n return matches / (target.length - 1); // Returns a score from 0.0 to 1.0 (e.g., 0.85 = 85% match)\r\n}\r\n\r\nexport function fuzzyMatch(targets: string[], transcript: string, threshold: number): string | null {\r\n const tokens = transcript.split(/\\s+/);\r\n for (const target of targets) {\r\n const targetBlob = target.replace(/[-\\s]/g, \"\");\r\n for (let i = 0; i < tokens.length; i++) {\r\n let rawChunk = \"\",\r\n chunkBlob = \"\";\r\n // Group words together to check multi-word phrases\r\n for (let j = i; j < tokens.length; j++) {\r\n rawChunk += (j === i ? \"\" : \" \") + tokens[j]; // The exact string with spaces\r\n chunkBlob += tokens[j]; // The squashed string for math\r\n if (chunkBlob === targetBlob || getSimilarity(targetBlob, chunkBlob) >= threshold) return rawChunk; // Returns exactly what was spoken (e.g., \"six seven\")\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n","import { camelize } from \"./str\";\r\nimport type { Control, ControlPanelBottomTuple } from \"@plugs/settings/controlPanel/types\";\r\nimport { type Paths, type PathValue } from \"sia-reactor\";\r\nimport { setPath } from \"sia-reactor/utils\";\r\nimport type { UIObject, UISettings, UIOption, UITuple } from \"@defs/UIOptions\";\r\nimport { isObj, isArr } from \"@t007/utils\";\r\n\r\nexport { isArr, isObj };\r\nexport { isDef, isSym, isBool, isNum, isStr, isPOJO, isIter, isFunc, inBoolArrOpt } from \"@t007/utils\";\r\n\r\n// Type Guards\r\nexport function isUISetting<T = unknown>(obj: unknown): obj is UISettings<T> {\r\n return isObj(obj) && \"options\" in obj && isArr((obj as UISettings<T>).options);\r\n}\r\nexport function isUIOption<T>(opt: UIOption<T>): opt is UITuple<T> {\r\n return isObj(opt) && \"value\" in (opt as object);\r\n}\r\n\r\n// Assignment & Derivation\r\nexport function setHTMLConfig<T extends object>(target: T, attr: `tmg--${Paths<T, \"--\">}`, value: string): void {\r\n value = value.trim();\r\n const path = attr.replace(\"tmg--\", \"\") as Paths<T, \"--\">;\r\n const parsedValue = (() => {\r\n if (value.includes(\",\")) return value.split(\",\")?.map((v: string) => v.trim());\r\n if (value === \"true\") return true;\r\n if (value === \"false\") return false;\r\n if (value === \"null\") return null;\r\n if (/^\\d+$/.test(value)) return Number(value);\r\n return value;\r\n })() as PathValue<T, typeof path, \"--\">;\r\n setPath<T, \"--\">(target, path, parsedValue, \"--\", (p) => camelize(p));\r\n}\r\n\r\nexport function getBoolOrStr(value: string | boolean): string | boolean {\r\n return value === \"true\" ? true : value === \"false\" ? false : value;\r\n}\r\n\r\nexport function getUIOpt<T = unknown>(opts: UIOption<T>[] | undefined, value: T, key: \"display\" | \"value\" = \"display\"): string {\r\n if (opts)\r\n for (const opt of opts) {\r\n const p = parseUIOpt<T>(opt);\r\n if (p.value == value) return p[key] as string;\r\n }\r\n return String(value);\r\n}\r\n\r\nexport function getUniqueOpts<T>(options: UITuple<T>[]) {\r\n const counts: Record<string, number> = {};\r\n options.forEach((opt) => (counts[opt.display] = (counts[opt.display] || 0) + 1)); // First pass: Count occurrences of each display name\r\n const seen: Record<string, number> = {};\r\n for (let i = options.length - 1; i >= 0; i--) {\r\n const opt = options[i];\r\n if (counts[opt.display] > 1) {\r\n seen[opt.display] = (seen[opt.display] || 0) + 1;\r\n const num = counts[opt.display] - seen[opt.display] + 1;\r\n opt.display = `${opt.display} (${num})`;\r\n }\r\n } // Second pass: Add numbers to duplicates, tracking our current index from the back\r\n return options;\r\n}\r\n\r\nexport function parseUIOpt<T = unknown>(opt: UIOption<T>): UITuple<T> {\r\n return isUIOption<T>(opt) ? { value: opt.value, display: String(opt.display ?? opt.value), infoText: opt.infoText } : { value: opt as T, display: String(opt) };\r\n}\r\nexport function parseUIOpts<T = unknown>(opts: UIOption<T>[]): T[] {\r\n return opts.map((opt) => parseUIOpt(opt).value);\r\n}\r\n\r\nexport function parseUIObj<T extends Record<string, any>>(obj: T): UIObject<T> {\r\n const result: any = {} as UIObject<T>,\r\n keys = Object.keys(obj);\r\n for (let i = 0; i < keys.length; i++) {\r\n const entry = obj[keys[i]];\r\n if (!isObj(entry)) continue;\r\n if (isUISetting(entry))\r\n result[keys[i]] = {\r\n values: entry.options.map((opt: UIOption<unknown>) => parseUIOpt(opt).value),\r\n displays: entry.options.map((opt: UIOption<unknown>) => parseUIOpt(opt).display),\r\n };\r\n else result[keys[i]] = parseUIObj(entry); // recurse on sub-branch\r\n }\r\n return result;\r\n}\r\n\r\n// Control Panel Utilities\r\nexport function parsePanelBottomObj(obj: Partial<ControlPanelBottomTuple> | Control[][] | Control[] | unknown, arr?: false): ControlPanelBottomTuple | false;\r\nexport function parsePanelBottomObj(obj: Partial<ControlPanelBottomTuple> | Control[][] | Control[] | unknown, arr: true): Control[] | false;\r\nexport function parsePanelBottomObj(obj: Partial<ControlPanelBottomTuple> | Control[][] | Control[] | unknown = [], arr = false): ControlPanelBottomTuple | Control[] | false {\r\n if (!isObj(obj) && !isArr(obj)) return false;\r\n const [third = [], second = [], first = []] = isObj<Partial<ControlPanelBottomTuple>>(obj) ? (Object.values(obj).reverse() as Control[][]) : isArr((obj as Control[][])[0]) ? [...(obj as Control[][])].reverse() : [obj as Control[]];\r\n return arr ? ([...third, ...second, ...first] as Control[]) : ({ 1: first, 2: second, 3: third } as ControlPanelBottomTuple);\r\n}\r\n\r\nexport function getPanelSplitCtrls<T = any>(row: T[]): { left: T[]; center: T[]; right: T[] } {\r\n if (!row?.length) return { left: [], center: [], right: [] };\r\n const s1 = row.indexOf(\"spacer\" as any),\r\n s2 = row.indexOf(\"spacer\" as any, s1 + 1);\r\n return s1 === -1 ? { left: row, center: [], right: [] } : s2 === -1 ? { left: row.slice(0, s1), center: [], right: row.slice(s1 + 1) } : { left: row.slice(0, s1), center: row.slice(s1 + 1, s2), right: row.slice(s2 + 1) };\r\n}\r\n\r\nexport function getPanelLocation(b: any, id: string) {\r\n if (isArr(b.top) && b.top.includes(id)) return { path: \"top\", row: b.top, zone: getPanelSplitCtrls(b.top).left.includes(id) ? \"left\" : getPanelSplitCtrls(b.top).center.includes(id) ? \"center\" : \"right\" };\r\n if (isArr(b.center) && b.center.includes(id)) return { path: \"center\", row: b.center, zone: \"zone\" };\r\n if (b.bottom) {\r\n const dB = parsePanelBottomObj(b.bottom);\r\n if (dB) for (const k in dB) if ((dB as any)[k]?.includes(id)) return { path: `bottom.${k}`, row: (dB as any)[k], zone: getPanelSplitCtrls((dB as any)[k]).left.includes(id) ? \"left\" : getPanelSplitCtrls((dB as any)[k]).center.includes(id) ? \"center\" : \"right\" };\r\n }\r\n return { path: \"bottom.1\", row: [], zone: \"left\" };\r\n}\r\n\r\nexport function insertPanelCtrl(current: any[], defaults: readonly any[], id: string): void {\r\n let s = 0;\r\n for (let i = 0; i < defaults.indexOf(id); i++) if (defaults[i] === \"spacer\") s++;\r\n for (let i = defaults.indexOf(id) + 1; i < defaults.length; i++)\r\n if (defaults[i] === \"spacer\") {\r\n let c = 0;\r\n for (let j = 0; j < current.length; j++) if (current[j] === \"spacer\" && ++c === s + 1) return void current.splice(j, 0, id);\r\n } else {\r\n const idx = current.indexOf(defaults[i]);\r\n if (idx !== -1) return void current.splice(idx, 0, id);\r\n }\r\n current.push(id);\r\n}\r\n","import { Controllable } from \"@core/controllable\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { PlugConstructor as PC, PinConstructor as PIC } from \"./types\";\r\nimport type { PlugRegistryMap, PinRegistryMap, MenuRegistryMap } from \"@defs/registries\";\r\nimport { getPath } from \"sia-reactor/utils\";\r\nimport { MenuRegistry } from \"@core/registries\";\r\n\r\nexport abstract class BasePlug<Config = any, State = any> extends Controllable<Config, State> {\r\n public static readonly plugName: string;\r\n public static readonly isCore: boolean = false;\r\n public static readonly isMain: boolean = false;\r\n public static readonly BUILD: any;\r\n public static get surname() {\r\n return this.isMain ? \"\" : \"settings.\";\r\n }\r\n public static get fullName() {\r\n return (this.surname + this.plugName) as keyof PlugRegistryMap;\r\n }\r\n public get name() {\r\n return (this.constructor as PC).plugName;\r\n }\r\n\r\n constructor(ctlr: Controller, config: Config | undefined = getPath(ctlr.config as any, new.target.fullName), state?: State) {\r\n ctlr.plug(new.target.fullName)?.destroy();\r\n super(ctlr, config, state);\r\n const path = new.target.fullName as any;\r\n this.ctlr.config.watch(path, () => (this.config = getPath(this.ctlr.config, path)), { signal: this.signal }); // #COMPUTED: config can lose reference\r\n ctlr.plugs.set(new.target.fullName, this);\r\n }\r\n\r\n protected override onSetup(): void {\r\n this.mount?.();\r\n this.ctlr.state.readyState ? this.wire?.() : this.wire && this.ctlr.state.wonce(\"readyState\", this.wire, { signal: this.signal }); // wire after all plugs setup\r\n }\r\n protected override onDestroy(): void {\r\n this.unmount?.();\r\n this.ctlr.plugs.delete((this.constructor as PC).fullName);\r\n }\r\n\r\n public mount?(): void {}\r\n public unmount?(): void {}\r\n public wire(): void {\r\n this.registerMenu();\r\n }\r\n\r\n protected registerMenu(): void {\r\n this.ctlr.plug(\"settings.settingsView\")?.menu.register(MenuRegistry.get((this.constructor as PC).fullName as keyof MenuRegistryMap)?.(this as any));\r\n } // override to configure positioning\r\n}\r\n\r\nexport abstract class BasePin<Plug extends BasePlug = BasePlug, Config = any, State = any> extends Controllable<Config, State> {\r\n public static readonly pinName: string;\r\n public static readonly Plug: PC;\r\n public static readonly BUILD: any;\r\n public static get surname() {\r\n return this.Plug.plugName;\r\n }\r\n public static get fullName() {\r\n return (this.surname + \".\" + this.pinName) as keyof PinRegistryMap;\r\n }\r\n public get name() {\r\n return (this.constructor as PIC).Plug.fullName;\r\n }\r\n public get plug(): Plug {\r\n return this.ctlr.plug<Plug>((this.constructor as PIC).Plug.fullName)!; // `!`: only plug will instantiate after all\r\n }\r\n\r\n constructor(ctlr: Controller, config: Config, state?: State) {\r\n super(ctlr, config, state);\r\n const path = (new.target.Plug.fullName + \".\" + new.target.pinName) as any;\r\n this.ctlr.config.watch(path, () => (this.config = getPath(this.ctlr.config, path)), { signal: this.signal }); // #COMPUTED: config can lose reference\r\n }\r\n\r\n protected override onSetup(): void {} // plug handles mount and wire\r\n protected override onDestroy(): void {\r\n this.unmount?.();\r\n }\r\n\r\n public mount?(): void {}\r\n public unmount?(): void {}\r\n public wire?(): void {}\r\n}\r\n\r\nexport type * from \"./types\";\r\n","import type { CtlrConfig } from \"@defs/config\";\r\nimport { CTX, type DeepPartial } from \"sia-reactor\";\r\nimport { ACTIONS_BUILD } from \"./actions\";\r\n\r\nexport const CONFIG_BUILD: DeepPartial<CtlrConfig> = {\r\n mediaType: \"video\",\r\n mediaPlayer: \"TMG\",\r\n media: { intent: { playsInline: true, textVisible: true, brightness: 100 } },\r\n actions: Object.fromEntries(Object.entries(ACTIONS_BUILD).map(([k, v]) => [k, { id: k, ...v }])) as any,\r\n logicPathBlacklist: [\"media.state\", \"media.status\", \"media.tech\", \"media.features\", \"media.type\", \"media.element\", \"media.pseudoElement\", \"media.container\", \"media.pseudoContainer\"],\r\n settings: {\r\n // techOrder: [\r\n // \"youtube\", // 1. Black-box (Regex must catch these URLs instantly)\r\n // \"vimeo\", // 2. Black-box (Regex must catch these URLs instantly)\r\n // \"shaka\", // 3. THE APEX PREDATOR (Catches .mpd and .m3u8 first)\r\n // \"hls\", // 4. Fallback (Catches .m3u8 ONLY if Shaka is disabled/fails)\r\n // \"dash\", // 5. Fallback (Catches .mpd ONLY if Shaka is disabled/fails)\r\n // \"html5\", // 6. The Native Floor (Catches raw .mp4, .webm, .mp3, etc.)\r\n // ],\r\n },\r\n debug: true,\r\n devMode: CTX.isDevEnv,\r\n noPlugList: [], // dev: \"settings.persist\"\r\n};\r\n","export const ACTIONS_BUILD = {\n // --- Keyboard-only actions (no default voice triggers; path router covers voice) ---\n playPause: { label: \"Play / Pause\" },\n skipFwd: { label: \"Skip Forward\", notify: \"fwd\" },\n skipBwd: { label: \"Skip Back\", notify: \"bwd\" },\n volumeUp: { label: \"Volume Up\", notify: \"volumeup\" },\n volumeDown: { label: \"Volume Down\", notify: \"volumedown\" },\n brightnessUp: { label: \"Brightness Up\", notify: \"brightnessup\" },\n brightnessDown: { label: \"Brightness Down\", notify: \"brightnessdown\" },\n playbackRateUp: { label: \"Playback Rate Up\", notify: \"playbackrateup\" },\n playbackRateDown: { label: \"Playback Rate Down\", notify: \"playbackratedown\" },\n stepFwd: { label: \"Step Forward\", notify: \"fwd\" },\n stepBwd: { label: \"Step Back\", notify: \"bwd\" },\n prev: { label: \"Previous\", notify: \"mediaprev\" },\n next: { label: \"Next\", notify: \"medianext\" },\n captions: { label: \"Captions\", notify: \"captions\" },\n captionsFontSizeUp: { label: \"Captions: Font Size Up\" },\n captionsFontSizeDown: { label: \"Captions: Font Size Down\" },\n captionsFontFamily: { label: \"Captions: Font Family\" },\n captionsFontWeight: { label: \"Captions: Font Weight\" },\n captionsFontVariant: { label: \"Captions: Font Variant\" },\n captionsFontOpacity: { label: \"Captions: Font Opacity\" },\n captionsBackgroundOpacity: { label: \"Captions: Background Opacity\" },\n captionsWindowOpacity: { label: \"Captions: Window Opacity\" },\n captionsCharacterEdgeStyle: { label: \"Captions: Character Edge\" },\n captionsTextAlignment: { label: \"Captions: Text Alignment\" },\n objectFit: { label: \"Object Fit\" },\n capture: { label: \"Capture Frame\", notify: \"capture\" },\n cast: { label: \"Cast\", notify: \"cast\" },\n airplay: { label: \"AirPlay\", notify: \"airplay\" },\n dark: { label: \"Dark Mode\" },\n settings: { label: \"Settings\", zen: true },\n // --- Logic-expressible actions (logic[] + keyboard, no default voice triggers) ---\n mute: { label: \"Mute\", notify: \"volumemuted\" },\n fullscreen: { label: \"Fullscreen\", notify: \"fullscreen\", logic: [{ path: \"media.intent.fullscreen\", op: \"toggle\" }] },\n theater: { label: \"Theater\", notify: \"theater\", logic: [{ path: \"media.intent.theater\", op: \"toggle\" }] },\n pictureInPicture: { label: \"Picture in Picture\", notify: \"pictureinpicture\", logic: [{ path: \"media.intent.pictureInPicture\", op: \"toggle\" }] },\n timeFormat: { label: \"Time Format\" },\n timeMode: { label: \"Time Mode\" },\n // --- Compound (voice|time)-only actions (voice engine meta, path router can't reach these) ---\n timeTravelUndo: { label: \"Time Travel: Undo\", zen: true },\n timeTravelRedo: { label: \"Time Travel: Redo\", zen: true },\n voiceQuit: { label: \"Voice: Quit\", zen: true },\n voiceSleep: { label: \"Voice: Sleep\", zen: true },\n voiceSubmit: { label: \"Voice: Submit\", zen: true },\n voiceHistoryFirst: { label: \"Voice: Go to Root\", zen: true },\n voiceHistoryPrev: { label: \"Voice: Go Back\", zen: true },\n voiceHistoryNext: { label: \"Voice: Go Forward\", zen: true },\n voiceHistoryLast: { label: \"Voice: Go to Leaf\", zen: true },\n voiceHistoryClear: { label: \"Voice: Clear History\", zen: true },\n voiceToggleOn: { label: \"Voice: Toggle On\", zen: true },\n voiceToggleOff: { label: \"Voice: Toggle Off\", zen: true },\n} as const;\n","import type { BaseTech, TechConstructor } from \"@techs/base\";\r\nimport type { BasePin, BasePlug, PinConstructor, PlugConstructor } from \"@plugs/base\";\r\nimport type { BaseComponent, ComponentConstructor } from \"@components/base\";\r\nimport { CONFIG_BUILD as CB } from \"@consts/config\";\r\nimport type { ComponentRegistryMap, IconRegistryMap, PinRegistryMap, PlugRegistryMap, TechRegistryMap, MenuRegistryMap } from \"@defs/registries\";\r\nimport { deletePath, setPath } from \"sia-reactor/utils\";\r\nimport { Controller } from \"./controller\";\r\n\r\nexport interface RegistryItem<T> {\r\n name: string;\r\n value: T;\r\n config?: any; // no closed doors\r\n}\r\n\r\nexport class BaseRegistry<T> {\r\n protected items: RegistryItem<T>[] = [];\r\n\r\n public register(name: string, value: T, config?: any): this {\r\n return this.unregister(name), this.items.push({ name, value, config }), this;\r\n }\r\n public unregister(name: string, idx = this.items.findIndex((i) => i.name === name)): this {\r\n return idx !== -1 && this.items.splice(idx, 1), this;\r\n }\r\n public get(name: string): T | undefined {\r\n return this.items.find((i) => i.name === name)?.value;\r\n }\r\n public getAll(order?: string[]): T[] {\r\n if (!order) return this.items.map((i) => i.value);\r\n return this.items.sort((a, b, ai = order.indexOf(a.name), bi = order.indexOf(b.name)) => (ai === -1 && bi === -1 ? 0 : ai === -1 ? 1 : bi === -1 ? -1 : ai - bi)).map((i) => i.value);\r\n }\r\n public clear() {\r\n return (this.items = []), this;\r\n }\r\n}\r\n\r\nexport class OrderedRegistry<T> extends BaseRegistry<T> {\r\n public registerFirst(name: string, value: T, config?: any) {\r\n return this.unregister(name), this.items.unshift({ name, value, config }), this;\r\n }\r\n public registerBefore(key: string, name: string, value: T, config?: any) {\r\n this.unregister(name);\r\n const idx = this.items.findIndex((i) => i.name === key);\r\n return idx !== -1 ? (this.items.splice(idx, 0, { name, value, config }), this) : this.register(name, value, config);\r\n }\r\n public registerAfter(key: string, name: string, value: T, config?: any) {\r\n this.unregister(name);\r\n const idx = this.items.findIndex((i) => i.name === key);\r\n return idx !== -1 ? (this.items.splice(idx + 1, 0, { name, value, config }), this) : this.register(name, value, config);\r\n }\r\n}\r\n\r\nexport class TechRegistry extends OrderedRegistry<TechConstructor> {\r\n private static instance = new TechRegistry();\r\n\r\n public static get<K extends keyof TechRegistryMap>(name: K): TechRegistryMap[K] | undefined;\r\n public static get<T extends BaseTech = BaseTech>(name: string): TechConstructor<T> | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register(Tech: TechConstructor): void {\r\n this.instance.register(Tech.techName, Tech);\r\n }\r\n public static unregister(name: string): void {\r\n this.instance.unregister(name);\r\n }\r\n public static registerBefore(key: string, Tech: TechConstructor): void {\r\n this.instance.registerBefore(key, Tech.techName, Tech);\r\n }\r\n public static registerAfter(key: string, Tech: TechConstructor): void {\r\n this.instance.registerAfter(key, Tech.techName, Tech);\r\n }\r\n public static pick(src: string, techOrder?: string[]): TechConstructor | null {\r\n return this.instance.getAll(techOrder).find((Tech) => Tech.canPlaySource(src)) || null;\r\n }\r\n}\r\n\r\nexport class PlugRegistry extends OrderedRegistry<PlugConstructor> {\r\n private static instance = new PlugRegistry();\r\n\r\n public static get<K extends keyof PlugRegistryMap>(name: K): PlugRegistryMap[K] | undefined;\r\n public static get<T extends BasePlug = BasePlug>(name: string): PlugConstructor<T> | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register(Plug: PlugConstructor, editBuild = Plug.BUILD !== undefined): void {\r\n this.instance.register(Plug.fullName, Plug);\r\n editBuild && setPath(CB as any, Plug.fullName, Plug.BUILD);\r\n }\r\n public static unregister(fullName: string, editBuild = true): void {\r\n this.instance.unregister(fullName);\r\n editBuild && deletePath(CB as any, fullName);\r\n }\r\n public static registerBefore(key: string, Plug: PlugConstructor): void {\r\n this.instance.registerBefore(key, Plug.fullName, Plug);\r\n }\r\n public static registerAfter(key: string, Plug: PlugConstructor): void {\r\n this.instance.registerAfter(key, Plug.fullName, Plug);\r\n }\r\n public static getOrdered(): PlugConstructor[] {\r\n return this.instance.getAll();\r\n }\r\n}\r\n\r\nexport class PinRegistry extends BaseRegistry<PinConstructor> {\r\n private static instance = new PinRegistry();\r\n\r\n public static get<K extends keyof PinRegistryMap>(name: K): PinRegistryMap[K] | undefined;\r\n public static get<T extends BasePin = BasePin>(name: string): PinConstructor<T> | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register(Pin: PinConstructor, editBuild = Pin.BUILD !== undefined): void {\r\n this.instance.register(Pin.fullName, Pin);\r\n editBuild && setPath(CB as any, Pin.Plug.fullName + \".\" + Pin.pinName, Pin.BUILD);\r\n }\r\n public static unregister(fullName: string, editBuild = true): void {\r\n this.instance.unregister(fullName);\r\n editBuild && deletePath((fullName.slice(0, fullName.indexOf(\".\")) in CB ? CB : CB.settings) as any, fullName);\r\n }\r\n}\r\n\r\nexport class MenuRegistry extends BaseRegistry<any> {\r\n private static instance = new MenuRegistry();\r\n\r\n public static get<K extends keyof MenuRegistryMap>(name: K): MenuRegistryMap[K] | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register<K extends keyof MenuRegistryMap>(name: K, factory: MenuRegistryMap[K]): void;\r\n public static register(name: string, factory: any): void {\r\n this.instance.register(name, factory);\r\n }\r\n public static unregister(name: keyof MenuRegistryMap): void {\r\n this.instance.unregister(name);\r\n }\r\n}\r\n\r\nexport class ComponentRegistry extends BaseRegistry<ComponentConstructor> {\r\n private static instance = new ComponentRegistry();\r\n\r\n public static get<K extends keyof ComponentRegistryMap>(name: K): ComponentRegistryMap[K] | undefined;\r\n public static get<T extends BaseComponent = BaseComponent>(name: string): ComponentConstructor<T> | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register(Comp: ComponentConstructor): void {\r\n this.instance.register(Comp.componentName, Comp);\r\n }\r\n public static unregister(name: keyof ComponentRegistryMap): void {\r\n this.instance.unregister(name);\r\n }\r\n public static init<K extends keyof ComponentRegistryMap>(name: K, ctlr: Controller, config?: any): InstanceType<ComponentRegistryMap[K]> | null;\r\n public static init<T extends BaseComponent = BaseComponent>(name: string, ctlr: any, config?: any): T | null;\r\n public static init(name: string, ctlr: any, config = {}): any {\r\n const Comp = this.instance.get(name);\r\n if (!Comp) return null;\r\n const instance = new Comp(ctlr, config);\r\n return instance.create(), instance.setup();\r\n }\r\n public static getAll(): ComponentConstructor[] {\r\n return this.instance.getAll();\r\n }\r\n}\r\n\r\nexport class IconRegistry extends BaseRegistry<string> {\r\n private static instance = new IconRegistry();\r\n\r\n public static get<K extends keyof IconRegistryMap>(name: K, raw?: boolean, token?: RegExp | string): IconRegistryMap[K] | string;\r\n public static get(name: string, raw = false, token = /\\btmg-media-[^\\s\"']+\\s*/g) {\r\n return (raw ? this.instance.get(name)?.replace(token, \"\") : this.instance.get(name)) || `<svg></svg>`;\r\n }\r\n public static register<K extends keyof IconRegistryMap>(name: K, svg: IconRegistryMap[K]): void;\r\n public static register(name: string, svg: string): void {\r\n this.instance.register(name, svg);\r\n }\r\n public static unregister(name: keyof IconRegistryMap): void {\r\n this.instance.unregister(name);\r\n }\r\n // Bulk register a map of icons { play: \"<svg...>\", pause: \"<svg...>\" }\r\n public static registerAll(icons: Record<keyof IconRegistryMap, IconRegistryMap[keyof IconRegistryMap]>): void {\r\n for (const k of Object.keys(icons)) this.instance.register(k as keyof IconRegistryMap, icons[k as keyof IconRegistryMap]);\r\n }\r\n}\r\n","import { DisabledConfig } from \"./types\";\r\n\r\nexport const DISABLED_BUILD: DisabledConfig = false;\r\n","import { BasePlug } from \"../../base\";\r\nimport { DISABLED_BUILD } from \"./build\";\r\nimport type { DisabledConfig, DisabledState } from \"./types\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class DisabledPlug extends BasePlug<DisabledConfig, DisabledState> {\r\n public static readonly plugName = \"disabled\";\r\n public static readonly isMain: boolean = true;\r\n public static readonly BUILD = DISABLED_BUILD;\r\n\r\n constructor(ctlr: Controller, config = ctlr.config.disabled) {\r\n super(ctlr, config, { message: \"\" });\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"disabled\", this.handle, { init: true, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handle({ value }: REvent<CtlrConfig, \"disabled\">): void {\r\n if (value) {\r\n this.ctlr.plug(\"settings.settingsView\")?.leaveView();\r\n this.ctlr.cancelAllLoops();\r\n this.media.container.classList.add(\"tmg-media-disabled\");\r\n silence(() => (this.media.intent.paused = true));\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n this.ctlr.DOM.containerContent?.setAttribute(\"inert\", \"\");\r\n this.ctlr.plug(\"settings.keys\")?.setEventListeners(\"remove\");\r\n this.ctlr.notice(\"You cannot access the custom controls when disabled\", \"warn\", null);\r\n } else {\r\n this.media.container.classList.remove(\"tmg-media-disabled\");\r\n this.ctlr.DOM.containerContent?.removeAttribute(\"inert\");\r\n this.ctlr.plug(\"settings.keys\")?.setEventListeners();\r\n }\r\n }\r\n\r\n public deactivate(message: string): void {\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n this.ctlr.DOM.containerContent?.setAttribute(\"data-message\", (this.state.message = message));\r\n const timeline = this.ctlr.plug(\"settings.controlPanel\")?.comp(\"timeline\");\r\n if (timeline) this.ctlr.setCanvasFallback(timeline[\"previewCanvas\"], timeline[\"previewContext\"]!), this.ctlr.setCanvasFallback(timeline[\"thumbnailCanvas\"], timeline[\"thumbnailContext\"]!);\r\n this.media.container.classList.add(\"tmg-media-inactive\");\r\n }\r\n\r\n public reactivate(): void {\r\n t007.dialog?.dismiss(`${this.ctlr.config.id}-error-dialog`, \"recovered\");\r\n if (!this.media.container.classList.contains(\"tmg-media-inactive\")) return;\r\n this.state.message = null;\r\n this.ctlr.DOM.containerContent?.removeAttribute(\"data-message\");\r\n this.media.container.classList.remove(\"tmg-media-inactive\");\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n disabled: typeof DisabledPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface CtlrConfig {\r\n disabled: DisabledConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { LightStateConfig } from \"./types\";\r\n\r\nexport const LIGHT_STATE_BUILD: DeepPartial<LightStateConfig> = {\r\n disabled: false,\r\n controls: [\"meta\", \"bigplaypause\", \"fullscreenorientation\"],\r\n preview: {\r\n usePoster: true,\r\n time: 4,\r\n },\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { LightStateConfig } from \"./types\";\r\nimport { LIGHT_STATE_BUILD } from \"./build\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { TERMINATOR, type REvent } from \"sia-reactor\";\r\nimport { inBoolArrOpt } from \"@utils/obj\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class LightStatePlug extends BasePlug<LightStateConfig> {\r\n public static readonly plugName = \"lightState\";\r\n public static readonly isMain: boolean = true;\r\n public static readonly BUILD = LIGHT_STATE_BUILD;\r\n protected hasStalled = false;\r\n protected shadowTime?: number;\r\n\r\n public override wire(): void {\r\n // Ctlr State Setters\r\n this.ctlr.state.set(\"readyState\", (v) => (v === 2 && !this.config.disabled ? ((this.hasStalled = true), TERMINATOR) : v), { signal: this.signal }); // #DICTATOR: reliable authority\r\n // ---- Media Listeners\r\n this.media.on(\"intent.currentTime\", this.handleCurrentTimeIntent, { capture: true, signal: this.signal }); // #ISOLATION: peak compromise\r\n // ---- Config Listeners\r\n this.ctlr.config.on(\"lightState.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"lightState.controls\", this.handleControls, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"lightState.preview.usePoster\", this.handleUsePoster, { signal: this.signal });\r\n this.ctlr.config.on(\"lightState.preview.time\", this.handleTime, { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleCurrentTimeIntent(e: REvent<CtlrMedia, \"intent.currentTime\">): void {\r\n if (e.resolved || this.config.disabled) return;\r\n if (e.value !== this.shadowTime) e.resolve(this.name); // tech will get it later, no fear\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"lightState.disabled\">): void {\r\n if (value) {\r\n if (this.settings.time.start != null) this.media.intent.currentTime = this.settings.time.start;\r\n this.media.container.classList.remove(\"tmg-media-light\");\r\n this.media.nowatch(\"state.paused\", this.remove);\r\n this.ctlr.DOM.controlsContainer?.removeEventListener(\"click\", this.handleClick);\r\n !this.ctlr.payload.wired && this.hasStalled && this.ctlr.setReadyState(2); // restoring order\r\n } else {\r\n this.config.preview.usePoster = this.config.preview.usePoster;\r\n this.media.container.classList.add(\"tmg-media-light\");\r\n this.media.watch(\"state.paused\", this.remove, { signal: this.signal });\r\n this.ctlr.DOM.controlsContainer?.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n }\r\n }\r\n\r\n protected handleControls(): void {\r\n for (const c of this.ctlr.queryDOM(\"[data-control-id]\", true)) c.dataset.lightControl = this.isLight(c.dataset.controlId!) ? \"true\" : \"false\";\r\n }\r\n\r\n protected handleUsePoster({ target: { value, object } }: REvent<CtlrConfig, \"lightState.preview.usePoster\">): void {\r\n if (this.config.disabled || (value && this.media.state.poster)) return;\r\n silence(() => (this.media.intent.currentTime = this.shadowTime = object.time));\r\n if (!this.media.status.loadedMetadata) this.media.once(\"status.loadedMetadata\", () => (this.config.preview.usePoster = value), { signal: this.signal }); // retrigger when metadata is ready in case time is a percentage\r\n }\r\n\r\n protected handleTime({ target: { object } }: REvent<CtlrConfig, \"lightState.preview.time\">): void {\r\n !this.config.disabled && (!object.usePoster || !this.media.state.poster) && silence(() => (this.media.intent.currentTime = this.shadowTime = object.time!));\r\n }\r\n\r\n protected handleClick({ target }: MouseEvent): void {\r\n target === this.ctlr.DOM.controlsContainer && this.remove();\r\n }\r\n\r\n protected add(): void {\r\n this.config.disabled = false;\r\n }\r\n protected remove(): void {\r\n this.config.disabled = true;\r\n this.isLight(\"bigplaypause\") && this.stall();\r\n this.media.intent.paused = false;\r\n }\r\n\r\n protected stall(): void {\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n const bigPlayBtn = this.ctlr.plug(\"settings.controlPanel\")?.compEl(\"bigplaypause\");\r\n bigPlayBtn && this.media.container.classList.add(\"tmg-media-stall\");\r\n bigPlayBtn?.addEventListener(\"animationend\", () => this.media.container.classList.remove(\"tmg-media-stall\"), { once: true, signal: this.signal });\r\n }\r\n\r\n protected isLight(controlId: string): boolean {\r\n return inBoolArrOpt(this.config.controls, controlId);\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n lightState: typeof LightStatePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface CtlrConfig {\r\n lightState: LightStateConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { PlaylistConfig, PlaylistItemConfig } from \"./types\";\r\n\r\nexport const PLAYLIST_BUILD: DeepPartial<PlaylistConfig> = {\r\n allowOverride: { add: true, delete: true, move: true },\r\n content: null,\r\n};\r\n\r\nexport const PLAYLIST_ITEM_BUILD: DeepPartial<PlaylistItemConfig> = {\r\n media: {\r\n intent: {\r\n src: \"\",\r\n tracks: [],\r\n },\r\n settings: {\r\n metadata: {\r\n title: \"\",\r\n chapterInfo: [],\r\n links: {\r\n title: \"\",\r\n },\r\n },\r\n },\r\n },\r\n settings: {\r\n time: {\r\n start: 0,\r\n },\r\n controlPanel: {\r\n timeline: {\r\n previews: false,\r\n marks: [],\r\n },\r\n },\r\n },\r\n}; // for a playlist\r\n","import { BasePlug } from \"../../base\";\r\nimport type { PlaylistConfig, PlaylistItemConfig } from \"./types\";\r\nimport { PLAYLIST_BUILD, PLAYLIST_ITEM_BUILD } from \"./build\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { mergeObjs, fanout, parsePathObj } from \"sia-reactor/utils\";\r\nimport { transaction } from \"sia-reactor/modules\";\r\nimport { isBool } from \"@utils/obj\";\r\nimport { isSameURL } from \"@utils/str\";\r\nimport { safeNum } from \"@utils/num\";\r\nimport { Controller } from \"@core/controller\";\r\n\r\nexport class PlaylistPlug extends BasePlug<PlaylistConfig> {\r\n public static readonly plugName = \"playlist\";\r\n public static readonly isMain: boolean = true;\r\n public static readonly BUILD = PLAYLIST_BUILD;\r\n public get atFirst() {\r\n return this.state.currentIndex <= 0;\r\n }\r\n public get atLast() {\r\n return !this.config.content || this.state.currentIndex >= this.config.content.length - 1;\r\n }\r\n\r\n constructor(ctlr: Controller, config = ctlr.config.playlist) {\r\n super(ctlr, config, { currentIndex: 0 });\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Getters\r\n this.ctlr.config.get(\"playlist\", (v) => v ?? { content: null }, { signal: this.signal });\r\n // ----------- Setters\r\n this.ctlr.config.set(\"playlist.content\", (v) => (v ? (v.map((i) => mergeObjs(PLAYLIST_ITEM_BUILD as any, parsePathObj(i))) as any) : null), { init: true, signal: this.signal });\r\n // ---- Media Watchers\r\n this.media.on(\"settings.metadata.title\", ({ value }) => this.config.content && (this.config.content[this.state.currentIndex].media.settings.metadata.title = value), { init: \"auto\", signal: this.signal });\r\n this.media.on(\"settings.metadata.chapterInfo\", ({ currentTarget: { value } }) => this.config.content && (this.config.content[this.state.currentIndex].media.settings.metadata.chapterInfo = value), { init: \"auto\", signal: this.signal });\r\n this.media.on(\"settings.metadata.links.title\", ({ value }) => this.config.content && (this.config.content[this.state.currentIndex].media.settings.metadata.links.title = value), { init: \"auto\", signal: this.signal });\r\n // ---- Config -------\r\n this.ctlr.config.on(\"settings.time.start\", ({ value }) => this.config.content && (this.config.content[this.state.currentIndex].settings.time.start = value), { init: \"auto\", signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.timeline.previews\", ({ value }) => this.config.content && (this.config.content[this.state.currentIndex].settings.controlPanel.timeline.previews = value), { init: \"auto\", signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.timeline.marks\", ({ currentTarget: { value } }) => this.config.content && (this.config.content[this.state.currentIndex].settings.controlPanel.timeline.marks = value), { init: \"auto\", signal: this.signal });\r\n // ----------- Listeners\r\n this.ctlr.config.on(\"playlist.content\", this.handleContent, { signal: this.signal, init: true, depth: 1 });\r\n this.ctlr.config.on(\"playlist.allowOverride\", this.syncFeatures, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"prev\", { fn: () => (this.previous(), this.ctlr.plug(\"settings.notifiers\")?.notify(\"mediaprev\")), keyboard: { phase: \"keydown\" } });\r\n this.ctlr.registerAction(\"next\", { fn: () => (this.next(), this.ctlr.plug(\"settings.notifiers\")?.notify(\"medianext\")), keyboard: { phase: \"keydown\" } });\r\n super.wire();\r\n }\r\n\r\n protected handleContent({ currentTarget: { value: content } }: REvent<CtlrConfig, \"playlist.content\", 1>): void {\r\n this.syncFeatures();\r\n const v = content?.find((v) => (v.media.settings.metadata.id && v.media.settings.metadata.id === this.media.settings.metadata.id) || isSameURL(v.media.intent.src, this.media.intent.src)),\r\n pmdle = this.ctlr.plug(\"settings.persist\")?.module,\r\n apply = () => (v ? this.applyItem(v, false) : this.moveTo(this.state.currentIndex));\r\n this.state.currentIndex = (v && content!.indexOf(v)) ?? 0;\r\n pmdle && !pmdle.state.hydrated ? pmdle.state.wonce(\"hydrated\", apply, { signal: this.signal }) : apply();\r\n }\r\n\r\n protected applyItem(item: PlaylistItemConfig, _reset = true): void {\r\n fanout(this.settings, item.settings), fanout(this.media, item.media);\r\n }\r\n\r\n public moveTo(index: number, shouldPlay?: boolean, label = \"Move\"): void {\r\n if (!this.config.content || !this.config.content[index]) return;\r\n this.state.currentIndex = index;\r\n transaction(() => (this.applyItem(this.config.content![index]), isBool(shouldPlay) && (this.media.intent.paused = !shouldPlay)), `Playlist ${label}`);\r\n }\r\n\r\n public remove(index: number): void {\r\n if (!this.config.content) return;\r\n this.config.content.splice(index, 1);\r\n if (index === this.state.currentIndex && this.config.content.length > 0) this.moveTo(Math.min(index, this.config.content.length - 1));\r\n }\r\n\r\n public shuffle(): void {\r\n if (!this.config.content) return;\r\n const list = this.config.content;\r\n for (let i = list.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [list[i], list[j]] = [list[j], list[i]];\r\n }\r\n }\r\n\r\n public previous(): void {\r\n if (safeNum(this.media.state.currentTime) >= 3) transaction(() => ((this.media.intent.currentTime = 0), (this.media.intent.paused = false)), \"Playlist Previous (Restart)\");\r\n else if (this.config.content && this.state.currentIndex > 0) this.moveTo(this.state.currentIndex - 1, true, \"Previous\");\r\n }\r\n\r\n public next(): void {\r\n if (!this.config.content) return;\r\n if (this.state.currentIndex < this.config.content.length - 1) this.moveTo(this.state.currentIndex + 1, true, \"Next\");\r\n }\r\n\r\n protected syncFeatures(): void {\r\n this.media.features.playlist = !!(this.config.content?.length || this.config.allowOverride.add);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n playlist: typeof PlaylistPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface CtlrConfig {\r\n playlist: PlaylistConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n playlist?: boolean;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { AptRange } from \"@defs/generics\";\r\nimport { isNum, clamp } from \"@t007/utils\";\r\n\r\n// Validators\r\nexport { clamp };\r\n\r\nexport function isSafeNum(val: any): boolean {\r\n return isNum(val) && !isNaN(val ?? NaN) && val !== Infinity;\r\n}\r\n\r\nexport function safeNum(number: any, fallback = 0): number {\r\n return isSafeNum(number) ? number : fallback;\r\n}\r\n\r\n// Parsers\r\nexport function parseIfPercent(percent: any, amount: any, autocap = 0.25): number {\r\n const val = percent?.endsWith?.(\"%\") ? safeNum((parseFloat(percent) / 100) * amount) : percent;\r\n return val && amount && autocap && amount <= val ? amount * autocap : val;\r\n}\r\n\r\nexport function parseRomanNum(roman: string, valid = /^[IVXLCDM]+$/i.test(roman), ROMAN = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 } as Record<string, number>): number {\r\n if (!valid) return 0; // ← Invalid input\r\n return roman\r\n .toUpperCase() // Ensure consistent uppercase (e.g., 'iv' becomes 'IV')\r\n .split(\"\") // Turn into array of characters: 'XIV' → ['X','I','V']\r\n .reduce((acc, val, i, arr) => {\r\n const curr = ROMAN[val] || 0, // Current character's value\r\n next = ROMAN[arr[i + 1]] || 0; // Look ahead to the next character (if any)\r\n return acc + (curr < next ? -curr : curr); // Subtractive notation: if current is less than next (e.g., I before V → 4); Otherwise, just add normally\r\n }, 0); // Start accumulator at 0\r\n}\r\n\r\n// Helpers\r\nexport function stepNum<T extends AptRange>(v = 0, { min, max, step }: T): number {\r\n const s = step ? Math.round((safeNum(v) - (min || 0)) / step) * step + (min || 0) : safeNum(v);\r\n return clamp(min, +s.toFixed(10), max); // no gymnastics, for sliders only; to reach near native speed\r\n}\r\n\r\nconst _stepsCache = new Map<string, number[]>();\r\nexport function rotateAny<T>(cur: T, steps: T[] | readonly T[], dir?: \"forwards\" | \"backwards\", wrap?: boolean): T;\r\nexport function rotateAny(cur: number, steps: AptRange, dir?: \"forwards\" | \"backwards\", wrap?: boolean): number;\r\nexport function rotateAny(cur: any, steps: any, dir: \"forwards\" | \"backwards\" = \"forwards\", wrap = true): any {\r\n let list: any[];\r\n if (Array.isArray(steps)) list = steps;\r\n else {\r\n const key = `${steps.min}|${steps.max}|${steps.step}`; // Generate cache key from min|max|step\r\n if (_stepsCache.has(key)) list = _stepsCache.get(key)!;\r\n else _stepsCache.set(key, (list = Array.from({ length: Math.floor((steps.max - steps.min) / steps.step) + 1 }, (_, i) => steps.min + i * steps.step)));\r\n }\r\n let idx = isNum(cur) ? list.reduce((p, c, x) => (Math.abs(c - cur) < Math.abs(list[p] - cur) ? x : p), 0) : list.indexOf(cur);\r\n idx = idx + (dir === \"forwards\" ? 1 : -1);\r\n return list[wrap ? (idx + list.length) % list.length : clamp(0, idx, list.length - 1)];\r\n}\r\n","import { SkeletonConfig } from \"./types\";\r\n\r\nexport const SKELETON_BUILD: Partial<SkeletonConfig> = {\r\n autoPauseAll: true,\r\n};\r\n","import { NOOP } from \"sia-reactor\";\r\nimport { bindCleanupToSignal as bindSig } from \"./fn\";\r\nconst win = \"undefined\" !== typeof window ? window : undefined;\r\n\r\n// Element Factory\r\nexport { createEl, assignEl, getWindow, createListRenderer } from \"@t007/utils\";\r\nexport { initVScrollerator } from \"@t007/utils/hooks/vanilla\";\r\n\r\n// Resource Loading\r\nexport { loadResource } from \"@t007/utils\";\r\n\r\n// Viewport Checks\r\nexport function inDocView(el: Element, axis: \"x\" | \"y\" = \"y\"): boolean {\r\n const rect = el.getBoundingClientRect(),\r\n inX = rect.left + win!.scrollX >= 0 && rect.right + win!.scrollX <= win!.scrollX + (win!.innerWidth || win!.document.documentElement.clientWidth),\r\n inY = rect.top + win!.scrollY >= 0 && rect.bottom + win!.scrollY <= win!.scrollY + (win!.innerHeight || win!.document.documentElement.clientHeight);\r\n return axis === \"x\" ? inY : axis === \"y\" ? inX : inY && inX;\r\n}\r\n\r\nexport function getElSiblingAt(p: number, dir: \"x\" | \"y\", els: HTMLElement[] | NodeListOf<HTMLElement>, pos: \"before\" | \"after\" | \"at\" = \"after\"): HTMLElement | undefined {\r\n return (\r\n els.length &&\r\n (\r\n Array.prototype.reduce.call(\r\n els,\r\n ((closest: { offset: number; element: Element | undefined }, child: Element) => {\r\n const { top: cT, left: cL, width: cW, height: cH } = child.getBoundingClientRect(),\r\n offset = p - (dir === \"y\" ? cT : cL) - (dir === \"y\" ? cH : cW) / 2,\r\n condition = pos === \"after\" ? offset < 0 && offset > closest.offset : pos === \"before\" ? offset > 0 && offset < closest.offset : pos === \"at\" ? Math.abs(offset) <= (dir === \"y\" ? cH : cW) / 2 && Math.abs(offset) < Math.abs(closest.offset) : false;\r\n return condition ? { offset, element: child } : closest;\r\n }) as any,\r\n { offset: pos === \"after\" ? -Infinity : Infinity, element: undefined }\r\n ) as any\r\n ).element\r\n );\r\n}\r\n\r\n// Fullscreen & Picture-in-Picture\r\nexport const queryFullscreen = (): boolean => Boolean(queryFullscreenEl());\r\nexport const queryFullscreenEl = (d = document as any): Element | null => d.fullscreenElement || d.webkitFullscreenElement || d.mozFullScreenElement || d.msFullscreenElement || null;\r\n\r\nexport const queryPictureInPicture = (): boolean => Boolean(queryPictureInPictureEl());\r\nexport const queryPictureInPictureEl = () => document.pictureInPictureElement;\r\n\r\nexport const supportsFullscreen = (vp = HTMLVideoElement.prototype as any, d = document as any) => Boolean(d.fullscreenEnabled || d.mozFullscreenEnabled || d.msFullscreenEnabled || d.webkitFullscreenEnabled || d.webkitSupportsFullscreen || vp.webkitEnterFullscreen);\r\nexport const supportsPictureInPicture = (vp = HTMLVideoElement.prototype as any, d = document as any, w = window as any) => Boolean(d.pictureInPictureEnabled || vp.requestPictureInPicture || w.documentPictureInPicture);\r\n\r\nexport const enterFullscreen = (el: any): Promise<void> => (el.webkitEnterFullscreen ? el.webkitEnterFullscreen() : el.requestFullscreen ? el.requestFullscreen() : el.mozRequestFullScreen ? el.mozRequestFullScreen() : el.webkitRequestFullscreen ? el.webkitRequestFullscreen() : el.msRequestFullscreen ? el.msRequestFullscreen() : Promise.reject(new Error(\"Fullscreen API is not supported\")));\r\nexport const exitFullscreen = (el: any, d = document as any): Promise<void> => (queryFullscreenEl(d) === el ? (el.webkitExitFullscreen ? el.webkitExitFullscreen() : d.exitFullscreen ? d.exitFullscreen() : d.mozCancelFullScreen ? d.mozCancelFullScreen() : d.webkitExitFullscreen ? d.webkitExitFullscreen() : d.msExitFullscreen ? d.msExitFullscreen() : Promise.reject(new Error(\"Fullscreen API is not supported\"))) : Promise.resolve());\r\n\r\n// Safe Click Handling\r\ntype SafeClickEl = HTMLElement & {\r\n _clickHandler?: (e: MouseEvent) => void;\r\n _dblClickHandler?: (e: MouseEvent) => void;\r\n _clickTimeoutId?: ReturnType<typeof setTimeout>;\r\n};\r\nexport function addSafeClicks(el?: SafeClickEl | null, onClick: (e: MouseEvent) => any = NOOP, onDblClick: (e: MouseEvent) => any = NOOP, options?: boolean | AddEventListenerOptions): void {\r\n el && removeSafeClicks(el);\r\n el?.addEventListener(\"click\", (el._clickHandler = (e: MouseEvent) => (clearTimeout(el._clickTimeoutId), (el._clickTimeoutId = setTimeout(() => onClick(e), 300)))), options);\r\n el?.addEventListener(\"dblclick\", (el._dblClickHandler = (e: MouseEvent) => (clearTimeout(el._clickTimeoutId), onDblClick(e))), options);\r\n}\r\nexport function removeSafeClicks(el?: SafeClickEl | null): void {\r\n el?.removeEventListener(\"click\", el._clickHandler as EventListener);\r\n el?.removeEventListener(\"dblclick\", el._dblClickHandler as EventListener);\r\n}\r\n\r\n// DOM Observers\r\ndeclare global {\r\n interface Element {\r\n _resizeCbs?: Set<(entry: ResizeObserverEntry) => void>;\r\n _intersectCbs?: Set<(entry: IntersectionObserverEntry) => void>;\r\n _mutationCbs?: Set<(mutations: MutationRecord[]) => void>;\r\n }\r\n}\r\n\r\nexport const intersectionObserver = win\r\n ? new IntersectionObserver(\r\n (entries) => {\r\n for (const entry of entries) if (entry.target._intersectCbs) for (const cb of entry.target._intersectCbs) cb(entry);\r\n },\r\n { root: null, rootMargin: \"0px\", threshold: 0.3 }\r\n )\r\n : null;\r\n\r\nexport const resizeObserver = win\r\n ? new ResizeObserver((entries) => {\r\n for (const entry of entries) if (entry.target._resizeCbs) for (const cb of entry.target._resizeCbs) cb(entry);\r\n })\r\n : null;\r\n\r\nexport const mutationObserver = win\r\n ? new MutationObserver((mutations) => {\r\n // Dispatch to specific targets if they are being observed directly\r\n // Note: MutationObserver works differently; this handles the 'root' observer callbacks\r\n // We map the *target* of the observation, not the mutation target usually.\r\n // For this util, we assume the observer instance calls the callback associated with the observed node.\r\n // Since we use one global observer, we need to map back.\r\n // Actually, for MutationObserver it's cleaner to keep separate instances if configs differ,\r\n // but for \"utils\" style, we can use a Map logic or just basic callback sets.\r\n // Current implementation assumes the caller handles the mutation list.\r\n const target = mutations[0].target as Element; // Batch usually targets one observer\r\n if (target._mutationCbs) for (const cb of target._mutationCbs) cb(mutations);\r\n })\r\n : null;\r\n\r\n// --- PUBLIC API ---\r\nexport function observeResize(el: Element, cb: (entry: ResizeObserverEntry) => void, sig?: AbortSignal) {\r\n (el._resizeCbs ?? (el._resizeCbs = new Set())).add(cb);\r\n resizeObserver?.observe(el);\r\n return bindSig(() => (el._resizeCbs?.delete(cb), !el._resizeCbs?.size && resizeObserver?.unobserve(el)), sig);\r\n}\r\n\r\nexport function observeIntersection(el: Element, cb: (entry: IntersectionObserverEntry) => void, sig?: AbortSignal) {\r\n (el._intersectCbs ?? (el._intersectCbs = new Set())).add(cb);\r\n intersectionObserver?.observe(el);\r\n return bindSig(() => (el._intersectCbs?.delete(cb), !el._intersectCbs?.size && intersectionObserver?.unobserve(el)), sig);\r\n}\r\n\r\nexport function observeMutation(el: Element, cb: (mutations: MutationRecord[]) => void, options: MutationObserverInit, sig?: AbortSignal) {\r\n (el._mutationCbs ?? (el._mutationCbs = new Set())).add(cb);\r\n mutationObserver?.observe(el, options);\r\n return bindSig(() => el._mutationCbs?.delete(cb), sig);\r\n}\r\n","import { FN_KEY } from \"@consts/generics\";\r\nimport { uid } from \"@t007/utils\";\r\nimport { limited as limitedOrig, LimitedOptions, LimitedHandle } from \"@t007/utils\";\r\n\r\n// ============ Timer Helpers ============\r\nexport { setTimeout, setInterval, requestAnimationFrame, throttle, debounce, RAFLoop, cancelRAFLoop } from \"@t007/utils\";\r\n\r\n// ============ Async Helpers ============\r\nexport { mockAsync, breath, deepBreath } from \"@t007/utils\";\r\n\r\n// ============ Limited Call Helpers ============\r\nexport const limited = <T extends (...args: any[]) => any>(fn: T, opts: LimitedOptions | string = {}): LimitedHandle<T> => limitedOrig(FN_KEY, fn, opts);\r\n\r\nexport const oncePerSession = <T extends (...args: any[]) => any>(fn: T) => limited(fn);\r\nexport const onceEver = <T extends (...args: any[]) => any>(fn: T, key = uid()) => limited(fn, key);\r\n\r\n// ============ Deprecation Helpers ============\r\n/**\r\n * Log a deprecation warning (once per session)\r\n * @param message - Deprecation warning message\r\n */\r\nexport function deprecate(message: string): void {\r\n oncePerSession(() => console.warn(message))();\r\n}\r\n\r\n/**\r\n * Log a deprecation warning for a major version upgrade\r\n * @param major - Major version number when removal occurs\r\n * @param oldName - Name of deprecated feature\r\n * @param newName - Optional replacement feature name\r\n */\r\nexport function deprecateForMajor(major: number, oldName: string, newName?: string): void {\r\n deprecate(newName ? `${oldName} is deprecated and will be removed in ${major}.0; use ${newName} instead.` : `${oldName} is deprecated and will be removed in ${major}.0.`);\r\n}\r\n\r\n// ============ Generic Helpers ============\r\nexport { bindCleanupToSignal } from \"@t007/utils\";\r\n","import {\n INTERACTIVE_SELECTOR,\n clamp,\n createEl,\n getActiveEl,\n isInteractive\n} from \"./chunk-ZALPHCSJ.js\";\n\n// src/ts/hooks/vanilla/outsideClick.ts\nimport { NIL, NOOP } from \"sia-reactor\";\nfunction initOutsideClick(el, { enabled = false, onOutside = NOOP, outOnClick = true, outOnEscape = true, outOnFocusOut = false, allowBounds = false, allowInputs = false, root = window, scoped = true, capture = true } = NIL) {\n const stack = t007._outsiders_stack ??= [], existing = (t007._outsiders ??= /* @__PURE__ */ new WeakMap()).get(el);\n if (!enabled || existing) return existing ? existing : void 0;\n scoped = scoped && root instanceof HTMLElement, root = scoped ? root : root === document ? document : window;\n const onScopedOut = (e, t, p = e.touches?.[0] || e, rect = allowBounds ? el.getBoundingClientRect() : null) => {\n if (stack.at(-1) !== el || (allowBounds ? p.clientX >= rect.left && p.clientX <= rect.right && p.clientY >= rect.top && p.clientY <= rect.bottom : el.contains(t))) return false;\n return (!scoped ? true : root.contains(t)) && onOutside(e);\n }, handleClick = ((e) => outOnClick && !(allowInputs && isInteractive(e.target)) && onScopedOut(e, e.target)), handleEscape = ((e) => outOnEscape && e.key === \"Escape\" && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey && stack.at(-1) === el && onOutside(e)), handleFocusOut = (e) => outOnFocusOut && !el.contains(e.relatedTarget) && onScopedOut(e, e.relatedTarget);\n root.addEventListener(\"mousedown\", handleClick, capture), root.addEventListener(\"touchstart\", handleClick, { passive: true, capture });\n root.addEventListener(\"keydown\", handleEscape, capture);\n el.addEventListener(\"focusout\", handleFocusOut, capture);\n const destroy = () => {\n root.removeEventListener(\"mousedown\", handleClick, capture), root.removeEventListener(\"touchstart\", handleClick, capture);\n root.removeEventListener(\"keydown\", handleEscape, capture);\n el.removeEventListener(\"focusout\", handleFocusOut, capture);\n t007._outsiders.delete(el), stack.splice(stack.indexOf(el), 1);\n };\n return !stack.includes(el) && stack.push(el), t007._outsiders.set(el, destroy), destroy;\n}\nvar removeOutsideClick = (el) => t007._outsiders?.get(el)?.();\n\n// src/ts/hooks/vanilla/focusTrap.ts\nimport { NIL as NIL2 } from \"sia-reactor\";\nfunction initFocusTrap(el, { enabled = false, initialSelector = \"[data-autofocus]\", ringClassName = \"focus-outline\", root = window, scoped = true, capture = true } = NIL2) {\n const stack = t007._ftrappers_stack ??= [], existing = (t007._ftrappers ??= /* @__PURE__ */ new WeakMap()).get(el);\n if (!enabled || existing) return existing ? existing : void 0;\n scoped = scoped && root instanceof HTMLElement, root = scoped ? root : root === document ? document : window;\n let recovering = false;\n const focused = document.querySelector(\":focus\"), initial = el.querySelector(initialSelector), first = createEl(\"span\", { tabIndex: 0 }, { focusGuard: \"start\" }, { position: \"absolute\", width: \"0\", height: \"0\", pointerEvents: \"none\" }), last = createEl(\"span\", { tabIndex: 0 }, { focusGuard: \"end\" }, { position: \"absolute\", width: \"0\", height: \"0\", pointerEvents: \"none\" }), getFocusable = (c = el) => [...c.querySelectorAll(INTERACTIVE_SELECTOR)], resetFocus = (i = 0, els = getFocusable()) => !recovering && (recovering = true, els?.length ? els.at(i).focus() : (!el.hasAttribute(\"tabindex\") && (el.tabIndex = -1), el.focus()), recovering = false), edgeFocus = (pre = false, rt = root) => {\n if (!scoped) return resetFocus(pre ? -1 : 0);\n if (rt.hasAttribute(\"tabindex\")) return rt.focus();\n const items = getFocusable();\n if (!items.length) return resetFocus(0, null);\n const ceil = document.fullscreenElement || document.querySelector(\"dialog:modal\") || document.body;\n let p = rt.parentElement || ceil, all = getFocusable(p);\n while (p !== ceil && (!all.length || (pre ? rt.contains(all[0]) : rt.contains(all.at(-1))))) all = getFocusable(p = p.parentElement || ceil);\n for (let target, len = all.length, i = all.indexOf(items[pre ? 0 : items.length - 1]) + (pre ? -1 : 1); pre ? i >= 0 : i < len; pre ? i-- : i++) if (!rt.contains(target = all[i])) return target.focus();\n (pre ? first : last).blur();\n }, handleFocusIn = (e) => {\n if (document.querySelector(\"dialog:modal\") && !el.matches(\"dialog:modal\")) return;\n stack.at(-1) === el && getActiveEl(el.ownerDocument) !== root && !el.contains(getActiveEl(el.ownerDocument)) && !e.composedPath().includes(el) && resetFocus();\n }, handleInitialBlur = () => initial.classList.remove(ringClassName);\n first.addEventListener(\"focus\", (e) => el.contains(e.relatedTarget) ? edgeFocus(true) : resetFocus(), capture), el.prepend(first);\n last.addEventListener(\"focus\", (e) => el.contains(e.relatedTarget) ? edgeFocus() : resetFocus(-1), capture), el.append(last);\n root.addEventListener(\"focusin\", handleFocusIn, capture);\n if (initial || !el.contains(focused)) !initial ? setTimeout(resetFocus) : setTimeout(() => (initial.classList.add(ringClassName), initial.focus(), initial.addEventListener(\"blur\", handleInitialBlur, capture)));\n const destroy = () => {\n focused?.isConnected && focused.focus(), first.remove(), last.remove();\n root.removeEventListener(\"focusin\", handleFocusIn, capture);\n initial?.removeEventListener(\"blur\", handleInitialBlur, capture);\n t007._ftrappers.delete(el), stack.splice(stack.indexOf(el), 1);\n };\n const handle = { destroy, sync: () => (el.prepend(first), el.append(last)) };\n return !stack.includes(el) && stack.push(el), t007._ftrappers.set(el, handle), handle;\n}\nvar removeFocusTrap = (el) => t007._ftrappers?.get(el)?.destroy();\nvar syncFocusTrap = (el) => t007._ftrappers?.get(el)?.sync();\n\n// src/ts/hooks/vanilla/ripple.ts\nimport { NIL as NIL3 } from \"sia-reactor\";\nfunction rippleHandler(e, { target, forceCenter = false, wrapperClassName = \"t007-ripple-wrapper\", className = \"t007-ripple\", holdClassName = \"t007-ripple-hold\", fadeClassName = \"t007-ripple-fade\", maxDuration = 1e3 } = NIL3) {\n const el = target || e.currentTarget;\n if (!el || e.target !== e.currentTarget && isInteractive(e.target) || el.hasAttribute(\"disabled\") || e.pointerType === \"mouse\" && e.button !== 0) return;\n e.stopPropagation?.();\n const { offsetWidth: rW, offsetHeight: rH } = el, { width: w, height: h, left: l, top: t } = el.getBoundingClientRect(), size = Math.max(rW, rH), x = forceCenter ? rW / 2 - size / 2 : (e.clientX - l) * rW / w - size / 2, y = forceCenter ? rH / 2 - size / 2 : (e.clientY - t) * rH / h - size / 2, wrapper = createEl(\"span\", { className: wrapperClassName }), ripple = createEl(\"span\", { className: className + \" \" + holdClassName }, {}, { cssText: `width:${size}px;height:${size}px;left:${x}px;top:${y}px;` });\n let canRelease = false;\n ripple.addEventListener(\"animationend\", () => canRelease = true, { once: true });\n el.append(wrapper.appendChild(ripple).parentElement);\n let released = false;\n const release = (force) => {\n if (released) return;\n if (!canRelease && force !== true) return ripple.addEventListener(\"animationend\", release, { once: true }), void setTimeout(release, maxDuration, true);\n released = true;\n ripple.classList.replace(holdClassName, fadeClassName);\n ripple.addEventListener(\"animationend\", () => setTimeout(() => wrapper.remove())), setTimeout(() => wrapper.remove(), maxDuration);\n for (const evt of [\"pointerup\", \"pointercancel\"]) (el.ownerDocument?.defaultView || window).removeEventListener(evt, release);\n };\n for (const evt of [\"pointerup\", \"pointercancel\"]) (el.ownerDocument?.defaultView || window).addEventListener(evt, release);\n}\n\n// src/ts/hooks/react/useArrowNavigation/utils.ts\nvar getTargetIndex = ({ key, currIndex, length, gridX, gridY, vGridY, loop, ctrlKey = false, rtl }) => {\n const rowStart = currIndex - currIndex % gridX, rowEnd = Math.min(rowStart + gridX - 1, length - 1), colStart = currIndex % gridX, colEnd = Math.min(colStart + gridX * (gridY - 1), length - 1), canX = gridX > 1, canY = gridY > 1, horizontalMove = rtl ? { ArrowRight: canX ? -1 : 0, ArrowLeft: canX ? 1 : 0 } : { ArrowRight: canX ? 1 : 0, ArrowLeft: canX ? -1 : 0 }, move = { ...horizontalMove, ArrowDown: canY ? gridX : 0, ArrowUp: canY ? -gridX : 0, Home: ctrlKey ? 0 : rowStart, End: ctrlKey ? length - 1 : rowEnd, PageDown: (vGridY - 1) * gridX, PageUp: -(vGridY - 1) * gridX }[key] ?? 0;\n let targetIndex = key === \"Home\" || key === \"End\" ? move : currIndex + move;\n if (key === \"ArrowDown\") {\n if (!loop && targetIndex >= length) targetIndex -= move;\n } else if (key === \"ArrowUp\") {\n if (!loop && targetIndex < 0) targetIndex += Math.abs(move);\n } else if (key === \"PageDown\") {\n if (!loop && targetIndex >= length) targetIndex = colEnd;\n } else if (key === \"PageUp\") {\n if (!loop && targetIndex < 0) targetIndex = colStart;\n }\n return loop ? (targetIndex + length) % length : clamp(0, targetIndex, length - 1);\n};\nvar getCommonAncestor = (first, second) => {\n if (!first) return null;\n if (!second) return first.parentElement;\n const ancestors = /* @__PURE__ */ new Set();\n let current = first;\n while (current) ancestors.add(current), current = current.parentElement;\n current = second;\n while (current) {\n if (ancestors.has(current)) return current;\n current = current.parentElement;\n }\n return null;\n};\nvar getGrid = (all, x = true, y = true, vY = true) => {\n const len = all.length, grid = {};\n if (!len) return grid;\n let cols = all.findIndex((el) => el.offsetTop !== all[0].offsetTop);\n cols = cols > 0 ? cols : len;\n if (x) grid.x = cols;\n let rows = Math.ceil(len / cols);\n if (y) grid.y = rows;\n if (vY) {\n const itemHeight = all[0].offsetHeight ?? 0, containerHeight = getCommonAncestor(all[0], all[1])?.clientHeight ?? 0;\n rows = clamp(1, Math.floor(containerHeight / itemHeight), rows) || rows;\n grid.vY = rows;\n }\n return grid;\n};\n\n// src/ts/hooks/react/useArrowNavigation/consts.ts\nimport { NOOP as NOOP2 } from \"sia-reactor\";\nvar H_NAV_KEYS = [\"ArrowRight\", \"ArrowLeft\", \"Home\", \"End\"];\nvar V_NAV_KEYS = [\"ArrowUp\", \"ArrowDown\", \"PageDown\", \"PageUp\"];\nvar NAV_KEYS = [...H_NAV_KEYS, ...V_NAV_KEYS];\nvar DEFAULT_CONFIG = {\n enabled: null,\n selector: \"[data-arrow-item]\",\n focusOnHover: true,\n loop: true,\n virtual: false,\n typeahead: false,\n rovingTab: null,\n defaultTabbableIndex: null,\n baseTabIndex: \"0\",\n resetMs: 500,\n rtl: null,\n grid: {},\n activeClass: \"focus-outlined\",\n inputSelector: \"input,textarea,[contenteditable]\",\n focusOptions: { preventScroll: false },\n scrollIntoView: { block: \"nearest\", inline: \"nearest\" },\n onSelect: NOOP2,\n onFocusOut: NOOP2\n};\n\nexport {\n initOutsideClick,\n removeOutsideClick,\n getTargetIndex,\n getCommonAncestor,\n getGrid,\n H_NAV_KEYS,\n NAV_KEYS,\n DEFAULT_CONFIG,\n initFocusTrap,\n removeFocusTrap,\n syncFocusTrap,\n rippleHandler\n};\n","import {\n DEFAULT_CONFIG,\n H_NAV_KEYS,\n NAV_KEYS,\n getCommonAncestor,\n getGrid,\n getTargetIndex,\n initFocusTrap,\n initOutsideClick,\n removeFocusTrap,\n removeOutsideClick,\n rippleHandler,\n syncFocusTrap\n} from \"../chunk-NX2LWYD6.js\";\nimport {\n INTERACTIVE_SELECTOR,\n createEl,\n getActiveEl\n} from \"../chunk-ZALPHCSJ.js\";\n\n// src/ts/hooks/vanilla/scrollAssist.ts\nimport { NIL } from \"sia-reactor\";\nfunction initScrollAssist(el, { pxPerSecond = 80, assistClassName = \"t007-scroll-assist\", vertical = true, horizontal = true } = NIL) {\n const parent = el?.parentElement, existing = (t007._scrollers ??= /* @__PURE__ */ new WeakMap()).get(el);\n if (!parent || existing) return existing ? existing : void 0;\n t007._scrollers_r_observer ??= new ResizeObserver((entries) => {\n for (const { target } of entries) t007._scrollers.get(target)?.update();\n });\n t007._scrollers_m_observer ??= new MutationObserver((entries) => {\n const els = /* @__PURE__ */ new Set();\n for (const entry of entries) {\n let node = entry.target instanceof Element ? entry.target : null;\n while (node && !t007._scrollers.has(node)) node = node.parentElement;\n if (node) els.add(node);\n }\n for (const el2 of els) t007._scrollers.get(el2)?.update();\n });\n const assist = {};\n let scrollId = null, last = performance.now(), assistWidth = 20, assistHeight = 20;\n const update = () => {\n const hasInteractive = !!parent.querySelector(INTERACTIVE_SELECTOR);\n if (horizontal) {\n const w = assist.left?.offsetWidth || assistWidth, check = hasInteractive ? el.clientWidth < w * 2 : false;\n assist.left.style.display = check ? \"none\" : el.scrollLeft > 0 ? \"block\" : \"none\";\n assist.right.style.display = check ? \"none\" : el.scrollLeft + el.clientWidth < el.scrollWidth - 1 ? \"block\" : \"none\";\n assistWidth = w;\n }\n if (vertical) {\n const h = assist.up?.offsetHeight || assistHeight, check = hasInteractive ? el.clientHeight < h * 2 : false;\n assist.up.style.display = check ? \"none\" : el.scrollTop > 0 ? \"block\" : \"none\";\n assist.down.style.display = check ? \"none\" : el.scrollTop + el.clientHeight < el.scrollHeight - 1 ? \"block\" : \"none\";\n assistHeight = h;\n }\n };\n const scroll = (dir) => {\n const frame = () => {\n const now = performance.now(), dt = now - last;\n last = now;\n const d = pxPerSecond * dt / 1e3;\n if (dir === \"left\") el.scrollLeft = Math.max(0, el.scrollLeft - d);\n if (dir === \"right\") el.scrollLeft = Math.min(el.scrollWidth - el.clientWidth, el.scrollLeft + d);\n if (dir === \"up\") el.scrollTop = Math.max(0, el.scrollTop - d);\n if (dir === \"down\") el.scrollTop = Math.min(el.scrollHeight - el.clientHeight, el.scrollTop + d);\n scrollId = requestAnimationFrame(frame);\n };\n last = performance.now();\n frame();\n };\n const stop = () => (cancelAnimationFrame(scrollId ?? 0), scrollId = null);\n const addAssist = (dir) => {\n const div = createEl(\"div\", { className: assistClassName }, { scrollDirection: dir }, { display: \"none\" });\n if (!div) return;\n for (const evt of [\"pointerenter\", \"dragenter\"]) div.addEventListener(evt, () => scroll(dir));\n for (const evt of [\"pointerleave\", \"pointerup\", \"pointercancel\", \"dragleave\", \"dragend\"]) div.addEventListener(evt, stop);\n dir === \"left\" || dir === \"up\" ? parent.insertBefore(div, el) : parent.append(div);\n assist[dir] = div;\n };\n if (horizontal) for (const dir of [\"left\", \"right\"]) addAssist(dir);\n if (vertical) for (const dir of [\"up\", \"down\"]) addAssist(dir);\n const handle = {\n update,\n destroy() {\n stop(), el.removeEventListener(\"scroll\", update);\n t007._scrollers_r_observer.unobserve(el), t007._scrollers.delete(el);\n for (const a of Object.values(assist)) a.remove();\n }\n };\n update(), el.addEventListener(\"scroll\", update);\n t007._scrollers_r_observer.observe(el), t007._scrollers_m_observer.observe(el, { childList: true, subtree: true, characterData: true });\n return t007._scrollers.set(el, handle), handle;\n}\nvar removeScrollAssist = (el) => t007._scrollers.get(el)?.destroy();\n\n// src/ts/hooks/vanilla/scrollerator.ts\nimport { NIL as NIL2 } from \"sia-reactor\";\nfunction initVScrollerator({ baseSpeed = 3, maxSpeed = 10, stepDelay = 2e3, baseRate = 16, lineHeight = 80, margin = 80, car = window } = NIL2) {\n let linesPerSec = baseSpeed, accelId = null, lastTime = null;\n const drive = (clientY, brake = false, offsetY = 0) => {\n if (car !== window) clientY -= offsetY;\n const now = performance.now(), speed = linesPerSec * lineHeight * ((lastTime ? now - lastTime : baseRate) / 1e3);\n if (!brake && (clientY < margin || clientY > (car.innerHeight ?? car.offsetHeight) - margin)) {\n accelId === null ? accelId = setTimeout(() => linesPerSec += 1, stepDelay) : linesPerSec > baseSpeed && (linesPerSec = Math.min(linesPerSec + 1, maxSpeed));\n car.scrollBy?.(0, clientY < margin ? -speed : speed);\n } else reset();\n return lastTime = !brake ? now : null, speed;\n };\n const reset = () => (accelId && clearTimeout(accelId), accelId = null, linesPerSec = baseSpeed, lastTime = null);\n return { drive, reset };\n}\n\n// src/ts/hooks/vanilla/arrowNavigation.ts\nfunction initArrowNavigation(container, config = {}) {\n const existing = (t007._arrownavs ??= /* @__PURE__ */ new WeakMap()).get(container);\n if (!config.enabled || existing) return existing ? existing : void 0;\n const { enabled: isEnabled, selector, focusOnHover, loop, virtual, typeahead, resetMs, activeClass, inputSelector, defaultTabbableIndex, baseTabIndex, grid, rtl: isRtl, focusOptions, scrollIntoView, onSelect, onFocusOut, rovingTab } = { ...DEFAULT_CONFIG, ...config };\n let gridX = grid.x || 1, gridY = grid.y || 1, vGridY = grid.vY || 1, activeIndex = -1, buffer = \"\", timeout = null, items = [];\n const enabled = isEnabled ?? virtual, roving = rovingTab ?? !virtual, rtl = isRtl ?? (\"undefined\" === typeof document ? false : getComputedStyle(container).direction === \"rtl\"), shouldSnub = () => !enabled || !container, isItemDisabled = (el) => !el || el.matches('[disabled],[aria-disabled=\"true\"],[inert],:disabled'), getItems = () => items = Array.from(container.querySelectorAll(selector));\n const getAbleIndex = (targetIndex, e = { key: \"ArrowRight\", ctrlKey: false }) => {\n if (shouldSnub() || !items.length) return null;\n let index = targetIndex;\n let attempts = 0;\n while (attempts < items.length) {\n if (!isItemDisabled(items[index])) return index;\n index = getTargetIndex({ key: e.key, currIndex: index, gridX, gridY, vGridY, length: items.length, loop, ctrlKey: e.ctrlKey, rtl });\n attempts++;\n }\n return null;\n };\n const goToIndex = (targetIndex, e = { key: \"ArrowRight\" }) => {\n if (shouldSnub()) return;\n const idx = getAbleIndex(targetIndex, e);\n if (idx === null) return;\n resetActiveIndex(idx);\n onSelect?.(items[idx], e), updateDOM();\n if (virtual) {\n items[idx]?.scrollIntoView(scrollIntoView);\n container.setAttribute(\"aria-activedescendant\", items[idx].id || \"\");\n } else items[idx]?.focus(focusOptions);\n };\n const updateDOM = () => {\n if (shouldSnub() || !virtual && !roving || !items.length) return;\n const hasDefaultTabbable = defaultTabbableIndex !== null && defaultTabbableIndex !== void 0, tabbableIndex = hasDefaultTabbable && !isItemDisabled(items[defaultTabbableIndex]) ? defaultTabbableIndex : getAbleIndex(0);\n for (let i = 0, len = items.length; i < len; i++) {\n const el = items[i], isActive = i === activeIndex;\n if (roving) el.setAttribute(\"tabindex\", i === activeIndex || activeIndex === -1 && i === tabbableIndex ? baseTabIndex : \"-1\");\n else if (virtual && activeIndex > 0) el.setAttribute(\"tabindex\", i > activeIndex ? baseTabIndex : \"-1\");\n else el.setAttribute(\"tabindex\", baseTabIndex);\n if (virtual) el.setAttribute(\"aria-selected\", String(isActive)), el.classList.toggle(activeClass, isActive);\n }\n };\n const resetActiveIndex = (index = -1) => (activeIndex = index, updateDOM());\n const typeAhead = (key) => {\n if (shouldSnub() || !typeahead) return;\n buffer += key.toLowerCase();\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => buffer = \"\", resetMs);\n const start = activeIndex >= 0 ? activeIndex + 1 : 0;\n for (let i = 0; i < items.length; i++) {\n const idx = (start + i) % items.length, label = (items[idx].getAttribute(\"data-label\") || items[idx].innerText || \"\").trim().toLowerCase();\n if (label.startsWith(buffer)) return goToIndex(idx);\n }\n };\n const simulateKey = (e) => {\n const t = e.target;\n if (shouldSnub() || getActiveEl(t?.ownerDocument)?.matches(\"option\")) return;\n const { key } = e;\n if (!items.length) return;\n if (virtual && (key === \" \" || key === \"Enter\")) return items[activeIndex]?.click();\n if (t?.matches(DEFAULT_CONFIG.inputSelector) && !virtual) return;\n if (typeahead && key.length === 1 && /^[a-z0-9]$/i.test(key)) return typeAhead(key);\n if (!NAV_KEYS.includes(key)) return;\n if (!(e.currentTarget?.matches(DEFAULT_CONFIG.inputSelector) && gridX <= 1 && H_NAV_KEYS.includes(key))) e.preventDefault?.(), e.stopPropagation?.();\n const currIndex = virtual ? activeIndex : items.indexOf(getActiveEl(t?.ownerDocument)), targetIndex = getTargetIndex({ currIndex, gridX, gridY, vGridY, length: items.length, loop, rtl, key, ctrlKey: e.ctrlKey });\n goToIndex(targetIndex, e);\n };\n getItems(), updateDOM();\n const interactiveEls = !virtual ? [container] : [container.querySelector(inputSelector)];\n for (const el of interactiveEls) el?.addEventListener(\"keydown\", simulateKey);\n const handleFocusOut = (e) => {\n if (!container.contains(e.relatedTarget)) return resetActiveIndex(), updateDOM(), onFocusOut?.(e);\n const among = items.includes(e.relatedTarget);\n if (!among && (defaultTabbableIndex ?? -1) >= 0) return resetActiveIndex(), updateDOM();\n if (virtual) resetActiveIndex(), updateDOM();\n };\n container.addEventListener(\"focusout\", handleFocusOut);\n const handleHover = (e) => {\n if (!enabled || !focusOnHover) return;\n const el = e.currentTarget, idx = items.indexOf(el);\n if (idx !== -1) goToIndex(idx);\n };\n for (const el of items) el.addEventListener(\"mouseenter\", handleHover);\n const sync = () => {\n const oldEl = items[activeIndex];\n for (const el of items) el.removeEventListener(\"mouseenter\", handleHover);\n getItems();\n for (const el of items) el.addEventListener(\"mouseenter\", handleHover);\n calcGrid();\n const newEl = items[activeIndex];\n updateDOM();\n if (oldEl && newEl && oldEl === newEl) return;\n resetActiveIndex(), updateDOM();\n };\n const mutationObserver = new MutationObserver(sync);\n mutationObserver.observe(container, { childList: true, subtree: true });\n const setGrid = (g) => {\n if (g.x !== void 0) gridX = g.x;\n if (g.y !== void 0) gridY = g.y;\n if (g.vY !== void 0) vGridY = g.vY;\n };\n let ancestor = null;\n const resizeObserver = new ResizeObserver(() => calcGrid());\n const calcGrid = () => {\n setGrid(getGrid(items, !grid.x, !grid.y, !grid.vY));\n const next = items.length > 1 ? getCommonAncestor(items[0], items[1]) : container;\n if (next && next !== ancestor) ancestor && resizeObserver.unobserve(ancestor), ancestor = next, resizeObserver.observe(ancestor);\n };\n setGrid(grid), calcGrid();\n const destroy = () => {\n for (const el of interactiveEls) el?.removeEventListener(\"keydown\", simulateKey);\n container.removeEventListener(\"focusout\", handleFocusOut);\n for (const el of items) el.removeEventListener(\"mouseenter\", handleHover);\n mutationObserver.disconnect(), resizeObserver.disconnect();\n if (timeout) clearTimeout(timeout);\n t007._arrownavs.delete(container);\n };\n const handle = { gridX: () => gridX, gridY: () => gridY, vGridY: () => vGridY, items: () => items, activeIndex: () => activeIndex, activeItem: () => items[activeIndex] ?? null, getAbleIndex, typeAhead, goToIndex, simulateKey, sync, destroy };\n return t007._arrownavs.set(container, handle), handle;\n}\nvar removeArrowNavigation = (container) => t007._arrownavs?.get(container)?.destroy();\nvar syncArrowNavigation = (container) => t007._arrownavs?.get(container)?.sync();\nexport {\n initArrowNavigation,\n initFocusTrap,\n initOutsideClick,\n initScrollAssist,\n initVScrollerator,\n removeArrowNavigation,\n removeFocusTrap,\n removeOutsideClick,\n removeScrollAssist,\n rippleHandler,\n syncArrowNavigation,\n syncFocusTrap\n};\n","/*\r\n * Portions of this code are derived from Video.js\r\n * https://github.com/videojs/video.js\r\n * Licensed under Apache License 2.0\r\n * Copyright (c) Brightcove, Inc. and contributors\r\n */\r\n\r\n// Types\r\ntype Version = string | null;\r\ntype BrandEntry = { brand?: string; version?: string };\r\n\r\n// Environment guards\r\nconst win = \"undefined\" !== typeof window ? window : undefined,\r\n nav = win?.navigator,\r\n ua = nav?.userAgent || \"\",\r\n uaData = (nav as Navigator & { userAgentData?: { platform?: string; brands?: BrandEntry[] } })?.userAgentData;\r\n\r\n// Base flags: bools first, versions second for readability\r\nexport let IS_ANDROID = false;\r\nexport let IS_WINDOWS = false;\r\nexport let IS_FIREFOX = false;\r\nexport let IS_EDGE = false;\r\nexport let IS_CHROME = false;\r\nexport let IS_CHROMIUM = false;\r\nexport let IS_SAFARI = false;\r\nexport let IS_IE = false;\r\nexport let IS_TIZEN = false;\r\nexport let IS_WEBOS = false;\r\nexport let IS_IPOD = false;\r\nexport let IS_IPAD = false;\r\nexport let IS_IPHONE = false;\r\n// Versioned details\r\nexport let IOS_VERSION: Version = null;\r\nexport let ANDROID_VERSION: Version = null;\r\nexport let CHROME_VERSION: Version = null;\r\nexport let CHROMIUM_VERSION: Version = null;\r\nexport let IE_VERSION: Version = null;\r\n// Composite Flags\r\nexport let IS_IOS = false;\r\nexport let IS_MOBILE = false;\r\nexport let IS_SMART_TV = false;\r\n// Capabilities\r\nexport const IS_CHROMECAST_RECEIVER = Boolean((win as any)?.cast?.framework?.CastReceiverContext);\r\nexport const MSE_ENABLED = Boolean(win && (\"MediaSource\" in win || \"webkitMediaSource\" in win));\r\nexport const TOUCH_ENABLED = Boolean(win && (\"ontouchstart\" in win || (nav as Navigator & { maxTouchPoints?: number })?.maxTouchPoints || ((win as any).DocumentTouch && win.document instanceof (win as any).DocumentTouch)));\r\n// Media Queries\r\nexport const queryMediaMobile = (query = `(max-width: 480px), (max-width: 940px) and (max-height: 480px) and (orientation: landscape)`) => Boolean(win && \"matchMedia\" in win && win.matchMedia(query).matches);\r\n\r\n// Modern detection first (userAgentData)\r\nif (uaData?.platform && uaData?.brands) {\r\n // Helpers\r\n const pickVersion = (brands: BrandEntry[], needle: string): Version => brands.find((b) => b.brand === needle && b.version)?.version || null;\r\n // Platform first\r\n IS_ANDROID = uaData.platform === \"Android\";\r\n IS_WINDOWS = uaData.platform === \"Windows\";\r\n // Browser family\r\n IS_EDGE = uaData.brands.some((b) => b.brand === \"Microsoft Edge\");\r\n IS_CHROMIUM = uaData.brands.some((b) => b.brand === \"Chromium\" || b.brand === \"Google Chrome\");\r\n IS_CHROME = IS_CHROMIUM && !IS_EDGE;\r\n // Versions\r\n CHROMIUM_VERSION = CHROME_VERSION = pickVersion(uaData.brands, \"Chromium\") || pickVersion(uaData.brands, \"Google Chrome\");\r\n}\r\n\r\n// Fallback / additional parsing via UA string\r\nif (true || !IS_CHROMIUM || !CHROMIUM_VERSION) {\r\n // General Platforms\r\n IS_ANDROID ||= /Android/i.test(ua);\r\n IS_WINDOWS ||= /Windows/i.test(ua);\r\n // Desktop & general browsers (include iOS-branded variants)\r\n IS_FIREFOX = /Firefox|FxiOS/i.test(ua);\r\n IS_EDGE ||= /Edg|EdgiOS/i.test(ua);\r\n IS_CHROMIUM ||= /Chrome|CriOS/i.test(ua);\r\n IS_CHROME = IS_CHROMIUM && !IS_EDGE;\r\n IS_SAFARI = /Safari/i.test(ua) && !IS_CHROME && !IS_FIREFOX && !IS_EDGE;\r\n IS_IE = /MSIE|(Trident\\/7.0)|(rv:11.0)/i.test(ua);\r\n // TVs\r\n IS_TIZEN = /Tizen/i.test(ua);\r\n IS_WEBOS = /Web0S/i.test(ua);\r\n // Apple desktop/mobile device refinement\r\n IS_IPOD = /iPod/i.test(ua);\r\n IS_IPAD = /iPad/i.test(ua) || (IS_SAFARI && TOUCH_ENABLED && !/iPhone/i.test(ua));\r\n IS_IPHONE = /iPhone/i.test(ua) && !IS_IPAD;\r\n // Versions\r\n IOS_VERSION = ua.match(/OS (\\d+)_/i)?.[1] ?? null;\r\n ANDROID_VERSION = ua.match(/Android\\s(\\d+(?:\\.\\d+)+)/i)?.[1] ?? null;\r\n CHROMIUM_VERSION = CHROME_VERSION = ua.match(/(?:Chrome|CriOS)\\/(\\d+)/)?.[1] ?? CHROMIUM_VERSION;\r\n IE_VERSION = ua.match(/MSIE\\s(\\d+)\\.\\d/)?.[1] || (/Trident\\/7.0/i.test(ua) && /rv:11.0/.test(ua) ? \"11.0\" : null);\r\n} // `true` override for devtools predictability\r\n\r\n// Composite Flags\r\nIS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\r\nIS_MOBILE = Boolean(IS_ANDROID || IS_IPHONE || IS_IPOD || IS_IPAD);\r\nIS_SMART_TV = IS_TIZEN || IS_WEBOS;\r\n","import { BasePlug } from \"../../base\";\r\nimport type { SkeletonConfig } from \"./types\";\r\nimport { SKELETON_BUILD } from \"./build\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { assignEl } from \"@utils/dom\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { IconRegistry, MenuRegistry } from \"@core/registries\";\r\n\r\nexport class SkeletonPlug extends BasePlug<SkeletonConfig> {\r\n public static readonly plugName = \"skeleton\";\r\n public static readonly BUILD = SKELETON_BUILD;\r\n public static readonly isCore: boolean = true;\r\n public static readonly isMain: boolean = true;\r\n\r\n public override mount(): void {\r\n // Properties Assignment\r\n assignEl(this.media.container, { role: \"region\", ariaLabel: `${capitalize(this.media.type)} Player`, className: `tmg-${this.media.type}-container tmg-media-container tmg-host-container${IS_MOBILE ? \" tmg-media-mobile\" : \"\"}${this.media.state.paused ? \" tmg-media-paused\" : \"\"}` }, { trackKind: \"captions\", volumeLevel: \"muted\", brightnessLevel: \"dark\", objectFit: \"contain\" });\r\n assignEl(this.media.pseudoContainer, { role: \"status\", className: `tmg-pseudo-${this.media.type}-container tmg-pseudo-media-container tmg-host-container` });\r\n assignEl(this.media.pseudoElement, { ariaHidden: \"true\", className: `tmg-pseudo-${this.media.type} tmg-pseudo-media tmg-host`, muted: true, autoplay: false });\r\n // DOM Injection\r\n this.media.pseudoContainer.appendChild(this.media.pseudoElement);\r\n this.media.element.parentElement?.insertBefore(this.media.container, this.media.element);\r\n this.injectInterface(), this.ctlr.DOM.containerContent?.prepend(this.media.element);\r\n }\r\n public override unmount(): void {\r\n if (this.media.pseudoElement.isConnected) this.media.element.isConnected && this.leavePseudoMode(true), this.media.container.remove();\r\n else if (this.media.element.isConnected) this.media.container.parentElement?.replaceChild(this.media.element, this.media.container);\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", this.handlePaused, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // this.media.on(\"intent.paused\", this.handlePaused, { signal: this.signal }); // #APPRENTICE: folklore embodiment\r\n this.media.on(\"state.poster\", ({ value }) => (this.settings.css.currentPosterUrl = `url(${value})`), { signal: this.signal });\r\n this.media.on(\"status.ended\", ({ value }) => this.media.container.classList.toggle(\"tmg-media-replay\", value), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.waiting\", ({ value }) => this.media.container.classList.toggle(\"tmg-media-buffering\", value), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.loadedMetadata\", this.handleLoadedMetadataStatus, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.on(\"readyState\", () => (this.media.container.dataset.readyTier = \"x\".repeat(this.ctlr.state.readyState)), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n const menu = this.ctlr.plug(\"settings.settingsView\")?.menu;\r\n menu?.register(MenuRegistry.get(\"main.skeleton\")?.(this.ctlr));\r\n menu?.register(MenuRegistry.get(\"settings.actions\")?.(this.ctlr));\r\n super.wire();\r\n }\r\n\r\n protected injectInterface(): void {\r\n !this.ctlr.queryDOM(\".tmg-media-container-content-wrapper\") &&\r\n this.media.container.insertAdjacentHTML(\r\n \"beforeend\",\r\n `<div class=\"tmg-media-container-content-wrapper\">\r\n <div class=\"tmg-media-container-content\">\r\n <div class=\"tmg-media-controls-container\">\r\n <div class=\"tmg-media-curtain tmg-media-top-curtain\"></div><div class=\"tmg-media-curtain tmg-media-bottom-curtain\"></div><div class=\"tmg-media-curtain tmg-media-cover-curtain\"></div>\r\n </div>\r\n </div>\r\n <div class=\"tmg-media-settings\" inert>\r\n <div class=\"tmg-media-settings-content\">\r\n <div class=\"tmg-media-settings-top-panel\"><button type=\"button\" class=\"tmg-media-settings-close-btn\">${IconRegistry.get(\"returnback\")}<span>Close Settings</span></button></div>\r\n <div class=\"tmg-media-settings-bottom-panel\"><p>More Settings Coming Soon!</p></div>\r\n </div>\r\n </div>\r\n </div>`\r\n );\r\n this.ctlr.DOM.containerContentWrapper = this.ctlr.queryDOM(\".tmg-media-container-content-wrapper\");\r\n this.ctlr.DOM.containerContent = this.ctlr.queryDOM(\".tmg-media-container-content\");\r\n this.ctlr.DOM.controlsContainer = this.ctlr.queryDOM(\".tmg-media-controls-container\");\r\n this.ctlr.DOM.settings = this.ctlr.queryDOM(\".tmg-media-settings\");\r\n this.ctlr.DOM.settingsContent = this.ctlr.queryDOM(\".tmg-media-settings-content\");\r\n this.ctlr.DOM.settingsTopPanel = this.ctlr.queryDOM(\".tmg-media-settings-top-panel\");\r\n this.ctlr.DOM.settingsBottomPanel = this.ctlr.queryDOM(\".tmg-media-settings-bottom-panel\");\r\n }\r\n\r\n protected handlePaused({ value, rejectable, resolved }: REvent<CtlrMedia, \"state.paused\" | \"intent.paused\">): void {\r\n if (rejectable && !resolved) return;\r\n if (!rejectable && !value && this.config.autoPauseAll) for (const media of document.querySelectorAll<HTMLMediaElement>(\"video, audio\")) media !== this.media.element && !media.paused && media.pause();\r\n this.media.container.classList.toggle(\"tmg-media-paused\", value);\r\n }\r\n\r\n protected handleLoadedMetadataStatus({ value }: REvent<CtlrMedia, \"status.loadedMetadata\">): void {\r\n if (!value) return;\r\n this.media.pseudoElement.src = this.media.element.currentSrc;\r\n this.media.pseudoElement.crossOrigin = this.media.element.crossOrigin;\r\n }\r\n\r\n public enterPseudoMode(): void {\r\n (this.media.pseudoElement.id = this.media.element.id), (this.media.element.id = \"\");\r\n this.media.pseudoElement.className += \" \" + this.media.element.className.replace(/tmg-media|tmg-video|tmg-audio|tmg-host/g, \"\");\r\n this.media.pseudoContainer.className += \" \" + this.media.container.className.replace(/tmg-media-container|tmg-video-container|tmg-audio-container|tmg-host-container/g, \"\");\r\n this.media.container.parentElement?.insertBefore(this.media.pseudoContainer, this.media.container);\r\n document.body.append(this.media.container);\r\n }\r\n\r\n public leavePseudoMode(destroy = false): void {\r\n (this.media.element.id = this.media.pseudoElement.id), (this.media.pseudoElement.id = \"\");\r\n this.media.pseudoElement.className = `tmg-pseudo-${this.media.type} tmg-pseudo-media tmg-host`;\r\n this.media.pseudoContainer.className = `tmg-pseudo-${this.media.type}-container tmg-pseudo-media-container tmg-host-container`;\r\n this.media.pseudoContainer.parentElement?.replaceChild(destroy ? this.media.element : this.media.container, this.media.pseudoContainer);\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n skeleton: typeof SkeletonPlug;\r\n }\r\n interface ControllerDOMMap {\r\n containerContentWrapper?: HTMLDivElement | null;\r\n containerContent?: HTMLDivElement | null;\r\n controlsContainer?: HTMLDivElement | null;\r\n settings?: HTMLDivElement | null;\r\n settingsContent?: HTMLDivElement | null;\r\n settingsTopPanel?: HTMLDivElement | null;\r\n settingsBottomPanel?: HTMLDivElement | null;\r\n }\r\n}\r\n","export const AIRPLAY_BUILD = undefined;\r\n","import { BasePlug } from \"../../base\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { AIRPLAY_BUILD } from \"./build\";\r\nimport { isFunc } from \"@utils/obj\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { AirPlayPlaceholder } from \"@components/holders/airplayplaceholder\";\r\n\r\nexport class AirPlayPlug extends BasePlug {\r\n public static readonly plugName = \"airplay\";\r\n public static readonly BUILD = AIRPLAY_BUILD;\r\n public isAvailable = false;\r\n protected placeholder: AirPlayPlaceholder | null = null;\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n if (isFunc(window.WebKitPlaybackTargetAvailabilityEvent)) {\r\n this.media.element.addEventListener(\"webkitplaybacktargetavailabilitychanged\", this.handleAvailability, { capture: true, signal: this.signal });\r\n this.media.element.addEventListener(\"webkitcurrentplaybacktargetiswirelesschanged\", this.handleWirelessChange, { capture: true, signal: this.signal });\r\n }\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.airplay ||= this.ctlr.isNativeEl && this.isAvailable), { init: true, signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"intent.airplay\", this.handleAirPlayIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"airplay\", { keyboard: { phase: \"keyup\" } }), super.wire();\r\n }\r\n\r\n protected handleAvailability(e: any, can = e.availability === \"available\"): void {\r\n if (can) (this.placeholder ??= ComponentRegistry.init(\"airplayplaceholder\", this.ctlr))?.setup();\r\n if (this.ctlr.isNativeEl) this.media.features.airplay = this.isAvailable = can; // e.availability returns \"available\" if an Apple TV/HomePod is on the network\r\n }\r\n\r\n protected handleWirelessChange(): void {\r\n this.media.container.classList.toggle(\"tmg-media-airplay\", (this.media.state.airplay = !!this.media.element.webkitCurrentPlaybackTargetIsWireless)); // Safari handles the playback sync natively.\r\n }\r\n\r\n protected handleAirPlayIntent(e: REvent<CtlrMedia, \"intent.airplay\">): void {\r\n if (e.resolved || !e.value) return;\r\n if (!this.ctlr.isUIActive(\"airplay\")) {\r\n this.media.element?.webkitShowPlaybackTargetPicker?.(); // Apple requires this to be triggered by a direct user gesture (like a click)\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"airplay\"); // #STALLING: necessary optimistic distraction\r\n }\r\n e.resolve(this.name);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.placeholder?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.airplay\": typeof AirPlayPlug;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n WebKitPlaybackTargetAvailabilityEvent?: any;\r\n }\r\n interface HTMLMediaElement {\r\n webkitShowPlaybackTargetPicker?: () => void;\r\n webkitCurrentPlaybackTargetIsWireless?: boolean;\r\n }\r\n}\r\n","import { Ambience } from \"./types\";\r\n\r\nexport const AMBIENT_BUILD: Ambience = {\r\n active: true,\r\n blur: 80,\r\n opacity: 1,\r\n interval: 100,\r\n smoothness: 0.3,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { AmbienceConfig } from \"./types\";\r\nimport { AMBIENT_BUILD } from \"./build\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { MenuRegistry } from \"@core/registries\";\r\n\r\nexport class AmbiencePlug extends BasePlug<AmbienceConfig> {\r\n public static readonly plugName = \"ambience\";\r\n public static readonly BUILD = AMBIENT_BUILD;\r\n public wrapper!: HTMLDivElement;\r\n public canvas!: HTMLCanvasElement;\r\n public context!: CanvasRenderingContext2D | null;\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.wrapper = createEl(\"div\", { className: \"tmg-media-ambience-wrapper tmg-media-filtered\", ariaHidden: \"true\" });\r\n this.canvas = createEl(\"canvas\", { className: \"tmg-media-ambience-canvas\" });\r\n this.context = this.canvas.getContext(\"2d\", { alpha: false });\r\n // DOM Injection\r\n this.ctlr.DOM.containerContent?.prepend((this.wrapper.append(this.canvas), this.wrapper));\r\n }\r\n public override unmount(): void {\r\n this.canvas.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"state.currentTime\", this.pulseGlow, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.poster\", this.syncFeatures, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"features.ambience\", ({ value }) => this.syncDisplay(!!value), { signal: this.signal });\r\n // ---- State ---------\r\n this.ctlr.state.on(\"dimensions.container.width\", this.syncSize, { init: true, signal: this.signal });\r\n this.ctlr.state.on(\"dimensions.container.height\", this.syncSize, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.ambience.active\", ({ value }) => this.syncDisplay(value), { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.ambience.blur\", this.syncFilter, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.ambience.opacity\", this.syncFilter, { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected pulseGlow(): void {\r\n this.ctlr.isNativeEl && this.media.type !== \"audio\" && this.ctlr.throttle(\"ambienceGlowing\", this.syncGlow, this.config.interval, false);\r\n }\r\n protected syncGlow(usePoster = !this.ctlr.isNativeEl || this.media.type === \"audio\"): void {\r\n if (!this.config.active || !this.media.features.ambience || !this.ctlr.state.mediaIntersecting || !this.context) return;\r\n if (usePoster) {\r\n if (!this.media.state.poster) return this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n const seq = ++this.posterSeq,\r\n i = this.posterImg && this.posterImg.src === this.media.state.poster ? this.context.drawImage(this.posterImg, 0, 0, this.canvas.width, this.canvas.height) : (this.posterImg = createEl(\"img\", { src: this.media.state.poster, crossOrigin: \"anonymous\", onload: () => seq === this.posterSeq && this.context?.drawImage(i as HTMLImageElement, 0, 0, this.canvas.width, this.canvas.height) }));\r\n } else if (!this.ctlr.isNativeEl || this.media.element.readyState < 2) return;\r\n this.context.globalAlpha = this.config.smoothness;\r\n this.context.drawImage(this.media.element as HTMLVideoElement, 0, 0, this.canvas.width, this.canvas.height);\r\n }\r\n private posterSeq = 0;\r\n private posterImg?: HTMLImageElement;\r\n\r\n protected syncSize(): void {\r\n this.canvas.width = 32; // Small resolution is heavily performant for blurs; preserve aspect ratio\r\n this.canvas.height = Math.round(32 / (this.ctlr.state.dimensions.container.width / this.ctlr.state.dimensions.container.height));\r\n this.syncGlow();\r\n }\r\n\r\n protected syncDisplay(show: boolean): void {\r\n (this.canvas.style.display = !show ? \"none\" : \"block\"), show && this.syncGlow();\r\n }\r\n\r\n protected syncFilter(): void {\r\n this.canvas.style.filter = `blur(${this.config.blur}px) opacity(${this.config.opacity})`;\r\n }\r\n\r\n protected syncFeatures(): void {\r\n (this.media.features.ambience ||= !!this.media.state.poster), this.syncGlow();\r\n }\r\n\r\n protected override registerMenu(): void {\r\n this.ctlr.plug(\"settings.settingsView\")?.menu.registerFirst(MenuRegistry.get(\"settings.ambience\")?.(this));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.ambience\": typeof AmbiencePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n ambience: AmbienceConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n ambience: boolean;\r\n }\r\n}\r\n","import { AutoConfig } from \"./types\";\nimport { DeepPartial } from \"sia-reactor\";\nimport { capitalize, uncamelize } from \"@utils/str\";\n\nexport const APT_AUTOPLAY_OPTIONS = [\"in-view\", \"out-view\", \"in-view-always\", \"out-view-always\"] as const;\n\nconst AUTOPLAY_UI_OPTIONS = [{ value: false, display: \"Off\" }, ...APT_AUTOPLAY_OPTIONS.map((o) => ({ value: o, display: capitalize(uncamelize(String(o))) }))];\n\nexport const AUTO_BUILD: DeepPartial<AutoConfig> = {\n play: {\n value: false,\n options: AUTOPLAY_UI_OPTIONS\n },\n pause: {\n value: false,\n options: AUTOPLAY_UI_OPTIONS\n },\n next: {\n value: 20000,\n preview: {\n usePoster: true,\n time: 4,\n tease: true,\n },\n },\n};\n","import { isNum } from \"@t007/utils\";\r\n\r\n// Media Time Formatting\r\nexport function formatMediaTime({ time, format = \"digital\", elapsed = true, showMs = false, casing = \"normal\" }: { time?: number; format?: string; elapsed?: boolean; showMs?: boolean; casing?: \"normal\" | \"upper\" | \"title\" } = { time: 0 }): string {\r\n const long = format.endsWith(\"long\"),\r\n sx = (n = 0) => (n == 1 ? \"\" : \"s\"),\r\n cs = (str: string) => (casing === \"upper\" ? str.toUpperCase() : casing === \"title\" ? str.replace(/^([a-z])/i, (m) => m.toUpperCase()) : str.toLowerCase()),\r\n wrd = (n = 0) => ({ d: cs(long ? \" day\" + sx(n) + \" \" : \"d\"), h: cs(long ? \" hour\" + sx(n) + \" \" : \"h\"), m: cs(long ? \" minute\" + sx(n) + \" \" : \"m\"), s: cs(long ? \" second\" + sx(n) + \" \" : \"s\"), ms: cs(long ? \" millisecond\" + sx(n) + \" \" : \"ms\") }),\r\n pad = (v: string | number, n = 2, f?: boolean) => (long && !f ? v : String(v).padStart(n, isNum(+n) ? \"0\" : \"-\"));\r\n if (isNaN(time ?? NaN) || time === Infinity) return format !== \"digital\" ? (\"-\" + wrd().h + pad(\"-\") + wrd().m + (!elapsed ? \"left\" : \"\")).trim() : !elapsed ? \"-:--\" : \"-:--\";\r\n const s = Math.floor(Math.abs(time!) % 60),\r\n m = Math.floor(Math.abs(time!) / 60) % 60,\r\n h = Math.floor(Math.abs(time!) / 3600) % 24,\r\n d = Math.floor(Math.abs(time!) / 86400),\r\n ms = Math.floor((Math.abs(time!) % 1) * 1000); // returns early so \"!\"\r\n if (format === \"digital\") {\r\n const base = d ? d + \":\" + pad(h, 2, true) + \":\" + pad(m, 2, true) + \":\" + pad(s, 2, true) : h ? h + \":\" + pad(m, 2, true) + \":\" + pad(s, 2, true) : m + \":\" + pad(s, 2, true);\r\n return !elapsed ? \"-\" + base : base;\r\n }\r\n const base = d ? d + wrd(d).d + pad(h) + wrd(h).h + pad(m) + wrd(m).m + pad(s) + wrd(s).s : h ? h + wrd(h).h + pad(m) + wrd(m).m + pad(s) + wrd(s).s : m + wrd(m).m + pad(s) + wrd(s).s,\r\n msPart = showMs && ms ? pad(ms, 3) + wrd(ms).ms : \"\";\r\n return (base + msPart + (!long ? \" \" : \"\") + (!elapsed ? \"left\" : \"\")).trim();\r\n}\r\n\r\n// Time Ranges\r\n\r\nexport function createTimeRanges(ranges?: [number, number][] | TimeRanges | ArrayLike<any>): TimeRanges {\r\n if (ranges instanceof TimeRanges) return ranges;\r\n if (!ranges)\r\n return Object.create(TimeRanges.prototype, {\r\n length: { value: 0 },\r\n start: {\r\n value: () => {\r\n throw new DOMException(\"Index out of bounds\", \"IndexSizeError\");\r\n },\r\n },\r\n end: {\r\n value: () => {\r\n throw new DOMException(\"Index out of bounds\", \"IndexSizeError\");\r\n },\r\n },\r\n });\r\n // 1. Sort incoming intervals chronologically by start time\r\n const rawPairs = (Array.isArray(ranges) ? ranges : Array.from(ranges as ArrayLike<any>)).sort((a, b) => a[0] - b[0]);\r\n // 2. Spec Normalization Loop: Merge overlapping or touching timelines\r\n const pairs: [number, number][] = [];\r\n for (const current of rawPairs) {\r\n const last = pairs[pairs.length - 1];\r\n if (!last || current[0] > last[1]) pairs.push([current[0], current[1]]); // Clean discontinuity gap\r\n else last[1] = Math.max(last[1], current[1]); // Normalization: merge overlaps!\r\n }\r\n // 3. Return a fully normalized interface literal\r\n return Object.create(TimeRanges.prototype, {\r\n length: { value: pairs.length },\r\n start: {\r\n value: (i: number) => {\r\n if (i < 0 || i >= pairs.length) throw new DOMException(\"Index out of bounds\", \"IndexSizeError\");\r\n return pairs[i][0];\r\n },\r\n },\r\n end: {\r\n value: (i: number) => {\r\n if (i < 0 || i >= pairs.length) throw new DOMException(\"Index out of bounds\", \"IndexSizeError\");\r\n return pairs[i][1];\r\n },\r\n },\r\n });\r\n}\r\n","import { MEDIA_INTENT_BUILD, MEDIA_SETTINGS_BUILD, MEDIA_STATE_BUILD, MEDIA_STATUS_BUILD } from \"@consts/media\";\r\nimport { MediaState, MediaStatus, MediaSettings, MediaReport, CtlrMedia } from \"@defs/contract\";\r\nimport { isStr, isNum, isIter, isSameURL, cleanURL } from \"@t007/utils\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { queryFullscreenEl, queryPictureInPictureEl } from \"@utils/dom\";\r\nimport { Dimensions, MediaType, Source, Sources, Track, Tracks } from \"@defs/generics\";\r\nimport { mergeObjs as merge } from \"sia-reactor/utils\";\r\nimport { DeepPartial } from \"sia-reactor\";\r\n\r\n// ============ Video Utilities ============\r\n// Types\r\ntype SourceLike = Source | (HTMLSourceElement & Record<string, any>);\r\ntype TrackLike = Track | (HTMLTrackElement & Record<string, any>);\r\n\r\n// Report Generation\r\nexport function getMediaReport(m: HTMLMediaElement, isVid = m instanceof HTMLVideoElement, opts = { skipUndefined: true }): MediaReport {\r\n const txtTrackIdx = getTrackIdx(m, \"Text\"),\r\n report = { state: getMediaState(m, isVid, txtTrackIdx), status: getMediaStatus(m, isVid, txtTrackIdx), settings: getMediaSettings(m) };\r\n return { state: merge(MEDIA_STATE_BUILD, report.state, opts), intent: merge(MEDIA_INTENT_BUILD, report.state, opts), status: merge(MEDIA_STATUS_BUILD, report.status, opts), settings: merge(MEDIA_SETTINGS_BUILD, report.settings, opts) } as MediaReport;\r\n}\r\nexport const getMediaState = (m: HTMLMediaElement, isVid = m instanceof HTMLVideoElement, _txtTrackIdx = getTrackIdx(m, \"Text\")): Partial<MediaState> => ({ src: m.src, currentTime: m.currentTime, paused: m.paused, volume: m.volume * 100, muted: m.muted, playbackRate: m.playbackRate, pictureInPicture: queryPictureInPictureEl() === m, fullscreen: queryFullscreenEl() === m, currentTextTrack: _txtTrackIdx, currentAudioTrack: getTrackIdx(m, \"Audio\"), currentVideoTrack: getTrackIdx(m, \"Video\"), poster: isVid ? (m as HTMLVideoElement).poster : \"\", autoplay: m.autoplay, loop: m.loop, preload: m.preload, playsInline: isVid ? m.playsInline : false, crossOrigin: m.crossOrigin, controls: m.controls, controlsList: m.controlsList ?? m.getAttribute(\"controlsList\"), disablePictureInPicture: isVid ? m.disablePictureInPicture ?? m.hasAttribute(\"disablePictureInPicture\") : false, sources: getSources(m), tracks: getTracks(m) });\r\nexport const getMediaStatus = (m: HTMLMediaElement, isVid = m instanceof HTMLVideoElement, _txtTrackIdx = getTrackIdx(m, \"Text\"), _flagsOnly = false): Partial<MediaStatus> => ({ readyState: m.readyState, networkState: m.networkState, error: m.error, seeking: m.seeking, buffered: m.buffered, played: m.played, seekable: m.seekable, duration: m.duration, ended: m.ended, loadedMetadata: m.readyState >= 1, loadedData: m.readyState >= 2, canPlay: m.readyState >= 3, canPlayThrough: m.readyState >= 4, videoWidth: isVid ? (m as HTMLVideoElement).videoWidth : 0, videoHeight: isVid ? (m as HTMLVideoElement).videoHeight : 0, textTracks: _flagsOnly ? undefined : m.textTracks, audioTracks: _flagsOnly ? undefined : (m as any).audioTracks, videoTracks: _flagsOnly ? undefined : (m as any).videoTracks, activeCue: _flagsOnly ? undefined : m.textTracks[_txtTrackIdx]?.activeCues?.[0] || null });\r\nexport const getMediaSettings = (m: HTMLMediaElement): DeepPartial<MediaSettings> => ({ defaultMuted: m.defaultMuted, defaultPlaybackRate: m.defaultPlaybackRate, srcObject: m.srcObject });\r\n\r\nexport function getMediaProgress({ state: s, status: st }: CtlrMedia, time = s.currentTime): number {\r\n if (st.isLive) {\r\n if (!st.seekable.length || s.live) return 1;\r\n const min = st.seekable.start(0),\r\n dvr = st.seekable.end(st.seekable.length - 1) - min;\r\n return dvr > 0 ? (time - min) / dvr : 1;\r\n } else return time / st.duration;\r\n}\r\nexport const getMediaTime = (media: CtlrMedia, percent: number, _min = getMediaMin(media)): number => (media.status.isLive ? _min! + percent * (getMediaMax(media) - _min!) : percent * media.status.duration);\r\nexport const getMediaMin = ({ status: st, state: s }: Pick<CtlrMedia, \"state\" | \"status\">): number => (st.isLive ? (st.seekable.length ? (st.canSeekLive ? st.seekable.start(0) : st.seekable.end(st.seekable.length - 1)) : s.currentTime) : 0); // live?, can't seek?, jump to edge\r\nexport const getMediaMax = ({ status: st, state: s }: Pick<CtlrMedia, \"state\" | \"status\">): number => (st.isLive ? (st.seekable.length ? st.seekable.end(st.seekable.length - 1) : s.currentTime) : st.duration);\r\n\r\nexport function getBooleanMediaProps(media: CtlrMedia, prop: \"intent\" | \"state\" = \"intent\"): string[] {\r\n return Object.keys(media[prop]).filter((k) => typeof media[prop][k as keyof MediaState] === \"boolean\");\r\n}\r\n\r\n// Geometry\r\nexport function getRenderedBox({ videoHeight, videoWidth }: { videoHeight?: number; videoWidth?: number }, { width: clientWidth = 0, height: clientHeight = 0 }: { width?: number; height?: number }, { objectFit = \"cover\", objectPosition = \"50% 50%\" }: { objectFit?: string; objectPosition?: string }): Partial<Dimensions & { left: number; top: number }> {\r\n const bbox = { width: clientWidth, height: clientHeight } as DOMRect,\r\n obj = (((videoHeight ||= 1080), (videoWidth ||= videoHeight * (16 / 9))), videoWidth && videoHeight ? { width: videoWidth, height: videoHeight } : null);\r\n if (!obj || !objectFit || !objectPosition) return {};\r\n if (objectFit === \"scale-down\") objectFit = bbox.width < obj.width || bbox.height < obj.height ? \"contain\" : \"none\";\r\n if (objectFit === \"none\") return { ...parseObjectPos(objectPosition, bbox, obj), ...obj };\r\n else if (objectFit === \"contain\") {\r\n const objRatio = obj.height / obj.width,\r\n bboxRatio = bbox.height / bbox.width,\r\n width = bboxRatio > objRatio ? bbox.width : bbox.height / objRatio,\r\n height = bboxRatio > objRatio ? bbox.width * objRatio : bbox.height;\r\n return { ...parseObjectPos(objectPosition, bbox, { width, height }), width, height };\r\n } else if (objectFit === \"fill\") {\r\n const { left, top, rawLeft, rawTop } = parseObjectPos(objectPosition, bbox, obj);\r\n return { left: rawLeft.endsWith(\"%\") ? 0 : left, top: rawTop.endsWith(\"%\") ? 0 : top, width: bbox.width, height: bbox.height }; // Relative positioning is discarded with `obj-fit: fill`, so we need to check here if it's relative or not\r\n } else if (objectFit === \"cover\") {\r\n const minRatio = Math.min(bbox.width / obj.width, bbox.height / obj.height);\r\n let width = obj.width * minRatio,\r\n height = obj.height * minRatio,\r\n outRatio = 1;\r\n if (width < bbox.width) outRatio = bbox.width / width;\r\n if (Math.abs(outRatio - 1) < 1e-14 && height < bbox.height) outRatio = bbox.height / height;\r\n (width *= outRatio), (height *= outRatio);\r\n return { ...parseObjectPos(objectPosition, bbox, { width, height }), width, height };\r\n }\r\n return {};\r\n}\r\nconst parsePosAsPx = (str: string, bboxSize: number, objectSize: number): number => {\r\n str === \"center\" ? (str = \"50%\") : str === \"left\" || str === \"top\" ? (str = \"0%\") : (str === \"right\" || str === \"bottom\") && (str = \"100%\");\r\n const num = parseFloat(str);\r\n return !str.endsWith(\"%\") ? num : (bboxSize - objectSize) * (num / 100);\r\n};\r\nconst parseObjectPos = (position: string, bbox: DOMRect, object: Dimensions): { left: number; top: number; rawLeft: string; rawTop: string } => {\r\n if (position === \"center\") position = \"50% 50%\";\r\n const [left, top = \"50%\"] = position.split(\" \");\r\n return { left: parsePosAsPx(left, bbox.width, object.width), top: parsePosAsPx(top, bbox.height, object.height), rawLeft: left, rawTop: top };\r\n};\r\n\r\nexport function getSizeTier(container: HTMLElement, { offsetWidth: w, offsetHeight: h } = container) {\r\n return { width: w, height: h, tier: h <= 130 ? \"xxxxx\" : w <= 280 ? \"xxxx\" : w <= 380 ? \"xxx\" : w <= 480 ? \"xx\" : w <= 630 ? \"x\" : \"\" };\r\n}\r\n\r\n// Media Element Cloning\r\nexport function cloneMedia<M extends HTMLMediaElement>(v: M): M {\r\n const newV = v.cloneNode(true) as M;\r\n newV.tmgPlayer = v.tmgPlayer;\r\n v.parentElement?.replaceChild(newV, v);\r\n if (v.currentTime) newV.currentTime = v.currentTime;\r\n if (v.playbackRate !== 1) newV.playbackRate = v.playbackRate;\r\n if (v.defaultPlaybackRate !== 1) newV.defaultPlaybackRate = v.defaultPlaybackRate;\r\n if (v.volume !== 1) newV.volume = v.volume;\r\n if (v.muted) newV.muted = true;\r\n if (v.defaultMuted) newV.defaultMuted = true;\r\n if (v.srcObject) newV.srcObject = v.srcObject;\r\n if (v.autoplay) newV.autoplay = true;\r\n if (v.loop) newV.loop = true;\r\n if (v.controls) newV.controls = true;\r\n if (v.crossOrigin) newV.crossOrigin = v.crossOrigin;\r\n if (v.playsInline) newV.playsInline = true;\r\n if (v.controlsList?.length) newV.controlsList = v.controlsList;\r\n if (v.disablePictureInPicture) newV.disablePictureInPicture = true;\r\n if (!v.paused && newV.isConnected) newV.play();\r\n return newV;\r\n}\r\n\r\n// Source Management\r\nexport function putSourceDetails(source: any, el: HTMLSourceElement | Record<string, any>): void {\r\n if (source.src) el.src = source.src;\r\n if (source.type) el.type = source.type;\r\n if (source.media) el.media = source.media;\r\n}\r\nexport function addSources(sources: SourceLike | Iterable<SourceLike> = [], medium: HTMLElement): HTMLSourceElement | HTMLSourceElement[] {\r\n const addSource = (source: SourceLike, med: HTMLElement) => {\r\n const sourceEl = createEl(\"source\");\r\n putSourceDetails(source, sourceEl);\r\n return med.appendChild(sourceEl);\r\n };\r\n return isIter(sources) ? Array.from(sources as Iterable<SourceLike>, (source) => addSource(source, medium)) : addSource(sources, medium);\r\n}\r\nexport function getSources(medium: HTMLElement): MediaState[\"sources\"] {\r\n const sources = medium.querySelectorAll<HTMLSourceElement>(\"source\"),\r\n _sources: SourceLike[] = [];\r\n for (const source of sources) {\r\n const obj: Record<string, any> = {};\r\n putSourceDetails(source, obj);\r\n _sources.push(obj as SourceLike);\r\n }\r\n return _sources as MediaState[\"sources\"];\r\n}\r\nexport const removeSources = (medium: HTMLElement, sources = medium?.querySelectorAll(\"source\")): void => {\r\n if (sources) for (const source of sources) source.remove();\r\n};\r\nexport function isSameSources(a?: Sources, b?: Sources): boolean {\r\n if (!a || !b || a.length !== b.length) return false;\r\n const set = new Set(b.map((s) => `${cleanURL(s.src)}|${s.type}|${s.media}`));\r\n return a.every((s) => set.has(`${cleanURL(s.src)}|${s.type}|${s.media}`));\r\n}\r\n\r\n// Track Management\r\nexport type TrackType = \"Audio\" | \"Video\" | \"Text\";\r\nexport function putTrackDetails(track: any, el: HTMLTrackElement | Record<string, any>): void {\r\n if (track.id) el.id = track.id;\r\n if (track.kind) el.kind = track.kind;\r\n if (track.label) el.label = track.label;\r\n if (track.srclang) el.srclang = track.srclang;\r\n if (track.src) el.src = track.src;\r\n if (track.default) el.default = track.default;\r\n}\r\nexport function addTracks(tracks: TrackLike | Iterable<TrackLike> = [], medium: HTMLElement): HTMLTrackElement | HTMLTrackElement[] {\r\n const addTrack = (track: TrackLike, med: HTMLElement) => {\r\n const trackEl = createEl(\"track\");\r\n return putTrackDetails(track, trackEl), med.appendChild(trackEl);\r\n };\r\n return isIter(tracks) ? Array.from(tracks as Iterable<TrackLike>, (track) => addTrack(track, medium)) : addTrack(tracks, medium);\r\n}\r\nexport function getTracks(medium: HTMLElement, cues = false): TrackLike[] {\r\n const tracks = medium.querySelectorAll<HTMLTrackElement>(!cues ? \"track\" : \"track:is([kind='captions'], [kind='subtitles'])\"),\r\n _tracks: TrackLike[] = [];\r\n for (const track of tracks) {\r\n const obj: Record<string, any> = {};\r\n putTrackDetails(track, obj), _tracks.push(obj as TrackLike);\r\n }\r\n return _tracks;\r\n}\r\nexport const removeTracks = (medium: HTMLElement, tracks = medium?.querySelectorAll(\"track\")): void => {\r\n if (tracks) for (const track of tracks) if (track.kind === \"subtitles\" || track.kind === \"captions\") track.remove();\r\n};\r\nexport function isSameTracks(a?: Tracks, b?: Tracks): boolean {\r\n if (!a || !b || a.length !== b.length) return false;\r\n const set = new Set(b.map((t) => `${cleanURL(t.src)}|${t.kind}|${t.label}|${t.srclang}|${t.default}`));\r\n return a.every((t) => set.has(`${cleanURL(t.src)}|${t.kind}|${t.label}|${t.srclang}|${t.default}`));\r\n}\r\nconst isTrack = (type: TrackType, term: any) => `${type}Track` in window && term instanceof (window as any)[`${type}Track`];\r\nexport function getTrackIdx(medium: HTMLMediaElement, type: TrackType = \"Text\", term: any = \"active\", list = (medium as any)[`${type.toLowerCase()}Tracks`]): number {\r\n if (isNum(term)) return term;\r\n if (list && term === \"active\") {\r\n if (type === \"Text\") for (let i = 0; i < +list.length; i++) if (list[i].mode === \"showing\") return i;\r\n if (type === \"Audio\") for (let i = 0; i < +list.length; i++) if (list[i].enabled) return i;\r\n if (type === \"Video\") return list.selectedIndex ?? -1;\r\n }\r\n if (list && isTrack(type, term)) return Array.prototype.indexOf.call(list, term);\r\n if (list && isStr(term)) {\r\n term = term.toLowerCase();\r\n return !isNaN(+term) ? +term : Array.prototype.findIndex.call(list, (t: any) => t.id.toLowerCase() === term || t.label.toLowerCase() === term || t.srclang?.toLowerCase() === term || t.language.toLowerCase() === term || isSameURL(t.src, term));\r\n }\r\n return -1;\r\n}\r\nexport function setCurrentTrack(medium: HTMLMediaElement, type: TrackType = \"Text\", term: any, flush = false, list = (medium as any)[`${type.toLowerCase()}Tracks`]): void {\r\n const idx = getTrackIdx(medium, type, term, list);\r\n if (list && type !== \"Video\") for (let i = 0; i < list.length; i++) type === \"Text\" ? (list[i].mode = i === idx ? \"showing\" : flush ? \"disabled\" : \"hidden\") : (list[i].enabled = i === idx);\r\n else list?.[idx] && (list[idx].selected = true);\r\n}\r\n\r\n// Capbailities\r\nexport const DUMMY_VID = createEl(\"video\");\r\nexport const DUMMY_AUD = createEl(\"audio\");\r\nexport function canUseVolume(type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean {\r\n try {\r\n const prev = dummy.volume;\r\n dummy.volume = 0.5;\r\n const works = dummy.volume === 0.5;\r\n return (dummy.volume = prev), works;\r\n } catch {\r\n return false;\r\n }\r\n}\r\nexport const canMuteVolume = (type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean => !!dummy && \"muted\" in dummy;\r\nexport function canUseRate(type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean {\r\n try {\r\n const prev = dummy.playbackRate;\r\n dummy.playbackRate = 0.5;\r\n const works = dummy.playbackRate === 0.5;\r\n return (dummy.playbackRate = prev), works;\r\n } catch {\r\n return false;\r\n }\r\n}\r\nexport const canTextTracks = (type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean => !!dummy && \"textTracks\" in dummy;\r\nexport const canVideoTracks = (type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean => !!dummy && \"videoTracks\" in dummy;\r\nexport const canAudioTracks = (type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean => !!dummy && \"audioTracks\" in dummy;\r\n\r\n// ============ Caption/Subtitle Utilities ============\r\nexport const stripTags = (text: string): string => text.replace(/<(\\/)?([a-z0-9.:]+)([^>]*)>/gi, \"\");\r\n\r\nexport function srtToVtt(srt: string, vttLines: string[] = [\"WEBVTT\", \"\"]): string {\r\n const input = srt.replace(/\\r\\n?/g, \"\\n\").trim();\r\n for (const block of input.split(/\\n{2,}/)) {\r\n const lines = block.split(\"\\n\");\r\n let idx = /^\\d+$/.test(lines[0].trim()) ? 1 : 0;\r\n const timing = lines[idx]?.trim().replace(/\\s+/g, \" \"),\r\n m = timing?.match(/(\\d{1,2}:\\d{2}:\\d{2})(?:[.,](\\d{1,3}))?\\s*-->\\s*(\\d{1,2}:\\d{2}:\\d{2})(?:[.,](\\d{1,3}))?/);\r\n if (!m) continue;\r\n const [, startHms, startMsRaw = \"0\", endHms, endMsRaw = \"0\"] = m,\r\n to3 = (ms: string) => ms.padEnd(3, \"0\").slice(0, 3);\r\n vttLines.push(startHms + \".\" + to3(startMsRaw) + \" --> \" + endHms + \".\" + to3(endMsRaw));\r\n for (let i = idx + 1; i < lines.length; i++) vttLines.push(lines[i]);\r\n vttLines.push(\"\");\r\n }\r\n return vttLines.join(\"\\n\");\r\n}\r\n\r\nexport function parseVttText(text: string): string {\r\n const state = { tag: /<(\\/)?([a-z0-9.:]+)([^>]*)>/gi, o: \"\", l: 0, p: null as string | null, c: \"\" },\r\n esc = (s: string) => s.replace(/[&<>\"']/g, (c) => ({ \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\" }[c]!));\r\n let m: RegExpExecArray | null;\r\n while ((m = state.tag.exec(text))) {\r\n const chunk = text.slice(state.l, m.index);\r\n if (chunk) state.c += esc(chunk);\r\n const [_, cls, tag_n, rest] = m,\r\n low = tag_n.toLowerCase();\r\n if (/^[0-9]/.test(tag_n)) {\r\n state.o += state.p ? `<span data-part=\"timed\" data-time=\"${state.p}\">${state.c}</span>` : state.c;\r\n state.p = tag_n;\r\n state.c = \"\";\r\n } else if (cls) state.c += [\"c\", \"v\", \"lang\"].includes(low) ? \"</span>\" : `</${low}>`;\r\n else if ([\"b\", \"i\", \"u\", \"ruby\", \"rt\"].includes(low)) state.c += `<${low}>`;\r\n else if (low === \"c\") state.c += `<span class=\"vtt-c ${rest.replace(/\\.([a-z0-9_-]+)/gi, \"$1 \").trim()}\">`;\r\n else if (low === \"v\") state.c += `<span data-part=\"voice\"${rest.trim() ? ` title=\"${esc(rest.trim())}\"` : \"\"}>`;\r\n else if (low === \"lang\") state.c += `<span lang=\"${esc(rest.trim())}\">`;\r\n state.l = state.tag.lastIndex;\r\n }\r\n const lChunk = text.slice(state.l);\r\n if (lChunk) state.c += esc(lChunk);\r\n return state.o + (state.p ? `<span data-part=\"timed\" data-time=\"${state.p}\">${state.c}</span>` : state.c);\r\n}\r\n\r\nexport function formatVttLine(p: string, maxChars: number): string[] {\r\n const state = { tokens: p.match(/<[^>]+>|\\S+/g) || [], stack: [] as string[], parts: [] as string[], line: \"\", len: 0, openStr: \"\", closeStr: \"\", timeTag: \"\", lastWasTag: false },\r\n updateTags = () => ((state.openStr = state.stack.map((n) => `<${n}>`).join(\"\")), (state.closeStr = state.stack.reduceRight((a, n) => a + `</${n}>`, \"\"))),\r\n flush = () => state.line && (state.parts.push(state.line + state.closeStr), (state.line = (state.timeTag || \"\") + state.openStr), (state.len = 0), (state.lastWasTag = true));\r\n for (const tok of state.tokens) {\r\n const tag = tok[0] === \"<\",\r\n closeTag = tag && tok[1] === \"/\";\r\n if (tag) {\r\n if (state.line && !state.lastWasTag && !closeTag) state.line += \" \";\r\n const m = tok.match(/^<\\/?\\s*([a-z0-9._:-]+)/i),\r\n n = m?.[1] || \"\",\r\n timing = /^\\d/.test(n);\r\n if (timing) {\r\n (state.timeTag = tok), (state.line += tok), (state.lastWasTag = true);\r\n continue;\r\n }\r\n if (!closeTag && !tok.endsWith(\"/>\") && n) state.stack.push(n), updateTags();\r\n if (closeTag && state.stack.length) state.stack.pop(), updateTags();\r\n (state.lastWasTag = true), (state.line += tok);\r\n continue;\r\n }\r\n const len = stripTags(tok).length,\r\n needSpace = state.line && !state.lastWasTag;\r\n if (state.len + (needSpace ? 1 : 0) + len > maxChars) flush();\r\n if (needSpace) (state.line += \" \"), (state.len += 1);\r\n (state.line += tok), (state.len += len), (state.lastWasTag = false);\r\n }\r\n return flush(), state.parts;\r\n}\r\n","import { BasePlug } from \"../../base\";\r\nimport type { AutoConfig, AptAutoplayOption } from \"./types\";\r\nimport { AUTO_BUILD } from \"./build\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { CtlrConfig } from \"@defs/config\";\r\nimport { CtlrMedia } from \"@defs/contract\";\r\nimport { isStr } from \"@utils/obj\";\r\nimport { clamp, safeNum } from \"@utils/num\";\r\nimport { addSources } from \"@utils/media\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { MenuRegistry } from \"@core/registries\";\r\n\r\nexport class AutoPlug extends BasePlug<AutoConfig> {\r\n public static readonly plugName = \"auto\";\r\n public static readonly BUILD = AUTO_BUILD;\r\n protected nextPreview: HTMLVideoElement | null = null;\r\n protected canAutoMovePlaylist = true;\r\n\r\n public override wire(): void {\r\n // Plug Watchers\r\n this.ctlr.plug(\"playlist\")?.state.watch(\"currentIndex\", () => (this.canAutoMovePlaylist = true), { signal: this.signal });\r\n // Ctlr Config Watchers\r\n this.ctlr.config.watch(\"settings.auto.play.value\", this.forwardAutoPlay, { init: \"auto\", signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"state.currentTime\", this.handleCurrentTimeState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State ---------\r\n this.ctlr.state.on(\"mediaParentIntersecting\", this.handleMediaParentIntersecting, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.auto.next.preview.usePoster\", this.handleNextPreviewUsePoster, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.auto.next.preview.tease\", this.handleNextPreviewTease, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.auto.next.preview.time\", this.handleNextPreviewTime, { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected forwardAutoPlay(value?: boolean | AptAutoplayOption): void {\r\n silence(() => (this.media.intent.autoplay = isStr(value) ? false : !!value));\r\n }\r\n\r\n protected handleCurrentTimeState({ value: curr }: REvent<CtlrMedia, \"state.currentTime\">): void {\r\n if (this.media.status.readyState && curr && this.ctlr.payload.wired && Math.floor((this.settings.time.end ?? this.media.status.duration) - curr) <= this.config.next.value / 1000) this.autonextMedia();\r\n }\r\n\r\n protected handleMediaParentIntersecting(): void {\r\n this.mediaAptAutoplay(this.config.pause.value, false), this.mediaAptAutoplay();\r\n }\r\n\r\n protected handleNextPreviewUsePoster({ target: { value, object } }: REvent<CtlrConfig, \"settings.auto.next.preview.usePoster\">): void {\r\n if (!this.nextPreview || (value && this.nextPreview.poster)) return;\r\n if (object.tease) this.config.next.preview.tease = true;\r\n else this.nextPreview.currentTime = object.time;\r\n }\r\n\r\n protected handleNextPreviewTease({ target: { value, object } }: REvent<CtlrConfig, \"settings.auto.next.preview.tease\">): void {\r\n if (!this.nextPreview) return;\r\n this.nextPreview.ontimeupdate = () => this.nextPreview && Number(this.nextPreview.currentTime) >= object.time && this.nextPreview.pause();\r\n if (value && (!object.usePoster || !this.nextPreview.poster)) this.nextPreview.play();\r\n }\r\n\r\n protected handleNextPreviewTime({ target: { value, object } }: REvent<CtlrConfig, \"settings.auto.next.preview.time\">): void {\r\n if (!this.nextPreview || (object.usePoster && this.nextPreview.poster)) return;\r\n this.nextPreview.currentTime = Number(value);\r\n }\r\n\r\n protected mediaAptAutoplay(auto = this.config.play.value, bool = true, p = this.ctlr.state.mediaParentIntersecting ? \"in\" : \"out\"): void {\r\n if (auto === `${p}-view-always`) this.media.intent.paused = !bool;\r\n else if (auto === `${p}-view` && this.ctlr.state.readyState < 3) this.media.intent.paused = !bool; // #PATIENT: only after first play\r\n }\r\n\r\n protected autonextMedia(): void {\r\n if (!this.media.status.loadedMetadata || !this.ctlr.config.playlist.content || this.config.next.value < 0 || !this.canAutoMovePlaylist || this.ctlr.plug(\"playlist\")!.state.currentIndex >= this.ctlr.config.playlist.content.length - 1 || this.media.state.paused || this.media.status.waiting) return;\r\n this.canAutoMovePlaylist = false;\r\n const count = clamp(1, Math.round(safeNum(this.settings.time.end ?? this.media.status.duration) - safeNum(this.media.state.currentTime)), this.config.next.value / 1000),\r\n m = this.ctlr.config.playlist.content[this.ctlr.plug(\"playlist\")!.state.currentIndex + 1].media;\r\n const nVTId = this.ctlr.plug(\"settings.toasts\")?.toast?.(\"\", {\r\n autoClose: count * 1000,\r\n hideProgressBar: false,\r\n position: \"bottom-right\",\r\n bodyHTML: `<span title=\"Play next ${this.media.type}\" class=\"tmg-media-next-preview-wrapper\">\r\n <button type=\"button\"><svg viewBox=\"0 0 25 25\"><path d=\"M8,5.14V19.14L19,12.14L8,5.14Z\" /></svg></button>\r\n <video class=\"tmg-media-next-preview\" poster=\"${m.intent.poster || m.settings.metadata.artwork?.[0]?.src || \"\"}\" src=\"${m.intent.src || \"\"}\" muted playsinline webkit-playsinline preload=\"metadata\"></video>\r\n <p>${this.ctlr.plug(\"settings.time\")?.toTimeText(NaN) ?? \"0:00\"}</p>\r\n </span>\r\n <span class=\"tmg-media-next-info\"><h2>Next ${capitalize(this.media.type)} in <span class=\"tmg-media-next-countdown\">${count}</span></h2>${m.settings.metadata.title ? `<p class=\"tmg-media-next-title\">${m.settings.metadata.title}</p>` : \"\"}</span>`,\r\n onTimeUpdate: (time: number, el = this.ctlr.queryDOM(\".tmg-media-next-countdown\")) => el && (el.textContent = String(Math.round((count * 1000 - time) / 1000) || 1)),\r\n onClose: (elapsed?: boolean) => void (removeListeners(), elapsed && this.ctlr.plug(\"playlist\")?.next()),\r\n tag: \"tmg-anvi\",\r\n signal: this.signal,\r\n });\r\n const evtPaths = [\"state.currentTime\", \"state.paused\", \"status.waiting\"] as const,\r\n cleanUp = (permanent = false) => (nVTId && t007.toast?.dismiss(nVTId, \"instant\"), (this.nextPreview = null), (this.canAutoMovePlaylist = !permanent)),\r\n strictCleanUp = () => !this.media.status.ended && cleanUp(),\r\n autoCleanUp = () => Math.floor(safeNum((this.settings.time.end ?? this.media.status.duration) - this.media.state.currentTime)) > this.config.next.value / 1000 && cleanUp(),\r\n removeListeners = () => evtPaths.forEach((e, i) => this.media.off(e, !i ? autoCleanUp : strictCleanUp));\r\n evtPaths.forEach((e, i) => this.media.on(e, !i ? autoCleanUp : strictCleanUp, { signal: this.signal }));\r\n const nVP = (this.nextPreview = this.ctlr.queryDOM<HTMLVideoElement>(\".tmg-media-next-preview\"))!;\r\n if (m.intent.sources?.length) addSources(m.intent.sources, nVP);\r\n for (const e of [\"loadedmetadata\", \"loaded\", \"durationchange\"] as const) nVP?.addEventListener(e, ({ target: p }) => ((p as HTMLVideoElement).nextElementSibling!.textContent = this.ctlr.plug(\"settings.time\")?.toTimeText((p as HTMLVideoElement).duration) ?? \"-:--\"), { signal: this.signal });\r\n this.config.next.preview = this.config.next.preview; // force update\r\n nVP?.previousElementSibling?.addEventListener(\"click\", () => (cleanUp(true), this.ctlr.plug(\"playlist\")?.next()), { capture: true, signal: this.signal });\r\n }\r\n\r\n protected override registerMenu(): void {\r\n this.ctlr.plug(\"settings.settingsView\")?.menu.registerFirst(MenuRegistry.get(\"settings.auto\")?.(this));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.auto\": typeof AutoPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n auto: AutoConfig;\r\n }\r\n}\r\n","import { BasePlug } from \".\";\r\nimport { MediaIntent, MediaFeatures } from \"@defs/contract\";\r\nimport type { OptRange } from \"@defs/generics\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport interface SliderState {\r\n aptValue: number;\r\n}\r\n\r\nexport abstract class BaseSliderPlug<Config extends OptRange, State extends SliderState> extends BasePlug<Config, State> {\r\n public shouldToggle = false;\r\n public sliderAptValue = 100;\r\n public shouldSetAptValue = false;\r\n protected nextToggle: boolean | null = null;\r\n protected nextLevel: number | null = null;\r\n // ABSTRACT HOOKS: The Child classes will define these to route the math to the right place\r\n protected get prefix(): keyof MediaIntent {\r\n return this.name as keyof MediaIntent;\r\n } // e.g., \"volume\" or \"brightness\"\r\n protected abstract get toggleKey(): keyof MediaIntent; // e.g., \"muted\" or \"dark\"\r\n\r\n // --- 1. Shared CSS Boost & Limits Math ---\r\n protected handleMin(min: number): void {\r\n if (this.media.state[this.prefix] < min) this.media.intent[this.prefix] = min as never;\r\n if (this.state.aptValue < min) this.state.aptValue = min;\r\n }\r\n protected handleMax(max: number): void {\r\n if (this.media.state[this.prefix] > max) this.media.intent[this.prefix] = max as never;\r\n if (this.state.aptValue > max) this.state.aptValue = max;\r\n this.media.container.classList.toggle(`tmg-media-${this.prefix}-boost`, max > 100);\r\n this.settings.css[`${this.prefix}SliderPercent`] = Math.round((100 / max) * 100);\r\n this.settings.css[`max${capitalize(this.prefix)}Ratio`] = max / 100;\r\n }\r\n protected handleSliderState(value: number): void {\r\n const strLevel = value === 0 ? this.toggleKey : value < 50 ? \"low\" : value <= 100 ? \"high\" : \"boost\",\r\n percent = (value - 0) / (this.config.max - 0);\r\n this.media.container.dataset[`${this.prefix}Level`] = strLevel;\r\n const CSS = this.settings.css,\r\n capped = capitalize(this.prefix);\r\n if (this.config.max > 100) if (value <= 100) {\n CSS[`current${capped}SliderPosition`] = value / 100;\n CSS[`current${capped}SliderBoostPosition`] = CSS[`${this.prefix}SliderBoostPercent`] = 0;\n } else {\n CSS[`current${capped}SliderPosition`] = 1;\n CSS[`current${capped}SliderBoostPosition`] = (value - 100) / (this.config.max - 100);\n CSS[`${this.prefix}SliderBoostPercent`] = CSS[`${this.prefix}SliderPercent`];\n } else CSS[`current${capped}SliderPosition`] = percent;\r\n }\r\n // --- 2. The \"Sticky Note\" Architecture ---\r\n protected setValueState(value: number, isNext = this.nextLevel === value): void {\r\n if (!isNext && value > 0) silence(() => (this.media.intent[this.toggleKey] = (this.nextToggle = false) as never));\r\n }\r\n protected setToggleState(toggled: boolean, isNext = this.nextToggle === toggled): void {\r\n if (toggled) {\r\n if (this.media.state[this.prefix]) (this.state.aptValue = this.media.state[this.prefix]), (this.shouldSetAptValue = true);\r\n this.shouldToggle = true;\r\n if (!isNext && this.media.state[this.prefix]) silence(() => (this.media.intent[this.prefix] = (this.nextLevel = 0) as never));\r\n } else {\r\n const restore = this.shouldSetAptValue ? this.state.aptValue : this.media.state[this.prefix];\r\n if (!isNext) silence(() => (this.media.intent[this.prefix] = (this.nextLevel = restore ? restore : this.sliderAptValue) as never));\r\n this.shouldToggle = this.shouldSetAptValue = false;\r\n }\r\n }\r\n // --- 3. The Slider UI Input ---\r\n public handleSliderInput(value: number): void {\r\n this.shouldToggle = this.shouldSetAptValue = false;\r\n this.media.intent[this.prefix] = value as never;\r\n if (value > 5) this.sliderAptValue = value;\r\n }\r\n public toggle(option?: \"auto\"): void {\r\n if (option === \"auto\" && this.shouldSetAptValue && !this.state.aptValue) this.state.aptValue = this.config.skip;\r\n this.media.intent[this.toggleKey] = !(this.media.state[this.toggleKey] || !this.media.state[this.prefix]) as never;\r\n }\r\n // --- 4. The Mathematical Grid Snapping ---\r\n public changeAptValue(value: number): void {\r\n const sign = value >= 0 ? \"+\" : \"-\";\r\n value = Math.abs(value);\r\n let level = Math.round(this.shouldSetAptValue ? this.state.aptValue : this.media.state[this.prefix]);\r\n if (sign === \"-\") {\r\n if (level > this.config.min) level -= level % value || value;\r\n this.media.features[this.prefix as keyof MediaFeatures] && this.ctlr.plug(\"settings.notifiers\")?.notify(level === 0 ? `${this.prefix}${this.toggleKey}` : `${this.prefix}down`);\r\n } else {\r\n if (level < this.config.max) level += level % value ? value - (level % value) : value;\r\n this.media.features[this.prefix as keyof MediaFeatures] && this.ctlr.plug(\"settings.notifiers\")?.notify(`${this.prefix}up`);\r\n }\r\n this.shouldSetAptValue ? (this.state.aptValue = level) : (this.media.intent[this.prefix] = level as never);\r\n }\r\n} // ts, look what u made me do, \"never\" did I imagine :)\r\n","import { BrightnessConfig } from \".\";\r\n\r\nexport const BRIGHTNESS_BUILD: Partial<BrightnessConfig> = {\r\n min: 0,\r\n max: 150,\r\n skip: 5,\r\n};\r\n","import { BaseSliderPlug } from \"@plugs/base/slider\";\nimport type { BrightnessConfig, BrightnessState } from \"./types\";\nimport { BRIGHTNESS_BUILD } from \"./build\";\nimport type { Controller } from \"@core/controller\";\nimport { REvent } from \"sia-reactor\";\nimport type { CtlrMedia } from \"@defs/contract\";\nimport { clamp } from \"@utils/num\";\n\nexport class BrightnessPlug extends BaseSliderPlug<BrightnessConfig, BrightnessState> {\n public static readonly plugName = \"brightness\";\n public static readonly BUILD = BRIGHTNESS_BUILD;\n protected get toggleKey() {\n return \"dark\" as const;\n }\n\n constructor(ctlr: Controller, config = ctlr.settings.brightness) {\n super(ctlr, config, { aptValue: 100 });\n }\n\n public override wire(): void {\n // Variables Assignment\n const brightness = this.media.intent.brightness ?? this.media.state.brightness ?? this.settings.css.brightness;\n this.state.aptValue = clamp(this.config.min, brightness, this.config.max);\n this.shouldToggle = this.shouldSetAptValue = this.media.intent.dark ?? false;\n this.media.intent.brightness = this.shouldToggle ? 0 : this.state.aptValue;\n // Ctlr Media Setters\n this.media.set(\"intent.brightness\", (v) => clamp(this.shouldToggle ? 0 : this.config.min, v, this.config.max), { signal: this.signal }); // #VALIDATOR: rules enforcement\n // ----------- Watchers\n this.media.watch(\"tech\", () => ((this.media.features.brightness ||= true), (this.media.features.dark ||= true)), { init: true, signal: this.signal });\n // ----------- Listeners\n this.media.on(\"intent.brightness\", this.handleBrightnessIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"intent.dark\", this.handleDarkIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"state.brightness\", (e) => this.handleSliderState(e.value), { init: this.ctlr.payload.wired, signal: this.signal });\n // ---- Config ---------\n this.ctlr.config.on(\"settings.brightness.min\", (e) => this.handleMin(e.value), { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.brightness.max\", (e) => this.handleMax(e.value), { init: true, signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"dark\", { fn: this.handleKeyDark, keyboard: { phase: \"keyup\" } });\n this.ctlr.registerAction(\"brightnessUp\", { fn: this.handleKeyBrightnessUp, keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"brightnessDown\", { fn: this.handleKeyBrightnessDown, keyboard: { phase: \"keydown\" } });\n super.wire();\n }\n\n protected handleBrightnessIntent(e: REvent<CtlrMedia, \"intent.brightness\">, isNext = this.nextLevel === e.value): void {\n if (e.resolved) return;\n if (isNext) this.nextLevel = null;\n this.setValueState(e.value, isNext);\n this.settings.css.brightness = e.value;\n this.media.state.brightness = e.value;\n // e.resolve(this.name); // #UMBRELLA: must envelope logic\n }\n\n protected handleDarkIntent(e: REvent<CtlrMedia, \"intent.dark\">, isNext = this.nextToggle === e.value): void {\n if (e.resolved) return;\n if (isNext) this.nextToggle = null;\n else if (this.media.state.dark === e.value && !!this.media.state.brightness) return e.resolve(this.name);\n this.setToggleState(e.value, isNext);\n this.media.state.dark = e.value;\n // e.resolve(this.name); // #UMBRELLA: must envelope logic\n }\n\n protected handleKeyDark = (): void => {\n this.toggle(\"auto\");\n this.media.features.brightness && this.media.wonce(\"state.brightness\", (v) => this.ctlr.plug(\"settings.notifiers\")?.notify(!v ? \"brightnessdark\" : \"brightnessup\"), { signal: this.signal });\n };\n protected handleKeyBrightnessUp = (): void => {\n this.changeAptValue(this.ctlr.plug(\"settings.keys\")?.getModded(\"brightness\", \"\", this.config.skip) ?? this.config.skip);\n };\n protected handleKeyBrightnessDown = (): void => {\n this.changeAptValue(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"brightness\", \"\", this.config.skip) ?? this.config.skip));\n };\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.brightness\": typeof BrightnessPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n brightness: BrightnessConfig;\n }\n}\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { CaptionsConfig } from \"./types\";\r\n\r\nexport const STYLE_PATHS = [\"captions.font.family.value\", \"captions.font.size.value\", \"captions.font.color.value\", \"captions.font.opacity.value\", \"captions.font.weight.value\", \"captions.font.variant.value\", \"captions.background.color.value\", \"captions.background.opacity.value\", \"captions.window.color.value\", \"captions.window.opacity.value\", \"captions.characterEdgeStyle.value\", \"captions.textAlignment.value\"] as const;\r\nexport const ROTATE_PATHS = [\"captions.font.family.value\", \"captions.font.weight.value\", \"captions.font.variant.value\", \"captions.font.opacity.value\", \"captions.background.opacity.value\", \"captions.window.opacity.value\", \"captions.characterEdgeStyle.value\", \"captions.textAlignment.value\"] as const;\r\n\r\nexport const CAPTIONS_BUILD: DeepPartial<CaptionsConfig> = {\r\n multiple: false,\r\n allowOverride: true,\r\n font: {\r\n family: {\r\n value: \"\",\r\n options: [\r\n { value: \"\", display: \"Default\" },\r\n { value: \"monospace\", display: \"Monospace\" },\r\n { value: \"sans-serif\", display: \"Sans Serif\" },\r\n { value: \"serif\", display: \"Serif\" },\r\n { value: \"cursive\", display: \"Cursive\" },\r\n { value: \"fantasy\", display: \"Fantasy\" },\r\n { value: \"system-ui\", display: \"System UI\" },\r\n { value: \"arial\", display: \"Arial\" },\r\n { value: \"verdana\", display: \"Verdana\" },\r\n { value: \"tahoma\", display: \"Tahoma\" },\r\n { value: \"times new roman\", display: \"Times New Roman\" },\r\n { value: \"georgia\", display: \"Georgia\" },\r\n { value: \"impact\", display: \"Impact\" },\r\n { value: \"comic sans ms\", display: \"Comic Sans MS\" },\r\n ],\r\n },\r\n size: {\r\n min: 100,\r\n max: 400,\r\n value: 100,\r\n skip: 100,\r\n options: [\r\n { value: 25, display: \"25%\" },\r\n { value: 50, display: \"50%\" },\r\n { value: 75, display: \"75%\" },\r\n { value: 100, display: \"100%\" },\r\n { value: 150, display: \"150%\" },\r\n { value: 200, display: \"200%\" },\r\n { value: 300, display: \"300%\" },\r\n { value: 400, display: \"400%\" },\r\n ],\r\n },\r\n color: {\r\n value: \"#ffffff\",\r\n options: [\r\n { value: \"#ffffff\", display: \"White\" },\r\n { value: \"#ffff00\", display: \"Yellow\" },\r\n { value: \"#00ff00\", display: \"Green\" },\r\n { value: \"#00ffff\", display: \"Cyan\" },\r\n { value: \"#0000ff\", display: \"Blue\" },\r\n { value: \"#ff00ff\", display: \"Magenta\" },\r\n { value: \"#ff0000\", display: \"Red\" },\r\n { value: \"#000000\", display: \"Black\" },\r\n ],\r\n },\r\n opacity: {\r\n value: 100,\r\n options: [\r\n { value: 25, display: \"25%\" },\r\n { value: 50, display: \"50%\" },\r\n { value: 75, display: \"75%\" },\r\n { value: 100, display: \"100%\" },\r\n ],\r\n },\r\n weight: {\r\n value: \"400\",\r\n options: [\r\n { value: \"100\", display: \"Thin\" },\r\n { value: \"200\", display: \"Extra Light\" },\r\n { value: \"300\", display: \"Light\" },\r\n { value: \"400\", display: \"Normal\" },\r\n { value: \"500\", display: \"Medium\" },\r\n { value: \"600\", display: \"Semi Bold\" },\r\n { value: \"700\", display: \"Bold\" },\r\n { value: \"800\", display: \"Extra Bold\" },\r\n { value: \"900\", display: \"Black\" },\r\n ],\r\n },\r\n variant: {\r\n value: \"normal\",\r\n options: [\r\n { value: \"normal\", display: \"Normal\" },\r\n { value: \"small-caps\", display: \"Small Caps\" },\r\n { value: \"all-small-caps\", display: \"All Small Caps\" },\r\n ],\r\n },\r\n },\r\n background: {\r\n color: {\r\n value: \"#000000\",\r\n options: [\r\n { value: \"#ffffff\", display: \"White\" },\r\n { value: \"#ffff00\", display: \"Yellow\" },\r\n { value: \"#00ff00\", display: \"Green\" },\r\n { value: \"#00ffff\", display: \"Cyan\" },\r\n { value: \"#0000ff\", display: \"Blue\" },\r\n { value: \"#ff00ff\", display: \"Magenta\" },\r\n { value: \"#ff0000\", display: \"Red\" },\r\n { value: \"#000000\", display: \"Black\" },\r\n ],\r\n },\r\n opacity: {\r\n value: 75,\r\n options: [\r\n { value: 0, display: \"0%\" },\r\n { value: 25, display: \"25%\" },\r\n { value: 50, display: \"50%\" },\r\n { value: 75, display: \"75%\" },\r\n { value: 100, display: \"100%\" },\r\n ],\r\n },\r\n },\r\n window: {\r\n color: {\r\n value: \"#000000\",\r\n options: [\r\n { value: \"#ffffff\", display: \"White\" },\r\n { value: \"#ffff00\", display: \"Yellow\" },\r\n { value: \"#00ff00\", display: \"Green\" },\r\n { value: \"#00ffff\", display: \"Cyan\" },\r\n { value: \"#0000ff\", display: \"Blue\" },\r\n { value: \"#ff00ff\", display: \"Magenta\" },\r\n { value: \"#ff0000\", display: \"Red\" },\r\n { value: \"#000000\", display: \"Black\" },\r\n ],\r\n },\r\n opacity: {\r\n value: 0,\r\n options: [\r\n { value: 0, display: \"0%\" },\r\n { value: 25, display: \"25%\" },\r\n { value: 50, display: \"50%\" },\r\n { value: 75, display: \"75%\" },\r\n { value: 100, display: \"100%\" },\r\n ],\r\n },\r\n },\r\n characterEdgeStyle: {\r\n value: \"none\",\r\n options: [\r\n { value: \"none\", display: \"None\" },\r\n { value: \"drop-shadow\", display: \"Drop Shadow\" },\r\n { value: \"raised\", display: \"Raised\" },\r\n { value: \"depressed\", display: \"Depressed\" },\r\n { value: \"outline\", display: \"Outline\" },\r\n ],\r\n },\r\n textAlignment: {\r\n value: \"left\",\r\n options: [\r\n { value: \"left\", display: \"Left\" },\r\n { value: \"center\", display: \"Center\" },\r\n { value: \"right\", display: \"Right\" },\r\n ],\r\n },\r\n previewTimeout: 1500,\r\n};\r\n","import { BasePlug } from \"../../base\";\nimport type { Controller } from \"@core/controller\";\nimport type { CueLike, CaptionsConfig, CaptionsState } from \"./types\";\nimport { CAPTIONS_BUILD } from \"./build\";\nimport { ROTATE_PATHS, STYLE_PATHS } from \"./build\";\nimport type { CaptionsView } from \"@components/captionsview\";\nimport { ComponentRegistry, MenuRegistry } from \"@core/registries\";\nimport { type REvent, type PathValue, TERMINATOR } from \"sia-reactor\";\nimport { setPath } from \"sia-reactor/utils\";\nimport type { CtlrConfig } from \"@defs/config\";\nimport type { CtlrMedia } from \"@defs/contract\";\nimport { rotateAny } from \"@utils/num\";\nimport { getTrackIdx } from \"@utils/media\";\nimport { camelize } from \"@utils/str\";\nimport { silence } from \"sia-reactor/modules\";\nimport { parseUIObj } from \"@utils/obj\";\n\nexport class CaptionsPlug extends BasePlug<CaptionsConfig, CaptionsState> {\n public static readonly plugName = \"captions\";\n public static readonly BUILD = CAPTIONS_BUILD;\n protected view: CaptionsView | null = null;\n protected iView: CaptionsView | null = null; // info view\n protected shadowCurrentIndex?: number;\n protected secondaryViews = new Map<number, CaptionsView>();\n\n constructor(ctlr: Controller, config = ctlr.settings.captions) {\n super(ctlr, config, { secondaryTracks: [] });\n }\n\n public override mount(): void {\n // Variables Assignment\n if ((this.view = ComponentRegistry.init(\"captionsview\", this.ctlr))) this.ctlr.DOM.captionsContainer = this.view.element;\n this.iView = ComponentRegistry.init(\"captionsview\", this.ctlr);\n }\n\n public override wire(): void {\n // Variables Assignment\n this.config.multiple ??= false;\n this.settings.css.currentCaptionsX, this.settings.css.currentCaptionsY; // Read once so CSSPlug can cache computed values.\n // State Watchers\n this.state.watch(\"secondaryTracks\", this.syncTracks, { signal: this.signal });\n // Ctlr Media Setters\n this.media.set(\"state.currentTextTrack\", (v) => (this.ctlr.isNativeEl && v !== this.shadowCurrentIndex ? TERMINATOR : v), { signal: this.signal }); // #DICTATOR: reliable authority\n // ----------- Watchers\n this.media.watch(\"tech\", () => ((this.media.features.textTracks ||= this.ctlr.isNativeEl), (this.media.features.currentTextTrack ||= this.ctlr.isNativeEl && this.media.features.textTracks), (this.media.features.textVisible ||= this.media.features.activeCue), (this.media.features.multipleCaptions ||= this.media.features.currentTextTrack)), { init: true, signal: this.signal });\n // ---- Config -------\n this.ctlr.config.watch(\"settings.captions.multiple\", this.syncTracks, { signal: this.signal });\n for (const p of STYLE_PATHS) this.ctlr.config.watch(`settings.${p}`, (value) => ((this.settings.css[camelize(p.replace(\".value\", \"\"), /\\./)] = p.includes(\"opacity\") ? +value / 100 : value), this.view?.syncSize()), { init: true, signal: this.signal });\n // ---- Media Listeners\n this.media.on(\"intent.currentTextTrack\", this.handleCurrentTextTrackIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"intent.textVisible\", this.handleTextVisibleIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"state.currentTextTrack\", this.syncUI, { init: this.ctlr.payload.wired, signal: this.signal });\n this.media.on(\"state.textVisible\", this.handleTextVisibleState, { init: true, signal: this.signal });\n this.media.on(\"state.currentTime\", () => (this.view?.syncKaraoke(), this.secondaryViews.forEach((view) => view.syncKaraoke())), { init: this.ctlr.payload.wired, signal: this.signal });\n this.media.on(\"state.src\", () => ((this.state.secondaryTracks = []), (this.config.multiple = false)), { signal: this.signal });\n this.media.on(\"status.textTracks\", () => (this.syncTracks(), this.syncUI()), { signal: this.signal });\n this.media.on(\"status.activeCue\", this.handleActiveCueStatus, { init: this.ctlr.payload.wired, signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"captions\", { fn: () => (this.toggleVisible(), this.media.features.textVisible && this.ctlr.plug(\"settings.notifiers\")?.notify(\"captions\")), keyboard: { phase: \"keyup\" } });\n this.ctlr.registerAction(\"captionsFontSizeUp\", { fn: () => this.changeFontSize(this.ctlr.plug(\"settings.keys\")?.getModded(\"captionsFontSize\", \"\", this.config.font.size.skip) ?? this.config.font.size.skip), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontSizeDown\", { fn: () => this.changeFontSize(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"captionsFontSize\", \"\", this.config.font.size.skip) ?? this.config.font.size.skip)), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontFamily\", { fn: () => this.rotateProp(parseUIObj(this.config).font.family.values, \"captions.font.family.value\", false, true), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontWeight\", { fn: () => this.rotateProp(parseUIObj(this.config).font.weight.values, \"captions.font.weight.value\", false, true), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontVariant\", { fn: () => this.rotateProp(parseUIObj(this.config).font.variant.values, \"captions.font.variant.value\", false, true), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontOpacity\", { fn: () => this.rotateProp(parseUIObj(this.config).font.opacity.values, \"captions.font.opacity.value\"), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsBackgroundOpacity\", { fn: () => this.rotateProp(parseUIObj(this.config).background.opacity.values, \"captions.background.opacity.value\"), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsWindowOpacity\", { fn: () => this.rotateProp(parseUIObj(this.config).window.opacity.values, \"captions.window.opacity.value\"), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsCharacterEdgeStyle\", { fn: () => this.rotateProp(parseUIObj(this.config).characterEdgeStyle.values, \"captions.characterEdgeStyle.value\", false), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsTextAlignment\", { fn: () => this.rotateProp(parseUIObj(this.config).textAlignment.values, \"captions.textAlignment.value\", false), keyboard: { phase: \"keydown\" } });\n super.wire();\n }\n\n protected handleCurrentTextTrackIntent(e: REvent<CtlrMedia, \"intent.currentTextTrack\">): void {\n if (!this.ctlr.isNativeEl) return e.reject(this.name);\n this.media.tech.when(\"loadedMetadata\", e, () => {\n this.media.state.currentTextTrack = this.shadowCurrentIndex = e.value as number; // #VALIDATED: mediated for cast conformity; no-opy\n this.syncTracks();\n });\n e.resolve(this.name);\n }\n\n protected handleTextVisibleIntent(e: REvent<CtlrMedia, \"intent.textVisible\">): void {\n if (e.resolved) return;\n if (!this.media.features.activeCue) return e.reject(this.name); // this ain't no cue mega lib\n this.media.tech.when(\"loadedMetadata\", e, () => {\n if (e.value && this.media.status.textTracks.length && this.media.state.currentTextTrack === -1) silence(() => (this.media.intent.currentTextTrack = Math.max(0, getTrackIdx(this.media.element, \"Text\", this.media.state.tracks.find((t) => t.default)?.id, this.media.status.textTracks))));\n const cssPlug = this.ctlr.plug(\"settings.css\");\n if (cssPlug) (this.settings.css.currentCaptionsX = cssPlug._cache.currentCaptionsX!), (this.settings.css.currentCaptionsY = cssPlug._cache.currentCaptionsY!);\n this.media.state.textVisible = e.value;\n });\n e.resolve(this.name); // hid everytin already but need minors to shutup\n }\n\n protected handleTextVisibleState({ value }: REvent<CtlrMedia, \"state.textVisible\">): void {\n this.media.container.classList.toggle(\"tmg-media-captions\", this.canVisible && value);\n const track = this.media.status.textTracks[this.media.state.currentTextTrack]; // native, hls, dash compat\n value && track && this.iView?.preview(this.getPreviewTip(track));\n }\n\n protected handleActiveCueStatus({ value }: REvent<CtlrMedia, \"status.activeCue\">): void {\n !(!this.ctlr.isUIActive(\"captions\") && this.view?.isPreviewing()) && this.view?.render(value);\n }\n\n protected handleCueChange(e?: globalThis.Event | { target?: TextTrack }, track = e?.target as TextTrack | null): void {\n const idx = Array.prototype.indexOf.call(this.media.status.textTracks, track);\n track && idx !== -1 && idx !== this.media.state.currentTextTrack && this.secondaryViews.get(idx)?.render(track.activeCues?.[0] || null);\n }\n\n public toggleVisible(): void {\n if (!this.canVisible) return this.view?.preview(this.media.features.textTracks ? `No captions available for this ${this.media.type}` : `Captions not supported for this ${this.media.type}`);\n this.media.intent.textVisible = !this.media.state.textVisible;\n }\n\n public changeFontSize(value: number): void {\n const sign = value >= 0 ? \"+\" : \"-\";\n value = Math.abs(value);\n const size = Number(this.settings.css.captionsFontSize);\n switch (sign) {\n case \"-\":\n if (size > this.config.font.size.min) this.config.font.size.value = size - (size % value || value);\n break;\n default:\n if (size < this.config.font.size.max) this.config.font.size.value = size + (size % value ? size % value : value);\n }\n this.media.features.activeCue && this.view && this.ctlr.config.stall(this.view.preview), this.iView && this.ctlr.config.stall(() => this.iView!.isPreviewing() && this.iView!.preview(this.getPreviewTip()));\n }\n\n protected rotateProp(steps: PathValue<CtlrConfig[\"settings\"], (typeof ROTATE_PATHS)[number]>[], prop: (typeof ROTATE_PATHS)[number], numeric = true, rerender = false): void {\n if (!steps.length) return;\n const cssVal = this.settings.css[camelize(prop.replace(\".value\", \"\"), /\\./)];\n setPath(this.settings, prop, rotateAny((numeric ? Number : String)(prop.includes(\"opacity\") ? Number(cssVal) * 100 : cssVal), steps));\n rerender && this.media.features.activeCue && this.view && this.ctlr.config.stall(this.view.preview);\n }\n\n public syncUI(): void {\n this.media.container.classList.toggle(\"tmg-media-captions\", this.canVisible && this.media.state.textVisible);\n this.media.container.dataset.trackKind = this.getTrackKind();\n }\n\n public get canVisible(): boolean {\n return (this.media.features.textTracks && this.media.features.activeCue ? !!this.media.status.textTracks.length : !this.media.features.activeCue) && !!this.media.features.textVisible;\n }\n\n public getTrackKind(track = this.media.status.textTracks[this.media.state.currentTextTrack]): string {\n return (track?.kind ?? track?.type) || \"captions\";\n }\n\n public getPreviewTip(track = this.media.status.textTracks[this.media.state.currentTextTrack]): CueLike {\n return { text: `${track?.label ?? track?.name} ${this.getTrackKind(track)} \\n Click ⚙ for settings`, region: { viewportAnchorX: 10, viewportAnchorY: 20 } };\n }\n\n protected syncTracks(): void {\n const list = this.media.status.textTracks;\n if (!list) return;\n for (const [idx, view] of this.secondaryViews) {\n if (!this.config.multiple || !this.state.secondaryTracks.includes(idx)) {\n view.destroy(), this.secondaryViews.delete(idx);\n const track = list[idx];\n this.ctlr.isNativeEl && idx !== this.media.state.currentTextTrack && track && ((track.mode = \"disabled\"), track.removeEventListener(\"cuechange\", this.handleCueChange));\n }\n }\n if (!this.ctlr.isNativeEl) return;\n for (let i = 0, len = list.length; i < len; i++) {\n const isSecondary = this.config.multiple && this.state.secondaryTracks.includes(i);\n list[i].mode = i === this.media.state.currentTextTrack || isSecondary ? \"hidden\" : \"disabled\";\n if (isSecondary && !this.secondaryViews.has(i)) {\n const view = ComponentRegistry.init(\"captionsview\", this.ctlr, { secondaryOrder: this.secondaryViews.size + 1 });\n if (view) this.secondaryViews.set(i, view), list[i].addEventListener(\"cuechange\", this.handleCueChange, { signal: this.signal }), this.handleCueChange({ target: list[i] });\n }\n }\n }\n\n protected override registerMenu(items = MenuRegistry.get(\"settings.captions\")?.(this), menu = this.ctlr.plug(\"settings.settingsView\")?.menu): void {\n if (items && menu) menu.unregister(\"captions\"), Array.isArray(items) ? items.forEach((item) => menu.registerBefore(\"chapters\", item)) : menu.registerBefore(\"chapters\", items);\n }\n\n protected override onDestroy(): void {\n this.view?.destroy(), this.iView?.destroy();\n for (const view of this.secondaryViews.values()) view.destroy();\n this.secondaryViews.clear();\n const list = this.media.status.textTracks;\n if (list) for (let i = 0; i < list.length; i++) list[i].removeEventListener(\"cuechange\", this.handleCueChange);\n if (this.ctlr.DOM.captionsContainer === this.view?.element) this.ctlr.DOM.captionsContainer = null;\n super.onDestroy();\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.captions\": typeof CaptionsPlug;\n }\n interface ControllerDOMMap {\n captionsContainer?: HTMLDivElement | null;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n captions: CaptionsConfig;\n }\n}\n\ndeclare module \"@plugs/settings/css/types\" {\n interface CSSMap {\n captionsCharacterEdgeStyle: \"none\" | \"raised\" | \"depressed\" | \"outline\" | \"drop-shadow\";\n captionsTextAlignment: \"left\" | \"center\" | \"right\";\n }\n}\n","import { CastConfig } from \"./types\";\r\n\r\nexport const CAST_BUILD: CastConfig = { options: {} };\r\n","import { BasePlug } from \"../../base\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { loadResource } from \"@utils/dom\";\r\nimport { CastConfig } from \"./types\";\r\nimport { CAST_BUILD } from \"./build\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { CastPlaceholder } from \"@components/holders/castplaceholder\";\r\nimport { getMimeTypeFromExtension } from \"@utils/file\";\r\n\r\nexport class CastPlug extends BasePlug<CastConfig> {\r\n public static readonly plugName = \"cast\";\r\n public static readonly BUILD = CAST_BUILD;\r\n public remotePlayer: cast.framework.RemotePlayer | null = null;\r\n public remoteController: cast.framework.RemotePlayerController | null = null;\r\n public apiSetup = false;\r\n protected placeholder: CastPlaceholder | null = null;\r\n\r\n public override mount(): void {\r\n this.ctlr.payload.wired ? this.initApi() : this.ctlr.state.wonce(\"readyState\", this.initApi, { signal: this.signal }); // #HEAVY: waits for !lightState\r\n }\r\n protected async initApi(): Promise<void> {\r\n if (this.apiSetup) return;\r\n if (typeof cast === \"undefined\") {\r\n const prev = (window as any).__onGCastApiAvailable;\r\n ((window as any).__onGCastApiAvailable = (can: boolean) => (prev?.(can), can && \"cast\" in window && this.setupApi())), await loadResource(window.TMG_CAST_SENDER_SRC!, \"script\");\r\n } else this.setupApi();\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.cast ||= this.ctlr.isNativeEl && this.apiSetup), { init: true, signal: this.signal }); // no YT or Vimeo until d custom client\r\n // --------- Listeners\r\n this.media.on(\"intent.cast\", this.handleCastIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal });\r\n this.media.on(\"intent.paused\", this.handlePausedIntent, { capture: true, signal: this.signal });\r\n this.media.on(\"intent.currentTime\", this.handleCurrentTimeIntent, { capture: true, signal: this.signal });\r\n this.media.on(\"intent.volume\", this.handleVolumeIntent, { capture: true, signal: this.signal });\r\n this.media.on(\"intent.muted\", this.handleMutedIntent, { capture: true, signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"cast\", { fn: () => (this.media.intent.cast = !this.media.state.cast), keyboard: { phase: \"keyup\" } }), super.wire();\r\n }\r\n\r\n protected handleCastIntent(e: REvent<CtlrMedia, \"intent.cast\">): void {\r\n if (e.resolved || !this.apiSetup) return;\r\n const context = cast.framework.CastContext.getInstance(),\r\n active = this.ctlr.isUIActive(\"cast\");\r\n if (e.value && !active) {\r\n this.ctlr.plug(\"settings.metadata\")?.syncSession();\r\n context.requestSession().then(this.loadMediaSession).catch(this.ctlr.notice);\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"cast\"); // #STALLING: necessary optimistic distraction\r\n } else if (active) {\r\n context.endCurrentSession(true);\r\n this.media.container.classList.remove(\"tmg-media-cast\");\r\n this.media.state.cast = false;\r\n }\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handlePausedIntent(e: REvent<CtlrMedia, \"intent.paused\">): void {\r\n if (!this.media.state.cast || e.resolved) return;\r\n if (e.value !== this.remotePlayer!.isPaused) this.remoteController!.playOrPause();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handleCurrentTimeIntent(e: REvent<CtlrMedia, \"intent.currentTime\">): void {\r\n if (!this.media.state.cast || e.resolved) return;\r\n this.remotePlayer!.currentTime = e.value;\r\n this.remoteController!.seek();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handleVolumeIntent(e: REvent<CtlrMedia, \"intent.volume\">): void {\r\n if (!this.media.state.cast || e.resolved) return;\r\n this.remotePlayer!.volumeLevel = e.value / 100;\r\n this.remoteController!.setVolumeLevel();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handleMutedIntent(e: REvent<CtlrMedia, \"intent.muted\">): void {\r\n if (!this.media.state.cast || e.resolved) return;\r\n if (this.remotePlayer!.isMuted !== e.value) this.remoteController!.muteOrUnmute();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected setupApi(): void {\r\n if (!chrome.cast) return;\r\n const context = cast.framework.CastContext.getInstance();\r\n context.setOptions({ receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID, autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED, ...this.config.options });\r\n this.remotePlayer = new cast.framework.RemotePlayer();\r\n this.remoteController = new cast.framework.RemotePlayerController(this.remotePlayer);\r\n this.remoteController.addEventListener(cast.framework.RemotePlayerEventType.ANY_CHANGE, this.syncRemoteState);\r\n (this.placeholder = ComponentRegistry.init(\"castplaceholder\", this.ctlr))?.setup();\r\n this.media.features.cast = this.apiSetup = true; // Unlock the feature UI\r\n }\r\n\r\n protected async loadMediaSession(): Promise<void> {\r\n const session = cast.framework.CastContext.getInstance().getCurrentSession();\r\n if (!session) return;\r\n silence(() => (this.media.intent.paused = true)); // pause local playback to avoid double audio\r\n const textEl = this.placeholder?.el.querySelector(\"p\"),\r\n request = new chrome.cast.media.LoadRequest(new chrome.cast.media.MediaInfo(this.media.state.src, getMimeTypeFromExtension(this.media.state.src)));\r\n request.currentTime = this.media.state.currentTime;\r\n await session.loadMedia(request);\r\n if (textEl) textEl.textContent = `Casting to ${session.getCastDevice().friendlyName || \"External Display\"}`;\r\n this.media.container.classList.add(\"tmg-media-cast\");\r\n this.media.state.cast = true;\r\n // console.log(\"Media loaded to TV\", this.media.state.src, this.media.state.currentTime); // dev\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected syncRemoteState(event: cast.framework.RemotePlayerChangedEvent): void {\r\n const isConnected = this.remotePlayer!.isConnected;\r\n if (this.media.state.cast !== isConnected) this.media.state.cast = isConnected;\r\n if (!isConnected) return;\r\n switch (event.field) {\r\n case \"currentTime\":\r\n return void (this.media.state.currentTime = this.remotePlayer!.currentTime);\r\n case \"isPaused\":\r\n return void (this.media.state.paused = this.remotePlayer!.isPaused);\r\n case \"volumeLevel\":\r\n return void (this.media.state.volume = this.remotePlayer!.volumeLevel * 100);\r\n case \"isMuted\":\r\n return void (this.media.state.muted = this.remotePlayer!.isMuted);\r\n case \"duration\":\r\n return void (this.media.status.duration = this.remotePlayer!.duration);\r\n }\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.remoteController?.removeEventListener(cast.framework.RemotePlayerEventType.ANY_CHANGE, this.syncRemoteState);\r\n this.media.state.cast && cast.framework.CastContext.getInstance().endCurrentSession(true);\r\n this.placeholder?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.cast\": typeof CastPlug;\r\n }\r\n}\r\n","import { NOOP } from \"sia-reactor\";\r\nimport { parseRomanNum } from \"./num\";\r\nimport { mimeTypes, VIDEO_EXTENSIONS } from \"./match\";\r\n\r\n// File Size Formatting\r\nexport { formatSize } from \"@t007/utils\";\r\n\r\n// Extension Helpers\r\nexport function getExtension(fn: string): string {\r\n return fn.slice(fn.lastIndexOf(\".\") + 1).toLowerCase() ?? \"\";\r\n}\r\n\r\nexport function noExtension(fn: string, generic = false): string {\r\n return fn.replace(!generic ? VIDEO_EXTENSIONS : /(?:\\.[a-z0-9]{2,5})+$/i, \"\");\r\n}\r\n\r\n// MIME Type Resolution\r\nexport function getMimeTypeFromExtension(name: string) {\r\n return mimeTypes[getExtension(name)] || \"application/octet-stream\"; // Default to binary stream\r\n}\r\n\r\n// Sorters\r\nexport function smartFlatSort<F extends { name: string }>(files: F[], debug = false, stripExt = noExtension, log = debug ? (title: string, ...body: any[]) => console.log(`[Sorter][${title}]`, ...body) : NOOP, bCache = new Map(), kCache = new Map(), groups = new Map()) {\r\n debug && console.time(\"[Sorter]\"), log(\"Init\", `Sorting ${files.length} items...`);\r\n // Extracts the main series title + optional season\r\n function getNamePrefix(name: string, base = stripExt(name), match = base.match(/(.*?)(?:(?:s|season)[\\s\\-]?)(\\d+).*?(?:(?:e|ep|episode)[\\s\\-]?)(\\d+)?/i)) {\r\n // prettier-ignore\r\n return bCache.set(name, base), (match ? (match[1].replace(/[^a-z0-9]+/gi, \" \").trim().toLowerCase() + \" s\" + match[2].padStart(2, \"0\")) : base.replace(/(?:(?:e|ep|episode|part)[\\s\\-]?)\\d+/gi, \"\").replace(/[^a-z0-9]+/gi, \" \").trim().toLowerCase()) || \"unknown\";\r\n }\r\n // Extract episode key: season, episode number(s), or special flags\r\n function extractEpisodeKey(name: string, base = bCache.get(name).toLowerCase()) {\r\n // Match lazy formats like \"S02 - Episode 3\", \"S3 ep4\", \"S5E 7\" (not strict SxxEyy)\r\n const combo = base.match(/(?:(?:s|season)[\\s\\-]?)(\\d+).*?(?:(?:e|ep|episode)[\\s\\-]?)(\\d+)/);\r\n if (combo) return [parseInt(combo[1]), parseInt(combo[2])];\r\n // Match \"1x01\", \"5x12\", alternate style used by some encoders or fansubs\r\n const alt = base.match(/(\\d+)x(\\d+)/);\r\n if (alt) return [parseInt(alt[1]), parseInt(alt[2])];\r\n // Match Roman numerals like \"Season IV Episode IX\"\r\n const roman = base.match(/(?:(?:s|season)[\\s\\-]?)([ivxlcdm]+).*?(?:(?:e|ep|episode)[\\s\\-]?)([ivxlcdm]+)/i);\r\n if (roman) return [parseRomanNum(roman[1], true), parseRomanNum(roman[2], true)];\r\n // Match fallback single-episode formats like \"Ep12\", \"Episode 5\", \"E7\", \"Part 2\" without season info\r\n const loose = base.match(/(?:(?:e|ep|episode|part)[\\s\\-]?)(\\d+)/);\r\n if (loose) return [999, parseInt(loose[1])]; // Put these at the end with fake season 999\r\n // Totally unmatchable junk (e.g. \"Behind the Scenes\", \"Bonus Feature\")\r\n return [Infinity, Infinity]; // Hard fallback, gets sorted dead last\r\n }\r\n for (const file of files) {\r\n const key = getNamePrefix(file.name);\r\n let group = groups.get(key);\r\n log(\"Prefix\", `\"${file.name}\" -> \"${key}\"`), (group ?? (groups.set(key, (group = [])), group)).push(file);\r\n }\r\n const sortedFiles = [],\r\n byGroup = ([a]: [string, F[]], [b]: [string, F[]], diff = a === \"unknown\" ? 1 : b === \"unknown\" ? -1 : a.localeCompare(b)) => (log(\"Group Compare\", `[${a}] vs [${b}] = ${diff > 0 ? \"B first\" : diff < 0 ? \"A first\" : \"Tie\"}`), diff), // Sort groups alphabetically by their prefix\r\n getKey = (name: string, key = kCache.get(name)) => (key ? key : (kCache.set(name, (key = extractEpisodeKey(name))), key)),\r\n byEpisode = (a: F, b: F, ak = getKey(a.name), bk = getKey(b.name), diff = ak[0] !== bk[0] ? ak[0] - bk[0] : ak[1] - bk[1]) => (log(\"Episode Compare\", `[${ak}] vs [${bk}] = ${diff > 0 ? \"B first\" : diff < 0 ? \"A first\" : \"Tie\"} (\"${a.name}\" / \"${b.name}\")`), diff), // season | episode\r\n sortedGroups = (log(\"Groups\", `Identified ${groups.size} group(s)`, groups), [...groups.entries()].sort(byGroup)); // Sort groups alphabetically by their prefix\r\n for (const [, group] of sortedGroups) group.sort(byEpisode), sortedFiles.push(...group);\r\n return log(\"Done\", sortedFiles), debug && console.timeEnd(\"[Sorter]\"), sortedFiles;\r\n}\r\n","/*\r\n * Portions of this code are derived from react-player\r\n * https://github.com/cookpete/react-player\r\n * Licensed under the MIT License\r\n * Copyright (c) 2017 Pete Cook\r\n */\r\n\r\n// ===========================================================================\r\n// MEDIA EXTENSION MATCHERS\r\n// ===========================================================================\r\nexport const AUDIO_EXTENSIONS = /\\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx|flac|wma|opus|midi?)($|\\?)/i;\r\nexport const VIDEO_EXTENSIONS = /\\.(mp4|mkv|avi|mov|webm|mpg|mpeg|og[gv]|m4v|flv|wmv|3gp|3g2|ts)(#t=[,\\d+]+)?($|\\?)/i;\r\nexport const HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\r\nexport const DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\r\n\r\n// ===========================================================================\r\n// PLATFORM URL MATCHERS\r\n// ===========================================================================\r\n\r\n/** Match Mux m3u8 URLs without the extension so users can use hls.js with Mux */\r\nexport const MATCH_URL_MUX = /stream\\.mux\\.com\\/(?!\\w+\\.m3u8)(\\w+)/;\r\n\r\n/** Matches YouTube watch, embed, shorts, live, and nocookie URLs */\r\nexport const MATCH_URL_YOUTUBE = /(?:youtu\\.be\\/|youtube(?:-nocookie|education)?\\.com\\/(?:embed\\/|v\\/|watch\\/|watch\\?v=|watch\\?.+&v=|shorts\\/|live\\/))((\\w|-){11})|youtube\\.com\\/playlist\\?list=|youtube\\.com\\/user\\//;\r\n\r\n/** Matches Vimeo URLs, explicitly ignoring their progressive redirect links */\r\nexport const MATCH_URL_VIMEO = /vimeo\\.com\\/(?!progressive_redirect).+/;\r\n\r\n/** Matches Wistia embeds and medias */\r\nexport const MATCH_URL_WISTIA = /(?:wistia\\.(?:com|net)|wi\\.st)\\/(?:medias|embed)\\/(?:iframe\\/)?([^?]+)/;\r\n\r\n/** Matches Spotify open links */\r\nexport const MATCH_URL_SPOTIFY = /open\\.spotify\\.com\\/(\\w+)\\/(\\w+)/i;\r\n\r\n/** Matches Twitch streams and VODs */\r\nexport const MATCH_URL_TWITCH = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-zA-Z0-9_]+|(videos?\\/|\\?video=)\\d+)($|\\?)/;\r\n\r\n/** Matches TikTok video and share links */\r\nexport const MATCH_URL_TIKTOK = /tiktok\\.com\\/(?:player\\/v1\\/|share\\/video\\/|@[^/]+\\/video\\/)([0-9]+)/;\r\n\r\n// ===========================================================================\r\n// MIME TYPE DICTIONARY\r\n// ===========================================================================\r\n// prettier-ignore\r\nexport const mimeTypes: Record<string, string> = {\r\n // Video formats\r\n avi: \"video/x-msvideo\", mp4: \"video/mp4\", mkv: \"video/x-matroska\", mov: \"video/quicktime\", \r\n flv: \"video/x-flv\", webm: \"video/webm\", ogg: \"video/ogg\", ogv: \"video/ogg\", wmv: \"video/x-ms-wmv\", \r\n \"3gp\": \"video/3gpp\", \"3g2\": \"video/3gpp2\", mpeg: \"video/mpeg\", mpg: \"video/mpeg\", \r\n ts: \"video/mp2t\", m4v: \"video/x-m4v\", m3u8: \"application/vnd.apple.mpegurl\", mpd: \"application/dash+xml\",\r\n // Audio formats\r\n mp3: \"audio/mpeg\", wav: \"audio/wav\", oga: \"audio/ogg\", flac: \"audio/flac\", aac: \"audio/aac\", \r\n m4a: \"audio/mp4\", m4b: \"audio/mp4\", mp4a: \"audio/mp4\", wma: \"audio/x-ms-wma\", opus: \"audio/opus\", \r\n mid: \"audio/midi\", midi: \"audio/midi\", mpga: \"audio/mpeg\", mp2: \"audio/mpeg\", mp2a: \"audio/mpeg\", \r\n m2a: \"audio/mpeg\", m3a: \"audio/mpeg\", weba: \"audio/webm\", spx: \"audio/ogg\",\r\n // Image formats\r\n jpg: \"image/jpeg\", jpeg: \"image/jpeg\", png: \"image/png\", webp: \"image/webp\", gif: \"image/gif\", \r\n bmp: \"image/bmp\", svg: \"image/svg+xml\", tif: \"image/tiff\", tiff: \"image/tiff\", avif: \"image/avif\", \r\n ico: \"image/x-icon\", heic: \"image/heic\", heif: \"image/heif\",\r\n // Document formats\r\n pdf: \"application/pdf\", txt: \"text/plain\", md: \"text/markdown\", csv: \"text/csv\", \r\n json: \"application/json\", xml: \"application/xml\", html: \"text/html\", doc: \"application/msword\", \r\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\", \r\n xls: \"application/vnd.ms-excel\", xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", \r\n ppt: \"application/vnd.ms-powerpoint\", pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\", \r\n zip: \"application/zip\", rar: \"application/vnd.rar\", \"7z\": \"application/x-7z-compressed\",\r\n};\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { ControlPanelConfig, ControlPanelDraggable } from \"./types\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\n\r\nexport const ROWS_ARR = [1, 2, 3] as const;\r\n\r\nexport const CONTROLS = [\"expandminiplayer\", \"removeminiplayer\", \"meta\", \"timeline\", \"capture\", \"fullscreenorientation\", \"fullscreenlock\", \"backward10\", \"prev\", \"playpause\", \"next\", \"forward10\", \"brightness\", \"volume\", \"timeandduration\", \"spacer\", \"captions\", \"settings\", \"objectfit\", \"pictureinpicture\", \"theater\", \"fullscreen\", \"cast\", \"airplay\", \"chapter\"] as const;\r\n\r\nexport const BIG_CONTROLS = [\"bigprev\", \"bigplaypause\", \"bignext\"] as const;\r\n\r\nexport const CONTROL_PANEL_DRAGGABLE_BUILD: ControlPanelDraggable = [\"\", \"big\", \"wrapper\"];\r\n\r\nexport const CONTROL_PANEL_BUILD: DeepPartial<ControlPanelConfig> = {\r\n profile: true,\r\n title: true,\r\n artist: true,\r\n top: [\"expandminiplayer\", \"spacer\", \"meta\", \"spacer\", \"capture\", \"fullscreenlock\", \"airplay\", \"cast\", \"fullscreenorientation\", \"removeminiplayer\"],\r\n center: [\"bigprev\", \"bigplaypause\", \"bignext\"],\r\n bottom: {\r\n 1: [],\r\n 2: [\"spacer\", \"timeline\", \"spacer\"],\r\n 3: [...(!IS_MOBILE ? ([\"prev\", \"playpause\", \"next\"] as const) : []), \"brightness\", \"volume\", \"timeandduration\", \"chapter\", \"spacer\", \"captions\", \"settings\", \"objectfit\", \"pictureinpicture\", \"theater\", \"fullscreen\"] as const,\r\n },\r\n buffer: {\r\n value: \"eclipse\",\r\n options: [\r\n { value: \"eclipse\", display: \"Eclipse\" },\r\n { value: \"accent\", display: \"Accent\" },\r\n { value: false, display: \"Off\" },\r\n ]\r\n },\r\n timeline: {\r\n thumb: {\r\n value: true,\r\n options: [\r\n { value: \"auto\", display: \"Auto\" },\r\n { value: true, display: \"On\" },\r\n { value: false, display: \"Off\" },\r\n ]\r\n },\r\n previews: false,\r\n scrub: {\r\n sync: false,\r\n relative: !IS_MOBILE,\r\n cancel: {\r\n delta: 15,\r\n timeout: 2000,\r\n },\r\n },\r\n label: \"Media Timeline\",\r\n tooltip: false,\r\n autopause: true,\r\n compact: IS_MOBILE,\r\n bufferMarks: false,\r\n playedMarks: false,\r\n },\r\n progressBar: IS_MOBILE,\r\n // draggable: CONTROL_PANEL_DRAGGABLE_BUILD,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport { CONTROL_PANEL_BUILD } from \"./build\";\r\nimport type { ControlPanelConfig, ControlPanelBottomTuple, ControlPanelSlots, ControlPanelShells, AnyControl, PanelSlot, PanelShell } from \"./types\";\r\nimport { ControlPanelDraggablePin } from \"./draggable\";\r\nimport { ROWS_ARR } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport type { ComponentRegistryMap } from \"@defs/registries\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { BaseComponent } from \"@components/base\";\r\nimport { ComponentRegistry, PinRegistry } from \"@core/registries\";\r\nimport { createEl, createListRenderer, observeResize } from \"@utils/dom\";\r\nimport { getPanelSplitCtrls, isBool, parsePanelBottomObj } from \"@utils/obj\";\r\nimport { initScrollAssist, removeScrollAssist } from \"@t007/utils/hooks/vanilla\";\r\nimport { fanout } from \"sia-reactor/utils\";\r\n\r\nexport class ControlPanelPlug extends BasePlug<ControlPanelConfig> {\r\n public static readonly plugName = \"controlPanel\";\r\n public static readonly BUILD = CONTROL_PANEL_BUILD;\r\n public controls = new Map<string, BaseComponent<any, any>>();\r\n public draggable?: ControlPanelDraggablePin;\r\n public zoneEls!: HTMLElement[];\r\n public shells!: ControlPanelShells;\r\n public slots!: ControlPanelSlots;\r\n protected slotters = new WeakMap<HTMLElement, ReturnType<typeof createListRenderer<string>>>();\r\n protected wratters = new WeakMap<HTMLElement, ReturnType<typeof createListRenderer<PanelSlot>>>();\r\n protected scrollers: HTMLElement[] = [];\r\n protected topWrapper!: HTMLElement;\r\n protected bigWrapper!: HTMLElement;\r\n protected bottomWrapper!: HTMLElement;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.controlPanel) {\r\n super(ctlr, config);\r\n const Pin = PinRegistry.get(\"controlPanel.draggable\");\r\n if (Pin) this.draggable = new Pin(this.ctlr, this.config.draggable);\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.ctlr.DOM.topControlsWrapper = this.topWrapper = createEl(\"div\", { className: \"tmg-media-top-controls-wrapper tmg-media-apt-controls-wrapper\" }, { dropZone: \"\", dragId: \"wrapper\" });\r\n this.ctlr.DOM.bigControlsWrapper = this.bigWrapper = createEl(\"div\", { className: \"tmg-media-big-controls-wrapper\" }, { dropZone: \"\", dragId: \"big\" });\r\n this.ctlr.DOM.bottomControlsWrapper = this.bottomWrapper = createEl(\"div\", { className: \"tmg-media-bottom-controls-wrapper\" });\r\n this.shells = { top: {}, center: {}, bottom: { 1: {}, 2: {}, 3: {} } } as ControlPanelShells;\r\n this.shells.top = { left: this.buildShell(\"left\"), center: this.buildShell(\"center\"), right: this.buildShell(\"right\") };\r\n this.shells.center = { zone: this.bigWrapper, cover: createEl(\"div\", { className: \"tmg-media-big-controls-wrapper-cover\" }) };\r\n for (const i of ROWS_ARR) this.shells.bottom[i] = { left: this.buildShell(\"left\"), center: this.buildShell(\"center\"), right: this.buildShell(\"right\") };\r\n this.slots = { top: {}, center: this.shells.center, bottom: { 1: {}, 2: {}, 3: {} } } as ControlPanelSlots;\r\n this.zoneEls = [...Object.values(this.shells.top), ...Object.values(this.shells.bottom).map((v) => Object.values(v))].flat().map((w) => w.zone);\r\n // DOM Injection\r\n this.shells.center.cover.append(this.shells.center.zone);\r\n for (const i of ROWS_ARR) this.bottomWrapper.append(createEl(\"div\", { className: `tmg-media-bottom-sub-controls-wrapper tmg-media-bottom-${i}-sub-controls-wrapper tmg-media-apt-controls-wrapper` }, { dropZone: \"\", dragId: \"wrapper\" }));\r\n this.ctlr.DOM.controlsContainer?.append(this.topWrapper, this.shells.center.cover, this.bottomWrapper);\r\n // DOM! -> Ctlr Config Setters\r\n this.ctlr.config.set(\"settings.controlPanel.bottom\", (v) => parsePanelBottomObj(v), { init: true, signal: this.signal });\r\n // DOM! -> Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.controlPanel.top\", this.handleTop, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.center\", this.handleCenter, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.bottom\", this.handleBottom, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.buffer.value\", this.handleBuffer, { init: true, signal: this.signal });\r\n // Utility Injection\r\n this.draggable?.mount?.();\r\n }\r\n public override unmount(): void {\r\n for (const w of [this.topWrapper, this.bigWrapper.parentElement, this.bottomWrapper]) w?.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.controlPanel.timeline.thumb.value\", ({ value }) => (this.media.container.dataset.timelineThumb = String(value)), { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.timeline\", (e, comp = this.comp(\"timeline\")) => comp && fanout(comp.config, e.currentTarget.value), { signal: this.signal }); // #STABLE: snubs unchanged writes\r\n this.ctlr.config.on(\"settings.controlPanel.progressBar\", ({ value }) => this.media.container.classList.toggle(\"tmg-media-progress-bar\", value), { init: true, signal: this.signal });\r\n // Utility Injection\r\n this.draggable?.wire();\r\n // Post Wiring\r\n this.initScrollAndResize(), super.wire();\r\n }\r\n\r\n protected handleTop({ currentTarget: { value } }: REvent<CtlrConfig, \"settings.controlPanel.top\">): void {\r\n if (!value || isBool(value)) return;\r\n const { left, center, right } = getPanelSplitCtrls(value as AnyControl[]);\r\n this.fillWrapper(this.topWrapper, [(this.slots.top.left = this.getSlot(left, this.shells.top.left)), (this.slots.top.center = this.getSlot(center, this.shells.top.center)), (this.slots.top.right = this.getSlot(right, this.shells.top.right))]);\r\n this.fillSlot(this.slots.top.left, left), this.fillSlot(this.slots.top.center, center), this.fillSlot(this.slots.top.right, right), this.ctlr.payload.wired && this.config.draggable && this.draggable?.setEventListeners(\"add\");\r\n }\r\n\r\n protected handleCenter({ currentTarget: { value } }: REvent<CtlrConfig, \"settings.controlPanel.center\">): void {\r\n value && !isBool(value) && this.fillSlot(this.slots.center, value), this.ctlr.payload.wired && this.config.draggable && this.draggable?.setEventListeners(\"add\");\r\n }\r\n\r\n protected handleBottom({ currentTarget: { value } }: REvent<CtlrConfig, \"settings.controlPanel.bottom\">): void {\r\n if (!value || isBool(value)) return;\r\n for (const i of ROWS_ARR) {\r\n const { left, center, right } = getPanelSplitCtrls((value as ControlPanelBottomTuple)[i]);\r\n this.fillWrapper(this.bottomWrapper.children[i - 1] as HTMLElement, [(this.slots.bottom[i].left = this.getSlot(left, this.shells.bottom[i].left)), (this.slots.bottom[i].center = this.getSlot(center, this.shells.bottom[i].center)), (this.slots.bottom[i].right = this.getSlot(right, this.shells.bottom[i].right))]);\r\n this.fillSlot(this.slots.bottom[i].left, left), this.fillSlot(this.slots.bottom[i].center, center), this.fillSlot(this.slots.bottom[i].right, right);\r\n }\r\n this.ctlr.payload.wired && this.config.draggable && this.draggable?.setEventListeners(\"add\");\r\n }\r\n\r\n protected handleBuffer({ value }: REvent<CtlrConfig, \"settings.controlPanel.buffer.value\">): void {\r\n if (value && !this.controls.has(\"buffer\")) this.initComp(\"buffer\");\r\n this.media.container.dataset.buffer = String(value);\r\n }\r\n\r\n public initComp<K extends keyof ComponentRegistryMap>(name: K, comp?: InstanceType<ComponentRegistryMap[K]>): InstanceType<ComponentRegistryMap[K]> | undefined;\r\n public initComp<T extends BaseComponent = BaseComponent>(name: string, comp?: T): T | undefined;\r\n public initComp(name: string, comp = ComponentRegistry.init(name, this.ctlr, (this.config as any)[name])) {\r\n return comp ? (this.controls.set(name, comp), comp) : undefined;\r\n }\r\n\r\n public comp<K extends keyof ComponentRegistryMap>(name: K): InstanceType<ComponentRegistryMap[K]> | undefined;\r\n public comp<T extends BaseComponent = BaseComponent>(name: string): T | undefined;\r\n public comp(name: string): BaseComponent | undefined {\r\n return this.controls.get(name);\r\n }\r\n public compEl<K extends keyof ComponentRegistryMap>(name: K): InstanceType<ComponentRegistryMap[K]>[\"element\"] | undefined;\r\n public compEl<T extends BaseComponent = BaseComponent>(name: string): T[\"element\"] | undefined;\r\n public compEl(name: string): HTMLElement | undefined {\r\n return this.controls.get(name)?.element;\r\n }\r\n\r\n public getSlot(comps: AnyControl[], fallback: PanelShell): PanelSlot {\r\n return comps.length === 1 ? (comps.includes(\"meta\") ? (this.comp(\"meta\") ?? this.initComp(\"meta\"))?.element ?? fallback : comps.includes(\"timeline\") ? (this.comp(\"timeline\") ?? this.initComp(\"timeline\"))?.element ?? fallback : fallback) : fallback;\r\n }\r\n\r\n public fillSlot(slot: PanelSlot, comps: AnyControl[]): void {\r\n if (slot instanceof HTMLElement || !slot.zone) return;\r\n let render = this.slotters.get(slot.zone); // slot.zone.innerHTML = \"\"; for (const id of comps) slot.zone.append((this.comp(id) ?? this.initComp(id))?.element ?? \"\");\r\n !render && this.slotters.set(slot.zone, (render = createListRenderer({ container: slot.zone, getKey: (id) => id, createNode: (id) => (this.comp(id) ?? this.initComp(id))?.element })));\r\n render(comps), this.handleCompsView(slot.zone);\r\n }\r\n\r\n public fillWrapper(wrapper: HTMLElement, slots: PanelSlot[]): void {\r\n let render = this.wratters.get(wrapper); // wrapper.innerHTML = \"\"; wrapper.append(...slots.map((slot) => (slot instanceof HTMLElement ? slot : slot.cover ?? slot.zone)));\r\n !render && this.wratters.set(wrapper, (render = createListRenderer({ container: wrapper, getKey: (slot) => (\"cover\" in slot ? slot.cover.dataset.shellId! : slot.dataset.controlId!), createNode: (slot) => (slot instanceof HTMLElement ? slot : slot.cover ?? slot.zone) })));\r\n render(slots, false);\r\n }\r\n\r\n public buildShell(side: string): PanelShell {\r\n const zone = createEl(\"div\", { className: `tmg-media-side-controls-wrapper tmg-media-${side}-side-controls-wrapper` }, { dropZone: \"\", shellId: side, scroller: side === \"right\" ? \"reverse\" : \"\" }),\r\n cover = createEl(\"div\", { className: `tmg-media-side-controls-wrapper-cover tmg-media-${side}-side-controls-wrapper-cover` }, { shellId: side });\r\n return cover.append(zone), { cover, zone };\r\n }\r\n\r\n protected initScrollAndResize(): void {\r\n for (const el of [...this.zoneEls, this.shells.center.zone]) {\r\n this.handleCompsView(el);\r\n this.scrollers.push((initScrollAssist(el, { pxPerSecond: el.dataset.dragId === \"big\" ? 120 : 60 }), el));\r\n observeResize(el, () => this.handleCompsView(el), this.signal);\r\n el.addEventListener(\"scroll\", this.handleDirtyScroll, { passive: true, signal: this.signal });\r\n }\r\n }\r\n public handleDirtyScroll(e: globalThis.Event): void {\r\n const el = e.currentTarget as HTMLElement;\r\n if (el.scrollLeft > 0) el.dataset.hasScrolled = \"true\";\r\n el.dataset.resetScrolled = String(el.scrollLeft === (el.dataset.scroller === \"reverse\" ? el.scrollWidth - el.clientWidth : 0));\r\n }\r\n\r\n public handleCompsView(w: HTMLElement): void {\r\n if (!w.isConnected) return;\r\n let spacer: HTMLElement | undefined,\r\n c: HTMLElement | null = w.firstElementChild as HTMLElement | null;\r\n do {\r\n c?.setAttribute(\"data-displayed\", getComputedStyle(c).display !== \"none\" ? \"true\" : \"false\");\r\n c?.setAttribute(\"data-spacer\", \"false\");\r\n if (c?.dataset.displayed === \"true\" && !spacer) spacer = c;\r\n } while ((c = (c?.nextElementSibling ?? null) as HTMLElement | null));\r\n this.settings.css.currentTopWrapperHeight = `${this.topWrapper.offsetHeight}px`;\r\n this.settings.css.currentBottomWrapperHeight = `${this.bottomWrapper.offsetHeight}px`;\r\n if (w.dataset.scroller !== \"reverse\") return;\r\n spacer?.setAttribute(\"data-spacer\", \"true\");\r\n if (w.dataset.resetScrolled === \"true\") w.dataset.hasScrolled = \"false\";\r\n if (w.dataset.hasScrolled === \"true\" || w.scrollWidth <= w.clientWidth || w.scrollLeft === w.scrollWidth - w.clientWidth) return void (w.scrollWidth <= w.clientWidth && (w.dataset.hasScrolled = \"false\"));\r\n w.addEventListener(\"scroll\", () => (w.dataset.hasScrolled = \"false\"), { once: true, signal: this.signal });\r\n w.scrollLeft = w.scrollWidth - w.clientWidth;\r\n }\r\n\r\n protected override onDestroy(): void {\r\n for (const scroller of this.scrollers) removeScrollAssist(scroller);\r\n this.draggable?.destroy();\r\n for (const control of this.controls.values()) control.destroy();\r\n super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\nexport * from \"./draggable\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.controlPanel\": typeof ControlPanelPlug;\r\n }\r\n interface ControllerDOMMap {\r\n topControlsWrapper?: HTMLDivElement;\r\n bigControlsWrapper?: HTMLDivElement;\r\n bottomControlsWrapper?: HTMLDivElement;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n controlPanel: ControlPanelConfig;\r\n }\r\n}\r\n","import { BasePin } from \"../../base\";\r\nimport { CONTROL_PANEL_DRAGGABLE_BUILD } from \"./build\";\r\nimport { ControlPanelPlug } from \"./index\";\r\nimport { getPath, setPath } from \"sia-reactor/utils\";\r\nimport { getElSiblingAt } from \"@utils/dom\";\r\nimport { limited, setTimeout, requestAnimationFrame, mockAsync } from \"@utils/fn\";\r\nimport { inBoolArrOpt, getPanelLocation } from \"@utils/obj\";\r\nimport type { ControlPanelDraggable, PanelShell, PanelSlot, AnyControl, ControlPanelShells } from \"./types\";\r\nimport { Paths } from \"sia-reactor\";\r\nimport { tutorialOpts } from \"../toasts\";\r\n\r\nexport class ControlPanelDraggablePin extends BasePin<ControlPanelPlug, ControlPanelDraggable> {\r\n public static readonly pinName = \"draggable\";\r\n public static get Plug() {\r\n return ControlPanelPlug;\r\n }\r\n public static readonly BUILD = CONTROL_PANEL_DRAGGABLE_BUILD;\r\n protected draggingEl: HTMLElement | null = null;\r\n protected replaced: { target: HTMLElement; child: HTMLElement } | null = null;\r\n protected safeTimeoutId = -1;\r\n\r\n public override wire(): void {\r\n this.ctlr.config.on(\"settings.controlPanel.draggable\", ({ value }) => this.setEventListeners(value ? \"add\" : \"remove\"), { init: true, signal: this.signal });\r\n }\r\n\r\n public setEventListeners(action: \"add\" | \"remove\" = this.config ? \"add\" : \"remove\"): void {\r\n for (const c of this.ctlr.queryDOM(\"[data-draggable-control]\", true)) {\r\n c.dataset.dragId = c.dataset.dragId ?? \"\";\r\n const act = !inBoolArrOpt(this.config, c.dataset.dragId) ? \"remove\" : action;\r\n c.dataset.draggableControl = String((c.draggable = act === \"add\"));\r\n c[`${act as \"add\"}EventListener`](\"dragstart\", this.handleDragStart, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"drag\", this.handleDrag, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"dragend\", this.handleDragEnd, { signal: this.signal });\r\n }\r\n for (const c of [...this.ctlr.queryDOM(\"[data-drop-zone][data-drag-id]\", true), ...this.plug.zoneEls]) {\r\n c.dataset.dragId = c.dataset.dragId ?? \"\";\r\n const act = !inBoolArrOpt(this.config, c.dataset.dragId) ? \"remove\" : action;\r\n c.dataset.dropZone = String(act === \"add\");\r\n c[`${act as \"add\"}EventListener`](\"dragenter\", this.handleDragEnter, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"dragover\", this.handleDragOver, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"drop\", this.handleDragLeave, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"dragleave\", this.handleDragLeave, { signal: this.signal });\r\n }\r\n }\r\n\r\n protected handleDragStart(e: DragEvent): void {\r\n const { target: t, dataTransfer } = e as DragEvent & { target: HTMLElement };\r\n if (!t?.tagName || t.dataset.draggableControl !== \"true\") return;\r\n if (t.matches(\":has(:is(input,[role='slider']):is(:hover, :active))\")) return e.preventDefault();\r\n dataTransfer!.effectAllowed = \"move\";\r\n this.draggingEl = t;\r\n requestAnimationFrame(() => (t.classList.add(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.add(\"tmg-media-control-dragging\")), this.signal);\r\n this.safeTimeoutId = setTimeout(() => (t.classList.remove(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.remove(\"tmg-media-control-dragging\")), 1000, this.signal);\r\n if (t.dataset.dragId !== \"wrapper\" || t.parentElement?.dataset.dragId !== \"wrapper\") return;\r\n const { path, shell } = this.getShellPath(t, true);\r\n setPath(this.plug.slots, path, shell);\r\n this.replaced = { target: t.parentElement!, child: shell.cover };\r\n }\r\n\r\n protected handleDrag(): void {\r\n clearTimeout(this.safeTimeoutId);\r\n }\r\n\r\n protected handleDragEnd(e: DragEvent, t = e.target as HTMLElement): void {\r\n if (!t?.tagName) return;\r\n t.classList.remove(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.remove(\"tmg-media-control-dragging\");\r\n this.replaced = this.draggingEl = null;\r\n if (t.dataset.dragId === \"wrapper\" && t.parentElement?.dataset.dragId === \"wrapper\") setPath(this.plug.slots, this.getShellPath(t), t);\r\n this.syncConfig(), this.teachBasics(t.dataset.controlId as any);\r\n }\r\n\r\n protected handleDragEnter(e: DragEvent): void {\r\n !this.noDropOff(e.target as HTMLElement) && this.draggingEl && (e.target as HTMLElement).classList.add(\"tmg-media-dragover\");\r\n }\r\n\r\n protected handleDragOver(e: DragEvent): void {\r\n const { target: t, clientX: x, dataTransfer } = e as DragEvent & { target: HTMLElement };\r\n if (this.noDropOff(t)) return;\r\n e.preventDefault();\r\n if (dataTransfer) dataTransfer.dropEffect = \"move\";\r\n this.ctlr.throttle(\r\n \"dragOver\",\r\n () => {\r\n if (t.dataset.dragId === \"wrapper\") {\r\n const atWrapper = getElSiblingAt(x, \"x\", t.querySelectorAll<HTMLElement>('.tmg-media-side-controls-wrapper-cover:has([data-drop-zone=\"true\"][data-drag-id=\"\"]:empty)'), \"at\");\r\n if (!atWrapper) return;\r\n this.replaced?.target.replaceChild(this.replaced.child, this.draggingEl!);\r\n this.replaced = { target: t, child: atWrapper };\r\n return t.replaceChild(this.draggingEl!, atWrapper);\r\n }\r\n const afterCtrl = getElSiblingAt(x, \"x\", t.querySelectorAll<HTMLElement>(\"[draggable=true]:not(.tmg-media-control-dragging)\"));\r\n afterCtrl ? t.insertBefore(this.draggingEl!, afterCtrl) : t.append(this.draggingEl!);\r\n if (!t.dataset.dragId) for (const el of this.plug.zoneEls) this.plug.handleCompsView(el);\r\n },\r\n 500,\r\n false\r\n );\r\n }\r\n\r\n protected handleDragLeave(e: DragEvent): void {\r\n !this.noDropOff(e.target as HTMLElement) && (e.target as HTMLElement).classList.remove(\"tmg-media-dragover\");\r\n }\r\n\r\n protected noDropOff(t: HTMLElement, drop = this.draggingEl): boolean {\r\n return !drop?.tagName || t.dataset.dropZone !== \"true\" || (t.dataset.dragId !== drop.dataset.dragId && (t.dataset.dragId === \"wrapper\" || drop.dataset.dragId === \"wrapper\"));\r\n }\r\n\r\n protected getShellPath(target: HTMLElement, both?: false): Paths<ControlPanelShells>;\r\n protected getShellPath(target: HTMLElement, both?: true): { path: Paths<ControlPanelShells>; shell: PanelShell };\r\n protected getShellPath(target: HTMLElement, both = false): string | { path: string; shell: PanelShell } {\r\n let key = \"\";\r\n const pos = ({ 0: \"left\", 1: \"center\", 2: \"right\" } as const)[[...target.parentElement!.children].indexOf(target) as 0 | 1 | 2],\r\n cws = this.ctlr.queryDOM(\".tmg-media-top-controls-wrapper, .tmg-media-bottom-sub-controls-wrapper\", true);\r\n cws.forEach((w, i) => w.contains(target) && (key = ({ 0: \"top.\", 1: \"bottom.1.\", 2: \"bottom.2.\", 3: \"bottom.3.\" } as const)[i as 0 | 1 | 2 | 3]));\r\n return both ? { path: key + pos, shell: getPath(this.plug.shells as any, key + pos) } : key + pos;\r\n }\r\n\r\n public syncConfig(): void {\r\n const id = (el: HTMLElement) => el.dataset.controlId,\r\n derive = (slot: PanelSlot, center = false) => [center ? \"spacer\" : \"\", ...(slot instanceof HTMLElement ? [id(slot)] : Array.from(slot.zone.children as HTMLCollectionOf<HTMLElement>, id)), center && (slot instanceof HTMLElement || slot.zone.children.length) ? \"spacer\" : \"\"].filter(Boolean) as AnyControl[];\r\n this.settings.controlPanel.top = [...derive(this.plug.slots.top.left), ...derive(this.plug.slots.top.center, true), ...derive(this.plug.slots.top.right)];\r\n this.settings.controlPanel.center = derive(this.plug.shells.center);\r\n this.settings.controlPanel.bottom = { 1: [...derive(this.plug.slots.bottom[1].left), ...derive(this.plug.slots.bottom[1].center, true), ...derive(this.plug.slots.bottom[1].right)], 2: [...derive(this.plug.slots.bottom[2].left), ...derive(this.plug.slots.bottom[2].center, true), ...derive(this.plug.slots.bottom[2].right)], 3: [...derive(this.plug.slots.bottom[3].left), ...derive(this.plug.slots.bottom[3].center, true), ...derive(this.plug.slots.bottom[3].right)] };\r\n }\r\n\r\n protected teachBasics = limited(\r\n async (id: AnyControl = \"meta\", toast = this.ctlr.plug(\"settings.toasts\")?.toast) => {\r\n if (!toast) return;\r\n const el = this.ctlr.queryDOM(`[data-control-id=\"meta\"]`, true)[0] as HTMLElement,\r\n loc = getPanelLocation(this.ctlr._build.settings.controlPanel, \"meta\"),\r\n pos = (p: string, z: string) => (p === \"center\" ? \"center-center\" : (`${p.startsWith(\"top\") ? \"top\" : \"bottom\"}-${z === \"left\" ? \"left\" : z === \"right\" ? \"right\" : \"center\"}` as any)),\r\n startPos = pos(loc.path, loc.zone),\r\n emptyZones: { pos: string; zone: HTMLElement }[] = [],\r\n cleanup = () => (el?.classList.remove(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.remove(\"tmg-media-control-dragging\"), emptyZones.forEach((x) => x.zone.classList.remove(\"tmg-media-dragover\")), this.setEventListeners()),\r\n highlightZone = (z?: HTMLElement) => toast.isActive(tId) && (emptyZones.forEach((x) => x.zone.classList.remove(\"tmg-media-dragover\")), z?.classList.add(\"tmg-media-dragover\"));\r\n for (const r of [\"top\", \"bottom.1\", \"bottom.2\", \"bottom.3\"])\r\n for (const z of [\"left\", \"center\", \"right\"]) {\r\n const row = r === \"top\" ? this.plug.slots.top : this.plug.slots.bottom[Number(r.split(\".\")[1]) as 1 | 2 | 3],\r\n slot = row[z as \"left\" | \"center\" | \"right\"];\r\n if (!(slot instanceof HTMLElement) && slot.zone && !slot.zone.querySelector('[data-control-id]:not([data-control-id=\"spacer\"])') && pos(r, z) !== startPos) emptyZones.push({ pos: pos(r, z), zone: slot.zone });\r\n }\r\n this.setEventListeners(\"remove\"), el?.classList.add(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.add(\"tmg-media-control-dragging\"), this.ctlr.plug(\"settings.overlay\")?.show();\r\n const tId = toast(`Did you know you can drag the <b>Title</b> around${id !== \"meta\" ? \" too\" : \"\"}?`, { ...tutorialOpts(() => (this.teachBasics.block(), toast.dismiss(tId))), autoClose: false, onClose: cleanup, signal: this.signal });\r\n await mockAsync(3500);\r\n if (!toast.isActive(tId)) return;\r\n toast(`You can move it from here...`, { id: tId, position: startPos });\r\n if (emptyZones.length) {\r\n await mockAsync(2500);\r\n if (!toast.isActive(tId)) return;\r\n highlightZone(emptyZones[0].zone), toast(`...to an empty space like here!`, { id: tId, position: emptyZones[0].pos });\r\n for (let i = 1; i < emptyZones.length; i++) await mockAsync(2000), toast.isActive(tId) && (highlightZone(emptyZones[i].zone), toast(`...or here!`, { id: tId, position: emptyZones[i].pos }));\r\n }\r\n await mockAsync(emptyZones.length ? 2000 : 2500);\r\n if (toast.isActive(tId)) highlightZone(), toast(`Try dragging it to an empty space now!`, { id: tId, position: \"center-center\", autoClose: 3500 }), cleanup();\r\n },\r\n { key: \"tmg_cp_tut_1\", maxTimes: 5 }\r\n );\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"controlPanel.draggable\": typeof ControlPanelDraggablePin;\r\n }\r\n}\r\n","import { ToastsConfig } from \"./types\";\r\n\r\nexport const TOASTS_BUILD = {\r\n disabled: false,\r\n limit: 7,\r\n position: \"bottom-left\",\r\n hideProgressBar: true,\r\n closeButton: false,\r\n animation: \"slide-up\",\r\n dragToCloseDir: \"x||y\",\r\n} satisfies ToastsConfig;\r\n","import { BasePlug } from \"../../base\";\r\nimport type { ToastsConfig, ToastReminder, ToastsState } from \"./types\";\r\nimport { TOASTS_BUILD } from \"./build\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { Controller } from \"@core/controller\";\r\nimport { setTimeout } from \"sia-reactor/utils\";\r\nimport { ToastOptions } from \"@t007/toast\";\r\nimport { NOOP } from \"sia-reactor\";\r\n\r\nexport class ToastsPlug extends BasePlug<ToastsConfig, ToastsState> {\r\n public static readonly plugName = \"toasts\";\r\n public static readonly BUILD = TOASTS_BUILD;\r\n public container?: HTMLElement;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.toasts) {\r\n super(ctlr, config, { reminders: [] });\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.toasts.disabled\", ({ value }) => value && t007.toast?.dismissAll(this.ctlr.config.id), { signal: this.signal });\r\n this.ctlr.config.on(\"settings.toasts\", ({ type, target: { path, key, value } }) => type === \"update\" && !/disabled/.test(path) && t007.toast?.doForAll(\"update\", { [key]: value }, this.ctlr.config.id), { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n public override mount(): void {\r\n this.container = createEl(\"div\", { className: \"tmg-media-toasts-container\" });\r\n this.media.container.append(this.container);\r\n }\r\n public override unmount(): void {\r\n this.container?.remove();\r\n }\r\n\r\n public get toast() {\r\n if (!this.config || this.config.disabled || !t007.toaster) return null; // after the nuke, ctlr might need me for errors but one of use is the wiser\r\n return t007.toaster({ groupId: this.ctlr.config.id, rootElement: this.container || this.media.container, signal: this.signal, ...this.config });\r\n }\r\n\r\n public addReminder(opts: Omit<ToastReminder, \"id\" | \"timeoutId\">): void {\r\n if (!opts.message) return;\r\n const id = Date.now().toString(),\r\n reminder = { id, ...opts, timeoutId: 0 } as ToastReminder;\r\n if (!opts.delay) return this.triggerReminder(id, reminder);\r\n reminder.timeoutId = setTimeout(() => this.triggerReminder(id), opts.delay, this.signal);\r\n this.state.reminders.push(reminder);\r\n }\r\n public removeReminder(id: string): void {\r\n const idx = this.state.reminders.findIndex((r) => r.id === id);\r\n if (idx !== -1) clearTimeout(this.state.reminders[idx].timeoutId), this.state.reminders.splice(idx, 1);\r\n }\r\n public triggerReminder(id: string, temp?: ToastReminder): void {\r\n const r = temp || this.state.reminders.find((x) => x.id === id);\r\n if (!r) return;\r\n this.removeReminder(id);\r\n if (r.actionId) this.ctlr.runAction(r.actionId);\r\n const { id: _i, message: _m, delay: _d, actionId: _a, timeoutId: _t, autoClose, ...opts } = r as any;\r\n this.toast?.(r.message, { ...Object.fromEntries(Object.entries(opts).filter(([, v]) => v !== undefined)) }), this.ctlr.plug(\"settings.settingsView\")?.menu.syncUI();\r\n }\r\n}\r\n\r\nexport const tutorialOpts = (onGotIt: () => void = NOOP): Partial<ToastOptions> => ({ type: \"info\", icon: \"💡\", position: \"center-center\", closeButton: true, hideProgressBar: false, animation: \"fade\", actions: { \"Got it!\": onGotIt } });\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.toasts\": typeof ToastsPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n toasts: ToastsConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { CssConfig } from \"./types\";\r\n\r\nexport const CSS_BUILD = {\r\n syncWithMedia: {},\r\n} as CssConfig;\r\n","import { BasePlug } from \"../../base\";\r\nimport type { CssConfig } from \"./types\";\r\nimport { CSS_BUILD } from \"./build\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { uncamelize } from \"@utils/str\";\r\n\r\nexport class CSSPlug extends BasePlug<CssConfig> {\r\n public static readonly plugName = \"css\";\r\n public static readonly BUILD = CSS_BUILD;\r\n public classKeys: string[] = [\"captionsCharacterEdgeStyle\", \"captionsTextAlignment\"]; // #DEFAULT: build privilege\r\n public _cache: Record<string, string | number> = {};\r\n\r\n public override wire(): void {\r\n // Variables Assignment\r\n const entries = Object.entries(this.config);\r\n this.settings.css.altImgUrl = `url(${window.TMG_MEDIA_ALT_IMG_SRC})`;\r\n // Blackbox Handlers\r\n this.ctlr.config.get(\"*\", (val, { target: { key, path } }: any) => (!path.startsWith(\"settings.css.\") || banRgx.test(path) ? val : ((val = this.get(key)), (this._cache[key] ||= val), val)), { signal: this.signal }); // #BLACKBOX: immediacy requirement\r\n this.ctlr.config.watch(\"*\", (val, { target: { key, path } }: any) => path.startsWith(\"settings.css.\") && !banRgx.test(path) && this.set(key, val), { signal: this.signal }); // #BLACKBOX: immediacy requirement\r\n // ---- Media Watchers\r\n this.media.watch(\"status.videoWidth\", this.syncAspectRatio, { init: true, signal: this.signal });\r\n this.media.watch(\"status.videoHeight\", this.syncAspectRatio, { signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.watch(\"dimensions.container.width\", (w) => (this.settings.css.currentContainerWidth = `${w || 0}px`), { init: true, signal: this.signal });\r\n this.ctlr.state.watch(\"dimensions.container.height\", (h) => (this.settings.css.currentContainerHeight = `${h || 0}px`), { init: true, signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"status.loadedMetadata\", this.handleLoadedMetadataStatus, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State ----------\r\n this.ctlr.state.on(\"dimensions.container.tier\", ({ value: tier }) => (this.media.container.dataset.sizeTier = tier || \"\"), { init: true, signal: this.signal });\r\n this.ctlr.state.on(\"dimensions.pseudoContainer.tier\", ({ value: tier }) => (this.media.pseudoContainer.dataset.sizeTier = tier || \"\"), { init: true, signal: this.signal });\r\n // Post Wiring\r\n for (const [k, v] of entries) k !== \"syncWithMedia\" && ((this._cache[k] ||= this.config[k]), this.set(k, v));\r\n super.wire();\r\n }\r\n\r\n protected async handleLoadedMetadataStatus({ value }: REvent<CtlrMedia, \"status.loadedMetadata\">): Promise<void> {\r\n const color = value && (await this.ctlr.plug(\"settings.frame\")?.getMainColor());\r\n for (const k of Object.keys(this.settings.css.syncWithMedia).filter((k) => this.settings.css.syncWithMedia[k])) this.settings.css[k] = String((value ? color : null) ?? this._cache[k]);\r\n }\r\n\r\n protected getCSSValue(key: string): string {\r\n const cssVar = `--tmg-media-${uncamelize(key, \"-\")}`,\r\n val = getComputedStyle(this.media.container).getPropertyValue(cssVar);\r\n return val;\r\n }\r\n protected getClassValue(key: string): string {\r\n const prefix = `tmg-media-${uncamelize(key, \"-\")}`,\r\n val = Array.prototype.find.call(this.media.container.classList, (c) => c.startsWith(prefix))?.replace(`${prefix}-`, \"\");\r\n return val || \"none\"; // Validation logic (can be expanded to use tmg.parseUIObj if available)\r\n }\r\n\r\n protected setCssVariable(key: string, value: any): void {\r\n const strVal = String(value),\r\n cssVar = `--tmg-media-${uncamelize(key, \"-\")}`;\r\n for (const el of [this.media.container, this.media.pseudoContainer]) el?.style.setProperty(cssVar, strVal);\r\n }\r\n protected setClassValue(key: string, value: any): void {\r\n const pre = `tmg-media-${uncamelize(key, \"-\")}`;\r\n for (const c of this.media.container.classList) c.startsWith(pre) && this.media.container.classList.remove(c);\r\n this.media.container.classList.add(`${pre}-${value}`);\r\n }\r\n\r\n protected get(key: string): string | number {\r\n return this[this.classKeys.includes(key) ? \"getClassValue\" : \"getCSSValue\"](key);\r\n }\r\n protected set(key: string, value: any): void {\r\n this[this.classKeys.includes(key) ? \"setClassValue\" : \"setCssVariable\"](key, value);\r\n }\r\n\r\n public syncAspectRatio(): void {\r\n const { videoWidth: w, videoHeight: h } = this.media.status;\r\n this.settings.css.aspectRatio = w && h ? `${w} / ${h}` : \"16 / 9\";\r\n }\r\n}\r\nconst banRgx = /\\.(?:(constructor|syncWithMedia))/; // __proto__|prototype|toString|valueOf|hasOwnProperty|\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.css\": typeof CSSPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n css: CssConfig;\r\n }\r\n}\r\n","import { ErrorsConfig } from \"./types\";\r\n\r\nexport const ERROR_CODES = [\r\n 1, // MEDIA_ERR_ABORTED\r\n 2, // MEDIA_ERR_NETWORK\r\n 3, // MEDIA_ERR_DECODE\r\n 4, // MEDIA_ERR_SRC_NOT_SUPPORTED\r\n 5, // MEDIA_ERR_UNKNOWN\r\n] as const;\r\n\r\nexport const ERRORS_BUILD: Partial<ErrorsConfig> = {\r\n 1: \"The media playback was aborted.\",\r\n 2: \"The media failed due to a network error.\",\r\n 3: \"The media could not be decoded.\",\r\n 4: \"The media source is not supported.\",\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport { ERRORS_BUILD } from \"./build\";\r\nimport type { ErrorsConfig, ErrorCode } from \"./types\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { transaction } from \"sia-reactor/modules\";\r\n\r\nexport class ErrorsPlug extends BasePlug<ErrorsConfig> {\r\n public static readonly plugName = \"errors\";\r\n public static readonly BUILD = ERRORS_BUILD;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Listeners\r\n this.media.on(\"status.error\", this.handleErrorStatus, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected async handleErrorStatus({ value }: REvent<CtlrMedia, \"status.error\">): Promise<void> {\r\n if (!value) return this.ctlr.plug(\"disabled\")?.reactivate(); // In case it was a transient error that got resolved, we can try reactivating the UI\r\n this.ctlr.log(value, \"error\"); // no `.notice` since that's our job, no \"swallow\" mod since we breaking the player anyways\r\n const mssg = this.config[(value.code as ErrorCode) ?? 5]?.replaceAll(\"media\", this.media.type) || value.message || `An unknown error occurred with the ${this.media.type} :(`;\r\n if (this.ctlr.state.readyState < 3) return this.ctlr.plug(\"disabled\")?.deactivate(mssg); // #PATIENT: only after first play\r\n if (t007.dialog?.isActive(`${this.ctlr.config.id}-error-dialog`)) return; // Prevent spamming dialogs\\\r\n const res = await t007.confirm(mssg, { id: `${this.ctlr.config.id}-error-dialog`, rootElement: this.ctlr.DOM.containerContent, confirmText: \"Try Again\", cancelText: \"Dismiss\" });\r\n if (res === true) {\r\n const time = this.media.state.currentTime;\r\n transaction(() => (this.ctlr.isNativeEl && this.media.element.load(), (this.media.intent.currentTime = time), (this.media.intent.paused = false)), \"Error Recovery\");\r\n } else if (res !== \"recovered\") this.ctlr.plug(\"disabled\")?.deactivate(mssg);\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.errors\": typeof ErrorsPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n errors: ErrorsConfig;\r\n }\r\n}\r\n","import { silence } from \"sia-reactor/modules\";\nimport { BasePlug } from \"../../base\";\nimport { FAST_PLAY_BUILD } from \"./build\";\nimport type { FastPlayConfig, FastPlayState } from \"./types\";\nimport type { Controller } from \"@core/controller\";\nimport { setTimeout, setInterval } from \"@utils/fn\";\n\nexport class FastPlayPlug extends BasePlug<FastPlayConfig, FastPlayState> {\n public static readonly plugName = \"fastPlay\";\n public static readonly BUILD = FAST_PLAY_BUILD;\n public speedCheck = false;\n public speedPtrCheck = false;\n protected wasPaused = false;\n protected prevRate = 1;\n protected rewindRate = 0;\n protected speedIntervalId: number | null = null;\n protected speedDirection: \"forwards\" | \"backwards\" = \"forwards\";\n protected speedTimeoutId: number | null = null;\n\n constructor(ctlr: Controller, config = ctlr.settings.fastPlay) {\n super(ctlr, config, { isRewinding: false });\n }\n\n public override wire(): void {\n const run = () => this.ctlr.DOM.controlsContainer?.addEventListener(\"pointerdown\", this.handleSpeedPointerDown, { capture: true, signal: this.signal });\n this.ctlr.payload.wired ? run() : this.ctlr.state.wonce(\"readyState\", run, { signal: this.signal }); // #HEAVY: waits for !lightState\n // Post Wiring\n super.wire();\n }\n\n public fastPlay(pos: \"forwards\" | \"backwards\"): void {\n if (this.speedCheck) return;\n this.speedCheck = true;\n this.wasPaused = this.media.state.paused;\n this.prevRate = this.media.state.playbackRate;\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"fastplaynotifier\")?.active();\n setTimeout(pos === \"backwards\" && this.config.rewind ? this.rewind : this.fastForward, 0, this.signal);\n }\n\n public fastForward(rate = this.config.playbackRate): void {\n silence(() => (this.media.intent.playbackRate = rate));\n this.state.isRewinding = false;\n this.ctlr.plug(\"settings.notifiers\")?.compEl(\"fastplaynotifier\")?.classList.remove(\"tmg-media-rewind\");\n silence(() => (this.media.intent.paused = false));\n }\n\n public rewind(rate = this.config.playbackRate): void {\n silence(() => (this.media.intent.playbackRate = 1));\n this.rewindRate = rate;\n this.state.isRewinding = true;\n this.ctlr.plug(\"settings.notifiers\")?.compEl(\"fastplaynotifier\")?.classList.add(\"tmg-media-rewind\");\n this.media.on(\"state.paused\", this.rewindReset, { signal: this.signal });\n this.speedIntervalId = setInterval(this.rewindMedia, Math.round(1000 / this.settings.frame.fps) - 18, this.signal); // intervals lag nd i'm 18 now so, yeah!\n }\n\n protected rewindMedia(): void {\n const textEl = this.ctlr.plug(\"settings.notifiers\")?.comp(\"fastplaynotifier\")?.text;\n if (textEl) textEl.textContent = `${this.rewindRate}x`;\n if (!this.media.state.paused) silence(() => (this.media.intent.paused = true));\n silence(() => (this.media.intent.currentTime = this.media.state.currentTime - this.rewindRate / this.settings.frame.fps)); // Apprentice Slider syncs, no CSS hack\n // this.settings.css.currentPlayedPosition = this.settings.css.currentThumbPosition = this.media.state.currentTime / this.media.status.duration; // #REBORN: old things have passed away\n }\n\n protected rewindReset(): void {\n if (this.media.state.paused) return;\n if (this.speedIntervalId) {\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"mediapause\");\n silence(() => (this.media.intent.paused = true));\n clearInterval(this.speedIntervalId);\n this.speedIntervalId = null;\n } else this.speedIntervalId ??= setInterval(this.rewindMedia, Math.round(1000 / this.settings.frame.fps) - 18, this.signal);\n }\n\n public slowDown(): void {\n if (!this.speedCheck) return;\n this.speedCheck = false;\n if (this.speedIntervalId) clearInterval(this.speedIntervalId);\n this.media.off(\"state.paused\", this.rewindReset);\n silence(() => (this.media.intent.playbackRate = this.prevRate));\n this.rewindRate = 0;\n this.state.isRewinding = false;\n silence(() => (this.media.intent.paused = this.config.resetPaused ? this.wasPaused : false));\n this.ctlr.plug(\"settings.overlay\")?.hide();\n this.ctlr.plug(\"settings.notifiers\")?.compEl(\"fastplaynotifier\")?.classList.remove(\"tmg-media-control-active\", \"tmg-media-rewind\");\n }\n\n protected handleSpeedPointerDown(e: PointerEvent): void {\n if (!new RegExp(`all|${e.pointerType}`).test(this.config.pointer.type.value) || e.target !== this.ctlr.DOM.controlsContainer || this.ctlr.isUIActive(\"miniplayer\") || this.speedCheck) return;\n for (const evt of [\"touchmove\", \"mouseup\", \"touchend\", \"touchcancel\"]) this.media.container?.addEventListener(evt, this.handleSpeedPointerUp, { signal: this.signal });\n this.media.container?.addEventListener(\"mouseleave\", this.handleSpeedPointerOut, { signal: this.signal });\n clearTimeout(this.speedTimeoutId!);\n this.speedTimeoutId = setTimeout(\n () => {\n this.media.container?.removeEventListener(\"touchmove\", this.handleSpeedPointerUp);\n this.speedPtrCheck = true;\n const x = e.clientX ?? (e as unknown as TouchEvent).targetTouches?.[0]?.clientX;\n const rect = this.media.container.getBoundingClientRect();\n const rLeft = x - rect.left;\n this.speedDirection = rLeft >= rect.width * 0.5 ? \"forwards\" : \"backwards\";\n if (rLeft < this.config.pointer.inset || rLeft > rect.width - this.config.pointer.inset) return;\n if (this.config.rewind) for (const evt of [\"mousemove\", \"touchmove\"]) this.media.container?.addEventListener(evt, this.handleSpeedPointerMove, { signal: this.signal });\n this.fastPlay(this.speedDirection);\n },\n this.config.pointer.threshold,\n this.signal\n );\n }\n\n protected handleSpeedPointerMove(e: globalThis.Event): void {\n if ((e as TouchEvent).touches?.length > 1) return;\n this.ctlr.throttle(\n \"speedPointerMove\",\n () => {\n const rect = this.media.container.getBoundingClientRect(),\n x = (e as MouseEvent).clientX ?? (e as TouchEvent).targetTouches?.[0]?.clientX,\n currPos = x - rect.left >= rect.width * 0.5 ? \"forwards\" : \"backwards\";\n if (currPos !== this.speedDirection) (this.speedDirection = currPos), this.slowDown(), this.fastPlay(this.speedDirection);\n },\n 200\n );\n }\n\n protected handleSpeedPointerUp(): void {\n clearTimeout(this.speedTimeoutId!);\n this.speedPtrCheck = false;\n if (this.speedCheck && (this.ctlr.plug(\"settings.keys\")?.playTriggerSeq ?? 0) < 1) setTimeout(this.slowDown, 350, this.signal); // safe dbl clicks need 300ms wait for singles\n for (const evt of [\"touchmove\", \"mouseup\", \"touchend\", \"touchcancel\"]) this.media.container?.removeEventListener(evt, this.handleSpeedPointerUp);\n for (const evt of [\"mousemove\", \"touchmove\"]) this.media.container?.removeEventListener(evt, this.handleSpeedPointerMove);\n this.media.container?.removeEventListener(\"mouseleave\", this.handleSpeedPointerOut);\n }\n\n protected handleSpeedPointerOut(): void {\n !this.media.container?.matches(\":hover\") && this.handleSpeedPointerUp();\n }\n}\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.fastPlay\": typeof FastPlayPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n fastPlay: FastPlayConfig;\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n","import { DeepPartial } from \"sia-reactor\";\nimport { FastPlayConfig } from \"./types\";\n\nexport const FAST_PLAY_BUILD: DeepPartial<FastPlayConfig> = {\n playbackRate: 2,\n key: true,\n pointer: {\n type: {\n value: \"all\",\n options: [\n { value: \"all\", display: \"All\" },\n { value: \"mouse\", display: \"Mouse\" },\n { value: \"touch\", display: \"Touch\" },\n { value: \"pen\", display: \"Pen\" },\n { value: \"none\", display: \"None\" },\n ]\n },\n threshold: 800,\n inset: 20,\n },\n resetPaused: true,\n rewind: true,\n};\n","import { FrameConfig } from \"./types\";\r\n\r\nexport const FRAME_BUILD: Partial<FrameConfig> = {\r\n disabled: false,\r\n fps: 30,\r\n captureAutoClose: 15000,\r\n};\r\n","import { isStr } from \"@t007/utils\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { clamp } from \"@utils/num\";\r\n\r\n// Types\r\ntype RGB = [number, number, number];\r\n\r\n// RGB Analysis\r\nexport function getRGBBri([r, g, b]: RGB): number {\r\n return 0.299 * r + 0.587 * g + 0.114 * b;\r\n}\r\n\r\nexport function getRGBSat([r, g, b]: RGB): number {\r\n return Math.max(r, g, b) - Math.min(r, g, b);\r\n}\r\n\r\nexport function clampRGBBri([r, g, b]: RGB, m = 40): RGB {\r\n const br = getRGBBri([r, g, b]),\r\n d = br < m ? m - br : br > 255 - m ? -(br - (255 - m)) : 0;\r\n return [r + d, g + d, b + d].map((v) => clamp(0, v << 0, 255)) as RGB;\r\n}\r\n\r\n// Dominant Color Detection\r\nexport async function getDominantColor(src: string | HTMLImageElement | HTMLCanvasElement | { canvas: HTMLCanvasElement; width: number; height: number }, format: \"hex\", raw?: false): Promise<string | null>;\r\nexport async function getDominantColor(src: string | HTMLImageElement | HTMLCanvasElement | { canvas: HTMLCanvasElement; width: number; height: number }, format: \"rgb\", raw: true): Promise<RGB | null>;\r\nexport async function getDominantColor(src: string | HTMLImageElement | HTMLCanvasElement | { canvas: HTMLCanvasElement; width: number; height: number }, format?: \"rgb\", raw?: false): Promise<string | null>;\r\nexport async function getDominantColor(src: string | HTMLImageElement | HTMLCanvasElement | { canvas: HTMLCanvasElement; width: number; height: number }, format: \"rgb\" | \"hex\" = \"hex\", raw = false): Promise<string | RGB | null> {\r\n if (isStr(src))\r\n src = await new Promise<HTMLImageElement>((res, rej) => {\r\n const i = createEl(\"img\", { src: String(src), crossOrigin: \"anonymous\", onload: () => res(i), onerror: () => rej(new Error(`Image load error: ${src}`)) });\r\n });\r\n if ((src as { canvas?: HTMLCanvasElement })?.canvas) src = (src as { canvas: HTMLCanvasElement }).canvas;\r\n const s = Math.min(64, (src as HTMLImageElement | HTMLCanvasElement).width, (src as HTMLImageElement | HTMLCanvasElement).height),\r\n c = createEl(\"canvas\", { width: s, height: s }),\r\n x = c.getContext(\"2d\", { willReadFrequently: true, alpha: false });\r\n const d = src?.width && src?.height ? (x?.drawImage(src as CanvasImageSource, 0, 0, s, s), x?.getImageData(0, 0, s, s).data as Uint8ClampedArray) : null, // had to fool ts, coallesced to 0 below\r\n ct: Record<string, number> = {},\r\n pt: Record<string, RGB> = {} as Record<string, RGB>;\r\n for (let i = 0; i < (d?.length ?? 0); i += 4) {\r\n if (d![i + 3] < 128) continue;\r\n const r = d![i] & 0xf0,\r\n g = d![i + 1] & 0xf0,\r\n b = d![i + 2] & 0xf0; // Optimized bitwise extraction\r\n const k = (r << 16) | (g << 8) | b;\r\n ct[k] = (ct[k] || 0) + 1;\r\n pt[k] = pt[k] ? [pt[k][0] + d![i], pt[k][1] + d![i + 1], pt[k][2] + d![i + 2]] : [d![i], d![i + 1], d![i + 2]];\r\n }\r\n const clrs = Object.keys(ct)\r\n .sort((a, b) => ct[b] - ct[a])\r\n .slice(0, 7)\r\n .map((k) => ({ key: k, rgb: pt[k].map((v) => Math.round(v / ct[k])) as RGB }));\r\n if (!clrs.length) return null;\r\n const [r, g, b] = clampRGBBri(clrs.reduce((sat, curr) => (getRGBSat(sat.rgb) > getRGBSat(curr.rgb) ? sat : curr), clrs[0]).rgb, 70);\r\n return format === \"hex\" ? `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}` : raw == false ? `rgb(${r},${g},${b})` : [r, g, b];\r\n}\r\n\r\nexport function convertToMonoChrome(canvas: HTMLCanvasElement, context: CanvasRenderingContext2D): void {\r\n const frame = context.getImageData(0, 0, canvas.width || 1, canvas.height || 1);\r\n for (let i = 0; i < frame.data.length / 4; i++) {\r\n const grey = (frame.data[i * 4 + 0] + frame.data[i * 4 + 1] + frame.data[i * 4 + 2]) / 3;\r\n (frame.data[i * 4 + 0] = grey), (frame.data[i * 4 + 1] = grey), (frame.data[i * 4 + 2] = grey);\r\n }\r\n context.putImageData(frame, 0, 0);\r\n}\r\n","import { BasePlug } from \"../../base\";\r\nimport type { FrameConfig } from \"./types\";\r\nimport { FRAME_BUILD } from \"./build\";\r\nimport { getDominantColor, getRGBBri, getRGBSat } from \"@utils/color\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { clamp, safeNum } from \"@utils/num\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport { formatMediaTime } from \"@utils/time\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { getMediaMin, getMediaMax } from \"@utils/media\";\r\n\r\nexport class FramePlug extends BasePlug<FrameConfig> {\r\n public static readonly plugName = \"frame\";\r\n public static readonly BUILD = FRAME_BUILD;\r\n public exportCanvas: HTMLCanvasElement = createEl(\"canvas\");\r\n public exportContext: CanvasRenderingContext2D = this.exportCanvas.getContext(\"2d\", { alpha: false })!;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.frameCapture ||= this.ctlr.isNativeEl && this.media.type === \"video\" && !this.config.disabled), { init: true, signal: this.signal });\r\n // ---- Config Listeners\r\n this.ctlr.config.on(\"settings.frame.disabled\", ({ value }) => (this.media.features.frameCapture = !value), { init: true, signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"capture\", { fn: () => this.capture(\"\"), keyboard: { phase: \"keyup\" } });\r\n this.ctlr.registerAction(\"stepFwd\", { fn: () => this.moveFrame(\"forwards\"), keyboard: { phase: \"keydown\" } });\r\n this.ctlr.registerAction(\"stepBwd\", { fn: () => this.moveFrame(\"backwards\"), keyboard: { phase: \"keydown\" } });\r\n super.wire();\r\n }\r\n\r\n public async extract(display: \"\" | \"monochrome\", time?: number, raw?: false, min?: number, video?: HTMLVideoElement): Promise<{ blob: Blob | null; url: string }>;\r\n public async extract(display: \"\" | \"monochrome\", time?: number, raw?: true, min?: number, video?: HTMLVideoElement): Promise<{ canvas: HTMLCanvasElement; context: CanvasRenderingContext2D }>;\r\n public async extract(display: string = \"\", time = safeNum(this.media.state.currentTime), raw = false, min = 0, video = this.media.pseudoElement as HTMLVideoElement): Promise<any> {\r\n if (video !== this.media.element) {\r\n if (this.ctlr.state.frameReadyPromise) await this.ctlr.state.frameReadyPromise; // wait for it to get set by last getter 5 lines below\r\n if (Math.abs(video.currentTime - time) > 0.01 || !video.readyState) {\r\n this.ctlr.state.frameReadyPromise ??= new Promise<null>((res) => video.addEventListener(video.readyState ? \"timeupdate\" : \"loadeddata\", () => res(null), { once: true, signal: this.signal })); // me sef no small, been burned before this\r\n video.currentTime = time; // small epsilon tolerance for video time comparison - 0.01(10ms)\r\n }\r\n this.ctlr.state.frameReadyPromise = await this.ctlr.state.frameReadyPromise;\r\n }\r\n (this.exportCanvas.width = video.videoWidth || min), (this.exportCanvas.height = video.videoHeight || min);\r\n this.exportContext.filter = this.settings.css.filter as string;\r\n display === \"monochrome\" && (this.exportContext.filter = `${this.exportContext.filter} grayscale(100%)`);\r\n this.exportContext.drawImage(video, 0, 0, this.exportCanvas.width, this.exportCanvas.height);\r\n this.exportContext.filter = \"none\";\r\n if (raw === true) return { canvas: this.exportCanvas, context: this.exportContext };\r\n const blob = (this.exportCanvas.width || this.exportCanvas.height) && (await new Promise<Blob | null>((res) => this.exportCanvas.toBlob(res)));\r\n return { blob: blob || null, url: blob ? URL.createObjectURL(blob) : \"\" };\r\n }\r\n\r\n public async capture(display: \"\" | \"monochrome\" = \"\", time = safeNum(this.media.state.currentTime)): Promise<void> {\r\n if (!this.media.features.frameCapture) return;\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"capture\"); // #STALLING: necessary optimistic distraction\r\n const toast = this.ctlr.plug(\"settings.toasts\")?.toast,\r\n tTxt = formatMediaTime({ time, format: \"human\", showMs: true }),\r\n fTxt = `video frame ${display === \"monochrome\" ? \"in b&w \" : \"\"}at ${tTxt}`,\r\n frameToastId = toast?.loading(`Capturing ${fTxt}...`, { delay: parseCSSTime(this.settings.css.notifiersAnimationTime), image: window.TMG_MEDIA_ALT_IMG_SRC, tag: `tmg-${this.media.settings.metadata.title ?? \"Video\"}fcpa${tTxt}${display}` }) as string,\r\n frame = await this.extract(display, time, false, 0, this.media.element as HTMLVideoElement),\r\n filename = `${this.media.settings.metadata.title ?? \"Video\"}_${display === \"monochrome\" ? `black&white_` : \"\"}at_${tTxt}.png`.replace(/[\\/:*?\"<>|\\s]+/g, \"_\"); // system filename safe\r\n const Save = () => {\r\n toast?.loading(frameToastId, { render: `Saving ${fTxt}`, actions: {} });\r\n createEl(\"a\", { href: frame.url as string, download: filename })?.click?.();\r\n toast?.success(frameToastId, { delay: 1000, render: `Saved ${fTxt}`, actions: {} });\r\n };\r\n const Share = () => {\r\n toast?.loading(frameToastId, { render: `Sharing ${fTxt}`, actions: {} });\r\n navigator.share?.({ title: this.media.settings.metadata.title ?? \"Video\", text: `Captured ${fTxt}`, files: [new File([frame.blob as Blob], filename, { type: (frame.blob as Blob).type })] }).then(\r\n () => toast?.success(frameToastId, { render: `Shared ${fTxt}`, actions: {} }),\r\n () => toast?.error(frameToastId, { render: `Failed sharing ${fTxt}`, actions: { Save } })\r\n ) || toast?.warn(frameToastId, { delay: 1000, render: `Couldn't share ${fTxt}`, actions: { Save } });\r\n };\r\n frame?.url ? toast?.success(frameToastId, { render: `Captured ${fTxt}`, image: frame.url, autoClose: this.config.captureAutoClose, actions: { Save, Share }, onClose: () => URL.revokeObjectURL(frame.url) }) : toast?.error(frameToastId, { render: `Failed capturing ${fTxt}` });\r\n }\r\n\r\n public async findGoodTime({ time: t = safeNum(this.media.state.currentTime), secondsLimit: s = 25, saturation: sat = 12, brightness: bri = 40 } = {}): Promise<number | null> {\r\n const end = clamp(getMediaMin(this.media), t + s, getMediaMax(this.media));\r\n for (; t <= end; t += 0.333) {\r\n const rgb = await getDominantColor((await this.extract(\"\", t, true, 1)).canvas, \"rgb\", true);\r\n if (rgb && getRGBBri(rgb) > bri && getRGBSat(rgb) > sat) return t; // <= FIRST legit content frame\r\n }\r\n return null;\r\n }\r\n\r\n public async getMainColor(time?: number, poster = (this.media.element as HTMLVideoElement).poster, config = {}): Promise<string | null> {\r\n return getDominantColor(poster ? poster : (await this.extract(\"\", time ? time : (await this.findGoodTime(config)) ?? undefined, true, 1)).canvas);\r\n }\r\n\r\n public moveFrame(dir: \"forwards\" | \"backwards\" = \"forwards\"): void {\r\n this.media.state.paused && this.ctlr.throttle(\"frameStepping\", () => silence(() => (this.media.intent.currentTime = clamp(getMediaMin(this.media), Math.round(this.media.state.currentTime * this.config.fps) + (dir === \"backwards\" ? -1 : 1), Math.floor(getMediaMax(this.media) * this.config.fps)) / this.config.fps)), Math.round(1000 / this.config.fps));\r\n }\r\n} // Video only\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.frame\": typeof FramePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n frame: FrameConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n frameCapture: boolean;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { GestureConfig, GestureTouchConfig, GestureWheelConfig } from \".\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\n\r\nexport const GESTURE_TOUCH_BUILD: Partial<GestureTouchConfig> = {\r\n volume: true,\r\n brightness: true,\r\n timeline: true,\r\n threshold: 200,\r\n axesRatio: 3,\r\n inset: 20,\r\n sliderTimeout: 1000,\r\n xRatio: 1,\r\n yRatio: 1,\r\n};\r\n\r\nexport const GESTURE_WHEEL_BUILD: Partial<GestureWheelConfig> = {\r\n volume: true,\r\n brightness: true,\r\n timeline: true,\r\n timeout: 2000,\r\n xRatio: 12,\r\n yRatio: 6,\r\n};\r\n\r\nexport const GESTURE_BUILD: DeepPartial<GestureConfig> = {\r\n click: IS_MOBILE ? false : \"paused\",\r\n dblClick: IS_MOBILE ? \"paused\" : \"fullscreen\",\r\n // touch: GESTURE_TOUCH_BUILD,\r\n // wheel: GESTURE_WHEEL_BUILD,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { GestureConfig, GestureState } from \"./types\";\r\nimport type { GestureWheelPin } from \"./wheel\";\r\nimport type { GestureTouchPin } from \"./touch\";\r\nimport { GESTURE_BUILD } from \"./build\";\r\nimport { PinRegistry } from \"@core/registries\";\r\nimport { Controller } from \"@core/controller\";\r\nimport { addSafeClicks } from \"@utils/dom\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { rippleHandler } from \"@t007/utils/hooks/vanilla\";\r\nimport { setTimeout } from \"sia-reactor/utils\";\r\n\r\nexport class GesturePlug extends BasePlug<GestureConfig, GestureState> {\r\n public static readonly plugName = \"gesture\";\r\n public static readonly BUILD = GESTURE_BUILD;\r\n public wheel?: GestureWheelPin;\r\n public touch?: GestureTouchPin;\r\n public skipPersistPos: \"left\" | \"right\" | null = null;\r\n protected focusSubjectId = \"\";\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.gesture) {\r\n super(ctlr, config, { skipPersist: false });\r\n const WheelPin = PinRegistry.get(\"gesture.wheel\"),\r\n TouchPin = PinRegistry.get(\"gesture.touch\");\r\n WheelPin && (this.wheel = new WheelPin(this.ctlr, this.config.wheel)), TouchPin && (this.touch = new TouchPin(this.ctlr, this.config.touch));\r\n }\r\n\r\n public override wire(): void {\r\n const run = () => {\r\n // Event Listeners\r\n addSafeClicks(this.ctlr.DOM.controlsContainer, this.handleClick, this.handleDblClick, { capture: true, signal: this.signal });\r\n for (const el of [this.ctlr.DOM.controlsContainer, this.ctlr.DOM.bottomControlsWrapper]) {\r\n el?.addEventListener(\"click\", this.handleAnyClick, { capture: true, signal: this.signal });\r\n el?.addEventListener(\"contextmenu\", this.handleRightClick, { signal: this.signal });\r\n el?.addEventListener(\"focusin\", this.handleFocusIn, { capture: true, signal: this.signal });\r\n el?.addEventListener(\"keydown\", this.handleKeyFocusIn, { capture: true, signal: this.signal });\r\n for (const evt of [\"pointermove\", \"dragenter\", \"scroll\"]) el?.addEventListener(evt, this.handleHoverPointerActive, { capture: true, signal: this.signal });\r\n el?.addEventListener(\"mouseleave\", this.handleHoverPointerOut, { capture: true, signal: this.signal });\r\n }\r\n // Utility Injection\r\n this.wheel?.wire(), this.touch?.wire();\r\n };\r\n this.ctlr.payload.wired ? run() : this.ctlr.state.wonce(\"readyState\", run, { signal: this.signal }); // #HEAVY: waits for !lightState\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n public override mount(): void {\r\n this.wheel?.mount?.(), this.touch?.mount?.();\r\n }\r\n\r\n protected handleAnyClick(): void {\r\n this.ctlr.plug(\"settings.overlay\")?.delay();\r\n // this.ctlr.plug(\"settings.controlPanel\")?.comp(\"timeline\")?.stopScrubbing();\r\n }\r\n\r\n protected handleRightClick(e: MouseEvent): void {\r\n e.preventDefault();\r\n }\r\n\r\n protected handleClick(e: MouseEvent): void {\r\n if (e.target !== this.ctlr.DOM.controlsContainer) return;\r\n if (this.ctlr.plug(\"settings.fastPlay\")?.speedCheck && (this.ctlr.plug(\"settings.keys\")?.playTriggerSeq ?? 1) < 1) return;\r\n if (IS_MOBILE && !this.ctlr.isUIActive(\"pictureInPicture\") && !this.media.status.waiting && !this.media.status.ended && (!this.ctlr.plug(\"settings.time\")?.skipNotifier || !this.ctlr.isUIActive(\"overlay\"))) !/hidden|persistent/.test(this.settings.overlay.behavior.value) && this.media.container.classList.toggle(\"tmg-media-overlay\");\r\n if (!this.ctlr.isUIActive(\"miniplayer\") && this.config.click) (this.media.intent[this.config.click] = !this.media.state[this.config.click] as never), this.config.click === \"paused\" && this.ctlr.plug(\"settings.notifiers\")?.notify(this.media.intent.paused ? \"mediapause\" : \"mediaplay\");\r\n }\r\n\r\n protected handleDblClick(e: MouseEvent): void {\r\n const { clientX: x, target, detail } = e;\r\n if (target !== this.ctlr.DOM.controlsContainer) return;\r\n const rect = this.media.container.getBoundingClientRect(),\r\n pos = x - rect.left > rect.width * 0.65 ? \"right\" : x - rect.left < rect.width * 0.35 ? \"left\" : \"center\";\r\n if (this.state.skipPersist && pos !== this.skipPersistPos) {\r\n this.stopSkipPersist();\r\n if (detail === 1) return;\r\n }\r\n if (pos === \"center\" && this.config.dblClick) return void ((this.media.intent[this.config.dblClick] = !this.media.state[this.config.dblClick] as never), this.config.dblClick === \"paused\" && this.ctlr.plug(\"settings.notifiers\")?.notify(this.media.intent.paused ? \"mediapause\" : \"mediaplay\"));\r\n if (this.state.skipPersist && detail === 2) return;\r\n if (!this.state.skipPersist) this.startSkipPersist(pos as \"left\" | \"right\");\r\n this.ctlr.plug(\"settings.time\")?.skip(pos === \"right\" ? this.settings.time.skip : -this.settings.time.skip);\r\n rippleHandler(e, { target: this.ctlr.plug(\"settings.time\")?.skipNotifier });\r\n }\r\n\r\n protected handleFocusIn({ target }: FocusEvent, t = target as HTMLElement): void {\r\n this.focusSubjectId = String(!t.matches(\":focus-visible\") && (t?.dataset?.controlId ?? t?.parentElement?.dataset?.controlId));\r\n }\r\n protected handleKeyFocusIn({ target }: KeyboardEvent, t = target as HTMLElement): void {\r\n if ((t?.dataset?.controlId ?? t?.parentElement?.dataset?.controlId) === this.focusSubjectId) t.blur();\r\n }\r\n\r\n protected handleHoverPointerActive(e: Event): void {\r\n const { target, pointerType } = e as PointerEvent,\r\n overlay = this.ctlr.plug(\"settings.overlay\");\r\n (!pointerType || !IS_MOBILE) && overlay?.show();\r\n pointerType && (target as HTMLElement).closest(\".tmg-media-side-controls-wrapper\") && clearTimeout(overlay?.overlayDelayId ?? -1);\r\n }\r\n protected handleHoverPointerOut(): void {\r\n setTimeout(() => !IS_MOBILE && !this.media.container.matches(\":hover\") && this.ctlr.plug(\"settings.overlay\")?.hide(), 0, this.signal);\r\n }\r\n\r\n public startSkipPersist(pos: \"left\" | \"right\"): void {\r\n if (this.state.skipPersist) return;\r\n this.media.container.addEventListener(\"click\", this.handleDblClick, { signal: this.signal });\r\n (this.state.skipPersist = true), (this.skipPersistPos = pos);\r\n }\r\n public stopSkipPersist(): void {\r\n if (!this.state.skipPersist) return;\r\n this.media.container.removeEventListener(\"click\", this.handleDblClick);\r\n (this.state.skipPersist = false), (this.skipPersistPos = null);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.wheel?.destroy(), this.touch?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\nexport * from \"./touch\";\r\nexport * from \"./wheel\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.gesture\": typeof GesturePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n gesture: GestureConfig;\r\n }\r\n}\r\n","import { clamp } from \"sia-reactor/utils\";\r\nimport { GesturePlug } from \".\";\r\nimport { safeNum } from \"@utils/num\";\r\nimport { BasePin } from \"../../base\";\r\nimport { getMediaMin, getMediaMax, getMediaTime } from \"@utils/media\";\r\n\r\nexport class GestureBasePin<Config> extends BasePin<GesturePlug, Config> {\r\n public static readonly plugName = \"gesture\";\r\n protected nextTime = 0;\r\n\r\n protected applyTimeline({ percent, sign, multiplier }: { percent: number; sign: string; multiplier: number }): void {\r\n multiplier = +multiplier.toFixed(1);\r\n percent = percent * multiplier;\r\n const curr = safeNum(this.media.state.currentTime),\r\n change = safeNum(getMediaTime(this.media, percent)) * multiplier,\r\n next = curr + (sign === \"+\" ? change : -change),\r\n textEl = this.ctlr.plug(\"settings.notifiers\")?.compEl(\"touchtimelinenotifier\"),\r\n toText = this.ctlr.plug(\"settings.time\")?.toTimeText;\r\n this.nextTime = clamp(getMediaMin(this.media), next, getMediaMax(this.media));\r\n if (textEl) textEl.textContent = `${sign}${toText?.(Math.abs(this.nextTime - curr))} (${toText?.(this.nextTime, true)}) ${multiplier < 1 ? `x${multiplier}` : \"\"}`;\r\n }\r\n\r\n protected applyRange(key: \"volume\" | \"brightness\", percent: number, sign: string): void {\r\n const range = this.settings[key],\r\n value = sign === \"+\" ? this.media.state[key] + percent * range.max : this.media.state[key] - percent * range.max;\r\n this.ctlr.plug((\"settings.\" + key) as \"settings.volume\")?.handleSliderInput?.(clamp(0, Math.round(value), range.max));\r\n }\r\n}\r\n","import { GESTURE_TOUCH_BUILD } from \"./build\";\r\nimport { GesturePlug } from \"./index\";\r\nimport { clamp } from \"@utils/num\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { GestureBasePin } from \"./base\";\r\nimport { GestureTouchConfig } from \"./types\";\r\n\r\nexport class GestureTouchPin extends GestureBasePin<GestureTouchConfig> {\r\n public static readonly pinName = \"touch\";\r\n public static get Plug() {\r\n return GesturePlug;\r\n }\r\n public static readonly BUILD = GESTURE_TOUCH_BUILD;\r\n protected lastX = 0;\r\n protected lastY = 0;\r\n protected zone: { x: \"left\" | \"right\"; y: \"top\" | \"bottom\" } | null = null;\r\n public xCheck = false;\r\n public yCheck = false;\r\n protected canCancel = true;\r\n protected cancelTimeoutId = -1;\r\n protected sliderTimeoutId = -1;\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.ctlr.DOM.controlsContainer?.addEventListener(\"touchstart\", this.handleStart, { capture: true, signal: this.signal });\r\n }\r\n\r\n protected canHandle(e: TouchEvent): boolean {\r\n return !this.ctlr.config.disabled && e.touches?.length === 1 && e.target === this.ctlr.DOM.controlsContainer && !this.ctlr.plug(\"settings.fastPlay\")?.speedCheck;\r\n }\r\n\r\n protected handleStart(e: TouchEvent): void {\r\n if (!this.canHandle(e)) return;\r\n this.handleEnd();\r\n this.lastX = e.touches[0].clientX;\r\n this.lastY = e.touches[0].clientY;\r\n this.media.container.addEventListener(\"touchmove\", this.handleInit, { once: true, signal: this.signal });\r\n this.cancelTimeoutId = setTimeout(() => (this.canCancel = false), this.config.threshold, this.signal);\r\n for (const evt of [\"touchend\", \"touchcancel\"]) this.media.container.addEventListener(evt, this.handleEnd, { signal: this.signal });\r\n }\r\n\r\n protected handleInit(e: Event): void {\r\n const te = e as TouchEvent;\r\n if (te.touches?.length > 1 || this.ctlr.plug(\"settings.fastPlay\")?.speedCheck) return;\r\n te.preventDefault();\r\n const tc = this.config,\r\n rect = this.media.container.getBoundingClientRect(),\r\n x = te.touches[0].clientX,\r\n y = te.touches[0].clientY,\r\n deltaX = Math.abs(this.lastX - x),\r\n deltaY = Math.abs(this.lastY - y);\r\n this.zone = { x: x - rect.left > rect.width * 0.5 ? \"right\" : \"left\", y: y - rect.top > rect.height * 0.5 ? \"bottom\" : \"top\" };\r\n const rLeft = this.lastX - rect.left,\r\n rTop = this.lastY - rect.top;\r\n if (deltaX > deltaY * tc.axesRatio && rLeft > tc.inset && rLeft < rect.width - tc.inset) {\r\n if (tc.timeline) {\r\n this.xCheck = true;\r\n this.media.container.addEventListener(\"touchmove\", this.handleXMove, { passive: false, signal: this.signal });\r\n }\r\n } else if (deltaY > deltaX * tc.axesRatio && rTop > tc.inset && rTop < rect.height - tc.inset) {\r\n if ((tc.volume && this.zone?.x === \"right\") || (tc.brightness && this.zone?.x === \"left\")) {\r\n this.yCheck = true;\r\n this.media.container.addEventListener(\"touchmove\", this.handleYMove, { passive: false, signal: this.signal });\r\n }\r\n }\r\n }\r\n\r\n protected handleXMove(e: Event): void {\r\n const te = e as TouchEvent;\r\n if (this.canCancel) return this.handleEnd();\r\n te.preventDefault();\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchtimelinenotifier\")?.active();\r\n this.ctlr.throttle(\r\n \"gestureTouchMove\",\r\n () => {\r\n const tc = this.config,\r\n { offsetWidth: width, offsetHeight: height } = this.media.container,\r\n x = te.touches[0].clientX,\r\n y = te.touches[0].clientY,\r\n deltaX = x - this.lastX,\r\n deltaY = y - this.lastY,\r\n sign = deltaX >= 0 ? \"+\" : \"-\",\r\n percent = clamp(0, Math.abs(deltaX), width * tc.xRatio) / (width * tc.xRatio),\r\n mY = clamp(0, Math.abs(deltaY), height * tc.yRatio * 0.5),\r\n multiplier = 1 - mY / (height * tc.yRatio * 0.5);\r\n this.applyTimeline({ percent, sign, multiplier });\r\n },\r\n 30,\r\n false\r\n );\r\n }\r\n\r\n protected handleYMove(e: Event): void {\r\n const te = e as TouchEvent;\r\n if (this.canCancel && !this.ctlr.isUIActive(\"fullscreen\")) return this.handleEnd();\r\n te.preventDefault();\r\n // prettier-ignore\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(this.zone?.x === \"right\" ? \"touchvolumenotifier\" : \"touchbrightnessnotifier\")?.active();\r\n this.ctlr.throttle(\r\n \"gestureTouchMove\",\r\n () => {\r\n const tc = this.config,\r\n height = this.media.container.offsetHeight,\r\n y = te.touches[0].clientY,\r\n deltaY = y - this.lastY,\r\n sign = deltaY >= 0 ? \"-\" : \"+\",\r\n percent = clamp(0, Math.abs(deltaY), height * tc.yRatio) / (height * tc.yRatio);\r\n this.lastY = y;\r\n this.applyRange(this.zone?.x === \"right\" ? \"volume\" : \"brightness\", percent, sign);\r\n },\r\n 30,\r\n false\r\n );\r\n }\r\n\r\n protected handleEnd(): void {\r\n if (this.xCheck) {\r\n this.xCheck = false;\r\n this.media.container.removeEventListener(\"touchmove\", this.handleXMove);\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchtimelinenotifier\")?.inactive();\r\n if (!this.canCancel) this.media.intent.currentTime = this.nextTime;\r\n }\r\n if (this.yCheck) {\r\n this.yCheck = false;\r\n this.media.container.removeEventListener(\"touchmove\", this.handleYMove);\r\n clearTimeout(this.sliderTimeoutId);\r\n this.sliderTimeoutId = setTimeout(() => (this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchvolumenotifier\")?.inactive(), this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchbrightnessnotifier\")?.inactive()), this.config.sliderTimeout, this.signal);\r\n if (!this.canCancel) this.ctlr.plug(\"settings.overlay\")?.hide();\r\n }\r\n clearTimeout(this.cancelTimeoutId);\r\n this.canCancel = true;\r\n this.media.container.removeEventListener(\"touchmove\", this.handleInit);\r\n for (const evt of [\"touchend\", \"touchcancel\"]) this.media.container.removeEventListener(evt, this.handleEnd);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"gesture.touch\": typeof GestureTouchPin;\r\n }\r\n}\r\n","import { GESTURE_WHEEL_BUILD } from \"./build\";\r\nimport { GesturePlug } from \"./index\";\r\nimport { clamp } from \"@utils/num\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { GestureBasePin } from \"./base\";\r\nimport { GestureWheelConfig } from \"./types\";\r\n\r\nexport class GestureWheelPin extends GestureBasePin<GestureWheelConfig> {\r\n public static readonly pinName = \"wheel\";\r\n public static get Plug() {\r\n return GesturePlug;\r\n }\r\n public static readonly BUILD = GESTURE_WHEEL_BUILD;\r\n protected timeoutId: number | null = null;\r\n protected zone: { x: \"left\" | \"right\"; y: \"top\" | \"bottom\" } | null = null;\r\n protected xCheck = false;\r\n protected yCheck = false;\r\n protected timePercent = 0;\r\n protected timeMultiplier = 1;\r\n protected deltaY = 0;\r\n protected nextTime = 0;\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.media.container.addEventListener(\"wheel\", this.handleWheel, { passive: false, signal: this.signal });\r\n }\r\n\r\n protected canHandle(e: WheelEvent): boolean {\r\n return !this.media.state.locked && !this.ctlr.config.disabled && e.target === this.ctlr.DOM.controlsContainer && !this.plug?.touch?.xCheck && !this.plug?.touch?.yCheck && !this.ctlr.plug(\"settings.fastPlay\")?.speedCheck && (this.ctlr.isUIActive(\"fullscreen\") || this.ctlr.isUIActive(\"floatingPlayer\"));\r\n }\r\n\r\n protected handleWheel(e: WheelEvent): void {\r\n if (!this.canHandle(e)) return;\r\n e.preventDefault();\r\n this.timeoutId ? clearTimeout(this.timeoutId) : this.handleInit(e);\r\n this.timeoutId = setTimeout(this.handleStop, this.config.timeout, this.signal);\r\n this.handleMove(e);\r\n }\r\n\r\n protected handleInit({ clientX: x, clientY: y }: WheelEvent): void {\r\n const rect = this.media.container.getBoundingClientRect();\r\n this.zone = { x: x - rect.left > rect.width * 0.5 ? \"right\" : \"left\", y: y - rect.top > rect.height * 0.5 ? \"bottom\" : \"top\" };\r\n this.deltaY = this.timePercent = 0;\r\n this.timeMultiplier = 1;\r\n }\r\n\r\n protected handleMove({ clientX: x, deltaX, deltaY, shiftKey }: WheelEvent): void {\r\n deltaX = shiftKey ? deltaY : deltaX;\r\n const wc = this.config,\r\n rect = this.media.container.getBoundingClientRect(),\r\n width = shiftKey ? rect.height : rect.width,\r\n height = shiftKey ? rect.width : rect.height;\r\n let xPercent = -deltaX / (width * wc.xRatio);\r\n xPercent = this.timePercent += xPercent;\r\n const xSign = xPercent >= 0 ? \"+\" : \"-\";\r\n xPercent = Math.abs(xPercent);\r\n if (deltaX || shiftKey) {\r\n if (!wc.timeline || this.yCheck) return this.handleStop();\r\n this.xCheck = true;\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchtimelinenotifier\")?.active();\r\n this.applyTimeline({ percent: xPercent, sign: xSign, multiplier: this.timeMultiplier });\r\n if (shiftKey) return;\r\n }\r\n if (deltaY) {\r\n if (this.xCheck) {\r\n const mY = clamp(0, Math.abs((this.deltaY += deltaY)), height * wc.yRatio * 0.5);\r\n this.timeMultiplier = 1 - mY / (height * wc.yRatio * 0.5);\r\n return this.applyTimeline({ percent: xPercent, sign: xSign, multiplier: this.timeMultiplier });\r\n }\r\n const cancel = (this.zone?.x === \"right\" && !wc.volume) || (this.zone?.x === \"left\" && !wc.brightness),\r\n currentXZone = x - rect.left > width * 0.5 ? \"right\" : \"left\";\r\n if (cancel || currentXZone !== this.zone?.x) return this.handleStop();\r\n this.yCheck = true;\r\n // prettier-ignore\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(this.zone?.x === \"right\" ? \"touchvolumenotifier\" : \"touchbrightnessnotifier\")?.active();\r\n const ySign = -deltaY >= 0 ? \"+\" : \"-\",\r\n yPercent = clamp(0, Math.abs(deltaY), height * wc.yRatio) / (height * wc.yRatio);\r\n this.applyRange(this.zone?.x === \"right\" ? \"volume\" : \"brightness\", yPercent, ySign);\r\n }\r\n }\r\n\r\n protected handleStop(): void {\r\n this.timeoutId = null;\r\n if (this.yCheck) {\r\n this.yCheck = false;\r\n this.ctlr.plug(\"settings.overlay\")?.hide();\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchvolumenotifier\")?.inactive(), this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchbrightnessnotifier\")?.inactive();\r\n }\r\n if (this.xCheck) {\r\n this.xCheck = false;\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchtimelinenotifier\")?.inactive();\r\n this.media.intent.currentTime = this.nextTime;\r\n }\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"gesture.wheel\": typeof GestureWheelPin;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { KeysConfig } from \"./types\";\r\nimport { KEYS_BLOCKS } from \"@t007/utils\";\r\n\r\nexport const KEYS_WHITELIST = [\"Space\", \"Enter\", \"Escape\", \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\r\n\r\nexport const KEY_SHORTCUT_MOD_ACTIONS = [\"skip\", \"volume\", \"brightness\", \"playbackRate\", \"captionsFontSize\"] as const; // numerical values\r\n\r\nexport const KEYS_BUILD: DeepPartial<KeysConfig> = {\r\n disabled: false,\r\n strictMatches: false,\r\n overrides: [\"Space\", \"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"],\r\n shortcuts: {\r\n prev: \"Shift+p\",\r\n next: \"Shift+n\",\r\n playPause: \"k\",\r\n mute: \"m\",\r\n dark: \"d\",\r\n skipBwd: \"j\",\r\n skipFwd: \"l\",\r\n stepFwd: \".\",\r\n stepBwd: \",\",\r\n volumeUp: \"ArrowUp\",\r\n volumeDown: \"ArrowDown\",\r\n brightnessUp: \"y\",\r\n brightnessDown: \"h\",\r\n playbackRateUp: \">\",\r\n playbackRateDown: \"<\",\r\n timeFormat: \"z\",\r\n timeMode: \"q\",\r\n capture: \"s\",\r\n objectFit: \"a\",\r\n pictureInPicture: \"i\",\r\n theater: \"t\",\r\n fullscreen: \"f\",\r\n captions: \"c\",\r\n captionsFontSizeUp: [\"+\", \"=\"],\r\n captionsFontSizeDown: [\"-\", \"_\"],\r\n captionsFontFamily: \"u\",\r\n captionsFontWeight: \"g\",\r\n captionsFontVariant: \"v\",\r\n captionsFontOpacity: \"o\",\r\n captionsBackgroundOpacity: \"b\",\r\n captionsWindowOpacity: \"w\",\r\n captionsCharacterEdgeStyle: \"e\",\r\n captionsTextAlignment: \"x\",\r\n settings: \"?\",\r\n cast: \"Shift+r\",\r\n airplay: \"Shift+r\"\r\n },\r\n blocks: KEYS_BLOCKS,\r\n whitelist: KEYS_WHITELIST,\r\n mods: {\r\n disabled: false,\r\n skip: {\r\n ctrl: 60,\r\n shift: 10,\r\n },\r\n volume: {\r\n ctrl: 50,\r\n shift: 10,\r\n },\r\n brightness: {\r\n ctrl: 50,\r\n shift: 10,\r\n },\r\n playbackRate: {\r\n ctrl: 1,\r\n },\r\n captionsFontSize: {},\r\n },\r\n};\r\n","import { BasePlug } from \"../../base\";\nimport type { KeyMod, KeyPhase, KeysConfig, KeyShortcutMods } from \"./types\";\nimport { KEYS_BUILD } from \"./build\";\nimport { isArr } from \"@t007/utils\";\nimport { keyEventAllowed as allowed } from \"@utils/keys\";\nimport { getMediaTime } from \"@utils/media\";\nimport { limited } from \"@utils/fn\";\nimport { tutorialOpts } from \"../toasts\";\n\nexport class KeysPlug extends BasePlug<KeysConfig> {\n public static readonly plugName = \"keys\";\n public static readonly BUILD = KEYS_BUILD;\n public playTriggerSeq = 0;\n protected teachBasics = limited((_id?: string) => ((_id = this.ctlr.plug(\"settings.toasts\")?.toast?.(`Press the spacebar to play/pause, or hold it to fast forward/rewind(+Shift). Click ⚙ for settings`, { ...tutorialOpts(() => (this.teachBasics.block(), t007.toast?.dismiss(_id))), signal: this.signal })), { key: \"tmg_keys_tut_1\", maxTimes: 5 }));\n\n public override wire(): void {\n // Ctlr Media Listeners\n this.ctlr.media.on(\"state.locked\", this.syncEventListeners, { signal: this.signal });\n // ---- State --------\n this.ctlr.state.on(\"mediaIntersecting\", this.syncEventListeners, { signal: this.signal });\n // ---- Config --------\n this.ctlr.config.on(\"settings.keys.disabled\", this.syncEventListeners, { signal: this.signal });\n this.ctlr.config.on(\"disabled\", this.syncEventListeners, { signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"playPause\", { fn: this.handlePlayTriggerDown, keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\" \", { fn: this.handlePlayTriggerDown, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"escape\", { fn: this.handleEscape, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"arrowleft\", { fn: this.handleArrowLeft, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"arrowright\", { fn: this.handleArrowRight, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"arrowup\", { fn: this.handleArrowUp, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"arrowdown\", { fn: this.handleArrowDown, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"home\", { fn: () => (this.media.intent.currentTime = 0), keyboard: { phase: \"keyup\" }, private: true });\n this.ctlr.registerAction(\"0\", { fn: () => (this.media.intent.currentTime = 0), keyboard: { phase: \"keyup\" }, private: true });\n this.ctlr.registerAction(\"end\", { fn: () => (this.media.intent.currentTime = this.media.status.duration), keyboard: { phase: \"keyup\" }, private: true });\n for (const n of \"123456789\".split(\"\")) this.ctlr.registerAction(n, { fn: () => (this.media.intent.currentTime = getMediaTime(this.media, +n / 10)), keyboard: { phase: \"keyup\" }, private: true });\n this.ctlr.payload.wired ? this.syncEventListeners() : this.ctlr.state.wonce(\"readyState\", this.syncEventListeners, { signal: this.signal }); // #HEAVY: waits for !lightState\n super.wire();\n }\n\n protected getHook(phase: KeyPhase, action: string): string | undefined {\n const entry = this.ctlr.actions[action];\n if (!entry || !entry.keyboard) return;\n const matches = isArr(entry.keyboard.phase) ? entry.keyboard.phase.includes(phase) : entry.keyboard.phase === phase;\n return matches ? action : undefined;\n }\n protected handleKeyDown(e: KeyboardEvent, action = allowed(e, this.settings.keys), mod = this.getMod(e)): void {\n if (action === false) return;\n action && this.ctlr.plug(\"settings.overlay\")?.show();\n const hook = this.getHook(\"keydown\", action as string);\n hook && this.ctlr.throttle(\"keyDown\", () => this.ctlr.runAction(hook, e, mod), 30);\n }\n protected handleKeyUp(e: KeyboardEvent, action = allowed(e, this.settings.keys), mod = this.getMod(e)): void {\n if (action === false) return;\n action ? this.ctlr.plug(\"settings.overlay\")?.show() : this.teachBasics();\n const hook = this.getHook(\"keyup\", action as string);\n hook && this.ctlr.runAction(hook, e, mod);\n }\n\n protected handlePlayTriggerDown(e?: KeyboardEvent): void {\n if (!e) return (this.media.intent.paused = !this.media.state.paused), this.ctlr.plug(\"settings.notifiers\")?.notify(this.media.intent.paused ? \"mediapause\" : \"mediaplay\");\n this.playTriggerSeq++;\n this.playTriggerSeq === 1 && (e.currentTarget as Window | null)?.addEventListener(\"keyup\", this.handlePlayTriggerUp, { signal: this.signal });\n this.playTriggerSeq === 2 && this.settings.fastPlay.key && this.ctlr.plug(\"settings.fastPlay\")?.fastPlay(e.shiftKey ? \"backwards\" : \"forwards\");\n }\n\n protected handlePlayTriggerUp(e: KeyboardEvent, action = allowed(e, this.settings.keys)): void {\n action && this.ctlr.plug(\"settings.overlay\")?.show();\n if (action !== false && [\" \", \"playPause\"].includes(action as string)) {\n e.stopImmediatePropagation();\n if (this.playTriggerSeq === 1) this.media.intent.paused = !this.media.state.paused;\n this.ctlr.plug(\"settings.notifiers\")?.notify(this.media.intent.paused ? \"mediapause\" : \"mediaplay\");\n }\n const fastPlug = this.ctlr.plug(\"settings.fastPlay\");\n if (fastPlug?.speedCheck && this.playTriggerSeq > 1 && !fastPlug?.speedPtrCheck) fastPlug.slowDown();\n this.playTriggerSeq = 0;\n (e.currentTarget as Window | null)?.removeEventListener(\"keyup\", this.handlePlayTriggerUp);\n }\n\n protected handleEscape(): void {\n this.ctlr.isUIActive(\"miniplayer\") && (this.media.intent.miniplayer = false);\n (this.ctlr.isUIActive(\"pictureInPicture\") || this.ctlr.isUIActive(\"floatingPlayer\")) && (this.media.intent.pictureInPicture = false);\n }\n\n protected handleArrowLeft(_: KeyboardEvent, mod: KeyMod): void {\n this.ctlr.plug(\"settings.gesture\")?.stopSkipPersist();\n this.ctlr.plug(\"settings.time\")?.skip(-this.getModded(\"skip\", mod, 5));\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"bwd\");\n }\n protected handleArrowRight(_: KeyboardEvent, mod: KeyMod): void {\n this.ctlr.plug(\"settings.gesture\")?.stopSkipPersist();\n this.ctlr.plug(\"settings.time\")?.skip(this.getModded(\"skip\", mod, 5));\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"fwd\");\n }\n protected handleArrowUp(_: KeyboardEvent, mod: KeyMod): void {\n this.ctlr.plug(\"settings.volume\")?.changeAptValue(this.getModded(\"volume\", mod, 5));\n this.media.features.volume && this.ctlr.plug(\"settings.notifiers\")?.notify(\"volumeup\");\n }\n protected handleArrowDown(_: KeyboardEvent, mod: KeyMod): void {\n this.ctlr.plug(\"settings.volume\")?.changeAptValue(-this.getModded(\"volume\", mod, 5));\n this.media.features.volume && this.ctlr.plug(\"settings.notifiers\")?.notify(!this.media.state.volume ? \"volumemuted\" : \"volumedown\");\n }\n\n public setEventListeners(action: \"add\" | \"remove\" = \"add\"): void {\n const ws = this.getWindows();\n for (const w of ws) w.removeEventListener(\"keydown\", this.handleKeyDown), w.removeEventListener(\"keyup\", this.handleKeyUp);\n if (action === \"remove\" || !this.shouldListen()) return;\n for (const w of ws) w.addEventListener(\"keydown\", this.handleKeyDown, { signal: this.signal });\n for (const w of ws) w.addEventListener(\"keyup\", this.handleKeyUp, { signal: this.signal });\n }\n public syncEventListeners(): void {\n this.setEventListeners(this.shouldListen() ? \"add\" : \"remove\");\n }\n protected shouldListen(): boolean {\n return this.ctlr.payload.wired && this.ctlr.state.mediaIntersecting && !this.ctlr.config.disabled && !this.config.disabled && !this.media.state.locked;\n }\n\n protected getWindows(): Window[] {\n const floating = this.ctlr.plug(\"settings.modes\")?.pictureInPicture?.floatingWindow;\n return floating ? [floating, window] : [window];\n }\n protected getMod(e: KeyboardEvent): KeyMod {\n return this.config.mods.disabled ? \"\" : e.ctrlKey ? \"ctrl\" : e.altKey ? \"alt\" : e.shiftKey ? \"shift\" : \"\";\n }\n public getModded(action: keyof KeyShortcutMods, mod: KeyMod, base: number): number {\n return mod ? this.config.mods[action]?.[mod] ?? base : base;\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.keys\": typeof KeysPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n keys: KeysConfig;\n }\n}\n","import { IS_MOBILE } from \"@utils/env\";\r\nimport { LockedConfig } from \"./types\";\r\n\r\nexport const LOCKED_BUILD: Partial<LockedConfig> = {\r\n disabled: !IS_MOBILE,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { LockedConfig, LockedState } from \"./types\";\r\nimport { LOCKED_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { ScreenLockButton } from \"@components/screenlock\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { setTimeout, mockAsync } from \"@utils/fn\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport { CtlrMedia } from \"@defs/contract\";\r\nimport { CtlrConfig } from \"@defs/config\";\r\n\r\nexport class LockedPlug extends BasePlug<LockedConfig, LockedState> {\r\n public static readonly plugName = \"locked\";\r\n public static readonly BUILD = LOCKED_BUILD;\r\n public lockOverlayDelayId = -1;\r\n public wrapper!: HTMLDivElement;\r\n public control: ScreenLockButton | null = null;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.locked) {\r\n super(ctlr, config, { visible: false });\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.wrapper = createEl(\"div\", { className: \"tmg-media-screen-locked-wrapper\", innerHTML: `<p>Screen Locked</p><p>Tap to Unlock</p>` });\r\n this.control = ComponentRegistry.init(\"screenlock\", this.ctlr);\r\n // DOM Injection\r\n this.ctlr.DOM.containerContentWrapper?.append(this.wrapper);\r\n }\r\n public override unmount(): void {\r\n this.wrapper.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.media.container.addEventListener(\"click\", this.handleScreenClick, { signal: this.signal });\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.locked ||= !this.config.disabled), { init: true, signal: this.signal });\r\n // ---------- Listeners\r\n this.media.on(\"intent.locked\", this.handleLockedIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.locked.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.locked.disabled\">): void {\r\n this.media.features.locked = !value;\r\n if (value && this.ctlr.isUIActive(\"locked\")) this.media.intent.locked = false;\r\n }\r\n\r\n protected handleLockedIntent(e: REvent<CtlrMedia, \"intent.locked\">): void {\r\n if (e.resolved) return;\r\n const active = this.ctlr.isUIActive(\"locked\");\r\n e.value && !active ? this.enter() : active && this.exit();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected enter(): void {\r\n this.ctlr.plug(\"settings.settingsView\")?.leaveView();\r\n setTimeout(this.showOverlay, 0, this.signal);\r\n this.media.container.classList.add(\"tmg-media-locked\", \"tmg-media-progress-bar\");\r\n // this.ctlr.plug(\"settings.overlay\")?.hide(\"force\"), this.ctlr.plug(\"settings.keys\")?.setEventListeners(\"remove\");\r\n } // #STANDALONE: suitable partner courtesy\r\n\r\n protected async exit(): Promise<void> {\r\n this.removeOverlay();\r\n await mockAsync(parseCSSTime(this.settings.css.switchTransitionTime));\r\n this.media.container.classList.toggle(\"tmg-media-progress-bar\", this.settings.controlPanel.progressBar);\r\n this.media.container.classList.remove(\"tmg-media-locked\");\r\n // this.ctlr.plug(\"settings.overlay\")?.show(), this.ctlr.plug(\"settings.keys\")?.setEventListeners();\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected handleScreenClick(): void {\r\n if (!this.config.disabled) this.state.visible ? this?.removeOverlay() : this?.showOverlay();\r\n }\r\n\r\n public showOverlay(): void {\r\n this.media.container.classList.add(\"tmg-media-locked-overlay\");\r\n this.state.visible = true;\r\n this.delayOverlay();\r\n }\r\n\r\n public removeOverlay(): void {\r\n this.media.container.classList.remove(\"tmg-media-locked-overlay\");\r\n this.state.visible = false;\r\n }\r\n\r\n public delayOverlay(): void {\r\n clearTimeout(this.lockOverlayDelayId);\r\n this.lockOverlayDelayId = setTimeout(this.removeOverlay, this.settings.overlay.delay, this.signal);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.control?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.locked\": typeof LockedPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n locked: LockedConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { MetadataConfig } from \"./types\";\r\n\r\nexport const METADATA_BUILD: DeepPartial<MetadataConfig> = {\r\n autoGenerate: true,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { MetadataConfig } from \"./types\";\r\nimport { METADATA_BUILD } from \"./build\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { queryPictureInPicture } from \"@utils/dom\";\r\n\r\nexport class MetadataPlug extends BasePlug<MetadataConfig> {\r\n public static readonly plugName = \"metadata\";\r\n public static readonly BUILD = METADATA_BUILD;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"settings.metadata.title\", this.forwardTitle, { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n this.media.watch(\"settings.metadata.artist\", this.forwardArtist, { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n this.media.watch(\"settings.metadata.profile\", this.forwardProfile, { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.syncSession(), { signal: this.signal });\r\n this.media.on(\"state.poster\", this.handlePoster, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.loadedMetadata\", this.autoGenerate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata.links.title\", this.handleMetadataLinksSetting, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata.links.artist\", this.handleMetadataLinksSetting, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata.links.profile\", this.handleMetadataLinksSetting, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata\", () => !this.media.state.paused && this.syncSession(), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected forwardTitle(value: string): void {\r\n this.settings.controlPanel.title = value;\r\n }\r\n protected forwardArtist(value: string): void {\r\n this.settings.controlPanel.artist = value;\r\n }\r\n protected forwardProfile(value: string): void {\r\n this.settings.controlPanel.profile = value;\r\n }\r\n\r\n protected handleMetadataLinksSetting({ target: { key, value } }: REvent<CtlrMedia, \"settings.metadata.links.title\" | \"settings.metadata.links.artist\" | \"settings.metadata.links.profile\">): void {\r\n const el = key !== \"profile\" ? (this.ctlr.DOM[`media${capitalize(key)}`] as HTMLAnchorElement) : (this.ctlr.DOM.mediaProfile as HTMLImageElement)?.parentElement;\r\n if (el) for (const [attr, val] of Object.entries({ href: value, \"tab-index\": value ? \"0\" : null, target: value ? \"_blank\" : null, rel: value ? \"noopener noreferrer\" : null })) val ? el.setAttribute(attr, val) : el.removeAttribute(attr);\r\n }\r\n\r\n protected handlePoster({ value }: REvent<CtlrMedia, \"state.poster\">): void {\r\n if (this.media.settings.metadata.allowOverride) this.media.settings.metadata.artwork = value ? [{ src: value }] : [];\r\n }\r\n\r\n public syncSession(): void {\r\n if (!navigator.mediaSession || (queryPictureInPicture() && !this.ctlr.isUIActive(\"pictureInPicture\"))) return;\r\n navigator.mediaSession.metadata = new MediaMetadata(this.media.settings.metadata as MediaMetadataInit);\r\n const set = (...args: Parameters<typeof navigator.mediaSession.setActionHandler>) => navigator.mediaSession.setActionHandler(...args),\r\n [timePlug, listPlug, playlist] = [this.ctlr.plug(\"settings.time\"), this.ctlr.plug(\"playlist\"), this.ctlr.config.playlist.content];\r\n set(\"play\", () => (this.media.intent.paused = false));\r\n set(\"pause\", () => (this.media.intent.paused = true));\r\n set(\"seekbackward\", timePlug ? () => timePlug.skip(-this.settings.time.skip) : null);\r\n set(\"seekforward\", timePlug ? () => timePlug.skip(this.settings.time.skip) : null);\r\n set(\"previoustrack\", playlist && (listPlug?.state.currIdx ?? 0) > 0 && listPlug ? listPlug.previous : null);\r\n set(\"nexttrack\", playlist && (listPlug?.state.currIdx ?? 0) < (playlist.length ?? 0) - 1 && listPlug ? listPlug.next : null);\r\n }\r\n\r\n public async autoGenerate(): Promise<void> {\r\n const url = this.media.state.poster;\r\n if (!this.config.autoGenerate || (url && !url.startsWith(\"blob:\"))) return;\r\n const frame = await this.ctlr.plug(\"settings.frame\")?.extract(\"\", this.ctlr.config.lightState.preview.time);\r\n silence(() => (this.media.intent.poster = frame?.url || \"\")), url && URL.revokeObjectURL(url);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.metadata\": typeof MetadataPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface CtlrConfig {\r\n metadata: MetadataConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { ModesFullscreenConfig, ModesPictureInPictureConfig, ModesMiniplayerConfig, ModesConfig, ModesTheaterConfig } from \"./types\";\r\nimport { capitalize, uncamelize } from \"@utils/str\";\r\n\r\nexport const ORIENTATION_OPTIONS = [\"auto\", \"landscape\", \"portrait\", \"portrait-primary\", \"portrait-secondary\", \"landscape-primary\", \"landscape-secondary\"] as const;\r\n\r\nexport const MODES_FULLSCREEN_BUILD: Partial<ModesFullscreenConfig> = {\r\n disabled: false,\r\n orientationLock: {\r\n value: \"auto\",\r\n options: [{ value: false, display: \"Off\" }, ...ORIENTATION_OPTIONS.map((o) => ({ value: o, display: capitalize(uncamelize(o)) }))],\r\n },\r\n onRotate: {\r\n value: 90,\r\n options: [\r\n { value: false, display: \"Off\" },\r\n { value: 0, display: \"0° Portrait\" },\r\n { value: 90, display: \"90° Landscape\" },\r\n { value: 180, display: \"180° Inverted\" },\r\n { value: 270, display: \"270° Landscape\" },\r\n ],\r\n },\r\n};\r\n\r\nexport const MODES_THEATER_BUILD: Partial<ModesTheaterConfig> = {\r\n disabled: IS_MOBILE,\r\n};\r\n\r\nexport const MODES_PICTURE_IN_PICTURE_BUILD: Partial<ModesPictureInPictureConfig> = {\r\n disabled: false,\r\n floatingPlayer: {\r\n disabled: false,\r\n width: 500,\r\n height: 280,\r\n disallowReturnToOpener: false,\r\n preferInitialWindowPlacement: false,\r\n },\r\n};\r\n\r\nexport const MODES_MINIPLAYER_BUILD: Partial<ModesMiniplayerConfig> = {\r\n disabled: false,\r\n minWindowWidth: 240,\r\n};\r\n\r\nexport const MODES_BUILD: DeepPartial<ModesConfig> = {\r\n // fullscreen: MODES_FULLSCREEN_BUILD,\r\n // theater: MODES_THEATER_BUILD,\r\n // pictureInPicture: MODES_PICTURE_IN_PICTURE_BUILD,\r\n // miniplayer: MODES_MINIPLAYER_BUILD,\r\n};\r\n","import { BasePin } from \"../../base\";\r\nimport { MODES_FULLSCREEN_BUILD } from \"./build\";\r\nimport type { ModesFullscreenConfig, OrientationOption } from \"./types\";\r\nimport { ModesPlug } from \"./index\";\r\nimport { TERMINATOR, type REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { IS_IOS, IS_MOBILE } from \"@utils/env\";\r\nimport { enterFullscreen, exitFullscreen, queryFullscreenEl, supportsFullscreen } from \"@utils/dom\";\r\nimport { isBool, isFunc } from \"@utils/obj\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class ModesFullscreenPin extends BasePin<ModesPlug, ModesFullscreenConfig> {\r\n public static readonly pinName = \"fullscreen\";\r\n public static get Plug() {\r\n return ModesPlug;\r\n }\r\n public static readonly BUILD = MODES_FULLSCREEN_BUILD;\r\n public inFullscreen = false; // a quick notice flag for external deps\r\n protected shadowFullscreen = false;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.watch(\"docInFullscreen\", this.onDocInFullscreen, { signal: this.signal });\r\n this.ctlr.state.watch(\"screenOrientation\", this.onScreenOrientation, { signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.fullscreen\", this.handleFullscreenIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.set(\"state.fullscreen\", (v) => (v !== this.shadowFullscreen && !IS_IOS ? TERMINATOR : v), { signal: this.signal }); // #DICTATOR: reliable authority\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.modes.fullscreen.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"fullscreen\", { keyboard: { phase: \"keyup\" } });\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.modes.fullscreen.disabled\">): void {\r\n this.syncFeatures();\r\n if (value && this.ctlr.isUIActive(\"fullscreen\")) this.media.intent.fullscreen = false;\r\n }\r\n\r\n protected handleFullscreenIntent(e: REvent<CtlrMedia, \"intent.fullscreen\">): void {\r\n if (e.resolved || IS_IOS) return;\r\n if (e.value && !this.inFullscreen) {\r\n const fW = this.ctlr.plug(\"settings.modes\")?.pictureInPicture?.floatingWindow;\r\n if (this.ctlr.isUIActive(\"floatingPlayer\")) return fW?.addEventListener(\"pagehide\", this.enter, { signal: this.signal }), fW?.close(), e.resolve(this.name);\r\n if (this.ctlr.isUIActive(\"pictureInPicture\")) silence(() => (this.media.intent.pictureInPicture = false));\r\n if (this.ctlr.isUIActive(\"miniplayer\")) silence(() => (this.media.intent.miniplayer = false));\r\n this.enter();\r\n } else if (this.inFullscreen) {\r\n exitFullscreen(this.media.container);\r\n this.inFullscreen = this.shadowFullscreen = false;\r\n }\r\n e.resolve(this.name);\r\n }\r\n protected async enter(): Promise<void> {\r\n await enterFullscreen(this.media.container);\r\n this.inFullscreen = true;\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected onDocInFullscreen(docInFs: boolean): void {\r\n const inFs = docInFs && queryFullscreenEl() === this.media.container;\r\n if (inFs) {\r\n this.media.container.classList.add(\"tmg-media-fullscreen\");\r\n this.media.state.fullscreen = this.shadowFullscreen = true;\r\n if (IS_MOBILE) this.changeScreenOrientation(this.config.orientationLock.value);\r\n } else if (this.ctlr.isUIActive(\"fullscreen\")) {\r\n this.media.container.classList.remove(\"tmg-media-fullscreen\");\r\n this.inFullscreen = this.media.intent.locked = false;\r\n this.ctlr.plug(\"settings.modes\")?.miniplayer?.toggle();\r\n this.media.state.fullscreen = this.shadowFullscreen = false;\r\n }\r\n }\r\n\r\n protected onScreenOrientation(orientation: { angle: number }): void {\r\n if (!this.ctlr.state.mediaParentIntersecting || !IS_MOBILE || this.ctlr.state.readyState < 3 || this.config.onRotate.value === false || this.ctlr.isUIActive(\"fullscreen\") || this.ctlr.isUIActive(\"miniplayer\")) return; // #PATIENT: only after first play\r\n const deg = isBool(this.config.onRotate.value) ? 90 : parseInt(this.config.onRotate.value as unknown as string);\r\n if (orientation.angle === deg || orientation.angle === 360 - deg) this.media.intent.fullscreen = !this.media.state.fullscreen;\r\n }\r\n\r\n public async changeScreenOrientation(option: boolean | OrientationOption = true): Promise<void> {\r\n const orientation = screen.orientation as any;\r\n option === false ? orientation?.unlock?.() : await orientation?.lock?.(option === \"auto\" ? (this.media.status.videoHeight > this.media.status.videoWidth ? \"portrait\" : \"landscape\") : option !== true ? option : orientation?.angle === 0 ? \"landscape\" : \"portrait\");\r\n }\r\n\r\n public syncFeatures(): void {\r\n if (this.config.disabled) return void (this.media.features.fullscreen = this.media.features.fullscreenOrientation = false);\r\n this.media.features.fullscreen ||= supportsFullscreen();\r\n this.media.features.fullscreenOrientation ||= this.media.features.fullscreen && IS_MOBILE && isFunc(screen.orientation?.lock);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"modes.fullscreen\": typeof ModesFullscreenPin;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n fullscreenOrientation: boolean;\r\n }\r\n}\r\n","import { BasePin } from \"../../base\";\r\nimport { MODES_THEATER_BUILD } from \"./build\";\r\nimport { ModesPlug } from \"./index\";\r\nimport type { ModesTheaterConfig } from \"./types\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\n\r\nexport class ModesTheaterPin extends BasePin<ModesPlug, ModesTheaterConfig> {\r\n public static readonly pinName = \"theater\";\r\n public static get Plug() {\r\n return ModesPlug;\r\n }\r\n public static readonly BUILD = MODES_THEATER_BUILD;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.theater\", this.handleTheaterIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n // ---- Config ---------\r\n this.ctlr.config.on(\"settings.modes.theater.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"theater\", { keyboard: { phase: \"keyup\" } });\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.modes.theater.disabled\">): void {\r\n this.syncFeatures();\r\n if (value && this.ctlr.isUIActive(\"theater\")) this.media.intent.theater = false;\r\n }\r\n\r\n protected handleTheaterIntent(e: REvent<CtlrMedia, \"intent.theater\">): void {\r\n if (e.resolved || (e.value && (this.ctlr.isUIActive(\"fullscreen\") || this.ctlr.isUIActive(\"miniplayer\") || this.ctlr.isUIActive(\"floatingPlayer\")))) return;\r\n this.media.container.classList.toggle(\"tmg-media-theater\", e.value);\r\n this.media.state.theater = e.value;\r\n e.resolve(this.name);\r\n }\r\n\r\n public syncFeatures(): void {\r\n if (this.config.disabled) return void (this.media.features.theater = false);\r\n this.media.features.theater ||= true;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"modes.theater\": typeof ModesTheaterPin;\r\n }\r\n}\r\n","import { Controller } from \"@core/controller\";\r\nimport { Controllers } from \"./runtime\";\r\nimport { loadResource } from \"@utils/dom\";\r\nimport { isIter, isObj, setHTMLConfig } from \"@utils/obj\";\r\nimport { luid } from \"@utils/str\";\r\nimport { CONFIG_BUILD } from \"@consts/config\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { DeepPartial, Paths, PathValue } from \"sia-reactor\";\r\nimport { mergeObjs, parsePathObj } from \"sia-reactor/utils\";\r\nimport { MediaType } from \"@defs/generics\";\r\n\r\nexport type BuildParam = DeepPartial<CtlrConfig> & Record<Paths<CtlrConfig>, PathValue<CtlrConfig>>;\r\n\r\nexport class Player {\r\n private medium: HTMLMediaElement | null = null;\r\n private active: boolean = false;\r\n private _build: CtlrConfig = structuredClone(CONFIG_BUILD) as CtlrConfig;\r\n private controller: Controller | null = null;\r\n public get Controller() {\r\n return this.controller;\r\n }\r\n public get build(): CtlrConfig {\r\n return this._build;\r\n }\r\n public set build(build: BuildParam) {\r\n this.configure(build);\r\n }\r\n\r\n constructor(build: BuildParam = {} as BuildParam) {\r\n this.configure({ ...build, id: build.id ?? `${luid()}_Controller_${Controllers.length + 1}` });\r\n }\r\n\r\n private queryBuild(): boolean {\r\n return !this.active || (this.notice({ error: \"Already deployed the custom controls of your build configuration\", tip: \"Consider setting your build configuration before attaching your media element\" }), false);\r\n }\r\n public configure(build: BuildParam): void {\r\n if (this.queryBuild() && isObj(build)) this._build = mergeObjs(this._build, parsePathObj(build));\r\n }\r\n\r\n public async attach(medium: HTMLMediaElement) {\r\n if (isIter(medium)) return this.notice({ error: \"An iterable argument cannot be attached to the TMG media player\", tip: \"Consider looping the iterable argument to instantiate a new 'tmg.Player' for each\" });\r\n if (this.active) return medium;\r\n medium.tmgPlayer?.detach();\r\n Controllers.push(this.build.id as any); // dummy for liveness\r\n this.build.debug && console.time(`TMG Controller ${Controllers.length} Attach`);\r\n medium.tmgPlayer = this;\r\n this.medium = medium;\r\n await this.fetchOptions(), await this.deployController();\r\n this.build.debug && console.timeEnd(`TMG Controller ${Controllers.indexOf(this.controller!) + 1} Attach`);\r\n return this.controller?.fire(\"tmgattach\", this.controller.payload), medium;\r\n }\r\n public detach() {\r\n if (!this.active) return;\r\n const medium = this.controller?.destroy() ?? ({} as any);\r\n this.controller && Controllers.splice(Controllers.indexOf(this.controller), 1);\r\n medium.classList?.remove(`tmg-${this.build.mediaType}`, \"tmg-media\", \"tmg-host\");\r\n medium.tmgcontrols = this.active = false;\r\n // this.controller?.fire(\"tmgdetach\", this.controller.payload);\r\n return (medium.tmgPlayer = this.controller = this.medium = null), medium;\r\n }\r\n\r\n public async fetchOptions() {\r\n if (!this.medium) return;\r\n if (this.medium.getAttribute(\"tmg\")?.includes(\".json\"))\r\n await fetch(this.medium.getAttribute(\"tmg\")!)\r\n .then((res) => {\r\n if (!res.ok) throw new Error(`JSON file not found at provided URL!. Status: ${res.status}`);\r\n return res.json();\r\n })\r\n .then((json) => this.configure(json))\r\n .catch(({ message }) => this.notice({ error: message, tip: \"A valid JSON file is required for parsing your build configuration\" }));\r\n const build = {} as BuildParam,\r\n attributes = this.medium.getAttributeNames().filter((attr) => attr.startsWith(\"tmg--\"));\r\n for (const attr of attributes) setHTMLConfig<BuildParam>(build, attr as any, this.medium!.getAttribute(attr)!);\r\n this.configure(build);\r\n }\r\n\r\n private async deployController() {\r\n if (this.active || !this.medium?.isConnected) return;\r\n if (!(this.medium instanceof HTMLMediaElement)) return this.notice({ error: `Could not deploy custom controls on the '${(this.medium as HTMLElement).tagName}' element as it is not supported`, warning: \"Only the 'VIDEO' and 'AUDIO' elements are currently supported\", tip: \"\" });\r\n this.build.mediaType = this.medium.tagName.toLowerCase() as MediaType;\r\n this.medium.controls = false;\r\n this.medium.tmgcontrols = this.active = true;\r\n this.medium.classList.add(`tmg-${this.build.mediaType}`, \"tmg-media\", \"tmg-host\");\r\n await Promise.all([loadResource(window.TMG_MEDIA_CSS_SRC!), loadResource(window.T007_TOAST_JS_SRC!, \"script\", { module: true }), loadResource(window.T007_INPUT_JS_SRC!, \"script\")]); // await\r\n Controllers[Controllers.indexOf(this.build.id as any)] = this.controller = new Controller(this.medium, this._build);\r\n }\r\n\r\n private notice({ error, warning, tip }: Partial<Record<\"error\" | \"warning\" | \"tip\", string>>): void {\r\n if (this.build.debug) error && console.error(`[TMG Player] ${error}`), warning && console.warn(`[TMG Player] ${warning}`), tip && console.info(`[TMG Player] ${tip}`);\r\n }\r\n}\r\n\r\nexport function getCtlrIdx(ctlr: Controller): number {\r\n const i = Controllers.indexOf(ctlr.config.id as any);\r\n return i === -1 ? Controllers.indexOf(ctlr) : i; // a magician never reveals his tricks :)\r\n}\r\n","import { Player } from \"./player\";\r\nimport { type Controller } from \"@core/controller\";\r\nimport { type Dimensions } from \"@defs/generics\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { queryFullscreen, observeMutation } from \"@utils/dom\";\r\nconst win = \"undefined\" !== typeof window ? window : undefined;\r\n\r\n// Defines states explicitly managed by the TMG Environment Observers\r\nexport interface CtlrState {\r\n readyState: number;\r\n audioContextReady: boolean;\r\n mediaIntersecting: boolean;\r\n mediaParentIntersecting: boolean;\r\n dimensions: { container: Dimensions & { tier: string }; pseudoContainer: Dimensions & { tier: string }; window: Dimensions };\r\n screenOrientation: { type: string; angle: number };\r\n docVisibilityState: DocumentVisibilityState;\r\n docInFullscreen: boolean;\r\n frameReadyPromise?: Promise<null> | null;\r\n}\r\n\r\n// --- GLOBAL STATE ---\r\nconst flagMutationSet = new WeakSet<HTMLElement>(); // weak set for true magic\r\nlet flagMutationId: number | undefined;\r\n// --- EXPORTS ---\r\nexport let AUDIO_CONTEXT: AudioContext | null = null;\r\nexport let AUDIO_LIMITER: DynamicsCompressorNode | null = null;\r\nexport let IS_DOC_TRANSIENT = false;\r\nexport const STATE_BUILD: CtlrState = { readyState: 0, audioContextReady: !!AUDIO_CONTEXT, mediaIntersecting: true, mediaParentIntersecting: true, dimensions: { container: { width: 0, height: 0, tier: \"x\" }, pseudoContainer: { width: 0, height: 0, tier: \"x\" }, window: { width: win?.innerWidth!, height: win?.innerHeight! } }, screenOrientation: { type: win?.screen?.orientation?.type ?? \"\", angle: win?.screen?.orientation?.angle ?? (win as any)?.orientation ?? 0 }, docVisibilityState: win?.document.visibilityState!, docInFullscreen: queryFullscreen() };\r\nexport const Controllers: Controller[] = [];\r\n\r\nexport function handleVidMutation(mutations: MutationRecord[]): void {\r\n for (const mutation of mutations) {\r\n if (mutation.type !== \"attributes\") continue;\r\n const target = mutation.target as HTMLMediaElement;\r\n if (mutation.attributeName === \"tmgcontrols\") !flagMutationSet.has(target) && (target.tmgcontrols = target.hasAttribute(\"tmgcontrols\"));\r\n else if (mutation.attributeName?.startsWith(\"tmg\")) target.hasAttribute(mutation.attributeName) && target.tmgPlayer?.fetchOptions();\r\n else if (mutation.attributeName === \"controls\") target.hasAttribute(\"tmgcontrols\") && target.removeAttribute(\"controls\");\r\n }\r\n}\r\n\r\nexport function handleDOMMutation(mutations: MutationRecord[]): void {\r\n for (const mutation of mutations) {\r\n for (const node of Array.from(mutation.addedNodes)) {\r\n if (!(node instanceof HTMLElement)) continue;\r\n const els = node.matches(\":is(video,audio):not(.tmg-host)\") ? [node] : node.querySelectorAll(\":is(video,audio):not(.tmg-host)\");\r\n for (const el of els) {\r\n observeMutation(el, handleVidMutation, { attributes: true });\r\n (el as HTMLMediaElement).tmgcontrols = el.hasAttribute(\"tmgcontrols\");\r\n }\r\n }\r\n for (const node of Array.from(mutation.removedNodes)) {\r\n if (!(node instanceof HTMLElement)) continue;\r\n const els = node.matches(\".tmg-host\") ? [node] : node.querySelectorAll(\".tmg-host\");\r\n for (const el of els) !(el as HTMLMediaElement).tmgPlayer?.Controller?.mutatingDOMM && (el as HTMLMediaElement).tmgPlayer?.detach();\r\n }\r\n }\r\n}\r\n\r\nfunction flagMutation(m: HTMLElement, check = true): void {\r\n !flagMutationSet.has(m) && check && flagMutationSet.add(m);\r\n}\r\n\r\nfunction freeMutation(m: HTMLElement): void {\r\n clearTimeout(flagMutationId);\r\n flagMutationId = setTimeout(() => !(flagMutationId = undefined) && flagMutationSet.delete(m));\r\n}\r\n\r\nexport function mountMedia() {\r\n if (\"undefined\" === typeof HTMLMediaElement) return;\r\n for (const el of [HTMLVideoElement, HTMLAudioElement])\r\n Object.defineProperty(el.prototype, \"tmgcontrols\", {\r\n get: function () {\r\n return this.hasAttribute(\"tmgcontrols\");\r\n },\r\n set: async function (value) {\r\n if (value) {\r\n flagMutation(this);\r\n await ((this as HTMLMediaElement).tmgPlayer || new Player()).attach(this);\r\n this.setAttribute(\"tmgcontrols\", \"\");\r\n freeMutation(this);\r\n } else {\r\n flagMutation(this, this.hasAttribute(\"tmgcontrols\"));\r\n this.removeAttribute(\"tmgcontrols\");\r\n (this as HTMLMediaElement).tmgPlayer?.detach();\r\n freeMutation(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n}\r\n\r\nexport function unmountMedia(): void {\r\n for (const el of [HTMLVideoElement, HTMLAudioElement]) delete (el.prototype as any).tmgcontrols;\r\n}\r\n\r\nexport function startAudioManager(): void {\r\n if (!AUDIO_CONTEXT && IS_DOC_TRANSIENT) {\r\n AUDIO_CONTEXT = new (win!.AudioContext || (win as any).webkitAudioContext)() as AudioContext;\r\n const L = (AUDIO_LIMITER = AUDIO_CONTEXT!.createDynamicsCompressor());\r\n (L.threshold.value = -1.0), (L.knee.value = 0.0), (L.ratio.value = 20), (L.attack.value = 0.001), (L.release.value = 0.05);\r\n for (const c of Controllers) if (c.state) c.state.audioContextReady = true;\r\n } else if (AUDIO_CONTEXT?.state === \"suspended\") AUDIO_CONTEXT.resume();\r\n}\r\n\r\nexport function connectMediaToAudioManager(medium: HTMLMediaElement) {\r\n if (!AUDIO_CONTEXT) return \"unavailable\";\r\n medium.mediaElementSourceNode ??= AUDIO_CONTEXT.createMediaElementSource(medium);\r\n medium._tmgGainNode ??= AUDIO_CONTEXT.createGain();\r\n medium._tmgDynamicsCompressorNode ??= AUDIO_CONTEXT.createDynamicsCompressor();\r\n medium.mediaElementSourceNode.connect(medium._tmgDynamicsCompressorNode);\r\n medium._tmgDynamicsCompressorNode.connect(medium._tmgGainNode);\r\n medium._tmgGainNode.connect(AUDIO_LIMITER!);\r\n AUDIO_LIMITER!.connect(AUDIO_CONTEXT!.destination);\r\n}\r\n\r\nexport function init(): void {\r\n mountMedia();\r\n for (const e of [\"click\", \"pointerdown\", \"keydown\"]) document.addEventListener(e, () => ((IS_DOC_TRANSIENT = true), startAudioManager()), true);\r\n for (const medium of document.querySelectorAll<HTMLMediaElement>(\"video,audio\")) {\r\n observeMutation(medium, handleVidMutation, { attributes: true });\r\n medium.tmgcontrols = medium.hasAttribute(\"tmgcontrols\");\r\n }\r\n observeMutation(document.documentElement, handleDOMMutation, { childList: true, subtree: true });\r\n win!.addEventListener(\"resize\", () => {\r\n for (const c of Controllers) if (c.state) (c.state.dimensions.window.width = win!.innerWidth), (c.state.dimensions.window.height = win!.innerHeight);\r\n });\r\n if (win?.screen?.orientation)\r\n win.screen.orientation.addEventListener(\"change\", ({ target }, t = target as ScreenOrientation) => {\r\n for (const c of Controllers) if (c.state) (c.state.screenOrientation.type = t.type), (c.state.screenOrientation.angle = t.angle);\r\n });\r\n else\r\n win?.addEventListener(\"orientationchange\", () => {\r\n for (const c of Controllers) if (c.state) c.state.screenOrientation.angle = (win as any).orientation || 0;\r\n });\r\n document.addEventListener(\"visibilitychange\", () => {\r\n for (const c of Controllers) if (c.state) c.state.docVisibilityState = document.visibilityState;\r\n });\r\n for (const e of [\"fullscreenchange\", \"webkitfullscreenchange\", \"mozfullscreenchange\", \"msfullscreenchange\"])\r\n document.addEventListener(e, (_, inFs = queryFullscreen()) => {\r\n for (const c of Controllers) if (c.state) c.state.docInFullscreen = inFs;\r\n });\r\n}\r\n","import { BasePin } from \"../../base\";\r\nimport { ModesPlug } from \"./index\";\r\nimport type { ModesPictureInPictureConfig } from \"./types\";\r\nimport { MODES_PICTURE_IN_PICTURE_BUILD } from \"./build\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { handleDOMMutation } from \"@tools/runtime\";\r\nimport { createEl, loadResource, observeMutation, supportsPictureInPicture } from \"@utils/dom\";\r\nimport { mockAsync, breath } from \"@utils/fn\";\r\nimport { isStr } from \"@utils/obj\";\r\nimport { isSameURL } from \"@utils/str\";\r\nimport { PiPPlaceholder } from \"@components/holders/pipplaceholder\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class ModesPictureInPicturePin extends BasePin<ModesPlug, ModesPictureInPictureConfig> {\r\n public static readonly pinName = \"pictureInPicture\";\r\n public static get Plug() {\r\n return ModesPlug;\r\n }\r\n public static readonly BUILD = MODES_PICTURE_IN_PICTURE_BUILD;\r\n public inFloatingPlayer = false; // a quick notice flag for external deps\r\n public floatingWindow: (Window & typeof globalThis) | null = null;\r\n protected placeholder: PiPPlaceholder | null = null;\r\n protected pseudoPlaceholder: PiPPlaceholder | null = null;\r\n public whitelist: string[] = [];\r\n public blacklist: string[] = [];\r\n\r\n public override mount(): void {\r\n // Utility Injection\r\n this.placeholder = ComponentRegistry.init(\"pipplaceholder\", this.ctlr);\r\n if ((window as any).documentPictureInPicture) this.pseudoPlaceholder = ComponentRegistry.init(\"pipplaceholder\", this.ctlr);\r\n this.placeholder?.mount(), this.pseudoPlaceholder && this.media.pseudoContainer.prepend(this.pseudoPlaceholder.el);\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.pictureInPicture\", this.handlePictureInPictureIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.on(\"state.pictureInPicture\", this.handlePictureInPictureState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.disablePictureInPicture\", this.syncFeatures, { signal: this.signal });\r\n // ---- Config ------\r\n this.ctlr.config.on(\"settings.modes.pictureInPicture.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.modes.pictureInPicture.floatingPlayer.disabled\", this.handleDisabled, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"pictureInPicture\", { keyboard: { phase: \"keyup\" } });\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.modes.pictureInPicture.disabled\" | \"settings.modes.pictureInPicture.floatingPlayer.disabled\">): void {\r\n this.syncFeatures();\r\n if (value && (this.ctlr.isUIActive(\"pictureInPicture\") || this.ctlr.isUIActive(\"floatingPlayer\"))) this.media.intent.pictureInPicture = false;\r\n }\r\n\r\n protected handlePictureInPictureIntent(e: REvent<CtlrMedia, \"intent.pictureInPicture\">): void {\r\n if (e.resolved) return;\r\n const pipActive = this.ctlr.isUIActive(\"pictureInPicture\");\r\n if (!this.ctlr.isNativeEl && this.config.floatingPlayer.disabled) return e.reject(this.name);\r\n if (this.ctlr.plug(\"settings.modes\")?.fullscreen?.inFullscreen) silence(() => (this.media.intent.fullscreen = false));\r\n if (!pipActive && this.media.features.floatingPlayer) {\r\n e.value && !this.inFloatingPlayer ? this.initFloatingPlayer() : this.floatingWindow?.close();\r\n e.resolve(this.name);\r\n } // tech will handle PiP toggle if not using floating player\r\n }\r\n\r\n protected async handlePictureInPictureState({ value }: REvent<CtlrMedia, \"state.pictureInPicture\">): Promise<void> {\r\n if (this.floatingWindow) return;\r\n if (value) {\r\n this.media.container.classList.add(\"tmg-media-picture-in-picture\"), this.media.pseudoContainer.classList.add(\"tmg-media-in-picture-in-picture\");\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n silence(() => (this.media.intent.miniplayer = false));\r\n this.ctlr.plug(\"settings.metadata\")?.syncSession();\r\n } else {\r\n await mockAsync(180);\r\n this.media.container.classList.remove(\"tmg-media-picture-in-picture\"), this.media.pseudoContainer.classList.remove(\"tmg-media-in-picture-in-picture\");\r\n this.ctlr.plug(\"settings.modes\")?.miniplayer?.toggle();\r\n this.ctlr.plug(\"settings.overlay\")?.delay();\r\n }\r\n }\r\n\r\n protected async initFloatingPlayer(): Promise<void> {\r\n if (this.inFloatingPlayer) return;\r\n (window as any).documentPictureInPicture?.window?.close?.();\r\n silence(() => (this.media.intent.miniplayer = false));\r\n this.floatingWindow = await (window as any).documentPictureInPicture.requestWindow(this.config.floatingPlayer);\r\n this.inFloatingPlayer = true;\r\n this.floatingWindow!.document.documentElement.style.cssText = `height:100%; background:url(${this.media.settings.metadata.profile}) center / 32px no-repeat, url(${this.media.state.poster}) center / ${this.settings.css.bgObjectFit} no-repeat, black;`;\r\n await breath(this.floatingWindow!); // rendering style to keep UI visible during heavy lifting\r\n const cssTexts = [],\r\n parse = (src: any) => (isStr(src) ? src : null),\r\n whitelist = this.whitelist.concat([parse(window.TMG_MEDIA_CSS_SRC), parse(window.T007_TOAST_CSS_SRC), parse(window.T007_INPUT_CSS_SRC), parse(window.T007_DIALOG_CSS_SRC)].filter(Boolean) as string[]); // CSS too experimental; needs a link (href) :)\r\n for (const sheet of document.styleSheets) {\r\n try {\r\n const nope = (src: string) => isSameURL(src, sheet.href);\r\n if (!whitelist.some(nope) && !this.blacklist.some(nope)) for (const cssRule of sheet.cssRules) if ((cssRule as CSSStyleRule).selectorText?.includes(\":root\") || cssRule.cssText.includes(\"tmg\") || cssRule.cssText.includes(\"t007\")) cssTexts.push(cssRule.cssText);\r\n } catch {\r\n continue;\r\n }\r\n }\r\n this.floatingWindow!.document.head.append(createEl(\"style\", { textContent: cssTexts.join(\"\\n\") }));\r\n await Promise.all(whitelist.map((href) => href.includes(\".css\") && loadResource(href, \"style\", undefined, this.floatingWindow!)));\r\n this.ctlr.plug(\"skeleton\")?.enterPseudoMode();\r\n this.media.container.classList.add(\"tmg-media-floating-player\", \"tmg-media-progress-bar\"), this.media.pseudoContainer.classList.add(\"tmg-media-in-floating-player\");\r\n this.floatingWindow!.document.body.append(this.media.container);\r\n this.floatingWindow!.document.documentElement.id = document.documentElement.id;\r\n this.floatingWindow!.document.documentElement.className = document.documentElement.className;\r\n for (const attr of document.documentElement.getAttributeNames()) this.floatingWindow!.document.documentElement.setAttribute(attr, document.documentElement.getAttribute(attr)!);\r\n this.signal.addEventListener(\"abort\", observeMutation(this.floatingWindow!.document.documentElement, handleDOMMutation, { childList: true, subtree: true }), { once: true });\r\n this.floatingWindow!.addEventListener(\"resize\", this.handleFloatingPlayerResize, { signal: this.signal });\r\n this.floatingWindow!.addEventListener(\"pagehide\", this.handleFloatingPlayerClose, { signal: this.signal });\r\n this.ctlr.plug(\"settings.keys\")?.setEventListeners();\r\n this.media.state.pictureInPicture = true;\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected handleFloatingPlayerResize(): void {\r\n if (!this.config.floatingPlayer.preferInitialWindowPlacement) return;\r\n this.config.floatingPlayer.width = this.floatingWindow?.innerWidth ?? this.config.floatingPlayer.width;\r\n this.config.floatingPlayer.height = this.floatingWindow?.innerHeight ?? this.config.floatingPlayer.height;\r\n }\r\n\r\n protected handleFloatingPlayerClose(): void {\r\n this.inFloatingPlayer = false;\r\n this.floatingWindow = null;\r\n this.media.container.classList.toggle(\"tmg-media-progress-bar\", this.settings.controlPanel.progressBar);\r\n this.media.container.classList.remove(\"tmg-media-floating-player\"), this.media.pseudoContainer.classList.remove(\"tmg-media-in-floating-player\");\r\n this.ctlr.plug(\"skeleton\")?.leavePseudoMode();\r\n this.ctlr.plug(\"settings.modes\")?.miniplayer?.toggle();\r\n this.media.state.pictureInPicture = false;\r\n }\r\n\r\n public syncFeatures(): void {\r\n if (this.config.disabled) return void (this.media.features.pictureInPicture = this.media.features.floatingPlayer = false);\r\n if (!this.config.floatingPlayer.disabled) this.media.features.floatingPlayer ||= (window as any).documentPictureInPicture && this.ctlr.isNativeEl;\r\n else this.media.features.floatingPlayer = false;\r\n this.media.features.pictureInPicture ||= this.ctlr.isNativeEl && ((supportsPictureInPicture() && !this.media.state.disablePictureInPicture) || this.media.features.floatingPlayer);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.floatingWindow?.close(), this.placeholder?.destroy(), this.pseudoPlaceholder?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"modes.pictureInPicture\": typeof ModesPictureInPicturePin;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n floatingPlayer: boolean;\r\n }\r\n}\r\n","import { BasePin } from \"../../base\";\r\nimport { MODES_MINIPLAYER_BUILD } from \"./build\";\r\nimport type { ModesMiniplayerConfig } from \"./types\";\r\nimport { ModesPlug } from \"./index\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { inDocView, getWindow } from \"@utils/dom\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { clamp } from \"@utils/num\";\r\nimport { INTERACTIVE_SELECTOR } from \"@t007/utils\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class ModesMiniplayerPin extends BasePin<ModesPlug, ModesMiniplayerConfig> {\r\n public static readonly pinName = \"miniplayer\";\r\n public static get Plug() {\r\n return ModesPlug;\r\n }\r\n public static readonly BUILD = MODES_MINIPLAYER_BUILD;\r\n protected lastMiniplayerPosX = 0;\r\n protected lastMiniplayerPosY = 0;\r\n protected lastMiniplayerPtrX = 0;\r\n protected lastMiniplayerPtrY = 0;\r\n protected nextMiniplayerX = \"\";\r\n protected nextMiniplayerY = \"\";\r\n protected wildMiniplayerX = \"\";\r\n protected wildMiniplayerY = \"\";\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.watch(\"dimensions.window.width\", () => !this.ctlr.isUIActive(\"fullscreen\") && this.toggle(), { signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.miniplayer\", this.handleMiniplayerIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.toggle(), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.on(\"mediaParentIntersecting\", () => this.ctlr.payload.wired && this.toggle(), { signal: this.signal }); // #HEAVY: waits for !lightState\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.modes.miniplayer.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.modes.miniplayer.disabled\">): void {\r\n this.syncFeatures();\r\n if (value && this.ctlr.isUIActive(\"miniplayer\")) this.media.intent.miniplayer = false;\r\n }\r\n\r\n protected handleMiniplayerIntent(e: REvent<CtlrMedia, \"intent.miniplayer\">): void {\r\n if (e.resolved) return;\r\n const active = this.ctlr.isUIActive(\"miniplayer\");\r\n e.value && !active ? this.enter() : active && this.exit();\r\n e.resolve(this.name); // btw this is a smart behavioral implementation rather than just a toggler\r\n }\r\n\r\n protected enter(): void {\r\n this.ctlr.plug(\"skeleton\")?.enterPseudoMode();\r\n this.media.container.classList.add(\"tmg-media-miniplayer\", \"tmg-media-progress-bar\"), this.media.pseudoContainer.classList.add(\"tmg-media-in-miniplayer\");\r\n for (const type of [\"mousedown\", \"touchstart\"]) this.media.container.addEventListener(type, this.handleDragStart, { signal: this.signal });\r\n this.media.state.miniplayer = true;\r\n } // #STANDALONE: partner courtesy\r\n\r\n protected exit(behavior?: ScrollBehavior): void {\r\n if (behavior && inDocView(this.media.pseudoContainer)) this.media.pseudoContainer.scrollIntoView({ behavior, block: \"center\", inline: \"center\" });\r\n this.ctlr.plug(\"skeleton\")?.leavePseudoMode();\r\n this.media.container.classList.remove(\"tmg-media-miniplayer\"), this.media.pseudoContainer.classList.remove(\"tmg-media-in-miniplayer\");\r\n this.media.container.classList.toggle(\"tmg-media-progress-bar\", this.settings.controlPanel.progressBar);\r\n for (const type of [\"mousedown\", \"touchstart\"]) this.media.container.removeEventListener(type, this.handleDragStart);\r\n this.media.state.miniplayer = false;\r\n } // #STANDALONE: needs scoped behavior\r\n public expand(): void {\r\n this.media.container.classList.contains(\"tmg-media-miniplayer\") && this.exit(\"smooth\");\r\n }\r\n public remove(): void {\r\n silence(() => (this.media.intent.paused = true)), this.exit();\r\n }\r\n\r\n public toggle(bool?: boolean): void {\r\n const active = this.ctlr.isUIActive(\"miniplayer\");\r\n if (!active && (bool === true || this.shouldEnter())) this.media.intent.miniplayer = true;\r\n else if (active && (bool === false || this.shouldExit())) this.media.intent.miniplayer = false;\r\n }\r\n public shouldEnter(): boolean {\r\n const modes = this.ctlr.plug(\"settings.modes\");\r\n return !this.ctlr.isUIActive(\"pictureInPicture\") && !modes?.pictureInPicture?.inFloatingPlayer && !modes?.fullscreen?.inFullscreen && !this.ctlr.state.mediaParentIntersecting && getWindow(this.media.container).innerWidth >= this.config.minWindowWidth && !this.media.state.paused;\r\n }\r\n public shouldExit(): boolean {\r\n return this.ctlr.state.mediaParentIntersecting || getWindow(this.media.container).innerWidth < this.config.minWindowWidth;\r\n }\r\n\r\n protected handleDragStart(e: globalThis.Event): void {\r\n const target = e.target as HTMLElement,\r\n clientX = (e as MouseEvent).clientX ?? (e as TouchEvent).targetTouches?.[0]?.clientX ?? 0,\r\n clientY = (e as MouseEvent).clientY ?? (e as TouchEvent).targetTouches?.[0]?.clientY ?? 0;\r\n if (!this.ctlr.isUIActive(\"miniplayer\") || target.scrollWidth >= target.clientWidth + 3 || [this.ctlr.DOM.topControlsWrapper, this.ctlr.DOM.bottomControlsWrapper, this.ctlr.DOM.captionsContainer].some((w) => w?.contains(target)) || target.closest(`:is(${INTERACTIVE_SELECTOR},[class$='toast-container'])`)) return;\r\n const { left, bottom } = getComputedStyle(this.media.container);\r\n (this.lastMiniplayerPosX = parseFloat(left)), (this.lastMiniplayerPosY = parseFloat(bottom));\r\n (this.lastMiniplayerPtrX = clientX), (this.lastMiniplayerPtrY = clientY);\r\n (this.nextMiniplayerX = this.settings.css.currentMiniplayerX as string), (this.nextMiniplayerY = this.settings.css.currentMiniplayerY as string);\r\n (this.wildMiniplayerX = this.nextMiniplayerX), (this.wildMiniplayerY = this.nextMiniplayerY);\r\n document.addEventListener(\"mousemove\", this.handleDragging, { signal: this.signal });\r\n document.addEventListener(\"touchmove\", this.handleDragging, { passive: false, signal: this.signal });\r\n for (const type of [\"mouseup\", \"mouseleave\", \"touchend\", \"touchcancel\"]) document.addEventListener(type, this.handleDragEnd, { signal: this.signal });\r\n this.media.container.style.setProperty(\"transition\", \"none\", \"important\");\r\n }\r\n\r\n protected handleDragging(e: globalThis.Event): void {\r\n if ((e as TouchEvent).touches?.length > 1) return;\r\n e.preventDefault();\r\n this.ctlr.plug(\"settings.overlay\")?.hide(\"force\");\r\n this.media.container.classList.add(\"tmg-media-player-dragging\");\r\n this.ctlr.RAFLoop(\"miniplayerDragging\", () => {\r\n const x = (e as MouseEvent).clientX ?? (e as TouchEvent).changedTouches?.[0]?.clientX ?? 0,\r\n y = (e as MouseEvent).clientY ?? (e as TouchEvent).changedTouches?.[0]?.clientY ?? 0;\r\n if (this.prevEX === x && this.prevEY === y) return; // #CONSERVATION: peak stays peak\r\n (this.prevEX = x), (this.prevEY = y);\r\n const { innerWidth: ww, innerHeight: wh } = window,\r\n { offsetWidth: w, offsetHeight: h } = this.media.container,\r\n newX = this.lastMiniplayerPosX + (x - this.lastMiniplayerPtrX),\r\n newY = this.lastMiniplayerPosY - (y - this.lastMiniplayerPtrY),\r\n posX = clamp(w / 2, newX, ww - w / 2),\r\n posY = clamp(h / 2, newY, wh - h / 2);\r\n this.media.container.style.setProperty(\"transform\", `translate(${x - this.lastMiniplayerPtrX}px, ${y - this.lastMiniplayerPtrY}px)`, \"important\");\r\n (this.nextMiniplayerX = `${(posX / ww) * 100}%`), (this.nextMiniplayerY = `${(posY / wh) * 100}%`);\r\n (this.wildMiniplayerX = `${(newX / ww) * 100}%`), (this.wildMiniplayerY = `${(newY / wh) * 100}%`);\r\n });\r\n }\r\n private prevEX?: number;\r\n private prevEY?: number;\r\n\r\n protected handleDragEnd(): void {\r\n this.ctlr.cancelRAFLoop(\"miniplayerDragging\");\r\n this.media.container.classList.remove(\"tmg-media-player-dragging\");\r\n this.media.container.style.setProperty(\"left\", this.wildMiniplayerX, \"important\");\r\n this.media.container.style.setProperty(\"bottom\", this.wildMiniplayerY, \"important\");\r\n this.media.container.style.removeProperty(\"transform\");\r\n setTimeout(() => ((this.settings.css.currentMiniplayerX = this.nextMiniplayerX), (this.settings.css.currentMiniplayerY = this.nextMiniplayerY), [\"transition\", \"left\", \"bottom\"].forEach((prop) => this.media.container.style.removeProperty(prop))), 0, this.signal);\r\n document.removeEventListener(\"mousemove\", this.handleDragging);\r\n document.removeEventListener(\"touchmove\", this.handleDragging);\r\n for (const type of [\"mouseup\", \"mouseleave\", \"touchend\", \"touchcancel\"]) document.removeEventListener(type, this.handleDragEnd);\r\n }\r\n\r\n public syncFeatures(): void {\r\n if (this.config.disabled) return void (this.media.features.miniplayer = false);\r\n this.media.features.miniplayer ||= this.ctlr.isNativeEl;\r\n }\r\n\r\n protected override onDestroy(): void {\r\n document.removeEventListener(\"mousemove\", this.handleDragging);\r\n document.removeEventListener(\"touchmove\", this.handleDragging);\r\n for (const type of [\"mouseup\", \"mouseleave\", \"touchend\", \"touchcancel\"]) document.removeEventListener(type, this.handleDragEnd);\r\n for (const type of [\"mousedown\", \"touchstart\"]) this.media.container.removeEventListener(type, this.handleDragStart);\r\n super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"modes.miniplayer\": typeof ModesMiniplayerPin;\r\n }\r\n}\r\n","import { Controller } from \"@core/controller\";\r\nimport { BasePlug } from \"../../base\";\r\nimport { ModesFullscreenPin } from \"./fullscreen\";\r\nimport { ModesTheaterPin } from \"./theater\";\r\nimport { ModesPictureInPicturePin } from \"./pictureInPicture\";\r\nimport { ModesMiniplayerPin } from \"./miniplayer\";\r\nimport type { ModesConfig } from \"./types\";\r\nimport { MODES_BUILD } from \"./build\";\r\nimport { PinRegistry } from \"@core/registries\";\r\n\r\nexport class ModesPlug extends BasePlug<ModesConfig> {\r\n public static readonly plugName = \"modes\";\r\n public static readonly BUILD = MODES_BUILD;\r\n public fullscreen?: ModesFullscreenPin;\r\n public theater?: ModesTheaterPin;\r\n public pictureInPicture?: ModesPictureInPicturePin;\r\n public miniplayer?: ModesMiniplayerPin;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.modes) {\r\n super(ctlr, config);\r\n const FullscreenPin = PinRegistry.get(\"modes.fullscreen\"),\r\n TheaterPin = PinRegistry.get(\"modes.theater\"),\r\n PictureInPicturePin = PinRegistry.get(\"modes.pictureInPicture\"),\r\n MiniplayerPin = PinRegistry.get(\"modes.miniplayer\");\r\n FullscreenPin && (this.fullscreen = new FullscreenPin(this.ctlr, this.config.fullscreen)), TheaterPin && (this.theater = new TheaterPin(this.ctlr, this.config.theater)), PictureInPicturePin && (this.pictureInPicture = new PictureInPicturePin(this.ctlr, this.config.pictureInPicture)), MiniplayerPin && (this.miniplayer = new MiniplayerPin(this.ctlr, this.config.miniplayer));\r\n }\r\n\r\n public override mount(): void {\r\n // Utility Injection\r\n this.fullscreen?.mount?.(), this.theater?.mount?.(), this.pictureInPicture?.mount?.(), this.miniplayer?.mount?.();\r\n }\r\n\r\n public override wire(): void {\r\n // Utility Injection\r\n this.fullscreen?.wire(), this.theater?.wire(), this.pictureInPicture?.wire(), this.miniplayer?.wire();\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.fullscreen?.destroy(), this.theater?.destroy(), this.pictureInPicture?.destroy(), this.miniplayer?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\nexport * from \"./fullscreen\";\r\nexport * from \"./theater\";\r\nexport * from \"./pictureInPicture\";\r\nexport * from \"./miniplayer\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.modes\": typeof ModesPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n modes: ModesConfig;\r\n }\r\n}\r\n","import { NotifiersConfig } from \"./types\";\r\n\r\nexport const NOTIFIERS_BUILD: Partial<NotifiersConfig> = {\r\n disabled: false,\r\n list: [\"playpausenotifier\", \"prevnextnotifier\", \"captionsnotifier\", \"capturenotifier\", \"playbackratenotifier\", \"fastplaynotifier\", \"volumenotifier\", \"brightnessnotifier\", \"objectfitnotifier\", \"fwdbwdnotifier\", \"scrubnotifier\", \"cancelscrubnotifier\", \"touchvolumenotifier\", \"touchbrightnessnotifier\", \"touchtimelinenotifier\", \"chapternotifier\", \"castnotifier\", \"airplaynotifier\", \"timernotifier\"] as const,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { NotifiersConfig, NotifiersState } from \"./types\";\r\nimport { NOTIFIERS_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { BaseNotifier } from \"@components/notifiers/base\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport type { ComponentRegistryMap } from \"@defs/registries\";\r\n\r\nexport class NotifiersPlug extends BasePlug<NotifiersConfig, NotifiersState> {\r\n public static readonly plugName = \"notifiers\";\r\n public static readonly BUILD = NOTIFIERS_BUILD;\r\n public components = new Map<string, BaseNotifier>();\r\n public container!: HTMLDivElement;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.notifiers) {\r\n super(ctlr, config, { events: [] }); // [\"mediaplay\", \"mediapause\", \"mediaprev\", \"medianext\", \"playbackrateup\", \"playbackratedown\", \"volumeup\", \"volumedown\", \"volumemuted\", \"brightnessup\", \"brightnessdown\", \"brightnessdark\", \"objectfitcontain\", \"objectfitcover\", \"objectfitfill\", \"captions\", \"capture\", \"theater\", \"fullscreen\", \"fwd\", \"bwd\"]\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.ctlr.DOM.notifiersContainer = this.container = createEl(\"div\", { className: \"tmg-media-notifiers-container\" }, { notify: \"\" });\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.container);\r\n // DOM -> Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.notifiers.list\", this.handleList, { init: true, signal: this.signal });\r\n }\r\n public override unmount(): void {\r\n this.container.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // State Listeners\r\n this.state.on(\"events\", this.handleEventsState, { init: true, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleEventsState({ currentTarget: { value: events = [] } }: REvent<NotifiersState, \"events\">): void {\r\n for (const eN of events) this.container.addEventListener(eN, this.handleEvent, { signal: this.signal });\r\n }\r\n\r\n protected handleList({ value: list = [] }: REvent<CtlrConfig, \"settings.notifiers.list\">): void {\r\n for (const id of list) !this.components.has(id) && this.initComp(id);\r\n }\r\n\r\n public initComp<K extends keyof ComponentRegistryMap>(name: K, comp?: InstanceType<ComponentRegistryMap[K]>): InstanceType<ComponentRegistryMap[K]> | undefined;\r\n public initComp<T extends BaseNotifier = BaseNotifier>(name: string, comp?: T): T | undefined;\r\n public initComp(name: string, comp = ComponentRegistry.init(name, this.ctlr)) {\r\n return comp ? (this.components.set(name, comp as BaseNotifier), comp) : undefined;\r\n }\r\n\r\n public comp<K extends keyof ComponentRegistryMap>(name: K): InstanceType<ComponentRegistryMap[K]> | undefined;\r\n public comp<T extends BaseNotifier = BaseNotifier>(name: string): T | undefined;\r\n public comp(name: string): BaseNotifier | undefined {\r\n return this.components.get(name);\r\n }\r\n public compEl<K extends keyof ComponentRegistryMap>(name: K): InstanceType<ComponentRegistryMap[K]>[\"element\"] | undefined;\r\n public compEl<T extends BaseNotifier = BaseNotifier>(name: string): T[\"element\"] | undefined;\r\n public compEl(name: string): HTMLElement | undefined {\r\n return this.components.get(name)?.element;\r\n }\r\n\r\n public handleEvent({ type: eN }: Event): void {\r\n this.reset(), this.ctlr.RAFLoop(\"notifying\", () => this.reset(eN), this.signal);\r\n }\r\n\r\n public reset(token = \"\", flush = false): void {\r\n flush && this.ctlr.cancelRAFLoop(\"notifying\");\r\n this.container.setAttribute(\"data-notify\", token);\r\n }\r\n\r\n public notify(key: string): void {\r\n if (!this.config.disabled) this.ctlr.fire(key, null, this.container);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.reset(\"\", true);\r\n for (const comp of this.components.values()) comp.destroy();\r\n this.components.clear();\r\n this.ctlr.DOM.notifiersContainer = null;\r\n super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.notifiers\": typeof NotifiersPlug;\r\n }\r\n interface ControllerDOMMap {\r\n notifiersContainer?: HTMLDivElement | null;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n notifiers: NotifiersConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport type { ObjectFitConfig } from \"./types\";\r\n\r\nexport const objectFits = [\"contain\", \"cover\", \"fill\"] as const;\r\n\r\nexport const OBJECT_FIT_BUILD: DeepPartial<ObjectFitConfig> = {\r\n options: [\r\n { value: \"contain\", display: \"Crop to fit\" },\r\n { value: \"cover\", display: \"Fit to screen\" },\r\n { value: \"fill\", display: \"Stretch\" },\r\n ]\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport { OBJECT_FIT_BUILD } from \"./build\";\r\nimport type { ObjectFitConfig, ObjectFit } from \"./types\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { rotateAny } from \"@utils/num\";\r\nimport { getUIOpt, parseUIOpts } from \"@utils/obj\";\r\nimport { getRenderedBox } from \"@utils/media\";\r\n\r\nexport class ObjectFitPlug extends BasePlug<ObjectFitConfig> {\r\n public static readonly plugName = \"objectFit\";\r\n public static readonly BUILD = OBJECT_FIT_BUILD;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.objectFit ||= true), { init: true, signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"intent.objectFit\", this.handleObjectFitIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.on(\"state.objectFit\", this.handleObjectFitState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State ---------\r\n this.ctlr.state.on(\"dimensions.container.width\", this.syncObjectSize, { init: true, signal: this.signal });\r\n this.ctlr.state.on(\"dimensions.container.height\", this.syncObjectSize, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.css.objectFit\", this.syncObjectSize, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.css.objectPosition\", this.syncObjectSize, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"objectFit\", { fn: this.rotateFit, keyboard: { phase: \"keydown\" } }), super.wire();\r\n }\r\n\r\n protected handleObjectFitIntent(e: REvent<CtlrMedia, \"intent.objectFit\">): void {\r\n if (e.resolved) return;\r\n this.media.state.objectFit = e.value || \"contain\";\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handleObjectFitState({ value: fit }: REvent<CtlrMedia, \"state.objectFit\">): void {\r\n this.settings.css.objectFit = this.media.container.dataset.objectFit = fit;\r\n this.settings.css.bgObjectFit = fit === \"fill\" ? \"100% 100%\" : fit; // prolly only 2 ppl on dis planet nd AI know dis trick\r\n }\r\n\r\n public get nextFit(): ObjectFit {\r\n return ({ contain: \"cover\", cover: \"fill\", fill: \"contain\" } as const)[this.media.state.objectFit];\r\n }\r\n public rotateFit(): void {\r\n this.media.intent.objectFit = rotateAny(this.media.state.objectFit, parseUIOpts(this.config.options!) as ObjectFit[]);\r\n this.media.features.objectFit && this.ctlr.plug(\"settings.notifiers\")?.notify(`objectfit${this.media.intent.objectFit}`); // must notify for visual aid\r\n }\r\n\r\n public toLabel(fit = this.media.state.objectFit): string {\r\n return getUIOpt(this.config.options, fit);\r\n }\r\n\r\n public syncObjectSize(): void {\r\n const { width = this.ctlr.state.dimensions.container.width, height = this.ctlr.state.dimensions.container.height, left, top } = getRenderedBox(this.media.status, this.ctlr.state.dimensions.container, this.settings.css as any); // just had to be u, video frame\r\n (this.settings.css.currentObjectHeight = height + \"px\"), (this.settings.css.currentObjectWidth = width + \"px\"), (this.settings.css.currentObjectTop = top + \"px\"), (this.settings.css.currentObjectLeft = left + \"px\");\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.objectFit\": typeof ObjectFitPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n objectFit: ObjectFitConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { OverlayConfig } from \"./types\";\nimport { DeepPartial } from \"sia-reactor\";\n\nexport const OVERLAY_BUILD: DeepPartial<OverlayConfig> = {\n delay: 3000,\n behavior: {\n value: \"strict\",\n options: [\n { value: \"strict\", display: \"Strict\" },\n { value: \"auto\", display: \"Auto\" },\n { value: \"persistent\", display: \"Persistent\" },\n { value: \"hidden\", display: \"Hidden\" },\n ]\n },\n curtain: {\n value: \"edged\",\n options: [\n { value: \"edged\", display: \"Edged\" },\n { value: \"cover\", display: \"Cover\" },\n { value: \"none\", display: \"None\" },\n ]\n }\n};\n","import { BasePlug } from \"../../base\";\r\nimport type { OverlayConfig } from \"./types\";\r\nimport { OVERLAY_BUILD } from \"./build\";\r\nimport type { OverlayState } from \"./types\";\r\nimport { Controller } from \"@core/controller\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { setTimeout } from \"@utils/fn\";\r\n\r\nexport class OverlayPlug extends BasePlug<OverlayConfig, OverlayState> {\r\n public static readonly plugName = \"overlay\";\r\n public static readonly BUILD = OVERLAY_BUILD;\r\n public overlayDelayId = -1;\r\n public whitelist: string[] = [\"pictureInPicture\", \"settings\", \"settingsMenu\", \"controlDragging\"]; // #DEFAULT: build privilege\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.overlay) {\r\n super(ctlr, config, { visible: false });\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", ({ value }) => (value ? this.show() : this.delay()), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.locked\", ({ value }) => (value ? this.hide(\"force\") : this.show()), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.overlay.curtain.value\", this.handleCurtain, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.overlay.behavior.value\", this.handleBehavior, { init: true, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleCurtain({ value }: REvent<CtlrConfig, \"settings.overlay.curtain.value\">): void {\r\n this.media.container.dataset.curtain = value;\r\n }\r\n\r\n protected handleBehavior({ value }: REvent<CtlrConfig, \"settings.overlay.behavior.value\">): void {\r\n this.show(), value === \"hidden\" && this.hide(\"force\");\r\n }\r\n\r\n public show(): void {\r\n if (!this.canShow()) return;\r\n this.media.container.classList.add(\"tmg-media-overlay\");\r\n this.state.visible = true;\r\n this.delay();\r\n }\r\n\r\n public delay(): void {\r\n clearTimeout(this.overlayDelayId);\r\n if (this.canHide()) this.overlayDelayId = setTimeout(this.hide, this.config.delay, this.signal);\r\n }\r\n\r\n public hide(manner?: \"force\"): void {\r\n if (!this.canHide(manner)) return;\r\n this.media.container.classList.remove(\"tmg-media-overlay\");\r\n this.state.visible = false;\r\n }\r\n\r\n public canShow(): boolean {\r\n return this.config.behavior.value !== \"hidden\" && !this.media.state.locked && !this.ctlr.isUIActive(\"playerDragging\");\r\n }\r\n public canHide(manner?: \"force\"): boolean {\r\n return this.config.behavior.value !== \"persistent\" && (manner === \"force\" || (!this.whitelist.some(this.ctlr.isUIActive) && (IS_MOBILE ? !this.media.status.waiting && !this.media.state.paused : this.config.behavior.value === \"strict\" || !this.media.state.paused)));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.overlay\": typeof OverlayPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n overlay: OverlayConfig;\r\n }\r\n}\r\n","import { CTX } from \"sia-reactor\";\r\nimport { PersistConfig } from \"./types\";\r\n\r\nexport const PERSIST_BUILD: Partial<PersistConfig> = {\r\n strict: !CTX.isDevEnv,\r\n whitelist: {\r\n config: [\"lightState\", \"settings\", \"actions\"],\r\n media: [\"state\", \"settings\"],\r\n },\r\n blacklist: {\r\n media: [\"state.sources\", \"state.tracks\", \"state.poster\", \"state.fullscreen\", \"state.pictureInPicture\", \"settings.srcObject\"], // \"state.src\", \"state.paused\"\r\n },\r\n mirrorReads: true,\r\n mirrorWrites: true,\r\n cachePayload: true,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { PersistConfig } from \"./types\";\r\nimport { PERSIST_BUILD } from \"./build\";\r\nimport { fanout } from \"sia-reactor/utils\";\r\nimport { PersistModule } from \"sia-reactor/modules\";\r\n\r\nexport class PersistPlug extends BasePlug<PersistConfig> {\r\n public static readonly plugName = \"persist\";\r\n public static readonly BUILD = PERSIST_BUILD;\r\n public module!: PersistModule<any>;\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.module = new PersistModule({ key: `${this.ctlr.config.id}_STORE`, ...(this.config as Partial<PersistConfig>) });\r\n // Utility Injection\r\n this.module.attach(this.media, \"media\").setup(this.ctlr.config, \"config\");\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.persist\", (e) => fanout<PersistConfig>(this.module.config, e.currentTarget.value), { depth: 1, signal: this.signal, init: false }); // #STABLE: snubs unchanged writes\r\n // Post Wiring\r\n this.module.clearCache(), super.wire();\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.module.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.persist\": typeof PersistPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n persist: PersistConfig;\r\n }\r\n}\r\n","import { PlaybackRateConfig } from \"./types\";\r\n\r\nexport const PLAYBACK_RATE_BUILD: Partial<PlaybackRateConfig> = {\r\n min: 0.1,\r\n max: 8,\r\n skip: 0.25,\r\n options: [1, 1.25, 1.5, 2, 3],\r\n};\r\n","import { BasePlug } from \"../../base\";\nimport type { PlaybackRateConfig } from \"./types\";\nimport { PLAYBACK_RATE_BUILD } from \"./build\";\nimport type { REvent } from \"sia-reactor\";\nimport { CtlrConfig } from \"@defs/config\";\nimport type { CtlrMedia } from \"@defs/contract\";\nimport { clamp, rotateAny } from \"@utils/num\";\n\nexport class PlaybackRatePlug extends BasePlug<PlaybackRateConfig> {\n public static readonly plugName = \"playbackRate\";\n public static readonly BUILD = PLAYBACK_RATE_BUILD;\n\n public override wire(): void {\n // Ctlr Media Setters\n this.media.set(\"intent.playbackRate\", (value) => clamp(this.config.min, value!, this.config.max), { signal: this.signal }); // #VALIDATOR: rules enforcement\n // ---- Media Listeners\n this.media.on(\"state.playbackRate\", this.handlePlaybackRateState, { init: this.ctlr.payload.wired, signal: this.signal });\n // ---- Config --------\n this.ctlr.config.on(\"settings.playbackRate.min\", this.handleMin, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.playbackRate.max\", this.handleMax, { init: true, signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"playbackRateUp\", { fn: this.handleKeyRateUp, keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"playbackRateDown\", { fn: this.handleKeyRateDown, keyboard: { phase: \"keydown\" } });\n super.wire();\n }\n\n protected handleMin({ value: min }: REvent<CtlrConfig, \"settings.playbackRate.min\">): void {\n if (this.media.state.playbackRate < min) this.media.intent.playbackRate = min;\n }\n\n protected handleMax({ value: max }: REvent<CtlrConfig, \"settings.playbackRate.max\">): void {\n if (this.media.state.playbackRate > max) this.media.intent.playbackRate = max;\n }\n\n protected handlePlaybackRateState({ value }: REvent<CtlrMedia, \"state.playbackRate\">): void {\n this.media.settings.defaultPlaybackRate = value; // UX boost\n }\n\n protected handleKeyRateUp = (): void => {\n this.changeValue(this.ctlr.plug(\"settings.keys\")?.getModded(\"playbackRate\", \"\", this.config.skip) ?? this.config.skip);\n }\n protected handleKeyRateDown = (): void => {\n this.changeValue(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"playbackRate\", \"\", this.config.skip) ?? this.config.skip));\n }\n\n public rotateRate(dir: \"forwards\" | \"backwards\" = \"forwards\"): void {\n this.media.intent.playbackRate = rotateAny(this.media.state.playbackRate, { min: this.config.min, max: this.config.max, step: this.config.skip }, dir);\n }\n\n public changeValue(value: number): void {\n const sign = value >= 0 ? \"+\" : \"-\";\n value = Math.abs(Math.round(value * 100));\n let rate = Math.round(this.media.state.playbackRate * 100);\n if (sign === \"-\") {\n if (rate > this.config.min * 100) rate -= rate % value || value;\n this.media.features.playbackRate && this.ctlr.plug(\"settings.notifiers\")?.notify(\"playbackratedown\");\n } else {\n if (rate < this.config.max * 100) rate += rate % value ? value - (rate % value) : value;\n this.media.features.playbackRate && this.ctlr.plug(\"settings.notifiers\")?.notify(\"playbackrateup\");\n }\n this.media.intent.playbackRate = clamp(this.config.min, +(rate / 100).toFixed(2), this.config.max);\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.playbackRate\": typeof PlaybackRatePlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n playbackRate: PlaybackRateConfig;\n }\n}\n","import { PosterConfig } from \"./types\";\r\n\r\nexport const POSTER_BUILD: Partial<PosterConfig> = {\r\n strict: false,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { PosterConfig, PosterState } from \"./types\";\r\nimport { POSTER_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport class PosterPlug extends BasePlug<PosterConfig, PosterState> {\r\n public static readonly plugName = \"poster\";\r\n public static readonly BUILD = POSTER_BUILD;\r\n public element!: HTMLImageElement;\r\n\r\n constructor(ctlr: Controller, config?: any) {\r\n super(ctlr, config, { visible: true });\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.element = this.ctlr.syncImgLoadState(createEl(\"img\", { className: \"tmg-media-poster tmg-media-filtered tmg-media-object\", alt: \"Poster Image\" }));\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.element);\r\n }\r\n public override unmount(): void {\r\n this.element.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // State Listeners\r\n this.state.on(\"visible\", this.syncView, { signal: this.signal });\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => ((this.media.features.poster ||= true), this.syncView()), { init: true, signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"intent.poster\", this.handlePosterIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.on(\"intent.src\", (e) => e.resolved && (this.state.visible = true), { signal: this.signal });\r\n this.media.on(\"state.paused\", ({ value }) => !value && !this.config.strict && (this.state.visible = false), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.currentTime\", () => (this.config.strict || this.media.state.currentTime) && (this.state.visible = false), { init: this.ctlr.payload.wired, signal: this.signal }); // if strict, sets hides like html5, lightState Plug blocks\r\n this.media.on(\"status.ended\", this.syncView, { signal: this.signal });\r\n this.media.on(\"state.poster\", ({ value }) => (value ? (this.element.src = value) : this.element.removeAttribute(\"src\")), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handlePosterIntent(e: REvent<CtlrMedia, \"intent.poster\">): void {\r\n if (e.resolved) return;\r\n if (e.value) (this.element.dataset.loaded = \"false\"), (this.element.src = e.value); // start the load\r\n this.media.state.poster = e.value;\r\n e.resolve(this.name);\r\n }\r\n\r\n protected syncView(): void {\r\n this.media.container.classList.toggle(\"tmg-media-poster-shown\", this.media.type === \"audio\" || this.state.visible || (!this.config.strict && this.media.status.ended));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.poster\": typeof PosterPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n poster: PosterConfig;\r\n }\r\n}\r\n","import { silence } from \"sia-reactor/modules\";\r\nimport { BasePlug } from \"../../base\";\r\nimport { SETTINGS_BUILD } from \"./build\";\r\nimport type { SettingsViewConfig } from \"./types\";\r\nimport { SettingsMenu } from \"./menu\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { mockAsync } from \"@utils/fn\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\n\r\nimport type { Controller } from \"@core/controller\";\r\n\r\nexport class SettingsViewPlug extends BasePlug<SettingsViewConfig> {\r\n public static readonly plugName = \"settingsView\";\r\n public static readonly BUILD = SETTINGS_BUILD;\r\n public closeBtn!: HTMLButtonElement | null;\r\n public menu!: SettingsMenu;\r\n protected wasPaused = false;\r\n private viewReady = false;\r\n\r\n constructor(ctlr: Controller, config?: SettingsViewConfig, state?: any) {\r\n super(ctlr, config, state);\r\n this.menu = new SettingsMenu(this.ctlr, this.config.menu);\r\n }\r\n\r\n public override mount(): void {\r\n this.closeBtn = this.ctlr.queryDOM(\".tmg-media-settings-close-btn\")!;\r\n !this.config.menu.disabled && this.menu.mount(this.enterView);\r\n }\r\n public override unmount(): void {\r\n this.media.container.classList.remove(\"tmg-media-settings-view\");\r\n this.ctlr.queryDOM(\".tmg-media-settings-tips-btn\")?.remove(), this.ctlr.queryDOM(\".tmg-media-settings-brand-wrapper\")?.remove(), this.ctlr.queryDOM(\".tmg-media-settings-theme-wrapper\")?.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.closeBtn?.addEventListener(\"click\", this.leaveView, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.leaveView(), { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"settings\", { fn: this.toggleView, keyboard: { phase: \"keyup\" }, zen: true });\r\n !this.config.menu.disabled && this.menu.wire(), super.wire();\r\n }\r\n\r\n public async enterView(): Promise<void> {\r\n if (this.ctlr.isUIActive(\"settings\")) return;\r\n if (!this.viewReady) this.initView(), (this.viewReady = true);\r\n this.menu.close();\r\n this.wasPaused = this.media.state.paused;\r\n if (this.config.autoPause) silence(() => (this.media.intent.paused = true));\r\n this.media.container.classList.add(\"tmg-media-settings-view\");\r\n await mockAsync(parseCSSTime(this.settings.css.settingsViewTransitionTime));\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n this.ctlr.DOM.settings?.removeAttribute(\"inert\"), this.ctlr.DOM.containerContent?.setAttribute(\"inert\", \"\");\r\n this.closeBtn?.focus();\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n public async leaveView(): Promise<void> {\r\n if (!this.ctlr.isUIActive(\"settings\")) return;\r\n this.media.container.classList.remove(\"tmg-media-settings-view\");\r\n await mockAsync(parseCSSTime(this.settings.css.settingsViewTransitionTime));\r\n if (this.config.autoPause) silence(() => (this.media.intent.paused = this.wasPaused));\r\n this.ctlr.DOM.settings?.setAttribute(\"inert\", \"\"), this.ctlr.DOM.containerContent?.removeAttribute(\"inert\");\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n public async toggleView(): Promise<void> {\r\n this.ctlr.isUIActive(\"settings\") ? await this.leaveView() : await this.enterView();\r\n }\r\n\r\n private initView() {\r\n // Theming\r\n // prettier-ignore\r\n const options = [{ option: \"Light Blue\", value: \"#3198f5\" }, { option: \"Hot Pink\", value: \"#ff69b4\" }, { option: \"Fiery Red\", value: \"#ff0033\" }, { option: \"Dark Turquoise\", value: \"#00ced1\" }, { option: \"Custom Hue\", value: \"custom\" }, { option: \"Video Derived\", value: \"auto\" }],\r\n gcolors = options.slice(0, -2).map((opt) => opt.value),\r\n defs = { brand: this.settings.css.brandColor as string ?? \"#e26e02\", theme: this.settings.css.themeColor as string ?? \"#ffffff\", bcolors: [\"#e26e02\", ...gcolors], tcolors: [\"#ffffff\", ...gcolors] },\r\n bField = t007.field({ type: \"select\", label: \"Brand Color\", helperText: { info: \"Just try changing your brand color for now\" }, options: [{ option: \"Tastey Orange\", value: \"#e26e02\" }, ...options], value: !defs.bcolors.includes(defs.brand as string) ? (!this.settings.css.syncWithMedia.brandColor ? \"custom\" : \"auto\") : defs.brand }),\r\n cBField = t007.field({ type: \"color\" }),\r\n tField = t007.field({ type: \"select\", label: \"Theme Color\", helperText: { info: \"Also try changing your theme color for now\" }, options: [{ option: \"Pure White\", value: \"#ffffff\" }, ...options], value: !defs.tcolors.includes(defs.theme as string) ? (!this.settings.css.syncWithMedia.themeColor ? \"custom\" : \"auto\") : defs.theme }),\r\n cTField = t007.field({ type: \"color\" }),\r\n bWrapper = createEl(\"div\", { className: \"tmg-media-settings-brand-wrapper\" }),\r\n tWrapper = createEl(\"div\", { className: \"tmg-media-settings-theme-wrapper\" });\r\n this.ctlr.config.watch(\"settings.css.brandColor\", (v = defs.brand) => ((v = (v as string).toLowerCase()), (cBField.inputEl.value = v), cBField.style.setProperty(\"--input-color\", v), (bField.inputEl.value = !defs.bcolors.includes(v) ? (!this.settings.css.syncWithMedia.brandColor ? \"custom\" : \"auto\") : v)), { init: true, signal: this.signal });\r\n this.ctlr.config.watch(\"settings.css.themeColor\", (v = defs.theme) => ((v = (v as string).toLowerCase()), (cTField.inputEl.value = v), cTField.style.setProperty(\"--input-color\", v), (tField.inputEl.value = !defs.tcolors.includes(v) ? (!this.settings.css.syncWithMedia.themeColor ? \"custom\" : \"auto\") : v)), { init: true, signal: this.signal });\r\n this.ctlr.DOM.settingsBottomPanel?.append((bWrapper.append(bField, cBField), bWrapper), (tWrapper.append(tField, cTField), tWrapper));\r\n const id = { theme: \"\", brand: \"\" },\r\n sync = (cb: any, req = true, type = \"brand\") => ((this.settings.css.syncWithMedia[`${type}Color`] = req), cb(req)),\r\n assert = (opts: any, type: \"brand\" | \"theme\" = \"brand\") => this.ctlr.plug(\"settings.toasts\")?.toast?.update(id[type], { render: `Still here in case you change your choice about the ${type}`, ...opts }),\r\n onBColorChange = ({ target: { value: val } }: any) =>\r\n this.ctlr.throttle(\r\n \"brandColorPicking\",\r\n async () => {\r\n id.brand && t007.toast?.dismiss(id.brand);\r\n let col;\r\n if (val === \"custom\") return cBField.inputEl.click();\r\n if (val !== \"auto\") col = this.settings.css.brandColor = val;\r\n else col = this.settings.css.brandColor = (this.media.status.loadedData ? await this.ctlr.plug(\"settings.frame\")?.getMainColor(this.media.state.currentTime) : null) ?? this.ctlr.plug(\"settings.css\")?._cache.brandColor!;\r\n const cb = (s: any) => (bField.inputEl.value = defs.bcolors.includes(col as string) ? (col as string) : s ? \"auto\" : \"custom\"),\r\n No = () => (sync(cb, false), assert({ actions: { Yes } })),\r\n Yes = () => (sync(cb, true), assert({ actions: { No } }));\r\n sync(cb, val === \"auto\");\r\n val === \"auto\" && (id.brand = this.ctlr.plug(\"settings.toasts\")?.toast?.(\"Should the brand color change anytime a video loads?\", { icon: \"🎨\", autoClose: 15000, hideProgressBar: false, actions: { Yes, No }, onClose: () => (id.brand = \"\"), signal: this.signal }) || \"\");\r\n },\r\n 150\r\n ),\r\n onTColorChange = ({ target: { value: val } }: any) =>\r\n this.ctlr.throttle(\r\n \"themeColorPicking\",\r\n async () => {\r\n id.theme && t007.toast?.dismiss(id.theme);\r\n let col;\r\n if (val === \"custom\") return cTField.inputEl.click();\r\n if (val !== \"auto\") col = this.settings.css.themeColor = val;\r\n else col = this.settings.css.themeColor = (this.media.status.loadedData ? await this.ctlr.plug(\"settings.frame\")?.getMainColor(this.media.state.currentTime) : null) ?? this.ctlr.plug(\"settings.css\")?._cache.themeColor!;\r\n const cb = (s: any) => (tField.inputEl.value = defs.tcolors.includes(col as string) ? (col as string) : s ? \"auto\" : \"custom\"),\r\n No = () => (sync(cb, false, \"theme\"), assert({ actions: { Yes } }, \"theme\")),\r\n Yes = () => (sync(cb, true, \"theme\"), assert({ actions: { No } }, \"theme\"));\r\n sync(cb, val === \"auto\", \"theme\");\r\n val === \"auto\" && (id.theme = this.ctlr.plug(\"settings.toasts\")?.toast?.(\"Should the theme color change anytime a video loads?\", { icon: \"🎨\", autoClose: 15000, hideProgressBar: false, actions: { Yes, No }, onClose: () => (id.theme = \"\"), signal: this.signal }) || \"\");\r\n },\r\n 150\r\n );\r\n bField.inputEl.addEventListener(\"input\", onBColorChange), cBField.inputEl.addEventListener(\"input\", onBColorChange);\r\n tField.inputEl.addEventListener(\"input\", onTColorChange), cTField.inputEl.addEventListener(\"input\", onTColorChange);\r\n // Helpful Tips\r\n const tipsBtn = createEl(\"button\", { className: \"tmg-media-settings-tips-btn\", innerHTML: `<span>💡 Did You Know?</span>` });\r\n this.closeBtn?.insertAdjacentElement(\"afterend\", tipsBtn);\r\n tipsBtn.addEventListener(\"click\", this.showTipsDialog, { signal: this.signal });\r\n }\r\n\r\n private getTipsHTML() {\r\n return `\r\n <div style=\"text-align: left; font-family: inherit; color: inherit;\">\r\n <div style=\"text-align: center; margin-bottom: 25px;\">\r\n <h2 style=\"margin: 0 0 10px 0; letter-spacing: -0.5px;\">🎬 Welcome to TVP</h2>\r\n <p style=\"margin: 0; opacity: 0.9; line-height: 1.5;\">\r\n You aren't just watching a video; you're sitting in the cockpit of the most advanced, performance-first media engine on the web. We are thrilled to have you here. \r\n <br><strong>Here is your official flight manual to unlock its full power:</strong>\r\n </p>\r\n </div>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">🎛️ The Smart Canvas (Touch & Mouse)</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 25px;\">\r\n <li><strong>Hyper-Speed on Demand:</strong> Click and hold the right side of the video screen or the play key (<strong>Spacebar</strong>) to fast-forward, left side or <strong>Shift</strong> + play key rewinds.</li>\r\n <li><strong>Smart Scrubbing:</strong> Don't hunt for the tiny progress bar. Just scroll horizontally across the middle of the screen to scrub smoothly through time.</li>\r\n <li><strong>Invisible Sliders:</strong> Scroll vertically on the <em>right edge</em> for Volume, and the <em>left edge</em> for Brightness.</li>\r\n <li><strong>Precision Taps:</strong> Double-tap the edges to skip forward or backward. Double tap the center to toggle Fullscreen (or Play/Pause on mobile).</li>\r\n </ul>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">🏗️ Total UI Control</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 25px;\">\r\n <li><strong>Build Your Own Player:</strong> Don't like our layout? <strong>Click and drag</strong> almost any button on the bottom control bar to physically rearrange the interface exactly how you want it.</li>\r\n <li><strong>Draggable Subtitles:</strong> Subtitles blocking a crucial part of the scene? Just grab the text box and drag it anywhere else on the screen.</li>\r\n <li><strong>The Chameleon Engine:</strong> Head to settings and set your Brand/Theme colors to \"Video Derived\". TVP will actively analyze the video frames and extract dominant colors to paint the UI dynamically.</li>\r\n <li><strong>Descriptive Hints:</strong> Hover over the controls to expose their tooltips and get more information about how to trigger each function.</li>\r\n </ul>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">⌨️ Keyboard Ninja Status</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 25px;\">\r\n <li><strong>The Playback Trinity (J, K, L):</strong> Skip backward, Play/Pause, and Skip forward like a pro editor. Do the same with arrow keys, hold <strong>Ctrl</strong>, <strong>Shift</strong> or <strong>Alt</strong> to spice things up.</li>\r\n <li><strong>Time Travel (0 - 9):</strong> Hit any number key to instantly jump to that percentage of the video (e.g., hitting '5' jumps to the exact middle).</li>\r\n <li><strong>Frame-by-Frame:</strong> Paused the video? Use <strong>,</strong> (comma) and <strong>.</strong> (period) to step backward or forward one single frame at a time.</li>\r\n <li><strong>Warp Speed:</strong> Use <strong>></strong> and <strong><</strong> to crank the playback speed up or down.</li>\r\n </ul>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">🔬 Advanced Window Tech</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 20px;\">\r\n <li><strong>The Snapshot Engine:</strong> Click the Camera icon or press <strong>s</strong> to screenshot a high-res image of the exact frame. <em>(Easter Egg: Double-Click or press <strong>Alt + s</strong> to capture in pure Black & White!)</em></li>\r\n <li><strong>Ultra-readable Time:</strong> Click the time display or press <strong>q</strong> to toggle between elapsed time and remaining time. <em>(Easter Egg: Double-Click or press <strong>z</strong> to display the time in different formats!)</em></li>\r\n <li><strong>Floating Miniplayer:</strong> Start playing a video and just scroll down the page. TVP will automatically detach into a draggable miniplayer so you never miss a second.</li>\r\n <li><strong>Custom Picture-in-Picture:</strong> We bypassed standard browser limits to give you a floating player that actually keeps all your custom UI controls intact.</li>\r\n </ul>\r\n <div style=\"text-align: center; margin-top: 30px; padding: 15px; border-radius: 8px; background: rgba(128, 128, 128, 0.1);\">\r\n <p style=\"margin: 0 0 10px 0;\"><strong>Enjoy the engine.</strong> We're still in active development, but we're already miles ahead. Welcome to the bleeding edge.</p>\r\n <p style=\"margin: 0; opacity: 0.8;\">🧪 <strong>Beta Tester?</strong> Check the bottom of the page to find the hidden button to travel through linear time, or <a href=\"mailto:tobioketade007@gmail.com\" style=\"color: inherit; text-decoration: underline;\">drop me an email</a> to collaborate!</p>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n private async showTipsDialog() {\r\n await this.leaveView();\r\n t007.alert(this.getTipsHTML(), { id: `${this.ctlr.config.id}-tips-dialog`, rootElement: this.ctlr.DOM.containerContent, confirmText: \"Got it!\" });\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.menu.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.settingsView\": typeof SettingsViewPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n settingsView: SettingsViewConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { SettingsViewConfig } from \"./types\";\r\n\r\nexport const SETTINGS_BUILD: DeepPartial<SettingsViewConfig> = {\r\n autoPause: true,\r\n menu: {\r\n disabled: false,\r\n showView: true,\r\n viewLabel: \"See More\",\r\n preserveStack: false,\r\n },\r\n};\n","import { REvent } from \"sia-reactor\";\r\nimport { Controllable } from \"@core/controllable\";\r\nimport { Controller } from \"@core/controller\";\r\nimport { parseForARIAKS } from \"@utils/keys\";\r\nimport { CtlrMedia, MediaFeatures } from \"@defs/contract\";\r\nimport { ComponentConstructor, ComponentState } from \"./types\";\r\n\r\nexport abstract class BaseComponent<Config = any, State extends ComponentState = any, El extends HTMLElement = HTMLElement> extends Controllable<Config, State> {\r\n public static readonly componentName: string;\r\n public static readonly isControl: boolean = false;\r\n public get name() {\r\n return (this.constructor as ComponentConstructor).componentName;\r\n }\r\n public element!: El;\r\n public get el() {\r\n return this.element;\r\n }\r\n\r\n constructor(ctlr: Controller, config: Config, state?: State) {\r\n super(ctlr, config, { label: \"\", cmd: \"\", active: false, disabled: false, hidden: false, ...state } as State);\r\n }\r\n protected override onSetup(): void {\r\n this.mount?.();\r\n this.ctlr.state.readyState ? this.wire?.() : this.wire && this.ctlr.state.wonce(\"readyState\", this.wire, { signal: this.signal }); // wire after all plugs setup\r\n }\r\n protected override onDestroy(): void {\r\n this.unmount();\r\n }\r\n\r\n public abstract create(): El; // Must assign to this.element before returning\r\n public mount?(): void {}\r\n public unmount(): void {\r\n this.el.remove();\r\n }\r\n public wire?(): void {} // auto unwiring\r\n\r\n public active() {\r\n this.el.classList.toggle(\"tmg-media-control-active\", (this.state.active = true));\r\n }\r\n public inactive() {\r\n this.el.classList.toggle(\"tmg-media-control-active\", (this.state.active = false));\r\n }\r\n public disable(): void {\r\n this.el.classList.toggle(\"tmg-media-control-disabled\", (this.state.disabled = true));\r\n }\r\n public enable(): void {\r\n this.el.classList.toggle(\"tmg-media-control-disabled\", (this.state.disabled = false));\r\n }\r\n public hide(): void {\r\n this.el.classList.toggle(\"tmg-media-control-hidden\", (this.state.hidden = true));\r\n }\r\n public show(): void {\r\n this.el.classList.toggle(\"tmg-media-control-hidden\", (this.state.hidden = false));\r\n }\r\n protected gate(e: REvent<CtlrMedia, `features.${keyof MediaFeatures}`>): void {\r\n !e.value ? this.hide() : this.canShow && this.show();\r\n }\r\n protected get canShow(): boolean {\r\n return true;\r\n } // override to make gating smarter\r\n\r\n protected setBtnARIA(dblAction?: string, target: HTMLElement = this.el): void {\r\n this.state.label && target.setAttribute(\"aria-label\", this.state.label);\r\n this.state.cmd && target.setAttribute(\"aria-keyshortcuts\", parseForARIAKS(this.state.cmd));\r\n if (dblAction) target.setAttribute(\"aria-description\", `Double-press to ${dblAction}`);\r\n else if (target.hasAttribute(\"aria-description\")) target.removeAttribute(\"aria-description\");\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\n","import { BaseComponent, type ComponentState } from \"@components/base\";\r\nimport { CTX } from \"sia-reactor\";\r\nimport type { SettingsMenuItem, SettingsMenuConfig } from \"../types\";\r\nimport { MainMenuPanel } from \"./panel/main\";\r\nimport { SubMenuPanel } from \"./panel/sub\";\r\nimport type { BaseMenuPanel, PanelDir } from \"./panel\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { getActiveEl, isFunc } from \"@t007/utils\";\r\nimport { initArrowNavigation, initOutsideClick, initFocusTrap, removeArrowNavigation, removeOutsideClick, removeFocusTrap, syncFocusTrap, syncArrowNavigation } from \"@t007/utils/hooks/vanilla\";\r\nimport { requestAnimationFrame } from \"@utils/fn\";\r\nimport { OrderedRegistry } from \"@core/registries\";\r\n// Side-effect imports so all widgets self-register\r\nimport \"./widgets/select\";\r\nimport \"./widgets/range\";\r\nimport \"./widgets/toggle\";\r\nimport \"./widgets/color\";\r\nimport \"./widgets/group\";\r\n\r\nexport class SettingsMenu extends BaseComponent<SettingsMenuConfig, ComponentState, HTMLElement> {\r\n public static readonly componentName = \"SettingsMenu\";\r\n private registry = new OrderedRegistry<SettingsMenuItem>();\r\n private mainPanel!: MainMenuPanel;\r\n private subPanels: SubMenuPanel[] = [];\r\n public navStack: string[] = [];\r\n private menuOpen = false;\r\n private anchorEl?: HTMLElement;\r\n\r\n public override create(): HTMLElement {\r\n this.element = createEl(\"div\", { className: \"tmg-media-smenu-overlay\", inert: true });\r\n this.el.addEventListener(\"keydown\", (e: KeyboardEvent, active = getActiveEl(this.el.ownerDocument) as HTMLElement) => {\r\n if ((e.key === \"Enter\" || e.key === \" \") && active && !active.matches(\"input,textarea,[contenteditable]\") && active.tagName !== \"BUTTON\" && active.closest(\".tmg-media-smenu-panel-active\")) e.preventDefault(), active.click();\r\n else if (e.key === \"ArrowRight\" && active?.querySelector(\".tmg-media-smenu-row-arrow, .tmg-media-smenu-group-arrow\")) e.stopImmediatePropagation(), active.click();\r\n else if (e.key === \"ArrowLeft\" && !active?.matches(\"input,textarea,[contenteditable]\")) e.stopImmediatePropagation(), this.goBack();\r\n });\r\n return this.element;\r\n }\r\n\r\n public override mount(onViewClick?: () => void): void {\r\n if (!this.element) this.create();\r\n this.mainPanel = new MainMenuPanel(this.ctlr, this.config);\r\n this.mainPanel.setup(), this.mainPanel.build();\r\n this.mainPanel.onItemClick = (item) => this.goTo(item.id);\r\n this.mainPanel.onViewClick = onViewClick;\r\n this.el.append(this.mainPanel.element);\r\n this.media.container.append(this.element);\r\n }\r\n\r\n public override wire(): void {\r\n // ---- Media Listeners\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.close(), { signal: this.signal });\r\n this.media.on(\"features\", () => this.menuOpen && (this.syncMain(), this.subPanels.forEach((p) => p.syncUI())), { signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.on(\"dimensions.container.width\", () => this.menuOpen && this.reposition(this.anchorEl), { signal: this.signal });\r\n this.ctlr.state.on(\"dimensions.container.height\", () => this.menuOpen && this.reposition(this.anchorEl), { signal: this.signal });\r\n }\r\n\r\n public override unmount(): void {\r\n removeOutsideClick(this.element), removeArrowNavigation(this.element), removeFocusTrap(this.element), super.unmount();\r\n }\r\n\r\n private mergeItem(item: SettingsMenuItem): SettingsMenuItem {\r\n const existing = this.getItem(item.id);\r\n if (existing) {\r\n if (item.items) existing.items = [...(existing.items || []), ...item.items];\r\n if (item.actions) existing.actions = [...(existing.actions || []), ...item.actions];\r\n if (item.footerActions) existing.footerActions = [...(existing.footerActions || []), ...item.footerActions];\r\n if (item.tipHTML && !existing.tipHTML) existing.tipHTML = item.tipHTML;\r\n return existing;\r\n }\r\n return item;\r\n }\r\n public register(items?: SettingsMenuItem | SettingsMenuItem[]): void {\r\n if (items) Array.isArray(items) ? items.forEach((item) => ((item = this.mergeItem(item)), this.registry.register(item.id, item))) : ((items = this.mergeItem(items)), this.registry.register(items.id, items)), this.menuOpen && this.syncMain();\r\n }\r\n public registerFirst(item?: SettingsMenuItem): void {\r\n if (item) (item = this.mergeItem(item)), this.registry.registerFirst(item.id, item), this.menuOpen && this.syncMain();\r\n }\r\n public registerBefore(key: string, item?: SettingsMenuItem): void {\r\n if (item) (item = this.mergeItem(item)), this.registry.registerBefore(key, item.id, item), this.menuOpen && this.syncMain();\r\n }\r\n public registerAfter(key: string, item?: SettingsMenuItem): void {\r\n if (item) (item = this.mergeItem(item)), this.registry.registerAfter(key, item.id, item), this.menuOpen && this.syncMain();\r\n }\r\n public unregister(id: string): void {\r\n this.registry.unregister(id), this.menuOpen && this.syncMain();\r\n }\r\n\r\n public getItem(id: string, items = this.registry.getAll()): SettingsMenuItem | undefined {\r\n for (const item of items)\r\n if (item.id === id) return item;\r\n else if (item.items) {\r\n const found = this.getItem(id, item.items);\r\n if (found) return found;\r\n }\r\n return undefined;\r\n }\r\n\r\n public syncUI(id?: string): void {\r\n if (id) this.subPanels[this.navStack.indexOf(id)]?.syncUI(), this.syncMain();\r\n else this.syncMain(), this.subPanels.forEach((p) => p.syncUI());\r\n }\r\n\r\n private lastClosedTime = 0;\r\n public toggle(anchorEl: HTMLElement): void {\r\n this.menuOpen ? this.close() : this.open(anchorEl);\r\n }\r\n\r\n public open(anchorEl: HTMLElement): void {\r\n if (this.menuOpen || performance.now() - this.lastClosedTime < 50) return;\r\n this.menuOpen = true;\r\n this.anchorEl = anchorEl;\r\n if (!this.config.preserveStack) this.navStack = [];\r\n if (this.navStack.length === 0) this.syncMain(), this.showPanel(this.mainPanel, \"none\"), this.subPanels.forEach((p) => this.hidePanel(p));\r\n else this.syncUI(this.navStack[this.navStack.length - 1]), this.showPanel(this.subPanels[this.navStack.length - 1], \"none\"), this.hidePanel(this.mainPanel), this.subPanels.forEach((p, idx) => idx !== this.navStack.length - 1 && this.hidePanel(p));\r\n this.reposition(anchorEl), this.el.removeAttribute(\"inert\"), this.el.classList.add(\"tmg-media-smenu-overlay-open\"), this.el.classList.remove(\"tmg-media-smenu-overlay-closed\");\r\n this.media.container.classList.add(\"tmg-media-settings-menu\");\r\n initOutsideClick(this.element, { enabled: true, onOutside: (e) => !this.anchorEl?.contains(e?.target as Node) && this.close(), outOnFocusOut: !CTX.isDevEnv }), initFocusTrap(this.element, { enabled: true });\r\n initArrowNavigation(this.element, { enabled: true, rovingTab: false, focusOnHover: false, grid: { x: 1 }, selector: \".tmg-media-smenu-panel :is([tabindex='0'], button:not([disabled]), input:not([type='checkbox'], [type='radio'], [disabled])):not(.tmg-media-smenu-back-btn, .tmg-media-range-container)\" });\r\n }\r\n public close(): void {\r\n if (!this.menuOpen) return;\r\n this.menuOpen = false;\r\n this.lastClosedTime = performance.now();\r\n this.el.setAttribute(\"inert\", \"\"), this.el.classList.remove(\"tmg-media-smenu-overlay-open\", \"tmg-media-smenu-drop-down\"), this.media.container.classList.remove(\"tmg-media-settings-menu\");\r\n removeOutsideClick(this.element), removeArrowNavigation(this.element), removeFocusTrap(this.element);\r\n this.anchorEl?.focus(), (this.anchorEl = undefined);\r\n }\r\n public get isOpen(): boolean {\r\n return this.menuOpen;\r\n }\r\n\r\n private getSubPanel(depth: number): SubMenuPanel {\r\n if (!this.subPanels[depth]) {\r\n const p = new SubMenuPanel(this.ctlr);\r\n p.setup();\r\n p.onBack = this.goBack;\r\n p.onSubItemClick = (item) => this.goTo(item.id);\r\n this.element.append(p.element), syncFocusTrap(this.element);\r\n this.subPanels[depth] = p;\r\n }\r\n return this.subPanels[depth];\r\n }\r\n\r\n public goTo(id: string): void {\r\n const item = this.getItem(id);\r\n if (!item || (!item.items && !item.widget) || item.widget === \"button\" || item.widget === \"toggle\") return;\r\n const activePanel = this.navStack.length === 0 ? this.mainPanel : this.subPanels[this.navStack.length - 1];\r\n this.navStack.push(id);\r\n const nextPanel = this.getSubPanel(this.navStack.length - 1);\r\n nextPanel.load(item);\r\n this.showPanel(nextPanel, \"forward\"), this.hidePanel(activePanel, \"backward\");\r\n }\r\n public goBack(): void {\r\n if (this.navStack.length === 0) return;\r\n const activePanel = this.subPanels[this.navStack.length - 1];\r\n this.navStack.pop();\r\n this.showPanel(this.navStack.length === 0 ? this.mainPanel : this.subPanels[this.navStack.length - 1], \"backward\");\r\n this.hidePanel(activePanel, \"forward\");\r\n }\r\n\r\n private showPanel(panel: BaseMenuPanel, dir: PanelDir = \"forward\"): void {\r\n panel.enter(dir), this.syncHeight(panel), syncArrowNavigation(this.element);\r\n }\r\n private hidePanel(panel: BaseMenuPanel, dir: PanelDir = \"backward\"): void {\r\n panel.exit(dir);\r\n }\r\n\r\n private syncMain(): void {\r\n this.mainPanel.sync(this.registry.getAll().filter((item) => ((isFunc(item.hidden) ? item.hidden() : item.hidden) ? false : !item.feature || Boolean(this.media.features[item.feature]))));\r\n }\r\n private syncHeight(panel: BaseMenuPanel, height = panel.contentHeight): void {\r\n requestAnimationFrame(() => this.menuOpen && height && (this.el.style.height = `${height}px`), this.signal);\r\n }\r\n\r\n private reposition(anchorEl?: HTMLElement): void {\r\n const container = this.media.container,\r\n cRect = container.getBoundingClientRect(),\r\n aRect = anchorEl ? anchorEl.getBoundingClientRect() : this.el.getBoundingClientRect();\r\n if (!anchorEl && !this.menuOpen) return;\r\n\r\n const y = aRect.top - cRect.top;\r\n const menuWidth = this.el.offsetWidth || 320;\r\n\r\n // Shift logic: align right by default, but clamp rigidly to container bounds\r\n let xPos = aRect.right - cRect.left - menuWidth + 10;\r\n const margin = 12;\r\n if (xPos < margin) xPos = margin;\r\n if (xPos + menuWidth > cRect.width - margin) xPos = cRect.width - menuWidth - margin;\r\n\r\n this.el.style.setProperty(\"--tmg-smenu-anchor-x\", `${xPos}px`);\r\n this.el.style.setProperty(\"--tmg-smenu-anchor-y\", `${y}px`);\r\n this.el.classList.toggle(\"tmg-media-smenu-drop-down\", y < cRect.height / 2);\r\n }\r\n}\r\n\r\nexport type * from \"../types\";\r\n","import { createEl } from \"@utils/dom\";\r\nimport { Controllable } from \"@core/controllable\";\r\nimport type { Controller } from \"@core/controller\";\r\n\r\nexport type PanelDir = \"forward\" | \"backward\" | \"none\";\r\n\r\nexport abstract class BaseMenuPanel extends Controllable {\r\n public readonly element: HTMLElement;\r\n protected readonly content: HTMLElement;\r\n\r\n constructor(ctlr: Controller, config: any, className: string) {\r\n super(ctlr, config);\r\n this.element = createEl(\"div\", { className: `tmg-media-smenu-panel ${className}` });\r\n this.element.append((this.content = createEl(\"div\", { className: \"tmg-media-smenu-panel-content\" })));\r\n }\r\n\r\n public enter(dir: PanelDir = \"forward\"): void {\r\n this.element.classList.remove(\"tmg-media-smenu-panel-exit\", \"tmg-media-smenu-panel-active\");\r\n (this.element.dataset.dir = dir), this.element.style.removeProperty(\"display\"), this.element.removeAttribute(\"inert\");\r\n void this.element.offsetWidth, this.element.classList.add(\"tmg-media-smenu-panel-active\");\r\n }\r\n public exit(dir: PanelDir = \"backward\"): void {\r\n (this.element.dataset.dir = dir), this.element.setAttribute(\"inert\", \"\");\r\n this.element.classList.remove(\"tmg-media-smenu-panel-active\", \"tmg-media-smenu-panel-exit\");\r\n this.element.style.display = \"none\";\r\n }\r\n\r\n public get isActive(): boolean {\r\n return this.element.classList.contains(\"tmg-media-smenu-panel-active\");\r\n }\r\n\r\n public get contentHeight(): number {\r\n // prettier-ignore\r\n return Array.prototype.reduce.call(this.element.children, ((acc: number, el: HTMLElement) => {\r\n const oldHeight = el.style.height;\r\n el.style.height = \"auto\";\r\n const h = el.scrollHeight;\r\n return (oldHeight ? (el.style.height = oldHeight) : el.style.removeProperty(\"height\"), acc + h);\r\n }) as any, 0) as number;\r\n }\r\n}\r\n","import type { SettingsMenuItem } from \"../../types\";\r\nimport { Controllable } from \"@core/controllable\";\r\nimport { BaseRegistry } from \"@core/registries\";\r\nimport type { Controller } from \"@core/controller\";\r\n\r\nexport abstract class BaseWidget<T = unknown> extends Controllable {\r\n protected item: SettingsMenuItem<T>;\r\n public element!: HTMLElement;\r\n\r\n constructor(item: SettingsMenuItem<T>, ctlr: Controller) {\r\n super(ctlr, undefined);\r\n this.item = item;\r\n }\r\n\r\n public abstract render(): HTMLElement;\r\n public abstract syncUI(): void;\r\n protected override onSetup(): void {\r\n this.item.mediaPaths?.forEach((path) => this.media.on(path, this.syncUI, { signal: this.signal }));\r\n this.item.configPaths?.forEach((path) => this.ctlr.config.on(path, this.syncUI, { signal: this.signal }));\r\n this.item.onWire?.(this.syncUI, this.signal);\r\n }\r\n protected override onDestroy(): void {}\r\n}\r\n\r\nexport type WidgetConstructor = new (item: SettingsMenuItem<any>, ctlr: Controller) => BaseWidget<any>;\r\n\r\nexport class WidgetRegistry extends BaseRegistry<WidgetConstructor> {\r\n private static instance = new WidgetRegistry();\r\n\r\n public static register(type: string, Ctor: WidgetConstructor): void {\r\n this.instance.register(type, Ctor);\r\n }\r\n public static create(item: SettingsMenuItem, ctlr: Controller): BaseWidget | null {\r\n const Ctor = this.instance.get(item.widget);\r\n if (!Ctor) return null;\r\n const widget = new Ctor(item, ctlr);\r\n return widget.setup(), widget;\r\n }\r\n}\r\n","import type { SettingsMenuItem, SettingsRowElement } from \"../../types\";\r\nimport { BaseWidget, WidgetRegistry } from \".\";\r\nimport { createEl, createListRenderer } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { isFunc } from \"../../../../../super/utils\";\r\n\r\nexport class GroupWidget extends BaseWidget {\r\n private renderRows!: ReturnType<typeof createListRenderer<SettingsMenuItem>>;\r\n public onSubItemClick?: (item: SettingsMenuItem) => void;\r\n\r\n public override render(): HTMLElement {\r\n this.element = createEl(\"ul\", { className: \"tmg-media-smenu-group-list\" });\r\n this.renderRows = createListRenderer<SettingsMenuItem>({\r\n container: this.element,\r\n getKey: (sub) => sub.id,\r\n createNode: (item) => this.buildRow(item),\r\n destroyNode: (node) => ((node as any)._ac?.abort(), (node as SettingsRowElement).widget?.destroy(), node.remove()),\r\n });\r\n return this.syncUI(), this.element;\r\n }\r\n\r\n public override syncUI(): void {\r\n const active = (this.item.items ?? []).filter((sub) => {\r\n if (isFunc(sub.hidden) ? sub.hidden() : sub.hidden) return false;\r\n return !sub.feature || Boolean(this.media.features[sub.feature]);\r\n });\r\n this.renderRows(active);\r\n active.forEach((sub) => {\r\n const li = this.element.querySelector<SettingsRowElement>(`.tmg-media-smenu-group-row[data-sub-id=\"${sub.id}\"]`);\r\n if (li) {\r\n const valNode = li.querySelector<HTMLElement>(\".tmg-media-smenu-group-value\");\r\n valNode ? (valNode.textContent = sub.getValue?.() || \"\") : li.widget?.syncUI();\r\n }\r\n });\r\n }\r\n\r\n private buildRow(sub: SettingsMenuItem): HTMLElement {\r\n const isWidget = sub.widget === \"toggle\" || sub.inline,\r\n disabled = sub.getDisabled?.() ?? ([\"select\", \"drag-select\"].includes(sub.widget as string) && sub.getOptions?.()?.length === 0),\r\n li = createEl(\"li\", { className: \"tmg-media-smenu-group-row\" + (disabled ? \" tmg-media-control-disabled\" : \"\"), tabIndex: 0, inert: disabled || undefined }, { subId: sub.id }) as SettingsRowElement,\r\n lbl = createEl(\"span\", { className: \"tmg-media-smenu-group-label\", textContent: sub.label });\r\n if (sub.title) li.title = isFunc(sub.title) ? sub.title() : sub.title;\r\n if (sub.icon) {\r\n const iconSvg = IconRegistry.get(sub.icon, true);\r\n if (iconSvg) li.append(createEl(\"span\", { className: \"tmg-media-smenu-group-icon\", innerHTML: iconSvg }));\r\n }\r\n if (isWidget) {\r\n const widget = WidgetRegistry.create(sub, this.ctlr);\r\n if (widget) {\r\n sub.inline && sub.widget !== \"toggle\" ? (li.removeAttribute(\"tabindex\"), li.classList.replace(\"tmg-media-smenu-group-row\", \"tmg-media-smenu-inline-wrapper\"), li.append(widget.render()), sub.widget === \"range\" && li.classList.add(\"tmg-media-smenu-row-inline-block\")) : (li.append(lbl, widget.render()), li.classList.add(\"tmg-media-smenu-row-inline\"));\r\n li.widget = widget;\r\n li.addEventListener(\"click\", (e) => !disabled && (e.target === li || e.target === lbl) && li.querySelector<HTMLElement>(\"input, button\")?.click());\r\n } else li.append(lbl);\r\n } else {\r\n const val = createEl(\"span\", { className: \"tmg-media-smenu-group-value\", textContent: sub.getValue() || \"\" });\r\n sub.widget !== \"button\" ? li.append(lbl, val, createEl(\"span\", { className: \"tmg-media-smenu-group-arrow\", ariaHidden: \"true\", innerHTML: \"›\" })) : li.append(lbl);\r\n li.addEventListener(\"click\", () => !disabled && (sub.widget === \"button\" ? sub.onChange?.(null) : this.onSubItemClick?.(sub)));\r\n if (sub.mediaPaths || sub.configPaths || sub.onWire) {\r\n const ac = new AbortController(),\r\n syncUI = () => {\r\n const valNode = li.querySelector<HTMLElement>(\".tmg-media-smenu-group-value\");\r\n valNode ? (valNode.textContent = sub.getValue() || \"\") : (li as SettingsRowElement).widget?.syncUI();\r\n const _d = sub.getDisabled?.() ?? ([\"select\", \"drag-select\"].includes(sub.widget as string) && sub.getOptions?.()?.length === 0);\r\n (li.inert = !!_d), li.classList.toggle(\"tmg-media-control-disabled\", !!_d);\r\n };\r\n sub.mediaPaths?.forEach((path) => this.media.on(path, syncUI, { signal: ac.signal }));\r\n sub.configPaths?.forEach((path) => this.ctlr.config.on(path, syncUI, { signal: ac.signal }));\r\n sub.onWire?.(syncUI, ac.signal);\r\n (li as any)._ac = ac;\r\n }\r\n }\r\n return li;\r\n }\r\n}\r\n\r\nWidgetRegistry.register(\"group\", GroupWidget);\r\n","import { BaseMenuPanel } from \".\";\r\nimport type { SettingsMenuItem, SettingsMenuConfig, SettingsRowElement } from \"../../types\";\r\nimport { createEl, createListRenderer } from \"@utils/dom\";\r\nimport { WidgetRegistry } from \"../widgets\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { isFunc } from \"@utils/obj\";\r\nimport { requestAnimationFrame } from \"@utils/fn\";\r\n\r\nexport class MainMenuPanel extends BaseMenuPanel {\r\n private viewBtn!: HTMLButtonElement;\r\n private renderRows!: ReturnType<typeof createListRenderer<SettingsMenuItem>>;\r\n public onItemClick?: (item: SettingsMenuItem) => void;\r\n public onViewClick?: () => void;\r\n\r\n constructor(ctlr: Controller, private readonly menuConfig: SettingsMenuConfig) {\r\n super(ctlr, undefined, \"tmg-media-smenu-main-panel\");\r\n }\r\n\r\n protected override onSetup() {}\r\n\r\n public build(): void {\r\n const list = createEl(\"ul\", { className: \"tmg-media-smenu-main-list\", role: \"menu\" });\r\n this.renderRows = createListRenderer<SettingsMenuItem>({\r\n container: list,\r\n getKey: (item) => item.id,\r\n createNode: (item) => this.buildRow(item),\r\n destroyNode: (node) => ((node as any)._ac?.abort(), (node as SettingsRowElement).widget?.destroy(), node.remove()),\r\n });\r\n this.content.append(list);\r\n if (this.menuConfig.showView) {\r\n this.viewBtn = createEl(\"button\", { type: \"button\", className: \"tmg-media-smenu-view-btn\", innerHTML: `<span class=\"tmg-media-smenu-row-icon\">${IconRegistry.get(\"returnback\")}</span><span class=\"tmg-media-smenu-view-label\">${this.menuConfig.viewLabel}</span>` });\r\n this.viewBtn.addEventListener(\"click\", () => this.onViewClick?.()), this.content.append(createEl(\"div\", { className: \"tmg-media-smenu-divider\" }), this.viewBtn);\r\n }\r\n }\r\n\r\n public sync(items: SettingsMenuItem[]): void {\r\n this.renderRows(items), this.isActive && this.focusFirst();\r\n }\r\n public override enter(dir?: \"forward\" | \"backward\" | \"none\"): void {\r\n super.enter(dir), this.focusFirst();\r\n }\r\n private focusFirst(): void {\r\n requestAnimationFrame(() => this.element.querySelector<HTMLElement>(\".tmg-media-smenu-row[tabindex='0']\")?.focus(), this.ctlr.signal);\r\n }\r\n\r\n private buildRow(item: SettingsMenuItem): HTMLElement {\r\n const isWidget = item.widget === \"toggle\" || item.widget === \"button\" || item.inline,\r\n li = createEl(\"li\", { className: \"tmg-media-smenu-row\" + (item.getDisabled?.() ? \" tmg-media-control-disabled\" : \"\"), role: \"menuitem\", tabIndex: 0, inert: item.getDisabled?.() || undefined }, { itemId: item.id }) as SettingsRowElement,\r\n lbl = createEl(\"span\", { className: \"tmg-media-smenu-row-label\", textContent: item.label });\r\n if (item.title) li.title = isFunc(item.title) ? item.title() : item.title;\r\n if (item.icon) {\r\n const iconSvg = IconRegistry.get(item.icon, true);\r\n if (iconSvg) li.append(createEl(\"span\", { className: \"tmg-media-smenu-row-icon\", innerHTML: iconSvg }));\r\n }\r\n if (isWidget) {\r\n const widget = WidgetRegistry.create(item, this.ctlr);\r\n if (widget) {\r\n item.inline && item.widget !== \"toggle\" ? (li.removeAttribute(\"tabindex\"), li.classList.replace(\"tmg-media-smenu-row\", \"tmg-media-smenu-inline-wrapper\"), li.append(widget.render()), item.widget === \"range\" && li.classList.add(\"tmg-media-smenu-row-inline-block\")) : (li.append(lbl, widget.render()), li.classList.add(\"tmg-media-smenu-row-inline\"));\r\n li.widget = widget;\r\n li.addEventListener(\"click\", (e) => !item.getDisabled?.() && (e.target === li || e.target === lbl) && li.querySelector<HTMLElement>(\"input, button\")?.click());\r\n } else li.append(lbl);\r\n } else {\r\n const val = createEl(\"span\", { className: \"tmg-media-smenu-row-value\", textContent: item.getValue() || \"\" });\r\n if (item.infoText) {\r\n const info = createEl(\"span\", { className: \"tmg-media-smenu-row-info\", textContent: isFunc(item.infoText) ? item.infoText() : item.infoText });\r\n li.append(lbl, info, val, createEl(\"span\", { className: \"tmg-media-smenu-row-arrow\", ariaHidden: \"true\", innerHTML: \"›\" }));\r\n } else li.append(lbl, val, createEl(\"span\", { className: \"tmg-media-smenu-row-arrow\", ariaHidden: \"true\", innerHTML: \"›\" }));\r\n li.addEventListener(\"click\", () => !item.getDisabled?.() && this.onItemClick?.(item));\r\n if (item.mediaPaths || item.configPaths || item.onWire) {\r\n const ac = new AbortController(),\r\n syncUI = () => {\r\n const valNode = li.querySelector<HTMLElement>(\".tmg-media-smenu-row-value\");\r\n valNode ? (valNode.textContent = item.getValue() || \"\") : (li as SettingsRowElement).widget?.syncUI();\r\n (li.inert = !!item.getDisabled?.()), li.classList.toggle(\"tmg-media-control-disabled\", !!item.getDisabled?.());\r\n };\r\n item.mediaPaths?.forEach((path) => this.media.on(path, syncUI, { signal: ac.signal }));\r\n item.configPaths?.forEach((path) => this.ctlr.config.on(path, syncUI, { signal: ac.signal }));\r\n item.onWire?.(syncUI, ac.signal);\r\n (li as any)._ac = ac;\r\n }\r\n }\r\n return li;\r\n }\r\n}\r\n","import { BaseMenuPanel } from \".\";\r\nimport type { SettingsMenuItem } from \"../../types\";\r\nimport { BaseWidget, WidgetRegistry } from \"../widgets\";\r\nimport { GroupWidget } from \"../widgets/group\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { isFunc } from \"@utils/obj\";\r\nimport { requestAnimationFrame } from \"@utils/fn\";\r\n\r\nexport class SubMenuPanel extends BaseMenuPanel {\r\n private headerLabel!: HTMLElement;\r\n private widgetSlot!: HTMLElement;\r\n private backBtn!: HTMLButtonElement;\r\n private widget: BaseWidget | null = null;\r\n private item: SettingsMenuItem | null = null;\r\n private headerActions!: HTMLElement;\r\n private footerSlot!: HTMLElement;\r\n public onBack?: () => void;\r\n public onSubItemClick?: (item: SettingsMenuItem) => void;\r\n\r\n constructor(ctlr: Controller) {\r\n super(ctlr, undefined, \"tmg-media-smenu-sub-panel\");\r\n }\r\n\r\n protected override onSetup(): void {\r\n this.buildShell();\r\n }\r\n\r\n private buildShell(): void {\r\n const header = createEl(\"div\", { className: \"tmg-media-smenu-sub-header\" });\r\n this.backBtn = createEl(\"button\", { type: \"button\", className: \"tmg-media-smenu-back-btn\", ariaLabel: \"Back\", innerHTML: `<span class=\"tmg-media-smenu-back-arrow\">‹</span>`, tabIndex: 0 });\r\n this.headerLabel = createEl(\"span\", { className: \"tmg-media-smenu-sub-title\", tabIndex: -1 });\r\n this.backBtn.addEventListener(\"click\", (e) => (e.stopPropagation(), this.onBack?.()));\r\n header.addEventListener(\"click\", () => this.onBack?.());\r\n this.headerActions = createEl(\"div\", { className: \"tmg-media-smenu-sub-actions\" });\r\n header.append(this.backBtn, this.headerLabel, this.headerActions);\r\n this.widgetSlot = createEl(\"div\", { className: \"tmg-media-smenu-widget-slot\" });\r\n this.footerSlot = createEl(\"div\", { className: \"tmg-media-smenu-sub-footer\" });\r\n this.content.append(header, this.widgetSlot, this.footerSlot);\r\n }\r\n\r\n public override enter(dir?: \"forward\" | \"backward\" | \"none\") {\r\n super.enter(dir), requestAnimationFrame(() => this.element.querySelector<HTMLElement>(\":is([tabindex='0'], button:not([disabled]), input:not([type='checkbox'], [type='radio'], [disabled])):not(.tmg-media-smenu-back-btn, .tmg-media-range-container)\")?.focus(), this.ctlr.signal);\r\n }\r\n\r\n public load(item: SettingsMenuItem): void {\r\n this.headerLabel.textContent = item.label;\r\n if (this.item?.id === item.id) return void this.widget?.syncUI();\r\n if (this.widget) this.widget.element?.remove(), this.widget.destroy();\r\n this.item = item;\r\n const widget = WidgetRegistry.create(item, this.ctlr);\r\n if (!widget) return;\r\n if (widget instanceof GroupWidget) widget.onSubItemClick = (sub) => this.onSubItemClick?.(sub);\r\n this.widget = widget;\r\n this.widgetSlot.append(widget.render());\r\n // Populate actions\r\n this.headerActions.innerHTML = \"\";\r\n if (item.actions) {\r\n for (const action of item.actions) {\r\n const label = action.getLabel(),\r\n btn = createEl(\"button\", { className: \"tmg-media-smenu-sub-action-btn\" + (!action.icon ? \" tmg-media-smenu-input-btn tmg-media-smenu-text-action\" : \"\"), type: \"button\", ariaLabel: label, title: label });\r\n if (action.id === \"delete\" || action.icon === \"delete\") btn.classList.add(\"tmg-media-smenu-delete-btn\");\r\n action.icon ? (btn.innerHTML = IconRegistry.get(action.icon, true) || label) : (btn.textContent = label);\r\n btn.addEventListener(\"click\", (e) => (e.stopPropagation(), action.onClick()));\r\n this.headerActions.append(btn);\r\n }\r\n }\r\n // Populate footer\r\n this.footerSlot.innerHTML = \"\";\r\n if (item.tipHTML) this.footerSlot.innerHTML = isFunc(item.tipHTML) ? item.tipHTML() : item.tipHTML;\r\n if (item.footerActions?.length) {\r\n const actionsWrap = createEl(\"div\", { className: \"tmg-media-smenu-footer-actions\" });\r\n for (const action of item.footerActions) {\r\n const btn = createEl(\"button\", { className: \"tmg-media-smenu-input-btn\", type: \"button\", textContent: action.getLabel() });\r\n btn.addEventListener(\"click\", () => action.onClick()), actionsWrap.append(btn);\r\n }\r\n this.footerSlot.append(actionsWrap);\r\n }\r\n }\r\n\r\n public syncUI(): void {\r\n this.widget?.syncUI();\r\n if (this.item?.footerActions?.length) {\r\n const btns = this.footerSlot.querySelectorAll(\"button\");\r\n this.item.footerActions.forEach((action, i) => btns[i] && (btns[i].textContent = action.getLabel()));\r\n }\r\n if (this.item?.actions?.length) {\r\n const btns = this.headerActions.querySelectorAll(\"button\");\r\n this.item.actions.forEach((action, i) => {\r\n if (!btns[i]) return;\r\n const lbl = action.getLabel();\r\n btns[i].innerHTML = action.icon ? IconRegistry.get(action.icon, true) || lbl : lbl;\r\n });\r\n }\r\n }\r\n\r\n public get activeId(): string | null {\r\n return this.item?.id ?? null;\r\n }\r\n}\r\n","import type { SleepTimerConfig } from \"./types\";\n\nexport const SLEEP_TIMER_BUILD: SleepTimerConfig = {\n disabled: false,\n};\n","import { BasePlug } from \"@plugs/base\";\nimport type { Controller } from \"@core/controller\";\nimport type { SleepTimerConfig, SleepTimerState } from \"./types\";\nimport { SLEEP_TIMER_BUILD } from \"./build\";\nimport { formatMediaTime } from \"@utils/time\";\nimport { IconRegistry } from \"@core/registries\";\nimport { setTimeout } from \"sia-reactor/utils\";\n\nexport class SleepTimerPlug extends BasePlug<SleepTimerConfig, SleepTimerState> {\n public static readonly plugName = \"sleepTimer\";\n public static readonly BUILD = SLEEP_TIMER_BUILD;\n private targetTime = 0;\n private timeoutId?: number;\n\n constructor(ctlr: Controller, config = ctlr.settings.sleepTimer) {\n super(ctlr, config, { ms: 0 });\n }\n\n public override wire(): void {\n this.media.on(\"state.currentTime\", this.checkTimer, { signal: this.signal });\n // Post Wiring\n super.wire();\n }\n\n public setTimer(ms: number): void {\n this.state.ms = ms;\n clearTimeout(this.timeoutId);\n this.targetTime = 0;\n if (ms === 0) {\n this.ctlr.plug(\"settings.toasts\")?.toast?.(\"Sleep timer turned off\", { icon: IconRegistry.get(\"timer\", true), tag: \"tmg-stmr\", signal: this.signal });\n } else if (ms === -1) {\n this.targetTime = -1;\n this.ctlr.plug(\"settings.toasts\")?.toast?.(\"Sleep timer set to end of video\", { icon: IconRegistry.get(\"timer\", true), tag: \"tmg-stmr\", signal: this.signal });\n } else {\n this.timeoutId = setTimeout(this.triggerSleep, ms, this.signal);\n this.ctlr.plug(\"settings.toasts\")?.toast?.(`Sleep timer set for ${formatMediaTime({ time: ms / 1000, format: \"human-long\" })}`, { icon: IconRegistry.get(\"timer\", true), tag: \"tmg-stmr\", signal: this.signal });\n }\n }\n\n private checkTimer(): void {\n if (this.targetTime === -1 && this.media.status.duration > 0 && this.media.state.currentTime >= this.media.status.duration - 0.5) this.triggerSleep();\n }\n\n private triggerSleep(): void {\n this.media.intent.paused = true;\n this.setTimer(0), this.ctlr.plug(\"settings.notifiers\")?.notify(\"timer\");\n }\n}\n\nexport * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.sleepTimer\": typeof SleepTimerPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n sleepTimer: SleepTimerConfig;\n }\n}\n","import { TimeConfig } from \"./types\";\r\n\r\nexport const TIME_BUILD: Partial<TimeConfig> = {\r\n min: 0,\r\n skip: 10,\r\n mode: \"elapsed\",\r\n format: \"digital\",\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { TimeConfig, TimeState } from \"./types\";\r\nimport { TIME_BUILD } from \"./build\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { parseIfPercent, clamp, safeNum } from \"@utils/num\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport { formatMediaTime } from \"@utils/time\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { CtlrMedia } from \"@defs/contract\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { getMediaMax, getMediaMin } from \"@utils/media\";\r\n\r\nexport class TimePlug extends BasePlug<TimeConfig, TimeState> {\r\n public static readonly plugName = \"time\";\r\n public static readonly BUILD = TIME_BUILD;\r\n public realStart = 0;\r\n public pseudoStart = 0;\r\n public skipDuration = 0;\r\n public skipNotifier?: HTMLElement | null = null;\r\n private skipDurationId = -1;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.time) {\r\n super(ctlr, config, {\r\n whitelist: [\"lightState.preview.time\", \"settings.time.min\", \"settings.time.max\", \"settings.time.start\", \"settings.time.end\", \"settings.auto.next.preview.time\"], // #DEFAULT: build privilege\r\n });\r\n }\r\n\r\n public override wire(): void {\r\n // Variables Assignment\r\n this.realStart = this.pseudoStart = this.config.start ?? 0;\r\n // Ctlr Media Setters\r\n this.media.set(\"intent.currentTime\", (v) => clamp(this.config.min, v, this.config.max), { signal: this.signal }); // #VALIDATOR: rules enforcement\r\n // ---- Config Watchers\r\n this.ctlr.config.watch(\"settings.time.start\", (v) => v !== this.pseudoStart && (this.realStart = +v!), { signal: this.signal });\r\n // State Listeners\r\n this.state.on(\"whitelist\", this.handleWhitelistState, { init: true, signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"status.loadedData\", this.handleLoadedDataStatus, { signal: this.signal });\r\n this.media.on(\"state.currentTime\", this.handleCurrentTimeState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.waiting\", this.handleWaitingStatus, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"skipFwd\", { fn: this.handleKeySkipFwd, keyboard: { phase: \"keydown\" } });\r\n this.ctlr.registerAction(\"skipBwd\", { fn: this.handleKeySkipBwd, keyboard: { phase: \"keydown\" } });\r\n this.ctlr.registerAction(\"timeMode\", { fn: this.toggleMode, keyboard: { phase: \"keyup\" } });\r\n this.ctlr.registerAction(\"timeFormat\", { fn: this.rotateFormat, keyboard: { phase: \"keyup\" } });\r\n super.wire();\r\n }\r\n\r\n protected handleWhitelistState({ value: paths = [] }: REvent<TimeState, \"whitelist\">): void {\r\n for (const path of paths) this.ctlr.config.get(path, this.toTimeVal, { signal: this.signal });\r\n }\r\n\r\n protected handleLoadedDataStatus({ value }: REvent<CtlrMedia, \"status.loadedData\">): void {\r\n if (value && this.config.start != null && this.media.state.currentTime !== this.realStart) this.media.intent.currentTime = this.realStart;\r\n }\r\n\r\n protected handleCurrentTimeState({ value: curr }: REvent<CtlrMedia, \"state.currentTime\">): void {\r\n curr = safeNum(curr);\r\n (curr < this.config.min || curr > this.config.max) && silence(() => ((this.media.intent.currentTime = this.config.loop ? this.config.min : curr), !this.config.loop && (this.media.intent.paused = true))); // \"Time Clamp Guard\" if transaction\r\n if (this.media.status.readyState && curr && this.ctlr.payload.wired) this.config.start = this.pseudoStart = curr > 3 && curr < (this.config.end ?? this.media.status.duration) - 3 ? curr : this.realStart;\r\n }\r\n\r\n protected handleWaitingStatus({ value }: REvent<CtlrMedia, \"status.waiting\">): void {\r\n value && IS_MOBILE && this.media.once(\"status.waiting\", () => this.ctlr.plug(\"settings.overlay\")?.[this.skipNotifier ? \"hide\" : \"delay\"](), { signal: this.signal });\r\n }\r\n\r\n public toTimeVal(value?: any): number {\r\n return parseIfPercent(value, this.media.status.duration);\r\n }\r\n public toTimeText(time = this.media.state.currentTime, useMode = false, showMs = false): string {\r\n if (!useMode || this.config.mode !== \"remaining\") return formatMediaTime({ time, format: this.config.format, elapsed: true, showMs });\r\n return formatMediaTime({ time: this.media.status.duration - time, format: this.config.format, elapsed: false, showMs });\r\n }\r\n\r\n public get nextMode(): TimeConfig[\"mode\"] {\r\n return this.config.mode === \"elapsed\" ? \"remaining\" : \"elapsed\";\r\n }\r\n public toggleMode(): void {\r\n this.config.mode = this.nextMode;\r\n }\r\n\r\n public get nextFormat(): TimeConfig[\"format\"] {\r\n return this.config.format === \"digital\" ? \"human\" : this.config.format === \"human\" ? \"human-long\" : \"digital\";\r\n }\r\n public rotateFormat(): void {\r\n this.config.format = this.nextFormat;\r\n }\r\n\r\n public skip(duration: number): void {\r\n const overlay = this.ctlr.plug(\"settings.overlay\"),\r\n notifier = this.ctlr.plug(\"settings.notifiers\")?.comp(\"fwdbwdnotifier\")?.[duration > 0 ? \"fwdDiv\" : \"bwdDiv\"],\r\n [min, max, time] = [getMediaMin(this.media), getMediaMax(this.media), this.media.state.currentTime];\r\n duration = min >= max ? 0 : safeNum(duration > 0 ? (max - time > duration ? duration : max - time) : duration < 0 ? (time - min > Math.abs(duration) ? duration : -(time - min)) : 0);\r\n if (min < max) this.media.intent.currentTime = time + duration; // Apprentice Slider syncs, no CSS hack\r\n // this.settings.css.currentPlayedPosition = this.settings.css.currentThumbPosition = safeNum(this.media.intent.currentTime / this.media.status.duration);\r\n const plug = this.ctlr.plug(\"settings.gesture\");\r\n if (plug?.state.skipPersist) {\r\n if (this.skipNotifier && notifier !== this.skipNotifier) {\r\n this.skipDuration = 0;\r\n this.skipNotifier.classList.remove(\"tmg-media-control-persist\");\r\n }\r\n overlay?.show();\r\n this.skipNotifier = notifier;\r\n notifier?.classList.add(\"tmg-media-control-persist\");\r\n this.skipDuration += duration;\r\n clearTimeout(this.skipDurationId);\r\n this.skipDurationId = setTimeout(\r\n () => {\r\n plug.stopSkipPersist();\r\n notifier?.classList.remove(\"tmg-media-control-persist\");\r\n this.skipDuration = 0;\r\n this.skipNotifier = null;\r\n !this.media.state.paused ? overlay?.hide() : overlay?.show();\r\n },\r\n parseCSSTime(this.settings.css.notifiersAnimationTime),\r\n this.signal\r\n );\r\n return void notifier?.setAttribute(\"data-skip\", String(Math.trunc(this.skipDuration)));\r\n } else this.skipNotifier?.classList.remove(\"tmg-media-control-persist\");\r\n notifier?.setAttribute(\"data-skip\", String(Math.trunc(Math.abs(duration))));\r\n }\r\n\r\n protected handleKeySkipFwd(): void {\r\n this.ctlr.plug(\"settings.gesture\")?.stopSkipPersist();\r\n this.skip(this.ctlr.plug(\"settings.keys\")?.getModded(\"skip\", \"\", this.config.skip) ?? this.config.skip);\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"fwd\");\r\n }\r\n\r\n protected handleKeySkipBwd(): void {\r\n this.ctlr.plug(\"settings.gesture\")?.stopSkipPersist();\r\n this.skip(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"skip\", \"\", this.config.skip) ?? this.config.skip));\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"bwd\");\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.time\": typeof TimePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n time: TimeConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { TimeTravelConfig } from \"./types\";\r\n\r\nexport const TIME_TRAVEL_BUILD: DeepPartial<TimeTravelConfig> = {\r\n module: {\r\n whitelist: [\"intent\"], // for undoing actions while \"state\" for reliving time itself\r\n mirrorReads: true,\r\n mirrorWrites: true,\r\n },\r\n console: {},\r\n persist: false,\r\n};\r\n","import { BasePlug } from \"../../base\";\nimport { TIME_TRAVEL_BUILD } from \"./build\";\nimport type { TimeTravelConfig } from \"./types\";\nimport { fanout } from \"sia-reactor/utils\";\nimport { createTxPathMerger, TimeTravelModule } from \"sia-reactor/modules\";\nimport { TimeTravelConsole } from \"sia-reactor/adapters/vanilla\";\nimport { getCtlrIdx } from \"@tools/player\";\n\nexport class TimeTravelPlug extends BasePlug<TimeTravelConfig> {\n public static readonly plugName = \"timeTravel\";\n public static readonly BUILD = TIME_TRAVEL_BUILD;\n public module!: TimeTravelModule<any>;\n public console!: TimeTravelConsole;\n\n public override mount(): void {\n // Variables Assignment\n this.module = new TimeTravelModule({ beforeEntry: createTxPathMerger(), ...this.config.module });\n const pmdle = this.ctlr.plug(\"settings.persist\")?.module;\n // Utility Injection\n pmdle?.attach(this.module.state, \"timeTravel.state\");\n this.media.use(this.module), pmdle && !pmdle.state.hydrated && (this.module.untrack(), pmdle.state.once(\"hydrated\", this.module.track, { signal: this.signal }));\n }\n\n public override wire(): void {\n // Variables Assignment\n this.console = new TimeTravelConsole(this.module, { title: `TMG Controller ${getCtlrIdx(this.ctlr) + 1} Tape`, ...(this.config.console as Partial<TimeTravelConfig[\"console\"]>) });\n // Ctlr Config Watchers\n this.ctlr.config.watch(\"settings.css.brandColor\", (v) => (this.console.config.color = v as string), { init: true, signal: this.signal });\n // ----------- Listeners\n this.ctlr.config.on(\n \"settings.timeTravel.persist\",\n (e) => {\n const pmdle = this.ctlr.plug(\"settings.persist\")?.module;\n if (!pmdle) return;\n Array.isArray(pmdle.config.whitelist) ? (pmdle.config.whitelist = { \"0\": pmdle.config.whitelist } as any) : !pmdle.config.whitelist && (pmdle.config.whitelist = {} as any);\n (pmdle.config.whitelist as Record<string, string[]>)[\"timeTravel.state\"] = e.value ? [\"*\"] : [];\n },\n { signal: this.signal, init: true }\n );\n this.ctlr.config.on(\"settings.timeTravel.module\", (e) => fanout(this.module.config, e.currentTarget.value), { signal: this.signal, init: false }); // #STABLE: snubs unchanged writes\n this.ctlr.config.on(\"settings.timeTravel.console\", (e) => fanout(this.console.config, e.currentTarget.value), { signal: this.signal, init: false }); // #STABLE: snubs unchanged writes\n // Post Wiring\n this.ctlr.registerAction(\"timeTravelUndo\", { fn: this.module.undo, zen: true });\n this.ctlr.registerAction(\"timeTravelRedo\", { fn: this.module.redo, zen: true });\n super.wire();\n }\n\n protected override onDestroy(): void {\n this.console.destroy(), this.module.destroy(), super.onDestroy();\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.timeTravel\": typeof TimeTravelPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n timeTravel: TimeTravelConfig;\n }\n}\n","import { BasePlug } from \"@plugs/base\";\nimport type { Controller } from \"@core/controller\";\nimport { force, getPath, getPaths, isLeafPath, setPath } from \"sia-reactor/utils\";\nimport { limited } from \"@utils/fn\";\nimport type { VoiceStage, VoiceConfig, VoiceState } from \"./types\";\nimport { VOICE_BUILD } from \"./build\";\nimport { capitalize, fuzzyMatch as match, getSimilarity, uncamelize } from \"@utils/str\";\nimport { type ToastOptions } from \"@t007/toast\";\nimport { REvent } from \"sia-reactor\";\nimport { CtlrConfig } from \"@defs/config\";\nimport { tutorialOpts } from \"../toasts\";\n\nexport class VoicePlug extends BasePlug<VoiceConfig, VoiceState> {\n public static readonly plugName = \"voice\";\n public static readonly BUILD = VOICE_BUILD;\n protected recognition?: any;\n protected teachBasics = limited((_id?: string) => ((_id = this.ctlr.plug(\"settings.toasts\")?.toast?.(`Follow the predictor guides at the ${uncamelize(this.config.predictorPos.value, \"-\")}. Click ⚙ for settings`, { ...tutorialOpts(() => (this.teachBasics.block(), t007.toast?.dismiss(_id))), signal: this.signal })), { key: \"tmg_voice_tut_1\", maxTimes: 5 }));\n protected readonly IDS = { LISTENER: \"tmg-media-voice-listener\" + this.ctlr.config.id, PREDICTOR: \"tmg-media-voice-predictor\" + this.ctlr.config.id };\n protected get root() {\n return { media: this.ctlr.media, settings: this.ctlr.settings };\n }\n\n constructor(ctlr: Controller, config = ctlr.settings.voice) {\n super(ctlr, config, { context: \"*\", listening: false, muted: false });\n }\n\n public override mount(): void {\n // Variables Assignment\n const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognitn;\n if (!SpeechRecognition) return;\n this.recognition = new SpeechRecognition();\n Object.assign(this.recognition, { continuous: true, interimResults: true, onresult: this.handleResult, onend: this.handleEnd, onerror: this.handleError });\n }\n\n public override wire(): void {\n // Variables Assignment\n const container = this.ctlr.plug(\"settings.toasts\")?.container;\n // Event Listeners\n container?.addEventListener(\"click\", this.handleLinkClick, { signal: this.signal });\n container?.addEventListener(\"click\", this.handleInputEvent, { signal: this.signal });\n container?.addEventListener(\"keydown\", this.handleInputEvent, { signal: this.signal });\n container?.addEventListener(\"wheel\", this.stayWoke, { signal: this.signal, passive: true });\n container?.addEventListener(\"touchmove\", this.stayWoke, { signal: this.signal, passive: true });\n // State Watchers\n this.state.watch(\"context\", this.onContext, { signal: this.signal });\n // ----- Listeners\n this.state.on(\"listening\", ({ value }) => this.media.container.classList.toggle(\"tmg-media-voice-listening\", value), { signal: this.signal });\n this.state.on(\"muted\", () => this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.LISTENER, { actions: this.getListenerOptions().actions }), { signal: this.signal });\n // Ctlr Media Watchers\n this.media.watch(\"tech\", () => (this.media.features.voice ||= !this.recognition), { init: true, signal: this.signal });\n // ---- State Listeners\n this.ctlr.state.on(\"mediaIntersecting\", () => this.ctlr.debounce(\"syncingIntersectingVoiceListeners\", this.syncListeners, 300, false), { signal: this.signal });\n // ---- Config -------\n this.ctlr.config.on(\"settings.voice.active\", this.handleActive, { signal: this.signal });\n this.ctlr.config.on(\"settings.voice.wakeWord\", ({ value }) => (value ? this.config.active.value && !this.state.listening && this.start() : !this.state.listening && this.stop()), { signal: this.signal });\n this.ctlr.config.on(\"settings.voice.listenerPos.value\", ({ value }) => this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.LISTENER, { position: value }), { signal: this.signal });\n this.ctlr.config.on(\"settings.voice.predictorPos.value\", ({ value }) => this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.PREDICTOR, { position: value }), { signal: this.signal });\n this.ctlr.config.on(\"disabled\", this.syncListeners, { signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"voiceQuit\", { fn: () => (this.config.active.value = false) });\n this.ctlr.registerAction(\"voiceSleep\", { fn: this.sleep });\n this.ctlr.registerAction(\"voiceSubmit\", { fn: this.submit });\n this.ctlr.registerAction(\"voiceHistoryFirst\", { fn: () => this.goTo(\"*\") });\n this.ctlr.registerAction(\"voiceHistoryPrev\", { fn: this.goBack });\n this.ctlr.registerAction(\"voiceHistoryNext\", { fn: this.goForward });\n this.ctlr.registerAction(\"voiceHistoryLast\", { fn: () => this.goTo(this.state.context) });\n this.ctlr.registerAction(\"voiceHistoryClear\", { fn: () => this.resetContext(false) });\n this.ctlr.payload.wired ? this.syncListeners() : this.ctlr.state.wonce(\"readyState\", this.syncListeners, { signal: this.signal }); // #HEAVY: waits for !lightState. If wake word is enabled, start the engine immediately in \"sleep\" mode\n super.wire();\n }\n\n protected handleResult(e: any): void {\n let transcript = \"\";\n if (!this.state.muted) for (let i = e.resultIndex; i < e.results.length; ++i) transcript += e.results[i][0].transcript;\n transcript = transcript.trim().toLowerCase();\n // 1. Wake Word Detection\n if (transcript && !this.state.listening) {\n const token = match([this.config.wakeWord.toLowerCase()], transcript, this.config.inputs.accuracy);\n if (token) {\n this.wakeUp();\n const idx = transcript.indexOf(token);\n transcript = idx !== -1 ? transcript.substring(idx + token.length).trim() : \"\"; // Remove the wake word from the transcript\n }\n if ((!token || !transcript) && this.config.behavior.value === \"strict\") return;\n }\n // 2. Update the listener UI.\n if (!this.state.muted) this.ctlr.plug(\"settings.toasts\")?.toast?.(transcript ? `${transcript}${!this.state.listening ? `... Say \"${this.linked(this.config.wakeWord)}\"!` : \"\"}` : this.getListenerSpeech(true, this.state.listening ? \"Didn't catch that...\" : undefined), this.getListenerOptions(true));\n this.ctlr.debounce(\"voiceSleeping\", this.sleep, this.config.timeout, false);\n // 3. Anytime-stage actions (run regardless of listening state)\n transcript && this.process(transcript);\n }\n\n protected handleEnd(): void {\n if (this.config) this.config.active.value !== false && this.start();\n }\n protected handleError(e: any): void {\n if (e.error === \"not-allowed\" || e.error === \"service-not-allowed\") (this.config.active.value = false), this.ctlr.plug(\"settings.toasts\")?.toast?.error(\"Microphone access revoked. Please check your settings.\");\n }\n protected handleActive({ value }: REvent<CtlrConfig, \"settings.voice.active\">): void {\n if (value === false) {\n this.state.listening = false;\n this.recognition?.abort(), t007.toast?.dismiss(this.IDS.PREDICTOR), t007.toast?.dismiss(this.IDS.LISTENER);\n } else if (this.shouldListen()) value === \"passive\" ? (this.sleep(), this.start()) : (this.wakeUp(), this.start());\n }\n\n public syncListeners(): void {\n if (!this.shouldListen()) (this.state.listening = false), this.recognition?.abort(), t007.toast?.dismiss(this.IDS.PREDICTOR), t007.toast?.dismiss(this.IDS.LISTENER);\n else this.config.active.value === true ? (this.wakeUp(), this.start()) : this.config.active.value === \"passive\" && this.start();\n }\n protected shouldListen(): boolean {\n return this.ctlr.payload.wired && this.ctlr.state.mediaIntersecting && !this.ctlr.config.disabled;\n }\n\n protected async askPermission(): Promise<boolean> {\n const state = (await navigator.permissions?.query({ name: \"microphone\" as any }).catch(() => null))?.state ?? \"prompt\";\n if (state === \"granted\" || state === \"denied\") return state === \"granted\";\n // prettier-ignore\n return new Promise((res, _, req?: () => void, i = 0) => ((req = () => this.ctlr.plug(\"settings.toasts\")?.toast?.info(\"We need permission to use Voice Control\", { id: this.IDS.LISTENER, autoClose: false, actions: { OK: () => navigator.mediaDevices.getUserMedia({ audio: true }).then((s) => (s.getTracks().forEach((t) => t.stop()), res(true))).catch(() => (this.ctlr.plug(\"settings.toasts\")?.toast?.warn(\"Grant permissions to use Voice Control\", { id: this.IDS.LISTENER, autoClose: false, actions: { Retry: req!, Cancel: () => res(false) } }), ++i > 3 && res(false))), Cancel: () => res(false), }, }))())); // going the extra mile mustn't take a mile of logic even when 3rd time's the charm\n }\n public async start(): Promise<void> {\n const granted = await this.askPermission();\n granted && !this.state.listening && this.config.behavior.value === \"persistent\" && this.ctlr.plug(\"settings.toasts\")?.toast?.(this.getListenerSpeech(), this.getListenerOptions());\n try {\n this.recognition?.start();\n } catch (e) {} // Silently swallows the InvalidStateError since we might call when already on due to wake word\n }\n public stop(): void {\n this.sleep(), this.recognition?.abort();\n }\n public wakeUp(): void {\n if (this.config.active.value !== true) return void (this.config.active.value = true);\n if (this.state.listening) return;\n this.state.listening = true;\n this.resetContext();\n this.teachBasics(), this.ctlr.plug(\"settings.toasts\")?.toast?.(this.getListenerSpeech(false), this.getListenerOptions());\n this.ctlr.debounce(\"voiceSleeping\", this.sleep, this.config.timeout, false);\n }\n public sleep(): void {\n if (this.config.active.value === false) return;\n if (this.config.active.value !== \"passive\") return void (this.config.active.value = this.config.wakeWord ? \"passive\" : false);\n this.state.listening = false;\n this.resetContext();\n t007.toast?.dismiss(this.IDS.PREDICTOR), !this.config.active.value || this.config.behavior.value !== \"persistent\" ? t007.toast?.dismiss(this.IDS.LISTENER) : this.ctlr.plug(\"settings.toasts\")?.toast?.(this.getListenerSpeech(), this.getListenerOptions(true));\n }\n\n protected dispatchActions(stage: VoiceStage, cleaned: string): boolean {\n const acc = this.config.inputs.accuracy;\n for (const action of Object.values(this.ctlr.actions)) {\n const triggers = this.config.commands[action.id];\n if (action.id !== \"voiceToggleOn\" && action.id !== \"voiceToggleOff\" && (action.voice?.stage ?? \"post-route\") === stage && triggers?.length && match(triggers, cleaned, acc)) return this.ctlr.runAction(action.id), this.ctlr.plug(\"settings.toasts\")?.toast?.success(`Executed <i>${action.label || action.id}</i>`, { id: this.IDS.LISTENER, autoClose: this.config.behavior.value !== \"persistent\" }), true;\n }\n return false;\n }\n protected process(transcript: string, cleaned = transcript.replace(/[-\\s]/g, \"\"), isSubmit = false, dormant = !this.state.listening): void {\n if ((!this.config.commandsDisabled && this.dispatchActions(\"anytime\", cleaned)) || dormant) return;\n // --- 1. PRE-ROUTE STAGE ---\n if (!this.config.commandsDisabled && this.dispatchActions(\"pre-route\", cleaned)) return;\n // --- 2. LEAF EXECUTION ---\n if (this.isLeaf(this.state.context)) return this.execute(this.state.context, transcript, cleaned, false);\n // --- 3. PATH EXTRACTION (PRIORITY) ---\n const paths = this.getValidPaths();\n let matched: string | null = null,\n highest = 0;\n if (paths.length)\n for (let i = 0; i < paths.length; i++) {\n const leaf = paths[i].split(\".\").pop()!.toLowerCase();\n if (cleaned === leaf) {\n matched = paths[i];\n break;\n }\n const score = getSimilarity(leaf, cleaned);\n if (score > this.config.inputs.accuracy && score > highest) (highest = score), (matched = paths[i]);\n } // Fuzzy Match: Check if the user said the last word of any valid path\n if (matched) return void ((this.state.context = matched), this.isLeaf(matched) && this.execute(matched, transcript, cleaned, true)); // If a S.I.A path strongly matches what they said, TAKE IT. Bypasses commands completely.\n else if (isSubmit) {\n const path = this.state.context === \"*\" ? transcript : `${this.state.context}.${transcript}`,\n val = this.ctlr.isLogicPath(path) ? getPath(this.root as any, path) : undefined;\n if (val !== undefined) return void ((this.state.context = path), this.isLeaf(path, val) && this.execute(path, transcript, cleaned, true)); // Hey dev or explorer, here u go!\n }\n if (paths.length) {\n const pathInput = this.ctlr.plug(\"settings.toasts\")?.container?.querySelector<HTMLInputElement>(\".tmg-media-voice-path-input\");\n if (pathInput) pathInput.value = transcript.trim();\n }\n // --- 4. POST-ROUTE STAGE ---\n if (!this.config.commandsDisabled) this.dispatchActions(\"post-route\", cleaned);\n }\n protected predict(): void {\n const crumbHtml = this.history.length < 2 ? \"\" : `<div class=\"tmg-media-voice-sticky-crumb\">` + this.history.map((p, idx, _, active = idx === this.historyIdx) => `<small><i style=\"${active ? \"font-weight: bold;\" : \"opacity: 0.8;\"}\">${this.linked(p === \"*\" ? \"Root\" : capitalize(p.split(\".\").pop()!), p, true)}</i></small>`).join(\" <span style='opacity: 0.4;'><small>></small></span> \") + `</div>`,\n actions: Record<string, () => void> = {};\n if (this.history.length > 1) actions[\"↻\"] = () => this.resetContext(false);\n if (this.historyIdx > 0) actions[\"‹\"] = this.goBack;\n if (this.historyIdx < this.history.length - 1) actions[\"›\"] = this.goForward;\n if (this.isLeaf(this.state.context)) {\n const value = getPath(this.root as any, this.state.context as any),\n isArray = Array.isArray(value),\n type = isArray ? \"array\" : typeof value,\n showInput = this.config.inputs.strict.value === true || (this.config.inputs.strict.value === \"auto\" && type !== \"boolean\"),\n showSubmit = this.config.inputs.strict.value === true || (this.config.inputs.strict.value === \"auto\" && type === \"string\"),\n display = isArray ? value.join(\", \") : value ?? \"\",\n inputHtml = showInput ? `<div class=\"tmg-media-voice-input-wrap\")><input type=\"${type === \"number\" ? \"number\" : \"text\"}\" class=\"tmg-media-voice-exact-input\") placeholder=\"${display || \"Type value...\"}\" value=\"${display}\"/>${showSubmit ? `<button type=\"button\" class=\"tmg-media-voice-exact-submit\")>↳</button>` : \"\"}</div>` : \"\",\n // prettier-ignore\n hints = type === \"boolean\" ? `${this.config.commands.voiceToggleOn?.slice(0, 2).map((v) => this.linked(v)).join(\", \")} or ${this.config.commands.voiceToggleOff?.slice(0, 2).map((v) => this.linked(v)).join(\", \")} ${inputHtml}` : type === \"number\" ? `a number (like ${this.linked(\"0\")}, ${this.linked(\"50\")}) ${inputHtml}` : isArray ? `comma-separated values ${inputHtml}` : `the exact text ${inputHtml}`;\n return void this.ctlr.plug(\"settings.toasts\")?.toast?.(`${crumbHtml}Try saying ${hints}`, this.getPredictorOptions(actions));\n }\n const paths = this.getValidPaths();\n if (!paths.length) return;\n const inputHtml = `<input type=\"text\" class=\"tmg-media-voice-path-input\") placeholder=\"...text\"/>`;\n this.ctlr.plug(\"settings.toasts\")?.toast?.(`${crumbHtml}Try these:<br>${inputHtml} • ${paths.map((p) => this.linked(p.split(\".\").pop()!)).join(\" • \")}`, this.getPredictorOptions(actions));\n }\n protected execute(path: string, transcript: string, cleaned = transcript.replace(/[-\\s]/g, \"\"), isNav = false, isSubmit = false): void {\n const value = this.parse(transcript, cleaned, path, isNav);\n if (value === null) return;\n const strict = this.config.inputs.strict.value === true || (this.config.inputs.strict.value === \"auto\" && typeof value === \"string\");\n if (strict && !isSubmit) {\n const input = this.ctlr.plug(\"settings.toasts\")?.container?.querySelector<HTMLInputElement>(clame(\"exact-input\"));\n if (input) input.value = Array.isArray(value) ? value.join(\", \") : String(value);\n return void this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.LISTENER, { render: transcript || String(value) });\n } // Auto-Strict: Blocks execution for strings only (or everything if true)\n setPath(this.root as any, path as any, value), this.ctlr.plug(\"settings.toasts\")?.toast?.success(`Set <i>${path.split(\".\").join(\" > \")}</i> to ${Array.isArray(value) ? `[${value.join(\", \")}]` : value}`, { id: this.IDS.LISTENER, autoClose: this.config.behavior.value !== \"persistent\" }), this.goBack();\n }\n protected parse(transcript: string, cleaned = transcript.replace(/[-\\s]/g, \"\"), path: string, isNav = false): any {\n const val = getPath(this.root as any, path as any),\n type = typeof val;\n if (type === \"boolean\") {\n if (isNav && this.config.autoToggles) return !val;\n return match(this.config.commands.voiceToggleOn, transcript, this.config.inputs.accuracy) ? true : match(this.config.commands.voiceToggleOff, transcript, this.config.inputs.accuracy) ? false : null;\n }\n if (type === \"number\") {\n const match = transcript.match(/-?\\d+(\\.\\d+)?/);\n return match ? Number(match[0]) : null;\n }\n if (Array.isArray(val) || type === \"string\") {\n const leaf = path.split(\".\").pop()!.toLowerCase(),\n rgx = new RegExp(`^(set|change)\\\\s+${leaf}\\\\s+to\\\\s+`, \"i\"),\n val = transcript.replace(rgx, \"\").trim();\n if (isNav && !rgx.test(transcript)) if (cleaned === leaf || getSimilarity(leaf, cleaned) > this.config.inputs.accuracy) return null;\n return val ? (type === \"string\" ? val : val.split(/\\s*(?:,|and)\\s*/i).filter(Boolean)) : null;\n }\n return null;\n }\n\n protected history: string[] = [\"*\"];\n protected historyIdx: number = 0;\n protected resetContext(direct = this.config.inputs.direct): void {\n if (direct) (this.history = [\"*\", \"media\", \"media.intent\"]), (this.historyIdx = 2), force(() => (this.state.context = \"media.intent\"));\n else (this.history = [\"*\"]), (this.historyIdx = 0), force(() => (this.state.context = \"*\"));\n }\n protected onContext(value: string): void {\n if (this.history[this.historyIdx] !== this.state.context) {\n const idx = this.history.indexOf(this.state.context);\n if (idx !== -1) this.historyIdx = idx;\n else (this.history = this.history.slice(0, this.historyIdx + 1)), this.history.push(value), (this.historyIdx = this.history.length - 1);\n }\n this.state.listening && this.predict(); // The single source of truth for rendering the UI\n }\n protected goBack(): void {\n if (this.historyIdx > 0) this.state.context = this.history[--this.historyIdx];\n }\n protected goForward(): void {\n if (this.historyIdx < this.history.length - 1) this.state.context = this.history[++this.historyIdx];\n }\n protected goTo(path: string): void {\n this.state.context = path;\n }\n\n protected linked(text: string, value = text.toLowerCase(), isGoto = false): string {\n return `<u class=\"tmg-media-voice-link\" ${isGoto ? \"data-goto\" : \"data-cmd\"}=\"${value}\" tabindex=\"0\" style=\"cursor:pointer; text-decoration-color: currentColor;\">${text}</u>`;\n }\n protected handleLinkClick(e: MouseEvent, target = e.target as HTMLElement): void {\n if (!target.matches(clame(\"link\"))) return;\n e.preventDefault(), e.stopPropagation();\n if (target.dataset.goto) return this.goTo(target.dataset.goto);\n const cmd = target.dataset.cmd!;\n this.ctlr.plug(\"settings.toasts\")?.toast?.(cmd, { id: this.IDS.LISTENER }); // Instantly update the listener toast to show they \"clicked/said\" it\n cmd === this.config.wakeWord.toLowerCase() ? this.wakeUp() : this.process(cmd); // Pipe it straight into the process engine as if they spoke it!\n }\n protected handleInputEvent(e: Event, target = e.target as HTMLElement, isEnter = e.type === \"keydown\" && (e as KeyboardEvent).key === \"Enter\", isClick = e.type === \"click\"): void {\n this.stayWoke(e);\n if ((isEnter && target.matches(clame(\"exact-input\"))) || (isClick && target.matches(clame(\"exact-submit\")))) e.preventDefault(), e.stopPropagation(), this.submit(target.closest(clame(\"input-wrap\"))?.querySelector<HTMLInputElement>(clame(\"exact-input\")));\n else if (isEnter && target.matches(clame(\"path-input\"))) e.preventDefault(), e.stopPropagation(), this.submit(target as HTMLInputElement, undefined, true);\n }\n protected submit(input = this.ctlr.plug(\"settings.toasts\")?.container?.querySelector<HTMLInputElement>(clame(\"exact-input\")), render = input?.value.trim(), process = false): void {\n if (input && render) this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.LISTENER, { render: render, type: undefined }), !process ? this.execute(this.state.context, render, undefined, false, true) : this.process(render, undefined, true); // Execute with isSubmit = true\n }\n protected stayWoke(e: Event): void {\n this.state.listening && (e.target as HTMLElement).closest(`:is([id=\"${this.IDS.PREDICTOR}\"],[id=\"${this.IDS.LISTENER}\"])`) && this.ctlr.debounce(\"voiceSleeping\", this.sleep, this.config.timeout, false);\n }\n\n protected isLeaf(path: string, val = path !== \"*\" && getPath(this.root as any, path as any)): boolean {\n return (val && Array.isArray(val)) || isLeafPath(this.root as any, path as any, undefined, val);\n }\n protected getValidPaths(): string[] {\n return getPaths(this.root as any, this.state.context as any, { depth: 1 })\n .filter(this.ctlr.isLogicPath)\n .sort((a, b) => a.localeCompare(b));\n }\n protected getListenerOptions(transient = false): ToastOptions {\n const actions: Record<string, () => void> = { [this.state.muted ? \"⏵\" : \"⏸\"]: () => (this.state.muted = !this.state.muted) };\n return { id: this.IDS.LISTENER, icon: \"🎙️\", position: this.state.listening ? this.config.listenerPos.value : this.config.predictorPos.value, autoClose: transient ? this.config.behavior.value !== \"persistent\" : false, closeButton: true, dragToClose: false, actions, onClose: (elapsed?: boolean) => !elapsed && (this.config.active.value = false), type: undefined, signal: this.signal };\n }\n protected getPredictorOptions(actions: ToastOptions[\"actions\"]): ToastOptions {\n return { id: this.IDS.PREDICTOR, icon: \"✨\", position: this.config.predictorPos.value, autoClose: false, closeButton: true, dragToClose: false, animation: \"fade\", actions, onClose: (elapsed) => !elapsed && this.sleep(), signal: this.signal };\n }\n protected getListenerSpeech(full = true, firstHalf = \"Listening...\", secondHalf = `Say \"${this.linked(this.config.wakeWord)}\" to wake me up!`, first = true): string {\n return full ? `${firstHalf} ${secondHalf}` : first ? firstHalf : secondHalf;\n }\n\n public override onDestroy(): void {\n this.stop(), super.onDestroy();\n }\n}\nconst clame = (suffix: string) => `.tmg-media-voice-${suffix}`;\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.voice\": typeof VoicePlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n voice: VoiceConfig;\n }\n}\n\ndeclare module \"@defs/contract\" {\n interface MediaExtraFeatures {\n voice: boolean;\n }\n}\n","import { VoiceConfig } from \"./types\";\nimport { TOAST_UI_POSITIONS } from \"@t007/toast\";\n\nexport const VOICE_BUILD: VoiceConfig = {\n active: {\n value: \"passive\",\n options: [\n { value: true, display: \"On\" },\n { value: false, display: \"Off\" },\n { value: \"passive\", display: \"Passive\" },\n ],\n },\n wakeWord: \"player\",\n behavior: {\n value: \"persistent\",\n options: [\n { value: \"persistent\", display: \"Persistent\" },\n { value: \"auto\", display: \"Auto (Show on speech)\" },\n { value: \"strict\", display: \"Strict (Show after wake)\" },\n ],\n },\n timeout: 15000,\n inputs: {\n direct: true,\n strict: {\n value: \"auto\",\n options: [\n { value: true, display: \"On\" },\n { value: false, display: \"Off\" },\n { value: \"auto\", display: \"Auto (On for text)\" },\n ],\n },\n accuracy: 0.75,\n },\n autoToggles: false,\n commandsDisabled: false,\n commands: {\n voiceQuit: [\"byebye\", \"exit\", \"quit\"],\n voiceSleep: [\"sleep\"],\n voiceSubmit: [\"submit\", \"enter\", \"confirm\"],\n voiceHistoryFirst: [\"start\", \"first\", \"root\"],\n voiceHistoryPrev: [\"goback\", \"back\", \"previous\"],\n voiceHistoryNext: [\"gofront\", \"front\", \"goforward\", \"forward\", \"next\"],\n voiceHistoryLast: [\"end\", \"last\", \"leaf\"],\n voiceHistoryClear: [\"reset\", \"clear\"],\n voiceToggleOn: [\"on\", \"yes\", \"true\", \"enable\", \"start\"],\n voiceToggleOff: [\"off\", \"no\", \"false\", \"disable\", \"stop\"],\n },\n listenerPos: {\n value: \"top-center\",\n options: TOAST_UI_POSITIONS,\n },\n predictorPos: {\n value: \"bottom-left\",\n options: TOAST_UI_POSITIONS,\n },\n};\n","import { VolumeConfig } from \"./types\";\r\n\r\nexport const VOLUME_BUILD: Partial<VolumeConfig> = {\r\n min: 0,\r\n max: 300,\r\n skip: 5,\r\n};\r\n","import { BaseSliderPlug } from \"@plugs/base/slider\";\nimport type { VolumeConfig, VolumeState } from \"./types\";\nimport { VOLUME_BUILD } from \"./build\";\nimport type { Controller } from \"@core/controller\";\nimport { REvent, TERMINATOR } from \"sia-reactor\";\nimport type { CtlrMedia } from \"@defs/contract\";\nimport { clamp } from \"@utils/num\";\nimport { AUDIO_CONTEXT, connectMediaToAudioManager } from \"@tools/runtime\";\n\nexport class VolumePlug extends BaseSliderPlug<VolumeConfig, VolumeState> {\n public static readonly plugName = \"volume\";\n public static readonly BUILD = VOLUME_BUILD;\n protected shadowVolume?: number;\n protected audioSetup = false;\n protected gainNode?: GainNode | null;\n protected get ctime(): number {\n return AUDIO_CONTEXT?.currentTime ?? 0;\n }\n protected get toggleKey() {\n return \"muted\" as const;\n }\n\n constructor(ctlr: Controller, config = ctlr.settings.volume) {\n super(ctlr, config, { aptValue: 0 });\n this.sliderAptValue = 5;\n }\n\n public override mount(): void {\n this.ctlr.state.audioContextReady ? this.connectAudio() : this.ctlr.state.once(\"audioContextReady\", this.connectAudio, { signal: this.signal });\n }\n\n public override wire(): void {\n // Variables Assignment\n const volume = this.media.intent.volume ?? this.media.state.volume;\n this.state.aptValue = clamp(this.config.min, volume, this.config.max);\n this.shouldToggle = this.shouldSetAptValue = this.media.state.muted ?? false;\n this.media.intent.volume = this.shouldToggle ? 0 : this.state.aptValue;\n // Event Listeners\n this.media.element.addEventListener(\"volumechange\", this.handleNativeVolumeChange, { capture: true, signal: this.signal }), this.handleNativeVolumeChange();\n // Ctlr Media Setters\n this.media.set(\"intent.volume\", (v) => clamp(this.shouldToggle ? 0 : this.config.min, v, this.config.max), { signal: this.signal }); // #VALIDATOR: rules enforcement\n this.media.set(\"state.volume\", (v) => (this.ctlr.isNativeEl && v !== this.shadowVolume ? TERMINATOR : v), { signal: this.signal }); // #DICTATOR: reliable authority\n // ----------- Watchers\n this.media.watch(\"tech\", () => ((this.media.features.volume ||= this.ctlr.isNativeEl), (this.media.features.muted ||= this.ctlr.isNativeEl), (this.media.features.volumeBoost ||= this.ctlr.isNativeEl)), { init: true, signal: this.signal });\n // ----------- Listeners\n this.media.on(\"intent.volume\", this.handleVolumeIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"intent.muted\", this.handleMutedIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"state.volume\", (e) => this.handleSliderState(e.value), { init: this.ctlr.payload.wired, signal: this.signal });\n // ---- Config ---------\n this.ctlr.config.on(\"settings.volume.min\", (e) => this.handleMin(e.value), { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.volume.max\", (e) => this.handleMax(e.value), { init: true, signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"mute\", { fn: this.handleKeyMute, keyboard: { phase: \"keyup\" } });\n this.ctlr.registerAction(\"volumeUp\", { fn: this.handleKeyVolumeUp, keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"volumeDown\", { fn: this.handleKeyVolumeDown, keyboard: { phase: \"keydown\" } });\n super.wire();\n }\n\n protected handleVolumeIntent(e: REvent<CtlrMedia, \"intent.volume\">, isNext = this.nextLevel === e.value): void {\n if (e.resolved) return;\n if (isNext) this.nextLevel = null;\n this.setValueState(e.value, isNext);\n this.ctlr.isNativeEl && this.gainNode?.gain.setTargetAtTime((e.value / 100) * 2, this.ctime, 0.05);\n if (!isNext && e.value > 0) this.media.settings.defaultMuted = false; // youtube courtesy\n if (this.ctlr.isNativeEl) this.media.state.volume = this.shadowVolume = e.value;\n // e.resolve(this.name); // #UMBRELLA: must envelope logic\n }\n\n protected handleMutedIntent(e: REvent<CtlrMedia, \"intent.muted\">, isNext = this.nextToggle === e.value): void {\n if (e.resolved) return;\n if (isNext) this.nextToggle = null;\n else if (this.media.state.muted === e.value && !!this.media.state.volume) return e.resolve(this.name);\n this.setToggleState(e.value, isNext);\n this.media.state.muted = e.value;\n // e.resolve(this.name); // #UMBRELLA: must envelope logic\n }\n\n protected handleKeyMute = (): void => {\n this.toggle(\"auto\");\n this.media.features.volume && this.media.wonce(\"state.volume\", (v) => this.ctlr.plug(\"settings.notifiers\")?.notify(!v ? \"volumemuted\" : \"volumeup\"), { signal: this.signal });\n };\n protected handleKeyVolumeUp = (): void => {\n this.changeAptValue(this.ctlr.plug(\"settings.keys\")?.getModded(\"volume\", \"\", this.config.skip) ?? this.config.skip);\n };\n protected handleKeyVolumeDown = (): void => {\n this.changeAptValue(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"volume\", \"\", this.config.skip) ?? this.config.skip));\n };\n\n protected handleNativeVolumeChange = (): void => {\n (this.media.element.volume = 1), this.ctlr.isNativeEl && this.media.state.muted !== this.media.element.muted && this.toggle(); // even advanced systems have edge cases\n };\n\n protected connectAudio(): void {\n if (this.audioSetup || connectMediaToAudioManager(this.media.element) === \"unavailable\") return;\n this.gainNode = this.media.element._tmgGainNode;\n const DCN = this.media.element._tmgDynamicsCompressorNode;\n if (DCN) (DCN.threshold.value = -30), (DCN.knee.value = 20), (DCN.ratio.value = 12), (DCN.attack.value = 0.003), (DCN.release.value = 0.25);\n this.audioSetup = true;\n if (this.ctlr.isNativeEl) this.gainNode?.gain.setTargetAtTime((this.media.state.volume / 100) * 2, this.ctime, 0.05);\n }\n protected disconnectAudio(): void {\n this.media.element.volume = clamp(0, ((this.gainNode?.gain?.value ?? 2) / 2) * 100, 1);\n this.media.element.mediaElementSourceNode?.disconnect(), this.gainNode?.disconnect();\n this.audioSetup = false;\n }\n\n protected override onDestroy(): void {\n this.disconnectAudio(), super.onDestroy();\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.volume\": typeof VolumePlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n volume: VolumeConfig;\n }\n}\n\ndeclare module \"@defs/contract\" {\n interface MediaExtraFeatures {\n volumeBoost?: boolean;\n }\n}\n"],"mappings":"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","names":["import_sia_reactor","import_utils","import_utils","import_sia_reactor","module","win","FN_KEY","setTimeout2","import_utils","import_utils","import_sia_reactor","import_utils","import_sia_reactor","import_modules","import_utils","import_modules","v","import_sia_reactor","limited","import_sia_reactor","NIL2","NIL3","force","NOOP2","import_sia_reactor","mutationObserver","resizeObserver","win","m","base","import_utils","import_modules","import_modules","import_sia_reactor","import_utils","import_modules","_a","import_modules","import_sia_reactor","import_utils","import_utils","import_utils","import_sia_reactor","limited","setTimeout2","_a","k","import_modules","import_modules","setTimeout2","r","g","b","import_modules","import_utils","import_utils","setTimeout2","setTimeout2","limited","setTimeout2","import_modules","import_sia_reactor","import_modules","import_utils","win","win","import_modules","import_modules","setTimeout2","setTimeout2","import_sia_reactor","import_utils","import_modules","import_modules","import_sia_reactor","import_utils","import_modules","setTimeout2","import_utils","import_modules","import_vanilla","import_utils","limited","inputHtml","val","import_sia_reactor"]}
|