@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
@@ -1 +1 @@
1
- {"version":3,"file":"video.tailwind.js","names":[],"sources":["../../../../../../../../../skins/dist/default/minimal/tailwind/video.tailwind.js"],"sourcesContent":["import { container as container$1 } from \"./components/container.js\";\nimport { controls as controls$1 } from \"./components/controls.js\";\nimport { error as error$1 } from \"./components/error.js\";\nimport { popup as popup$1 } from \"./components/popup.js\";\nimport { slider as slider$1 } from \"./components/slider.js\";\nimport { iconState } from \"../../shared/tailwind/icon-state.js\";\nimport { badge } from \"./components/badge.js\";\nimport { bufferingIndicator } from \"./components/buffering.js\";\nimport { button } from \"./components/button.js\";\nimport { buttonGroup } from \"./components/button-group.js\";\nimport { icon, iconContainer, iconFlipped, iconHidden } from \"./components/icon.js\";\nimport { menu as menu$1 } from \"./components/menu.js\";\nimport { playbackRate } from \"./components/playback-rate.js\";\nimport { seek } from \"./components/seek.js\";\nimport { time as time$1 } from \"./components/time.js\";\nimport { thumbnail as thumbnail$1 } from \"./components/thumbnail.js\";\nimport { inputIndicatorOverlay } from \"./components/input-indicator-overlay.js\";\nimport { overlay } from \"./components/overlay.js\";\nimport { poster } from \"./components/poster.js\";\nimport { seekIndicator } from \"./components/seek-indicator.js\";\nimport { statusIndicator } from \"./components/status-indicator.js\";\nimport { volumeIndicator } from \"./components/volume-indicator.js\";\nimport { cn } from \"@videojs/utils/style\";\n//#region src/minimal/tailwind/video.tailwind.ts\nconst container = (isShadowDOM) => cn(container$1, \"group/skin\", \"bg-black overflow-clip\", \"after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10\", \"[&:fullscreen]:after:hidden\", \"after:inset-0 after:ring-1 after:ring-inset after:ring-(color:--border-color)\", {\n\t\"[&_::slotted(video)]:block [&_::slotted(video)]:w-full [&_::slotted(video)]:h-full [&_::slotted(video)]:rounded-(--container-border-radius) [&_::slotted(video)]:[object-fit:var(--media-object-fit,cover)] [&_::slotted(video)]:[object-position:var(--media-object-position,center)]\": isShadowDOM,\n\t\"[&_video]:block [&_video]:w-full [&_video]:h-full [&_video]:rounded-[inherit] [&_video]:[object-fit:var(--media-object-fit,contain)] [&_video]:[object-position:var(--media-object-position,center)]\": !isShadowDOM\n}, \"[--default-accent-color:oklch(1_0_0)]\", \"[--border-color:light-dark(oklch(0_0_0/0.15),oklch(1_0_0/0.15))]\", \"[--focus-ring-color:light-dark(oklch(0_0_0),oklch(1_0_0))]\", \"[--container-border-radius:var(--media-border-radius,0.75rem)]\", \"[--media-video-border-radius:var(--container-border-radius)]\", \"[--controls-background-color:transparent]\", \"[--controls-transition-duration:100ms]\", \"[--controls-transition-timing-function:ease-out]\", \"[--error-dialog-transition-duration:150ms]\", \"[--error-dialog-transition-delay:100ms]\", \"[--error-dialog-transition-timing-function:ease-out]\", \"[--popup-transition-duration:100ms]\", \"[--popup-transition-timing-function:ease-out]\", \"[--popover-backdrop-filter:blur(16px)_saturate(1.5)]\", \"[--popover-background-color:oklch(0_0_0/0.5)]\", \"[--popover-border-color:oklch(1_0_0/0.1)]\", \"[--tooltip-backdrop-filter:var(--popover-backdrop-filter)]\", \"[--tooltip-background-color:var(--popover-background-color)]\", \"[--tooltip-border-color:var(--popover-border-color)]\", \"[--tooltip-text-color:currentColor]\", \"min-[1280px]:[&:fullscreen]:[--scale:1.25]\", \"min-[1536px]:[&:fullscreen]:[--scale:1.5]\", \"min-[1920px]:[&:fullscreen]:[--scale:1.75]\", \"motion-reduce:[--error-dialog-transition-duration:50ms]\", \"motion-reduce:[--error-dialog-transition-delay:0ms]\", \"motion-reduce:[--popup-transition-duration:0ms]\", \"[@media(prefers-reduced-transparency:reduce)]:[--controls-background-color:oklch(0_0_0)]\", \"contrast-more:[--controls-background-color:oklch(0_0_0)]\", \"[@media(prefers-reduced-transparency:reduce)]:[--tooltip-background-color:oklch(0_0_0)]\", \"contrast-more:[--tooltip-background-color:oklch(0_0_0)]\", \"pointer-fine:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:300ms]\", \"pointer-coarse:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:150ms]\", \"motion-reduce:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:50ms]\", \"[--media-caption-track-y:--spacing(-2)]\", \"[--media-caption-track-delay:25ms]\", \"[--media-caption-track-duration:var(--controls-transition-duration)]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-y:--spacing(-18)]\", \"@2xl/media-root:has-[[data-controls][data-visible]]:*:[--media-caption-track-y:--spacing(-12)]\", !isShadowDOM ? [\n\t\"[&_video::-webkit-media-text-track-container]:transition-[translate]\",\n\t\"[&_video::-webkit-media-text-track-container]:duration-(--media-caption-track-duration)\",\n\t\"[&_video::-webkit-media-text-track-container]:ease-out\",\n\t\"[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)\",\n\t\"[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)\",\n\t\"[&_video::-webkit-media-text-track-container]:scale-98\",\n\t\"[&_video::-webkit-media-text-track-container]:z-1\",\n\t\"[&_video::-webkit-media-text-track-container]:font-[inherit]\"\n] : [], !isShadowDOM ? [\n\t\"before:absolute before:inset-0 before:pointer-events-none\",\n\t\"before:[background-image:var(--media-poster-placeholder,none)]\",\n\t\"before:bg-no-repeat\",\n\t\"before:[background-position:var(--media-object-position,center)]\",\n\t\"before:[background-size:var(--media-object-fit,contain)]\",\n\t\"before:opacity-0 before:[filter:blur(var(--media-poster-placeholder-blur,20px))]\",\n\t\"before:transition-opacity before:duration-250\",\n\t\"has-[img[data-visible]:not([data-loaded])]:before:opacity-100\"\n] : [], \"[&:fullscreen]:[--container-border-radius:0]\", {\n\t\"[&:fullscreen_video]:object-contain\": !isShadowDOM,\n\t\"[&:fullscreen_::slotted(video)]:object-contain\": isShadowDOM\n});\nconst controls = cn(controls$1, \"absolute bottom-1 inset-x-1\", \"[--base-side-offset:5] [--base-boundary-offset:1]\", \"gap-x-2 flex-wrap rounded-[--spacing(3)] group/controls\", \"text-white z-20\", \"peer-data-open/error:hidden\", \"ease-(--controls-transition-timing-function)\", \"duration-[calc(var(--controls-transition-duration)/2)]\", \"not-data-visible:duration-(--controls-transition-duration)\", \"pointer-fine:will-change-[translate,filter,opacity]\", \"pointer-fine:transition-[translate,filter,opacity]\", \"pointer-coarse:will-change-[translate,opacity]\", \"pointer-coarse:transition-[translate,opacity]\", \"not-data-visible:opacity-0 not-data-visible:pointer-events-none\", \"motion-safe:not-data-visible:translate-y-full\", \"pointer-fine:motion-safe:not-data-visible:blur-sm\", \"@2xl/media-root:flex-nowrap @2xl/media-root:[--controls-padding:2] @2xl/media-root:[--base-side-offset:2]\");\nconst buttonGroupStart = cn(buttonGroup, \"flex-1 @2xl/media-root:flex-none\");\nconst buttonGroupEnd = cn(buttonGroup, \"flex-1 justify-end @2xl/media-root:flex-none\");\nconst spacer = \"grow\";\nconst time = {\n\t...time$1,\n\tcontrols: cn(time$1.controls, \"[--slider-height:--spacing(5)] grow-0 shrink-0 basis-full order-[-1] px-1.5\", \"@2xl/media-root:[--slider-height:--spacing(8)] @2xl/media-root:grow @2xl/media-root:shrink @2xl/media-root:basis-0 @2xl/media-root:order-[unset]\", \"@2xl/media-root:[mask-position:100%_0] @2xl/media-root:[mask-size:200%_100%]\", \"@2xl/media-root:[transition:mask-position_50ms_ease-out]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@2xl/media-root:[mask-image:linear-gradient(to_right,transparent_10%,black_25%,black_100%)]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@2xl/media-root:[mask-position:0_0]\")\n};\nconst error = {\n\t...error$1,\n\troot: cn(error$1.root, \"pointer-events-none outline-none\"),\n\tdialog: cn(error$1.dialog, \"pointer-events-auto w-full max-w-64 p-4 rounded-none\"),\n\tcontent: cn(error$1.content, \"p-0 py-1.5\"),\n\ttitle: \"text-(length:--font-size-medium)\"\n};\nconst thumbnail = thumbnail$1;\nconst slider = {\n\t...slider$1,\n\ttrack: cn(slider$1.track, \"ring-1 ring-black/5\"),\n\tpreview: cn(slider$1.preview, \"[--preview-end-inset:calc(100cqi-100%)]\", \"[--preview-left:clamp(calc(var(--max-width)/2),var(--media-slider-pointer),calc(100%-var(--max-width)/2+var(--preview-end-inset)))]\", \"@2xl/media-root:[--preview-left:var(--media-slider-pointer)]\")\n};\nconst popup = {\n\t...popup$1,\n\tvolume: cn(popup$1.popover, \"p-0 bg-transparent\")\n};\nconst menu = {\n\t...menu$1,\n\troot: menu$1.root,\n\tsettings: menu$1.settings\n};\n//#endregion\nexport { badge, bufferingIndicator, button, buttonGroup, buttonGroupEnd, buttonGroupStart, container, controls, error, icon, iconContainer, iconFlipped, iconHidden, iconState, inputIndicatorOverlay, menu, overlay, playbackRate, popup, poster, seek, seekIndicator, slider, spacer, statusIndicator, thumbnail, time, volumeIndicator };\n\n//# sourceMappingURL=video.tailwind.js.map"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,aAAa,gBAAgB,GAAG,aAAa,cAAc,0BAA0B,+EAA+E,+BAA+B,iFAAiF;CACzR,0RAA0R;CAC1R,wMAAwM,CAAC;AAC1M,GAAG,yCAAyC,oEAAoE,8DAA8D,kEAAkE,gEAAgE,6CAA6C,0CAA0C,oDAAoD,8CAA8C,2CAA2C,wDAAwD,uCAAuC,iDAAiD,wDAAwD,iDAAiD,6CAA6C,8DAA8D,gEAAgE,wDAAwD,uCAAuC,8CAA8C,6CAA6C,8CAA8C,2DAA2D,uDAAuD,mDAAmD,4FAA4F,4DAA4D,2FAA2F,2DAA2D,iGAAiG,mGAAmG,iGAAiG,2CAA2C,sCAAsC,wEAAwE,gFAAgF,kGAAkG,CAAC,cAAc;CACjvE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,IAAI,CAAC,GAAG,CAAC,cAAc;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,IAAI,CAAC,GAAG,gDAAgD;CACvD,uCAAuC,CAAC;CACxC,kDAAkD;AACnD,CAAC;AACD,MAAM,WAAW,GAAG,YAAY,+BAA+B,qDAAqD,2DAA2D,mBAAmB,+BAA+B,gDAAgD,0DAA0D,8DAA8D,uDAAuD,sDAAsD,kDAAkD,iDAAiD,mEAAmE,iDAAiD,qDAAqD,2GAA2G;AAC72B,MAAM,mBAAmB,GAAG,aAAa,kCAAkC;AAC3E,MAAM,iBAAiB,GAAG,aAAa,8CAA8C;AACrF,MAAM,SAAS;AACf,MAAM,OAAO;CACZ,GAAG;CACH,UAAU,GAAG,OAAO,UAAU,+EAA+E,oJAAoJ,gFAAgF,4DAA4D,4JAA4J,kGAAkG;AAC5oB;AACA,MAAM,QAAQ;CACb,GAAG;CACH,MAAM,GAAG,QAAQ,MAAM,kCAAkC;CACzD,QAAQ,GAAG,QAAQ,QAAQ,sDAAsD;CACjF,SAAS,GAAG,QAAQ,SAAS,YAAY;CACzC,OAAO;AACR;AACA,MAAM,YAAY;AAClB,MAAM,SAAS;CACd,GAAG;CACH,OAAO,GAAG,SAAS,OAAO,qBAAqB;CAC/C,SAAS,GAAG,SAAS,SAAS,2CAA2C,uIAAuI,8DAA8D;AAC/Q;AACA,MAAM,QAAQ;CACb,GAAG;CACH,QAAQ,GAAG,QAAQ,SAAS,oBAAoB;AACjD;AACA,MAAM,OAAO;CACZ,GAAG;CACH,MAAM,OAAO;CACb,UAAU,OAAO;AAClB"}
1
+ {"version":3,"file":"video.tailwind.js","names":[],"sources":["../../../../../../../../../skins/dist/default/minimal/tailwind/video.tailwind.js"],"sourcesContent":["import { container as container$1 } from \"./components/container.js\";\nimport { controls as controls$1 } from \"./components/controls.js\";\nimport { error as error$1 } from \"./components/error.js\";\nimport { popup as popup$1 } from \"./components/popup.js\";\nimport { slider as slider$1 } from \"./components/slider.js\";\nimport { iconState } from \"../../shared/tailwind/icon-state.js\";\nimport { badge } from \"./components/badge.js\";\nimport { bufferingIndicator } from \"./components/buffering.js\";\nimport { button } from \"./components/button.js\";\nimport { buttonGroup } from \"./components/button-group.js\";\nimport { icon, iconContainer, iconFlipped, iconHidden } from \"./components/icon.js\";\nimport { menu as menu$1 } from \"./components/menu.js\";\nimport { playbackRate } from \"./components/playback-rate.js\";\nimport { seek } from \"./components/seek.js\";\nimport { time as time$1 } from \"./components/time.js\";\nimport { thumbnail as thumbnail$1 } from \"./components/thumbnail.js\";\nimport { inputIndicatorOverlay } from \"./components/input-indicator-overlay.js\";\nimport { overlay } from \"./components/overlay.js\";\nimport { poster } from \"./components/poster.js\";\nimport { seekIndicator } from \"./components/seek-indicator.js\";\nimport { statusIndicator } from \"./components/status-indicator.js\";\nimport { volumeIndicator } from \"./components/volume-indicator.js\";\nimport { cn } from \"@videojs/utils/style\";\n//#region src/minimal/tailwind/video.tailwind.ts\nconst container = (isShadowDOM) => cn(container$1, \"group/skin\", \"bg-black overflow-clip\", \"after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10\", \"[&:fullscreen]:after:hidden\", \"after:inset-0 after:ring-1 after:ring-inset after:ring-(color:--border-color)\", {\n\t\"[&_::slotted(video)]:block [&_::slotted(video)]:w-full [&_::slotted(video)]:h-full [&_::slotted(video)]:rounded-(--container-border-radius) [&_::slotted(video)]:[object-fit:var(--media-object-fit,cover)] [&_::slotted(video)]:[object-position:var(--media-object-position,center)]\": isShadowDOM,\n\t\"[&_video]:block [&_video]:w-full [&_video]:h-full [&_video]:rounded-[inherit] [&_video]:[object-fit:var(--media-object-fit,contain)] [&_video]:[object-position:var(--media-object-position,center)]\": !isShadowDOM\n}, \"[--default-accent-color:oklch(1_0_0)]\", \"[--border-color:light-dark(oklch(0_0_0/0.15),oklch(1_0_0/0.15))]\", \"[--focus-ring-color:light-dark(oklch(0_0_0),oklch(1_0_0))]\", \"**:[--focus-ring-color:oklch(1_0_0)]\", \"[--container-border-radius:var(--media-border-radius,0.75rem)]\", \"[--media-video-border-radius:var(--container-border-radius)]\", \"[--controls-background-color:transparent]\", \"[--controls-transition-duration:100ms]\", \"[--controls-transition-timing-function:ease-out]\", \"[--error-dialog-transition-duration:150ms]\", \"[--error-dialog-transition-delay:100ms]\", \"[--error-dialog-transition-timing-function:ease-out]\", \"[--popup-transition-duration:100ms]\", \"[--popup-transition-timing-function:ease-out]\", \"[--popover-backdrop-filter:blur(16px)_saturate(1.5)]\", \"[--popover-background-color:oklch(0_0_0/0.5)]\", \"[--popover-border-color:oklch(1_0_0/0.1)]\", \"[--tooltip-backdrop-filter:var(--popover-backdrop-filter)]\", \"[--tooltip-background-color:var(--popover-background-color)]\", \"[--tooltip-border-color:var(--popover-border-color)]\", \"[--tooltip-text-color:currentColor]\", \"min-[1280px]:[&:fullscreen]:[--scale:1.25]\", \"min-[1536px]:[&:fullscreen]:[--scale:1.5]\", \"min-[1920px]:[&:fullscreen]:[--scale:1.75]\", \"motion-reduce:[--error-dialog-transition-duration:50ms]\", \"motion-reduce:[--error-dialog-transition-delay:0ms]\", \"motion-reduce:[--popup-transition-duration:0ms]\", \"[@media(prefers-reduced-transparency:reduce)]:[--controls-background-color:oklch(0_0_0)]\", \"contrast-more:[--controls-background-color:oklch(0_0_0)]\", \"[@media(prefers-reduced-transparency:reduce)]:[--tooltip-background-color:oklch(0_0_0)]\", \"contrast-more:[--tooltip-background-color:oklch(0_0_0)]\", \"pointer-fine:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:300ms]\", \"pointer-coarse:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:150ms]\", \"motion-reduce:has-[[data-controls]:not([data-visible])]:[--controls-transition-duration:50ms]\", \"[--media-caption-track-y:--spacing(-2)]\", \"[--media-caption-track-delay:25ms]\", \"[--media-caption-track-duration:var(--controls-transition-duration)]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-y:--spacing(-18)]\", \"@2xl/media-root:has-[[data-controls][data-visible]]:*:[--media-caption-track-y:--spacing(-12)]\", !isShadowDOM ? [\n\t\"[&_video::-webkit-media-text-track-container]:transition-[translate]\",\n\t\"[&_video::-webkit-media-text-track-container]:duration-(--media-caption-track-duration)\",\n\t\"[&_video::-webkit-media-text-track-container]:ease-out\",\n\t\"[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)\",\n\t\"[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)\",\n\t\"[&_video::-webkit-media-text-track-container]:scale-98\",\n\t\"[&_video::-webkit-media-text-track-container]:z-1\",\n\t\"[&_video::-webkit-media-text-track-container]:font-[inherit]\"\n] : [], !isShadowDOM ? [\n\t\"before:absolute before:inset-0 before:pointer-events-none\",\n\t\"before:[background-image:var(--media-poster-placeholder,none)]\",\n\t\"before:bg-no-repeat\",\n\t\"before:[background-position:var(--media-object-position,center)]\",\n\t\"before:[background-size:var(--media-object-fit,contain)]\",\n\t\"before:opacity-0 before:[filter:blur(var(--media-poster-placeholder-blur,20px))]\",\n\t\"before:transition-opacity before:duration-250\",\n\t\"has-[img[data-visible]:not([data-loaded])]:before:opacity-100\"\n] : [], \"[&:fullscreen]:[--container-border-radius:0]\", {\n\t\"[&:fullscreen_video]:object-contain\": !isShadowDOM,\n\t\"[&:fullscreen_::slotted(video)]:object-contain\": isShadowDOM\n});\nconst controls = cn(controls$1, \"absolute bottom-1 inset-x-1\", \"[--base-side-offset:5] [--base-boundary-offset:1]\", \"gap-x-2 flex-wrap rounded-[--spacing(3)] group/controls\", \"text-white z-20\", \"peer-data-open/error:hidden\", \"ease-(--controls-transition-timing-function)\", \"duration-[calc(var(--controls-transition-duration)/2)]\", \"not-data-visible:duration-(--controls-transition-duration)\", \"pointer-fine:will-change-[translate,filter,opacity]\", \"pointer-fine:transition-[translate,filter,opacity]\", \"pointer-coarse:will-change-[translate,opacity]\", \"pointer-coarse:transition-[translate,opacity]\", \"not-data-visible:opacity-0 not-data-visible:pointer-events-none\", \"motion-safe:not-data-visible:translate-y-full\", \"pointer-fine:motion-safe:not-data-visible:blur-sm\", \"@2xl/media-root:flex-nowrap @2xl/media-root:[--controls-padding:2] @2xl/media-root:[--base-side-offset:2]\");\nconst buttonGroupStart = cn(buttonGroup, \"flex-1 @2xl/media-root:flex-none\");\nconst buttonGroupEnd = cn(buttonGroup, \"flex-1 justify-end @2xl/media-root:flex-none\");\nconst spacer = \"grow\";\nconst time = {\n\t...time$1,\n\tcontrols: cn(time$1.controls, \"[--slider-height:--spacing(5)] grow-0 shrink-0 basis-full order-[-1] px-1.5\", \"@2xl/media-root:[--slider-height:--spacing(8)] @2xl/media-root:grow @2xl/media-root:shrink @2xl/media-root:basis-0 @2xl/media-root:order-[unset]\", \"@2xl/media-root:[mask-position:100%_0] @2xl/media-root:[mask-size:200%_100%]\", \"@2xl/media-root:[transition:mask-position_50ms_ease-out]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@2xl/media-root:[mask-image:linear-gradient(to_right,transparent_10%,black_25%,black_100%)]\", \"group-has-[[data-volume-level][aria-expanded=true]]/controls:@2xl/media-root:[mask-position:0_0]\")\n};\nconst error = {\n\t...error$1,\n\troot: cn(error$1.root, \"pointer-events-none outline-none\"),\n\tdialog: cn(error$1.dialog, \"pointer-events-auto w-full max-w-64 p-4 rounded-none\"),\n\tcontent: cn(error$1.content, \"p-0 py-1.5\"),\n\ttitle: \"text-(length:--font-size-medium)\"\n};\nconst thumbnail = thumbnail$1;\nconst slider = {\n\t...slider$1,\n\ttrack: cn(slider$1.track, \"ring-1 ring-black/5\"),\n\tpreview: cn(slider$1.preview, \"[--preview-end-inset:calc(100cqi-100%)]\", \"[--preview-left:clamp(calc(var(--max-width)/2),var(--media-slider-pointer),calc(100%-var(--max-width)/2+var(--preview-end-inset)))]\", \"@2xl/media-root:[--preview-left:var(--media-slider-pointer)]\")\n};\nconst popup = {\n\t...popup$1,\n\tvolume: cn(popup$1.popover, \"p-0 bg-transparent\")\n};\nconst menu = {\n\t...menu$1,\n\troot: menu$1.root,\n\tsettings: menu$1.settings\n};\n//#endregion\nexport { badge, bufferingIndicator, button, buttonGroup, buttonGroupEnd, buttonGroupStart, container, controls, error, icon, iconContainer, iconFlipped, iconHidden, iconState, inputIndicatorOverlay, menu, overlay, playbackRate, popup, poster, seek, seekIndicator, slider, spacer, statusIndicator, thumbnail, time, volumeIndicator };\n\n//# sourceMappingURL=video.tailwind.js.map"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,aAAa,gBAAgB,GAAG,aAAa,cAAc,0BAA0B,+EAA+E,+BAA+B,iFAAiF;CACzR,0RAA0R;CAC1R,wMAAwM,CAAC;AAC1M,GAAG,yCAAyC,oEAAoE,8DAA8D,wCAAwC,kEAAkE,gEAAgE,6CAA6C,0CAA0C,oDAAoD,8CAA8C,2CAA2C,wDAAwD,uCAAuC,iDAAiD,wDAAwD,iDAAiD,6CAA6C,8DAA8D,gEAAgE,wDAAwD,uCAAuC,8CAA8C,6CAA6C,8CAA8C,2DAA2D,uDAAuD,mDAAmD,4FAA4F,4DAA4D,2FAA2F,2DAA2D,iGAAiG,mGAAmG,iGAAiG,2CAA2C,sCAAsC,wEAAwE,gFAAgF,kGAAkG,CAAC,cAAc;CACzxE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,IAAI,CAAC,GAAG,CAAC,cAAc;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,IAAI,CAAC,GAAG,gDAAgD;CACvD,uCAAuC,CAAC;CACxC,kDAAkD;AACnD,CAAC;AACD,MAAM,WAAW,GAAG,YAAY,+BAA+B,qDAAqD,2DAA2D,mBAAmB,+BAA+B,gDAAgD,0DAA0D,8DAA8D,uDAAuD,sDAAsD,kDAAkD,iDAAiD,mEAAmE,iDAAiD,qDAAqD,2GAA2G;AAC72B,MAAM,mBAAmB,GAAG,aAAa,kCAAkC;AAC3E,MAAM,iBAAiB,GAAG,aAAa,8CAA8C;AACrF,MAAM,SAAS;AACf,MAAM,OAAO;CACZ,GAAG;CACH,UAAU,GAAG,OAAO,UAAU,+EAA+E,oJAAoJ,gFAAgF,4DAA4D,4JAA4J,kGAAkG;AAC5oB;AACA,MAAM,QAAQ;CACb,GAAG;CACH,MAAM,GAAG,QAAQ,MAAM,kCAAkC;CACzD,QAAQ,GAAG,QAAQ,QAAQ,sDAAsD;CACjF,SAAS,GAAG,QAAQ,SAAS,YAAY;CACzC,OAAO;AACR;AACA,MAAM,YAAY;AAClB,MAAM,SAAS;CACd,GAAG;CACH,OAAO,GAAG,SAAS,OAAO,qBAAqB;CAC/C,SAAS,GAAG,SAAS,SAAS,2CAA2C,uIAAuI,8DAA8D;AAC/Q;AACA,MAAM,QAAQ;CACb,GAAG;CACH,QAAQ,GAAG,QAAQ,SAAS,oBAAoB;AACjD;AACA,MAAM,OAAO;CACZ,GAAG;CACH,MAAM,OAAO;CACb,UAAU,OAAO;AAClB"}
@@ -1 +1 @@
1
- {"version":3,"file":"playback-rate-button-element.d.ts","names":[],"sources":["../../../../src/ui/playback-rate-button/playback-rate-button-element.ts"],"mappings":";;;;;;;;cAUa,kCAAkC,mBAAmB;kBAChD;SAEA;;MACL,MAAI;;;MACD,MAAI;;;MACF,MAAI;;;EAGpB;qBAEmB,MAAI;qBACJ;;;qBACA,YAAU,iBAFN,gBAEM;;;;;qBACD;YAElB,SAAS,OAAO,wBAAwB,QAAQ;YAUvC;YAOA,WAAW,SAAS;YAYpB,OAAO,SAAS;;kBAYpB;OACH,QAAQ,uBAAuB"}
1
+ {"version":3,"file":"playback-rate-button-element.d.ts","names":[],"sources":["../../../../src/ui/playback-rate-button/playback-rate-button-element.ts"],"mappings":";;;;;;;;cASa,kCAAkC,mBAAmB;kBAChD;SAEA;;MACL,MAAI;;;MACD,MAAI;;;MACF,MAAI;;;EAGpB;qBAEmB,MAAI;qBACJ;;;qBACA,YAAU,iBAFN,gBAEM;;;;;qBACD;YAElB,SAAS,OAAO,wBAAwB,QAAQ;YAYvC;YAOA,WAAW,SAAS;YAYpB,OAAO,SAAS;;kBAYpB;OACH,QAAQ,uBAAuB"}
@@ -1,7 +1,6 @@
1
1
  import { playerContext } from "../../player/context.js";
2
2
  import { PlayerController } from "../../player/player-controller.js";
3
3
  import { MediaButtonElement } from "../media-button-element.js";
4
- import { toggleCommandTarget } from "../command-for.js";
5
4
  import { applyElementProps, selectPlaybackRate } from "@videojs/core/dom";
6
5
  import { PlaybackRateButtonCore, PlaybackRateButtonDataAttrs } from "@videojs/core";
7
6
  //#region src/ui/playback-rate-button/playback-rate-button-element.ts
@@ -26,7 +25,7 @@ var PlaybackRateButtonElement = class extends MediaButtonElement {
26
25
  }
27
26
  activate(state, event) {
28
27
  if (this.commandfor) {
29
- if (event instanceof KeyboardEvent) toggleCommandTarget(this, this.commandfor);
28
+ if (event instanceof KeyboardEvent) this.click();
30
29
  return;
31
30
  }
32
31
  this.core.cycle(state);
@@ -1 +1 @@
1
- {"version":3,"file":"playback-rate-button-element.js","names":[],"sources":["../../../../src/ui/playback-rate-button/playback-rate-button-element.ts"],"sourcesContent":["import { PlaybackRateButtonCore, PlaybackRateButtonDataAttrs } from '@videojs/core';\nimport { applyElementProps, selectPlaybackRate, type UIEvent } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { MediaPlaybackRateState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { toggleCommandTarget } from '../command-for';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class PlaybackRateButtonElement extends MediaButtonElement<PlaybackRateButtonCore> {\n static readonly tagName = 'media-playback-rate-button';\n\n static override properties = {\n label: { type: String },\n disabled: { type: Boolean },\n commandfor: { type: String },\n } satisfies PropertyDeclarationMap<'label' | 'disabled' | 'commandfor'>;\n\n commandfor: string | undefined = undefined;\n\n protected readonly core = new PlaybackRateButtonCore();\n protected readonly stateAttrMap = PlaybackRateButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPlaybackRate);\n protected override readonly hotkeyAction = 'speedUp';\n\n protected activate(state: MediaPlaybackRateState, event?: UIEvent): void {\n if (this.commandfor) {\n if (event instanceof KeyboardEvent) {\n toggleCommandTarget(this, this.commandfor);\n }\n return;\n }\n this.core.cycle(state);\n }\n\n protected override getIsButtonDisabled(): boolean {\n const media = this.mediaState.value;\n if (super.getIsButtonDisabled()) return true;\n if (this.commandfor && media && media.playbackRates.length === 0) return true;\n return false;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n if (changed.has('commandfor')) {\n if (this.commandfor) {\n this.setAttribute('commandfor', this.commandfor);\n } else {\n this.removeAttribute('commandfor');\n }\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n if (!media || !this.commandfor) return;\n\n applyElementProps(this, {\n 'aria-disabled': this.getIsButtonDisabled() ? 'true' : undefined,\n });\n }\n}\n\nexport namespace PlaybackRateButtonElement {\n export type State = PlaybackRateButtonCore.State;\n}\n"],"mappings":";;;;;;;AAUA,IAAa,4BAAb,cAA+C,mBAA2C;;;EASvD,KAAA,aAAA,KAAA;EAEP,KAAA,OAAA,IAAI,uBAAuB;EACnB,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,kBAAkB;EACjD,KAAA,eAAA;;;EAbjB,KAAA,UAAA;;;EAEG,KAAA,aAAA;GAC3B,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;GAC1B,YAAY,EAAE,MAAM,OAAO;EAC7B;;CASA,SAAmB,OAA+B,OAAuB;EACvE,IAAI,KAAK,YAAY;GACnB,IAAI,iBAAiB,eACnB,oBAAoB,MAAM,KAAK,UAAU;GAE3C;EACF;EACA,KAAK,KAAK,MAAM,KAAK;CACvB;CAEA,sBAAkD;EAChD,MAAM,QAAQ,KAAK,WAAW;EAC9B,IAAI,MAAM,oBAAoB,GAAG,OAAO;EACxC,IAAI,KAAK,cAAc,SAAS,MAAM,cAAc,WAAW,GAAG,OAAO;EACzE,OAAO;CACT;CAEA,WAA8B,SAA+B;EAC3D,MAAM,WAAW,OAAO;EAExB,IAAI,QAAQ,IAAI,YAAY,GAC1B,IAAI,KAAK,YACP,KAAK,aAAa,cAAc,KAAK,UAAU;OAE/C,KAAK,gBAAgB,YAAY;CAGvC;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,CADU,KAAK,WAAW,SAChB,CAAC,KAAK,YAAY;EAEhC,kBAAkB,MAAM,EACtB,iBAAiB,KAAK,oBAAoB,IAAI,SAAS,KAAA,EACzD,CAAC;CACH;AACF"}
1
+ {"version":3,"file":"playback-rate-button-element.js","names":[],"sources":["../../../../src/ui/playback-rate-button/playback-rate-button-element.ts"],"sourcesContent":["import { PlaybackRateButtonCore, PlaybackRateButtonDataAttrs } from '@videojs/core';\nimport { applyElementProps, selectPlaybackRate, type UIEvent } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { MediaPlaybackRateState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class PlaybackRateButtonElement extends MediaButtonElement<PlaybackRateButtonCore> {\n static readonly tagName = 'media-playback-rate-button';\n\n static override properties = {\n label: { type: String },\n disabled: { type: Boolean },\n commandfor: { type: String },\n } satisfies PropertyDeclarationMap<'label' | 'disabled' | 'commandfor'>;\n\n commandfor: string | undefined = undefined;\n\n protected readonly core = new PlaybackRateButtonCore();\n protected readonly stateAttrMap = PlaybackRateButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPlaybackRate);\n protected override readonly hotkeyAction = 'speedUp';\n\n protected activate(state: MediaPlaybackRateState, event?: UIEvent): void {\n if (this.commandfor) {\n if (event instanceof KeyboardEvent) {\n // Custom elements do not synthesize a click from keyboard activation.\n // Dispatch one so the linked menu follows its normal open lifecycle.\n this.click();\n }\n return;\n }\n this.core.cycle(state);\n }\n\n protected override getIsButtonDisabled(): boolean {\n const media = this.mediaState.value;\n if (super.getIsButtonDisabled()) return true;\n if (this.commandfor && media && media.playbackRates.length === 0) return true;\n return false;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n if (changed.has('commandfor')) {\n if (this.commandfor) {\n this.setAttribute('commandfor', this.commandfor);\n } else {\n this.removeAttribute('commandfor');\n }\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n if (!media || !this.commandfor) return;\n\n applyElementProps(this, {\n 'aria-disabled': this.getIsButtonDisabled() ? 'true' : undefined,\n });\n }\n}\n\nexport namespace PlaybackRateButtonElement {\n export type State = PlaybackRateButtonCore.State;\n}\n"],"mappings":";;;;;;AASA,IAAa,4BAAb,cAA+C,mBAA2C;;;EASvD,KAAA,aAAA,KAAA;EAEP,KAAA,OAAA,IAAI,uBAAuB;EACnB,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,kBAAkB;EACjD,KAAA,eAAA;;;EAbjB,KAAA,UAAA;;;EAEG,KAAA,aAAA;GAC3B,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;GAC1B,YAAY,EAAE,MAAM,OAAO;EAC7B;;CASA,SAAmB,OAA+B,OAAuB;EACvE,IAAI,KAAK,YAAY;GACnB,IAAI,iBAAiB,eAGnB,KAAK,MAAM;GAEb;EACF;EACA,KAAK,KAAK,MAAM,KAAK;CACvB;CAEA,sBAAkD;EAChD,MAAM,QAAQ,KAAK,WAAW;EAC9B,IAAI,MAAM,oBAAoB,GAAG,OAAO;EACxC,IAAI,KAAK,cAAc,SAAS,MAAM,cAAc,WAAW,GAAG,OAAO;EACzE,OAAO;CACT;CAEA,WAA8B,SAA+B;EAC3D,MAAM,WAAW,OAAO;EAExB,IAAI,QAAQ,IAAI,YAAY,GAC1B,IAAI,KAAK,YACP,KAAK,aAAa,cAAc,KAAK,UAAU;OAE/C,KAAK,gBAAgB,YAAY;CAGvC;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,CADU,KAAK,WAAW,SAChB,CAAC,KAAK,YAAY;EAEhC,kBAAkB,MAAM,EACtB,iBAAiB,KAAK,oBAAoB,IAAI,SAAS,KAAA,EACzD,CAAC;CACH;AACF"}
package/docs/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @videojs/html documentation
2
2
 
3
- Bundled markdown documentation for `@videojs/html` v10.0.0-beta.27.
3
+ Bundled markdown documentation for `@videojs/html` v10.0.0-beta.28.
4
4
 
5
5
  Start at [`./llms.txt`](./llms.txt) — it's the structured index of every page in this directory.
6
6
 
@@ -88,7 +88,7 @@ if (media?.paused) media.play();
88
88
 
89
89
  ### Checking for feature support
90
90
 
91
- Volume, fullscreen, and picture-in-picture expose an `*Availability` property because platform support varies. For example, iOS Safari doesn’t allow programmatic volume control.
91
+ Volume, fullscreen, and picture-in-picture expose availability properties because platform support varies. Volume has two independent properties: `volumeAvailability` for changing the volume level and `mutedAvailability` for toggling mute. For example, iOS Safari allows muting but doesn’t allow programmatic volume control.
92
92
 
93
93
  Value
94
94
 
@@ -106,7 +106,7 @@ Could work, not ready yet
106
106
 
107
107
  Platform can never do this
108
108
 
109
- Components that depend on availability (like [`PiPButton`](../reference/pip-button.md) and [`FullscreenButton`](../reference/fullscreen-button.md)) handle the three states for you:
109
+ Components that depend on availability (like [`MuteButton`](../reference/mute-button.md), [`PiPButton`](../reference/pip-button.md), and [`FullscreenButton`](../reference/fullscreen-button.md)) handle the three states for you:
110
110
 
111
111
  * **`unsupported`** — the HTML custom element receives the native `hidden` attribute (and `data-hidden`); React buttons return `null`. No CSS needed.
112
112
  * **`unavailable`** — the presentation controls stay hidden while capability detection is unresolved. Cast remains visible but disabled when its API is supported and no device is reachable.
@@ -42,7 +42,7 @@ How Video.js plays it
42
42
 
43
43
  `source`, at the top level
44
44
 
45
- `preferPlayback`
45
+ `preferPlayback`, `maxAutoResolution`, `capRenditionToPlayerSize`
46
46
 
47
47
  How a specific engine behaves
48
48
 
@@ -193,6 +193,80 @@ video.source = { src: 'https://example.com/stream.m3u8', preferPlayback: 'native
193
193
 
194
194
  It’s a preference, not a demand — Video.js falls back to whichever path can actually play the source. `HlsJsVideo`, `MuxVideo`, and `MuxAudio` accept it; DASH and Vimeo have no second playback path.
195
195
 
196
+ `maxAutoResolution` caps the highest rendition adaptive bitrate selection reaches for on its own:
197
+
198
+ ts
199
+
200
+ ```
201
+ video.source = { src: 'https://example.com/stream.m3u8', maxAutoResolution: '720p' };
202
+ ```
203
+
204
+ The cap limits automatic selection without hiding anything. Renditions above it stay in `videoRenditions`, so a viewer can still choose 1080p by hand. Reach for it to hold down bandwidth on a stream that would otherwise climb to 4K, or to keep a background or thumbnail player cheap.
205
+
206
+ Renditions are matched on pixel area rather than height, which keeps unusual aspect ratios honest: an ultrawide 2560×1080 rendition carries more pixels than 16:9 1080p, so a `'1080p'` cap leaves it out. When every rendition sits above the cap, the smallest one plays.
207
+
208
+ Changing the cap applies to the running engine, so playback continues uninterrupted. It needs the hls.js engine — native HLS playback ignores it, and audio-only streams have no video renditions to cap.
209
+
210
+ ### Capping to the player’s size
211
+
212
+ A 400px-wide player has no use for a 4K rendition, so `capRenditionToPlayerSize` holds automatic selection to the smallest rendition that still covers the element. It defaults to `true`, and the cap follows the element as it’s resized:
213
+
214
+ ts
215
+
216
+ ```
217
+ video.source = { src: 'https://example.com/stream.m3u8', capRenditionToPlayerSize: false };
218
+ ```
219
+
220
+ The element is measured in device pixels, so a `2` device pixel ratio asks for twice the rendition a CSS measurement would — a 640px-wide player on a retina screen still gets 720p. Switch the cap off for a player whose layout size understates what it needs, such as one that goes fullscreen without a resize.
221
+
222
+ `minAutoResolution` bounds how far down that cap can reach, and defaults to `'720p'`:
223
+
224
+ ts
225
+
226
+ ```
227
+ video.source = { src: 'https://example.com/stream.m3u8', minAutoResolution: '480p' };
228
+ ```
229
+
230
+ **It is not a quality floor.** It bounds the size-derived cap and nothing else. When bandwidth is poor, adaptive selection still drops below it — the cap is a ceiling, and selection stays free underneath. It also never raises an explicit `maxAutoResolution`: ask for at most `'360p'` alongside a `'720p'` floor and you get `'360p'`.
231
+
232
+ The default is there because the low rungs of a ladder exist for poor network conditions, and capping a small player down to them looks worse than its size suggests. Name a lower rung to weaken the floor, or `'270p'` to lift it for any real ladder.
233
+
234
+ ### Four things that sound alike
235
+
236
+ Four separate mechanisms bound which rendition plays, and they’re easy to mistake for each other:
237
+
238
+ Option
239
+
240
+ Side
241
+
242
+ What it does
243
+
244
+ `source.playback.maxResolution`
245
+
246
+ Server
247
+
248
+ A Mux query param. Trims the manifest, so higher renditions never arrive — not even by hand.
249
+
250
+ `source.maxAutoResolution`
251
+
252
+ Client
253
+
254
+ A ceiling on automatic selection. Everything still arrives and stays selectable by hand.
255
+
256
+ `source.capRenditionToPlayerSize`
257
+
258
+ Client
259
+
260
+ The same kind of ceiling, derived from the element’s rendered size and moving with it.
261
+
262
+ `source.minAutoResolution`
263
+
264
+ Client
265
+
266
+ A bound on the one above. Not a quality minimum, and not related to `playback.minResolution`.
267
+
268
+ `playback.maxResolution` and `playback.minResolution` are the server-side pair: they decide what the manifest carries. The other three only bound what adaptive selection picks from whatever does arrive.
269
+
196
270
  ## DRM protected sources
197
271
 
198
272
  Protected content is licensed through `source.drm`, keyed by EME key system id — alongside the URL rather than inside an engine’s namespace, because which engine plays the manifest is decided later and both paths read it:
@@ -276,6 +350,10 @@ video.source = {
276
350
  };
277
351
  ```
278
352
 
353
+ `playback` params ride along in the URL, so `playback.maxResolution` decides which renditions the manifest carries in the first place. `maxAutoResolution` is the other half of that pair: it caps what adaptive selection picks from the renditions that do arrive. Use `playback.maxResolution` when a viewer should never get 4K, and `maxAutoResolution` when they should be able to ask for it.
354
+
355
+ The same split applies at the bottom of the ladder, and the names are close enough to be worth restating: `playback.minResolution` asks Mux to leave the lowest renditions out of the manifest, while `minAutoResolution` is a client-side bound on the player-size cap. They are unrelated.
356
+
279
357
  Setting a Mux stream URL as `src` works too — the element parses the playback ID and query params back out into `source`. To play something Mux doesn’t host, name it with `src` inside `source`; engine options still apply.
280
358
 
281
359
  Two more source params describe images rather than playback. `source.storyboard` and `source.poster` carry the modifiers for the storyboard VTT and the poster still — both belong to the source, since a signed token scopes them to one playback ID:
@@ -1056,9 +1056,14 @@ media-container {
1056
1056
  }
1057
1057
 
1058
1058
  .media-default-skin .media-slider {
1059
+ --track-size: calc(var(--spacing) * 1);
1060
+ --track-highlighted-size: calc(var(--spacing) * 1.75);
1061
+ --track-border-radius: 99px;
1059
1062
  --thumb-size: calc(var(--spacing) * 2.5);
1060
1063
  --thumb-active-size: calc(var(--spacing) * 3);
1061
- --track-border-radius: calc(Infinity * 1px);
1064
+ --chapter-gap: calc(var(--spacing) * 1);
1065
+ --chapter-inset-start: calc(var(--chapter-gap) / 2);
1066
+ --chapter-inset-end: calc(var(--chapter-gap) / 2);
1062
1067
 
1063
1068
  position: relative;
1064
1069
  display: flex;
@@ -1089,10 +1094,10 @@ media-container {
1089
1094
 
1090
1095
  &[data-orientation="horizontal"] {
1091
1096
  width: 100%;
1092
- height: calc(var(--spacing) * 1);
1097
+ height: var(--track-size);
1093
1098
  }
1094
1099
  &[data-orientation="vertical"] {
1095
- width: calc(var(--spacing) * 1);
1100
+ width: var(--track-size);
1096
1101
  height: 100%;
1097
1102
  }
1098
1103
  }
@@ -1164,10 +1169,6 @@ media-container {
1164
1169
  }
1165
1170
 
1166
1171
  .media-slider__chapter {
1167
- --chapter-gap: calc(var(--spacing) * 1);
1168
- --chapter-inset-start: 0.5;
1169
- --chapter-inset-end: 0.5;
1170
-
1171
1172
  position: absolute;
1172
1173
  inset: 0;
1173
1174
  display: flex;
@@ -1178,16 +1179,13 @@ media-container {
1178
1179
  border-radius: inherit;
1179
1180
 
1180
1181
  &:first-child {
1181
- --chapter-inset-start: 0;
1182
+ --chapter-inset-start: 0px;
1182
1183
  }
1183
1184
  &:last-child {
1184
- --chapter-inset-end: 0;
1185
+ --chapter-inset-end: 0px;
1185
1186
  }
1186
1187
 
1187
1188
  .media-slider__chapter-track {
1188
- --chapter-track-size: calc(var(--spacing) * 1);
1189
- --chapter-track-highlighted-size: calc(var(--spacing) * 1.75);
1190
-
1191
1189
  border-radius: inherit;
1192
1190
 
1193
1191
  @media (prefers-reduced-motion: no-preference) {
@@ -1200,16 +1198,15 @@ media-container {
1200
1198
  clip-path: inset(0 calc(100% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start));
1201
1199
 
1202
1200
  .media-slider__chapter-track {
1203
- height: var(--chapter-track-size);
1201
+ height: var(--track-size);
1204
1202
  clip-path: inset(
1205
- 0 calc(100% - var(--media-slider-chapter-end) + var(--chapter-gap) * var(--chapter-inset-end)) 0
1206
- calc(var(--media-slider-chapter-start) + var(--chapter-gap) * var(--chapter-inset-start)) round
1207
- var(--track-border-radius)
1203
+ 0 calc(100% - var(--media-slider-chapter-end) + var(--chapter-inset-end)) 0
1204
+ calc(var(--media-slider-chapter-start) + var(--chapter-inset-start)) round var(--track-border-radius)
1208
1205
  );
1209
1206
  }
1210
1207
 
1211
1208
  &[data-highlighted] .media-slider__chapter-track {
1212
- height: var(--chapter-track-highlighted-size);
1209
+ height: var(--track-highlighted-size);
1213
1210
  }
1214
1211
  }
1215
1212
 
@@ -1217,16 +1214,15 @@ media-container {
1217
1214
  clip-path: inset(calc(100% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start) 0);
1218
1215
 
1219
1216
  .media-slider__chapter-track {
1220
- width: var(--chapter-track-size);
1217
+ width: var(--track-size);
1221
1218
  clip-path: inset(
1222
- calc(100% - var(--media-slider-chapter-end) + var(--chapter-gap) * var(--chapter-inset-end)) 0
1223
- calc(var(--media-slider-chapter-start) + var(--chapter-gap) * var(--chapter-inset-start)) 0 round
1224
- var(--track-border-radius)
1219
+ calc(100% - var(--media-slider-chapter-end) + var(--chapter-inset-end)) 0
1220
+ calc(var(--media-slider-chapter-start) + var(--chapter-inset-start)) 0 round var(--track-border-radius)
1225
1221
  );
1226
1222
  }
1227
1223
 
1228
1224
  &[data-highlighted] .media-slider__chapter-track {
1229
- width: var(--chapter-track-highlighted-size);
1225
+ width: var(--track-highlighted-size);
1230
1226
  }
1231
1227
  }
1232
1228
  }
@@ -1386,7 +1382,7 @@ media-container {
1386
1382
  .media-slider__chapter-title {
1387
1383
  min-width: 0;
1388
1384
  max-width: var(--max-width);
1389
- padding-inline: calc(var(--spacing) * 3);
1385
+ padding-inline: calc(var(--spacing) * 6);
1390
1386
  overflow: hidden;
1391
1387
  text-overflow: ellipsis;
1392
1388
  white-space: nowrap;
@@ -1417,14 +1413,15 @@ media-container {
1417
1413
  transition-duration: 200ms;
1418
1414
  transition-property: opacity, scale;
1419
1415
  }
1416
+ }
1420
1417
 
1421
- &[data-pointing]:not([data-dragging])::before,
1422
- &[data-pointing] :is(.media-slider__thumbnail, .media-slider__value),
1423
- &[data-interactive]:not([data-pointing]):not([data-dragging]) :is(.media-slider__value, .media-slider__thumbnail) {
1424
- opacity: 1;
1425
- filter: blur(0);
1426
- scale: 1;
1427
- }
1418
+ &:is([data-pointing], :has(:focus-visible))
1419
+ .media-slider__preview
1420
+ :is(.media-slider__value, .media-slider__thumbnail),
1421
+ .media-slider__preview[data-pointing]:not([data-dragging])::before {
1422
+ opacity: 1;
1423
+ filter: blur(0);
1424
+ scale: 1;
1428
1425
  }
1429
1426
  }
1430
1427
 
@@ -2228,6 +2225,10 @@ media-container {
2228
2225
  --scale: 1.75;
2229
2226
  }
2230
2227
  }
2228
+
2229
+ * {
2230
+ --focus-ring-color: oklch(1 0 0);
2231
+ }
2231
2232
  }
2232
2233
 
2233
2234
  /* Error Dialog */
@@ -49,7 +49,7 @@ Feature
49
49
 
50
50
  Browse the full list in the **Features** section of the sidebar.
51
51
 
52
- Each feature also has an **availability** property (`'available'`, `'unavailable'`, or `'unsupported'`) for hiding controls the platform does not support. See [Features](../concepts/features.md) for details.
52
+ Features for platform-dependent capabilities also expose one or more **availability** properties (`'available'`, `'unavailable'`, or `'unsupported'`) for hiding controls the platform does not support. See [Features](../concepts/features.md) for details.
53
53
 
54
54
  Access state and actions with [`PlayerController`](../reference/player-controller.md) and a feature selector:
55
55