@videojs/html 10.0.0-beta.27 → 10.0.0-beta.28

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 (393) hide show
  1. package/cdn/audio-headless.dev.js +1 -1
  2. package/cdn/audio-headless.js +1 -1
  3. package/cdn/audio-minimal-ui.dev.js +1 -1
  4. package/cdn/audio-minimal-ui.js +1 -1
  5. package/cdn/audio-minimal.dev.js +4 -4
  6. package/cdn/audio-minimal.dev.js.map +1 -1
  7. package/cdn/audio-minimal.js +1 -1
  8. package/cdn/audio-minimal.js.map +1 -1
  9. package/cdn/audio-ui.dev.js +1 -1
  10. package/cdn/audio-ui.js +1 -1
  11. package/cdn/audio.dev.js +4 -4
  12. package/cdn/audio.dev.js.map +1 -1
  13. package/cdn/audio.js +1 -1
  14. package/cdn/audio.js.map +1 -1
  15. package/cdn/background-video-WKumpp49.js +59 -0
  16. package/cdn/background-video-WKumpp49.js.map +1 -0
  17. package/cdn/background-video-YHY_3-lX.js +2 -0
  18. package/cdn/background-video-YHY_3-lX.js.map +1 -0
  19. package/cdn/background.dev.js +3 -56
  20. package/cdn/background.dev.js.map +1 -1
  21. package/cdn/background.js +1 -1
  22. package/cdn/background.js.map +1 -1
  23. package/cdn/bn-CcLIScl6.js +108 -0
  24. package/cdn/bn-CcLIScl6.js.map +1 -0
  25. package/cdn/bn-KcCmQhYd.js +2 -0
  26. package/cdn/bn-KcCmQhYd.js.map +1 -0
  27. package/cdn/compounds-BEO1d3ZM.js +8 -0
  28. package/cdn/compounds-BEO1d3ZM.js.map +1 -0
  29. package/cdn/{compounds-CCvdpvge.js → compounds-nk9RJtBK.js} +8 -15
  30. package/cdn/compounds-nk9RJtBK.js.map +1 -0
  31. package/cdn/container-element-Dd0ZCdhK.js +14 -0
  32. package/cdn/container-element-Dd0ZCdhK.js.map +1 -0
  33. package/cdn/container-element-HHK_KZOE.js +376 -0
  34. package/cdn/container-element-HHK_KZOE.js.map +1 -0
  35. package/cdn/{create-player-BHFyOnWi.js → create-player-DK9WOywd.js} +19 -379
  36. package/cdn/create-player-DK9WOywd.js.map +1 -0
  37. package/cdn/create-player-hSdQMP5p.js +2 -0
  38. package/cdn/create-player-hSdQMP5p.js.map +1 -0
  39. package/cdn/embed-params-D2e8u0d4.js +2 -0
  40. package/cdn/embed-params-D2e8u0d4.js.map +1 -0
  41. package/cdn/embed-params-W6T88S8x.js +39 -0
  42. package/cdn/embed-params-W6T88S8x.js.map +1 -0
  43. package/cdn/{gesture-element-CG-Sx_5t.js → gesture-element-6Ld1YwIL.js} +3 -3
  44. package/cdn/{gesture-element-CG-Sx_5t.js.map → gesture-element-6Ld1YwIL.js.map} +1 -1
  45. package/cdn/gesture-element-BC48ucj9.js +2 -0
  46. package/cdn/{gesture-element-BNfMI8eh.js.map → gesture-element-BC48ucj9.js.map} +1 -1
  47. package/cdn/{hls-js-g1zdcyvE.js → hls-js-BEuVm0u9.js} +3 -2
  48. package/cdn/{hls-js-g1zdcyvE.js.map → hls-js-BEuVm0u9.js.map} +1 -1
  49. package/cdn/hls-js-C4P_b2tT.js +2 -0
  50. package/cdn/{hls-js-6lW7L4th.js.map → hls-js-C4P_b2tT.js.map} +1 -1
  51. package/cdn/hls-js-CATW7NBm.js +2 -0
  52. package/cdn/{hls-js-DCQzjzB5.js.map → hls-js-CATW7NBm.js.map} +1 -1
  53. package/cdn/{hls-js-Cwj8UBx9.js → hls-js-WCNy9MVh.js} +3 -2
  54. package/cdn/{hls-js-Cwj8UBx9.js.map → hls-js-WCNy9MVh.js.map} +1 -1
  55. package/cdn/i18n-CE4KxKuj.js +2 -0
  56. package/cdn/i18n-CE4KxKuj.js.map +1 -0
  57. package/cdn/{i18n-Mtlmj1AA.js → i18n-Ch4t6EjV.js} +2 -2
  58. package/cdn/{i18n-Mtlmj1AA.js.map → i18n-Ch4t6EjV.js.map} +1 -1
  59. package/cdn/i18n-Dc7WM2xd.js +2 -0
  60. package/cdn/{i18n-DfKGl5Rh.js.map → i18n-Dc7WM2xd.js.map} +1 -1
  61. package/cdn/i18n-DyF_NfCk.js +157 -0
  62. package/cdn/i18n-DyF_NfCk.js.map +1 -0
  63. package/cdn/i18n.dev.js +3 -152
  64. package/cdn/i18n.dev.js.map +1 -1
  65. package/cdn/i18n.js +1 -1
  66. package/cdn/i18n.js.map +1 -1
  67. package/cdn/{live-button-element-B_y-ZJBy.js → live-button-element-Bae44kBN.js} +5 -4
  68. package/cdn/live-button-element-Bae44kBN.js.map +1 -0
  69. package/cdn/live-button-element-DaHgnYdw.js +2 -0
  70. package/cdn/{live-button-element-CWfkQUoy.js.map → live-button-element-DaHgnYdw.js.map} +1 -1
  71. package/cdn/live-video-minimal.dev.js +8 -8
  72. package/cdn/live-video-minimal.dev.js.map +1 -1
  73. package/cdn/live-video-minimal.js +1 -1
  74. package/cdn/live-video-minimal.js.map +1 -1
  75. package/cdn/live-video.dev.js +9 -9
  76. package/cdn/live-video.dev.js.map +1 -1
  77. package/cdn/live-video.js +1 -1
  78. package/cdn/live-video.js.map +1 -1
  79. package/cdn/locales/bn.dev.js +1 -1
  80. package/cdn/locales/bn.js +1 -1
  81. package/cdn/media/background-video.dev.d.ts +1 -0
  82. package/cdn/media/background-video.dev.js +3 -0
  83. package/cdn/media/background-video.js +1 -0
  84. package/cdn/media/cloudflare-video.dev.d.ts +1 -0
  85. package/cdn/media/cloudflare-video.dev.js +668 -0
  86. package/cdn/media/cloudflare-video.dev.js.map +1 -0
  87. package/cdn/media/cloudflare-video.js +2 -0
  88. package/cdn/media/cloudflare-video.js.map +1 -0
  89. package/cdn/media/container.dev.d.ts +1 -0
  90. package/cdn/media/container.dev.js +8 -0
  91. package/cdn/media/container.dev.js.map +1 -0
  92. package/cdn/media/container.js +2 -0
  93. package/cdn/media/container.js.map +1 -0
  94. package/cdn/media/dash-video.dev.js +2 -1
  95. package/cdn/media/dash-video.js +2 -2
  96. package/cdn/media/dash-video.js.map +1 -1
  97. package/cdn/media/google-cast.dev.js +2 -31
  98. package/cdn/media/google-cast.dev.js.map +1 -1
  99. package/cdn/media/google-cast.js +3 -3
  100. package/cdn/media/google-cast.js.map +1 -1
  101. package/cdn/media/hls-audio.dev.js +1 -0
  102. package/cdn/media/hls-audio.js +1 -1
  103. package/cdn/media/hls-audio.js.map +1 -1
  104. package/cdn/media/hls-background-video.dev.js +2 -1
  105. package/cdn/media/hls-background-video.js +1 -1
  106. package/cdn/media/hls-background-video.js.map +1 -1
  107. package/cdn/media/hls-video.dev.js +2 -1
  108. package/cdn/media/hls-video.js +1 -1
  109. package/cdn/media/hls-video.js.map +1 -1
  110. package/cdn/media/hlsjs-video.dev.js +2 -1
  111. package/cdn/media/hlsjs-video.js +1 -1
  112. package/cdn/media/hlsjs-video.js.map +1 -1
  113. package/cdn/media/mux-audio/hls-js.dev.js +3 -1
  114. package/cdn/media/mux-audio/hls-js.js +1 -1
  115. package/cdn/media/mux-audio/spf.dev.js +1 -0
  116. package/cdn/media/mux-audio/spf.js +1 -1
  117. package/cdn/media/mux-audio/spf.js.map +1 -1
  118. package/cdn/media/mux-audio.dev.js +3 -1
  119. package/cdn/media/mux-audio.js +1 -1
  120. package/cdn/media/mux-background-video.dev.js +2 -1
  121. package/cdn/media/mux-background-video.js +1 -1
  122. package/cdn/media/mux-background-video.js.map +1 -1
  123. package/cdn/media/mux-data.dev.js +2 -1
  124. package/cdn/media/mux-data.dev.js.map +1 -1
  125. package/cdn/media/mux-data.js +2 -2
  126. package/cdn/media/mux-data.js.map +1 -1
  127. package/cdn/media/mux-video/hls-js.dev.js +3 -1
  128. package/cdn/media/mux-video/hls-js.js +1 -1
  129. package/cdn/media/mux-video/spf.dev.js +2 -1
  130. package/cdn/media/mux-video/spf.js +1 -1
  131. package/cdn/media/mux-video/spf.js.map +1 -1
  132. package/cdn/media/mux-video.dev.js +3 -1
  133. package/cdn/media/mux-video.js +1 -1
  134. package/cdn/media/native-hls-video.dev.js +1 -0
  135. package/cdn/media/native-hls-video.js +1 -1
  136. package/cdn/media/native-hls-video.js.map +1 -1
  137. package/cdn/media/spotify-audio.dev.d.ts +1 -0
  138. package/cdn/media/spotify-audio.dev.js +605 -0
  139. package/cdn/media/spotify-audio.dev.js.map +1 -0
  140. package/cdn/media/spotify-audio.js +2 -0
  141. package/cdn/media/spotify-audio.js.map +1 -0
  142. package/cdn/media/tiktok-video.dev.d.ts +1 -0
  143. package/cdn/media/tiktok-video.dev.js +636 -0
  144. package/cdn/media/tiktok-video.dev.js.map +1 -0
  145. package/cdn/media/tiktok-video.js +2 -0
  146. package/cdn/media/tiktok-video.js.map +1 -0
  147. package/cdn/media/twitch-video.dev.d.ts +1 -0
  148. package/cdn/media/twitch-video.dev.js +627 -0
  149. package/cdn/media/twitch-video.dev.js.map +1 -0
  150. package/cdn/media/twitch-video.js +2 -0
  151. package/cdn/media/twitch-video.js.map +1 -0
  152. package/cdn/media/vimeo-video.dev.d.ts +1 -0
  153. package/cdn/media/vimeo-video.dev.js +2989 -0
  154. package/cdn/media/vimeo-video.dev.js.map +1 -0
  155. package/cdn/media/vimeo-video.js +16 -0
  156. package/cdn/media/vimeo-video.js.map +1 -0
  157. package/cdn/media/youtube-video.dev.d.ts +1 -0
  158. package/cdn/media/youtube-video.dev.js +713 -0
  159. package/cdn/media/youtube-video.dev.js.map +1 -0
  160. package/cdn/media/youtube-video.js +2 -0
  161. package/cdn/media/youtube-video.js.map +1 -0
  162. package/cdn/{media-Cp3acYc8.js → media-BavrGKqa.js} +274 -5
  163. package/cdn/media-BavrGKqa.js.map +1 -0
  164. package/cdn/media-Bmablv4g.js +2 -0
  165. package/cdn/media-Bmablv4g.js.map +1 -0
  166. package/cdn/{media-B_gQXwri.js → media-COIe3uI5.js} +12 -3
  167. package/cdn/media-COIe3uI5.js.map +1 -0
  168. package/cdn/{media-CbWsJJhU.js → media-CPVSKLdk.js} +2 -2
  169. package/cdn/{media-CbWsJJhU.js.map → media-CPVSKLdk.js.map} +1 -1
  170. package/cdn/media-CanBm0Jh.js +41 -0
  171. package/cdn/media-CanBm0Jh.js.map +1 -0
  172. package/cdn/{media-Dq4zmIJa2.js → media-Dq4zmIJa.js} +1 -1
  173. package/cdn/media-Dq4zmIJa.js.map +1 -0
  174. package/cdn/{media-DRo3n8tM.js → media-oa3nyL2o.js} +3 -3
  175. package/cdn/{media-DRo3n8tM.js.map → media-oa3nyL2o.js.map} +1 -1
  176. package/cdn/media-played-ranges-CM2zeOGr.js +2 -0
  177. package/cdn/media-played-ranges-CM2zeOGr.js.map +1 -0
  178. package/cdn/media-played-ranges-Yd9acuMt.js +156 -0
  179. package/cdn/media-played-ranges-Yd9acuMt.js.map +1 -0
  180. package/cdn/{media-suYcjCG22.js → media-suYcjCG2.js} +1 -1
  181. package/cdn/media-suYcjCG2.js.map +1 -0
  182. package/cdn/minimal-ui-8iRZf_72.js +2 -0
  183. package/cdn/{minimal-ui-AFk6Ut5f.js.map → minimal-ui-8iRZf_72.js.map} +1 -1
  184. package/cdn/{minimal-ui--JsmpU2q.js → minimal-ui-BpHxIo4z.js} +5 -5
  185. package/cdn/{minimal-ui--JsmpU2q.js.map → minimal-ui-BpHxIo4z.js.map} +1 -1
  186. package/cdn/{minimal-ui-Bxcpf5Mb.js → minimal-ui-CRKvUmB8.js} +9 -9
  187. package/cdn/{minimal-ui-Bxcpf5Mb.js.map → minimal-ui-CRKvUmB8.js.map} +1 -1
  188. package/cdn/minimal-ui-Et2Wcn7r.js +2 -0
  189. package/cdn/{minimal-ui-BVKu9LWj.js.map → minimal-ui-Et2Wcn7r.js.map} +1 -1
  190. package/cdn/mixin-BqN0V06a.js +2 -0
  191. package/cdn/{mixin-DiB7dIef.js.map → mixin-BqN0V06a.js.map} +1 -1
  192. package/cdn/{mixin-CkNZwQXF.js → mixin-C193v40v.js} +67 -67
  193. package/cdn/mixin-C193v40v.js.map +1 -0
  194. package/cdn/noop-BxkeRIz9.js +6 -0
  195. package/cdn/noop-BxkeRIz9.js.map +1 -0
  196. package/cdn/noop-Ch0IHcOP.js +2 -0
  197. package/cdn/noop-Ch0IHcOP.js.map +1 -0
  198. package/cdn/{player-D4fdOLLk.js → player-B2oraRyD.js} +3 -2
  199. package/cdn/{player-D4fdOLLk.js.map → player-B2oraRyD.js.map} +1 -1
  200. package/cdn/player-BRQLp5bX.js +2 -0
  201. package/cdn/{player-srq1RGTj.js.map → player-BRQLp5bX.js.map} +1 -1
  202. package/cdn/player-BloX4l6F.js +2 -0
  203. package/cdn/{player-iIewo8Y9.js.map → player-BloX4l6F.js.map} +1 -1
  204. package/cdn/{player-B0qnepD5.js → player-CKTAtwit.js} +3 -2
  205. package/cdn/{player-B0qnepD5.js.map → player-CKTAtwit.js.map} +1 -1
  206. package/cdn/{player-C4ix6TQq.js → player-DM9rUXg-.js} +3 -2
  207. package/cdn/{player-C4ix6TQq.js.map → player-DM9rUXg-.js.map} +1 -1
  208. package/cdn/player-rCFqzWrA.js +2 -0
  209. package/cdn/{player-B0ccW5-n.js.map → player-rCFqzWrA.js.map} +1 -1
  210. package/cdn/{poster-element-BP1Ypgbf.js → poster-element-BGr1VQJB.js} +16 -4
  211. package/cdn/poster-element-BGr1VQJB.js.map +1 -0
  212. package/cdn/poster-element-DBmgOyep.js +2 -0
  213. package/cdn/poster-element-DBmgOyep.js.map +1 -0
  214. package/cdn/script-D3ZkiqwO.js +2 -0
  215. package/cdn/script-D3ZkiqwO.js.map +1 -0
  216. package/cdn/script-erPJaaTz.js +33 -0
  217. package/cdn/script-erPJaaTz.js.map +1 -0
  218. package/cdn/seek-button-element-FlgBVoGM.js +2 -0
  219. package/cdn/seek-button-element-FlgBVoGM.js.map +1 -0
  220. package/cdn/{seek-button-element-TErrbilI.js → seek-button-element-XMTLIxZj.js} +6 -5
  221. package/cdn/seek-button-element-XMTLIxZj.js.map +1 -0
  222. package/cdn/{skin-element-wPSb4AAs.js → skin-element-DL-Kqa5f.js} +2 -2
  223. package/cdn/{skin-element-wPSb4AAs.js.map → skin-element-DL-Kqa5f.js.map} +1 -1
  224. package/cdn/{skin-element-1_MG2zgS.js → skin-element-DNytI-uu.js} +2 -2
  225. package/cdn/{skin-element-1_MG2zgS.js.map → skin-element-DNytI-uu.js.map} +1 -1
  226. package/cdn/{text-element-DTB9_2HX.js → text-element-D88ArbZz.js} +3 -3
  227. package/cdn/{text-element-DTB9_2HX.js.map → text-element-D88ArbZz.js.map} +1 -1
  228. package/cdn/text-element-DeWBNKXb.js +2 -0
  229. package/cdn/{text-element-Bsyglab8.js.map → text-element-DeWBNKXb.js.map} +1 -1
  230. package/cdn/{time-slider-chapters-element-DPgaLdBt.js → time-slider-chapters-element-DJ0abZXI.js} +5 -4
  231. package/cdn/time-slider-chapters-element-DJ0abZXI.js.map +1 -0
  232. package/cdn/time-slider-chapters-element-DW8YyJn8.js +2 -0
  233. package/cdn/{time-slider-chapters-element-MdlcovBu.js.map → time-slider-chapters-element-DW8YyJn8.js.map} +1 -1
  234. package/cdn/{translate-text-DP0CzUCC.js → translate-text-BWvoW5-r.js} +2 -7
  235. package/cdn/translate-text-BWvoW5-r.js.map +1 -0
  236. package/cdn/translate-text-TzSgu_oe.js +2 -0
  237. package/cdn/translate-text-TzSgu_oe.js.map +1 -0
  238. package/cdn/{ui-D0AokGxw.js → ui-BU3_2gDQ.js} +8 -8
  239. package/cdn/{ui-D0AokGxw.js.map → ui-BU3_2gDQ.js.map} +1 -1
  240. package/cdn/{ui-p36Szn71.js → ui-BsaWWE4y.js} +10 -10
  241. package/cdn/{ui-p36Szn71.js.map → ui-BsaWWE4y.js.map} +1 -1
  242. package/cdn/ui-C0isALTQ.js +2 -0
  243. package/cdn/{ui-CecDxhTX.js.map → ui-C0isALTQ.js.map} +1 -1
  244. package/cdn/ui-DVpkE1MN.js +2 -0
  245. package/cdn/{ui-ChWM6Xz2.js.map → ui-DVpkE1MN.js.map} +1 -1
  246. package/cdn/video-headless.dev.js +1 -1
  247. package/cdn/video-headless.js +1 -1
  248. package/cdn/video-minimal-ui.dev.js +1 -1
  249. package/cdn/video-minimal-ui.js +1 -1
  250. package/cdn/video-minimal.dev.js +4 -4
  251. package/cdn/video-minimal.dev.js.map +1 -1
  252. package/cdn/video-minimal.js +1 -1
  253. package/cdn/video-minimal.js.map +1 -1
  254. package/cdn/video-ui.dev.js +1 -1
  255. package/cdn/video-ui.js +1 -1
  256. package/cdn/video.dev.js +5 -5
  257. package/cdn/video.dev.js.map +1 -1
  258. package/cdn/video.js +1 -1
  259. package/cdn/video.js.map +1 -1
  260. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  261. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  262. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
  263. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  264. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  265. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  266. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  267. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  268. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  269. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  270. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  271. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  272. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  273. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  274. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  275. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  276. package/dist/default/define/audio/minimal-skin.css +16 -19
  277. package/dist/default/define/audio/skin.css +27 -30
  278. package/dist/default/define/live-audio/minimal-skin.css +16 -19
  279. package/dist/default/define/live-audio/skin.css +27 -30
  280. package/dist/default/define/live-video/minimal-skin.css +20 -19
  281. package/dist/default/define/live-video/skin.css +31 -30
  282. package/dist/default/define/video/minimal-skin.css +20 -19
  283. package/dist/default/define/video/skin.css +31 -30
  284. package/dist/default/media/tiktok-video/media.js +3 -2
  285. package/dist/default/media/tiktok-video/media.js.map +1 -1
  286. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +6 -6
  287. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  288. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +1 -1
  289. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  290. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +4 -4
  291. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  292. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -1
  293. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  294. package/dist/default/ui/playback-rate-button/playback-rate-button-element.js +1 -2
  295. package/dist/default/ui/playback-rate-button/playback-rate-button-element.js.map +1 -1
  296. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  297. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  298. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
  299. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  300. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  301. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  302. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  303. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  304. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  305. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  306. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  307. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  308. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  309. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  310. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  311. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  312. package/dist/dev/define/audio/minimal-skin.css +16 -19
  313. package/dist/dev/define/audio/skin.css +27 -30
  314. package/dist/dev/define/live-audio/minimal-skin.css +16 -19
  315. package/dist/dev/define/live-audio/skin.css +27 -30
  316. package/dist/dev/define/live-video/minimal-skin.css +20 -19
  317. package/dist/dev/define/live-video/skin.css +31 -30
  318. package/dist/dev/define/video/minimal-skin.css +20 -19
  319. package/dist/dev/define/video/skin.css +31 -30
  320. package/dist/dev/media/tiktok-video/media.d.ts.map +1 -1
  321. package/dist/dev/media/tiktok-video/media.js +10 -7
  322. package/dist/dev/media/tiktok-video/media.js.map +1 -1
  323. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js +6 -6
  324. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  325. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +1 -1
  326. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  327. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js +4 -4
  328. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  329. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -1
  330. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  331. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.d.ts.map +1 -1
  332. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js +1 -2
  333. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js.map +1 -1
  334. package/docs/README.md +1 -1
  335. package/docs/concepts/features.md +2 -2
  336. package/docs/concepts/media-sources.md +79 -1
  337. package/docs/concepts/skins.md +31 -30
  338. package/docs/how-to/build-your-own-component.md +1 -1
  339. package/docs/how-to/customize-skins.md +94 -98
  340. package/docs/how-to/migrate-from-media-chrome.md +359 -0
  341. package/docs/how-to/migrate-from-mux-player.md +535 -0
  342. package/docs/how-to/migrate-from-plyr.md +394 -0
  343. package/docs/how-to/migrate-from-video-js-8.md +594 -0
  344. package/docs/llms.txt +9 -0
  345. package/docs/reference/feature-volume.md +3 -1
  346. package/docs/reference/mute-button.md +34 -0
  347. package/docs/reference/volume-slider.md +1 -1
  348. package/package.json +10 -9
  349. package/cdn/bn-DdelKD_n.js +0 -108
  350. package/cdn/bn-DdelKD_n.js.map +0 -1
  351. package/cdn/bn-YS8ruMcO.js +0 -2
  352. package/cdn/bn-YS8ruMcO.js.map +0 -1
  353. package/cdn/compounds-CCvdpvge.js.map +0 -1
  354. package/cdn/compounds-CJ6SbYAh.js +0 -8
  355. package/cdn/compounds-CJ6SbYAh.js.map +0 -1
  356. package/cdn/create-player-BHFyOnWi.js.map +0 -1
  357. package/cdn/create-player-CbpxjDaZ.js +0 -14
  358. package/cdn/create-player-CbpxjDaZ.js.map +0 -1
  359. package/cdn/gesture-element-BNfMI8eh.js +0 -2
  360. package/cdn/hls-js-6lW7L4th.js +0 -2
  361. package/cdn/hls-js-DCQzjzB5.js +0 -2
  362. package/cdn/i18n-DfKGl5Rh.js +0 -2
  363. package/cdn/live-button-element-B_y-ZJBy.js.map +0 -1
  364. package/cdn/live-button-element-CWfkQUoy.js +0 -2
  365. package/cdn/media-5ODYtX1-.js +0 -2
  366. package/cdn/media-5ODYtX1-.js.map +0 -1
  367. package/cdn/media-B_gQXwri.js.map +0 -1
  368. package/cdn/media-CPWNSZFX.js +0 -41
  369. package/cdn/media-CPWNSZFX.js.map +0 -1
  370. package/cdn/media-Cp3acYc8.js.map +0 -1
  371. package/cdn/media-Dq4zmIJa2.js.map +0 -1
  372. package/cdn/media-suYcjCG22.js.map +0 -1
  373. package/cdn/minimal-ui-AFk6Ut5f.js +0 -2
  374. package/cdn/minimal-ui-BVKu9LWj.js +0 -2
  375. package/cdn/mixin-CkNZwQXF.js.map +0 -1
  376. package/cdn/mixin-DiB7dIef.js +0 -2
  377. package/cdn/player-B0ccW5-n.js +0 -2
  378. package/cdn/player-iIewo8Y9.js +0 -2
  379. package/cdn/player-srq1RGTj.js +0 -2
  380. package/cdn/poster-element-BP1Ypgbf.js.map +0 -1
  381. package/cdn/poster-element-S-rr412t.js +0 -2
  382. package/cdn/poster-element-S-rr412t.js.map +0 -1
  383. package/cdn/seek-button-element-DxLmm58Y.js +0 -2
  384. package/cdn/seek-button-element-DxLmm58Y.js.map +0 -1
  385. package/cdn/seek-button-element-TErrbilI.js.map +0 -1
  386. package/cdn/text-element-Bsyglab8.js +0 -2
  387. package/cdn/time-slider-chapters-element-DPgaLdBt.js.map +0 -1
  388. package/cdn/time-slider-chapters-element-MdlcovBu.js +0 -2
  389. package/cdn/translate-text-BPMWpzFm.js +0 -2
  390. package/cdn/translate-text-BPMWpzFm.js.map +0 -1
  391. package/cdn/translate-text-DP0CzUCC.js.map +0 -1
  392. package/cdn/ui-CecDxhTX.js +0 -2
  393. package/cdn/ui-ChWM6Xz2.js +0 -2
