@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,713 @@
1
+ import { o as isNumber, 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 { t as noop } from "../noop-BxkeRIz9.js";
7
+ import { t as loadScript } from "../script-erPJaaTz.js";
8
+ import { n as createTimeRange, r as createPublicPromise, t as MediaPlayedRangesMixin } from "../media-played-ranges-Yd9acuMt.js";
9
+ import { n as tryCall, t as serializeEmbedParams } from "../embed-params-W6T88S8x.js";
10
+ import { n as EMPTY_TEXT_TRACKS, r as EMPTY_TIME_RANGES } from "../constants-CsSwyIX6.js";
11
+ import { t as MediaError } from "../media-error-zO-Hg4un.js";
12
+ import { t as MediaAttachMixin } from "../media-attach-mixin-uThv5NL_.js";
13
+
14
+ //#region ../media/dist/dev/dom/youtube/props.js
15
+ const youtubeMediaDefaultProps = {
16
+ src: "",
17
+ autoplay: false,
18
+ defaultMuted: false,
19
+ muted: false,
20
+ loop: false,
21
+ controls: false,
22
+ playsInline: true,
23
+ preload: "metadata",
24
+ poster: "",
25
+ source: null
26
+ };
27
+
28
+ //#endregion
29
+ //#region ../media/dist/dev/dom/youtube/source.js
30
+ /**
31
+ * Parse a YouTube source string. Recognizes raw 11-character ids, `youtu.be`
32
+ * short links, `watch?v=`, `embed/`, `v/`, `shorts/` and `live/` URLs (with or
33
+ * without the `-nocookie` host), playlist URLs via the `list` parameter, and
34
+ * start times via the `t` parameter.
35
+ */
36
+ function parseYouTubeSource(src) {
37
+ if (!src) return null;
38
+ if (/^[\w-]{11}$/.test(src)) return {
39
+ id: src,
40
+ kind: "video",
41
+ listId: null,
42
+ startTime: null,
43
+ noCookie: false
44
+ };
45
+ const noCookie = src.includes("-nocookie");
46
+ const videoMatch = VIDEO_MATCH_SRC.exec(src);
47
+ const listMatch = PLAYLIST_MATCH_SRC.exec(src);
48
+ const videoId = videoMatch?.[1] ?? null;
49
+ const id = videoId === "videoseries" ? null : videoId;
50
+ if (!id && !listMatch) return null;
51
+ return {
52
+ id,
53
+ kind: id ? "video" : "playlist",
54
+ listId: listMatch?.[1] ?? null,
55
+ startTime: parseStartTime(src),
56
+ noCookie
57
+ };
58
+ }
59
+ /** Build the iframe `src` URL for an initial YouTube embed from the given props. */
60
+ function buildYouTubeIframeSrc(src, props = {}) {
61
+ const parsed = parseYouTubeSource(src);
62
+ if (!parsed) return "";
63
+ const embedBase = parsed.noCookie ? EMBED_BASE_NOCOOKIE : EMBED_BASE;
64
+ const params = {
65
+ controls: props.controls === true ? null : 0,
66
+ autoplay: props.autoplay,
67
+ loop: props.loop,
68
+ mute: props.defaultMuted,
69
+ playsinline: props.playsInline ?? youtubeMediaDefaultProps.playsInline,
70
+ preload: props.preload ?? youtubeMediaDefaultProps.preload,
71
+ enablejsapi: 1,
72
+ rel: 0,
73
+ iv_load_policy: 3,
74
+ start: parsed.startTime,
75
+ ...props.source?.engine?.youtube ?? void 0
76
+ };
77
+ if (parsed.kind === "playlist" && parsed.listId) return `${embedBase}?${serializeEmbedParams({
78
+ listType: "playlist",
79
+ list: parsed.listId,
80
+ ...params
81
+ })}`;
82
+ return `${embedBase}/${parsed.id}?${serializeEmbedParams(params)}`;
83
+ }
84
+ /**
85
+ * Parse the `t` parameter from a YouTube URL and convert it to seconds.
86
+ * Supports formats like: `t=171`, `t=171s`, `t=2m51s`, `t=2m`, `t=1h30m15s`.
87
+ */
88
+ function parseStartTime(url) {
89
+ const tValue = /[?&]t=([\dhms]+)/i.exec(url)?.[1]?.toLowerCase();
90
+ if (!tValue) return null;
91
+ let totalSeconds = 0;
92
+ let hasValue = false;
93
+ const hours = /(\d+)h/.exec(tValue)?.[1];
94
+ if (hours) {
95
+ totalSeconds += Number.parseInt(hours, 10) * 3600;
96
+ hasValue = true;
97
+ }
98
+ const minutes = /(\d+)m/.exec(tValue)?.[1];
99
+ if (minutes) {
100
+ totalSeconds += Number.parseInt(minutes, 10) * 60;
101
+ hasValue = true;
102
+ }
103
+ const seconds = /(\d+)s?$/.exec(tValue)?.[1];
104
+ if (seconds) {
105
+ totalSeconds += Number.parseInt(seconds, 10);
106
+ hasValue = true;
107
+ }
108
+ return hasValue ? totalSeconds : null;
109
+ }
110
+ const EMBED_BASE = "https://www.youtube.com/embed";
111
+ const EMBED_BASE_NOCOOKIE = "https://www.youtube-nocookie.com/embed";
112
+ const VIDEO_MATCH_SRC = /(?:youtu\.be\/|youtube(?:-nocookie)?\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=|shorts\/|live\/))((?:\w|-){11})/;
113
+ const PLAYLIST_MATCH_SRC = /(?:youtu\.be\/|youtube(?:-nocookie)?\.com\/.*?[?&]list=)([\w-]+)/;
114
+
115
+ //#endregion
116
+ //#region ../media/dist/dev/dom/youtube/iframe-api.js
117
+ const API_URL = "https://www.youtube.com/iframe_api";
118
+ /** Load the iframe API once, reusing it if another host already pulled it in. */
119
+ async function loadYouTubeApi() {
120
+ const existing = globalThis.YT;
121
+ if (existing?.Player) return existing;
122
+ await loadScript(API_URL);
123
+ const api = globalThis.YT;
124
+ if (!api) throw new Error("YouTube iframe API failed to load");
125
+ await new Promise((resolve) => api.ready(resolve));
126
+ return api;
127
+ }
128
+ const youtubeErrorCodeToMediaErrorCode = {
129
+ 2: MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED,
130
+ 5: MediaError.MEDIA_ERR_DECODE,
131
+ 100: MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED,
132
+ 101: MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED,
133
+ 150: MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED
134
+ };
135
+
136
+ //#endregion
137
+ //#region ../media/dist/dev/dom/youtube/media.js
138
+ const YouTubeMediaBase = MediaPlayedRangesMixin(EventTarget);
139
+ var YouTubeMedia = class extends YouTubeMediaBase {
140
+ #target = null;
141
+ #player = null;
142
+ #playerReady = false;
143
+ #pendingLoad = false;
144
+ #creatingPlayer = false;
145
+ #loadComplete = createPublicPromise();
146
+ #attachId = 0;
147
+ #src = youtubeMediaDefaultProps.src;
148
+ #autoplay = youtubeMediaDefaultProps.autoplay;
149
+ #defaultMuted = youtubeMediaDefaultProps.defaultMuted;
150
+ #loop = youtubeMediaDefaultProps.loop;
151
+ #controls = youtubeMediaDefaultProps.controls;
152
+ #playsInline = youtubeMediaDefaultProps.playsInline;
153
+ #preload = youtubeMediaDefaultProps.preload;
154
+ #poster = youtubeMediaDefaultProps.poster;
155
+ #source = youtubeMediaDefaultProps.source;
156
+ #paused = true;
157
+ #ended = false;
158
+ #seeking = false;
159
+ #loaded = false;
160
+ #playFired = false;
161
+ #currentTime = 0;
162
+ #duration = NaN;
163
+ #volume = 1;
164
+ #muted = false;
165
+ #playbackRate = 1;
166
+ #progress = 0;
167
+ #readyState = READY_STATE_HAVE_NOTHING;
168
+ #error = null;
169
+ #isFullscreen = false;
170
+ #pollInterval = null;
171
+ #textTracksHost = null;
172
+ #textTracksDisconnect = null;
173
+ static PLAYER_SOFTWARE_NAME = "youtube-video";
174
+ /** Underlying YouTube iframe API player instance (null until the API loads). */
175
+ get engine() {
176
+ return this.#player;
177
+ }
178
+ get target() {
179
+ return this.#target;
180
+ }
181
+ /**
182
+ * Bind the iframe hosting the embed. The player follows once an embed URL can be resolved,
183
+ * which may not be now: an iframe attached before `src` is set is picked up by the next `load()`.
184
+ */
185
+ attach(target) {
186
+ if (!target || this.#target === target) return;
187
+ if (this.#target) this.detach();
188
+ this.#target = target;
189
+ this.#beginLoad();
190
+ this.#createPlayer();
191
+ }
192
+ detach() {
193
+ if (!this.#target) return;
194
+ this.#attachId++;
195
+ this.#stopPolling();
196
+ this.#teardownTextTracks();
197
+ tryCall(() => this.#player?.destroy());
198
+ this.#player = null;
199
+ this.#playerReady = false;
200
+ this.#pendingLoad = false;
201
+ this.#creatingPlayer = false;
202
+ this.#target = null;
203
+ this.#loadComplete.resolve();
204
+ this.#resetState();
205
+ }
206
+ destroy() {
207
+ this.detach();
208
+ super.destroy();
209
+ }
210
+ get src() {
211
+ return this.#src;
212
+ }
213
+ /** YouTube URL or id. Setting it re-derives `source`, carrying its player parameters over. */
214
+ set src(value) {
215
+ const { engine } = this.#source ?? {};
216
+ const next = {
217
+ ...engine && { engine },
218
+ ...value && { src: value }
219
+ };
220
+ this.source = Object.keys(next).length > 0 ? next : null;
221
+ }
222
+ get currentSrc() {
223
+ return this.#target?.getAttribute("src") ?? "";
224
+ }
225
+ get readyState() {
226
+ return this.#readyState;
227
+ }
228
+ /** Reload the current source via the iframe API; deferred until the player is ready. */
229
+ async load() {
230
+ if (!this.#player || !this.#playerReady) {
231
+ this.#pendingLoad = !!this.#target;
232
+ if (this.#target && !this.#player && !this.#creatingPlayer) {
233
+ const load = this.#beginLoad();
234
+ await Promise.resolve();
235
+ if (load !== this.#loadComplete) return;
236
+ this.#createPlayer();
237
+ }
238
+ return;
239
+ }
240
+ const load = this.#beginLoad();
241
+ this.#resetState();
242
+ this.dispatchEvent(new Event("emptied"));
243
+ if (!this.#src) {
244
+ load.resolve();
245
+ this.#stopPolling();
246
+ tryCall(() => this.#player?.stopVideo());
247
+ return;
248
+ }
249
+ this.dispatchEvent(new Event("loadstart"));
250
+ const parsed = parseYouTubeSource(this.#src);
251
+ if (!parsed) {
252
+ this.#error = new MediaError(`Unrecognized YouTube source: ${this.#src}`, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
253
+ this.dispatchEvent(new Event("error"));
254
+ load.resolve();
255
+ return;
256
+ }
257
+ if (parsed.kind === "playlist" && parsed.listId) {
258
+ const options = {
259
+ list: parsed.listId,
260
+ listType: "playlist"
261
+ };
262
+ if (this.#autoplay) this.#player.loadPlaylist(options);
263
+ else this.#player.cuePlaylist(options);
264
+ } else if (parsed.id) {
265
+ const options = { videoId: parsed.id };
266
+ if (parsed.startTime != null) options.startSeconds = parsed.startTime;
267
+ if (this.#autoplay) this.#player.loadVideoById(options);
268
+ else this.#player.cueVideoById(options);
269
+ }
270
+ }
271
+ #beginLoad() {
272
+ this.#loadComplete.resolve();
273
+ this.#loadComplete = createPublicPromise();
274
+ return this.#loadComplete;
275
+ }
276
+ get paused() {
277
+ return this.#paused;
278
+ }
279
+ get ended() {
280
+ return this.#ended;
281
+ }
282
+ get seeking() {
283
+ return this.#seeking;
284
+ }
285
+ async play() {
286
+ await this.#loadComplete;
287
+ if (!this.#src) return;
288
+ this.#player?.playVideo();
289
+ }
290
+ pause() {
291
+ this.#player?.pauseVideo();
292
+ }
293
+ get currentTime() {
294
+ return this.#currentTime;
295
+ }
296
+ set currentTime(value) {
297
+ if (this.#currentTime === value) return;
298
+ this.#currentTime = value;
299
+ this.#afterLoad((p) => p.seekTo(value, true));
300
+ }
301
+ get duration() {
302
+ return this.#duration;
303
+ }
304
+ get volume() {
305
+ return this.#volume;
306
+ }
307
+ set volume(value) {
308
+ if (this.#volume === value) return;
309
+ this.#volume = value;
310
+ this.#afterLoad((p) => p.setVolume(value * 100));
311
+ }
312
+ get muted() {
313
+ return this.#muted;
314
+ }
315
+ set muted(value) {
316
+ if (this.#muted === value) return;
317
+ this.#muted = value;
318
+ this.#afterLoad((p) => value ? p.mute() : p.unMute());
319
+ }
320
+ get playbackRate() {
321
+ return this.#playbackRate;
322
+ }
323
+ set playbackRate(value) {
324
+ if (this.#playbackRate === value) return;
325
+ this.#playbackRate = value;
326
+ this.#afterLoad((p) => p.setPlaybackRate(value));
327
+ }
328
+ get autoplay() {
329
+ return this.#autoplay;
330
+ }
331
+ set autoplay(value) {
332
+ this.#autoplay = value;
333
+ }
334
+ get defaultMuted() {
335
+ return this.#defaultMuted;
336
+ }
337
+ set defaultMuted(value) {
338
+ this.#defaultMuted = value;
339
+ }
340
+ get loop() {
341
+ return this.#loop;
342
+ }
343
+ set loop(value) {
344
+ this.#loop = value;
345
+ }
346
+ get controls() {
347
+ return this.#controls;
348
+ }
349
+ set controls(value) {
350
+ this.#controls = value;
351
+ }
352
+ get playsInline() {
353
+ return this.#playsInline;
354
+ }
355
+ set playsInline(value) {
356
+ this.#playsInline = value;
357
+ }
358
+ get preload() {
359
+ return this.#preload;
360
+ }
361
+ set preload(value) {
362
+ this.#preload = value;
363
+ }
364
+ get poster() {
365
+ return this.#poster;
366
+ }
367
+ set poster(value) {
368
+ this.#poster = value;
369
+ }
370
+ /** YouTube URL or id in `src`, plus player parameters under `engine.youtube`. Replacing it re-derives `src`. */
371
+ get source() {
372
+ return this.#source;
373
+ }
374
+ set source(value) {
375
+ const source = value ?? null;
376
+ if (source === this.#source) return;
377
+ const src = source?.src ?? "";
378
+ const srcChanged = this.#src !== src;
379
+ const engineChanged = !deepEqual(this.#source?.engine?.youtube ?? null, source?.engine?.youtube ?? null);
380
+ this.#source = source;
381
+ this.#src = src;
382
+ if (srcChanged || engineChanged) this.load();
383
+ this.dispatchEvent(new Event("sourcechange"));
384
+ }
385
+ get buffered() {
386
+ return this.#progress > 0 ? createTimeRange(0, this.#progress) : EMPTY_TIME_RANGES;
387
+ }
388
+ get seekable() {
389
+ return this.#duration > 0 && Number.isFinite(this.#duration) ? createTimeRange(0, this.#duration) : EMPTY_TIME_RANGES;
390
+ }
391
+ get error() {
392
+ return this.#error;
393
+ }
394
+ get textTracks() {
395
+ this.#textTracksHost ??= globalThis.document?.createElement("video") ?? null;
396
+ return this.#textTracksHost?.textTracks ?? EMPTY_TEXT_TRACKS;
397
+ }
398
+ get isFullscreen() {
399
+ return this.#isFullscreen;
400
+ }
401
+ async requestFullscreen() {
402
+ if (!this.#target?.requestFullscreen) return;
403
+ await this.#target.requestFullscreen();
404
+ this.#isFullscreen = true;
405
+ }
406
+ async exitFullscreen() {
407
+ const doc = globalThis.document;
408
+ if (doc?.fullscreenElement && doc.fullscreenElement === this.#target) await doc.exitFullscreen();
409
+ this.#isFullscreen = false;
410
+ }
411
+ #createPlayer() {
412
+ const target = this.#target;
413
+ if (!target || this.#player || this.#creatingPlayer) return false;
414
+ if (!target.getAttribute("src")) {
415
+ const initialSrc = buildYouTubeIframeSrc(this.#src, this.#snapshotProps());
416
+ if (!initialSrc) {
417
+ this.#loadComplete.resolve();
418
+ return false;
419
+ }
420
+ target.src = initialSrc;
421
+ }
422
+ this.#creatingPlayer = true;
423
+ this.dispatchEvent(new Event("loadstart"));
424
+ this.#createPlayerApi(target);
425
+ return true;
426
+ }
427
+ async #createPlayerApi(target) {
428
+ const attachId = this.#attachId;
429
+ let api;
430
+ try {
431
+ api = await loadYouTubeApi();
432
+ } catch {
433
+ if (this.#isStale(attachId)) return;
434
+ this.#creatingPlayer = false;
435
+ this.#error = new MediaError("Failed to load the YouTube iframe API", MediaError.MEDIA_ERR_NETWORK);
436
+ this.dispatchEvent(new Event("error"));
437
+ this.#loadComplete.resolve();
438
+ return;
439
+ }
440
+ if (this.#isStale(attachId) || this.#target !== target) return;
441
+ const player = new api.Player(target, { events: {
442
+ onReady: () => {
443
+ if (this.#isStale(attachId)) return;
444
+ this.#onPlayerReady();
445
+ },
446
+ onError: (event) => {
447
+ if (this.#isStale(attachId)) return;
448
+ this.#onError(event.data);
449
+ }
450
+ } });
451
+ this.#player = player;
452
+ this.#creatingPlayer = false;
453
+ this.#bindPlayerEvents(player, attachId);
454
+ this.#setupTextTracks(player);
455
+ }
456
+ #isStale(attachId) {
457
+ return attachId !== this.#attachId;
458
+ }
459
+ #afterLoad(fn) {
460
+ this.#loadComplete.then(() => {
461
+ const player = this.#player;
462
+ if (player) tryCall(() => fn(player));
463
+ }, noop);
464
+ }
465
+ #snapshotProps() {
466
+ return {
467
+ autoplay: this.#autoplay,
468
+ defaultMuted: this.#defaultMuted,
469
+ loop: this.#loop,
470
+ controls: this.#controls,
471
+ playsInline: this.#playsInline,
472
+ preload: this.#preload || youtubeMediaDefaultProps.preload,
473
+ source: this.#source
474
+ };
475
+ }
476
+ #resetState() {
477
+ this.#currentTime = 0;
478
+ this.#duration = NaN;
479
+ this.#muted = false;
480
+ this.#paused = !this.#autoplay;
481
+ this.#ended = false;
482
+ this.#playbackRate = 1;
483
+ this.#progress = 0;
484
+ this.#readyState = READY_STATE_HAVE_NOTHING;
485
+ this.#seeking = false;
486
+ this.#loaded = false;
487
+ this.#playFired = false;
488
+ this.#volume = 1;
489
+ this.#error = null;
490
+ this.#isFullscreen = false;
491
+ }
492
+ #onPlayerReady() {
493
+ this.#playerReady = true;
494
+ if (this.#pendingLoad) {
495
+ this.#pendingLoad = false;
496
+ this.load();
497
+ return;
498
+ }
499
+ this.#onLoaded();
500
+ }
501
+ #onLoaded() {
502
+ if (this.#loaded) return;
503
+ this.#loaded = true;
504
+ this.#readyState = READY_STATE_HAVE_METADATA;
505
+ const player = this.#player;
506
+ if (player) {
507
+ this.#duration = player.getDuration() || NaN;
508
+ this.#muted = player.isMuted();
509
+ this.#volume = player.getVolume() / 100;
510
+ this.#playbackRate = player.getPlaybackRate();
511
+ }
512
+ for (const type of [
513
+ "loadedmetadata",
514
+ "durationchange",
515
+ "volumechange",
516
+ "loadcomplete"
517
+ ]) this.dispatchEvent(new Event(type));
518
+ this.#loadComplete.resolve();
519
+ this.#startPolling();
520
+ }
521
+ #onError(code) {
522
+ const error = new MediaError(`YouTube iframe player error #${code}; visit https://developers.google.com/youtube/iframe_api_reference#onError for the full error message.`, youtubeErrorCodeToMediaErrorCode[code] ?? MediaError.MEDIA_ERR_CUSTOM, true);
523
+ error.data = { youtubeErrorCode: code };
524
+ this.#error = error;
525
+ this.dispatchEvent(new Event("error"));
526
+ this.#loadComplete.resolve();
527
+ }
528
+ #bindPlayerEvents(player, attachId) {
529
+ const emit = (type) => this.dispatchEvent(new Event(type));
530
+ player.addEventListener("onStateChange", ({ data: state }) => {
531
+ if (this.#isStale(attachId)) return;
532
+ if (this.#src && !this.#loaded && state !== -1) this.#onLoaded();
533
+ if (state === 1 || state === 3) {
534
+ if (!this.#playFired) {
535
+ this.#playFired = true;
536
+ this.#paused = false;
537
+ this.#ended = false;
538
+ emit("play");
539
+ }
540
+ this.#syncTextTracks(player);
541
+ }
542
+ if (state === 3) emit("waiting");
543
+ else if (state === 1) {
544
+ if (this.#seeking) {
545
+ this.#seeking = false;
546
+ emit("seeked");
547
+ }
548
+ this.#readyState = READY_STATE_HAVE_FUTURE_DATA;
549
+ this.#paused = false;
550
+ emit("playing");
551
+ } else if (state === 2) {
552
+ const diff = Math.abs(player.getCurrentTime() - this.#currentTime);
553
+ if (!this.#seeking && diff > .1) {
554
+ this.#seeking = true;
555
+ emit("seeking");
556
+ }
557
+ this.#playFired = false;
558
+ this.#paused = true;
559
+ emit("pause");
560
+ } else if (state === 0) {
561
+ this.#playFired = false;
562
+ this.#paused = true;
563
+ emit("pause");
564
+ this.#ended = true;
565
+ emit("ended");
566
+ if (this.#loop) this.play();
567
+ }
568
+ });
569
+ player.addEventListener("onPlaybackRateChange", () => {
570
+ if (this.#isStale(attachId)) return;
571
+ this.#playbackRate = player.getPlaybackRate();
572
+ emit("ratechange");
573
+ });
574
+ player.addEventListener("onVolumeChange", () => {
575
+ if (this.#isStale(attachId)) return;
576
+ this.#volume = player.getVolume() / 100;
577
+ this.#muted = player.isMuted();
578
+ emit("volumechange");
579
+ });
580
+ }
581
+ #startPolling() {
582
+ this.#stopPolling();
583
+ this.#pollInterval = setInterval(() => this.#poll(), 50);
584
+ }
585
+ #stopPolling() {
586
+ if (this.#pollInterval !== null) {
587
+ clearInterval(this.#pollInterval);
588
+ this.#pollInterval = null;
589
+ }
590
+ }
591
+ #poll() {
592
+ const player = this.#player;
593
+ if (!player) return;
594
+ const time = player.getCurrentTime();
595
+ const duration = player.getDuration();
596
+ const bufferedEnd = player.getVideoLoadedFraction() * duration;
597
+ if (this.#seeking && bufferedEnd > .1) {
598
+ this.#seeking = false;
599
+ this.dispatchEvent(new Event("seeked"));
600
+ } else if (!this.#seeking && Math.abs(time - this.#currentTime) > .1) {
601
+ this.#seeking = true;
602
+ this.dispatchEvent(new Event("seeking"));
603
+ }
604
+ if (time !== this.#currentTime) {
605
+ this.#currentTime = time;
606
+ this.dispatchEvent(new Event("timeupdate"));
607
+ }
608
+ if (isNumber(duration) && duration > 0 && duration !== this.#duration) {
609
+ this.#duration = duration;
610
+ this.dispatchEvent(new Event("durationchange"));
611
+ }
612
+ if (bufferedEnd !== this.#progress) {
613
+ this.#progress = bufferedEnd;
614
+ if (duration > 0 && bufferedEnd >= duration) this.#readyState = READY_STATE_HAVE_ENOUGH_DATA;
615
+ this.dispatchEvent(new Event("progress"));
616
+ }
617
+ }
618
+ #setupTextTracks(player) {
619
+ const doc = globalThis.document;
620
+ if (isUndefined(doc)) return;
621
+ this.#teardownTextTracks();
622
+ const host = doc.createElement("video");
623
+ this.#textTracksHost = host;
624
+ this.#textTracksDisconnect = new AbortController();
625
+ host.textTracks?.addEventListener?.("change", () => {
626
+ const showing = Array.from(host.textTracks).find((t) => t.mode === "showing");
627
+ tryCall(() => player.setOption("captions", "track", showing ? { languageCode: showing.language } : {}));
628
+ }, { signal: this.#textTracksDisconnect.signal });
629
+ }
630
+ #syncTextTracks(player) {
631
+ const host = this.#textTracksHost;
632
+ if (!host) return;
633
+ const trackList = player.getOption("captions", "tracklist") ?? [];
634
+ for (const track of trackList) {
635
+ if (!track.languageCode) continue;
636
+ if (Array.from(host.textTracks).some((t) => t.language === track.languageCode)) continue;
637
+ tryCall(() => host.addTextTrack?.("subtitles", track.displayName ?? "", track.languageCode));
638
+ }
639
+ }
640
+ #teardownTextTracks() {
641
+ this.#textTracksDisconnect?.abort();
642
+ this.#textTracksDisconnect = null;
643
+ this.#textTracksHost = null;
644
+ }
645
+ };
646
+ const READY_STATE_HAVE_NOTHING = 0;
647
+ const READY_STATE_HAVE_METADATA = 1;
648
+ const READY_STATE_HAVE_FUTURE_DATA = 3;
649
+ const READY_STATE_HAVE_ENOUGH_DATA = 4;
650
+
651
+ //#endregion
652
+ //#region src/media/youtube-video/media.ts
653
+ var YouTubeCustomMediaElement = class extends CustomMediaElement("iframe", YouTubeMedia) {
654
+ static {
655
+ this.getTemplateHTML = (attrs) => {
656
+ const initialSrc = buildYouTubeIframeSrc(attrs.src ?? "", templateAttrsToEmbedProps(attrs));
657
+ return `
658
+ <style>
659
+ :host {
660
+ display: inline-block;
661
+ min-width: 300px;
662
+ min-height: 150px;
663
+ position: relative;
664
+ }
665
+ iframe {
666
+ position: absolute;
667
+ inset: 0;
668
+ width: 100%;
669
+ height: 100%;
670
+ border: 0;
671
+ }
672
+ :host(:not([controls])) {
673
+ pointer-events: none;
674
+ }
675
+ </style>
676
+ <iframe
677
+ part="iframe"
678
+ ${initialSrc ? ` src="${escapeHtml(initialSrc)}"` : ""}
679
+ allow="accelerometer; fullscreen; autoplay; encrypted-media; gyroscope; picture-in-picture"
680
+ allowfullscreen
681
+ frameborder="0"
682
+ width="100%"
683
+ height="100%"
684
+ referrerpolicy="${escapeHtml(attrs.referrerpolicy ?? "")}"
685
+ ></iframe>
686
+ `;
687
+ };
688
+ }
689
+ };
690
+ function templateAttrsToEmbedProps(attrs) {
691
+ return {
692
+ autoplay: attrs.autoplay !== void 0,
693
+ defaultMuted: attrs.muted !== void 0,
694
+ loop: attrs.loop !== void 0,
695
+ controls: attrs.controls !== void 0,
696
+ playsInline: attrs.playsinline !== void 0,
697
+ preload: attrs.preload ?? "metadata"
698
+ };
699
+ }
700
+ var YouTubeVideo = class extends MediaAttachMixin(YouTubeCustomMediaElement) {};
701
+
702
+ //#endregion
703
+ //#region src/define/media/youtube-video.ts
704
+ var YouTubeVideoElement = class extends YouTubeVideo {
705
+ static {
706
+ this.tagName = "youtube-video";
707
+ }
708
+ };
709
+ safeDefine(YouTubeVideoElement);
710
+
711
+ //#endregion
712
+ export { YouTubeVideoElement };
713
+ //# sourceMappingURL=youtube-video.dev.js.map