tmg-media-player 0.0.62 → 0.0.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-L5WT3SVA.js → chunk-3NYQJFCX.js} +2 -2
- package/dist/{chunk-LNAOARU6.js → chunk-4QFXOHHF.js} +5 -5
- package/dist/{chunk-EAM7QVWC.js → chunk-6ITPIHGM.js} +2 -2
- package/dist/{chunk-EAM7QVWC.js.map → chunk-6ITPIHGM.js.map} +1 -1
- package/dist/{chunk-VRLKALWA.js → chunk-6V3JMNRX.js} +5 -4
- package/dist/chunk-6V3JMNRX.js.map +1 -0
- package/dist/{chunk-E47SFXWN.js → chunk-C73M5LUY.js} +41 -41
- package/dist/{chunk-MBC43WUS.js → chunk-CO6YWIOA.js} +88 -88
- package/dist/{chunk-SMYY6RCM.js → chunk-D4OMTN35.js} +2 -2
- package/dist/{chunk-5ZXIPTVQ.js → chunk-DIR774ND.js} +2 -2
- package/dist/{chunk-ZC3NH7AA.js → chunk-F3I7HKUF.js} +11 -11
- package/dist/{chunk-H3LRGDOG.js → chunk-HEMADBDM.js} +8 -8
- package/dist/{chunk-2BDB5RKS.js → chunk-IDOHPT5V.js} +2 -2
- package/dist/{chunk-RG5EFXDF.js → chunk-L6GEH3VZ.js} +2 -2
- package/dist/{chunk-PILA22ZY.js → chunk-LDEUMAZQ.js} +2 -2
- package/dist/{chunk-TYCJKE6T.js → chunk-MNIV3ULN.js} +69 -69
- package/dist/{chunk-OKSL6V2G.js → chunk-OR3EGSRH.js} +2 -2
- package/dist/{chunk-OFYUJ7VU.js → chunk-PTA6NO4A.js} +3 -2
- package/dist/chunk-PTA6NO4A.js.map +1 -0
- package/dist/{chunk-AMIMOMSM.js → chunk-Q2PVLSNG.js} +2 -2
- package/dist/{chunk-ZVHCY2ND.js → chunk-QDGNEBXT.js} +2 -2
- package/dist/{chunk-NWNM7VFR.js → chunk-RAQTPHZI.js} +13 -13
- package/dist/{chunk-WWYSNBSJ.js → chunk-SW3MKGZV.js} +69 -69
- package/dist/{chunk-BAGDFZVR.js → chunk-TQZCDUEH.js} +2 -2
- package/dist/{chunk-6CZC4EC3.js → chunk-VMGCCVRJ.js} +3 -2
- package/dist/chunk-VMGCCVRJ.js.map +1 -0
- package/dist/{chunk-TJIXY45I.js → chunk-WYDJLWLT.js} +2 -2
- package/dist/{chunk-NFYLUVJB.js → chunk-X2VCMMOV.js} +9 -9
- package/dist/{chunk-6E7WCRN5.js → chunk-XLD6XFKI.js} +2 -2
- package/dist/{chunk-ELB6IJBL.js → chunk-YE27TO6L.js} +2 -2
- package/dist/chunk-YE27TO6L.js.map +1 -0
- package/dist/{chunk-KRXAYNNN.js → chunk-ZJFJ23KS.js} +2 -2
- package/dist/components/controls/airplay.js +1 -1
- package/dist/components/controls/backward10.js +1 -1
- package/dist/components/controls/bigNext.js +1 -1
- package/dist/components/controls/bigPlayPause.js +1 -1
- package/dist/components/controls/bigPrevious.js +1 -1
- package/dist/components/controls/brightness/index.js +1 -1
- package/dist/components/controls/captions.js +1 -1
- package/dist/components/controls/capture.js +1 -1
- package/dist/components/controls/cast.js +1 -1
- package/dist/components/controls/expandMiniplayer.js +1 -1
- package/dist/components/controls/forward10.js +1 -1
- package/dist/components/controls/fullscreen.js +1 -1
- package/dist/components/controls/fullscreenLock.js +1 -1
- package/dist/components/controls/fullscreenOrientation.cjs.map +1 -1
- package/dist/components/controls/fullscreenOrientation.js +3 -3
- package/dist/components/controls/next.js +1 -1
- package/dist/components/controls/objectFit.js +1 -1
- package/dist/components/controls/pictureInPicture.js +1 -1
- package/dist/components/controls/playPause.js +1 -1
- package/dist/components/controls/previous.js +1 -1
- package/dist/components/controls/removeMiniplayer.js +1 -1
- package/dist/components/controls/settings.js +1 -1
- package/dist/components/controls/theater.js +1 -1
- package/dist/components/controls/timeline/index.cjs +4 -3
- package/dist/components/controls/timeline/index.cjs.map +1 -1
- package/dist/components/controls/timeline/index.js +4 -4
- package/dist/components/controls/voice.js +1 -1
- package/dist/components/controls/volume/index.js +1 -1
- package/dist/components/holders/airplayPlaceholder.js +1 -1
- package/dist/components/holders/castPlaceholder.js +1 -1
- package/dist/components/holders/errorPlaceholder.js +1 -1
- package/dist/components/holders/pipPlaceholder.js +1 -1
- package/dist/components/icons/z-register.js +31 -31
- package/dist/components/notifiers/airplay.js +1 -1
- package/dist/components/notifiers/brightness.js +1 -1
- package/dist/components/notifiers/captions.js +1 -1
- package/dist/components/notifiers/capture.js +1 -1
- package/dist/components/notifiers/cast.js +1 -1
- package/dist/components/notifiers/fastPlay.js +1 -1
- package/dist/components/notifiers/fwdBwd.js +1 -1
- package/dist/components/notifiers/objectFit.js +1 -1
- package/dist/components/notifiers/playPause.js +1 -1
- package/dist/components/notifiers/playbackRate.js +1 -1
- package/dist/components/notifiers/prevNext.js +1 -1
- package/dist/components/notifiers/scrub.js +1 -1
- package/dist/components/notifiers/touchBrightness.js +1 -1
- package/dist/components/notifiers/touchVolume.js +1 -1
- package/dist/components/notifiers/volume.js +1 -1
- package/dist/components/notifiers/z-register.js +6 -6
- package/dist/components/screenLock.js +1 -1
- package/dist/components/z-register.cjs +4 -3
- package/dist/components/z-register.cjs.map +1 -1
- package/dist/components/z-register.js +7 -7
- package/dist/core/controller.cjs +4 -3
- package/dist/core/controller.cjs.map +1 -1
- package/dist/core/controller.js +3 -3
- package/dist/index.cjs +4 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/dist/init.cjs +4 -3
- package/dist/init.cjs.map +1 -1
- package/dist/init.js +4 -4
- package/dist/plugs/base/index.js +1 -1
- package/dist/plugs/base/slider.js +1 -1
- package/dist/plugs/main/ads/index.cjs +1 -1
- package/dist/plugs/main/ads/index.cjs.map +1 -1
- package/dist/plugs/main/ads/index.js +4 -4
- package/dist/plugs/main/disabled/index.js +1 -1
- package/dist/plugs/main/light/index.js +1 -1
- package/dist/plugs/main/playlist/index.js +1 -1
- package/dist/plugs/main/skeleton/index.js +1 -1
- package/dist/plugs/menus/main/actions.cjs.map +1 -1
- package/dist/plugs/menus/main/actions.js +3 -3
- package/dist/plugs/menus/settings/auto.cjs.map +1 -1
- package/dist/plugs/menus/settings/auto.js +3 -3
- package/dist/plugs/menus/settings/frame.cjs.map +1 -1
- package/dist/plugs/menus/settings/frame.js +3 -3
- package/dist/plugs/menus/settings/keys.js +1 -1
- package/dist/plugs/menus/settings/modes.cjs.map +1 -1
- package/dist/plugs/menus/settings/modes.js +3 -3
- package/dist/plugs/menus/settings/sleepTimer.cjs.map +1 -1
- package/dist/plugs/menus/settings/sleepTimer.js +3 -3
- package/dist/plugs/menus/settings/toasts.cjs.map +1 -1
- package/dist/plugs/menus/settings/toasts.js +3 -3
- package/dist/plugs/menus/settings/voice.cjs.map +1 -1
- package/dist/plugs/menus/settings/voice.js +3 -3
- package/dist/plugs/menus/z-register.cjs.map +1 -1
- package/dist/plugs/menus/z-register.js +3 -3
- package/dist/plugs/settings/ambience/index.js +1 -1
- package/dist/plugs/settings/auto/index.cjs.map +1 -1
- package/dist/plugs/settings/auto/index.js +3 -3
- package/dist/plugs/settings/brightness/index.js +1 -1
- package/dist/plugs/settings/captions/index.cjs +4 -3
- package/dist/plugs/settings/captions/index.cjs.map +1 -1
- package/dist/plugs/settings/captions/index.js +4 -4
- package/dist/plugs/settings/controlPanel/draggable.js +1 -1
- package/dist/plugs/settings/controlPanel/index.js +1 -1
- package/dist/plugs/settings/css/index.js +1 -1
- package/dist/plugs/settings/errors/index.js +1 -1
- package/dist/plugs/settings/fastPlay/index.js +1 -1
- package/dist/plugs/settings/frame/index.js +1 -1
- package/dist/plugs/settings/gesture/base.js +1 -1
- package/dist/plugs/settings/gesture/index.js +1 -1
- package/dist/plugs/settings/gesture/touch.js +1 -1
- package/dist/plugs/settings/gesture/wheel.js +1 -1
- package/dist/plugs/settings/keys/index.js +1 -1
- package/dist/plugs/settings/locked/index.js +1 -1
- package/dist/plugs/settings/metadata/index.js +1 -1
- package/dist/plugs/settings/modes/airplay.cjs.map +1 -1
- package/dist/plugs/settings/modes/airplay.js +5 -5
- package/dist/plugs/settings/modes/cast.cjs.map +1 -1
- package/dist/plugs/settings/modes/cast.js +5 -5
- package/dist/plugs/settings/modes/fullscreen.cjs.map +1 -1
- package/dist/plugs/settings/modes/fullscreen.js +4 -4
- package/dist/plugs/settings/modes/index.cjs.map +1 -1
- package/dist/plugs/settings/modes/index.js +4 -4
- package/dist/plugs/settings/modes/miniplayer.cjs.map +1 -1
- package/dist/plugs/settings/modes/miniplayer.js +4 -4
- package/dist/plugs/settings/modes/pictureInPicture.cjs.map +1 -1
- package/dist/plugs/settings/modes/pictureInPicture.js +4 -4
- package/dist/plugs/settings/modes/theater.cjs.map +1 -1
- package/dist/plugs/settings/modes/theater.js +4 -4
- package/dist/plugs/settings/notifiers/index.js +1 -1
- package/dist/plugs/settings/objectFit/index.js +1 -1
- package/dist/plugs/settings/overlay/index.js +1 -1
- package/dist/plugs/settings/panel/index.js +1 -1
- package/dist/plugs/settings/panel/menu/index.js +1 -1
- package/dist/plugs/settings/panel/menu/panel/main.js +1 -1
- package/dist/plugs/settings/panel/menu/panel/sub.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/base.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/button.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/color.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/dragselect.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/group.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/index.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/input.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/limits.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/range.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/select.js +1 -1
- package/dist/plugs/settings/panel/menu/widgets/toggle.js +1 -1
- package/dist/plugs/settings/persist/index.js +1 -1
- package/dist/plugs/settings/playbackRate/index.js +1 -1
- package/dist/plugs/settings/poster/index.js +1 -1
- package/dist/plugs/settings/sleepTimer/index.js +1 -1
- package/dist/plugs/settings/time/index.cjs +1 -1
- package/dist/plugs/settings/time/index.cjs.map +1 -1
- package/dist/plugs/settings/time/index.js +2 -2
- package/dist/plugs/settings/timeTravel/index.cjs.map +1 -1
- package/dist/plugs/settings/timeTravel/index.js +4 -4
- package/dist/plugs/settings/toasts/index.js +1 -1
- package/dist/plugs/settings/voice/index.cjs.map +1 -1
- package/dist/plugs/settings/voice/index.js +3 -3
- package/dist/plugs/settings/volume/index.cjs.map +1 -1
- package/dist/plugs/settings/volume/index.js +4 -4
- package/dist/plugs/z-register.cjs +5 -4
- package/dist/plugs/z-register.cjs.map +1 -1
- package/dist/plugs/z-register.js +38 -38
- package/dist/super/components/icons.js +69 -69
- package/dist/super/components/index.cjs +4 -3
- package/dist/super/components/index.cjs.map +1 -1
- package/dist/super/components/index.js +94 -94
- package/dist/super/components/notifiers.js +14 -14
- package/dist/super/consts.js +5 -5
- package/dist/super/plugs/index.cjs +5 -4
- package/dist/super/plugs/index.cjs.map +1 -1
- package/dist/super/plugs/index.js +83 -83
- package/dist/super/plugs/menus.cjs.map +1 -1
- package/dist/super/plugs/menus.js +3 -3
- package/dist/super/techs.cjs +6 -3
- package/dist/super/techs.cjs.map +1 -1
- package/dist/super/techs.js +13 -13
- package/dist/super.cjs +7 -4
- package/dist/super.cjs.map +1 -1
- package/dist/super.global.js +7 -4
- package/dist/super.global.js.map +1 -1
- package/dist/super.js +98 -98
- package/dist/techs/base.cjs +1 -1
- package/dist/techs/base.cjs.map +1 -1
- package/dist/techs/base.js +1 -1
- package/dist/techs/dash.cjs +4 -3
- package/dist/techs/dash.cjs.map +1 -1
- package/dist/techs/dash.js +4 -4
- package/dist/techs/hls.cjs +4 -3
- package/dist/techs/hls.cjs.map +1 -1
- package/dist/techs/hls.js +4 -4
- package/dist/techs/html5.cjs +4 -3
- package/dist/techs/html5.cjs.map +1 -1
- package/dist/techs/html5.js +3 -3
- package/dist/techs/ima.cjs +1 -1
- package/dist/techs/ima.cjs.map +1 -1
- package/dist/techs/ima.js +3 -3
- package/dist/techs/shaka.cjs +4 -3
- package/dist/techs/shaka.cjs.map +1 -1
- package/dist/techs/shaka.js +4 -4
- package/dist/techs/vimeo.cjs +2 -1
- package/dist/techs/vimeo.cjs.map +1 -1
- package/dist/techs/vimeo.js +2 -2
- package/dist/techs/youtube.cjs +2 -1
- package/dist/techs/youtube.cjs.map +1 -1
- package/dist/techs/youtube.js +4 -4
- package/dist/techs/z-register.cjs +6 -3
- package/dist/techs/z-register.cjs.map +1 -1
- package/dist/techs/z-register.js +9 -9
- package/dist/tools/player.cjs +4 -3
- package/dist/tools/player.cjs.map +1 -1
- package/dist/tools/player.js +3 -3
- package/dist/tools/runtime/index.cjs +4 -3
- package/dist/tools/runtime/index.cjs.map +1 -1
- package/dist/tools/runtime/index.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-6CZC4EC3.js.map +0 -1
- package/dist/chunk-ELB6IJBL.js.map +0 -1
- package/dist/chunk-OFYUJ7VU.js.map +0 -1
- package/dist/chunk-VRLKALWA.js.map +0 -1
- /package/dist/{chunk-L5WT3SVA.js.map → chunk-3NYQJFCX.js.map} +0 -0
- /package/dist/{chunk-LNAOARU6.js.map → chunk-4QFXOHHF.js.map} +0 -0
- /package/dist/{chunk-E47SFXWN.js.map → chunk-C73M5LUY.js.map} +0 -0
- /package/dist/{chunk-MBC43WUS.js.map → chunk-CO6YWIOA.js.map} +0 -0
- /package/dist/{chunk-SMYY6RCM.js.map → chunk-D4OMTN35.js.map} +0 -0
- /package/dist/{chunk-5ZXIPTVQ.js.map → chunk-DIR774ND.js.map} +0 -0
- /package/dist/{chunk-ZC3NH7AA.js.map → chunk-F3I7HKUF.js.map} +0 -0
- /package/dist/{chunk-H3LRGDOG.js.map → chunk-HEMADBDM.js.map} +0 -0
- /package/dist/{chunk-2BDB5RKS.js.map → chunk-IDOHPT5V.js.map} +0 -0
- /package/dist/{chunk-RG5EFXDF.js.map → chunk-L6GEH3VZ.js.map} +0 -0
- /package/dist/{chunk-PILA22ZY.js.map → chunk-LDEUMAZQ.js.map} +0 -0
- /package/dist/{chunk-TYCJKE6T.js.map → chunk-MNIV3ULN.js.map} +0 -0
- /package/dist/{chunk-OKSL6V2G.js.map → chunk-OR3EGSRH.js.map} +0 -0
- /package/dist/{chunk-AMIMOMSM.js.map → chunk-Q2PVLSNG.js.map} +0 -0
- /package/dist/{chunk-ZVHCY2ND.js.map → chunk-QDGNEBXT.js.map} +0 -0
- /package/dist/{chunk-NWNM7VFR.js.map → chunk-RAQTPHZI.js.map} +0 -0
- /package/dist/{chunk-WWYSNBSJ.js.map → chunk-SW3MKGZV.js.map} +0 -0
- /package/dist/{chunk-BAGDFZVR.js.map → chunk-TQZCDUEH.js.map} +0 -0
- /package/dist/{chunk-TJIXY45I.js.map → chunk-WYDJLWLT.js.map} +0 -0
- /package/dist/{chunk-NFYLUVJB.js.map → chunk-X2VCMMOV.js.map} +0 -0
- /package/dist/{chunk-6E7WCRN5.js.map → chunk-XLD6XFKI.js.map} +0 -0
- /package/dist/{chunk-KRXAYNNN.js.map → chunk-ZJFJ23KS.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ModesPlug
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QDGNEBXT.js";
|
|
4
4
|
import {
|
|
5
5
|
MODES_AIRPLAY_BUILD
|
|
6
6
|
} from "./chunk-TN7WYBLE.js";
|
|
@@ -65,4 +65,4 @@ __publicField(ModesAirPlayPin, "BUILD", MODES_AIRPLAY_BUILD);
|
|
|
65
65
|
export {
|
|
66
66
|
ModesAirPlayPin
|
|
67
67
|
};
|
|
68
|
-
//# sourceMappingURL=chunk-
|
|
68
|
+
//# sourceMappingURL=chunk-3NYQJFCX.js.map
|
|
@@ -9,14 +9,14 @@ import {
|
|
|
9
9
|
CONFIG_BUILD,
|
|
10
10
|
STATE_BUILD
|
|
11
11
|
} from "./chunk-ZNZEHK2R.js";
|
|
12
|
-
import {
|
|
13
|
-
FN_KEY,
|
|
14
|
-
LUID_KEY
|
|
15
|
-
} from "./chunk-26QMCQE3.js";
|
|
16
12
|
import {
|
|
17
13
|
ACTIONS_DICT,
|
|
18
14
|
ACTIONS_ENTRIES
|
|
19
15
|
} from "./chunk-7VVEG3QV.js";
|
|
16
|
+
import {
|
|
17
|
+
FN_KEY,
|
|
18
|
+
LUID_KEY
|
|
19
|
+
} from "./chunk-26QMCQE3.js";
|
|
20
20
|
import {
|
|
21
21
|
__export
|
|
22
22
|
} from "./chunk-UVKRO5ER.js";
|
|
@@ -40,4 +40,4 @@ __export(consts_exports, {
|
|
|
40
40
|
export {
|
|
41
41
|
consts_exports
|
|
42
42
|
};
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
43
|
+
//# sourceMappingURL=chunk-4QFXOHHF.js.map
|
|
@@ -138,7 +138,7 @@ var BaseTech = class extends Controllable {
|
|
|
138
138
|
e.resolve(this.name);
|
|
139
139
|
}
|
|
140
140
|
handleLiveIntent(e) {
|
|
141
|
-
if (e.resolved) return;
|
|
141
|
+
if (e.resolved || !this.wired) return void (!e.resolved && e.resolve(this.name));
|
|
142
142
|
this.ctlr.when("loadedData", e, (seekable = this.config.status.seekable) => e.value && seekable.length && (this.config.intent.currentTime = seekable.end(seekable.length - 1) - 1));
|
|
143
143
|
e.resolve(this.name);
|
|
144
144
|
}
|
|
@@ -171,4 +171,4 @@ export {
|
|
|
171
171
|
BaseTech,
|
|
172
172
|
cacheKeys
|
|
173
173
|
};
|
|
174
|
-
//# sourceMappingURL=chunk-
|
|
174
|
+
//# sourceMappingURL=chunk-6ITPIHGM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts/techs/base.ts"],"sourcesContent":["import { Controllable } from \"@core/controllable\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia, MediaFeatures } from \"@defs/contract\";\r\nimport { type REvent, type Reactive, ListenerOptionsTuple } from \"sia-reactor\";\r\nimport { deepClone, fanout, force } from \"sia-reactor/utils\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { getMediaStatus, isFeatured } from \"@utils/media\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { isArr, isBool, isNum } from \"@utils/obj\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { MEDIA_STATE_BUILD, MEDIA_STATUS_BUILD } from \"@consts/media\";\r\nimport { getMediaChapter } from \"@utils/time\";\r\n\r\nexport interface TechConstructor<T extends BaseTech = BaseTech> {\r\n new (ctlr: Controller, features?: MediaFeatures): T;\r\n techName: string;\r\n canPlaySource(src: string): boolean;\r\n}\r\n\r\nexport abstract class BaseTech<El extends HTMLElement = HTMLElement> extends Controllable<Reactive<CtlrMedia>> {\r\n public static readonly techName: string;\r\n public static canPlaySource(_src: string): boolean {\r\n return false;\r\n }\r\n public get name() {\r\n return (this.constructor as TechConstructor).techName;\r\n }\r\n public element!: El;\r\n public get el() {\r\n return this.element;\r\n }\r\n public wired = false; // for light checks where needed\r\n public cache?: Pick<CtlrMedia, CacheKey> | null; // for pseudo media, e.g. ads\r\n public readonly caching: boolean = false; // turn on for caching logic\r\n public readonly evtOpts: { EL: AddEventListenerOptions; CONFIG: ListenerOptionsTuple } = { EL: { capture: true, signal: this.signal }, CONFIG: { capture: true, signal: this.signal } };\r\n public readonly features!: MediaFeatures;\r\n public readonly wiredSet: Set<keyof MediaFeatures> = new Set(); // Tracking to avoid rewiring\r\n\r\n constructor(ctlr: Controller, features: MediaFeatures = {}) {\r\n ctlr.media.tech.wired && ctlr.media.tech.destroy?.(), ctlr.log(`Using ${new.target.techName} media technology.`); // kill if listening\r\n super(ctlr, ctlr.media); // Odekunle Olasubomi Abimbola Cornelius Adisun was here; Aug 14th 2026\r\n ctlr.config.courtesy = \"TMG\"; // tell them! tell them!! tell them!!! ~ Kendrick Lamar\r\n this.element = ctlr.media.element as any; // must reassign if not using original\r\n if (this.caching) (this.cache = {} as any).features = ctlr.media.snapshot(false, ctlr.media.features);\r\n for (const key of Object.keys(ctlr.media.features)) ctlr.media.features[key as keyof MediaFeatures] = false;\r\n // prettier-ignore\r\n fanout(ctlr.media.features, (this.features = {\r\n // Currents\r\n currentChapter: true,\r\n // Settings\r\n srcObject: true, metadata: true, timePlayedMin: true, flushKeys: true, ...features\r\n })); // dynamics baby!\r\n }\r\n // --- Lifecycle ---\r\n protected override onSetup(): void {\r\n this.mount(), this.onAwaken();\r\n }\r\n protected override onDestroy(): void {\r\n this.unmount(), this.onHibernate();\r\n this.config.status.hostReady = false;\r\n }\r\n protected onAwaken(): void {\r\n if (this.caching) for (const key of cacheKeys) (this.cache ??= {} as any)[key] ??= this.config.snapshot(false, this.config[key]); // all that once was\r\n this.evtOpts.CONFIG.signal = this.evtOpts.EL.signal = this.signal;\r\n this.ctlr.state.readyState ? this.wire() : this.ctlr.state.wonce(\"readyState\", this.wire, { signal: this.signal }); // wire after all plugs setup\r\n }\r\n protected onHibernate(): void {\r\n this.wiredSet.clear(), (this.wired = false);\r\n if (this.cache) silence(() => fanout(this.config, this.cache!)), (this.cache = null); // all that will be\r\n }\r\n\r\n public mount(): void {\r\n if ((this.el as any) !== this.config.element) (this.ctlr.mutating = true), this.config.element.replaceWith(this.el), setTimeout(() => (this.ctlr.mutating = false), 0, this.signal);\r\n }\r\n public unmount(): void {\r\n if ((this.el as any) !== this.config.element) (this.ctlr.mutating = true), this.el.replaceWith(this.config.element), setTimeout(() => (this.ctlr.mutating = false), 0, this.signal);\r\n }\r\n\r\n // === WIRING ===\r\n public wire(): void {\r\n // Variables Assignments\r\n (this.el as any).tmgPlayer = this.config.element.tmgPlayer; // ref is maintained if element was replaced in mount\r\n // Config Listeners\r\n this.config.on(\"intent\", this.handleWrite, this.evtOpts.CONFIG), this.config.on(\"settings\", this.handleWrite, this.evtOpts.CONFIG); // protecting everybody\r\n // Bulk Wiring\r\n this.wireSrc(), this.wireCurrentTime(), this.wireDuration(), this.wirePaused(), this.wireEnded(), this.wireFeatures();\r\n // Post Wiring\r\n (this.ctlr.flags.wired || !this.ctlr.isNativeEl) && this.flush();\r\n !this.ctlr.flags.wired && force(() => fanout(this.config.status, { ...this.config.status, ...(this.ctlr.isNativeEl && getMediaStatus(this.el as any, true)) }, { skipUndef: true })); // async init proof\r\n silence(() => (fanout(this.config.intent, this.config[this.ctlr.gospel]), fanout(this.config.settings))); // contemplating intent only\r\n force(() => this.config.tick(), !this.ctlr.flags.wired), (this.wired = true); // state isn't volatile but it must touch\r\n }\r\n // --- THE CORE 5 (Media \"Must Haves\") ---\r\n protected abstract wireSrc(): void;\r\n protected abstract wireCurrentTime(): void;\r\n protected abstract wireDuration(): void;\r\n protected abstract wirePaused(): void;\r\n protected abstract wireEnded(): void;\r\n // --- THE EXTENSIONS ---\r\n protected wireFeatures(): void {\r\n this.config.on(\"features\", this.handleFeatures, { init: true, signal: this.signal });\r\n }\r\n protected wireFeature(feature: keyof MediaFeatures): void {\r\n if (!this.wiredSet.has(feature)) this.wiredSet.add(feature), (this as any)[`wire${capitalize(feature)}`]?.();\r\n }\r\n // Track Switching Wiring\r\n protected wireCurrentChapter(): void {\r\n this.config.set(\"intent.currentChapter\", (term) => (isNum(term) ? term : this.config.settings.metadata.chapterInfo.findIndex((c) => c.title === term)), { signal: this.signal }); // #VALIDATOR: intent type conformation\r\n this.config.on(\"intent.currentChapter\", this.handleCurrentChapterIntent, this.evtOpts.CONFIG);\r\n this.config.on(\"state.currentTime\", this.onCurrentTimeState, this.evtOpts.CONFIG);\r\n }\r\n // ive Content Wiring\r\n protected wireLive(): void {\r\n this.config.on(\"intent.live\", this.handleLiveIntent, this.evtOpts.CONFIG);\r\n this.config.watch(\"status.isLive\", this.onIsLiveStatus, this.evtOpts.CONFIG);\r\n }\r\n\r\n // === HANDLERS ===\r\n protected handleFeatures({ type, target }: REvent<CtlrMedia, \"features\">): void {\r\n if (type === \"update\") return this.wireFeature(target.key);\r\n if (type === \"init\") for (const feature of Object.keys(target.value)) this.wireFeature(feature as keyof MediaFeatures);\r\n }\r\n protected handleWrite(e: REvent<CtlrMedia, \"intent\" | \"settings\">): void {\r\n if (e.type === \"update\" && !isFeatured(this.config, e.target.key as keyof MediaFeatures)) return e.reject(this.name), e.stopImmediatePropagation(); // (`&& (e.value || !this.ctlr.flags.wired)` = turn off at runtime) -> polyfill()\r\n }\r\n protected handleCurrentChapterIntent(e: REvent<CtlrMedia, \"intent.currentChapter\">): void {\r\n if (e.resolved || !this.wired) return void (!e.resolved && e.resolve(this.name));\r\n const chapter = this.config.settings.metadata.chapterInfo[e.value as number]; // #VALIDATED: mediated for cast conformity; no-opy\r\n if (chapter) (this.config.intent.currentTime = chapter.startTime), this.config.tick(\"intent.currentTime\"), this.onCurrentTimeState(); // #FACADED: silenced intent actual op\r\n this.ctlr.notify?.(\"chapter\");\r\n e.resolve(this.name);\r\n }\r\n protected handleLiveIntent(e: REvent<CtlrMedia, \"intent.live\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedData\", e, (seekable = this.config.status.seekable) => e.value && seekable.length && (this.config.intent.currentTime = seekable.end(seekable.length - 1) - 1)); // #FACADED: silenced intent actual op\r\n e.resolve(this.name);\r\n }\r\n // Dog Feeders\r\n protected onCurrentTimeState(): void {\r\n const time = this.config.state.currentTime;\r\n if (time === this.lastTime) return;\r\n const chapters = this.config.settings.metadata.chapterInfo;\r\n if (chapters.length) this.config.state.currentChapter = getMediaChapter(chapters, time);\r\n this.lastTime = time;\r\n }\r\n private lastTime = -1;\r\n protected onIsLiveStatus(v: boolean): void {\r\n this.config.features.live = v;\r\n }\r\n\r\n // === HELPERS ===\r\n protected flush(): void {\r\n for (const path of this.config.settings.flushKeys.status) this.config.status[path] = deepClone(MEDIA_STATUS_BUILD[path]) as never;\r\n for (const path of this.config.settings.flushKeys.state) this.config.state[path] = deepClone(MEDIA_STATE_BUILD[path]) as never;\r\n }\r\n public polyfill(feature: keyof MediaFeatures | Array<keyof MediaFeatures>, condition?: any, disabled?: any): boolean | void {\r\n const apply = (f: keyof MediaFeatures, v = !disabled && (!!this.features[f] || !!condition)) => (!v && isBool(disabled) && (this.config.state as any)[f] === true && (silence(() => ((this.config.intent as any)[f] = false)), this.config.tick(`intent.${f}` as any)), (this.config.features[f] = v));\r\n return !isArr(feature) ? apply(feature) : feature.forEach((f) => apply(f));\r\n } // #EXTRA-MILE: doing the most with the least\r\n}\r\n\r\nexport const cacheKeys = [\"state\", \"status\", \"settings\", \"features\"] as const;\r\n\r\nexport type CacheKey = (typeof cacheKeys)[number];\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaStatus {\r\n hostReady: boolean;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/ts/techs/base.ts"],"sourcesContent":["import { Controllable } from \"@core/controllable\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia, MediaFeatures } from \"@defs/contract\";\r\nimport { type REvent, type Reactive, ListenerOptionsTuple } from \"sia-reactor\";\r\nimport { deepClone, fanout, force } from \"sia-reactor/utils\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { getMediaStatus, isFeatured } from \"@utils/media\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { isArr, isBool, isNum } from \"@utils/obj\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { MEDIA_STATE_BUILD, MEDIA_STATUS_BUILD } from \"@consts/media\";\r\nimport { getMediaChapter } from \"@utils/time\";\r\n\r\nexport interface TechConstructor<T extends BaseTech = BaseTech> {\r\n new (ctlr: Controller, features?: MediaFeatures): T;\r\n techName: string;\r\n canPlaySource(src: string): boolean;\r\n}\r\n\r\nexport abstract class BaseTech<El extends HTMLElement = HTMLElement> extends Controllable<Reactive<CtlrMedia>> {\r\n public static readonly techName: string;\r\n public static canPlaySource(_src: string): boolean {\r\n return false;\r\n }\r\n public get name() {\r\n return (this.constructor as TechConstructor).techName;\r\n }\r\n public element!: El;\r\n public get el() {\r\n return this.element;\r\n }\r\n public wired = false; // for light checks where needed\r\n public cache?: Pick<CtlrMedia, CacheKey> | null; // for pseudo media, e.g. ads\r\n public readonly caching: boolean = false; // turn on for caching logic\r\n public readonly evtOpts: { EL: AddEventListenerOptions; CONFIG: ListenerOptionsTuple } = { EL: { capture: true, signal: this.signal }, CONFIG: { capture: true, signal: this.signal } };\r\n public readonly features!: MediaFeatures;\r\n public readonly wiredSet: Set<keyof MediaFeatures> = new Set(); // Tracking to avoid rewiring\r\n\r\n constructor(ctlr: Controller, features: MediaFeatures = {}) {\r\n ctlr.media.tech.wired && ctlr.media.tech.destroy?.(), ctlr.log(`Using ${new.target.techName} media technology.`); // kill if listening\r\n super(ctlr, ctlr.media); // Odekunle Olasubomi Abimbola Cornelius Adisun was here; Aug 14th 2026\r\n ctlr.config.courtesy = \"TMG\"; // tell them! tell them!! tell them!!! ~ Kendrick Lamar\r\n this.element = ctlr.media.element as any; // must reassign if not using original\r\n if (this.caching) (this.cache = {} as any).features = ctlr.media.snapshot(false, ctlr.media.features);\r\n for (const key of Object.keys(ctlr.media.features)) ctlr.media.features[key as keyof MediaFeatures] = false;\r\n // prettier-ignore\r\n fanout(ctlr.media.features, (this.features = {\r\n // Currents\r\n currentChapter: true,\r\n // Settings\r\n srcObject: true, metadata: true, timePlayedMin: true, flushKeys: true, ...features\r\n })); // dynamics baby!\r\n }\r\n // --- Lifecycle ---\r\n protected override onSetup(): void {\r\n this.mount(), this.onAwaken();\r\n }\r\n protected override onDestroy(): void {\r\n this.unmount(), this.onHibernate();\r\n this.config.status.hostReady = false;\r\n }\r\n protected onAwaken(): void {\r\n if (this.caching) for (const key of cacheKeys) (this.cache ??= {} as any)[key] ??= this.config.snapshot(false, this.config[key]); // all that once was\r\n this.evtOpts.CONFIG.signal = this.evtOpts.EL.signal = this.signal;\r\n this.ctlr.state.readyState ? this.wire() : this.ctlr.state.wonce(\"readyState\", this.wire, { signal: this.signal }); // wire after all plugs setup\r\n }\r\n protected onHibernate(): void {\r\n this.wiredSet.clear(), (this.wired = false);\r\n if (this.cache) silence(() => fanout(this.config, this.cache!)), (this.cache = null); // all that will be\r\n }\r\n\r\n public mount(): void {\r\n if ((this.el as any) !== this.config.element) (this.ctlr.mutating = true), this.config.element.replaceWith(this.el), setTimeout(() => (this.ctlr.mutating = false), 0, this.signal);\r\n }\r\n public unmount(): void {\r\n if ((this.el as any) !== this.config.element) (this.ctlr.mutating = true), this.el.replaceWith(this.config.element), setTimeout(() => (this.ctlr.mutating = false), 0, this.signal);\r\n }\r\n\r\n // === WIRING ===\r\n public wire(): void {\r\n // Variables Assignments\r\n (this.el as any).tmgPlayer = this.config.element.tmgPlayer; // ref is maintained if element was replaced in mount\r\n // Config Listeners\r\n this.config.on(\"intent\", this.handleWrite, this.evtOpts.CONFIG), this.config.on(\"settings\", this.handleWrite, this.evtOpts.CONFIG); // protecting everybody\r\n // Bulk Wiring\r\n this.wireSrc(), this.wireCurrentTime(), this.wireDuration(), this.wirePaused(), this.wireEnded(), this.wireFeatures();\r\n // Post Wiring\r\n (this.ctlr.flags.wired || !this.ctlr.isNativeEl) && this.flush();\r\n !this.ctlr.flags.wired && force(() => fanout(this.config.status, { ...this.config.status, ...(this.ctlr.isNativeEl && getMediaStatus(this.el as any, true)) }, { skipUndef: true })); // async init proof\r\n silence(() => (fanout(this.config.intent, this.config[this.ctlr.gospel]), fanout(this.config.settings))); // contemplating intent only\r\n force(() => this.config.tick(), !this.ctlr.flags.wired), (this.wired = true); // state isn't volatile but it must touch\r\n }\r\n // --- THE CORE 5 (Media \"Must Haves\") ---\r\n protected abstract wireSrc(): void;\r\n protected abstract wireCurrentTime(): void;\r\n protected abstract wireDuration(): void;\r\n protected abstract wirePaused(): void;\r\n protected abstract wireEnded(): void;\r\n // --- THE EXTENSIONS ---\r\n protected wireFeatures(): void {\r\n this.config.on(\"features\", this.handleFeatures, { init: true, signal: this.signal });\r\n }\r\n protected wireFeature(feature: keyof MediaFeatures): void {\r\n if (!this.wiredSet.has(feature)) this.wiredSet.add(feature), (this as any)[`wire${capitalize(feature)}`]?.();\r\n }\r\n // Track Switching Wiring\r\n protected wireCurrentChapter(): void {\r\n this.config.set(\"intent.currentChapter\", (term) => (isNum(term) ? term : this.config.settings.metadata.chapterInfo.findIndex((c) => c.title === term)), { signal: this.signal }); // #VALIDATOR: intent type conformation\r\n this.config.on(\"intent.currentChapter\", this.handleCurrentChapterIntent, this.evtOpts.CONFIG);\r\n this.config.on(\"state.currentTime\", this.onCurrentTimeState, this.evtOpts.CONFIG);\r\n }\r\n // ive Content Wiring\r\n protected wireLive(): void {\r\n this.config.on(\"intent.live\", this.handleLiveIntent, this.evtOpts.CONFIG);\r\n this.config.watch(\"status.isLive\", this.onIsLiveStatus, this.evtOpts.CONFIG);\r\n }\r\n\r\n // === HANDLERS ===\r\n protected handleFeatures({ type, target }: REvent<CtlrMedia, \"features\">): void {\r\n if (type === \"update\") return this.wireFeature(target.key);\r\n if (type === \"init\") for (const feature of Object.keys(target.value)) this.wireFeature(feature as keyof MediaFeatures);\r\n }\r\n protected handleWrite(e: REvent<CtlrMedia, \"intent\" | \"settings\">): void {\r\n if (e.type === \"update\" && !isFeatured(this.config, e.target.key as keyof MediaFeatures)) return e.reject(this.name), e.stopImmediatePropagation(); // (`&& (e.value || !this.ctlr.flags.wired)` = turn off at runtime) -> polyfill()\r\n }\r\n protected handleCurrentChapterIntent(e: REvent<CtlrMedia, \"intent.currentChapter\">): void {\r\n if (e.resolved || !this.wired) return void (!e.resolved && e.resolve(this.name));\r\n const chapter = this.config.settings.metadata.chapterInfo[e.value as number]; // #VALIDATED: mediated for cast conformity; no-opy\r\n if (chapter) (this.config.intent.currentTime = chapter.startTime), this.config.tick(\"intent.currentTime\"), this.onCurrentTimeState(); // #FACADED: silenced intent actual op\r\n this.ctlr.notify?.(\"chapter\");\r\n e.resolve(this.name);\r\n }\r\n protected handleLiveIntent(e: REvent<CtlrMedia, \"intent.live\">): void {\r\n if (e.resolved || !this.wired) return void (!e.resolved && e.resolve(this.name));\r\n this.ctlr.when(\"loadedData\", e, (seekable = this.config.status.seekable) => e.value && seekable.length && (this.config.intent.currentTime = seekable.end(seekable.length - 1) - 1)); // #FACADED: silenced intent actual op\r\n e.resolve(this.name);\r\n }\r\n // Dog Feeders\r\n protected onCurrentTimeState(): void {\r\n const time = this.config.state.currentTime;\r\n if (time === this.lastTime) return;\r\n const chapters = this.config.settings.metadata.chapterInfo;\r\n if (chapters.length) this.config.state.currentChapter = getMediaChapter(chapters, time);\r\n this.lastTime = time;\r\n }\r\n private lastTime = -1;\r\n protected onIsLiveStatus(v: boolean): void {\r\n this.config.features.live = v;\r\n }\r\n\r\n // === HELPERS ===\r\n protected flush(): void {\r\n for (const path of this.config.settings.flushKeys.status) this.config.status[path] = deepClone(MEDIA_STATUS_BUILD[path]) as never;\r\n for (const path of this.config.settings.flushKeys.state) this.config.state[path] = deepClone(MEDIA_STATE_BUILD[path]) as never;\r\n }\r\n public polyfill(feature: keyof MediaFeatures | Array<keyof MediaFeatures>, condition?: any, disabled?: any): boolean | void {\r\n const apply = (f: keyof MediaFeatures, v = !disabled && (!!this.features[f] || !!condition)) => (!v && isBool(disabled) && (this.config.state as any)[f] === true && (silence(() => ((this.config.intent as any)[f] = false)), this.config.tick(`intent.${f}` as any)), (this.config.features[f] = v));\r\n return !isArr(feature) ? apply(feature) : feature.forEach((f) => apply(f));\r\n } // #EXTRA-MILE: doing the most with the least\r\n}\r\n\r\nexport const cacheKeys = [\"state\", \"status\", \"settings\", \"features\"] as const;\r\n\r\nexport type CacheKey = (typeof cacheKeys)[number];\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaStatus {\r\n hostReady: boolean;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
} from "./chunk-2XJFCVED.js";
|
|
23
23
|
import {
|
|
24
24
|
BaseTech
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-6ITPIHGM.js";
|
|
26
26
|
import {
|
|
27
27
|
cloneMedia,
|
|
28
28
|
getMediaReport,
|
|
@@ -222,9 +222,10 @@ var HTML5Tech = class extends BaseTech {
|
|
|
222
222
|
autoplay: true,
|
|
223
223
|
loop: true,
|
|
224
224
|
playsInline: !isAudio,
|
|
225
|
-
preload: true,
|
|
226
|
-
crossOrigin: true,
|
|
227
225
|
controls: true,
|
|
226
|
+
live: true,
|
|
227
|
+
crossOrigin: true,
|
|
228
|
+
preload: true,
|
|
228
229
|
controlsList: true,
|
|
229
230
|
sources: true,
|
|
230
231
|
tracks: true,
|
|
@@ -978,4 +979,4 @@ export {
|
|
|
978
979
|
HTML5Tech,
|
|
979
980
|
Controller
|
|
980
981
|
};
|
|
981
|
-
//# sourceMappingURL=chunk-
|
|
982
|
+
//# sourceMappingURL=chunk-6V3JMNRX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ts/techs/html5.ts","../src/ts/tools/runtime/index.ts","../src/ts/core/controller.ts","../src/ts/tools/player.ts"],"sourcesContent":["import { BaseTech } from \"./base\";\r\nimport { NOOP, type REvent, inert } from \"sia-reactor\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia, MediaIntent, MediaFeatures } from \"@defs/contract\";\r\nimport type { Source, Track } from \"@defs/generics\";\r\nimport { globalState } from \"@tools/runtime\";\r\nimport { AUDIO_EXTENSIONS, HLS_EXTENSIONS, VIDEO_EXTENSIONS } from \"@utils/match\";\r\nimport { MSE_ENABLED } from \"@utils/env\";\r\nimport { isStr } from \"@utils/obj\";\r\nimport type { TrackType } from \"@utils/media\";\r\nimport { enterFullscreen, exitFullscreen, queryFullscreenEl, supportsFullscreen, supportsPictureInPicture } from \"@utils/dom\";\r\nimport { observeMutation, createListRenderer as renderList } from \"@utils/dom\";\r\nimport { getTrackIdx, setCurrentTrack, getSources, getTracks, isSameSources, isSameTracks } from \"@utils/media\";\r\nimport { DUMMY_VID, canTextTracks, canVideoTracks, canAudioTracks, canUseVolume, canMuteVolume, canUseRate } from \"@utils/methd\";\r\nimport { getMediaMax, getMediaMin } from \"@utils/time\";\r\nimport { isSameURL, cleanURL } from \"@utils/str\";\r\nimport { clamp } from \"@utils/num\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { assignEl, createEl, force } from \"sia-reactor/utils\";\r\n\r\nexport class HTML5Tech extends BaseTech<HTMLMediaElement> {\r\n public static readonly techName: string = \"html5\";\r\n public static override canPlaySource(src: string): boolean {\r\n return VIDEO_EXTENSIONS.test(src) || AUDIO_EXTENSIONS.test(src) || !!(!MSE_ENABLED && DUMMY_VID.canPlayType(\"application/vnd.apple.mpegurl\") && HLS_EXTENSIONS.test(src)); // Safari has native HLS support, but only if MSE is not available (iOS)\r\n }\r\n public hostSrc: string | null = null;\r\n protected readonly isAlien: boolean = false;\r\n constructor(ctlr: Controller, features?: MediaFeatures) {\r\n // prettier-ignore\r\n const isAudio = ctlr.media.type === \"audio\", canTxtTrack = canTextTracks(ctlr.media.type), canVidTrack = !isAudio && canVideoTracks(ctlr.media.type), canAudTrack = canAudioTracks(ctlr.media.type);\r\n // prettier-ignore\r\n super(ctlr, {\r\n // Kinda Core\r\n volume: canUseVolume(ctlr.media.type), muted: canMuteVolume(ctlr.media.type), playbackRate: canUseRate(ctlr.media.type),\r\n // Modes\r\n pictureInPicture: !isAudio && supportsPictureInPicture(), fullscreen: !isAudio && supportsFullscreen(),\r\n // Markup & States\r\n poster: !isAudio, autoplay: true, loop: true, playsInline: !isAudio, controls: true, live: true,\r\n crossOrigin: true, preload: true, controlsList: true, sources: true, tracks: true,\r\n // Lists\r\n textTracks: canTxtTrack, videoTracks: !isAudio && canVidTrack, audioTracks: canAudTrack,\r\n // Currents\r\n currentChapter: true, currentTextTrack: canTxtTrack, currentVideoTrack: canVidTrack, currentAudioTrack: canAudTrack, textVisible: canTxtTrack, activeCues: canTxtTrack,\r\n // Infos\r\n readyState: true, networkState: true, error: true, waiting: true, stalled: true,\r\n seeking: true, buffered: true, played: true, seekable: true, videoWidth: !isAudio, videoHeight: !isAudio, \r\n loadedMetadata: true, loadedData: true, canPlay: true, canPlayThrough: true, isLive: true, canSeekLive: true,\r\n // Settings\r\n defaultMuted: true, defaultPlaybackRate: true, srcObject: true, liveTolerance: true, minDVRWindow: true, idleWaiting: true, ...features,\r\n });\r\n ctlr.media.status.hostReady = true; // always active!\r\n }\r\n // ===========================================================================\r\n // WIRING (Connections Only)\r\n // ===========================================================================\r\n // --- Core Wiring ---\r\n protected override wireSrc(): void {\r\n this.el.addEventListener(\"loadstart\", this.flush, this.evtOpts.EL);\r\n this.config.on(\"intent.src\", this.handleSrcIntent, this.evtOpts.CONFIG);\r\n }\r\n protected override wireCurrentTime(): void {\r\n this.el.addEventListener(\"timeupdate\", this.setTimeUpdateState, this.evtOpts.EL);\r\n this.el.addEventListener(\"seeking\", this.setSeekingState, this.evtOpts.EL);\r\n this.el.addEventListener(\"seeked\", this.setSeekedState, this.evtOpts.EL);\r\n this.config.get(\"state.currentTime\", (v) => (this.el.readyState < 1 ? v : this.el.currentTime), { signal: this.signal }); // #VIRTUAL: reliable return value, for those faster than the spec\r\n this.config.on(\"intent.currentTime\", this.handleCurrentTimeIntent, this.evtOpts.CONFIG);\r\n }\r\n protected override wireDuration(): void {\r\n this.el.addEventListener(\"durationchange\", this.setDurationChangeState, this.evtOpts.EL);\r\n }\r\n protected override wirePaused(): void {\r\n this.el.addEventListener(\"play\", this.setPlayState, this.evtOpts.EL);\r\n this.el.addEventListener(\"pause\", this.setPauseState, this.evtOpts.EL);\r\n this.config.get(\"state.paused\", (v) => (this.wired ? this.el.paused : v), { signal: this.signal }); // #VIRTUAL: reliable return value\r\n this.config.on(\"intent.paused\", this.handlePausedIntent, this.evtOpts.CONFIG);\r\n }\r\n protected override wireEnded(): void {\r\n this.el.addEventListener(\"ended\", this.setPlayState, this.evtOpts.EL);\r\n }\r\n // --- Features Wiring ---\r\n protected override wireFeatures(): void {\r\n super.wireFeatures(); // Calls individual feature wires (volume, etc.) above\r\n // Status (Bulk wiring)\r\n observeMutation(this.el, this.handleMutation, { attributes: true, childList: true }, this.signal); // Reverse Bind: DOM <-> State\r\n for (const e of [\"progress\", \"suspend\", \"abort\", \"emptied\", \"stalled\"]) this.el.addEventListener(e, this.handleLoadingStatus, this.evtOpts.EL);\r\n this.el.addEventListener(\"loadedmetadata\", this.handleLoadedMetadataStatus, this.evtOpts.EL);\r\n this.el.addEventListener(\"loadeddata\", this.handleLoadedDataStatus, this.evtOpts.EL);\r\n this.el.addEventListener(\"canplay\", this.handleCanPlayStatus, this.evtOpts.EL);\r\n this.el.addEventListener(\"canplaythrough\", this.handleCanPlayThroughStatus, this.evtOpts.EL);\r\n this.el.addEventListener(\"playing\", this.handlePlayingStatus, this.evtOpts.EL);\r\n this.el.addEventListener(\"waiting\", this.handleWaitingStatus, this.evtOpts.EL);\r\n this.el.addEventListener(\"stalled\", this.handleStalledStatus, this.evtOpts.EL);\r\n this.el.addEventListener(\"error\", this.handleErrorStatus, this.evtOpts.EL);\r\n }\r\n // --- Engine Inputs Wiring ---\r\n protected wireVolume(): void {\r\n this.el.addEventListener(\"volumechange\", this.setVolumeChangeState, this.evtOpts.EL);\r\n this.config.on(\"intent.volume\", this.handleVolumeIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireMuted(): void {\r\n this.config.on(\"intent.muted\", this.handleMutedIntent, this.evtOpts.CONFIG); // Native 'volumechange' handles state update\r\n }\r\n protected wirePlaybackRate(): void {\r\n this.el.addEventListener(\"ratechange\", this.setRateChangeState, this.evtOpts.EL);\r\n this.config.get(\"state.playbackRate\", (v) => (this.wired ? this.el.playbackRate : v), { signal: this.signal }); // #VIRTUAL: reliable return value\r\n this.config.on(\"intent.playbackRate\", this.handlePlaybackRateIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- Presentation Modes Wiring ---\r\n protected wirePictureInPicture(): void {\r\n this.el.addEventListener(\"enterpictureinpicture\", this.setEnterPiPState, this.evtOpts.EL);\r\n this.el.addEventListener(\"leavepictureinpicture\", this.setLeavePiPState, this.evtOpts.EL);\r\n this.config.on(\"intent.pictureInPicture\", this.handlePictureInPictureIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireFullscreen(): void {\r\n this.el.addEventListener(\"webkitbeginfullscreen\", this.setWebkitBeginFullscreenState, this.evtOpts.EL);\r\n this.el.addEventListener(\"webkitendfullscreen\", this.setWebkitEndFullscreenState, this.evtOpts.EL);\r\n globalState.watch(\"inFullscreen\", this.setFullscreenChangeState, this.evtOpts.CONFIG);\r\n this.config.on(\"intent.fullscreen\", this.handleFullscreenIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- Track Switching Wiring ---\r\n protected wireCurrentTrack(type: TrackType): void {\r\n this.config.set(`intent.current${type}Track`, (term) => getTrackIdx(this.el, type, term, this.config.status[`${type.toLowerCase() as Lowercase<TrackType>}Tracks`]), { signal: this.signal }); // #VALIDATOR: intent type conformation\r\n (this.el as any)[`${type.toLowerCase()}Tracks`]?.addEventListener(\"change\", () => this.setCurrentTrackState(type), this.evtOpts.EL);\r\n this.config.on(`intent.current${type}Track`, (e) => this.handleCurrentTrackIntent(e, type), this.evtOpts.CONFIG);\r\n }\r\n protected wireCurrentTextTrack(): void {\r\n this.wireCurrentTrack(\"Text\");\r\n }\r\n protected wireCurrentAudioTrack(): void {\r\n this.wireCurrentTrack(\"Audio\");\r\n }\r\n protected wireCurrentVideoTrack(): void {\r\n this.wireCurrentTrack(\"Video\");\r\n }\r\n protected wireTextVisible(): void {\r\n this.config.on(\"intent.textVisible\", this.handleTextVisibleIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- Attributes Wiring ---\r\n protected bindAttribute<K extends keyof MediaIntent>(key: K, isBool = false): void {\r\n this.config.on(`intent.${key}` as any, (e) => this.handleAttributeIntent(e, key, isBool), this.evtOpts.CONFIG); // non-casted union reached peak ts complexity :)\r\n }\r\n protected wirePoster(): void {\r\n this.bindAttribute(\"poster\");\r\n }\r\n protected wireAutoplay(): void {\r\n this.bindAttribute(\"autoplay\", true);\r\n }\r\n protected wireLoop(): void {\r\n this.bindAttribute(\"loop\", true);\r\n }\r\n protected wirePreload(): void {\r\n this.bindAttribute(\"preload\");\r\n }\r\n protected wirePlaysInline(): void {\r\n this.bindAttribute(\"playsInline\", true);\r\n }\r\n protected wireCrossOrigin(): void {\r\n this.bindAttribute(\"crossOrigin\");\r\n }\r\n protected wireControls(): void {\r\n this.bindAttribute(\"controls\", true);\r\n }\r\n protected wireControlsList(): void {\r\n this.bindAttribute(\"controlsList\");\r\n }\r\n // --- Lists Wiring ---\r\n protected wireSources(): void {\r\n this.config.on(\"intent.sources\", this.handleSourcesIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireTracks(): void {\r\n this.config.on(\"intent.tracks\", this.handleTracksIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- Status Tracks Wiring ---\r\n protected wireMediaTracks(type: TrackType, list = (this.el as any)[`${type.toLowerCase()}Tracks`]): void {\r\n if (list) for (const e of [\"addtrack\", \"removetrack\"]) list.addEventListener(e, () => this.handleTracksStatus(type, list), this.evtOpts.EL);\r\n list && this.handleTracksStatus(type, list, true);\r\n }\r\n protected wireTextTracks(): void {\r\n this.wireMediaTracks(\"Text\");\r\n }\r\n protected wireAudioTracks(): void {\r\n this.wireMediaTracks(\"Audio\");\r\n }\r\n protected wireVideoTracks(): void {\r\n this.wireMediaTracks(\"Video\");\r\n }\r\n // --- Active Cue Wiring ---\r\n protected textTrack: TextTrack | null = null;\r\n protected wireActiveCues(): void {\r\n const onChange = () => {\r\n const track = !this.isAlien ? this.config.status.textTracks[this.config.state.currentTextTrack] : this.alienTextTrack;\r\n this.textTrack !== track && this.textTrack?.removeEventListener(\"cuechange\", this.handleActiveCuesChange, this.evtOpts.EL);\r\n (this.textTrack = track)?.addEventListener(\"cuechange\", this.handleActiveCuesChange, this.evtOpts.EL), this.handleActiveCuesChange({ target: track });\r\n };\r\n this.config.on(\"state.currentTextTrack\", onChange, this.evtOpts.CONFIG), this.config.on(\"status.textTracks\", onChange, this.evtOpts.CONFIG);\r\n if (this.isAlien) for (const evt of [\"change\"] as const) this.el.textTracks.addEventListener(evt, onChange, this.evtOpts.EL); // , \"addtrack\", \"removetrack\"\r\n }\r\n protected get alienTextTrack(): TextTrack | null {\r\n return Array.prototype.find.call(this.el.textTracks, (t) => t.mode === \"showing\") || null;\r\n }\r\n // --- Settings Wiring ---\r\n // --- Settings Wiring ---\r\n protected wireDefaultMuted(): void {\r\n this.config.on(\"settings.defaultMuted\", this.handleDefaultMutedSetting, this.evtOpts.CONFIG);\r\n }\r\n protected wireDefaultPlaybackRate(): void {\r\n this.config.on(\"settings.defaultPlaybackRate\", this.handleDefaultPlaybackRateSetting, this.evtOpts.CONFIG);\r\n }\r\n protected wireSrcObject(): void {\r\n this.config.on(\"settings.srcObject\", this.handleSrcObjectSetting, this.evtOpts.CONFIG);\r\n }\r\n // ===========================================================================\r\n // HANDLERS (The Logic - Auto-Guarded)\r\n // ===========================================================================\r\n // --- Core States ---\r\n protected setTimeUpdateState(): void {\r\n const { status: st, settings: set, state: s } = this.config;\r\n s.currentTime = this.el.currentTime;\r\n if (st.isLive) {\r\n if (st.seekable.length) {\r\n const max = st.seekable.end(st.seekable.length - 1);\r\n st.canSeekLive = max - st.seekable.start(0) >= set.minDVRWindow;\r\n s.live = max - s.currentTime <= set.liveTolerance;\r\n } else s.live = !(st.canSeekLive = false);\r\n } else if (st.duration) this.config.status.ended = this.el.currentTime === this.el.duration; // UX boost\r\n }\r\n protected setSeekingState(): void {\r\n this.config.status.seeking = true;\r\n force(() => (this.config.status.played = this.el.played));\r\n }\r\n protected setSeekedState(): void {\r\n this.config.status.seeking = false;\r\n }\r\n private durationSeq = 0;\r\n private durationSrc = \"\";\r\n protected setDurationChangeState(): void {\r\n if (this.el.currentSrc !== this.durationSrc) (this.durationSeq = 0), (this.durationSrc = this.el.currentSrc);\r\n const prev = this.config.status.duration;\r\n if ((this.config.status.duration = this.el.duration) === Infinity) return void (this.config.status.isLive = true);\r\n prev !== Infinity && prev > 0 && this.el.duration > prev && ++this.durationSeq > 3 ? (this.config.status.isLive = true) : (this.config.status.isLive = this.config.state.live = false); // UX boost\r\n }\r\n protected setPlayState(): void {\r\n (this.config.state.paused = this.el.paused), (this.config.status.ended = this.el.ended);\r\n }\r\n protected setPauseState(): void {\r\n this.setPlayState(), force(() => (this.config.status.played = this.el.played));\r\n if (!this.config.settings.idleWaiting) this.config.status.waiting = false; // UX boost\r\n }\r\n // --- Core Intents ---\r\n protected handleSrcIntent(e: REvent<CtlrMedia, \"intent.src\">): void {\r\n if (e.resolved) return;\r\n if (!isSameURL(this.hostSrc, e.value)) this.hostSrc = this.el.src = e.value;\r\n e.resolve(this.name);\r\n }\r\n protected handleCurrentTimeIntent(e: REvent<CtlrMedia, \"intent.currentTime\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedData\", e, (min = getMediaMin(this.config), max = getMediaMax(this.config), val = clamp(min, e.value, max), finite = Number.isFinite(val)) => {\r\n if (e.value < min || e.value > max || !finite) e.reject(this.name); // Out of bounds\r\n if (finite) this.el.currentTime = clamp(min, e.value, max);\r\n }); // tested nd trusted status due to reactive dynamics\r\n e.resolve(this.name);\r\n }\r\n protected handlePausedIntent(e: REvent<CtlrMedia, \"intent.paused\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedMetadata\", e, () => (e.value ? this.el.pause() : this.el.play())?.catch?.((err) => (this.ctlr?.log(err, \"error\", true), this.signal && !this.signal.aborted && this.setPauseState())), undefined, this.isAlien && !e.value); // #LESS: error not worth notifying; `.play()` promises hence `always` override\r\n e.resolve(this.name);\r\n }\r\n // --- Feature States ---\r\n protected setVolumeChangeState(): void {\r\n this.config.state.volume = this.el.volume * 100;\r\n this.config.state.muted = this.el.muted;\r\n }\r\n protected setRateChangeState(): void {\r\n this.config.state.playbackRate = this.el.playbackRate;\r\n }\r\n protected setEnterPiPState(): void {\r\n this.config.state.pictureInPicture = true;\r\n }\r\n protected setLeavePiPState(): void {\r\n this.config.state.pictureInPicture = false;\r\n }\r\n protected setFullscreenChangeState(docInFs?: boolean): void {\r\n this.config.state.fullscreen = docInFs ? queryFullscreenEl() === this.el : false;\r\n }\r\n protected setWebkitBeginFullscreenState(): void {\r\n this.config.state.fullscreen = true;\r\n }\r\n protected setWebkitEndFullscreenState(): void {\r\n this.config.state.fullscreen = false;\r\n }\r\n protected setCurrentTrackState(type: TrackType, list = this.config.status[`${type.toLowerCase() as Lowercase<TrackType>}Tracks`]): void {\r\n this.config.state[`current${type}Track`] = getTrackIdx(this.el, type, \"active\", list);\r\n }\r\n protected handleMutation(m: MutationRecord) {\r\n const { state: s, settings: set } = this.config;\r\n if (m.type === \"childList\") {\r\n const nodes = [...m.addedNodes, ...m.removedNodes];\r\n if (nodes.some((n) => n.nodeName === \"SOURCE\")) s.sources = inert(getSources(this.el));\r\n if (nodes.some((n) => n.nodeName === \"TRACK\")) s.tracks = inert(getTracks(this.el));\r\n } else if (!m.attributeName) return;\r\n switch (m.attributeName) {\r\n case \"poster\":\r\n return (s.poster = (this.el as HTMLVideoElement).poster);\r\n case \"autoplay\":\r\n return (s.autoplay = this.el.autoplay);\r\n case \"loop\":\r\n return (s.loop = this.el.loop);\r\n case \"preload\":\r\n return (s.preload = this.el.preload);\r\n case \"crossorigin\":\r\n return (s.crossOrigin = this.el.crossOrigin);\r\n case \"controls\":\r\n return (s.controls = this.el.controls);\r\n case \"playsinline\":\r\n case \"webkit-playsinline\":\r\n return (s.playsInline = this.el.playsInline);\r\n case \"controlslist\":\r\n return (s.controlsList = this.el.controlsList);\r\n case \"muted\":\r\n return (s.muted = this.el.muted), (set.defaultMuted = this.el.defaultMuted);\r\n } // Mutations report before Queued MicroTasks so double \"state.*\" sets is safely batched for `on` listeners :)\r\n }\r\n // --- Feature Intents ---\r\n protected handleVolumeIntent(e: REvent<CtlrMedia, \"intent.volume\">): void {\r\n if (e.resolved) return;\r\n if (e.value < 0 || e.value > 100) e.reject(this.name); // Out of bounds\r\n this.el.volume = clamp(0, e.value / 100, 1);\r\n e.resolve(this.name);\r\n }\r\n protected handleMutedIntent(e: REvent<CtlrMedia, \"intent.muted\">): void {\r\n if (e.resolved) return;\r\n this.el.muted = e.value;\r\n e.resolve(this.name);\r\n }\r\n protected handlePlaybackRateIntent(e: REvent<CtlrMedia, \"intent.playbackRate\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedMetadata\", e, () => (this.el.playbackRate = e.value));\r\n e.resolve(this.name);\r\n }\r\n protected handlePictureInPictureIntent(e: REvent<CtlrMedia, \"intent.pictureInPicture\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedMetadata\", e, () => (e.value ? (this.el as HTMLVideoElement).requestPictureInPicture?.()?.catch(this.ctlr.notice) : document.pictureInPictureElement === this.el && document.exitPictureInPicture()?.catch(this.ctlr.notice)), undefined, !this.wired && e.value); // #EYE-SERVICE: hinged only on inits\r\n e.resolve(this.name);\r\n }\r\n protected handleFullscreenIntent(e: REvent<CtlrMedia, \"intent.fullscreen\">): void {\r\n if (e.resolved) return;\r\n (e.value ? enterFullscreen(this.el) : exitFullscreen(this.el))?.catch(this.ctlr.notice);\r\n e.resolve(this.name);\r\n }\r\n protected handleCurrentTrackIntent(e: REvent<CtlrMedia, `intent.current${TrackType}Track`>, type: TrackType): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedMetadata\", e, (list = this.config.status[`${type.toLowerCase() as Lowercase<TrackType>}Tracks`]) => {\r\n if ((e.value as number) >= list.length) return;\r\n setCurrentTrack(this.el, type, e.value as number, true, list); // #VALIDATED: mediated for cast conformity; no-opy\r\n this.setCurrentTrackState(type, list); // tracks \"change\" event not reliable\r\n if (type === \"Text\") this.config.state.textVisible = e.value === -1 ? false : this.config.intent.textVisible; // #UX boost: not a drifter\r\n type === \"Text\" && this.config.stall((t = this.textTrack) => t && (t.mode = this.config.state.textVisible ? \"showing\" : \"hidden\"));\r\n });\r\n e.resolve(this.name);\r\n }\r\n protected handleTextVisibleIntent(e: REvent<CtlrMedia, \"intent.textVisible\">, idx = this.config[this.ctlr.gospel].currentTextTrack): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedMetadata\", e, (iidx = this.config.intent.currentTextTrack) => {\r\n // prettier-ignore\r\n e.value && this.config.status.textTracks.length && idx === -1 && silence(() => (this.config.intent.currentTextTrack = iidx !== -1 ? iidx : !this.isAlien ? Math.max(0, getTrackIdx(this.el, \"Text\", this.config.state.tracks.find((t) => t.default), this.config.status.textTracks)) : 0)); // #BULLET-PROOF: should come clutch\r\n if (this.textTrack) this.textTrack.mode = e.value ? \"showing\" : \"hidden\";\r\n this.config.state.textVisible = e.value;\r\n });\r\n e.resolve(this.name);\r\n }\r\n protected handleAttributeIntent(e: REvent<CtlrMedia>, key: string, isBool: boolean, attr = key.toLowerCase()): void {\r\n if (e.resolved) return;\r\n if (key !== \"poster\" || !isSameURL((this.el as HTMLVideoElement).poster, e.value)) isBool ? this.el.toggleAttribute(attr, Boolean(e.value)) : e.value ? this.el.setAttribute(attr, e.value) : this.el.removeAttribute(attr); // (this.el as any)[key] = isBool ? Boolean(e.value) : (e.value ?? \"\"); // Generic handler for simple attributes\r\n key === \"playsInline\" && this.el.toggleAttribute(\"webkit-playsinline\", Boolean(e.value));\r\n e.resolve(this.name);\r\n }\r\n protected handleSourcesIntent(e: REvent<CtlrMedia, \"intent.sources\">): void {\r\n if (e.resolved) return;\r\n if (!isSameSources([...this.el.querySelectorAll(\"source\")], e.currentTarget.value)) (this.renderSources ??= renderList({ container: this.el, getKey: (s) => `${cleanURL(s.src)}|${s.type}${s.media}`, createNode: (s) => createEl(\"source\", s), updateNode: (el, s) => assignEl(el, s, undefined, undefined, false), initNode: (el, register) => el instanceof HTMLSourceElement && register(`${cleanURL(el.src)}|${el.type}${el.media}`) }))(e.currentTarget.value);\r\n e.resolve(this.name);\r\n }\r\n private renderSources?: ReturnType<typeof renderList<Source, HTMLSourceElement>>;\r\n protected handleTracksIntent(e: REvent<CtlrMedia, \"intent.tracks\">): void {\r\n if (e.resolved) return;\r\n if (!isSameTracks([...this.el.querySelectorAll(\"track\")], e.currentTarget.value)) (this.renderTracks ??= renderList({ container: this.el, getKey: (t) => `${cleanURL(t.src)}|${t.kind}|${t.label}|${t.srclang}`, createNode: (t) => createEl(\"track\", t), updateNode: (el, t) => assignEl(el, t, undefined, undefined, false), initNode: (el, register) => el instanceof HTMLTrackElement && register(`${cleanURL(el.src)}|${el.kind}|${el.label}|${el.srclang}|${el.default}`) }))(e.currentTarget.value);\r\n e.resolve(this.name);\r\n }\r\n private renderTracks?: ReturnType<typeof renderList<Track, HTMLTrackElement>>;\r\n // --- Status (Bulk) ---\r\n protected handleLoadingStatus(): void {\r\n this.config.status.readyState = this.el.readyState;\r\n this.config.status.networkState = this.el.networkState;\r\n force(() => ((this.config.status.buffered = this.el.buffered), (this.config.status.seekable = this.el.seekable)));\r\n }\r\n protected handleLoadedMetadataStatus(): void {\r\n (this.config.status.videoWidth = this.config.type === \"video\" ? this.config.element.videoWidth : 0), (this.config.status.videoHeight = this.config.type === \"video\" ? this.config.element.videoHeight : 0);\r\n this.config.status.isLive = (this.config.status.duration = this.el.duration) === Infinity;\r\n this.handleLoadingStatus(); // Update buffers too\r\n this.config.status.loadedMetadata = true;\r\n }\r\n protected handleLoadedDataStatus(): void {\r\n this.config.status.loadedData = true;\r\n }\r\n protected handleCanPlayStatus(): void {\r\n this.config.status.canPlay = true;\r\n this.config.status.waiting = false; // UX boost\r\n }\r\n protected handleCanPlayThroughStatus(): void {\r\n this.config.status.canPlayThrough = true;\r\n }\r\n protected handlePlayingStatus(): void {\r\n this.config.status.stalled = this.config.status.waiting = false;\r\n this.config.status.error = null; // UX boost\r\n }\r\n protected handleWaitingStatus(): void {\r\n this.config.status.waiting = this.config.settings.idleWaiting || !this.config.state.paused;\r\n }\r\n protected handleStalledStatus(): void {\r\n this.config.status.stalled = true;\r\n }\r\n protected handleErrorStatus(e: any, target = e?.target): void {\r\n if (target && target !== this.el) return this.ctlr?.log({ message: `Media ${target.nodeName || \"Child\"} element error occurred!`, event: e, target }, \"error\", true); // not an error but u gotta know\r\n this.config.status.error = this.el.error ?? { message: (isStr(e) && e) || e?.message };\r\n this.config.status.waiting = false;\r\n }\r\n protected handleTracksStatus(type: TrackType, list: any, init = false): void {\r\n type === \"Text\" && this.handleChaptersStatus(list); // chapter \"cuechange\" over to u; base\r\n this.config.status[`${type.toLowerCase() as Lowercase<TrackType>}Tracks`] = Array.prototype.filter.call(list, (t) => (type === \"Text\" ? t.kind === \"subtitles\" || t.kind === \"captions\" : true)); // filter out non-cue text tracks\r\n if (!init) silence(() => (this.config.intent[`current${type}Track`] = this.config.intent[`current${type}Track`])), this.config.tick(`intent.current${type}Track`), type === \"Text\" && silence(() => (this.config.intent.textVisible = this.config.intent.textVisible)); // #RE-TRIGGER: sync intent resolution\r\n }\r\n protected handleChaptersStatus(list = this.el.textTracks): void {\r\n const track = Array.prototype.find.call(list, (t: TextTrack) => t.kind === \"chapters\") as TextTrack | undefined;\r\n if (!track) return;\r\n const extract = (_?: any, meta = this.config.settings.metadata) => meta.allowMediaOverride && track.cues?.length && (meta.chapterInfo = inert(Array.from(track.cues, (cue: any) => ({ title: cue.text, startTime: cue.startTime, artwork: [] }))));\r\n track.mode === \"disabled\" && (track.mode = \"hidden\"), extract();\r\n if (track.cues?.length) return;\r\n const dTrack = Array.prototype.find.call(this.el.querySelectorAll(\"track\"), (t: HTMLTrackElement) => t.track === track);\r\n dTrack ? dTrack.addEventListener(\"load\", extract, this.evtOpts.EL) : track.addEventListener(\"cuechange\", extract, { ...this.evtOpts.EL, once: true });\r\n }\r\n protected handleActiveCuesChange(e?: globalThis.Event | { target?: TextTrack }, strict = false, track = e?.target as TextTrack | null): void {\r\n if (!strict || (track && getTrackIdx(this.el, \"Text\", track, this.config.status.textTracks) === this.config.state.currentTextTrack)) force(() => (this.config.status.activeCues = track?.activeCues || null)); // incase of multiple tracks `cuechange`\r\n }\r\n // --- Settings ---\r\n protected handleDefaultMutedSetting(e: REvent<CtlrMedia, \"settings.defaultMuted\">): void {\r\n if (this.el.defaultMuted !== e.value) this.el.defaultMuted = e.value; // #GUARD: no shots in the foot\r\n }\r\n protected handleDefaultPlaybackRateSetting(e: REvent<CtlrMedia, \"settings.defaultPlaybackRate\">): void {\r\n if (this.el.defaultPlaybackRate !== e.value) this.el.defaultPlaybackRate = e.value; // #GUARD: no shots in the foot\r\n }\r\n protected handleSrcObjectSetting(e: REvent<CtlrMedia, \"settings.srcObject\">): void {\r\n if (this.el.srcObject !== e.value) this.el.srcObject = e.value; // #GUARD: no shots in the foot\r\n }\r\n // === HELPERS ===\r\n protected override flush(): void {\r\n super.flush();\r\n this.config.state.paused = this.el.paused; // not flushed; callback? at src set\r\n }\r\n // --- Lifecycle ---\r\n protected override onDestroy(): void {\r\n if (document.pictureInPictureElement === this.el) document.exitPictureInPicture()?.catch(NOOP), (this.config.state.pictureInPicture = false); // #GUARD: no shots in others' foot\r\n super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface TechRegistryMap {\r\n html5: typeof HTML5Tech;\r\n }\r\n}\r\n","import { Player } from \"../player\";\nimport { setTimeout } from \"@utils/fn\";\nimport { queryFullscreen, observeMutation } from \"@utils/dom\";\nimport { NOOP } from \"sia-reactor\";\nimport { ATTR, controllers, globalState } from \"./build\";\n\nexport let AUDIO_CONTEXT: AudioContext | null = null;\nexport let AUDIO_LIMITER: DynamicsCompressorNode | null = null;\n\nconst mutSet = new WeakSet<HTMLElement>(), // weak set for true magic\n mutOpts: MutationObserverInit = { attributes: true, attributeFilter: [ATTR, \"controls\"] };\n\nexport function init(): void {\n mountMedia();\n for (const evt of [\"click\", \"pointerdown\", \"keydown\"]) document.addEventListener(evt, () => ((globalState.isTransient = true), startAudioManager()), true);\n for (const medium of document.querySelectorAll<HTMLMediaElement>(\"video,audio\")) observeMutation(medium, handleMediaMutation, mutOpts), (medium[ATTR] = medium.hasAttribute(ATTR));\n observeMutation(document.documentElement, handleDOMMutation, { childList: true, subtree: true });\n window.addEventListener(\"resize\", () => ((globalState.dimensions.window.width = window.innerWidth), (globalState.dimensions.window.height = window.innerHeight)));\n document.addEventListener(\"visibilitychange\", () => (globalState.isVisible = document.visibilityState !== \"hidden\"));\n for (const e of [\"fullscreenchange\", \"webkitfullscreenchange\", \"mozfullscreenchange\", \"msfullscreenchange\"]) document.addEventListener(e, () => (globalState.inFullscreen = queryFullscreen()));\n screen?.orientation?.addEventListener(\"change\", ({ target }, t = target as ScreenOrientation) => ((globalState.screenOrientation.type = t.type), (globalState.screenOrientation.angle = t.angle)));\n setInterval(() => globalState.clock++, 1000);\n}\n\nexport function handleMediaMutation({ target, attributeName: attr }: MutationRecord, _: MutationRecord[], t = target as HTMLMediaElement): void {\n if (attr === ATTR) !mutSet.has(t) && (t[ATTR] = t.hasAttribute(ATTR));\n else if (attr === \"controls\" && !(t as HTMLMediaElement).tmgPlayer?.ctlr?.media.intent.controls) t.hasAttribute(ATTR) && t.removeAttribute(\"controls\"); // UX boost\n}\n\nexport function handleDOMMutation({ addedNodes, removedNodes }: MutationRecord): void {\n for (const node of addedNodes as NodeListOf<HTMLElement>) {\n if (!node?.tagName) continue;\n const els = node.matches(\":is(video,audio):not(.tmg-host)\") ? [node] : node.querySelectorAll(\":is(video,audio):not(.tmg-host)\");\n for (const el of els) observeMutation(el, handleMediaMutation, mutOpts), ((el as HTMLMediaElement)[ATTR] = el.hasAttribute(ATTR));\n }\n for (const node of removedNodes as NodeListOf<HTMLElement>) {\n if (!node?.tagName || node.isConnected) continue;\n const els = node.matches(\".tmg-host\") ? [node] : node.querySelectorAll(\".tmg-host\");\n for (const el of els) !(el as HTMLMediaElement).tmgPlayer?.ctlr?.mutating && (el as HTMLMediaElement).tmgPlayer?.detach();\n }\n}\n\nexport function mountMedia() {\n if (\"undefined\" === typeof HTMLMediaElement) return;\n for (const el of [HTMLVideoElement, HTMLAudioElement])\n Object.defineProperty(el.prototype, ATTR, {\n get: function () {\n return this.hasAttribute(ATTR);\n },\n set: async function (value) {\n if (value) {\n !mutSet.has(this) && mutSet.add(this);\n await ((this as HTMLMediaElement).tmgPlayer ?? new Player()).attach(this);\n this.setAttribute(ATTR, \"\");\n setTimeout(() => mutSet.delete(this));\n } else {\n this.hasAttribute(ATTR) && !mutSet.has(this) && mutSet.add(this);\n this.removeAttribute(ATTR);\n (this as HTMLMediaElement).tmgPlayer?.detach();\n setTimeout(() => mutSet.delete(this));\n }\n },\n enumerable: true,\n configurable: true,\n });\n}\nexport function unmountMedia(): void {\n for (const el of [HTMLVideoElement, HTMLAudioElement]) delete (el.prototype as any)[ATTR];\n}\n\nexport function startAudioManager(): void {\n if (!AUDIO_CONTEXT && globalState.isTransient) {\n AUDIO_CONTEXT = new (window.AudioContext || (window as any).webkitAudioContext)() as AudioContext;\n const L = (AUDIO_LIMITER = AUDIO_CONTEXT!.createDynamicsCompressor());\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); // peak logic = peak sound\n globalState.audioCtxReady = true;\n } else if (AUDIO_CONTEXT?.state === \"suspended\") AUDIO_CONTEXT.resume();\n}\nexport function connectToAudioManager(medium: HTMLMediaElement) {\n if (!AUDIO_CONTEXT) return \"unavailable\";\n medium.mediaElementSourceNode?.disconnect();\n medium.mediaElementSourceNode ??= AUDIO_CONTEXT.createMediaElementSource(medium);\n medium._tmgGainNode ??= AUDIO_CONTEXT.createGain();\n medium._tmgDynamicsCompressorNode ??= AUDIO_CONTEXT.createDynamicsCompressor();\n medium.mediaElementSourceNode.connect(medium._tmgDynamicsCompressorNode);\n medium._tmgDynamicsCompressorNode.connect(medium._tmgGainNode);\n medium._tmgGainNode.connect(AUDIO_LIMITER!), AUDIO_LIMITER!.connect(AUDIO_CONTEXT!.destination);\n}\nexport function disconnectFromAudioManager(medium: HTMLMediaElement) {\n if (!AUDIO_CONTEXT) return \"unavailable\";\n medium._tmgGainNode?.disconnect(), medium._tmgDynamicsCompressorNode?.disconnect();\n medium.mediaElementSourceNode?.disconnect(), medium.mediaElementSourceNode?.connect(AUDIO_CONTEXT.destination);\n} // reroutes sourceNode to destination so audio keeps flowing\n\nlet orientated = false,\n prevScreenType: OrientationType | undefined;\nexport function connectOrientationManager(): void {\n if (orientated) return;\n orientated = true;\n (window as any).DeviceOrientationEvent?.requestPermission?.().then(NOOP), window.addEventListener(\"deviceorientation\", handleOrientation);\n}\nexport function disconnectOrientationManager(): void {\n if (!orientated) return;\n orientated = false;\n window.removeEventListener(\"deviceorientation\", handleOrientation);\n}\nexport function handleOrientation({ beta: b, gamma: g }: DeviceOrientationEvent): void {\n if (b === null || g === null) return;\n const aG = Math.abs(g),\n aB = Math.abs(b);\n if ((aB < 20 && aG < 20) || (aB > 85 && aB < 95)) return; // Guard against flat tables (< 20) AND Gimbal Lock inversions in bed (85-95)\n let type = prevScreenType;\n aG > 50 && aB < 35 ? (type = g > 0 ? \"landscape-secondary\" : \"landscape-primary\") : aB > 50 && aG < 35 && (type = b > 0 ? \"portrait-primary\" : \"portrait-secondary\");\n if (type === prevScreenType || !type) return;\n prevScreenType = type;\n for (const c of controllers) if (c.media?.state.autoFullscreenOrientation) c.media.state.fullscreenOrientation = type;\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n","import type { CtlrConfig, CtlrState } from \"@defs/config\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { Action } from \"@defs/action\";\r\nimport { TechRegistry, PlugRegistry } from \"./registries\";\r\nimport { HTML5Tech } from \"@techs/html5\";\r\nimport type { TechConstructor } from \"@techs/base\";\r\nimport { PlugConstructor as PC, type BasePlug as Plug } from \"@plugs/base\";\r\nimport { guardAllMethods, guardMethod } from \"@t007/utils\";\r\nimport { setTimeout, throttle, cancelTimeout, cancelRAFLoop, RAFLoop, mockAsync, debounce } from \"@utils/fn\";\r\nimport { getSizeTier, getWindow } from \"@utils/dom\";\r\nimport { createEl, observeIntersection, observeResize } from \"@utils/dom\";\r\nimport { collator, capitalize, uncamelize } from \"@utils/str\";\r\nimport { cloneMedia, getMediaReport, isFeatured, isSameSources } from \"@utils/media\";\r\nimport { type Volatile, reactive, type Reactive, inert, intent, volatile, NOOP, NIL } from \"sia-reactor\";\r\nimport { fanout, deepClone, getPath, getPaths, isLeafPath, matchPaths, mergeObjs, nuke, setPath, isObj, mirror } from \"sia-reactor/utils\";\r\nimport type { PlugRegistryMap, ControllerDOMMap } from \"@defs/registries\";\r\nimport { isArr, isFunc, isStr } from \"@utils/obj\";\r\nimport { silence, transaction } from \"sia-reactor/modules\";\r\nimport { AUDIO_EXTENSIONS } from \"@utils/match\";\r\nimport { MediaType } from \"@defs/generics\";\r\nimport { STATE_BUILD } from \"@consts/config\";\r\n\r\n// --- CONTROLLER (The Orchestrator) ---\r\nexport class Controller {\r\n // --- CORE ---\r\n protected ac = new AbortController();\r\n public readonly signal = this.ac.signal;\r\n public plugs = new Map<string, Plug>();\r\n // --- RUNTIME ---\r\n public media: Reactive<CtlrMedia>;\r\n public state: Reactive<CtlrState>;\r\n public config: Reactive<Volatile<CtlrConfig>>;\r\n public get settings() {\r\n return this.config.settings; // can change ref\r\n } // for easy reach, better devx\r\n public get actions() {\r\n return this.config.actions;\r\n } // same as above\r\n public get gospel(): \"state\" | \"intent\" {\r\n return this.flags.wired ? \"state\" : \"intent\";\r\n } // \"gospel\" truth, init edgecases\r\n // --- MEMORY ---\r\n public flags: { readyState: number; initialized: boolean; wired: boolean; played: boolean; destroyed: boolean; instance: Controller } = { instance: this } as any;\r\n public build: CtlrConfig; // Build Cache\r\n public stall = new Map<string, () => void>();\r\n // --- DOM ---\r\n public DOM: ControllerDOMMap = {}; // To be populated with common elements for easy reach\r\n public hash = \"#tmg-auto-gen\";\r\n public zenlist = [\"moreSettings\"]; // #DEFAULT: build privilege; block actions while UI is active\r\n public mutating = true; // for external watchers that need to know\r\n\r\n constructor(medium: HTMLMediaElement, build: CtlrConfig) {\r\n guardAllMethods(this, this.guard);\r\n const defs = mergeObjs(getMediaReport(medium), build.media); // returns defaults and initials\r\n this.config = reactive(volatile(build), { referenceTracking: true, smartCloning: true }); // `lineageTracing: false` so clone before reassigning \"already in state\" objects\r\n this.state = reactive(deepClone(STATE_BUILD));\r\n this.state.watch(\"readyState\", (v) => ((this.flags.readyState = v), (this.flags.initialized = v > 0), (this.flags.wired = v > 1), (this.flags.played = v > 2), (this.flags.destroyed = v < 0)), { signal: this.signal });\r\n this.media = reactive({ intent: volatile(intent(defs.intent)), state: defs.state, status: defs.status, settings: volatile(intent(defs.settings)), type: medium.tagName.toLowerCase() as MediaType, tech: inert({}), features: {}, element: medium, pseudoElement: createEl(medium.tagName.toLowerCase()), container: createEl(\"div\"), pseudoContainer: createEl(\"div\") }, { crossRealms: true }) as any;\r\n this.media.set(\"tech\", (t) => inert(t!), { signal: this.signal });\r\n this.log((this.build = this.config.snapshot())), delete this.config.media; // clone for resets and fast subsequents\r\n this.setReadyState(0), this.setup();\r\n }\r\n\r\n private async setup(): Promise<void> {\r\n this.connectPlugs(), this.wireTechHandler(), this.wireStateHandler();\r\n await mockAsync(0), this.setReadyState(1); // wiring the machinery\r\n this.state.wonce(\"readyState\", () => (!this.media.state.paused ? this.setReadyState(3) : this.media.wonce(\"state.paused\", () => this.setReadyState(3), { signal: this.signal })), { signal: this.signal }); // first play(ed), matters to some\r\n await mockAsync(0), this.setReadyState(2); // block `set` to stall, e.g light\r\n setTimeout(() => (this.mutating = false), 0, this.signal);\r\n }\r\n\r\n public connectPlugs(Plugs = PlugRegistry.getOrdered()): void {\r\n if (!this.flags.wired) for (const Plug of Plugs) this.plugIn(Plug); // solve the \"must wire before tech to capture\" or plugs go from \"higher power\" to slaves on re-connect\r\n const plugs = this.flags.wired && Plugs.filter((Plug) => this.config.noPlugList !== \"*\" && (!this.config.noPlugList.includes(Plug.fullName) || Plug.isCore)).map((Plug) => new Plug(this));\r\n if (plugs) plugs.forEach((plug) => plug.mount?.()), plugs.forEach((plug) => plug.wire?.()); // plugs might rely on others being plugged in\r\n }\r\n public disconnectPlugs(): void {\r\n for (const plug of [...this.plugs.values()].reverse()) plug.destroy();\r\n }\r\n public plugIn(Plug: PC, config?: any): this {\r\n return this.config.noPlugList !== \"*\" && (!this.config.noPlugList.includes(Plug.fullName) || Plug.isCore) && new Plug(this, config).setup(), this; // #RESPONSIBLE: no external setup\r\n }\r\n public plug<K extends keyof PlugRegistryMap>(fullName: K): InstanceType<PlugRegistryMap[K]> | undefined;\r\n public plug<T extends Plug = Plug>(fullName: string): T | undefined;\r\n public plug(fullName: string): any {\r\n return this.plugs.get(fullName);\r\n }\r\n\r\n protected wireTechHandler(): void {\r\n this.media.watch(\"intent.src\", this.handleTech, { signal: this.signal, init: true }); // load initial\r\n this.media.watch(\"intent.sources\", this.handleTech, { signal: this.signal });\r\n this.media.watch(\"settings.srcObject\", this.handleTech, { signal: this.signal });\r\n }\r\n protected handleTech(): void {\r\n if (this.media.status.ads) return;\r\n const { src, sources } = this.media.intent;\r\n if (this.media.settings.srcObject) return this.useTech(); // `MediaProvider` is native only\r\n let techPick: TechConstructor | null = TechRegistry.pick(src, this.config.settings.techOrder),\r\n srcPick: string | null = techPick ? src : null;\r\n if (!techPick && !isSameSources(sources, this.media.state.sources))\r\n for (const source of sources) {\r\n techPick = TechRegistry.pick(source.src, this.config.settings.techOrder);\r\n // prettier-ignore\r\n if (techPick) { srcPick = source.src; break; }\r\n }\r\n (this.media.state.src = src), (this.media.state.sources = inert(sources)); // for tech fanout accuracy\r\n this.useTech(techPick || undefined);\r\n if (srcPick !== src && !this.media.features.sources) silence(() => (this.media.intent.src = srcPick!)); // bonus since tech can't handle sources\r\n }\r\n public useTech(TechClass: TechConstructor = HTML5Tech, reload = false): void {\r\n const prevType = this.media.type;\r\n this.media.type = AUDIO_EXTENSIONS.test(this.media.state.src) ? \"audio\" : \"video\";\r\n (reload || TechClass !== this.media.tech.constructor || this.media.type !== prevType) && (this.media.tech = new TechClass(this)).setup(); // #RESPONSIBLE: no external setup\r\n }\r\n public get isNativeEl(): boolean {\r\n return this.media.element === this.media.tech.element;\r\n }\r\n\r\n private wireStateHandler(): void {\r\n observeIntersection(this.media.container.parentElement, (entry) => (this.state.parentIntersecting = entry.isIntersecting), this.signal);\r\n observeIntersection(this.media.container, (entry) => (this.state.mediaIntersecting = entry.isIntersecting), this.signal);\r\n observeResize(this.media.container, () => fanout(this.state.dimensions.container, getSizeTier(this.media.container)), this.signal);\r\n observeResize(this.media.pseudoContainer, () => fanout(this.state.dimensions.pseudoContainer, getSizeTier(this.media.pseudoContainer)), this.signal);\r\n }\r\n public setReadyState(state?: number): void {\r\n this.state.readyState = !this.state ? 0 : state ?? this.state.readyState + 1;\r\n const rS = this.state.readyState; // incase of blocked sets, e.g. light\r\n this.fire(\"tmgreadystatechange\", this.flags), this.fire(rS === 0 ? \"tmgcreate\" : rS === 1 ? \"tmginit\" : rS === 2 ? \"tmgwire\" : rS === 3 ? \"tmgplay\" : rS === -1 ? \"tmgdestroy\" : \"\", this.flags);\r\n }\r\n\r\n public guard = <Fn extends Function>(fn: Fn, silent = false) => guardMethod(fn, (e) => this.notice(e, \"error\", !silent)); // `()=>{}`: bounded even before init\r\n public notice(mssg: any, type: \"error\" | \"warn\" | \"log\" = \"error\", toast?: string | boolean | null, swallow = true): void {\r\n this.log(mssg, type, swallow), toast !== false && ((type = type === \"error\" && swallow ? \"warn\" : type) === \"log\" ? this.toast : this.toast?.[type])?.(toast === null || this.config.devMode ? mssg : isStr(toast) ? toast : \"Something went wrong\", { tag: \"tmg-swrg\" });\r\n }\r\n public log(mssg: any, type: \"error\" | \"warn\" | \"log\" = \"log\", swallow = false): void {\r\n if (this.config.devMode) type === \"error\" ? (swallow ? console.warn(`[TMG Controller] Error swallowed →`, mssg) : console.error(`[TMG Controller] Error occurred →`, mssg)) : type === \"warn\" ? console.warn(`[TMG Controller] Warning →`, mssg) : console.log(`[TMG Controller] Log →`, mssg); // swallow = errors that don't leave cracks\r\n }\r\n public fire(eN: string, detail: any = null, el: HTMLElement | EventTarget = this.media.element, bubbles = true, cancelable = true): void {\r\n eN && el?.dispatchEvent(new CustomEvent(eN, { detail, bubbles, cancelable }));\r\n }\r\n public when(status: keyof CtlrMedia[\"status\"], e?: { path?: string; value?: any }, task: () => any = NOOP, signal = this.media.tech.signal, always = true, _key = status + (e?.path || \"\"), _value = (!always && this.flags.wired) || this.media.status[status], _log = this.config.devMode && !this.media.status[status]): void {\r\n const callback = this.guard((v: any, __: any, stall = true) => v && (stall && this.stall.get(_key)?.(), this.stall.delete(_key), _log && this.log(`${e?.path || \"-\"} stall by ${status}: ${isObj(e?.value, false) ? \"{-}\" : e?.value ?? \"-\"}`), task())); // RS(${this.flags.readyState})\r\n this.stall.get(_key)?.(), _value ? callback(_value, null, false) : this.stall.set(_key, this.media.watch(`status.${status}`, callback, { signal }));\r\n } // #EXTRA-MILE: doing the most with the least\r\n public get toast() {\r\n return this.plug(\"settings.toasts\")?.toast;\r\n }\r\n public get notify() {\r\n return this.plug(\"settings.notifiers\")?.notify;\r\n }\r\n\r\n public learn(key: string, act: Omit<Action, \"id\"> = NIL, signal = this.signal, old = this.actions.entries[key] ?? {}): void {\r\n this.actions.entries[key] = { ...act, ...old, id: key as any, fn: act.fn }; // fn must comes from the registering plug (runtime source of truth), persisted fields (label, logic, notify) survive from old entry\r\n this.config.on(`actions.entries.${key}` as any, () => this.actions.entries[key] && this.actions.entries[key].fn !== act.fn && (this.actions.entries[key].fn = act.fn), { signal });\r\n }\r\n public perform(id?: string, ...args: any[]): boolean {\r\n const act = id && this.actions.entries[id];\r\n if (!act || act.disabled || (!act.zen && this.zenlist.some(this.isUIActive))) return false;\r\n const can = !act.gates?.some((g) => !this.media.features[g]);\r\n transaction((root = act.logic?.length ? (this.logicRoot as any) : undefined) => {\r\n if (act.logic?.length) for (const { op, path, value, curr = op === \"set\" ? value : getPath(root, mirror(path)) } of act.logic as any) setPath(root, path, op === \"toggle\" ? !curr : op === \"increment\" ? curr + (value ?? 1) : op === \"decrement\" ? curr - (value ?? 1) : value);\r\n can && act.notify && this.notify?.(act.notify), act.fn?.(...args), can && act.toast && this.toast?.((isFunc(act.toast.render) ? act.toast.render() : act.toast.render) || `Performed ${act.label ?? capitalize(uncamelize(act.id))}`, { tag: this.config.id + act.id, renotify: true, ...act.toast });\r\n }, act.label ?? act.id);\r\n return can;\r\n }\r\n public isLogical(path: string, leaf = false, value = leaf && getPath(this.logicRoot as any, mirror(path)), force = false): boolean {\r\n if (matchPaths(this.actions.blacklist, path) || (!this.config.devMode && matchPaths(this.actions.devlist, path))) return false;\r\n if (!force && /^media\\.(intent|settings)\\./.test(path) && !isFeatured(this.media, path.slice(path.lastIndexOf(\".\") + 1))) return false;\r\n return !leaf || isArr(value) || isLeafPath(this.logicRoot as any, path as any, undefined, value);\r\n }\r\n public get logicRoot() {\r\n return { media: this.media, settings: this.config.settings };\r\n }\r\n public get logicActions() {\r\n return (Object.values(this.actions.entries) as Action[]).filter((a) => !a.system || this.config.devMode).sort((a, b) => collator.compare(a.label || \"\", b.label || \"\"));\r\n }\r\n public getLogicPaths(path: string, force = false): string[] {\r\n // prettier-ignore\r\n return getPaths(this.logicRoot as any, path, { depth: 1 }).filter((p) => this.isLogical(p, false, undefined, force)).sort(collator.compare);\r\n }\r\n\r\n public throttle(key: string, fn: Function, delay = 30, strict: ((fn: Function) => number) | boolean = true, signal = this.signal) {\r\n throttle(this.config.id + key, fn, delay, strict, signal, getWindow(this.media.container));\r\n }\r\n public debounce(key: string, fn: Function, delay = 30, strict = false, signal = this.signal) {\r\n debounce(this.config.id + key, fn, delay, strict, signal, getWindow(this.media.container));\r\n }\r\n public RAFLoop(key: string, fn: Function, signal = this.signal): void {\r\n RAFLoop(this.config.id + key, fn, signal, getWindow(this.media.container));\r\n }\r\n public cancelTimeout(type: \"throttle\" | \"debounce\", key: string): void {\r\n cancelTimeout(type, this.config.id + key);\r\n }\r\n public cancelRAFLoop(key: string): void {\r\n cancelRAFLoop(this.config.id + key);\r\n }\r\n public cancelRAFLoops(): void {\r\n if (t007._RAFLoopers) for (const k of t007._RAFLoopers.keys()) k.startsWith(this.config.id) && cancelRAFLoop(k);\r\n }\r\n\r\n public isUIActive(mode: string): boolean {\r\n return this.media.container.classList.contains(`tmg-media-${uncamelize(mode, \"-\")}`);\r\n }\r\n public queryDOM<K extends keyof HTMLElementTagNameMap>(query: K, all: true, isPseudo?: boolean): NodeListOf<HTMLElementTagNameMap[K]>;\r\n public queryDOM<E extends Element = HTMLElement>(query: string, all: true, isPseudo?: boolean): NodeListOf<E>;\r\n public queryDOM<K extends keyof HTMLElementTagNameMap>(query: K, all?: false, isPseudo?: boolean): HTMLElementTagNameMap[K] | null;\r\n public queryDOM<E extends Element = HTMLElement>(query: string, all?: false, isPseudo?: boolean): E | null;\r\n public queryDOM(query: string, all = false, isPseudo = false) {\r\n return all ? (isPseudo ? this.media.pseudoContainer : this.media.container).querySelectorAll(query) : (isPseudo ? this.media.pseudoContainer : this.media.container).querySelector(query);\r\n }\r\n\r\n public syncImgLoadState(img: HTMLImageElement, now = true): HTMLImageElement {\r\n return [\"load\", \"error\"].forEach((ev) => img.addEventListener(ev, this.setImgLoadState, { signal: this.signal })), now && this.setImgLoadState({ target: img }), img;\r\n }\r\n public setImgLoadState<Ev extends Partial<Pick<Event, \"target\" | \"type\">>>({ target: img, type = \"load\" }: Ev): void {\r\n img instanceof HTMLImageElement && img?.setAttribute(\"data-loaded\", String(type === \"load\" && img.complete && img.naturalWidth > 0));\r\n }\r\n public setImgFallback<Ev extends Partial<Pick<Event, \"target\">>>({ target: img }: Ev): void {\r\n img instanceof HTMLImageElement && img.src !== window.TMG_MEDIA_ALT_IMG_SRC && (img.src = window.TMG_MEDIA_ALT_IMG_SRC!);\r\n }\r\n public setCanvasFallback(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D | null, callback = (img = this.altImg) => ctx?.drawImage((this.altImg = img)!, 0, 0, canvas.width, canvas.height)): void {\r\n const _img = canvas && (this.altImg && this.altImg.src === window.TMG_MEDIA_ALT_IMG_SRC ? callback() : createEl(\"img\", { src: window.TMG_MEDIA_ALT_IMG_SRC, onload: () => callback(_img as HTMLImageElement) }));\r\n }\r\n private altImg?: HTMLImageElement;\r\n\r\n public destroy(): HTMLMediaElement {\r\n this.mutating = true; // destruction will mutate, raise flag\r\n this.setReadyState(-1), this.ac.abort(\"[TMG Controller] Instance annihilation\"), this.cancelRAFLoops();\r\n this.disconnectPlugs(), this.media.tech.destroy();\r\n const el = this.config.safeDetach ? cloneMedia(this.media.element) : this.media.element;\r\n this.state.destroy(), this.config.destroy(), this.media.destroy();\r\n return nuke(this), el;\r\n }\r\n}\r\n","import { Controller } from \"@core/controller\";\r\nimport { ATTR, 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 { deepClone, mergeObjs, parsePathObj } from \"sia-reactor/utils\";\r\n\r\nexport type BuildParam = DeepPartial<CtlrConfig> & Record<Paths<CtlrConfig>, PathValue<CtlrConfig>>;\r\n\r\nexport class Player {\r\n public build: CtlrConfig = deepClone(CONFIG_BUILD) as any;\r\n public deployed: boolean = false;\r\n public medium: HTMLMediaElement | null = null;\r\n public controller: Controller | null = null;\r\n public get ctlr(): Controller | null {\r\n return this.controller;\r\n }\r\n\r\n constructor(build = {} as BuildParam) {\r\n this.configure({ ...build, id: build.id ?? `${luid()}_Controller_${controllers.length + 1}` });\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: \"Loop over the iterable argument to instantiate a new 'tmg.Player' for each\" });\r\n if (this.deployed) return medium;\r\n medium.tmgPlayer?.detach(), (medium.tmgPlayer = this), (this.medium = medium);\r\n let dev, idx;\r\n controllers.push(this.build.id as any), (dev = this.build.devMode) && console.time(`TMG Controller ${(idx = controllers.length + 1)} Attach`);\r\n return await this.deploy(), dev && console.timeEnd(`TMG Controller ${idx} Attach`), this.ctlr?.fire(\"tmgattach\", this.ctlr.flags), medium;\r\n }\r\n public detach() {\r\n if (!this.deployed) return;\r\n const medium = this.ctlr?.destroy() || this.medium!;\r\n this.ctlr && controllers.splice(controllers.indexOf(this.ctlr), 1);\r\n medium.classList.remove(`tmg-${medium.tagName.toLowerCase()}`, \"tmg-media\", \"tmg-host\");\r\n medium[ATTR] = this.deployed = false;\r\n return (medium.tmgPlayer = this.controller = this.medium = null), medium;\r\n }\r\n\r\n private async deploy() {\r\n if (this.deployed || !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\" });\r\n this.medium[ATTR] = this.deployed = true;\r\n this.medium.classList.add(`tmg-${this.medium.tagName.toLowerCase()}`, \"tmg-media\", \"tmg-host\");\r\n await Promise.allSettled([this.fetchConfig(), loadResource(window.TMG_MEDIA_CSS_SRC!), loadResource(window.T007_TOAST_JS_SRC!, \"script\"), loadResource(window.T007_INPUT_JS_SRC!, \"script\")]);\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 queryBuild(): boolean {\r\n return !this.deployed || (this.notice({ warning: \"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, query = true): void {\r\n if (isObj(build) && (!query || this.queryBuild())) this.build = mergeObjs(this.build, parsePathObj(build));\r\n }\r\n public async fetchConfig(build: object = {}, value = this.medium?.getAttribute(\"tmg\")) {\r\n if (value)\r\n try {\r\n if (value.includes(\".json\")) {\r\n const res = await fetch(value);\r\n if (!res.ok) throw new Error(`JSON file not found at provided URL!. Status: ${res.status}`);\r\n build = await res.json();\r\n } else build = JSON.parse(value);\r\n } catch (err) {\r\n this.notice({ error: (err as Error).message, warning: `Valid JSON is required for parsing your build configuration` });\r\n }\r\n for (const attr of this.medium?.getAttributeNames().filter((a) => a.startsWith(\"tmg--\")) || []) setHTMLConfig(build, attr, this.medium!.getAttribute(attr) || \"\");\r\n this.configure(build as BuildParam, false);\r\n }\r\n\r\n private notice({ error, warning, tip }: Partial<Record<\"error\" | \"warning\" | \"tip\", string>>): void {\r\n if (this.build.devMode) 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"],"mappings":"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","names":["NOOP","createEl","createEl","init","NOOP","inert","NOOP","isObj","silence","inert","silence","NOOP","isObj","force","deepClone","mergeObjs","deepClone","mergeObjs"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
VolumePlug
|
|
3
|
+
} from "./chunk-OR3EGSRH.js";
|
|
4
4
|
import {
|
|
5
|
-
|
|
6
|
-
} from "./chunk-
|
|
5
|
+
NotifiersPlug
|
|
6
|
+
} from "./chunk-IJ4EHQLP.js";
|
|
7
7
|
import {
|
|
8
8
|
TimeTravelPlug
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-Q2PVLSNG.js";
|
|
10
10
|
import {
|
|
11
|
-
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
VoicePlug
|
|
12
|
+
} from "./chunk-JZZNDOWL.js";
|
|
13
13
|
import {
|
|
14
14
|
PlaybackRatePlug
|
|
15
15
|
} from "./chunk-T7XBFM52.js";
|
|
@@ -18,58 +18,61 @@ import {
|
|
|
18
18
|
} from "./chunk-B6RZBMWI.js";
|
|
19
19
|
import {
|
|
20
20
|
TimePlug
|
|
21
|
-
} from "./chunk-
|
|
22
|
-
import {
|
|
23
|
-
PanelPlug
|
|
24
|
-
} from "./chunk-3R3YN3PR.js";
|
|
21
|
+
} from "./chunk-YE27TO6L.js";
|
|
25
22
|
import {
|
|
26
23
|
PersistPlug
|
|
27
24
|
} from "./chunk-H5YOH5FV.js";
|
|
28
25
|
import {
|
|
29
|
-
|
|
30
|
-
} from "./chunk-
|
|
26
|
+
PosterPlug
|
|
27
|
+
} from "./chunk-FOHBPGFM.js";
|
|
28
|
+
import {
|
|
29
|
+
OverlayPlug
|
|
30
|
+
} from "./chunk-47SZSPR7.js";
|
|
31
31
|
import {
|
|
32
32
|
ObjectFitPlug
|
|
33
33
|
} from "./chunk-6Z25E4A4.js";
|
|
34
34
|
import {
|
|
35
|
-
|
|
36
|
-
} from "./chunk-
|
|
35
|
+
PanelPlug
|
|
36
|
+
} from "./chunk-3R3YN3PR.js";
|
|
37
37
|
import {
|
|
38
38
|
ModesCastPin
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-XLD6XFKI.js";
|
|
40
40
|
import {
|
|
41
|
-
|
|
42
|
-
} from "./chunk-
|
|
41
|
+
KeysPlug
|
|
42
|
+
} from "./chunk-GTK5KLUZ.js";
|
|
43
43
|
import {
|
|
44
|
-
|
|
45
|
-
} from "./chunk-
|
|
44
|
+
MetadataPlug
|
|
45
|
+
} from "./chunk-Y6XF4JQS.js";
|
|
46
46
|
import {
|
|
47
47
|
ModesAirPlayPin
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-3NYQJFCX.js";
|
|
49
49
|
import {
|
|
50
50
|
ModesFullscreenPin,
|
|
51
51
|
ModesMiniplayerPin,
|
|
52
52
|
ModesPictureInPicturePin,
|
|
53
53
|
ModesPlug,
|
|
54
54
|
ModesTheaterPin
|
|
55
|
-
} from "./chunk-
|
|
56
|
-
import {
|
|
57
|
-
KeysPlug
|
|
58
|
-
} from "./chunk-GTK5KLUZ.js";
|
|
55
|
+
} from "./chunk-QDGNEBXT.js";
|
|
59
56
|
import {
|
|
60
57
|
GesturePlug,
|
|
61
58
|
GestureTouchPin,
|
|
62
59
|
GestureWheelPin
|
|
63
60
|
} from "./chunk-CM63KUHW.js";
|
|
64
61
|
import {
|
|
65
|
-
|
|
66
|
-
} from "./chunk-
|
|
62
|
+
LockedPlug
|
|
63
|
+
} from "./chunk-MROTHXKK.js";
|
|
67
64
|
import {
|
|
68
65
|
FastPlayPlug
|
|
69
66
|
} from "./chunk-UI5D4OIZ.js";
|
|
70
67
|
import {
|
|
71
68
|
FramePlug
|
|
72
69
|
} from "./chunk-CU5V4T7W.js";
|
|
70
|
+
import {
|
|
71
|
+
CSSPlug
|
|
72
|
+
} from "./chunk-AGIGOLZO.js";
|
|
73
|
+
import {
|
|
74
|
+
ErrorsPlug
|
|
75
|
+
} from "./chunk-GQUDHB5V.js";
|
|
73
76
|
import {
|
|
74
77
|
ControlPanelDraggablePin,
|
|
75
78
|
ControlPanelPlug
|
|
@@ -78,32 +81,29 @@ import {
|
|
|
78
81
|
ToastsPlug
|
|
79
82
|
} from "./chunk-UKUHNS75.js";
|
|
80
83
|
import {
|
|
81
|
-
|
|
82
|
-
} from "./chunk-
|
|
83
|
-
import {
|
|
84
|
-
AutoPlug
|
|
85
|
-
} from "./chunk-NNRJBBPH.js";
|
|
84
|
+
AmbiencePlug
|
|
85
|
+
} from "./chunk-U6IVWUYP.js";
|
|
86
86
|
import {
|
|
87
87
|
BrightnessPlug
|
|
88
88
|
} from "./chunk-TZH3LLVR.js";
|
|
89
89
|
import {
|
|
90
90
|
CaptionsPlug
|
|
91
|
-
} from "./chunk-
|
|
91
|
+
} from "./chunk-WYDJLWLT.js";
|
|
92
92
|
import {
|
|
93
|
-
|
|
94
|
-
} from "./chunk-
|
|
93
|
+
AutoPlug
|
|
94
|
+
} from "./chunk-NNRJBBPH.js";
|
|
95
95
|
import {
|
|
96
|
-
|
|
97
|
-
} from "./chunk-
|
|
96
|
+
PlaylistPlug
|
|
97
|
+
} from "./chunk-FI44MLF6.js";
|
|
98
98
|
import {
|
|
99
99
|
LightPlug
|
|
100
100
|
} from "./chunk-RAJPAOA6.js";
|
|
101
101
|
import {
|
|
102
|
-
|
|
103
|
-
} from "./chunk-
|
|
102
|
+
SkeletonPlug
|
|
103
|
+
} from "./chunk-EPWGVHCC.js";
|
|
104
104
|
import {
|
|
105
105
|
AdsPlug
|
|
106
|
-
} from "./chunk-
|
|
106
|
+
} from "./chunk-L6GEH3VZ.js";
|
|
107
107
|
import {
|
|
108
108
|
DisabledPlug
|
|
109
109
|
} from "./chunk-RV4ONNRN.js";
|
|
@@ -162,4 +162,4 @@ for (const Pin of [
|
|
|
162
162
|
GestureTouchPin
|
|
163
163
|
])
|
|
164
164
|
PinRegistry.register(Pin);
|
|
165
|
-
//# sourceMappingURL=chunk-
|
|
165
|
+
//# sourceMappingURL=chunk-C73M5LUY.js.map
|