@@ -0,0 +1,627 @@
1
+ import { i as isNil, l as isString, o as isNumber, s as isObject, u as isUndefined } from "../predicate-faYxAB6Z.js";
2
+ import { t as deepEqual } from "../deep-equal-DOfcXiSw.js";
3
+ import { t as CustomMediaElement } from "../custom-media-element-D2JoODKd.js";
4
+ import { a as escapeHtml } from "../attributes-c6az3W3y.js";
5
+ import { i as safeDefine } from "../context-OhQY847V.js";
6
+ import { n as createTimeRange, r as createPublicPromise, t as MediaPlayedRangesMixin } from "../media-played-ranges-Yd9acuMt.js";
7
+ import { n as EMPTY_TEXT_TRACKS, r as EMPTY_TIME_RANGES } from "../constants-CsSwyIX6.js";
8
+ import { t as MediaError } from "../media-error-zO-Hg4un.js";
9
+ import { t as MediaAttachMixin } from "../media-attach-mixin-uThv5NL_.js";
10
+
11
+ //#region ../media/dist/dev/dom/twitch/props.js
12
+ const twitchMediaDefaultProps = {
13
+ src: "",
14
+ autoplay: false,
15
+ defaultMuted: false,
16
+ muted: false,
17
+ loop: false,
18
+ controls: false,
19
+ playsInline: true,
20
+ preload: "metadata",
21
+ poster: "",
22
+ source: null
23
+ };
24
+
25
+ //#endregion
26
+ //#region ../media/dist/dev/dom/twitch/player-api.js
27
+ /** Embed origin: where the embed is served from and where commands are posted. */
28
+ const TWITCH_PLAYER_ORIGIN = "https://player.twitch.tv";
29
+ /** Namespace on the commands the host posts, and on the state snapshots that come back. */
30
+ const PLAYER_PROXY_NAMESPACE = "twitch-embed-player-proxy";
31
+ const PLAYBACK_ENDED = "Ended";
32
+ /** Narrow a `message` payload to something the embed sent; any page can post here, so the namespace is the filter. */
33
+ function isTwitchMessage(data) {
34
+ if (!isObject(data)) return false;
35
+ const { namespace, eventName } = data;
36
+ return isString(eventName) && (namespace === "twitch-embed" || namespace === "twitch-embed-player-proxy");
37
+ }
38
+
39
+ //#endregion
40
+ //#region ../media/dist/dev/dom/twitch/source.js
41
+ /**
42
+ * Parse a Twitch source string. Recognizes VOD URLs (`twitch.tv/videos/<id>`
43
+ * and `twitch.tv/?video=<id>`) and channel URLs (`twitch.tv/<channel>`), with
44
+ * or without the `www.` and `go.` hosts, and with or without a trailing slash.
45
+ */
46
+ function parseTwitchSource(src) {
47
+ if (!src) return null;
48
+ const videoId = MATCH_VIDEO.exec(src)?.[1];
49
+ if (videoId) return {
50
+ kind: "video",
51
+ id: videoId,
52
+ channel: null
53
+ };
54
+ const channel = MATCH_CHANNEL.exec(src)?.[1];
55
+ if (channel) return {
56
+ kind: "channel",
57
+ id: null,
58
+ channel
59
+ };
60
+ return null;
61
+ }
62
+ /** Build the iframe `src` URL for an initial Twitch embed from the given props. */
63
+ function buildTwitchIframeSrc(src, props = {}) {
64
+ const parsed = parseTwitchSource(src);
65
+ if (!parsed) return "";
66
+ const { parent, referrerPolicy: _referrerPolicy, ...twitch } = props.source?.engine?.twitch ?? {};
67
+ const params = {
68
+ ...parsed.kind === "video" ? { video: `v${parsed.id}` } : { channel: parsed.channel },
69
+ controls: props.controls === true ? null : false,
70
+ autoplay: props.autoplay === true ? null : false,
71
+ muted: props.defaultMuted ?? twitchMediaDefaultProps.defaultMuted,
72
+ preload: props.preload ?? twitchMediaDefaultProps.preload,
73
+ ...twitch
74
+ };
75
+ const query = new URLSearchParams();
76
+ for (const key in params) {
77
+ const value = params[key];
78
+ if (isNil(value) || value === "") continue;
79
+ query.set(key, String(value));
80
+ }
81
+ for (const host of resolveParentHosts(parent)) query.append("parent", host);
82
+ if (!query.has("parent")) console.warn("[vjs-twitch] The Twitch embed refuses to play without a `parent` hostname. Set `engine.twitch.parent` to the host page.");
83
+ return `${TWITCH_PLAYER_ORIGIN}/?${query.toString()}`;
84
+ }
85
+ /** The configured parent hostnames plus the page's own, deduplicated. */
86
+ function resolveParentHosts(parent) {
87
+ const hosts = [...isString(parent) ? [parent] : parent ?? [], globalThis.location?.hostname];
88
+ return [...new Set(hosts.filter((host) => isString(host) && host !== ""))];
89
+ }
90
+ const MATCH_VIDEO = /(?:^|\/\/)(?:www\.|go\.)?twitch\.tv\/(?:videos?\/|\?video=)(\d+)\/?(?:$|\?)/;
91
+ const MATCH_CHANNEL = /(?:^|\/\/)(?:www\.|go\.)?twitch\.tv\/([a-zA-Z0-9_]+)\/?(?:$|\?)/;
92
+
93
+ //#endregion
94
+ //#region ../media/dist/dev/dom/twitch/media.js
95
+ const TwitchMediaBase = MediaPlayedRangesMixin(EventTarget);
96
+ /**
97
+ * @fires sourcechange - Fired when `source` changes, either directly or by resolving a new `src`. Read `source` for the new value.
98
+ */
99
+ var TwitchMedia = class extends TwitchMediaBase {
100
+ #target = null;
101
+ #messages = null;
102
+ #playerReady = false;
103
+ #pendingLoad = false;
104
+ #rebuilding = false;
105
+ #loadComplete = createPublicPromise();
106
+ #attachId = 0;
107
+ #embedSrc = "";
108
+ #src = twitchMediaDefaultProps.src;
109
+ #autoplay = twitchMediaDefaultProps.autoplay;
110
+ #defaultMuted = twitchMediaDefaultProps.defaultMuted;
111
+ #loop = twitchMediaDefaultProps.loop;
112
+ #controls = twitchMediaDefaultProps.controls;
113
+ #playsInline = twitchMediaDefaultProps.playsInline;
114
+ #preload = twitchMediaDefaultProps.preload;
115
+ #poster = twitchMediaDefaultProps.poster;
116
+ #source = twitchMediaDefaultProps.source;
117
+ #kind = null;
118
+ #playback = null;
119
+ #paused = true;
120
+ #seeking = false;
121
+ #loaded = false;
122
+ #currentTime = 0;
123
+ #duration = NaN;
124
+ #volume = 1;
125
+ #muted = false;
126
+ #playbackRate = 1;
127
+ #progress = 0;
128
+ #readyState = READY_STATE_HAVE_NOTHING;
129
+ #error = null;
130
+ #isFullscreen = false;
131
+ static PLAYER_SOFTWARE_NAME = "twitch-video";
132
+ /** The embed's own window, which every command is posted to. Null until an embed is bound and in a document. */
133
+ get engine() {
134
+ return this.#messages ? this.#target?.contentWindow ?? null : null;
135
+ }
136
+ get target() {
137
+ return this.#target;
138
+ }
139
+ /** Bind the iframe hosting the embed. The embed follows once a URL resolves; `load()` retries if none does yet. */
140
+ attach(target) {
141
+ if (!target || this.#target === target) return;
142
+ if (this.#target) this.detach();
143
+ this.#target = target;
144
+ this.#beginLoad();
145
+ this.#createPlayer();
146
+ }
147
+ detach() {
148
+ if (!this.#target) return;
149
+ this.#attachId++;
150
+ this.#messages?.abort();
151
+ this.#messages = null;
152
+ this.#playerReady = false;
153
+ this.#pendingLoad = false;
154
+ this.#rebuilding = false;
155
+ this.#embedSrc = "";
156
+ this.#target = null;
157
+ this.#loadComplete.resolve();
158
+ this.#resetState();
159
+ }
160
+ destroy() {
161
+ this.detach();
162
+ super.destroy();
163
+ }
164
+ get src() {
165
+ return this.#src;
166
+ }
167
+ /** Twitch VOD or channel URL. Setting it re-derives `source`, carrying its embed parameters over. */
168
+ set src(value) {
169
+ const { engine } = this.#source ?? {};
170
+ const next = {
171
+ ...engine && { engine },
172
+ ...value && { src: value }
173
+ };
174
+ this.source = Object.keys(next).length > 0 ? next : null;
175
+ }
176
+ get currentSrc() {
177
+ return this.#target?.getAttribute("src") ?? "";
178
+ }
179
+ get readyState() {
180
+ return this.#readyState;
181
+ }
182
+ /** Reload the current source, swapping it into the running embed where possible. */
183
+ async load() {
184
+ if (!this.#messages || !this.#playerReady) {
185
+ this.#pendingLoad = !!this.#target;
186
+ if (this.#target && !this.#messages) {
187
+ const load = this.#beginLoad();
188
+ await Promise.resolve();
189
+ if (load !== this.#loadComplete) return;
190
+ this.#pendingLoad = false;
191
+ this.#createPlayer();
192
+ }
193
+ return;
194
+ }
195
+ const load = this.#beginLoad();
196
+ this.#resetState();
197
+ this.dispatchEvent(new Event("emptied"));
198
+ if (!this.#src) {
199
+ load.resolve();
200
+ this.#sendCommand(2);
201
+ return;
202
+ }
203
+ this.dispatchEvent(new Event("loadstart"));
204
+ const parsed = parseTwitchSource(this.#src);
205
+ if (!parsed) {
206
+ this.#error = new MediaError(`Unrecognized Twitch source: ${this.#src}`, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
207
+ this.dispatchEvent(new Event("error"));
208
+ load.resolve();
209
+ return;
210
+ }
211
+ this.#kind = parsed.kind;
212
+ const nextEmbedSrc = buildTwitchIframeSrc(this.#src, this.#snapshotProps());
213
+ if (isContentOnlyChange(this.#embedSrc, nextEmbedSrc)) {
214
+ this.#embedSrc = nextEmbedSrc;
215
+ if (parsed.kind === "video") this.#sendCommand(9, `v${parsed.id}`);
216
+ else this.#sendCommand(5, parsed.channel);
217
+ return;
218
+ }
219
+ this.#embedSrc = nextEmbedSrc;
220
+ this.#playerReady = false;
221
+ this.#rebuilding = true;
222
+ if (this.#target) this.#target.src = nextEmbedSrc;
223
+ }
224
+ #beginLoad() {
225
+ this.#loadComplete.resolve();
226
+ this.#loadComplete = createPublicPromise();
227
+ return this.#loadComplete;
228
+ }
229
+ get paused() {
230
+ if (!this.#playback) return this.#paused;
231
+ return this.#playback !== "Playing" && this.#playback !== "Buffering";
232
+ }
233
+ get ended() {
234
+ if (this.#kind === "channel") return false;
235
+ return this.#playback === PLAYBACK_ENDED;
236
+ }
237
+ get seeking() {
238
+ return this.#seeking;
239
+ }
240
+ async play() {
241
+ await this.#loadComplete;
242
+ if (!this.#src) return;
243
+ this.#paused = false;
244
+ this.#sendCommand(3);
245
+ }
246
+ pause() {
247
+ this.#paused = true;
248
+ this.#sendCommand(2);
249
+ }
250
+ get currentTime() {
251
+ return this.#currentTime;
252
+ }
253
+ set currentTime(value) {
254
+ if (this.#currentTime === value) return;
255
+ this.#currentTime = value;
256
+ this.#afterLoad(() => this.#sendCommand(4, value));
257
+ }
258
+ get duration() {
259
+ return this.#duration;
260
+ }
261
+ get volume() {
262
+ return this.#volume;
263
+ }
264
+ set volume(value) {
265
+ if (this.#volume === value) return;
266
+ this.#volume = value;
267
+ this.dispatchEvent(new Event("volumechange"));
268
+ this.#afterLoad(() => this.#sendCommand(11, value));
269
+ }
270
+ get muted() {
271
+ return this.#muted;
272
+ }
273
+ set muted(value) {
274
+ if (this.#muted === value) return;
275
+ this.#muted = value;
276
+ this.dispatchEvent(new Event("volumechange"));
277
+ this.#afterLoad(() => this.#sendCommand(10, value));
278
+ }
279
+ get playbackRate() {
280
+ return this.#playbackRate;
281
+ }
282
+ set playbackRate(value) {
283
+ this.#playbackRate = value;
284
+ }
285
+ get autoplay() {
286
+ return this.#autoplay;
287
+ }
288
+ set autoplay(value) {
289
+ this.#autoplay = value;
290
+ }
291
+ get defaultMuted() {
292
+ return this.#defaultMuted;
293
+ }
294
+ set defaultMuted(value) {
295
+ this.#defaultMuted = value;
296
+ }
297
+ get loop() {
298
+ return this.#loop;
299
+ }
300
+ set loop(value) {
301
+ this.#loop = value;
302
+ }
303
+ get controls() {
304
+ return this.#controls;
305
+ }
306
+ set controls(value) {
307
+ this.#controls = value;
308
+ }
309
+ get playsInline() {
310
+ return this.#playsInline;
311
+ }
312
+ set playsInline(value) {
313
+ this.#playsInline = value;
314
+ }
315
+ get preload() {
316
+ return this.#preload;
317
+ }
318
+ set preload(value) {
319
+ this.#preload = value;
320
+ }
321
+ get poster() {
322
+ return this.#poster;
323
+ }
324
+ set poster(value) {
325
+ this.#poster = value;
326
+ }
327
+ /** Twitch VOD or channel URL in `src`, plus embed parameters under `engine.twitch`. Replacing it re-derives `src`. */
328
+ get source() {
329
+ return this.#source;
330
+ }
331
+ set source(value) {
332
+ const source = value ?? null;
333
+ if (source === this.#source) return;
334
+ const src = source?.src ?? "";
335
+ const srcChanged = this.#src !== src;
336
+ const engineChanged = !deepEqual(this.#source?.engine?.twitch ?? null, source?.engine?.twitch ?? null);
337
+ this.#source = source;
338
+ this.#src = src;
339
+ if (srcChanged || engineChanged) this.load();
340
+ this.dispatchEvent(new Event("sourcechange"));
341
+ }
342
+ get buffered() {
343
+ return this.#progress > 0 ? createTimeRange(this.#currentTime, this.#currentTime + this.#progress) : EMPTY_TIME_RANGES;
344
+ }
345
+ get seekable() {
346
+ return this.#duration > 0 && Number.isFinite(this.#duration) ? createTimeRange(0, this.#duration) : EMPTY_TIME_RANGES;
347
+ }
348
+ get error() {
349
+ return this.#error;
350
+ }
351
+ get textTracks() {
352
+ return EMPTY_TEXT_TRACKS;
353
+ }
354
+ get isFullscreen() {
355
+ return this.#isFullscreen;
356
+ }
357
+ async requestFullscreen() {
358
+ if (!this.#target?.requestFullscreen) return;
359
+ await this.#target.requestFullscreen();
360
+ this.#isFullscreen = true;
361
+ }
362
+ async exitFullscreen() {
363
+ const doc = globalThis.document;
364
+ if (doc?.fullscreenElement && doc.fullscreenElement === this.#target) await doc.exitFullscreen();
365
+ this.#isFullscreen = false;
366
+ }
367
+ #createPlayer() {
368
+ const target = this.#target;
369
+ if (!target || this.#messages) return false;
370
+ const existingSrc = target.getAttribute("src");
371
+ if (!existingSrc) {
372
+ const initialSrc = buildTwitchIframeSrc(this.#src, this.#snapshotProps());
373
+ if (!initialSrc) {
374
+ this.#loadComplete.resolve();
375
+ return false;
376
+ }
377
+ target.src = initialSrc;
378
+ } else {
379
+ const withParent = withPageParent(existingSrc);
380
+ if (withParent !== existingSrc) target.src = withParent;
381
+ }
382
+ this.#kind = parseTwitchSource(this.#src)?.kind ?? null;
383
+ this.#embedSrc = target.getAttribute("src") ?? "";
384
+ const attachId = this.#attachId;
385
+ this.#messages = new AbortController();
386
+ globalThis.addEventListener("message", (event) => void this.#onMessage(event, attachId), { signal: this.#messages.signal });
387
+ this.dispatchEvent(new Event("loadstart"));
388
+ return true;
389
+ }
390
+ #isStale(attachId) {
391
+ return attachId !== this.#attachId;
392
+ }
393
+ #afterLoad(fn) {
394
+ this.#loadComplete.then(() => {
395
+ if (!this.#messages) return;
396
+ fn();
397
+ }, () => {});
398
+ }
399
+ #sendCommand(command, params) {
400
+ const embedWindow = this.#target?.contentWindow;
401
+ if (!embedWindow) return;
402
+ const message = {
403
+ namespace: PLAYER_PROXY_NAMESPACE,
404
+ eventName: command,
405
+ params
406
+ };
407
+ embedWindow.postMessage(message, TWITCH_PLAYER_ORIGIN);
408
+ }
409
+ #snapshotProps() {
410
+ return {
411
+ autoplay: this.#autoplay,
412
+ defaultMuted: this.#defaultMuted,
413
+ loop: this.#loop,
414
+ controls: this.#controls,
415
+ playsInline: this.#playsInline,
416
+ preload: this.#preload || twitchMediaDefaultProps.preload,
417
+ source: this.#source
418
+ };
419
+ }
420
+ #resetState() {
421
+ this.#kind = null;
422
+ this.#playback = null;
423
+ this.#currentTime = 0;
424
+ this.#duration = NaN;
425
+ this.#muted = false;
426
+ this.#paused = !this.#autoplay;
427
+ this.#playbackRate = 1;
428
+ this.#progress = 0;
429
+ this.#readyState = READY_STATE_HAVE_NOTHING;
430
+ this.#seeking = false;
431
+ this.#loaded = false;
432
+ this.#volume = 1;
433
+ this.#error = null;
434
+ this.#isFullscreen = false;
435
+ }
436
+ async #onMessage(event, attachId) {
437
+ if (this.#isStale(attachId)) return;
438
+ const embedWindow = this.#target?.contentWindow;
439
+ if (!embedWindow || event.source !== embedWindow) return;
440
+ const { data } = event;
441
+ if (!isTwitchMessage(data)) return;
442
+ if (data.namespace === "twitch-embed") {
443
+ await new Promise((resolve) => setTimeout(resolve, STATE_SETTLE_MS));
444
+ if (this.#isStale(attachId)) return;
445
+ this.#onEmbedEvent(data.eventName);
446
+ return;
447
+ }
448
+ if (data.eventName === "UPDATE_STATE") this.#onUpdateState(data.params ?? {});
449
+ }
450
+ #onEmbedEvent(eventName) {
451
+ if (eventName !== "ready" && !this.#src) return;
452
+ switch (eventName) {
453
+ case "ready":
454
+ this.#playerReady = true;
455
+ this.#rebuilding = false;
456
+ if (this.#pendingLoad) {
457
+ this.#pendingLoad = false;
458
+ this.load();
459
+ return;
460
+ }
461
+ this.#onLoaded();
462
+ return;
463
+ case "seek":
464
+ this.#seeking = true;
465
+ this.dispatchEvent(new Event("seeking"));
466
+ return;
467
+ case "playing":
468
+ if (this.#seeking) {
469
+ this.#seeking = false;
470
+ this.dispatchEvent(new Event("seeked"));
471
+ }
472
+ this.#readyState = READY_STATE_HAVE_FUTURE_DATA;
473
+ this.dispatchEvent(new Event("playing"));
474
+ return;
475
+ case "ended":
476
+ this.dispatchEvent(new Event("ended"));
477
+ if (this.#loop) {
478
+ this.currentTime = 0;
479
+ this.play();
480
+ }
481
+ return;
482
+ default: this.dispatchEvent(new Event(eventName));
483
+ }
484
+ }
485
+ #onUpdateState(state) {
486
+ if (this.#rebuilding) return;
487
+ if (!this.#src) return;
488
+ if (this.#playerReady && !this.#loaded) this.#onLoaded();
489
+ if (state.playback && state.playback !== this.#playback) {
490
+ if (state.playback === "Buffering") this.dispatchEvent(new Event("waiting"));
491
+ this.#playback = state.playback;
492
+ }
493
+ if (this.#kind !== "channel" && isNumber(state.duration) && state.duration !== this.#duration) {
494
+ this.#duration = state.duration;
495
+ this.dispatchEvent(new Event("durationchange"));
496
+ }
497
+ if (isNumber(state.currentTime) && state.currentTime !== this.#currentTime) {
498
+ this.#currentTime = state.currentTime;
499
+ this.dispatchEvent(new Event("timeupdate"));
500
+ }
501
+ const volumeChanged = isNumber(state.volume) && state.volume !== this.#volume;
502
+ const mutedChanged = !isUndefined(state.muted) && state.muted !== this.#muted;
503
+ if (volumeChanged || mutedChanged) {
504
+ if (isNumber(state.volume)) this.#volume = state.volume;
505
+ if (!isUndefined(state.muted)) this.#muted = state.muted;
506
+ this.dispatchEvent(new Event("volumechange"));
507
+ }
508
+ const bufferSize = state.stats?.videoStats?.bufferSize;
509
+ if (isNumber(bufferSize) && bufferSize !== this.#progress) {
510
+ this.#progress = bufferSize;
511
+ if (this.#readyState >= READY_STATE_HAVE_FUTURE_DATA && bufferSize > 0) this.#readyState = READY_STATE_HAVE_ENOUGH_DATA;
512
+ this.dispatchEvent(new Event("progress"));
513
+ }
514
+ }
515
+ #onLoaded() {
516
+ if (this.#loaded) return;
517
+ this.#loaded = true;
518
+ this.#readyState = READY_STATE_HAVE_METADATA;
519
+ this.dispatchEvent(new Event("loadedmetadata"));
520
+ if (this.#kind === "channel") {
521
+ this.#duration = Number.POSITIVE_INFINITY;
522
+ this.dispatchEvent(new Event("durationchange"));
523
+ }
524
+ this.dispatchEvent(new Event("loadcomplete"));
525
+ this.#loadComplete.resolve();
526
+ }
527
+ };
528
+ function isContentOnlyChange(current, next) {
529
+ const currentBase = withoutContent(current);
530
+ const nextBase = withoutContent(next);
531
+ return currentBase !== null && currentBase === nextBase;
532
+ }
533
+ function withPageParent(embedSrc) {
534
+ const hostname = globalThis.location?.hostname;
535
+ if (!hostname) return embedSrc;
536
+ let url;
537
+ try {
538
+ url = new URL(embedSrc);
539
+ } catch {
540
+ return embedSrc;
541
+ }
542
+ if (url.origin !== "https://player.twitch.tv") return embedSrc;
543
+ if (url.searchParams.getAll("parent").includes(hostname)) return embedSrc;
544
+ url.searchParams.append("parent", hostname);
545
+ return url.toString();
546
+ }
547
+ function withoutContent(embedSrc) {
548
+ if (!embedSrc) return null;
549
+ try {
550
+ const url = new URL(embedSrc);
551
+ url.searchParams.delete("video");
552
+ url.searchParams.delete("channel");
553
+ return url.toString();
554
+ } catch {
555
+ return null;
556
+ }
557
+ }
558
+ const STATE_SETTLE_MS = 10;
559
+ const READY_STATE_HAVE_NOTHING = 0;
560
+ const READY_STATE_HAVE_METADATA = 1;
561
+ const READY_STATE_HAVE_FUTURE_DATA = 3;
562
+ const READY_STATE_HAVE_ENOUGH_DATA = 4;
563
+
564
+ //#endregion
565
+ //#region src/media/twitch-video/media.ts
566
+ var TwitchCustomMediaElement = class extends CustomMediaElement("iframe", TwitchMedia) {
567
+ static {
568
+ this.getTemplateHTML = (attrs) => {
569
+ const initialSrc = buildTwitchIframeSrc(attrs.src ?? "", templateAttrsToEmbedProps(attrs));
570
+ return `
571
+ <style>
572
+ :host {
573
+ display: inline-block;
574
+ min-width: 300px;
575
+ min-height: 150px;
576
+ position: relative;
577
+ }
578
+ iframe {
579
+ position: absolute;
580
+ inset: 0;
581
+ width: 100%;
582
+ height: 100%;
583
+ border: 0;
584
+ }
585
+ :host(:not([controls])) {
586
+ pointer-events: none;
587
+ }
588
+ </style>
589
+ <iframe
590
+ part="iframe"
591
+ ${initialSrc ? ` src="${escapeHtml(initialSrc)}"` : ""}
592
+ allow="accelerometer; fullscreen; autoplay; encrypted-media; picture-in-picture;"
593
+ sandbox="allow-modals allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"
594
+ scrolling="no"
595
+ frameborder="0"
596
+ width="100%"
597
+ height="100%"
598
+ referrerpolicy="${escapeHtml(attrs.referrerpolicy ?? "")}"
599
+ ></iframe>
600
+ `;
601
+ };
602
+ }
603
+ };
604
+ function templateAttrsToEmbedProps(attrs) {
605
+ return {
606
+ autoplay: attrs.autoplay !== void 0,
607
+ defaultMuted: attrs.muted !== void 0,
608
+ loop: attrs.loop !== void 0,
609
+ controls: attrs.controls !== void 0,
610
+ playsInline: attrs.playsinline !== void 0,
611
+ preload: attrs.preload ?? "metadata"
612
+ };
613
+ }
614
+ var TwitchVideo = class extends MediaAttachMixin(TwitchCustomMediaElement) {};
615
+
616
+ //#endregion
617
+ //#region src/define/media/twitch-video.ts
618
+ var TwitchVideoElement = class extends TwitchVideo {
619
+ static {
620
+ this.tagName = "twitch-video";
621
+ }
622
+ };
623
+ safeDefine(TwitchVideoElement);
624
+
625
+ //#endregion
626
+ export { TwitchVideoElement };
627
+ //# sourceMappingURL=twitch-video.dev.js.map