tmg-media-player 0.0.35 → 0.0.37
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-Q7O4DCST.js → chunk-23BU2AJD.js} +4 -4
- package/dist/{chunk-2S65C2XE.js → chunk-2XHRU5X4.js} +2 -2
- package/dist/{chunk-3BLQPCWC.js → chunk-5M2GEASF.js} +15 -15
- package/dist/{chunk-3DIXFLZ4.js → chunk-AFRJBIJ4.js} +2 -2
- package/dist/{chunk-FCO6XMXF.js → chunk-ASEYDONH.js} +12 -12
- package/dist/{chunk-TW6EJOBM.js → chunk-BKE7OHV2.js} +3 -3
- package/dist/chunk-BKE7OHV2.js.map +1 -0
- package/dist/{chunk-3ITV4OCM.js → chunk-C3D4UUZT.js} +4 -4
- package/dist/{chunk-HKZHYXKF.js → chunk-D24YQBHG.js} +6 -6
- package/dist/chunk-D24YQBHG.js.map +1 -0
- package/dist/{chunk-CXXZ2VZZ.js → chunk-D73VTNQZ.js} +25 -25
- package/dist/{chunk-NMA7IMZX.js → chunk-DKDMJOZP.js} +4 -4
- package/dist/{chunk-ZUNDVUUZ.js → chunk-EW3IB5E4.js} +2 -2
- package/dist/{chunk-4CM4FZPI.js → chunk-HFQF73T5.js} +6 -6
- package/dist/chunk-HFQF73T5.js.map +1 -0
- package/dist/{chunk-IUPKURO2.js → chunk-IBBUIMN2.js} +4 -4
- package/dist/{chunk-I7MZGLSL.js → chunk-ITKEL5XR.js} +3 -3
- package/dist/chunk-ITKEL5XR.js.map +1 -0
- package/dist/{chunk-T6UOZ2AG.js → chunk-JIXSA7D5.js} +4 -3
- package/dist/chunk-JIXSA7D5.js.map +1 -0
- package/dist/{chunk-RNRCIAK3.js → chunk-LGANVFU2.js} +6 -6
- package/dist/{chunk-CEWJEP7C.js → chunk-N7CQCEXK.js} +5 -5
- package/dist/{chunk-U7OIC5IC.js → chunk-OD6YHMUS.js} +15 -15
- package/dist/{chunk-XGW7PNJE.js → chunk-OYPVRCFX.js} +2 -2
- package/dist/{chunk-KTSAXGHQ.js → chunk-P637Z652.js} +8 -8
- package/dist/{chunk-N4DPWLWI.js → chunk-POXVURCZ.js} +2 -2
- package/dist/{chunk-DLY44YIV.js → chunk-PWTBWGHJ.js} +3 -3
- package/dist/chunk-PWTBWGHJ.js.map +1 -0
- package/dist/{chunk-NVR2QNQB.js → chunk-QMJHBGYN.js} +11 -11
- package/dist/{chunk-CK4OHZ3L.js → chunk-QU3UL72W.js} +5 -5
- package/dist/{chunk-UXX75IOE.js → chunk-QYQD3264.js} +44 -44
- package/dist/{chunk-IPV7SSWB.js → chunk-RRWSRTHV.js} +4 -4
- package/dist/{chunk-LH3LZHFD.js → chunk-RSVR4GKO.js} +77 -77
- package/dist/{chunk-LJMZRSAF.js → chunk-SWPACD5Q.js} +64 -64
- package/dist/{chunk-FQQ7BUL4.js → chunk-SZPFWPXW.js} +37 -37
- package/dist/{chunk-UE4ZPXKM.js → chunk-TPISFEE3.js} +2 -2
- package/dist/{chunk-BKK32VPW.js → chunk-UXDRWJ7R.js} +4 -4
- package/dist/{chunk-NYV4OKID.js → chunk-VYXKFADG.js} +4 -4
- package/dist/{chunk-BT52HFOO.js → chunk-ZBYL3DRU.js} +2 -2
- package/dist/{chunk-GA5HGFYP.js → chunk-ZRILV7LP.js} +11 -9
- package/dist/chunk-ZRILV7LP.js.map +1 -0
- package/dist/components/captionsView.cjs +3 -2
- package/dist/components/captionsView.cjs.map +1 -1
- package/dist/components/captionsView.js +1 -1
- package/dist/components/controls/captions.js +2 -2
- package/dist/components/controls/fullscreenOrientation.cjs.map +1 -1
- package/dist/components/controls/fullscreenOrientation.js +3 -3
- package/dist/components/controls/timeline/index.cjs +1 -1
- package/dist/components/controls/timeline/index.cjs.map +1 -1
- package/dist/components/controls/timeline/index.js +4 -4
- package/dist/components/holders/pipPlaceholder.js +4 -4
- package/dist/components/icons/z-register.js +17 -17
- package/dist/components/z-register.cjs +4 -3
- package/dist/components/z-register.cjs.map +1 -1
- package/dist/components/z-register.js +18 -18
- package/dist/core/controller.cjs +1 -1
- package/dist/core/controller.cjs.map +1 -1
- package/dist/core/controller.js +3 -3
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/dist/init.cjs +1 -1
- package/dist/init.cjs.map +1 -1
- package/dist/init.js +4 -4
- package/dist/plugs/main/ads/index.js +2 -2
- package/dist/plugs/main/playlist/index.js +3 -3
- 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/captions.js +2 -2
- package/dist/plugs/menus/settings/controlPanel.js +2 -2
- package/dist/plugs/menus/settings/frame.cjs.map +1 -1
- package/dist/plugs/menus/settings/frame.js +3 -3
- package/dist/plugs/menus/settings/metadata.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 +4 -4
- 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 +11 -11
- package/dist/plugs/settings/auto/index.cjs.map +1 -1
- package/dist/plugs/settings/auto/index.js +3 -3
- package/dist/plugs/settings/captions/index.cjs +9 -7
- package/dist/plugs/settings/captions/index.cjs.map +1 -1
- package/dist/plugs/settings/captions/index.js +4 -4
- package/dist/plugs/settings/frame/index.js +2 -2
- package/dist/plugs/settings/gesture/base.js +2 -2
- package/dist/plugs/settings/gesture/index.js +3 -3
- package/dist/plugs/settings/gesture/touch.js +3 -3
- package/dist/plugs/settings/gesture/wheel.js +3 -3
- 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/sleepTimer/index.js +3 -3
- 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/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 +9 -7
- package/dist/plugs/z-register.cjs.map +1 -1
- package/dist/plugs/z-register.js +40 -40
- package/dist/super/components/icons.js +37 -37
- package/dist/super/components/index.cjs +4 -3
- package/dist/super/components/index.cjs.map +1 -1
- package/dist/super/components/index.js +76 -76
- package/dist/super/consts.js +9 -9
- package/dist/super/plugs/index.cjs +9 -7
- package/dist/super/plugs/index.cjs.map +1 -1
- package/dist/super/plugs/index.js +93 -93
- package/dist/super/plugs/menus.cjs.map +1 -1
- package/dist/super/plugs/menus.js +18 -18
- package/dist/super/techs.cjs +6 -6
- package/dist/super/techs.cjs.map +1 -1
- package/dist/super/techs.js +15 -15
- package/dist/super/utils.js +15 -15
- package/dist/super.cjs +17 -14
- package/dist/super.cjs.map +1 -1
- package/dist/super.global.js +17 -14
- package/dist/super.global.js.map +1 -1
- package/dist/super.js +138 -138
- package/dist/techs/dash.cjs +2 -2
- package/dist/techs/dash.cjs.map +1 -1
- package/dist/techs/dash.js +4 -4
- package/dist/techs/hls.cjs +2 -2
- package/dist/techs/hls.cjs.map +1 -1
- package/dist/techs/hls.js +4 -4
- package/dist/techs/html5.cjs +1 -1
- package/dist/techs/html5.cjs.map +1 -1
- package/dist/techs/html5.js +3 -3
- package/dist/techs/ima.js +2 -2
- package/dist/techs/shaka.cjs +2 -2
- package/dist/techs/shaka.cjs.map +1 -1
- package/dist/techs/shaka.js +4 -4
- package/dist/techs/vimeo.js +2 -2
- package/dist/techs/youtube.cjs +2 -2
- package/dist/techs/youtube.cjs.map +1 -1
- package/dist/techs/youtube.js +4 -4
- package/dist/techs/z-register.cjs +6 -6
- package/dist/techs/z-register.cjs.map +1 -1
- package/dist/techs/z-register.js +9 -9
- package/dist/tools/player.cjs +1 -1
- package/dist/tools/player.cjs.map +1 -1
- package/dist/tools/player.js +3 -3
- package/dist/tools/runtime/index.cjs +1 -1
- 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-4CM4FZPI.js.map +0 -1
- package/dist/chunk-DLY44YIV.js.map +0 -1
- package/dist/chunk-GA5HGFYP.js.map +0 -1
- package/dist/chunk-HKZHYXKF.js.map +0 -1
- package/dist/chunk-I7MZGLSL.js.map +0 -1
- package/dist/chunk-T6UOZ2AG.js.map +0 -1
- package/dist/chunk-TW6EJOBM.js.map +0 -1
- /package/dist/{chunk-Q7O4DCST.js.map → chunk-23BU2AJD.js.map} +0 -0
- /package/dist/{chunk-2S65C2XE.js.map → chunk-2XHRU5X4.js.map} +0 -0
- /package/dist/{chunk-3BLQPCWC.js.map → chunk-5M2GEASF.js.map} +0 -0
- /package/dist/{chunk-3DIXFLZ4.js.map → chunk-AFRJBIJ4.js.map} +0 -0
- /package/dist/{chunk-FCO6XMXF.js.map → chunk-ASEYDONH.js.map} +0 -0
- /package/dist/{chunk-3ITV4OCM.js.map → chunk-C3D4UUZT.js.map} +0 -0
- /package/dist/{chunk-CXXZ2VZZ.js.map → chunk-D73VTNQZ.js.map} +0 -0
- /package/dist/{chunk-NMA7IMZX.js.map → chunk-DKDMJOZP.js.map} +0 -0
- /package/dist/{chunk-ZUNDVUUZ.js.map → chunk-EW3IB5E4.js.map} +0 -0
- /package/dist/{chunk-IUPKURO2.js.map → chunk-IBBUIMN2.js.map} +0 -0
- /package/dist/{chunk-RNRCIAK3.js.map → chunk-LGANVFU2.js.map} +0 -0
- /package/dist/{chunk-CEWJEP7C.js.map → chunk-N7CQCEXK.js.map} +0 -0
- /package/dist/{chunk-U7OIC5IC.js.map → chunk-OD6YHMUS.js.map} +0 -0
- /package/dist/{chunk-XGW7PNJE.js.map → chunk-OYPVRCFX.js.map} +0 -0
- /package/dist/{chunk-KTSAXGHQ.js.map → chunk-P637Z652.js.map} +0 -0
- /package/dist/{chunk-N4DPWLWI.js.map → chunk-POXVURCZ.js.map} +0 -0
- /package/dist/{chunk-NVR2QNQB.js.map → chunk-QMJHBGYN.js.map} +0 -0
- /package/dist/{chunk-CK4OHZ3L.js.map → chunk-QU3UL72W.js.map} +0 -0
- /package/dist/{chunk-UXX75IOE.js.map → chunk-QYQD3264.js.map} +0 -0
- /package/dist/{chunk-IPV7SSWB.js.map → chunk-RRWSRTHV.js.map} +0 -0
- /package/dist/{chunk-LH3LZHFD.js.map → chunk-RSVR4GKO.js.map} +0 -0
- /package/dist/{chunk-LJMZRSAF.js.map → chunk-SWPACD5Q.js.map} +0 -0
- /package/dist/{chunk-FQQ7BUL4.js.map → chunk-SZPFWPXW.js.map} +0 -0
- /package/dist/{chunk-UE4ZPXKM.js.map → chunk-TPISFEE3.js.map} +0 -0
- /package/dist/{chunk-BKK32VPW.js.map → chunk-UXDRWJ7R.js.map} +0 -0
- /package/dist/{chunk-NYV4OKID.js.map → chunk-VYXKFADG.js.map} +0 -0
- /package/dist/{chunk-BT52HFOO.js.map → chunk-ZBYL3DRU.js.map} +0 -0
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
getTrackLabel
|
|
6
6
|
} from "./chunk-ATKNEOEG.js";
|
|
7
|
-
import {
|
|
8
|
-
formatUITime
|
|
9
|
-
} from "./chunk-C4AZD4KN.js";
|
|
10
7
|
import {
|
|
11
8
|
safeNum
|
|
12
9
|
} from "./chunk-P67KKEHQ.js";
|
|
10
|
+
import {
|
|
11
|
+
formatUITime
|
|
12
|
+
} from "./chunk-C4AZD4KN.js";
|
|
13
13
|
import {
|
|
14
14
|
getUIOpt,
|
|
15
15
|
getUniqueOpts,
|
|
@@ -179,4 +179,4 @@ var getSettingsCaptionsMenu = (plug) => {
|
|
|
179
179
|
export {
|
|
180
180
|
getSettingsCaptionsMenu
|
|
181
181
|
};
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
182
|
+
//# sourceMappingURL=chunk-23BU2AJD.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-M5UU3BRE.js";
|
|
7
7
|
import {
|
|
8
8
|
getCtlrIdx
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-HFQF73T5.js";
|
|
10
10
|
import {
|
|
11
11
|
isArr
|
|
12
12
|
} from "./chunk-VXOZUKN7.js";
|
|
@@ -63,4 +63,4 @@ __publicField(TimeTravelPlug, "BUILD", TIME_TRAVEL_BUILD);
|
|
|
63
63
|
export {
|
|
64
64
|
TimeTravelPlug
|
|
65
65
|
};
|
|
66
|
-
//# sourceMappingURL=chunk-
|
|
66
|
+
//# sourceMappingURL=chunk-2XHRU5X4.js.map
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
formatVttLine,
|
|
3
|
+
parseVttText,
|
|
4
|
+
srtToVtt,
|
|
5
|
+
stripTags
|
|
6
|
+
} from "./chunk-XLWSKWEW.js";
|
|
1
7
|
import {
|
|
2
8
|
clampRGBBri,
|
|
3
9
|
convertToMonoChrome,
|
|
@@ -95,6 +101,14 @@ import {
|
|
|
95
101
|
removeTracks,
|
|
96
102
|
setCurrentTrack
|
|
97
103
|
} from "./chunk-ATKNEOEG.js";
|
|
104
|
+
import {
|
|
105
|
+
clamp,
|
|
106
|
+
parseIfPercent,
|
|
107
|
+
parseRomanNum,
|
|
108
|
+
rotateAny,
|
|
109
|
+
safeNum,
|
|
110
|
+
stepNum
|
|
111
|
+
} from "./chunk-P67KKEHQ.js";
|
|
98
112
|
import {
|
|
99
113
|
createTimeRanges,
|
|
100
114
|
formatMediaTime,
|
|
@@ -104,20 +118,6 @@ import {
|
|
|
104
118
|
getMediaProgress,
|
|
105
119
|
getMediaTime
|
|
106
120
|
} from "./chunk-C4AZD4KN.js";
|
|
107
|
-
import {
|
|
108
|
-
formatVttLine,
|
|
109
|
-
parseVttText,
|
|
110
|
-
srtToVtt,
|
|
111
|
-
stripTags
|
|
112
|
-
} from "./chunk-XLWSKWEW.js";
|
|
113
|
-
import {
|
|
114
|
-
clamp,
|
|
115
|
-
parseIfPercent,
|
|
116
|
-
parseRomanNum,
|
|
117
|
-
rotateAny,
|
|
118
|
-
safeNum,
|
|
119
|
-
stepNum
|
|
120
|
-
} from "./chunk-P67KKEHQ.js";
|
|
121
121
|
import {
|
|
122
122
|
cleanKeyCombo,
|
|
123
123
|
formatAction,
|
|
@@ -432,4 +432,4 @@ __export(utils_exports, {
|
|
|
432
432
|
export {
|
|
433
433
|
utils_exports
|
|
434
434
|
};
|
|
435
|
-
//# sourceMappingURL=chunk-
|
|
435
|
+
//# sourceMappingURL=chunk-5M2GEASF.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
GestureBasePin
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VYXKFADG.js";
|
|
4
4
|
import {
|
|
5
5
|
GESTURE_BUILD,
|
|
6
6
|
GESTURE_TOUCH_BUILD,
|
|
@@ -295,4 +295,4 @@ export {
|
|
|
295
295
|
GestureWheelPin,
|
|
296
296
|
GesturePlug
|
|
297
297
|
};
|
|
298
|
-
//# sourceMappingURL=chunk-
|
|
298
|
+
//# sourceMappingURL=chunk-AFRJBIJ4.js.map
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ShakaTech
|
|
3
|
+
} from "./chunk-ITKEL5XR.js";
|
|
4
|
+
import {
|
|
5
|
+
VIMEO_EVENTS,
|
|
6
|
+
VimeoTech
|
|
7
|
+
} from "./chunk-DKDMJOZP.js";
|
|
1
8
|
import {
|
|
2
9
|
YouTubeTech
|
|
3
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-D24YQBHG.js";
|
|
4
11
|
import {
|
|
5
12
|
DashTech
|
|
6
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-BKE7OHV2.js";
|
|
7
14
|
import {
|
|
8
15
|
HLSTech
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import {
|
|
11
|
-
ShakaTech
|
|
12
|
-
} from "./chunk-I7MZGLSL.js";
|
|
13
|
-
import {
|
|
14
|
-
VIMEO_EVENTS,
|
|
15
|
-
VimeoTech
|
|
16
|
-
} from "./chunk-NMA7IMZX.js";
|
|
16
|
+
} from "./chunk-PWTBWGHJ.js";
|
|
17
17
|
import {
|
|
18
18
|
IMATech
|
|
19
19
|
} from "./chunk-5OXQBGAJ.js";
|
|
20
20
|
import {
|
|
21
21
|
HTML5Tech
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-HFQF73T5.js";
|
|
23
23
|
import {
|
|
24
24
|
BaseTech,
|
|
25
25
|
cacheKeys
|
|
@@ -46,4 +46,4 @@ __export(techs_exports, {
|
|
|
46
46
|
export {
|
|
47
47
|
techs_exports
|
|
48
48
|
};
|
|
49
|
-
//# sourceMappingURL=chunk-
|
|
49
|
+
//# sourceMappingURL=chunk-ASEYDONH.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
HTML5Tech
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HFQF73T5.js";
|
|
4
4
|
import {
|
|
5
5
|
MSE_ENABLED
|
|
6
6
|
} from "./chunk-RNETXJ63.js";
|
|
@@ -90,7 +90,7 @@ var DashTech = class extends HTML5Tech {
|
|
|
90
90
|
this.host.on(DASHJS.MediaPlayer.events.PERIOD_SWITCH_COMPLETED, () => {
|
|
91
91
|
for (const t of ["text", "audio", "video"]) this.config.status[`${t}Tracks`] = inert(this.host.getTracksFor(t));
|
|
92
92
|
this.config.status.levels = inert(this.host.getBitrateInfoListFor("video"));
|
|
93
|
-
for (const T of ["TextTrack", "AudioTrack", "VideoTrack", "Level"]) silence(() => this.config.intent[`current${T}`] = this.config.intent[`current${T}`]), this.config.tick(`intent.current${T}`);
|
|
93
|
+
for (const T of ["TextTrack", "AudioTrack", "VideoTrack", "Level"]) silence(() => this.config.intent[`current${T}`] = this.config.intent[`current${T}`]), this.config.tick(`intent.current${T}`), T === "TextTrack" && silence(() => this.config.intent.textVisible = this.config.intent.textVisible);
|
|
94
94
|
});
|
|
95
95
|
this.host.on(DASHJS.MediaPlayer.events.ERROR, (ev) => {
|
|
96
96
|
if (ev.error === "download") return this.ctlr.notice(`DASH Download error occurred: ${ev.event}`, "error", `Download failed for "${ev.event?.url}"`, true);
|
|
@@ -163,4 +163,4 @@ __publicField(DashTech, "techName", "dash");
|
|
|
163
163
|
export {
|
|
164
164
|
DashTech
|
|
165
165
|
};
|
|
166
|
-
//# sourceMappingURL=chunk-
|
|
166
|
+
//# sourceMappingURL=chunk-BKE7OHV2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ts/techs/dash.ts"],"sourcesContent":["import { HTML5Tech } from \"./html5\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia, MediaFeatures } from \"@defs/contract\";\r\nimport { inert, type REvent } from \"sia-reactor\";\r\nimport { DASH_EXTENSIONS } from \"@utils/match\";\r\nimport { MSE_ENABLED } from \"@utils/env\";\r\nimport { capitalize, isSameURL } from \"@utils/str\";\r\nimport { isBool, isNum } from \"@utils/obj\";\r\nimport { loadResource } from \"@utils/dom\";\r\nimport type { TrackType } from \"@utils/media\";\r\nimport type * as dashjs from \"dashjs\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\ninterface DashMediaPlayer extends dashjs.MediaPlayerClass {\r\n getBitrateInfoListFor(type: \"video\" | \"audio\"): any[];\r\n setQualityFor(type: \"video\" | \"audio\", value: number): void;\r\n} // dashjs is notorious for stale types; not us\r\n\r\nexport class DashTech extends HTML5Tech {\r\n public static readonly techName: string = \"dash\";\r\n public static override canPlaySource(src: string): boolean {\r\n return MSE_ENABLED && DASH_EXTENSIONS.test(src);\r\n }\r\n public host: DashMediaPlayer | null = null;\r\n public hostSrc: string | null = null;\r\n protected readonly isAlien: boolean = true;\r\n constructor(ctlr: Controller, features?: MediaFeatures) {\r\n const isVid = ctlr.media.type === \"video\";\r\n // prettier-ignore\r\n super(ctlr, {\r\n // States & Lists\r\n sources: false, tracks: false, textTracks: true, audioTracks: true, videoTracks: isVid, levels: true, \r\n // States & Currents (DASH.js specific)\r\n currentAudioTrack: true, currentVideoTrack: isVid, currentLevel: true, autoLevel: true, \r\n // Status & Settings\r\n bandwidth: true, protection: true, ...features\r\n });\r\n ctlr.media.status.hostReady = false;\r\n }\r\n // --- API Injection ---\r\n protected async initHost(src = \"\"): Promise<void> {\r\n try {\r\n // Setup & Compatibility\r\n this.destroyDash();\r\n const DASHJS = ((window as any).dashjs ?? (await loadResource(window.TMG_DASH_JS_SRC!, \"script\"), (window as any).dashjs)) as typeof dashjs;\r\n if (!this.signal || this.signal?.aborted) return; // src may have changed during the `await`\r\n if (!DASHJS?.supportsMediaSource()) return this.ctlr.notice(\"DASH is not supported in this browser\", \"error\", null);\r\n const truth = this.config[this.ctlr.gospel];\r\n this.hostSrc = src;\r\n this.host = DASHJS.MediaPlayer().create() as DashMediaPlayer;\r\n if (this.config.type === \"audio\") this.host.updateSettings({ streaming: { abr: { autoSwitchBitrate: { video: false } }, trackSwitchMode: { audio: \"alwaysReplace\", video: \"alwaysReplace\" }, buffer: { fastSwitchEnabled: true } } }); // DASH.js to replace the audio to avoid buffer finish delays\r\n // Status & State (Bulk Wiring)\r\n this.host.on(DASHJS.MediaPlayer.events.STREAM_INITIALIZED, () => {\r\n this.config.status.isLive = this.host!.isDynamic();\r\n const autoSwitch = (this.host!.getSettings() as any).streaming?.abr?.autoSwitchBitrate;\r\n this.config.state.autoLevel = isBool(autoSwitch) ? autoSwitch : autoSwitch?.video ?? true; // Fallback logic for v3 vs v4+ API shapes\r\n for (const t of [\"text\", \"audio\", \"video\"] as const) this.config.status[`${t}Tracks`] = inert(this.host!.getTracksFor(t));\r\n this.config.status.levels = inert(this.host!.getBitrateInfoListFor(\"video\"));\r\n this.config.status.hostReady = true;\r\n });\r\n this.host.on(DASHJS.MediaPlayer.events.TRACK_CHANGE_RENDERED, (ev: any) => {\r\n const i = this.host?.getTracksFor(ev.mediaType)?.findIndex((t) => t.id === ev.newMediaInfo?.id || t.index === ev.newMediaInfo?.index);\r\n this.config.state[`current${capitalize(ev.mediaType) as TrackType}Track`] = i ?? -1;\r\n });\r\n this.host.on(DASHJS.MediaPlayer.events.QUALITY_CHANGE_RENDERED, (ev: any) => ev.mediaType === \"video\" && (this.config.state.currentLevel = ev.newQuality ?? ev.index)); // v4+ uses newQuality, v3 uses index\r\n this.host.on(DASHJS.MediaPlayer.events.FRAGMENT_LOADING_COMPLETED, (ev) => this.ctlr.throttle(\"dashBandWidthing\", () => ev.request?.mediaType === \"video\" && (this.config.status.bandwidth = Math.round(this.host!.getAverageThroughput(\"video\") * 1000)), 2000)); // kbps to bps\r\n this.host.on(DASHJS.MediaPlayer.events.EVENT_MODE_ON_RECEIVE, (ev: any) => {\r\n if (!this.config.settings.metadata.allowMediaOverride) return;\r\n if (!ev.schemeIdUri?.includes(\"chapter\") && !ev.schemeIdUri?.includes(\"title\")) return;\r\n const chapters = this.config.settings.metadata.chapterInfo;\r\n if (chapters.find((c) => c.startTime === ev.presentationTime)) return;\r\n chapters.push({ title: new TextDecoder(\"utf-8\").decode(ev.messageData).replace(/\\0/g, \"\").trim(), startTime: ev.presentationTime });\r\n this.config.settings.metadata.chapterInfo = chapters.sort((a, b) => a.startTime - b.startTime);\r\n });\r\n this.host.on(DASHJS.MediaPlayer.events.PERIOD_SWITCH_COMPLETED, () => {\r\n for (const t of [\"text\", \"audio\", \"video\"] as const) this.config.status[`${t}Tracks`] = inert(this.host!.getTracksFor(t));\r\n this.config.status.levels = inert(this.host!.getBitrateInfoListFor(\"video\"));\r\n for (const T of [\"TextTrack\", \"AudioTrack\", \"VideoTrack\", \"Level\"] as const) silence(() => (this.config.intent[`current${T}`] = this.config.intent[`current${T}`])), this.config.tick(`intent.current${T}`), T === \"TextTrack\" && silence(() => (this.config.intent.textVisible = this.config.intent.textVisible)); // #RE-TRIGGER: sync intent resolution\r\n }); // Dynamic Track List Updates (Mid-stream changes, e.g. multi-period live streams)\r\n this.host.on(DASHJS.MediaPlayer.events.ERROR, (ev) => {\r\n if (ev.error === \"download\") return this.ctlr.notice(`DASH Download error occurred: ${ev.event}`, \"error\", `Download failed for \"${ev.event?.url}\"`, true);\r\n ev.error === \"mediasource\" && this.handleHostError(ev);\r\n });\r\n this.config.settings.protection && this.host.setProtectionData(this.config.settings.protection);\r\n this.host.initialize(this.el, src, truth.autoplay || !truth.paused, truth.currentTime);\r\n } catch (err) {\r\n this.handleHostError(err);\r\n }\r\n }\r\n // ===========================================================================\r\n // WIRING OVERRIDES\r\n // ===========================================================================\r\n protected override wireMediaTracks(): void {}\r\n protected override wireCurrentTrack(type: TrackType, _type = type.toLowerCase() as Lowercase<TrackType>): void {\r\n this.config.set(`intent.current${type}Track`, (term) => (isNum(term) ? term : (this.config.status[`${_type}Tracks`] as dashjs.MediaInfo[]).findIndex((t) => t.id === term || t.lang === term)), { signal: this.signal }); // #VALIDATOR: intent type conformation\r\n this.config.on(`intent.current${type}Track`, (e) => this.handleCurrentHostTrackIntent(e, _type), this.evtOpts.CONFIG);\r\n }\r\n protected wireCurrentLevel(): void {\r\n this.config.set(\"intent.currentLevel\", (term) => (isNum(term) ? term : Number(term)), { signal: this.signal }); // #VALIDATOR: intent type conformation\r\n this.config.on(\"intent.currentLevel\", this.handleCurrentLevelIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireAutoLevel(): void {\r\n this.config.on(\"intent.autoLevel\", this.handleAutoLevelIntent, this.evtOpts.CONFIG);\r\n }\r\n // ===========================================================================\r\n // HANDLERS\r\n // ===========================================================================\r\n protected override handleSrcIntent(e: REvent<CtlrMedia, \"intent.src\">): void {\r\n if (e.resolved) return;\r\n !isSameURL(this.hostSrc, e.value) && this.initHost(e.value);\r\n e.resolve(this.name);\r\n }\r\n protected handleCurrentLevelIntent(e: REvent<CtlrMedia, \"intent.currentLevel\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"hostReady\", e, () => (e.value as number) > -1 && (e.value as number) < this.config.status.levels.length && (this.useAutoLevel(), this.host!.setQualityFor(\"video\", e.value as number))); // #BULLET-PROOF: must comes clutch // #VALIDATED: mediated for cast conformity; no-opy\r\n e.resolve(this.name);\r\n }\r\n protected handleAutoLevelIntent(e: REvent<CtlrMedia, \"intent.autoLevel\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"hostReady\", e, () => this.useAutoLevel(e.value));\r\n e.resolve(this.name);\r\n }\r\n protected useAutoLevel(value = false): void {\r\n this.host!.updateSettings({ streaming: { abr: { autoSwitchBitrate: { video: value } } } });\r\n this.config.state.autoLevel = value;\r\n }\r\n protected handleCurrentHostTrackIntent(e: REvent<CtlrMedia, `intent.current${TrackType}Track`>, type: Lowercase<TrackType>): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"hostReady\", e, (track = this.config.status[`${type}Tracks`][e.value as number] as dashjs.MediaInfo | undefined) => track && this.host!.setCurrentTrack(track)); // #VALIDATED: mediated for cast conformity; no-opy\r\n e.resolve(this.name);\r\n }\r\n protected handleHostError(err: any): void {\r\n if (!this.signal || this.signal?.aborted) return;\r\n this.config.status.error = { ...err, code: err?.code ?? 5, message: err.error ?? err.message ?? \"Fatal DASH error\" }; // 5: MEDIA_ERR_UNKNOWN to allow mssg fallback\r\n this.config.status.waiting = false;\r\n }\r\n // --- Lifecycle ---\r\n protected destroyDash(): void {\r\n this.host?.reset(), (this.host = null), (this.config.status.hostReady = false);\r\n }\r\n protected override onDestroy(): void {\r\n this.destroyDash(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface TechRegistryMap {\r\n dash: typeof DashTech;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
BasePlug
|
|
6
6
|
} from "./chunk-M5UU3BRE.js";
|
|
7
|
-
import {
|
|
8
|
-
formatUITime
|
|
9
|
-
} from "./chunk-C4AZD4KN.js";
|
|
10
7
|
import {
|
|
11
8
|
IconRegistry
|
|
12
9
|
} from "./chunk-ATGOEAKN.js";
|
|
10
|
+
import {
|
|
11
|
+
formatUITime
|
|
12
|
+
} from "./chunk-C4AZD4KN.js";
|
|
13
13
|
import {
|
|
14
14
|
__publicField
|
|
15
15
|
} from "./chunk-UVKRO5ER.js";
|
|
@@ -50,4 +50,4 @@ __publicField(SleepTimerPlug, "BUILD", SLEEP_TIMER_BUILD);
|
|
|
50
50
|
export {
|
|
51
51
|
SleepTimerPlug
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=chunk-
|
|
53
|
+
//# sourceMappingURL=chunk-C3D4UUZT.js.map
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
BaseTech
|
|
10
10
|
} from "./chunk-LTQZXT7J.js";
|
|
11
|
+
import {
|
|
12
|
+
clamp
|
|
13
|
+
} from "./chunk-P67KKEHQ.js";
|
|
11
14
|
import {
|
|
12
15
|
createTimeRanges,
|
|
13
16
|
getMediaMax,
|
|
14
17
|
getMediaMin
|
|
15
18
|
} from "./chunk-C4AZD4KN.js";
|
|
16
|
-
import {
|
|
17
|
-
clamp
|
|
18
|
-
} from "./chunk-P67KKEHQ.js";
|
|
19
19
|
import {
|
|
20
20
|
createEl,
|
|
21
21
|
enterFullscreen,
|
|
@@ -130,7 +130,7 @@ var YouTubeTech = class extends BaseTech {
|
|
|
130
130
|
onPlaybackRateChange: (e) => void (this.config.state.playbackRate = e.data),
|
|
131
131
|
onApiChange: (_, tracks = this.host.getOption("captions", "tracklist")) => {
|
|
132
132
|
if (tracks) this.config.status.textTracks = inert(tracks);
|
|
133
|
-
if (tracks) silence(() => this.config.intent.currentTextTrack = this.config.intent.currentTextTrack), this.config.tick("intent.currentTextTrack");
|
|
133
|
+
if (tracks) silence(() => this.config.intent.currentTextTrack = this.config.intent.currentTextTrack), this.config.tick("intent.currentTextTrack"), silence(() => this.config.intent.textVisible = this.config.intent.textVisible);
|
|
134
134
|
this.host.setOption("captions", "fontSize", this.settings.captions.font.size.value / 100);
|
|
135
135
|
},
|
|
136
136
|
// Fired when modules like Captions load
|
|
@@ -277,7 +277,7 @@ var YouTubeTech = class extends BaseTech {
|
|
|
277
277
|
e.value === -1 ? this.host.unloadModule("captions") : this.host.loadModule("captions");
|
|
278
278
|
const track = this.config.status.textTracks[e.value];
|
|
279
279
|
if (track) this.host.setOption("captions", "track", { languageCode: track.srclang }), this.config.state.currentTextTrack = e.value;
|
|
280
|
-
|
|
280
|
+
this.el.toggleAttribute("data-hide-ui", !this.config.state.controls && (this.media.state.textVisible = e.value === -1 ? false : this.media.intent.textVisible));
|
|
281
281
|
});
|
|
282
282
|
e.resolve(this.name);
|
|
283
283
|
}
|
|
@@ -391,4 +391,4 @@ __publicField(YouTubeTech, "techName", "youtube");
|
|
|
391
391
|
export {
|
|
392
392
|
YouTubeTech
|
|
393
393
|
};
|
|
394
|
-
//# sourceMappingURL=chunk-
|
|
394
|
+
//# sourceMappingURL=chunk-D24YQBHG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ts/techs/youtube.ts"],"sourcesContent":["import { BaseTech } from \"./base\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia, MediaFeatures } from \"@defs/contract\";\r\nimport { inert, type REvent } from \"sia-reactor\";\r\nimport { createEl, enterFullscreen, exitFullscreen, loadResource, queryFullscreenEl, supportsFullscreen } from \"@utils/dom\";\r\nimport { createTimeRanges } from \"@utils/time\";\r\nimport { MATCH_ID_YOUTUBE, MATCH_URL_YOUTUBE } from \"@utils/match\";\r\nimport { isSameURL } from \"@utils/str\";\r\nimport { isFunc, isNum } from \"@utils/obj\";\r\nimport { setTimeout, setInterval } from \"@utils/fn\";\r\nimport { clamp } from \"@utils/num\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { getMediaMax, getMediaMin } from \"@utils/time\";\r\nimport { globalState } from \"@tools/runtime\";\r\nimport { fanout } from \"sia-reactor/utils\";\r\n\r\nexport class YouTubeTech extends BaseTech<HTMLIFrameElement> {\r\n public static readonly techName: string = \"youtube\";\r\n public static override canPlaySource(src: string): boolean {\r\n return MATCH_URL_YOUTUBE.test(src);\r\n }\r\n public host: YT.Player | null = null;\r\n public hostSrc: string | null = null;\r\n public hostDiv: HTMLDivElement;\r\n public hostHTML = `<iframe class=\"tmg-foreign-host tmg-youtube-host\" credentialless=\"true\" referrerpolicy=\"strict-origin-when-cross-origin\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; fullscreen; web-share;\"></iframe>`;\r\n public intervalId = -1;\r\n constructor(ctlr: Controller, features?: MediaFeatures) {\r\n // prettier-ignore\r\n super(ctlr, {\r\n // Engine Inputs\r\n volume: true, muted: true, playbackRate: true,\r\n // Modes\r\n fullscreen: supportsFullscreen(),\r\n // States\r\n autoplay: true, loop: true, playsInline: true, controls: true, crossOrigin: true,\r\n // Lists\r\n textTracks: true, levels: true, \r\n // Currents\r\n currentChapter: true, currentTextTrack: true, currentLevel: true, textVisible: true, autoLevel: true,\r\n // Infos\r\n readyState: true, error: true, waiting: true, seeking: true, buffered: true, seekable: true,\r\n loadedMetadata: true, loadedData: true, canPlay: true, \r\n // Settings\r\n liveTolerance: true, minDVRWindow: true, idleWaiting: true, timeShiftPoll: true, ...features\r\n });\r\n ctlr.config.courtesy = \"YouTube\"; // Don't say, I never did nothing for you\r\n this.element = this.hostDiv = createEl(\"div\", { className: `tmg-host-div ${this.el.className}`, innerHTML: `<div class=\"tmg-host-content\">${this.hostHTML}</div>` }) as HTMLIFrameElement; // for tech.element replaceWith\r\n ctlr.media.status.hostReady = false;\r\n }\r\n // --- API Injection ---\r\n protected async initHost(url: string, id = \"\", retries = 0): Promise<void> {\r\n try {\r\n const truth = this.config[this.ctlr.gospel];\r\n if (!isFunc(this.host?.loadVideoById)) this.destroyHost();\r\n else return (this.hostSrc = url), (this.reInitInfo = this.config.status.hostReady = true), this.host.loadVideoById(id, truth.currentTime, this.config.status.levels[truth.currentLevel as number] || \"default\");\r\n // Setup & Bulk Wiring\r\n if (!window.YT) await loadResource(window.TMG_YT_API_SRC!, \"script\"), await new Promise<void>((res, _, _prev = (window as any).onYouTubeIframeAPIReady) => (window.YT?.Player ? res() : ((window as any).onYouTubeIframeAPIReady = () => (_prev?.(), res()))));\r\n if (!this.signal || this.signal?.aborted) return;\r\n this.hostSrc = url;\r\n this.element = this.hostDiv.querySelector(\"iframe\")!;\r\n this.el.src = `https://www.youtube${truth.crossOrigin === \"use-credentials\" ? \"\" : \"-nocookie\"}.com/embed/${id}?${new URLSearchParams({ autoplay: +(truth.autoplay || !truth.paused), controls: +truth.controls, playsinline: +truth.playsInline, loop: +truth.loop, start: truth.currentTime, rel: +truth.controls, modestbranding: +truth.controls, fs: +truth.controls, iv_load_policy: truth.controls ? 1 : 3, cc_load_policy: \"1\", disablekb: \"1\", enablejsapi: \"1\", origin: window.location.origin } as any).toString()}`;\r\n this.el.toggleAttribute(\"data-hide-ui\", !truth.controls);\r\n (this.el as any).tmgPlayer = this.config.element.tmgPlayer; // ref is maintained\r\n this.host = new window.YT.Player(this.el, {\r\n events: {\r\n onReady: () => {\r\n if (!isFunc(this.host?.getPlayerState) && retries < this.hostAttempts) return this.ctlr.log(`Retrying host load for \"${url}\" (${++retries}/${this.hostAttempts})`, \"warn\"), this.initHost(url, id, retries); // #PAMPERING: observed quirk where YT API is broken\r\n this.config.status.hostReady = true;\r\n this.setInitInfo();\r\n },\r\n onStateChange: this.handleHostStateChange,\r\n onPlaybackQualityChange: (e: { data: string }): void => {\r\n this.config.status.levels = inert(this.host!.getAvailableQualityLevels().filter((q: string) => q !== \"auto\"));\r\n this.config.state.currentLevel = (this.config.status.levels as YT.SuggestedVideoQuality[]).findIndex((q) => q === e.data);\r\n this.config.state.autoLevel = this.ABRFlag || e.data === \"auto\";\r\n },\r\n onPlaybackRateChange: (e: { data: number }): void => void (this.config.state.playbackRate = e.data),\r\n onApiChange: (_, tracks = (this.host as any).getOption(\"captions\", \"tracklist\")) => {\r\n if (tracks) this.config.status.textTracks = inert(tracks); // .map((t: any) => ({ id: `yt-cc-${t.languageCode}`, kind: t.vssId?.startsWith(\"a.\") ? \"subtitles\" : \"captions\", label: t.displayName || t.languageName, srclang: t.languageCode, ...t }))\r\n if (tracks) silence(() => (this.config.intent.currentTextTrack = this.config.intent.currentTextTrack)), this.config.tick(\"intent.currentTextTrack\"), silence(() => (this.config.intent.textVisible = this.config.intent.textVisible)); // #RE-TRIGGER: sync intent resolution\r\n (this.host as any).setOption(\"captions\", \"fontSize\", this.settings.captions.font.size.value / 100);\r\n }, // Fired when modules like Captions load\r\n onError: this.handleHostError,\r\n },\r\n });\r\n } catch (err: any) {\r\n this.handleHostError(err);\r\n }\r\n }\r\n public hostAttempts = 3;\r\n // ===========================================================================\r\n // WIRING (Connections Only)\r\n // ===========================================================================\r\n // --- Core Wiring ---\r\n protected override wireSrc(): void {\r\n this.config.on(\"intent.src\", this.handleSrcIntent, this.evtOpts.CONFIG);\r\n }\r\n protected override wireCurrentTime(): void {\r\n this.config.get(\"state.currentTime\", (v) => (this.config.status.readyState < 1 || this.config.status.ended ? v : this.host?.getCurrentTime?.()), { signal: this.signal }); // #VIRTUAL: reliable return value, if faster than poll\r\n this.config.on(\"intent.currentTime\", this.handleCurrentTimeIntent, this.evtOpts.CONFIG);\r\n }\r\n protected override wireDuration(): void {} // Polled dynamically in sync loop; YT emits no explicit duration event\r\n protected override wirePaused(): void {\r\n this.config.on(\"intent.paused\", this.handlePausedIntent, this.evtOpts.CONFIG);\r\n }\r\n protected override wireEnded(): void {} // Handled strictly within handleHostStateChange\r\n protected override wireFeatures(): void {\r\n super.wireFeatures();\r\n // Ctlr Config Listners\r\n this.ctlr.config.on(\"settings.captions.font.size.value\", ({ value }) => (this.host as any)?.setOption(\"captions\", \"fontSize\", value / 100), { signal: this.signal });\r\n }\r\n // --- Engine Inputs Wiring ---\r\n protected wireVolume(): void {\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);\r\n }\r\n protected wirePlaybackRate(): void {\r\n this.config.on(\"intent.playbackRate\", this.handlePlaybackRateIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- Presentation Modes Wiring ---\r\n protected wireFullscreen(): void {\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 // --- Attributes Wiring ---\r\n protected wireLoop(): void {\r\n this.config.on(\"intent.loop\", this.handleLoopIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- Track Switching Wiring ---\r\n protected wireCurrentTextTrack(): void {\r\n this.config.set(\"intent.currentTextTrack\", (term) => (isNum(term) ? term : (this.config.status.textTracks as any[]).findIndex((t) => t.vssId === term || t.displayName === term || t.languageCode === term)), { signal: this.signal }); // #VALIDATOR: intent type conformation\r\n this.config.on(\"intent.currentTextTrack\", this.handleCurrentTextTrackIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireCurrentLevel(): void {\r\n this.config.set(\"intent.currentLevel\", (term) => (isNum(term) ? term : Number(term)), { signal: this.signal }); // #VALIDATOR: intent type conformation\r\n this.config.on(\"intent.currentLevel\", this.handleCurrentLevelIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireTextVisible(): void {\r\n this.config.on(\"intent.textVisible\", this.handleTextVisibleIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireAutoLevel(): void {\r\n this.config.on(\"intent.autoLevel\", this.handleAutoLevelIntent, this.evtOpts.CONFIG);\r\n }\r\n // ===========================================================================\r\n // HANDLERS (The Logic - Auto-Guarded)\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)) return void e.resolve(this.name);\r\n const id = e.value.match(MATCH_ID_YOUTUBE)?.[1];\r\n this.setAutoResPoster(id);\r\n this.flush(), this.initHost(e.value, id);\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(\"loadedMetadata\", e, (min = getMediaMin(this.config), max = getMediaMax(this.config), val = clamp(min, e.value, max), finite = Number.isFinite(val), prev = this.config.state.currentTime) => {\r\n this.config.status.seeking = true;\r\n if (e.value < min || e.value > max || !finite) e.reject(this.name); // Out of bounds\r\n if (!finite) return;\r\n this.host!.seekTo(val, true), this.config.state.paused && this.host!.pauseVideo(); // #PAMPERING: observed quirk\r\n const check = setInterval(() => (!this.config.state.paused || this.config.state.currentTime !== prev) && (clearInterval(check), this.syncCurrentStats(), (this.config.status.seeking = false)), this.config.settings.timeShiftPoll, this.signal); // YT has no \"seeked\" event, so we poll for the time shift\r\n });\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.host!.pauseVideo() : this.host!.playVideo(), this.config.status.ended && setTimeout(() => this.host!.playVideo(), 0, this.signal))); // #PAMPERING: observed quirk\r\n e.resolve(this.name);\r\n }\r\n // --- Feature States ---\r\n protected setFullscreenChangeState(docInFs?: boolean): void {\r\n this.config.state.fullscreen = docInFs ? queryFullscreenEl() === this.el : false;\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.ctlr.when(\"hostReady\", e, (val = clamp(0, e.value, 100)) => {\r\n this.host!.setVolume(val);\r\n this.config.state.volume = val;\r\n });\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.ctlr.when(\"hostReady\", e, () => {\r\n e.value ? this.host!.mute() : this.host!.unMute();\r\n this.config.state.muted = e.value;\r\n });\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 if (e.value < 0.25 || e.value > 2) e.reject(this.name); // Out of bounds\r\n this.ctlr.when(\"hostReady\", e, (val = clamp(0.25, e.value, 2)) => {\r\n this.host!.setPlaybackRate(val);\r\n this.config.state.playbackRate = val;\r\n });\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 handleLoopIntent(e: REvent<CtlrMedia, \"intent.loop\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"hostReady\", e, () => {\r\n this.host!.setLoop(e.value);\r\n this.config.state.loop = e.value;\r\n });\r\n e.resolve(this.name);\r\n }\r\n protected handleCurrentTextTrackIntent(e: REvent<CtlrMedia, \"intent.currentTextTrack\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedMetadata\", e, () => {\r\n e.value === -1 ? (this.host as any).unloadModule(\"captions\") : (this.host as any).loadModule(\"captions\");\r\n const track = this.config.status.textTracks[e.value as number]; // #VALIDATED: mediated for cast conformity; no-opy\r\n if (track) (this.host as any).setOption(\"captions\", \"track\", { languageCode: track.srclang }), (this.config.state.currentTextTrack = e.value as number);\r\n this.el.toggleAttribute(\"data-hide-ui\", !this.config.state.controls && (this.media.state.textVisible = e.value === -1 ? false : this.media.intent.textVisible)); // #UX boost: not a drifter\r\n });\r\n e.resolve(this.name);\r\n }\r\n protected handleCurrentLevelIntent(e: REvent<CtlrMedia, \"intent.currentLevel\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedMetadata\", e, (quality = (this.config.status.levels as YT.SuggestedVideoQuality[])[e.value as number]) => quality && (this.useAutoLevel(), this.host!.setPlaybackQuality(quality))); // #VALIDATED: mediated for cast conformity; no-opy // #BULLET-PROOF: must comes clutch\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 e.value && this.config.status.textTracks.length && idx === -1 && silence(() => (this.config.intent.currentTextTrack = iidx !== -1 ? iidx : 0)); // #BULLET-PROOF: should come clutch\r\n this.el.toggleAttribute(\"data-hide-ui\", !this.config.state.controls && !(e.value && (this.host as any).getOptions().includes(\"captions\")));\r\n this.config.state.textVisible = e.value;\r\n });\r\n e.resolve(this.name);\r\n }\r\n protected handleAutoLevelIntent(e: REvent<CtlrMedia, \"intent.autoLevel\">): void {\r\n if (e.resolved) return;\r\n this.ctlr.when(\"loadedMetadata\", e, () => this.useAutoLevel(e.value));\r\n e.resolve(this.name);\r\n }\r\n protected useAutoLevel(value = false): void {\r\n this.host!.setPlaybackQuality((this.ABRFlag = value) ? \"default\" : (this.config.status.levels as YT.SuggestedVideoQuality[])[0]);\r\n }\r\n private ABRFlag = true;\r\n // --- API Logic ---\r\n protected handleHostStateChange(e: { data: number }): void {\r\n this.reInitInfo && this.setInitInfo();\r\n const { state: s, status: st, settings: set } = this.config,\r\n STATE = window.YT.PlayerState;\r\n // console.log(\"YouTube Event:\", e);\r\n switch (e.data) {\r\n case STATE.UNSTARTED:\r\n silence(() => (this.config.intent.currentTime = clamp(0, this.config.state.currentTime, this.config.status.duration - 1))); // #PAMPERING: observed quirk\r\n break;\r\n case STATE.CUED:\r\n st.duration = this.host!.getDuration();\r\n st.readyState = 1; // HAVE METADATA\r\n break;\r\n case STATE.BUFFERING:\r\n st.waiting = set.idleWaiting || !s.paused;\r\n st.readyState = 2; // HAVE CURRENT DATA\r\n break;\r\n case STATE.PLAYING:\r\n st.error = null; // UX boost\r\n st.ended = st.seeking = st.waiting = s.paused = false;\r\n st.duration = this.host!.getDuration();\r\n st.isLive = (this.host!.getVideoData() as any).isLive ?? false; // #PAMPERING: observed quirk\r\n st.canPlay = st.loadedData = true;\r\n st.readyState = 4; // HAVE ENOUGH DATA\r\n this.syncMetadata(), clearInterval(this.intervalId), (this.intervalId = setInterval(this.syncCurrentStats, set.timeShiftPoll, this.signal)); // updates 10 times a sec\r\n break;\r\n case STATE.PAUSED:\r\n case STATE.ENDED:\r\n s.paused = true;\r\n st.ended = e.data === STATE.ENDED;\r\n st.seeking = false;\r\n if (!set.idleWaiting) st.waiting = false;\r\n clearInterval(this.intervalId), this.syncCurrentStats();\r\n break;\r\n }\r\n }\r\n protected handleHostError(err: { data?: number; message?: string }): void {\r\n if (!this.signal || this.signal?.aborted) return;\r\n let msg = \"Unknown YouTube Error\";\r\n if (err.data === 2 || err.data === 100) msg = \"YouTube Video Not Found\";\r\n else if (err.data === 101 || err.data === 150) msg = \"Playback disabled by owner\";\r\n else if (err.data === 5) msg = \"HTML5 Player Error\";\r\n this.config.status.error = { ...err, code: err.data, message: err.message || msg };\r\n this.config.status.waiting = false;\r\n }\r\n protected syncCurrentStats(): void {\r\n if (!this.host) return;\r\n const { status: st, settings: set, state: s } = this.config;\r\n s.currentTime = st.ended ? st.duration : this.host!.getCurrentTime(); // they can be lazy\r\n st.buffered = createTimeRanges([[0, this.host!.getVideoLoadedFraction() * st.duration]]);\r\n st.seekable = createTimeRanges([[st.isLive ? Math.max(0, st.duration - 43200) : 0, st.duration]]); // yt has a 12-Hour max DVR\r\n if (st.isLive) {\r\n st.canSeekLive = true;\r\n st.duration = Math.max(0, this.host!.getDuration() - 3600); // yt has a 1-Hour latency approx.\r\n s.live = st.duration - s.currentTime <= set.liveTolerance;\r\n } else if (st.duration) st.ended = s.currentTime === st.duration; // UX boost\r\n }\r\n public syncMetadata(data = this.host!.getVideoData(), meta = this.config.settings.metadata): void {\r\n if (data && meta.allowMediaOverride) fanout(meta, { title: data.title && data.title !== meta.title ? data.title : undefined, artist: data.author && data.author !== meta.artist ? data.author : undefined }, { skipUndef: true, txLabel: \"YouTube Metadata Override\" });\r\n }\r\n // --- Lifecycle ---\r\n protected reInitInfo = false;\r\n protected setInitInfo(data = this.config.status.hostReady && this.host!.getVideoData(), isShort = this.hostSrc?.includes(\"/shorts/\")): void {\r\n if (!this.host || !data || (this.reInitInfo = false)) return;\r\n // Status (Infos & Lists)\r\n this.config.status.duration = this.host.getDuration();\r\n this.config.status.isLive = (data as any).isLive || this.config.status.duration === 0; // #PAMPERING: observed quirk\r\n (this.config.status.videoWidth = isShort ? 1080 : 1920), (this.config.status.videoHeight = isShort ? 1920 : 1080);\r\n this.config.status.textTracks = []; // wait for API change\r\n this.config.status.waiting = false;\r\n this.config.status.readyState = 1; // HAVE METADATA\r\n this.config.status.loadedMetadata = true;\r\n // Settings & Post-Init\r\n this.syncCurrentStats(), this.syncMetadata(data);\r\n }\r\n public setAutoResPoster(id = \"\", hq = `https://img.youtube.com/vi/${id}/hqdefault.jpg`, maxres = `https://img.youtube.com/vi/${id}/maxresdefault.jpg`): void {\r\n if (!this.config.settings.metadata.allowMediaOverride) return;\r\n const seq = ++this.posterSeq,\r\n img = createEl(\"img\", { src: hq, onload: () => seq === this.posterSeq && (this.config.state.poster = img.naturalWidth <= 120 ? hq : maxres), onerror: () => seq === this.posterSeq && (this.config.state.poster = hq) }); // Preload HQ for immediate use, then conditionally switch to MX if valid\r\n }\r\n private posterSeq = 0;\r\n protected destroyHost(): void {\r\n if (!this.host) return;\r\n this.host.destroy(), (this.host = null);\r\n (this.element = this.hostDiv as HTMLIFrameElement).innerHTML = `<div class=\"tmg-host-content\">${this.hostHTML}</div>`; // Reset to placeholder\r\n }\r\n protected override onDestroy(): void {\r\n this.destroyHost(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface TechRegistryMap {\r\n youtube: typeof YouTubeTech;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Timeline
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-N7CQCEXK.js";
|
|
4
4
|
import {
|
|
5
5
|
VolumeControl
|
|
6
6
|
} from "./chunk-GQHGTZFZ.js";
|
|
@@ -10,21 +10,9 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
RangeInput
|
|
12
12
|
} from "./chunk-CV3LLX2S.js";
|
|
13
|
-
import {
|
|
14
|
-
TimeButton
|
|
15
|
-
} from "./chunk-TPD5CFCJ.js";
|
|
16
|
-
import {
|
|
17
|
-
TimeAndDurationButton
|
|
18
|
-
} from "./chunk-FEEDWNOZ.js";
|
|
19
13
|
import {
|
|
20
14
|
VoiceButton
|
|
21
15
|
} from "./chunk-3FLHX7NS.js";
|
|
22
|
-
import {
|
|
23
|
-
NextButton
|
|
24
|
-
} from "./chunk-BGTZ7GIR.js";
|
|
25
|
-
import {
|
|
26
|
-
ObjectFitButton
|
|
27
|
-
} from "./chunk-YC6OBLR5.js";
|
|
28
16
|
import {
|
|
29
17
|
PictureInPictureButton
|
|
30
18
|
} from "./chunk-7N5I5GSA.js";
|
|
@@ -44,11 +32,11 @@ import {
|
|
|
44
32
|
TheaterButton
|
|
45
33
|
} from "./chunk-NDTEBTIH.js";
|
|
46
34
|
import {
|
|
47
|
-
|
|
48
|
-
} from "./chunk-
|
|
35
|
+
TimeButton
|
|
36
|
+
} from "./chunk-TPD5CFCJ.js";
|
|
49
37
|
import {
|
|
50
|
-
|
|
51
|
-
} from "./chunk-
|
|
38
|
+
TimeAndDurationButton
|
|
39
|
+
} from "./chunk-FEEDWNOZ.js";
|
|
52
40
|
import {
|
|
53
41
|
ExpandMiniplayerButton
|
|
54
42
|
} from "./chunk-X465WVO3.js";
|
|
@@ -68,11 +56,11 @@ import {
|
|
|
68
56
|
Meta
|
|
69
57
|
} from "./chunk-UD32MCQW.js";
|
|
70
58
|
import {
|
|
71
|
-
|
|
72
|
-
} from "./chunk-
|
|
59
|
+
NextButton
|
|
60
|
+
} from "./chunk-BGTZ7GIR.js";
|
|
73
61
|
import {
|
|
74
|
-
|
|
75
|
-
} from "./chunk-
|
|
62
|
+
ObjectFitButton
|
|
63
|
+
} from "./chunk-YC6OBLR5.js";
|
|
76
64
|
import {
|
|
77
65
|
BigNextButton
|
|
78
66
|
} from "./chunk-M5BXAC4Z.js";
|
|
@@ -91,6 +79,12 @@ import {
|
|
|
91
79
|
import {
|
|
92
80
|
CastButton
|
|
93
81
|
} from "./chunk-QWRPZBDH.js";
|
|
82
|
+
import {
|
|
83
|
+
ChapterButton
|
|
84
|
+
} from "./chunk-5WSBZ3H7.js";
|
|
85
|
+
import {
|
|
86
|
+
DurationButton
|
|
87
|
+
} from "./chunk-UFZJSJ7J.js";
|
|
94
88
|
import {
|
|
95
89
|
AirPlayPlaceholder
|
|
96
90
|
} from "./chunk-BXVTN57I.js";
|
|
@@ -104,17 +98,23 @@ import {
|
|
|
104
98
|
PiPPlaceholder
|
|
105
99
|
} from "./chunk-YKB2T5FQ.js";
|
|
106
100
|
import {
|
|
107
|
-
|
|
108
|
-
} from "./chunk-
|
|
101
|
+
AirPlayButton
|
|
102
|
+
} from "./chunk-QRUMXFMQ.js";
|
|
103
|
+
import {
|
|
104
|
+
Backward10Button
|
|
105
|
+
} from "./chunk-YVLVXUSF.js";
|
|
109
106
|
import {
|
|
110
107
|
CaptionsView
|
|
111
|
-
} from "./chunk-
|
|
108
|
+
} from "./chunk-JIXSA7D5.js";
|
|
112
109
|
import {
|
|
113
110
|
ScreenLockButton
|
|
114
111
|
} from "./chunk-QEKYGFJI.js";
|
|
115
112
|
import {
|
|
116
113
|
ComponentRegistry
|
|
117
114
|
} from "./chunk-ATGOEAKN.js";
|
|
115
|
+
import {
|
|
116
|
+
Buffer
|
|
117
|
+
} from "./chunk-KBCRTZLG.js";
|
|
118
118
|
|
|
119
119
|
// src/ts/components/z-register.ts
|
|
120
120
|
for (const Comp of [
|
|
@@ -159,4 +159,4 @@ for (const Comp of [
|
|
|
159
159
|
ErrorPlaceholder
|
|
160
160
|
])
|
|
161
161
|
ComponentRegistry.register(Comp);
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
162
|
+
//# sourceMappingURL=chunk-D73VTNQZ.js.map
|
|
@@ -5,14 +5,14 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
BaseTech
|
|
7
7
|
} from "./chunk-LTQZXT7J.js";
|
|
8
|
+
import {
|
|
9
|
+
clamp
|
|
10
|
+
} from "./chunk-P67KKEHQ.js";
|
|
8
11
|
import {
|
|
9
12
|
createTimeRanges,
|
|
10
13
|
getMediaMax,
|
|
11
14
|
getMediaMin
|
|
12
15
|
} from "./chunk-C4AZD4KN.js";
|
|
13
|
-
import {
|
|
14
|
-
clamp
|
|
15
|
-
} from "./chunk-P67KKEHQ.js";
|
|
16
16
|
import {
|
|
17
17
|
createEl,
|
|
18
18
|
loadResource,
|
|
@@ -381,4 +381,4 @@ export {
|
|
|
381
381
|
VIMEO_EVENTS,
|
|
382
382
|
VimeoTech
|
|
383
383
|
};
|
|
384
|
-
//# sourceMappingURL=chunk-
|
|
384
|
+
//# sourceMappingURL=chunk-DKDMJOZP.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ModesPlug
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-POXVURCZ.js";
|
|
4
4
|
import {
|
|
5
5
|
MODES_AIRPLAY_BUILD
|
|
6
6
|
} from "./chunk-OBT4ZZUV.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-EW3IB5E4.js.map
|
|
@@ -34,10 +34,6 @@ import {
|
|
|
34
34
|
isSameTracks,
|
|
35
35
|
setCurrentTrack
|
|
36
36
|
} from "./chunk-ATKNEOEG.js";
|
|
37
|
-
import {
|
|
38
|
-
getMediaMax,
|
|
39
|
-
getMediaMin
|
|
40
|
-
} from "./chunk-C4AZD4KN.js";
|
|
41
37
|
import {
|
|
42
38
|
clamp
|
|
43
39
|
} from "./chunk-P67KKEHQ.js";
|
|
@@ -49,6 +45,10 @@ import {
|
|
|
49
45
|
CONFIG_BUILD,
|
|
50
46
|
STATE_BUILD
|
|
51
47
|
} from "./chunk-HNXV3ITV.js";
|
|
48
|
+
import {
|
|
49
|
+
getMediaMax,
|
|
50
|
+
getMediaMin
|
|
51
|
+
} from "./chunk-C4AZD4KN.js";
|
|
52
52
|
import {
|
|
53
53
|
createEl,
|
|
54
54
|
createListRenderer,
|
|
@@ -647,7 +647,7 @@ var HTML5Tech = class extends BaseTech {
|
|
|
647
647
|
handleTracksStatus(type, list, init2 = false) {
|
|
648
648
|
type === "Text" && this.handleChaptersStatus(list);
|
|
649
649
|
this.config.status[`${type.toLowerCase()}Tracks`] = Array.prototype.filter.call(list, (t) => type === "Text" ? t.kind === "subtitles" || t.kind === "captions" : true);
|
|
650
|
-
if (!init2) silence(() => this.config.intent[`current${type}Track`] = this.config.intent[`current${type}Track`]), this.config.tick(`intent.current${type}Track`);
|
|
650
|
+
if (!init2) 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);
|
|
651
651
|
}
|
|
652
652
|
handleChaptersStatus(list = this.el.textTracks) {
|
|
653
653
|
const track = Array.prototype.find.call(list, (t) => t.kind === "chapters");
|
|
@@ -971,4 +971,4 @@ export {
|
|
|
971
971
|
HTML5Tech,
|
|
972
972
|
Controller
|
|
973
973
|
};
|
|
974
|
-
//# sourceMappingURL=chunk-
|
|
974
|
+
//# sourceMappingURL=chunk-HFQF73T5.js.map
|