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.
Files changed (200) hide show
  1. package/dist/{chunk-Q7O4DCST.js → chunk-23BU2AJD.js} +4 -4
  2. package/dist/{chunk-2S65C2XE.js → chunk-2XHRU5X4.js} +2 -2
  3. package/dist/{chunk-3BLQPCWC.js → chunk-5M2GEASF.js} +15 -15
  4. package/dist/{chunk-3DIXFLZ4.js → chunk-AFRJBIJ4.js} +2 -2
  5. package/dist/{chunk-FCO6XMXF.js → chunk-ASEYDONH.js} +12 -12
  6. package/dist/{chunk-TW6EJOBM.js → chunk-BKE7OHV2.js} +3 -3
  7. package/dist/chunk-BKE7OHV2.js.map +1 -0
  8. package/dist/{chunk-3ITV4OCM.js → chunk-C3D4UUZT.js} +4 -4
  9. package/dist/{chunk-HKZHYXKF.js → chunk-D24YQBHG.js} +6 -6
  10. package/dist/chunk-D24YQBHG.js.map +1 -0
  11. package/dist/{chunk-CXXZ2VZZ.js → chunk-D73VTNQZ.js} +25 -25
  12. package/dist/{chunk-NMA7IMZX.js → chunk-DKDMJOZP.js} +4 -4
  13. package/dist/{chunk-ZUNDVUUZ.js → chunk-EW3IB5E4.js} +2 -2
  14. package/dist/{chunk-4CM4FZPI.js → chunk-HFQF73T5.js} +6 -6
  15. package/dist/chunk-HFQF73T5.js.map +1 -0
  16. package/dist/{chunk-IUPKURO2.js → chunk-IBBUIMN2.js} +4 -4
  17. package/dist/{chunk-I7MZGLSL.js → chunk-ITKEL5XR.js} +3 -3
  18. package/dist/chunk-ITKEL5XR.js.map +1 -0
  19. package/dist/{chunk-T6UOZ2AG.js → chunk-JIXSA7D5.js} +4 -3
  20. package/dist/chunk-JIXSA7D5.js.map +1 -0
  21. package/dist/{chunk-RNRCIAK3.js → chunk-LGANVFU2.js} +6 -6
  22. package/dist/{chunk-CEWJEP7C.js → chunk-N7CQCEXK.js} +5 -5
  23. package/dist/{chunk-U7OIC5IC.js → chunk-OD6YHMUS.js} +15 -15
  24. package/dist/{chunk-XGW7PNJE.js → chunk-OYPVRCFX.js} +2 -2
  25. package/dist/{chunk-KTSAXGHQ.js → chunk-P637Z652.js} +8 -8
  26. package/dist/{chunk-N4DPWLWI.js → chunk-POXVURCZ.js} +2 -2
  27. package/dist/{chunk-DLY44YIV.js → chunk-PWTBWGHJ.js} +3 -3
  28. package/dist/chunk-PWTBWGHJ.js.map +1 -0
  29. package/dist/{chunk-NVR2QNQB.js → chunk-QMJHBGYN.js} +11 -11
  30. package/dist/{chunk-CK4OHZ3L.js → chunk-QU3UL72W.js} +5 -5
  31. package/dist/{chunk-UXX75IOE.js → chunk-QYQD3264.js} +44 -44
  32. package/dist/{chunk-IPV7SSWB.js → chunk-RRWSRTHV.js} +4 -4
  33. package/dist/{chunk-LH3LZHFD.js → chunk-RSVR4GKO.js} +77 -77
  34. package/dist/{chunk-LJMZRSAF.js → chunk-SWPACD5Q.js} +64 -64
  35. package/dist/{chunk-FQQ7BUL4.js → chunk-SZPFWPXW.js} +37 -37
  36. package/dist/{chunk-UE4ZPXKM.js → chunk-TPISFEE3.js} +2 -2
  37. package/dist/{chunk-BKK32VPW.js → chunk-UXDRWJ7R.js} +4 -4
  38. package/dist/{chunk-NYV4OKID.js → chunk-VYXKFADG.js} +4 -4
  39. package/dist/{chunk-BT52HFOO.js → chunk-ZBYL3DRU.js} +2 -2
  40. package/dist/{chunk-GA5HGFYP.js → chunk-ZRILV7LP.js} +11 -9
  41. package/dist/chunk-ZRILV7LP.js.map +1 -0
  42. package/dist/components/captionsView.cjs +3 -2
  43. package/dist/components/captionsView.cjs.map +1 -1
  44. package/dist/components/captionsView.js +1 -1
  45. package/dist/components/controls/captions.js +2 -2
  46. package/dist/components/controls/fullscreenOrientation.cjs.map +1 -1
  47. package/dist/components/controls/fullscreenOrientation.js +3 -3
  48. package/dist/components/controls/timeline/index.cjs +1 -1
  49. package/dist/components/controls/timeline/index.cjs.map +1 -1
  50. package/dist/components/controls/timeline/index.js +4 -4
  51. package/dist/components/holders/pipPlaceholder.js +4 -4
  52. package/dist/components/icons/z-register.js +17 -17
  53. package/dist/components/z-register.cjs +4 -3
  54. package/dist/components/z-register.cjs.map +1 -1
  55. package/dist/components/z-register.js +18 -18
  56. package/dist/core/controller.cjs +1 -1
  57. package/dist/core/controller.cjs.map +1 -1
  58. package/dist/core/controller.js +3 -3
  59. package/dist/index.cjs +1 -1
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.js +4 -4
  62. package/dist/init.cjs +1 -1
  63. package/dist/init.cjs.map +1 -1
  64. package/dist/init.js +4 -4
  65. package/dist/plugs/main/ads/index.js +2 -2
  66. package/dist/plugs/main/playlist/index.js +3 -3
  67. package/dist/plugs/menus/main/actions.cjs.map +1 -1
  68. package/dist/plugs/menus/main/actions.js +3 -3
  69. package/dist/plugs/menus/settings/auto.cjs.map +1 -1
  70. package/dist/plugs/menus/settings/auto.js +3 -3
  71. package/dist/plugs/menus/settings/captions.js +2 -2
  72. package/dist/plugs/menus/settings/controlPanel.js +2 -2
  73. package/dist/plugs/menus/settings/frame.cjs.map +1 -1
  74. package/dist/plugs/menus/settings/frame.js +3 -3
  75. package/dist/plugs/menus/settings/metadata.js +1 -1
  76. package/dist/plugs/menus/settings/modes.cjs.map +1 -1
  77. package/dist/plugs/menus/settings/modes.js +3 -3
  78. package/dist/plugs/menus/settings/sleepTimer.cjs.map +1 -1
  79. package/dist/plugs/menus/settings/sleepTimer.js +4 -4
  80. package/dist/plugs/menus/settings/toasts.cjs.map +1 -1
  81. package/dist/plugs/menus/settings/toasts.js +3 -3
  82. package/dist/plugs/menus/settings/voice.cjs.map +1 -1
  83. package/dist/plugs/menus/settings/voice.js +3 -3
  84. package/dist/plugs/menus/z-register.cjs.map +1 -1
  85. package/dist/plugs/menus/z-register.js +11 -11
  86. package/dist/plugs/settings/auto/index.cjs.map +1 -1
  87. package/dist/plugs/settings/auto/index.js +3 -3
  88. package/dist/plugs/settings/captions/index.cjs +9 -7
  89. package/dist/plugs/settings/captions/index.cjs.map +1 -1
  90. package/dist/plugs/settings/captions/index.js +4 -4
  91. package/dist/plugs/settings/frame/index.js +2 -2
  92. package/dist/plugs/settings/gesture/base.js +2 -2
  93. package/dist/plugs/settings/gesture/index.js +3 -3
  94. package/dist/plugs/settings/gesture/touch.js +3 -3
  95. package/dist/plugs/settings/gesture/wheel.js +3 -3
  96. package/dist/plugs/settings/modes/airplay.cjs.map +1 -1
  97. package/dist/plugs/settings/modes/airplay.js +5 -5
  98. package/dist/plugs/settings/modes/cast.cjs.map +1 -1
  99. package/dist/plugs/settings/modes/cast.js +5 -5
  100. package/dist/plugs/settings/modes/fullscreen.cjs.map +1 -1
  101. package/dist/plugs/settings/modes/fullscreen.js +4 -4
  102. package/dist/plugs/settings/modes/index.cjs.map +1 -1
  103. package/dist/plugs/settings/modes/index.js +4 -4
  104. package/dist/plugs/settings/modes/miniplayer.cjs.map +1 -1
  105. package/dist/plugs/settings/modes/miniplayer.js +4 -4
  106. package/dist/plugs/settings/modes/pictureInPicture.cjs.map +1 -1
  107. package/dist/plugs/settings/modes/pictureInPicture.js +4 -4
  108. package/dist/plugs/settings/modes/theater.cjs.map +1 -1
  109. package/dist/plugs/settings/modes/theater.js +4 -4
  110. package/dist/plugs/settings/sleepTimer/index.js +3 -3
  111. package/dist/plugs/settings/time/index.js +2 -2
  112. package/dist/plugs/settings/timeTravel/index.cjs.map +1 -1
  113. package/dist/plugs/settings/timeTravel/index.js +4 -4
  114. package/dist/plugs/settings/voice/index.cjs.map +1 -1
  115. package/dist/plugs/settings/voice/index.js +3 -3
  116. package/dist/plugs/settings/volume/index.cjs.map +1 -1
  117. package/dist/plugs/settings/volume/index.js +4 -4
  118. package/dist/plugs/z-register.cjs +9 -7
  119. package/dist/plugs/z-register.cjs.map +1 -1
  120. package/dist/plugs/z-register.js +40 -40
  121. package/dist/super/components/icons.js +37 -37
  122. package/dist/super/components/index.cjs +4 -3
  123. package/dist/super/components/index.cjs.map +1 -1
  124. package/dist/super/components/index.js +76 -76
  125. package/dist/super/consts.js +9 -9
  126. package/dist/super/plugs/index.cjs +9 -7
  127. package/dist/super/plugs/index.cjs.map +1 -1
  128. package/dist/super/plugs/index.js +93 -93
  129. package/dist/super/plugs/menus.cjs.map +1 -1
  130. package/dist/super/plugs/menus.js +18 -18
  131. package/dist/super/techs.cjs +6 -6
  132. package/dist/super/techs.cjs.map +1 -1
  133. package/dist/super/techs.js +15 -15
  134. package/dist/super/utils.js +15 -15
  135. package/dist/super.cjs +17 -14
  136. package/dist/super.cjs.map +1 -1
  137. package/dist/super.global.js +17 -14
  138. package/dist/super.global.js.map +1 -1
  139. package/dist/super.js +138 -138
  140. package/dist/techs/dash.cjs +2 -2
  141. package/dist/techs/dash.cjs.map +1 -1
  142. package/dist/techs/dash.js +4 -4
  143. package/dist/techs/hls.cjs +2 -2
  144. package/dist/techs/hls.cjs.map +1 -1
  145. package/dist/techs/hls.js +4 -4
  146. package/dist/techs/html5.cjs +1 -1
  147. package/dist/techs/html5.cjs.map +1 -1
  148. package/dist/techs/html5.js +3 -3
  149. package/dist/techs/ima.js +2 -2
  150. package/dist/techs/shaka.cjs +2 -2
  151. package/dist/techs/shaka.cjs.map +1 -1
  152. package/dist/techs/shaka.js +4 -4
  153. package/dist/techs/vimeo.js +2 -2
  154. package/dist/techs/youtube.cjs +2 -2
  155. package/dist/techs/youtube.cjs.map +1 -1
  156. package/dist/techs/youtube.js +4 -4
  157. package/dist/techs/z-register.cjs +6 -6
  158. package/dist/techs/z-register.cjs.map +1 -1
  159. package/dist/techs/z-register.js +9 -9
  160. package/dist/tools/player.cjs +1 -1
  161. package/dist/tools/player.cjs.map +1 -1
  162. package/dist/tools/player.js +3 -3
  163. package/dist/tools/runtime/index.cjs +1 -1
  164. package/dist/tools/runtime/index.cjs.map +1 -1
  165. package/dist/tools/runtime/index.js +3 -3
  166. package/package.json +1 -1
  167. package/dist/chunk-4CM4FZPI.js.map +0 -1
  168. package/dist/chunk-DLY44YIV.js.map +0 -1
  169. package/dist/chunk-GA5HGFYP.js.map +0 -1
  170. package/dist/chunk-HKZHYXKF.js.map +0 -1
  171. package/dist/chunk-I7MZGLSL.js.map +0 -1
  172. package/dist/chunk-T6UOZ2AG.js.map +0 -1
  173. package/dist/chunk-TW6EJOBM.js.map +0 -1
  174. /package/dist/{chunk-Q7O4DCST.js.map → chunk-23BU2AJD.js.map} +0 -0
  175. /package/dist/{chunk-2S65C2XE.js.map → chunk-2XHRU5X4.js.map} +0 -0
  176. /package/dist/{chunk-3BLQPCWC.js.map → chunk-5M2GEASF.js.map} +0 -0
  177. /package/dist/{chunk-3DIXFLZ4.js.map → chunk-AFRJBIJ4.js.map} +0 -0
  178. /package/dist/{chunk-FCO6XMXF.js.map → chunk-ASEYDONH.js.map} +0 -0
  179. /package/dist/{chunk-3ITV4OCM.js.map → chunk-C3D4UUZT.js.map} +0 -0
  180. /package/dist/{chunk-CXXZ2VZZ.js.map → chunk-D73VTNQZ.js.map} +0 -0
  181. /package/dist/{chunk-NMA7IMZX.js.map → chunk-DKDMJOZP.js.map} +0 -0
  182. /package/dist/{chunk-ZUNDVUUZ.js.map → chunk-EW3IB5E4.js.map} +0 -0
  183. /package/dist/{chunk-IUPKURO2.js.map → chunk-IBBUIMN2.js.map} +0 -0
  184. /package/dist/{chunk-RNRCIAK3.js.map → chunk-LGANVFU2.js.map} +0 -0
  185. /package/dist/{chunk-CEWJEP7C.js.map → chunk-N7CQCEXK.js.map} +0 -0
  186. /package/dist/{chunk-U7OIC5IC.js.map → chunk-OD6YHMUS.js.map} +0 -0
  187. /package/dist/{chunk-XGW7PNJE.js.map → chunk-OYPVRCFX.js.map} +0 -0
  188. /package/dist/{chunk-KTSAXGHQ.js.map → chunk-P637Z652.js.map} +0 -0
  189. /package/dist/{chunk-N4DPWLWI.js.map → chunk-POXVURCZ.js.map} +0 -0
  190. /package/dist/{chunk-NVR2QNQB.js.map → chunk-QMJHBGYN.js.map} +0 -0
  191. /package/dist/{chunk-CK4OHZ3L.js.map → chunk-QU3UL72W.js.map} +0 -0
  192. /package/dist/{chunk-UXX75IOE.js.map → chunk-QYQD3264.js.map} +0 -0
  193. /package/dist/{chunk-IPV7SSWB.js.map → chunk-RRWSRTHV.js.map} +0 -0
  194. /package/dist/{chunk-LH3LZHFD.js.map → chunk-RSVR4GKO.js.map} +0 -0
  195. /package/dist/{chunk-LJMZRSAF.js.map → chunk-SWPACD5Q.js.map} +0 -0
  196. /package/dist/{chunk-FQQ7BUL4.js.map → chunk-SZPFWPXW.js.map} +0 -0
  197. /package/dist/{chunk-UE4ZPXKM.js.map → chunk-TPISFEE3.js.map} +0 -0
  198. /package/dist/{chunk-BKK32VPW.js.map → chunk-UXDRWJ7R.js.map} +0 -0
  199. /package/dist/{chunk-NYV4OKID.js.map → chunk-VYXKFADG.js.map} +0 -0
  200. /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-Q7O4DCST.js.map
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-4CM4FZPI.js";
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-2S65C2XE.js.map
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-3BLQPCWC.js.map
435
+ //# sourceMappingURL=chunk-5M2GEASF.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  GestureBasePin
3
- } from "./chunk-NYV4OKID.js";
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-3DIXFLZ4.js.map
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-HKZHYXKF.js";
10
+ } from "./chunk-D24YQBHG.js";
4
11
  import {
5
12
  DashTech
6
- } from "./chunk-TW6EJOBM.js";
13
+ } from "./chunk-BKE7OHV2.js";
7
14
  import {
8
15
  HLSTech
9
- } from "./chunk-DLY44YIV.js";
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-4CM4FZPI.js";
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-FCO6XMXF.js.map
49
+ //# sourceMappingURL=chunk-ASEYDONH.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  HTML5Tech
3
- } from "./chunk-4CM4FZPI.js";
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-TW6EJOBM.js.map
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":";;;;;;;;;;;;;;;;;;;;;;;;;AAGA,SAAS,aAA0B;AAQnC,SAAS,eAAe;AAOjB,IAAM,WAAN,cAAuB,UAAU;AAAA,EAQtC,YAAY,MAAkB,UAA0B;AACtD,UAAM,QAAQ,KAAK,MAAM,SAAS;AAElC,UAAM,MAAM;AAAA;AAAA,MAEV,SAAS;AAAA,MAAO,QAAQ;AAAA,MAAO,YAAY;AAAA,MAAM,aAAa;AAAA,MAAM,aAAa;AAAA,MAAO,QAAQ;AAAA;AAAA,MAEhG,mBAAmB;AAAA,MAAM,mBAAmB;AAAA,MAAO,cAAc;AAAA,MAAM,WAAW;AAAA;AAAA,MAElF,WAAW;AAAA,MAAM,YAAY;AAAA,MAAM,GAAG;AAAA,IACxC,CAAC;AAbH,wBAAO,QAA+B;AACtC,wBAAO,WAAyB;AAChC,wBAAmB,WAAmB;AAYpC,SAAK,MAAM,OAAO,YAAY;AAAA,EAChC;AAAA,EAlBA,OAAuB,cAAc,KAAsB;AACzD,WAAO,eAAe,gBAAgB,KAAK,GAAG;AAAA,EAChD;AAAA;AAAA,EAkBA,MAAgB,SAAS,MAAM,IAAmB;AAChD,QAAI;AAEF,WAAK,YAAY;AACjB,YAAM,SAAW,OAAe,WAAW,MAAM,aAAa,OAAO,iBAAkB,QAAQ,GAAI,OAAe;AAClH,UAAI,CAAC,KAAK,UAAU,KAAK,QAAQ,QAAS;AAC1C,UAAI,CAAC,QAAQ,oBAAoB,EAAG,QAAO,KAAK,KAAK,OAAO,yCAAyC,SAAS,IAAI;AAClH,YAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,MAAM;AAC1C,WAAK,UAAU;AACf,WAAK,OAAO,OAAO,YAAY,EAAE,OAAO;AACxC,UAAI,KAAK,OAAO,SAAS,QAAS,MAAK,KAAK,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,MAAM,EAAE,GAAG,iBAAiB,EAAE,OAAO,iBAAiB,OAAO,gBAAgB,GAAG,QAAQ,EAAE,mBAAmB,KAAK,EAAE,EAAE,CAAC;AAEpO,WAAK,KAAK,GAAG,OAAO,YAAY,OAAO,oBAAoB,MAAM;AAC/D,aAAK,OAAO,OAAO,SAAS,KAAK,KAAM,UAAU;AACjD,cAAM,aAAc,KAAK,KAAM,YAAY,EAAU,WAAW,KAAK;AACrE,aAAK,OAAO,MAAM,YAAY,OAAO,UAAU,IAAI,aAAa,YAAY,SAAS;AACrF,mBAAW,KAAK,CAAC,QAAQ,SAAS,OAAO,EAAY,MAAK,OAAO,OAAO,GAAG,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAM,aAAa,CAAC,CAAC;AACxH,aAAK,OAAO,OAAO,SAAS,MAAM,KAAK,KAAM,sBAAsB,OAAO,CAAC;AAC3E,aAAK,OAAO,OAAO,YAAY;AAAA,MACjC,CAAC;AACD,WAAK,KAAK,GAAG,OAAO,YAAY,OAAO,uBAAuB,CAAC,OAAY;AACzE,cAAM,IAAI,KAAK,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,MAAM,EAAE,UAAU,GAAG,cAAc,KAAK;AACpI,aAAK,OAAO,MAAM,UAAU,WAAW,GAAG,SAAS,CAAc,OAAO,IAAI,KAAK;AAAA,MACnF,CAAC;AACD,WAAK,KAAK,GAAG,OAAO,YAAY,OAAO,yBAAyB,CAAC,OAAY,GAAG,cAAc,YAAY,KAAK,OAAO,MAAM,eAAe,GAAG,cAAc,GAAG,MAAM;AACrK,WAAK,KAAK,GAAG,OAAO,YAAY,OAAO,4BAA4B,CAAC,OAAO,KAAK,KAAK,SAAS,oBAAoB,MAAM,GAAG,SAAS,cAAc,YAAY,KAAK,OAAO,OAAO,YAAY,KAAK,MAAM,KAAK,KAAM,qBAAqB,OAAO,IAAI,GAAI,IAAI,GAAI,CAAC;AAChQ,WAAK,KAAK,GAAG,OAAO,YAAY,OAAO,uBAAuB,CAAC,OAAY;AACzE,YAAI,CAAC,KAAK,OAAO,SAAS,SAAS,mBAAoB;AACvD,YAAI,CAAC,GAAG,aAAa,SAAS,SAAS,KAAK,CAAC,GAAG,aAAa,SAAS,OAAO,EAAG;AAChF,cAAM,WAAW,KAAK,OAAO,SAAS,SAAS;AAC/C,YAAI,SAAS,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,EAAG;AAC/D,iBAAS,KAAK,EAAE,OAAO,IAAI,YAAY,OAAO,EAAE,OAAO,GAAG,WAAW,EAAE,QAAQ,OAAO,EAAE,EAAE,KAAK,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAClI,aAAK,OAAO,SAAS,SAAS,cAAc,SAAS,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;AAAA,MAC/F,CAAC;AACD,WAAK,KAAK,GAAG,OAAO,YAAY,OAAO,yBAAyB,MAAM;AACpE,mBAAW,KAAK,CAAC,QAAQ,SAAS,OAAO,EAAY,MAAK,OAAO,OAAO,GAAG,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAM,aAAa,CAAC,CAAC;AACxH,aAAK,OAAO,OAAO,SAAS,MAAM,KAAK,KAAM,sBAAsB,OAAO,CAAC;AAC3E,mBAAW,KAAK,CAAC,aAAa,cAAc,cAAc,OAAO,EAAY,SAAQ,MAAO,KAAK,OAAO,OAAO,UAAU,CAAC,EAAE,IAAI,KAAK,OAAO,OAAO,UAAU,CAAC,EAAE,CAAE,GAAG,KAAK,OAAO,KAAK,iBAAiB,CAAC,EAAE,GAAG,MAAM,eAAe,QAAQ,MAAO,KAAK,OAAO,OAAO,cAAc,KAAK,OAAO,OAAO,WAAY;AAAA,MACnT,CAAC;AACD,WAAK,KAAK,GAAG,OAAO,YAAY,OAAO,OAAO,CAAC,OAAO;AACpD,YAAI,GAAG,UAAU,WAAY,QAAO,KAAK,KAAK,OAAO,iCAAiC,GAAG,KAAK,IAAI,SAAS,wBAAwB,GAAG,OAAO,GAAG,KAAK,IAAI;AACzJ,WAAG,UAAU,iBAAiB,KAAK,gBAAgB,EAAE;AAAA,MACvD,CAAC;AACD,WAAK,OAAO,SAAS,cAAc,KAAK,KAAK,kBAAkB,KAAK,OAAO,SAAS,UAAU;AAC9F,WAAK,KAAK,WAAW,KAAK,IAAI,KAAK,MAAM,YAAY,CAAC,MAAM,QAAQ,MAAM,WAAW;AAAA,IACvF,SAAS,KAAK;AACZ,WAAK,gBAAgB,GAAG;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAImB,kBAAwB;AAAA,EAAC;AAAA,EACzB,iBAAiB,MAAiB,QAAQ,KAAK,YAAY,GAAiC;AAC7G,SAAK,OAAO,IAAI,iBAAiB,IAAI,SAAS,CAAC,SAAU,MAAM,IAAI,IAAI,OAAQ,KAAK,OAAO,OAAO,GAAG,KAAK,QAAQ,EAAyB,UAAU,CAAC,MAAM,EAAE,OAAO,QAAQ,EAAE,SAAS,IAAI,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AACvN,SAAK,OAAO,GAAG,iBAAiB,IAAI,SAAS,CAAC,MAAM,KAAK,6BAA6B,GAAG,KAAK,GAAG,KAAK,QAAQ,MAAM;AAAA,EACtH;AAAA,EACU,mBAAyB;AACjC,SAAK,OAAO,IAAI,uBAAuB,CAAC,SAAU,MAAM,IAAI,IAAI,OAAO,OAAO,IAAI,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC7G,SAAK,OAAO,GAAG,uBAAuB,KAAK,0BAA0B,KAAK,QAAQ,MAAM;AAAA,EAC1F;AAAA,EACU,gBAAsB;AAC9B,SAAK,OAAO,GAAG,oBAAoB,KAAK,uBAAuB,KAAK,QAAQ,MAAM;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA,EAImB,gBAAgB,GAA0C;AAC3E,QAAI,EAAE,SAAU;AAChB,KAAC,UAAU,KAAK,SAAS,EAAE,KAAK,KAAK,KAAK,SAAS,EAAE,KAAK;AAC1D,MAAE,QAAQ,KAAK,IAAI;AAAA,EACrB;AAAA,EACU,yBAAyB,GAAmD;AACpF,QAAI,EAAE,SAAU;AAChB,SAAK,KAAK,KAAK,aAAa,GAAG,MAAO,EAAE,QAAmB,MAAO,EAAE,QAAmB,KAAK,OAAO,OAAO,OAAO,WAAW,KAAK,aAAa,GAAG,KAAK,KAAM,cAAc,SAAS,EAAE,KAAe,EAAE;AACtM,MAAE,QAAQ,KAAK,IAAI;AAAA,EACrB;AAAA,EACU,sBAAsB,GAAgD;AAC9E,QAAI,EAAE,SAAU;AAChB,SAAK,KAAK,KAAK,aAAa,GAAG,MAAM,KAAK,aAAa,EAAE,KAAK,CAAC;AAC/D,MAAE,QAAQ,KAAK,IAAI;AAAA,EACrB;AAAA,EACU,aAAa,QAAQ,OAAa;AAC1C,SAAK,KAAM,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,MAAM,EAAE,EAAE,EAAE,CAAC;AACzF,SAAK,OAAO,MAAM,YAAY;AAAA,EAChC;AAAA,EACU,6BAA6B,GAAyD,MAAkC;AAChI,QAAI,EAAE,SAAU;AAChB,SAAK,KAAK,KAAK,aAAa,GAAG,CAAC,QAAQ,KAAK,OAAO,OAAO,GAAG,IAAI,QAAQ,EAAE,EAAE,KAAe,MAAsC,SAAS,KAAK,KAAM,gBAAgB,KAAK,CAAC;AAC7K,MAAE,QAAQ,KAAK,IAAI;AAAA,EACrB;AAAA,EACU,gBAAgB,KAAgB;AACxC,QAAI,CAAC,KAAK,UAAU,KAAK,QAAQ,QAAS;AAC1C,SAAK,OAAO,OAAO,QAAQ,EAAE,GAAG,KAAK,MAAM,KAAK,QAAQ,GAAG,SAAS,IAAI,SAAS,IAAI,WAAW,mBAAmB;AACnH,SAAK,OAAO,OAAO,UAAU;AAAA,EAC/B;AAAA;AAAA,EAEU,cAAoB;AAC5B,SAAK,MAAM,MAAM,GAAI,KAAK,OAAO,MAAQ,KAAK,OAAO,OAAO,YAAY;AAAA,EAC1E;AAAA,EACmB,YAAkB;AACnC,SAAK,YAAY,GAAG,MAAM,UAAU;AAAA,EACtC;AACF;AA5HE,cADW,UACY,YAAmB;","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-3ITV4OCM.js.map
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
- silence(() => this.config.intent.textVisible = e.value === -1 ? false : this.config.intent.textVisible);
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-HKZHYXKF.js.map
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-CEWJEP7C.js";
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
- ChapterButton
48
- } from "./chunk-5WSBZ3H7.js";
35
+ TimeButton
36
+ } from "./chunk-TPD5CFCJ.js";
49
37
  import {
50
- DurationButton
51
- } from "./chunk-UFZJSJ7J.js";
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
- AirPlayButton
72
- } from "./chunk-QRUMXFMQ.js";
59
+ NextButton
60
+ } from "./chunk-BGTZ7GIR.js";
73
61
  import {
74
- Backward10Button
75
- } from "./chunk-YVLVXUSF.js";
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
- Buffer
108
- } from "./chunk-KBCRTZLG.js";
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-T6UOZ2AG.js";
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-CXXZ2VZZ.js.map
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-NMA7IMZX.js.map
384
+ //# sourceMappingURL=chunk-DKDMJOZP.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ModesPlug
3
- } from "./chunk-N4DPWLWI.js";
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-ZUNDVUUZ.js.map
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-4CM4FZPI.js.map
974
+ //# sourceMappingURL=chunk-HFQF73T5.js.map