@videojs/html 10.0.0-rc.3 → 10.0.0-rc.5

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 (1021) hide show
  1. package/dist/default/define/audio/compat-skin.css +1923 -0
  2. package/dist/default/define/audio/compat-skin.js +6 -0
  3. package/dist/default/define/audio/compat-skin2.js +4 -0
  4. package/dist/default/define/audio/neutral-skin.css +1855 -0
  5. package/dist/default/define/audio/neutral-skin.js +6 -0
  6. package/dist/default/define/audio/neutral-skin2.js +4 -0
  7. package/dist/default/define/audio/{minimal-ui.js → neutral-ui.js} +1 -1
  8. package/dist/default/define/audio/skin.css +1220 -1411
  9. package/dist/default/define/audio/skin2.js +1 -1
  10. package/dist/default/define/background/skin.css +8 -19
  11. package/dist/default/define/global.css +5 -21
  12. package/dist/default/define/live-audio/compat-skin.css +1708 -0
  13. package/dist/default/define/live-audio/compat-skin.js +6 -0
  14. package/dist/default/define/live-audio/compat-skin2.js +4 -0
  15. package/dist/default/define/live-audio/neutral-skin.css +1270 -0
  16. package/dist/default/define/live-audio/neutral-skin.js +6 -0
  17. package/dist/default/define/live-audio/neutral-skin2.js +4 -0
  18. package/dist/default/define/live-audio/{minimal-ui.js → neutral-ui.js} +1 -1
  19. package/dist/default/define/live-audio/skin.css +849 -959
  20. package/dist/default/define/live-audio/skin2.js +1 -1
  21. package/dist/default/define/live-video/compat-skin.css +2251 -0
  22. package/dist/default/define/live-video/compat-skin.js +6 -0
  23. package/dist/default/define/live-video/compat-skin2.js +4 -0
  24. package/dist/default/define/live-video/neutral-skin.css +2101 -0
  25. package/dist/default/define/live-video/neutral-skin.js +6 -0
  26. package/dist/default/define/live-video/neutral-skin2.js +4 -0
  27. package/dist/default/define/live-video/{minimal-ui.js → neutral-ui.js} +1 -1
  28. package/dist/default/define/live-video/skin.css +1565 -1784
  29. package/dist/default/define/live-video/skin2.js +1 -1
  30. package/dist/default/define/media/dash-video.js +5 -1
  31. package/dist/default/define/media/shaka-video.js +1 -0
  32. package/dist/default/define/shadow.css +2 -12
  33. package/dist/default/define/video/compat-skin.css +2529 -0
  34. package/dist/default/define/video/compat-skin.js +6 -0
  35. package/dist/default/define/video/compat-skin2.js +4 -0
  36. package/dist/default/define/video/neutral-skin.css +2849 -0
  37. package/dist/default/define/video/neutral-skin.js +6 -0
  38. package/dist/default/define/video/neutral-skin2.js +4 -0
  39. package/dist/default/define/video/{minimal-ui.js → neutral-ui.js} +1 -1
  40. package/dist/default/define/video/skin.css +2046 -2454
  41. package/dist/default/define/video/skin2.js +1 -1
  42. package/dist/default/extensions/google-cast/extension.js +18 -17
  43. package/dist/default/extensions/mux-data/extension.js +24 -24
  44. package/dist/default/extensions/player-extension-element.js +49 -0
  45. package/dist/default/i18n/index.js +2 -2
  46. package/dist/default/i18n/locale.js +10 -2
  47. package/dist/default/i18n/provider-element.js +1 -0
  48. package/dist/default/i18n/provider-mixin.js +11 -9
  49. package/dist/default/i18n/render-text.js +5 -1
  50. package/dist/default/i18n/text/airplay.js +1 -0
  51. package/dist/default/i18n/text/buttons.js +1 -0
  52. package/dist/default/i18n/text/captions.js +1 -0
  53. package/dist/default/i18n/text/cast.js +1 -0
  54. package/dist/default/i18n/text/common.js +1 -0
  55. package/dist/default/i18n/text/container.js +1 -0
  56. package/dist/default/i18n/text/errors.js +1 -0
  57. package/dist/default/i18n/text/fullscreen.js +1 -0
  58. package/dist/default/i18n/text/live.js +1 -0
  59. package/dist/default/i18n/text/menu.js +1 -0
  60. package/dist/default/i18n/text/pip.js +1 -0
  61. package/dist/default/i18n/text/playback.js +1 -0
  62. package/dist/default/i18n/text/seek.js +1 -0
  63. package/dist/default/i18n/text/slider.js +1 -0
  64. package/dist/default/i18n/text/status.js +1 -0
  65. package/dist/default/i18n/text/time.js +1 -0
  66. package/dist/default/i18n/text/volume.js +1 -0
  67. package/dist/default/icons/compat/index.js +26 -0
  68. package/dist/default/icons/dist/element/compat/icons.js +30 -0
  69. package/dist/default/icons/dist/element/{minimal → compat}/index.js +2 -2
  70. package/dist/default/icons/dist/element/index.js +2 -1
  71. package/dist/default/icons/dist/element/{minimal → neutral}/icons.js +1 -1
  72. package/dist/default/icons/dist/element/neutral/index.js +8 -0
  73. package/dist/default/icons/dist/html/compat/airplay-enter.js +4 -0
  74. package/dist/default/icons/dist/html/compat/airplay-exit.js +4 -0
  75. package/dist/default/icons/dist/html/compat/captions-off.js +4 -0
  76. package/dist/default/icons/dist/html/compat/captions-on.js +4 -0
  77. package/dist/default/icons/dist/html/compat/cast-enter.js +4 -0
  78. package/dist/default/icons/dist/html/compat/cast-exit.js +4 -0
  79. package/dist/default/icons/dist/html/compat/check.js +4 -0
  80. package/dist/default/icons/dist/html/compat/chevron.js +4 -0
  81. package/dist/default/icons/dist/html/compat/fullscreen-enter.js +4 -0
  82. package/dist/default/icons/dist/html/compat/fullscreen-exit.js +4 -0
  83. package/dist/default/icons/dist/html/compat/gear.js +4 -0
  84. package/dist/default/icons/dist/html/compat/pause.js +4 -0
  85. package/dist/default/icons/dist/html/compat/pip-enter.js +4 -0
  86. package/dist/default/icons/dist/html/compat/pip-exit.js +4 -0
  87. package/dist/default/icons/dist/html/compat/play.js +4 -0
  88. package/dist/default/icons/dist/html/compat/quality.js +4 -0
  89. package/dist/default/icons/dist/html/compat/restart.js +4 -0
  90. package/dist/default/icons/dist/html/compat/seek.js +4 -0
  91. package/dist/default/icons/dist/html/compat/speech.js +4 -0
  92. package/dist/default/icons/dist/html/compat/speed.js +4 -0
  93. package/dist/default/icons/dist/html/{minimal → compat}/spinner.js +1 -1
  94. package/dist/default/icons/dist/html/compat/switches.js +4 -0
  95. package/dist/default/icons/dist/html/compat/volume-high.js +4 -0
  96. package/dist/default/icons/dist/html/compat/volume-low.js +4 -0
  97. package/dist/default/icons/dist/html/compat/volume-off.js +4 -0
  98. package/dist/default/icons/dist/html/{minimal → neutral}/airplay-enter.js +1 -1
  99. package/dist/default/icons/dist/html/{minimal → neutral}/airplay-exit.js +1 -1
  100. package/dist/default/icons/dist/html/{minimal → neutral}/captions-off.js +1 -1
  101. package/dist/default/icons/dist/html/{minimal → neutral}/captions-on.js +1 -1
  102. package/dist/default/icons/dist/html/{minimal → neutral}/cast-enter.js +1 -1
  103. package/dist/default/icons/dist/html/{minimal → neutral}/cast-exit.js +1 -1
  104. package/dist/default/icons/dist/html/{minimal → neutral}/check.js +1 -1
  105. package/dist/default/icons/dist/html/{minimal → neutral}/chevron.js +1 -1
  106. package/dist/default/icons/dist/html/{minimal → neutral}/fullscreen-enter.js +1 -1
  107. package/dist/default/icons/dist/html/{minimal → neutral}/fullscreen-exit.js +1 -1
  108. package/dist/default/icons/dist/html/{minimal → neutral}/gear.js +1 -1
  109. package/dist/default/icons/dist/html/{minimal → neutral}/pause.js +1 -1
  110. package/dist/default/icons/dist/html/{minimal → neutral}/pip-enter.js +1 -1
  111. package/dist/default/icons/dist/html/{minimal → neutral}/pip-exit.js +1 -1
  112. package/dist/default/icons/dist/html/{minimal → neutral}/play.js +1 -1
  113. package/dist/default/icons/dist/html/{minimal → neutral}/quality.js +1 -1
  114. package/dist/default/icons/dist/html/{minimal → neutral}/restart.js +1 -1
  115. package/dist/default/icons/dist/html/{minimal → neutral}/seek.js +1 -1
  116. package/dist/default/icons/dist/html/{minimal → neutral}/speech.js +1 -1
  117. package/dist/default/icons/dist/html/{minimal → neutral}/speed.js +1 -1
  118. package/dist/default/icons/dist/html/neutral/spinner.js +4 -0
  119. package/dist/default/icons/dist/html/{minimal → neutral}/switches.js +1 -1
  120. package/dist/default/icons/dist/html/{minimal → neutral}/volume-high.js +1 -1
  121. package/dist/default/icons/dist/html/{minimal → neutral}/volume-low.js +1 -1
  122. package/dist/default/icons/dist/html/{minimal → neutral}/volume-off.js +1 -1
  123. package/dist/default/icons/element/compat/index.js +1 -0
  124. package/dist/default/icons/element/neutral/index.js +1 -0
  125. package/dist/default/icons/neutral/index.js +26 -0
  126. package/dist/default/index.js +4 -3
  127. package/dist/default/internal/skins/compat-audio/register.js +70 -0
  128. package/dist/default/internal/skins/compat-audio/skin.css +1891 -0
  129. package/dist/default/internal/skins/compat-audio/template.js +215 -0
  130. package/dist/default/internal/skins/compat-live-audio/register.js +50 -0
  131. package/dist/default/internal/skins/compat-live-audio/skin.css +1676 -0
  132. package/dist/default/internal/skins/compat-live-audio/template.js +112 -0
  133. package/dist/default/internal/skins/compat-live-video/register.js +86 -0
  134. package/dist/default/internal/skins/compat-live-video/skin.css +2219 -0
  135. package/dist/default/internal/skins/compat-live-video/template.js +237 -0
  136. package/dist/default/internal/skins/compat-video/register.js +115 -0
  137. package/dist/default/internal/skins/compat-video/skin.css +2497 -0
  138. package/dist/default/internal/skins/compat-video/template.js +457 -0
  139. package/dist/default/internal/skins/default-audio/register.js +8 -8
  140. package/dist/default/internal/skins/default-audio/skin.css +1213 -1365
  141. package/dist/default/internal/skins/default-live-audio/register.js +4 -4
  142. package/dist/default/internal/skins/default-live-audio/skin.css +842 -913
  143. package/dist/default/internal/skins/default-live-video/register.js +8 -8
  144. package/dist/default/internal/skins/default-live-video/skin.css +1548 -1728
  145. package/dist/default/internal/skins/default-video/register.js +13 -13
  146. package/dist/default/internal/skins/default-video/skin.css +2034 -2403
  147. package/dist/default/internal/skins/{minimal-audio → neutral-audio}/register.js +20 -20
  148. package/dist/default/internal/skins/neutral-audio/skin.css +1823 -0
  149. package/dist/default/internal/skins/{minimal-audio → neutral-audio}/template.js +24 -24
  150. package/dist/default/internal/skins/{minimal-live-audio → neutral-live-audio}/register.js +13 -13
  151. package/dist/default/internal/skins/neutral-live-audio/skin.css +1238 -0
  152. package/dist/default/internal/skins/{minimal-live-audio → neutral-live-audio}/template.js +14 -14
  153. package/dist/default/internal/skins/{minimal-live-video → neutral-live-video}/register.js +28 -28
  154. package/dist/default/internal/skins/neutral-live-video/skin.css +2069 -0
  155. package/dist/default/internal/skins/{minimal-live-video → neutral-live-video}/template.js +47 -47
  156. package/dist/default/internal/skins/{minimal-video → neutral-video}/register.js +40 -40
  157. package/dist/default/internal/skins/neutral-video/skin.css +2817 -0
  158. package/dist/default/internal/skins/{minimal-video → neutral-video}/template.js +75 -75
  159. package/dist/default/player/context.js +9 -1
  160. package/dist/default/player/create-player.js +2 -1
  161. package/dist/default/player/element.js +47 -10
  162. package/dist/default/presets/audio/compat-skin.js +19 -0
  163. package/dist/default/presets/audio/index.js +3 -2
  164. package/dist/default/presets/audio/neutral-skin.js +19 -0
  165. package/dist/default/presets/live-audio/compat-skin.js +19 -0
  166. package/dist/default/presets/live-audio/index.js +3 -2
  167. package/dist/default/presets/live-audio/neutral-skin.js +19 -0
  168. package/dist/default/presets/live-video/compat-skin.js +19 -0
  169. package/dist/default/presets/live-video/index.js +3 -2
  170. package/dist/default/presets/live-video/neutral-skin.js +19 -0
  171. package/dist/default/presets/video/compat-skin.js +19 -0
  172. package/dist/default/presets/video/index.js +3 -2
  173. package/dist/default/presets/video/neutral-skin.js +19 -0
  174. package/dist/default/store/media-attach-mixin.js +2 -0
  175. package/dist/default/ui/airplay-button/element.js +1 -1
  176. package/dist/default/ui/buffering-indicator/element.js +4 -0
  177. package/dist/default/ui/dialog/context.js +1 -0
  178. package/dist/default/ui/dialog/element.js +4 -2
  179. package/dist/default/ui/media-button-element.js +7 -6
  180. package/dist/default/ui/media-ui-element.js +6 -1
  181. package/dist/default/ui/menu/context.js +2 -0
  182. package/dist/default/ui/play-button/element.js +1 -1
  183. package/dist/default/ui/playback-rate-button/element.js +4 -2
  184. package/dist/default/ui/popover/element.js +4 -2
  185. package/dist/default/ui/radio-group/context.js +1 -0
  186. package/dist/default/ui/seek-indicator/element.js +7 -1
  187. package/dist/default/ui/slider/context.js +1 -0
  188. package/dist/default/ui/status-indicator/element.js +14 -1
  189. package/dist/default/ui/text/element.js +1 -0
  190. package/dist/default/ui/thumbnail/element.js +3 -2
  191. package/dist/default/ui/tooltip/context.js +1 -0
  192. package/dist/default/ui/tooltip/element.js +4 -2
  193. package/dist/default/ui/volume-popover/element.js +1 -1
  194. package/dist/default/ui/volume-slider/element.js +1 -1
  195. package/dist/default/version.js +27 -0
  196. package/dist/dev/define/audio/compat-skin.css +1923 -0
  197. package/dist/dev/define/audio/compat-skin.d.ts +1 -0
  198. package/dist/dev/define/audio/compat-skin.js +8 -0
  199. package/dist/dev/define/audio/compat-skin.js.map +1 -0
  200. package/dist/dev/define/audio/compat-skin2.js +6 -0
  201. package/dist/dev/define/audio/compat-skin2.js.map +1 -0
  202. package/dist/dev/define/audio/neutral-skin.css +1855 -0
  203. package/dist/dev/define/audio/neutral-skin.d.ts +1 -0
  204. package/dist/dev/define/audio/neutral-skin.js +8 -0
  205. package/dist/dev/define/audio/neutral-skin.js.map +1 -0
  206. package/dist/dev/define/audio/neutral-skin2.js +6 -0
  207. package/dist/dev/define/audio/neutral-skin2.js.map +1 -0
  208. package/dist/dev/define/audio/{minimal-ui.js → neutral-ui.js} +2 -2
  209. package/dist/dev/define/audio/{minimal-ui.js.map → neutral-ui.js.map} +1 -1
  210. package/dist/dev/define/audio/skin.css +1220 -1411
  211. package/dist/dev/define/audio/skin2.js +1 -1
  212. package/dist/dev/define/audio/skin2.js.map +1 -1
  213. package/dist/dev/define/background/skin.css +8 -19
  214. package/dist/dev/define/global.css +5 -21
  215. package/dist/dev/define/live-audio/compat-skin.css +1708 -0
  216. package/dist/dev/define/live-audio/compat-skin.d.ts +1 -0
  217. package/dist/dev/define/live-audio/compat-skin.js +8 -0
  218. package/dist/dev/define/live-audio/compat-skin.js.map +1 -0
  219. package/dist/dev/define/live-audio/compat-skin2.js +6 -0
  220. package/dist/dev/define/live-audio/compat-skin2.js.map +1 -0
  221. package/dist/dev/define/live-audio/neutral-skin.css +1270 -0
  222. package/dist/dev/define/live-audio/neutral-skin.d.ts +1 -0
  223. package/dist/dev/define/live-audio/neutral-skin.js +8 -0
  224. package/dist/dev/define/live-audio/neutral-skin.js.map +1 -0
  225. package/dist/dev/define/live-audio/neutral-skin2.js +6 -0
  226. package/dist/dev/define/live-audio/neutral-skin2.js.map +1 -0
  227. package/dist/dev/define/live-audio/{minimal-ui.js → neutral-ui.js} +2 -2
  228. package/dist/dev/define/live-audio/{minimal-ui.js.map → neutral-ui.js.map} +1 -1
  229. package/dist/dev/define/live-audio/skin.css +849 -959
  230. package/dist/dev/define/live-audio/skin2.js +1 -1
  231. package/dist/dev/define/live-audio/skin2.js.map +1 -1
  232. package/dist/dev/define/live-video/compat-skin.css +2251 -0
  233. package/dist/dev/define/live-video/compat-skin.d.ts +1 -0
  234. package/dist/dev/define/live-video/compat-skin.js +8 -0
  235. package/dist/dev/define/live-video/compat-skin.js.map +1 -0
  236. package/dist/dev/define/live-video/compat-skin2.js +6 -0
  237. package/dist/dev/define/live-video/compat-skin2.js.map +1 -0
  238. package/dist/dev/define/live-video/neutral-skin.css +2101 -0
  239. package/dist/dev/define/live-video/neutral-skin.d.ts +1 -0
  240. package/dist/dev/define/live-video/neutral-skin.js +8 -0
  241. package/dist/dev/define/live-video/neutral-skin.js.map +1 -0
  242. package/dist/dev/define/live-video/neutral-skin2.js +6 -0
  243. package/dist/dev/define/live-video/neutral-skin2.js.map +1 -0
  244. package/dist/dev/define/live-video/{minimal-ui.js → neutral-ui.js} +2 -2
  245. package/dist/dev/define/live-video/{minimal-ui.js.map → neutral-ui.js.map} +1 -1
  246. package/dist/dev/define/live-video/skin.css +1565 -1784
  247. package/dist/dev/define/live-video/skin2.js +1 -1
  248. package/dist/dev/define/live-video/skin2.js.map +1 -1
  249. package/dist/dev/define/media/background-video.d.ts +1 -2
  250. package/dist/dev/define/media/cloudflare-video.d.ts +3 -2
  251. package/dist/dev/define/media/cloudflare-video.js.map +1 -1
  252. package/dist/dev/define/media/dash-video.d.ts +8 -3
  253. package/dist/dev/define/media/dash-video.js +5 -1
  254. package/dist/dev/define/media/dash-video.js.map +1 -1
  255. package/dist/dev/define/media/hls-audio.d.ts +1 -2
  256. package/dist/dev/define/media/hls-background-video.d.ts +1 -2
  257. package/dist/dev/define/media/hls-video.d.ts +1 -2
  258. package/dist/dev/define/media/hlsjs-video.d.ts +3 -2
  259. package/dist/dev/define/media/hlsjs-video.js.map +1 -1
  260. package/dist/dev/define/media/mux-audio/hls-js.d.ts +3 -2
  261. package/dist/dev/define/media/mux-audio/hls-js.js.map +1 -1
  262. package/dist/dev/define/media/mux-audio/index.d.ts +2 -2
  263. package/dist/dev/define/media/mux-audio/spf.d.ts +3 -2
  264. package/dist/dev/define/media/mux-audio/spf.js.map +1 -1
  265. package/dist/dev/define/media/mux-background-video.d.ts +1 -2
  266. package/dist/dev/define/media/mux-video/hls-js.d.ts +3 -2
  267. package/dist/dev/define/media/mux-video/hls-js.js.map +1 -1
  268. package/dist/dev/define/media/mux-video/index.d.ts +2 -2
  269. package/dist/dev/define/media/mux-video/spf.d.ts +3 -2
  270. package/dist/dev/define/media/mux-video/spf.js.map +1 -1
  271. package/dist/dev/define/media/native-hls-video.d.ts +3 -2
  272. package/dist/dev/define/media/native-hls-video.js.map +1 -1
  273. package/dist/dev/define/media/shaka-video.d.ts +4 -2
  274. package/dist/dev/define/media/shaka-video.js +1 -0
  275. package/dist/dev/define/media/shaka-video.js.map +1 -1
  276. package/dist/dev/define/media/spotify-audio.d.ts +3 -2
  277. package/dist/dev/define/media/spotify-audio.js.map +1 -1
  278. package/dist/dev/define/media/tiktok-video.d.ts +3 -2
  279. package/dist/dev/define/media/tiktok-video.js.map +1 -1
  280. package/dist/dev/define/media/twitch-video.d.ts +3 -2
  281. package/dist/dev/define/media/twitch-video.js.map +1 -1
  282. package/dist/dev/define/media/vimeo-video.d.ts +3 -2
  283. package/dist/dev/define/media/vimeo-video.js.map +1 -1
  284. package/dist/dev/define/media/wistia-video.d.ts +3 -2
  285. package/dist/dev/define/media/wistia-video.js.map +1 -1
  286. package/dist/dev/define/media/youtube-video.d.ts +3 -2
  287. package/dist/dev/define/media/youtube-video.js.map +1 -1
  288. package/dist/dev/define/shadow.css +2 -12
  289. package/dist/dev/define/ui/menu-radio-group.d.ts +1 -0
  290. package/dist/dev/define/ui/menu.d.ts +1 -0
  291. package/dist/dev/define/ui/popover.d.ts +1 -0
  292. package/dist/dev/define/video/compat-skin.css +2529 -0
  293. package/dist/dev/define/video/compat-skin.d.ts +1 -0
  294. package/dist/dev/define/video/compat-skin.js +8 -0
  295. package/dist/dev/define/video/compat-skin.js.map +1 -0
  296. package/dist/dev/define/video/compat-skin2.js +6 -0
  297. package/dist/dev/define/video/compat-skin2.js.map +1 -0
  298. package/dist/dev/define/video/neutral-skin.css +2849 -0
  299. package/dist/dev/define/video/neutral-skin.d.ts +1 -0
  300. package/dist/dev/define/video/neutral-skin.js +8 -0
  301. package/dist/dev/define/video/neutral-skin.js.map +1 -0
  302. package/dist/dev/define/video/neutral-skin2.js +6 -0
  303. package/dist/dev/define/video/neutral-skin2.js.map +1 -0
  304. package/dist/dev/define/video/{minimal-ui.js → neutral-ui.js} +2 -2
  305. package/dist/dev/define/video/{minimal-ui.js.map → neutral-ui.js.map} +1 -1
  306. package/dist/dev/define/video/skin.css +2046 -2454
  307. package/dist/dev/define/video/skin2.js +1 -1
  308. package/dist/dev/define/video/skin2.js.map +1 -1
  309. package/dist/dev/extensions/google-cast/extension.d.ts +8 -7
  310. package/dist/dev/extensions/google-cast/extension.js +18 -17
  311. package/dist/dev/extensions/google-cast/extension.js.map +1 -1
  312. package/dist/dev/extensions/mux-data/extension.d.ts +6 -6
  313. package/dist/dev/extensions/mux-data/extension.js +24 -24
  314. package/dist/dev/extensions/mux-data/extension.js.map +1 -1
  315. package/dist/dev/extensions/player-extension-element.d.ts +30 -0
  316. package/dist/dev/extensions/player-extension-element.js +51 -0
  317. package/dist/dev/extensions/player-extension-element.js.map +1 -0
  318. package/dist/dev/i18n/context.d.ts +4 -5
  319. package/dist/dev/i18n/controller.d.ts +3 -4
  320. package/dist/dev/i18n/controller.js.map +1 -1
  321. package/dist/dev/i18n/create-i18n.d.ts +3 -4
  322. package/dist/dev/i18n/index.d.ts +2 -2
  323. package/dist/dev/i18n/index.js +2 -2
  324. package/dist/dev/i18n/locale.d.ts +12 -5
  325. package/dist/dev/i18n/locale.js +10 -2
  326. package/dist/dev/i18n/locale.js.map +1 -1
  327. package/dist/dev/i18n/provider-element.d.ts +4 -3
  328. package/dist/dev/i18n/provider-element.js +1 -0
  329. package/dist/dev/i18n/provider-element.js.map +1 -1
  330. package/dist/dev/i18n/provider-mixin.d.ts +1 -2
  331. package/dist/dev/i18n/provider-mixin.js +11 -9
  332. package/dist/dev/i18n/provider-mixin.js.map +1 -1
  333. package/dist/dev/i18n/render-text.d.ts +6 -3
  334. package/dist/dev/i18n/render-text.js +5 -1
  335. package/dist/dev/i18n/render-text.js.map +1 -1
  336. package/dist/dev/i18n/text/airplay.d.ts +1 -0
  337. package/dist/dev/i18n/text/airplay.js +1 -0
  338. package/dist/dev/i18n/text/buttons.d.ts +1 -0
  339. package/dist/dev/i18n/text/buttons.js +1 -0
  340. package/dist/dev/i18n/text/captions.d.ts +1 -0
  341. package/dist/dev/i18n/text/captions.js +1 -0
  342. package/dist/dev/i18n/text/cast.d.ts +1 -0
  343. package/dist/dev/i18n/text/cast.js +1 -0
  344. package/dist/dev/i18n/text/common.d.ts +1 -0
  345. package/dist/dev/i18n/text/common.js +1 -0
  346. package/dist/dev/i18n/text/container.d.ts +1 -0
  347. package/dist/dev/i18n/text/container.js +1 -0
  348. package/dist/dev/i18n/text/errors.d.ts +1 -0
  349. package/dist/dev/i18n/text/errors.js +1 -0
  350. package/dist/dev/i18n/text/fullscreen.d.ts +1 -0
  351. package/dist/dev/i18n/text/fullscreen.js +1 -0
  352. package/dist/dev/i18n/text/live.d.ts +1 -0
  353. package/dist/dev/i18n/text/live.js +1 -0
  354. package/dist/dev/i18n/text/menu.d.ts +1 -0
  355. package/dist/dev/i18n/text/menu.js +1 -0
  356. package/dist/dev/i18n/text/pip.d.ts +1 -0
  357. package/dist/dev/i18n/text/pip.js +1 -0
  358. package/dist/dev/i18n/text/playback.d.ts +1 -0
  359. package/dist/dev/i18n/text/playback.js +1 -0
  360. package/dist/dev/i18n/text/seek.d.ts +1 -0
  361. package/dist/dev/i18n/text/seek.js +1 -0
  362. package/dist/dev/i18n/text/slider.d.ts +1 -0
  363. package/dist/dev/i18n/text/slider.js +1 -0
  364. package/dist/dev/i18n/text/status.d.ts +1 -0
  365. package/dist/dev/i18n/text/status.js +1 -0
  366. package/dist/dev/i18n/text/time.d.ts +1 -0
  367. package/dist/dev/i18n/text/time.js +1 -0
  368. package/dist/dev/i18n/text/volume.d.ts +1 -0
  369. package/dist/dev/i18n/text/volume.js +1 -0
  370. package/dist/dev/i18n/text-mixin.d.ts +1 -2
  371. package/dist/dev/i18n/text-mixin.js.map +1 -1
  372. package/dist/dev/i18n/types.d.ts +2 -3
  373. package/dist/dev/icons/{minimal → compat}/index.d.ts +1 -1
  374. package/dist/dev/icons/compat/index.js +26 -0
  375. package/dist/dev/icons/dist/element/base.d.ts +1 -2
  376. package/dist/dev/icons/dist/element/base.js.map +1 -1
  377. package/dist/dev/icons/dist/element/compat/icons.js +32 -0
  378. package/dist/dev/icons/dist/element/compat/icons.js.map +1 -0
  379. package/dist/dev/icons/dist/element/{minimal → compat}/index.js +2 -2
  380. package/dist/dev/icons/dist/element/compat/index.js.map +1 -0
  381. package/dist/dev/icons/dist/element/index.js +2 -1
  382. package/dist/dev/icons/dist/element/index.js.map +1 -1
  383. package/dist/dev/icons/dist/element/{minimal → neutral}/icons.js +1 -1
  384. package/dist/dev/icons/dist/element/{minimal → neutral}/icons.js.map +1 -1
  385. package/dist/dev/icons/dist/element/neutral/index.d.ts +1 -0
  386. package/dist/dev/icons/dist/element/neutral/index.js +10 -0
  387. package/dist/dev/icons/dist/element/{minimal → neutral}/index.js.map +1 -1
  388. package/dist/dev/icons/dist/html/compat/airplay-enter.js +6 -0
  389. package/dist/dev/icons/dist/html/compat/airplay-enter.js.map +1 -0
  390. package/dist/dev/icons/dist/html/compat/airplay-exit.js +6 -0
  391. package/dist/dev/icons/dist/html/compat/airplay-exit.js.map +1 -0
  392. package/dist/dev/icons/dist/html/compat/captions-off.js +6 -0
  393. package/dist/dev/icons/dist/html/compat/captions-off.js.map +1 -0
  394. package/dist/dev/icons/dist/html/compat/captions-on.js +6 -0
  395. package/dist/dev/icons/dist/html/compat/captions-on.js.map +1 -0
  396. package/dist/dev/icons/dist/html/compat/cast-enter.js +6 -0
  397. package/dist/dev/icons/dist/html/compat/cast-enter.js.map +1 -0
  398. package/dist/dev/icons/dist/html/compat/cast-exit.js +6 -0
  399. package/dist/dev/icons/dist/html/compat/cast-exit.js.map +1 -0
  400. package/dist/dev/icons/dist/html/compat/check.js +6 -0
  401. package/dist/dev/icons/dist/html/compat/check.js.map +1 -0
  402. package/dist/dev/icons/dist/html/compat/chevron.js +6 -0
  403. package/dist/dev/icons/dist/html/compat/chevron.js.map +1 -0
  404. package/dist/dev/icons/dist/html/compat/fullscreen-enter.js +6 -0
  405. package/dist/dev/icons/dist/html/compat/fullscreen-enter.js.map +1 -0
  406. package/dist/dev/icons/dist/html/compat/fullscreen-exit.js +6 -0
  407. package/dist/dev/icons/dist/html/compat/fullscreen-exit.js.map +1 -0
  408. package/dist/dev/icons/dist/html/compat/gear.js +6 -0
  409. package/dist/dev/icons/dist/html/compat/gear.js.map +1 -0
  410. package/dist/dev/icons/dist/html/compat/index.d.ts +28 -0
  411. package/dist/dev/icons/dist/html/compat/pause.js +6 -0
  412. package/dist/dev/icons/dist/html/compat/pause.js.map +1 -0
  413. package/dist/dev/icons/dist/html/compat/pip-enter.js +6 -0
  414. package/dist/dev/icons/dist/html/compat/pip-enter.js.map +1 -0
  415. package/dist/dev/icons/dist/html/compat/pip-exit.js +6 -0
  416. package/dist/dev/icons/dist/html/compat/pip-exit.js.map +1 -0
  417. package/dist/dev/icons/dist/html/compat/play.js +6 -0
  418. package/dist/dev/icons/dist/html/compat/play.js.map +1 -0
  419. package/dist/dev/icons/dist/html/compat/quality.js +6 -0
  420. package/dist/dev/icons/dist/html/compat/quality.js.map +1 -0
  421. package/dist/dev/icons/dist/html/compat/restart.js +6 -0
  422. package/dist/dev/icons/dist/html/compat/restart.js.map +1 -0
  423. package/dist/dev/icons/dist/html/compat/seek.js +6 -0
  424. package/dist/dev/icons/dist/html/compat/seek.js.map +1 -0
  425. package/dist/dev/icons/dist/html/compat/speech.js +6 -0
  426. package/dist/dev/icons/dist/html/compat/speech.js.map +1 -0
  427. package/dist/dev/icons/dist/html/compat/speed.js +6 -0
  428. package/dist/dev/icons/dist/html/compat/speed.js.map +1 -0
  429. package/dist/dev/icons/dist/html/{minimal → compat}/spinner.js +1 -1
  430. package/dist/dev/icons/dist/html/compat/spinner.js.map +1 -0
  431. package/dist/dev/icons/dist/html/compat/switches.js +6 -0
  432. package/dist/dev/icons/dist/html/compat/switches.js.map +1 -0
  433. package/dist/dev/icons/dist/html/compat/volume-high.js +6 -0
  434. package/dist/dev/icons/dist/html/compat/volume-high.js.map +1 -0
  435. package/dist/dev/icons/dist/html/compat/volume-low.js +6 -0
  436. package/dist/dev/icons/dist/html/compat/volume-low.js.map +1 -0
  437. package/dist/dev/icons/dist/html/compat/volume-off.js +6 -0
  438. package/dist/dev/icons/dist/html/compat/volume-off.js.map +1 -0
  439. package/dist/dev/icons/dist/html/default/index.d.ts +25 -26
  440. package/dist/dev/icons/dist/html/{minimal → neutral}/airplay-enter.js +1 -1
  441. package/dist/dev/icons/dist/html/{minimal → neutral}/airplay-enter.js.map +1 -1
  442. package/dist/dev/icons/dist/html/{minimal → neutral}/airplay-exit.js +1 -1
  443. package/dist/dev/icons/dist/html/{minimal → neutral}/airplay-exit.js.map +1 -1
  444. package/dist/dev/icons/dist/html/{minimal → neutral}/captions-off.js +1 -1
  445. package/dist/dev/icons/dist/html/{minimal → neutral}/captions-off.js.map +1 -1
  446. package/dist/dev/icons/dist/html/{minimal → neutral}/captions-on.js +1 -1
  447. package/dist/dev/icons/dist/html/{minimal → neutral}/captions-on.js.map +1 -1
  448. package/dist/dev/icons/dist/html/{minimal → neutral}/cast-enter.js +1 -1
  449. package/dist/dev/icons/dist/html/{minimal → neutral}/cast-enter.js.map +1 -1
  450. package/dist/dev/icons/dist/html/{minimal → neutral}/cast-exit.js +1 -1
  451. package/dist/dev/icons/dist/html/{minimal → neutral}/cast-exit.js.map +1 -1
  452. package/dist/dev/icons/dist/html/{minimal → neutral}/check.js +1 -1
  453. package/dist/dev/icons/dist/html/{minimal → neutral}/check.js.map +1 -1
  454. package/dist/dev/icons/dist/html/{minimal → neutral}/chevron.js +1 -1
  455. package/dist/dev/icons/dist/html/{minimal → neutral}/chevron.js.map +1 -1
  456. package/dist/dev/icons/dist/html/{minimal → neutral}/fullscreen-enter.js +1 -1
  457. package/dist/dev/icons/dist/html/{minimal → neutral}/fullscreen-enter.js.map +1 -1
  458. package/dist/dev/icons/dist/html/{minimal → neutral}/fullscreen-exit.js +1 -1
  459. package/dist/dev/icons/dist/html/{minimal → neutral}/fullscreen-exit.js.map +1 -1
  460. package/dist/dev/icons/dist/html/{minimal → neutral}/gear.js +1 -1
  461. package/dist/dev/icons/dist/html/{minimal → neutral}/gear.js.map +1 -1
  462. package/dist/dev/icons/dist/html/neutral/index.d.ts +28 -0
  463. package/dist/dev/icons/dist/html/{minimal → neutral}/pause.js +1 -1
  464. package/dist/dev/icons/dist/html/{minimal → neutral}/pause.js.map +1 -1
  465. package/dist/dev/icons/dist/html/{minimal → neutral}/pip-enter.js +1 -1
  466. package/dist/dev/icons/dist/html/{minimal → neutral}/pip-enter.js.map +1 -1
  467. package/dist/dev/icons/dist/html/{minimal → neutral}/pip-exit.js +1 -1
  468. package/dist/dev/icons/dist/html/{minimal → neutral}/pip-exit.js.map +1 -1
  469. package/dist/dev/icons/dist/html/{minimal → neutral}/play.js +1 -1
  470. package/dist/dev/icons/dist/html/{minimal → neutral}/play.js.map +1 -1
  471. package/dist/dev/icons/dist/html/{minimal → neutral}/quality.js +1 -1
  472. package/dist/dev/icons/dist/html/{minimal → neutral}/quality.js.map +1 -1
  473. package/dist/dev/icons/dist/html/{minimal → neutral}/restart.js +1 -1
  474. package/dist/dev/icons/dist/html/{minimal → neutral}/restart.js.map +1 -1
  475. package/dist/dev/icons/dist/html/{minimal → neutral}/seek.js +1 -1
  476. package/dist/dev/icons/dist/html/{minimal → neutral}/seek.js.map +1 -1
  477. package/dist/dev/icons/dist/html/{minimal → neutral}/speech.js +1 -1
  478. package/dist/dev/icons/dist/html/{minimal → neutral}/speech.js.map +1 -1
  479. package/dist/dev/icons/dist/html/{minimal → neutral}/speed.js +1 -1
  480. package/dist/dev/icons/dist/html/{minimal → neutral}/speed.js.map +1 -1
  481. package/dist/dev/icons/dist/html/neutral/spinner.js +6 -0
  482. package/dist/dev/icons/dist/html/{minimal → neutral}/spinner.js.map +1 -1
  483. package/dist/dev/icons/dist/html/{minimal → neutral}/switches.js +1 -1
  484. package/dist/dev/icons/dist/html/{minimal → neutral}/switches.js.map +1 -1
  485. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-high.js +1 -1
  486. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-high.js.map +1 -1
  487. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-low.js +1 -1
  488. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-low.js.map +1 -1
  489. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-off.js +1 -1
  490. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-off.js.map +1 -1
  491. package/dist/dev/icons/element/compat/index.d.ts +1 -0
  492. package/dist/dev/icons/element/compat/index.js +1 -0
  493. package/dist/dev/icons/element/neutral/index.d.ts +1 -0
  494. package/dist/dev/icons/element/neutral/index.js +1 -0
  495. package/dist/dev/icons/element/register/index.d.ts +1 -2
  496. package/dist/dev/icons/neutral/index.d.ts +2 -0
  497. package/dist/dev/icons/neutral/index.js +26 -0
  498. package/dist/dev/index.d.ts +12 -7
  499. package/dist/dev/index.js +4 -3
  500. package/dist/dev/internal/skins/compat-audio/register.d.ts +43 -0
  501. package/dist/dev/internal/skins/compat-audio/register.js +72 -0
  502. package/dist/dev/internal/skins/compat-audio/register.js.map +1 -0
  503. package/dist/dev/internal/skins/compat-audio/skin.css +1891 -0
  504. package/dist/dev/internal/skins/compat-audio/template.js +217 -0
  505. package/dist/dev/internal/skins/compat-audio/template.js.map +1 -0
  506. package/dist/dev/internal/skins/compat-live-audio/register.d.ts +27 -0
  507. package/dist/dev/internal/skins/compat-live-audio/register.js +52 -0
  508. package/dist/dev/internal/skins/compat-live-audio/register.js.map +1 -0
  509. package/dist/dev/internal/skins/compat-live-audio/skin.css +1676 -0
  510. package/dist/dev/internal/skins/compat-live-audio/template.js +114 -0
  511. package/dist/dev/internal/skins/compat-live-audio/template.js.map +1 -0
  512. package/dist/dev/internal/skins/compat-live-video/register.d.ts +45 -0
  513. package/dist/dev/internal/skins/compat-live-video/register.js +88 -0
  514. package/dist/dev/internal/skins/compat-live-video/register.js.map +1 -0
  515. package/dist/dev/internal/skins/compat-live-video/skin.css +2219 -0
  516. package/dist/dev/internal/skins/compat-live-video/template.js +239 -0
  517. package/dist/dev/internal/skins/compat-live-video/template.js.map +1 -0
  518. package/dist/dev/internal/skins/compat-video/register.d.ts +62 -0
  519. package/dist/dev/internal/skins/compat-video/register.js +117 -0
  520. package/dist/dev/internal/skins/compat-video/register.js.map +1 -0
  521. package/dist/dev/internal/skins/compat-video/skin.css +2497 -0
  522. package/dist/dev/internal/skins/compat-video/template.js +459 -0
  523. package/dist/dev/internal/skins/compat-video/template.js.map +1 -0
  524. package/dist/dev/internal/skins/default-audio/register.d.ts +12 -12
  525. package/dist/dev/internal/skins/default-audio/register.js +8 -8
  526. package/dist/dev/internal/skins/default-audio/skin.css +1213 -1365
  527. package/dist/dev/internal/skins/default-live-audio/register.d.ts +4 -4
  528. package/dist/dev/internal/skins/default-live-audio/register.js +4 -4
  529. package/dist/dev/internal/skins/default-live-audio/skin.css +842 -913
  530. package/dist/dev/internal/skins/default-live-video/register.d.ts +10 -10
  531. package/dist/dev/internal/skins/default-live-video/register.js +8 -8
  532. package/dist/dev/internal/skins/default-live-video/skin.css +1548 -1728
  533. package/dist/dev/internal/skins/default-video/register.d.ts +18 -18
  534. package/dist/dev/internal/skins/default-video/register.js +13 -13
  535. package/dist/dev/internal/skins/default-video/skin.css +2034 -2403
  536. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/register.d.ts +14 -14
  537. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/register.js +20 -20
  538. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/register.js.map +1 -1
  539. package/dist/dev/internal/skins/neutral-audio/skin.css +1823 -0
  540. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/template.js +24 -24
  541. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/template.js.map +1 -1
  542. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/register.d.ts +4 -4
  543. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/register.js +13 -13
  544. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/register.js.map +1 -1
  545. package/dist/dev/internal/skins/neutral-live-audio/skin.css +1238 -0
  546. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/template.js +14 -14
  547. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/template.js.map +1 -1
  548. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/register.d.ts +10 -10
  549. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/register.js +28 -28
  550. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/register.js.map +1 -1
  551. package/dist/dev/internal/skins/neutral-live-video/skin.css +2069 -0
  552. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/template.js +47 -47
  553. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/template.js.map +1 -1
  554. package/dist/dev/internal/skins/{minimal-video → neutral-video}/register.d.ts +20 -20
  555. package/dist/dev/internal/skins/{minimal-video → neutral-video}/register.js +40 -40
  556. package/dist/dev/internal/skins/{minimal-video → neutral-video}/register.js.map +1 -1
  557. package/dist/dev/internal/skins/neutral-video/skin.css +2817 -0
  558. package/dist/dev/internal/skins/{minimal-video → neutral-video}/template.js +75 -75
  559. package/dist/dev/internal/skins/{minimal-video → neutral-video}/template.js.map +1 -1
  560. package/dist/dev/media/background-video/adapter.d.ts +1 -2
  561. package/dist/dev/media/background-video/template.d.ts +1 -2
  562. package/dist/dev/media/cloudflare-video/adapter.d.ts +3 -15
  563. package/dist/dev/media/dash-video/adapter.d.ts +3 -15
  564. package/dist/dev/media/hls-audio/adapter.d.ts +3 -15
  565. package/dist/dev/media/hls-background-video/adapter.d.ts +8 -5
  566. package/dist/dev/media/hls-background-video/adapter.js.map +1 -1
  567. package/dist/dev/media/hls-video/adapter.d.ts +3 -15
  568. package/dist/dev/media/hlsjs-video/adapter.d.ts +3 -15
  569. package/dist/dev/media/mux-audio/hls-js.d.ts +3 -15
  570. package/dist/dev/media/mux-audio/mixin.js.map +1 -1
  571. package/dist/dev/media/mux-audio/spf.d.ts +3 -15
  572. package/dist/dev/media/mux-video/hls-js.d.ts +3 -15
  573. package/dist/dev/media/mux-video/mixin.js.map +1 -1
  574. package/dist/dev/media/mux-video/spf.d.ts +3 -15
  575. package/dist/dev/media/native-hls-video/adapter.d.ts +3 -15
  576. package/dist/dev/media/shaka-video/adapter.d.ts +3 -15
  577. package/dist/dev/media/spotify-audio/adapter.d.ts +3 -15
  578. package/dist/dev/media/tiktok-video/adapter.d.ts +3 -15
  579. package/dist/dev/media/twitch-video/adapter.d.ts +3 -15
  580. package/dist/dev/media/vimeo-video/adapter.d.ts +3 -15
  581. package/dist/dev/media/wistia-video/adapter.d.ts +1 -2
  582. package/dist/dev/media/youtube-video/adapter.d.ts +3 -15
  583. package/dist/dev/player/context.d.ts +34 -15
  584. package/dist/dev/player/context.js +9 -1
  585. package/dist/dev/player/context.js.map +1 -1
  586. package/dist/dev/player/controller.d.ts +3 -4
  587. package/dist/dev/player/controller.js.map +1 -1
  588. package/dist/dev/player/create-player.d.ts +5 -6
  589. package/dist/dev/player/create-player.js +2 -1
  590. package/dist/dev/player/create-player.js.map +1 -1
  591. package/dist/dev/player/element.js +47 -10
  592. package/dist/dev/player/element.js.map +1 -1
  593. package/dist/dev/presets/audio/compat-skin.d.ts +15 -0
  594. package/dist/dev/presets/audio/compat-skin.js +21 -0
  595. package/dist/dev/presets/audio/compat-skin.js.map +1 -0
  596. package/dist/dev/presets/audio/index.d.ts +3 -2
  597. package/dist/dev/presets/audio/index.js +3 -2
  598. package/dist/dev/presets/audio/neutral-skin.d.ts +15 -0
  599. package/dist/dev/presets/audio/neutral-skin.js +21 -0
  600. package/dist/dev/presets/audio/neutral-skin.js.map +1 -0
  601. package/dist/dev/presets/audio/player.d.ts +2 -3
  602. package/dist/dev/presets/audio/skin.d.ts +2 -3
  603. package/dist/dev/presets/audio/skin.js.map +1 -1
  604. package/dist/dev/presets/background/player.d.ts +2 -3
  605. package/dist/dev/presets/background/skin.d.ts +1 -2
  606. package/dist/dev/presets/live-audio/compat-skin.d.ts +15 -0
  607. package/dist/dev/presets/live-audio/compat-skin.js +21 -0
  608. package/dist/dev/presets/live-audio/compat-skin.js.map +1 -0
  609. package/dist/dev/presets/live-audio/index.d.ts +3 -2
  610. package/dist/dev/presets/live-audio/index.js +3 -2
  611. package/dist/dev/presets/live-audio/neutral-skin.d.ts +15 -0
  612. package/dist/dev/presets/live-audio/neutral-skin.js +21 -0
  613. package/dist/dev/presets/live-audio/neutral-skin.js.map +1 -0
  614. package/dist/dev/presets/live-audio/player.d.ts +2 -3
  615. package/dist/dev/presets/live-audio/skin.d.ts +2 -3
  616. package/dist/dev/presets/live-audio/skin.js.map +1 -1
  617. package/dist/dev/presets/live-video/compat-skin.d.ts +15 -0
  618. package/dist/dev/presets/live-video/compat-skin.js +21 -0
  619. package/dist/dev/presets/live-video/compat-skin.js.map +1 -0
  620. package/dist/dev/presets/live-video/index.d.ts +3 -2
  621. package/dist/dev/presets/live-video/index.js +3 -2
  622. package/dist/dev/presets/live-video/neutral-skin.d.ts +15 -0
  623. package/dist/dev/presets/live-video/neutral-skin.js +21 -0
  624. package/dist/dev/presets/live-video/neutral-skin.js.map +1 -0
  625. package/dist/dev/presets/live-video/player.d.ts +2 -3
  626. package/dist/dev/presets/live-video/skin.d.ts +2 -3
  627. package/dist/dev/presets/live-video/skin.js.map +1 -1
  628. package/dist/dev/presets/skin.d.ts +1 -2
  629. package/dist/dev/presets/video/compat-skin.d.ts +15 -0
  630. package/dist/dev/presets/video/compat-skin.js +21 -0
  631. package/dist/dev/presets/video/compat-skin.js.map +1 -0
  632. package/dist/dev/presets/video/index.d.ts +3 -2
  633. package/dist/dev/presets/video/index.js +3 -2
  634. package/dist/dev/presets/video/neutral-skin.d.ts +15 -0
  635. package/dist/dev/presets/video/neutral-skin.js +21 -0
  636. package/dist/dev/presets/video/neutral-skin.js.map +1 -0
  637. package/dist/dev/presets/video/player.d.ts +2 -3
  638. package/dist/dev/presets/video/skin.d.ts +2 -3
  639. package/dist/dev/presets/video/skin.js.map +1 -1
  640. package/dist/dev/store/media-attach-mixin.d.ts +6 -4
  641. package/dist/dev/store/media-attach-mixin.js +2 -0
  642. package/dist/dev/store/media-attach-mixin.js.map +1 -1
  643. package/dist/dev/store/types.d.ts +2 -4
  644. package/dist/dev/ui/airplay-button/element.d.ts +4 -5
  645. package/dist/dev/ui/airplay-button/element.js +1 -1
  646. package/dist/dev/ui/airplay-button/element.js.map +1 -1
  647. package/dist/dev/ui/alert-dialog/element.d.ts +1 -2
  648. package/dist/dev/ui/audio-track-radio-group/element.d.ts +4 -5
  649. package/dist/dev/ui/audio-track-radio-group/element.js.map +1 -1
  650. package/dist/dev/ui/buffering-indicator/element.d.ts +2 -2
  651. package/dist/dev/ui/buffering-indicator/element.js +4 -0
  652. package/dist/dev/ui/buffering-indicator/element.js.map +1 -1
  653. package/dist/dev/ui/captions-button/element.d.ts +7 -10
  654. package/dist/dev/ui/captions-button/element.js.map +1 -1
  655. package/dist/dev/ui/captions-radio-group/element.d.ts +4 -5
  656. package/dist/dev/ui/captions-radio-group/element.js.map +1 -1
  657. package/dist/dev/ui/cast-button/element.d.ts +3 -4
  658. package/dist/dev/ui/cast-button/element.js.map +1 -1
  659. package/dist/dev/ui/container/element.d.ts +1 -2
  660. package/dist/dev/ui/container/element.js.map +1 -1
  661. package/dist/dev/ui/context-part-element.d.ts +2 -3
  662. package/dist/dev/ui/context-part-element.js.map +1 -1
  663. package/dist/dev/ui/controls/backdrop.d.ts +1 -2
  664. package/dist/dev/ui/controls/content.d.ts +1 -2
  665. package/dist/dev/ui/controls/context.d.ts +1 -2
  666. package/dist/dev/ui/controls/element.d.ts +1 -2
  667. package/dist/dev/ui/controls/element.js.map +1 -1
  668. package/dist/dev/ui/controls/group.d.ts +1 -2
  669. package/dist/dev/ui/dialog/backdrop.d.ts +1 -2
  670. package/dist/dev/ui/dialog/close.d.ts +1 -2
  671. package/dist/dev/ui/dialog/close.js.map +1 -1
  672. package/dist/dev/ui/dialog/context.d.ts +4 -3
  673. package/dist/dev/ui/dialog/context.js +1 -0
  674. package/dist/dev/ui/dialog/context.js.map +1 -1
  675. package/dist/dev/ui/dialog/description.d.ts +1 -2
  676. package/dist/dev/ui/dialog/element.d.ts +5 -4
  677. package/dist/dev/ui/dialog/element.js +4 -2
  678. package/dist/dev/ui/dialog/element.js.map +1 -1
  679. package/dist/dev/ui/dialog/popup.d.ts +1 -2
  680. package/dist/dev/ui/dialog/popup.js.map +1 -1
  681. package/dist/dev/ui/dialog/title.d.ts +1 -2
  682. package/dist/dev/ui/error-dialog/element.d.ts +1 -2
  683. package/dist/dev/ui/error-dialog/element.js.map +1 -1
  684. package/dist/dev/ui/fullscreen-button/element.d.ts +3 -5
  685. package/dist/dev/ui/fullscreen-button/element.js.map +1 -1
  686. package/dist/dev/ui/gesture/element.d.ts +1 -2
  687. package/dist/dev/ui/gesture/element.js.map +1 -1
  688. package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.d.ts +2 -3
  689. package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.js.map +1 -1
  690. package/dist/dev/ui/hotkey/element.d.ts +1 -2
  691. package/dist/dev/ui/hotkey/element.js.map +1 -1
  692. package/dist/dev/ui/input-indicator/element.d.ts +5 -4
  693. package/dist/dev/ui/input-indicator/element.js.map +1 -1
  694. package/dist/dev/ui/input-indicator/live-indicator.d.ts +2 -3
  695. package/dist/dev/ui/input-indicator/live-indicator.js.map +1 -1
  696. package/dist/dev/ui/live-button/element.d.ts +4 -4
  697. package/dist/dev/ui/live-button/element.js.map +1 -1
  698. package/dist/dev/ui/media-button-element.d.ts +17 -8
  699. package/dist/dev/ui/media-button-element.js +7 -6
  700. package/dist/dev/ui/media-button-element.js.map +1 -1
  701. package/dist/dev/ui/media-ui-element.d.ts +15 -7
  702. package/dist/dev/ui/media-ui-element.js +6 -1
  703. package/dist/dev/ui/media-ui-element.js.map +1 -1
  704. package/dist/dev/ui/menu/checkbox-item.d.ts +1 -2
  705. package/dist/dev/ui/menu/checkbox-item.js.map +1 -1
  706. package/dist/dev/ui/menu/content.d.ts +1 -2
  707. package/dist/dev/ui/menu/content.js.map +1 -1
  708. package/dist/dev/ui/menu/context.d.ts +9 -5
  709. package/dist/dev/ui/menu/context.js +2 -0
  710. package/dist/dev/ui/menu/context.js.map +1 -1
  711. package/dist/dev/ui/menu/element.d.ts +1 -2
  712. package/dist/dev/ui/menu/element.js.map +1 -1
  713. package/dist/dev/ui/menu/group-controller.js.map +1 -1
  714. package/dist/dev/ui/menu/group-label.d.ts +1 -2
  715. package/dist/dev/ui/menu/group-label.js.map +1 -1
  716. package/dist/dev/ui/menu/group.d.ts +1 -2
  717. package/dist/dev/ui/menu/group.js.map +1 -1
  718. package/dist/dev/ui/menu/item-indicator.d.ts +1 -2
  719. package/dist/dev/ui/menu/item.d.ts +1 -2
  720. package/dist/dev/ui/menu/item.js.map +1 -1
  721. package/dist/dev/ui/menu/radio-group.d.ts +1 -2
  722. package/dist/dev/ui/menu/radio-group.js.map +1 -1
  723. package/dist/dev/ui/menu/radio-item.d.ts +1 -2
  724. package/dist/dev/ui/menu/radio-item.js.map +1 -1
  725. package/dist/dev/ui/menu/separator.d.ts +1 -2
  726. package/dist/dev/ui/mute-button/element.d.ts +3 -4
  727. package/dist/dev/ui/mute-button/element.js.map +1 -1
  728. package/dist/dev/ui/pip-button/element.d.ts +4 -6
  729. package/dist/dev/ui/pip-button/element.js.map +1 -1
  730. package/dist/dev/ui/play-button/element.d.ts +3 -5
  731. package/dist/dev/ui/play-button/element.js +1 -1
  732. package/dist/dev/ui/play-button/element.js.map +1 -1
  733. package/dist/dev/ui/playback-rate-button/element.d.ts +4 -5
  734. package/dist/dev/ui/playback-rate-button/element.js +4 -2
  735. package/dist/dev/ui/playback-rate-button/element.js.map +1 -1
  736. package/dist/dev/ui/playback-rate-radio-group/element.d.ts +4 -5
  737. package/dist/dev/ui/playback-rate-radio-group/element.js.map +1 -1
  738. package/dist/dev/ui/popover/element.d.ts +1 -2
  739. package/dist/dev/ui/popover/element.js +4 -2
  740. package/dist/dev/ui/popover/element.js.map +1 -1
  741. package/dist/dev/ui/position-controller.js.map +1 -1
  742. package/dist/dev/ui/poster/element.d.ts +1 -2
  743. package/dist/dev/ui/poster/element.js.map +1 -1
  744. package/dist/dev/ui/quality-radio-group/element.d.ts +4 -5
  745. package/dist/dev/ui/quality-radio-group/element.js.map +1 -1
  746. package/dist/dev/ui/radio-group/context.d.ts +4 -3
  747. package/dist/dev/ui/radio-group/context.js +1 -0
  748. package/dist/dev/ui/radio-group/context.js.map +1 -1
  749. package/dist/dev/ui/radio-group/element.d.ts +1 -2
  750. package/dist/dev/ui/radio-group/element.js.map +1 -1
  751. package/dist/dev/ui/radio-options/controller.js.map +1 -1
  752. package/dist/dev/ui/seek-button/element.d.ts +2 -3
  753. package/dist/dev/ui/seek-button/element.js.map +1 -1
  754. package/dist/dev/ui/seek-indicator/element.d.ts +3 -4
  755. package/dist/dev/ui/seek-indicator/element.js +7 -1
  756. package/dist/dev/ui/seek-indicator/element.js.map +1 -1
  757. package/dist/dev/ui/seek-indicator/value.d.ts +1 -2
  758. package/dist/dev/ui/slider/buffer.d.ts +1 -2
  759. package/dist/dev/ui/slider/context.d.ts +4 -3
  760. package/dist/dev/ui/slider/context.js +1 -0
  761. package/dist/dev/ui/slider/context.js.map +1 -1
  762. package/dist/dev/ui/slider/element.d.ts +1 -2
  763. package/dist/dev/ui/slider/element.js.map +1 -1
  764. package/dist/dev/ui/slider/events.d.ts +4 -3
  765. package/dist/dev/ui/slider/fill.d.ts +1 -2
  766. package/dist/dev/ui/slider/preview.d.ts +1 -2
  767. package/dist/dev/ui/slider/preview.js.map +1 -1
  768. package/dist/dev/ui/slider/thumb.d.ts +1 -2
  769. package/dist/dev/ui/slider/thumb.js.map +1 -1
  770. package/dist/dev/ui/slider/thumbnail.d.ts +1 -2
  771. package/dist/dev/ui/slider/thumbnail.js.map +1 -1
  772. package/dist/dev/ui/slider/track.d.ts +1 -2
  773. package/dist/dev/ui/slider/value.d.ts +1 -2
  774. package/dist/dev/ui/slider/value.js.map +1 -1
  775. package/dist/dev/ui/status-announcer/element.d.ts +1 -2
  776. package/dist/dev/ui/status-announcer/element.js.map +1 -1
  777. package/dist/dev/ui/status-indicator/element.d.ts +9 -4
  778. package/dist/dev/ui/status-indicator/element.js +14 -1
  779. package/dist/dev/ui/status-indicator/element.js.map +1 -1
  780. package/dist/dev/ui/status-indicator/value.d.ts +1 -2
  781. package/dist/dev/ui/text/element.d.ts +4 -3
  782. package/dist/dev/ui/text/element.js +1 -0
  783. package/dist/dev/ui/text/element.js.map +1 -1
  784. package/dist/dev/ui/thumbnail/element.d.ts +5 -6
  785. package/dist/dev/ui/thumbnail/element.js +3 -2
  786. package/dist/dev/ui/thumbnail/element.js.map +1 -1
  787. package/dist/dev/ui/time/element.d.ts +1 -2
  788. package/dist/dev/ui/time/element.js.map +1 -1
  789. package/dist/dev/ui/time/group.d.ts +1 -2
  790. package/dist/dev/ui/time/separator.d.ts +1 -2
  791. package/dist/dev/ui/time-slider/chapter-title.d.ts +1 -2
  792. package/dist/dev/ui/time-slider/chapter-title.js.map +1 -1
  793. package/dist/dev/ui/time-slider/chapters.d.ts +1 -2
  794. package/dist/dev/ui/time-slider/chapters.js.map +1 -1
  795. package/dist/dev/ui/time-slider/element.d.ts +1 -2
  796. package/dist/dev/ui/time-slider/element.js.map +1 -1
  797. package/dist/dev/ui/title/element.d.ts +1 -2
  798. package/dist/dev/ui/title/element.js.map +1 -1
  799. package/dist/dev/ui/tooltip/context.d.ts +2 -2
  800. package/dist/dev/ui/tooltip/context.js +1 -0
  801. package/dist/dev/ui/tooltip/context.js.map +1 -1
  802. package/dist/dev/ui/tooltip/element.d.ts +1 -2
  803. package/dist/dev/ui/tooltip/element.js +4 -2
  804. package/dist/dev/ui/tooltip/element.js.map +1 -1
  805. package/dist/dev/ui/tooltip/group.d.ts +1 -2
  806. package/dist/dev/ui/tooltip/group.js.map +1 -1
  807. package/dist/dev/ui/tooltip/label.d.ts +1 -2
  808. package/dist/dev/ui/tooltip/label.js.map +1 -1
  809. package/dist/dev/ui/tooltip/shortcut.d.ts +1 -2
  810. package/dist/dev/ui/ui-element.d.ts +3 -3
  811. package/dist/dev/ui/ui-element.js.map +1 -1
  812. package/dist/dev/ui/volume-indicator/element.d.ts +3 -4
  813. package/dist/dev/ui/volume-indicator/element.js.map +1 -1
  814. package/dist/dev/ui/volume-indicator/fill.d.ts +1 -2
  815. package/dist/dev/ui/volume-indicator/value.d.ts +1 -2
  816. package/dist/dev/ui/volume-popover/element.d.ts +1 -2
  817. package/dist/dev/ui/volume-popover/element.js +1 -1
  818. package/dist/dev/ui/volume-popover/element.js.map +1 -1
  819. package/dist/dev/ui/volume-slider/element.d.ts +1 -2
  820. package/dist/dev/ui/volume-slider/element.js +1 -1
  821. package/dist/dev/ui/volume-slider/element.js.map +1 -1
  822. package/dist/dev/version.d.ts +21 -0
  823. package/dist/dev/version.js +29 -0
  824. package/dist/dev/version.js.map +1 -0
  825. package/docs/README.md +1 -1
  826. package/docs/guides/autoplay.md +10 -21
  827. package/docs/guides/background-video.md +74 -7
  828. package/docs/guides/browser-support.md +48 -36
  829. package/docs/guides/build-with-ai.md +1 -1
  830. package/docs/guides/build-your-own-component.md +5 -5
  831. package/docs/guides/captions.md +46 -6
  832. package/docs/guides/casting.md +24 -8
  833. package/docs/guides/cdn.md +11 -10
  834. package/docs/guides/content-security-policy.md +29 -5
  835. package/docs/guides/controls.md +25 -10
  836. package/docs/guides/customize-skins.md +2 -2
  837. package/docs/guides/features.md +3 -1
  838. package/docs/guides/fullscreen.md +35 -8
  839. package/docs/guides/installation-cdn.md +7 -7
  840. package/docs/guides/installation-shadcn.md +5 -5
  841. package/docs/guides/installation-svelte.md +6 -6
  842. package/docs/guides/installation-vue.md +6 -6
  843. package/docs/guides/installation.md +7 -7
  844. package/docs/guides/internationalization.md +37 -28
  845. package/docs/guides/keyboard-shortcuts.md +27 -15
  846. package/docs/guides/live-streams.md +51 -13
  847. package/docs/guides/llms.txt +6 -5
  848. package/docs/guides/media-sources.md +13 -6
  849. package/docs/guides/migrate-from-media-chrome.md +182 -51
  850. package/docs/guides/migrate-from-mux-player.md +191 -116
  851. package/docs/guides/migrate-from-plyr.md +171 -81
  852. package/docs/guides/migrate-from-video-js-8.md +256 -191
  853. package/docs/guides/migrate-from-vidstack.md +865 -0
  854. package/docs/guides/mux-data.md +23 -9
  855. package/docs/guides/picture-in-picture.md +22 -16
  856. package/docs/guides/playback-errors.md +10 -7
  857. package/docs/guides/poster.md +32 -11
  858. package/docs/guides/presets.md +15 -5
  859. package/docs/guides/quality.md +44 -5
  860. package/docs/guides/self-hosting.md +5 -5
  861. package/docs/guides/skins.md +6 -4
  862. package/docs/guides/thumbnails.md +24 -14
  863. package/docs/guides/ui-components.md +1 -1
  864. package/docs/guides/user-preferences.md +38 -15
  865. package/docs/guides/v10-roadmap.md +1 -1
  866. package/docs/llms.txt +45 -11
  867. package/docs/reference/api/create-i18n.md +3 -3
  868. package/docs/reference/api/create-translator.md +1 -1
  869. package/docs/reference/api/feature-audio-track.md +1 -1
  870. package/docs/reference/api/feature-controls.md +2 -2
  871. package/docs/reference/api/feature-fullscreen.md +1 -2
  872. package/docs/reference/api/feature-pip.md +3 -4
  873. package/docs/reference/api/feature-playback.md +2 -3
  874. package/docs/reference/api/feature-quality.md +2 -2
  875. package/docs/reference/api/feature-remote-playback.md +1 -1
  876. package/docs/reference/api/feature-source.md +2 -8
  877. package/docs/reference/api/feature-text-tracks.md +6 -8
  878. package/docs/reference/api/feature-volume.md +1 -1
  879. package/docs/reference/api/find-locale-keys.md +32 -0
  880. package/docs/reference/api/get-locale-key.md +32 -0
  881. package/docs/reference/api/html-create-player.md +24 -26
  882. package/docs/reference/api/i18n-controller.md +1 -1
  883. package/docs/reference/api/is-text.md +33 -0
  884. package/docs/reference/api/llms.txt +23 -2
  885. package/docs/reference/api/load-locale.md +36 -0
  886. package/docs/reference/api/media-capabilities.md +255 -0
  887. package/docs/reference/api/player-controller.md +39 -20
  888. package/docs/reference/api/player-store.md +112 -0
  889. package/docs/reference/api/preset-audio.md +116 -0
  890. package/docs/reference/api/preset-background.md +103 -0
  891. package/docs/reference/api/preset-live-audio.md +119 -0
  892. package/docs/reference/api/preset-live-video.md +124 -0
  893. package/docs/reference/api/preset-video.md +123 -0
  894. package/docs/reference/api/register-i18n.md +13 -0
  895. package/docs/reference/api/resolve-adapter-type.md +98 -0
  896. package/docs/reference/api/resolve-mime-type.md +48 -0
  897. package/docs/reference/api/resolve-translation.md +36 -0
  898. package/docs/reference/api/translate-text.md +56 -0
  899. package/docs/reference/api/translation-phrases.md +13 -0
  900. package/docs/reference/api/ui-element.md +296 -0
  901. package/docs/reference/components/audio-compat-skin.md +33 -0
  902. package/docs/reference/components/{audio-minimal-skin.md → audio-neutral-skin.md} +7 -7
  903. package/docs/reference/components/audio-skin.md +3 -3
  904. package/docs/reference/components/background-video-skin.md +1 -1
  905. package/docs/reference/components/background-video.md +1 -1
  906. package/docs/reference/components/captions-button.md +1 -1
  907. package/docs/reference/components/captions-radio-group.md +1 -1
  908. package/docs/reference/components/cloudflare-video.md +1 -1
  909. package/docs/reference/components/controls.md +2 -2
  910. package/docs/reference/components/dash-video.md +1 -1
  911. package/docs/reference/components/fullscreen-button.md +1 -1
  912. package/docs/reference/components/google-cast.md +4 -4
  913. package/docs/reference/components/hls-audio.md +1 -1
  914. package/docs/reference/components/hls-background-video.md +1 -1
  915. package/docs/reference/components/hls-video.md +1 -1
  916. package/docs/reference/components/hlsjs-video.md +2 -2
  917. package/docs/reference/components/icons.md +130 -0
  918. package/docs/reference/components/live-audio-compat-skin.md +35 -0
  919. package/docs/reference/components/{live-audio-minimal-skin.md → live-audio-neutral-skin.md} +7 -7
  920. package/docs/reference/components/live-audio-skin.md +3 -3
  921. package/docs/reference/components/live-video-compat-skin.md +41 -0
  922. package/docs/reference/components/{live-video-minimal-skin.md → live-video-neutral-skin.md} +7 -7
  923. package/docs/reference/components/live-video-skin.md +3 -3
  924. package/docs/reference/components/llms.txt +16 -6
  925. package/docs/reference/components/menu.md +7 -2
  926. package/docs/reference/components/mux-audio.md +2 -2
  927. package/docs/reference/components/mux-background-video.md +1 -1
  928. package/docs/reference/components/mux-data.md +4 -4
  929. package/docs/reference/components/mux-video.md +4 -4
  930. package/docs/reference/components/native-hls-video.md +1 -1
  931. package/docs/reference/components/pip-button.md +2 -2
  932. package/docs/reference/components/player.md +26 -2
  933. package/docs/reference/components/popover.md +6 -8
  934. package/docs/reference/components/shaka-video.md +1 -1
  935. package/docs/reference/components/spotify-audio.md +1 -1
  936. package/docs/reference/components/status-indicator.md +27 -4
  937. package/docs/reference/components/thumbnail.md +1 -1
  938. package/docs/reference/components/tiktok-video.md +1 -1
  939. package/docs/reference/components/twitch-video.md +1 -1
  940. package/docs/reference/components/video-compat-skin.md +45 -0
  941. package/docs/reference/components/{video-minimal-skin.md → video-neutral-skin.md} +7 -7
  942. package/docs/reference/components/video-skin.md +3 -3
  943. package/docs/reference/components/vimeo-video.md +1 -1
  944. package/docs/reference/components/wistia-video.md +1 -1
  945. package/docs/reference/components/youtube-video.md +1 -1
  946. package/package.json +54 -42
  947. package/dist/default/define/audio/minimal-skin.css +0 -2048
  948. package/dist/default/define/audio/minimal-skin.js +0 -6
  949. package/dist/default/define/audio/minimal-skin2.js +0 -4
  950. package/dist/default/define/live-audio/minimal-skin.css +0 -1378
  951. package/dist/default/define/live-audio/minimal-skin.js +0 -6
  952. package/dist/default/define/live-audio/minimal-skin2.js +0 -4
  953. package/dist/default/define/live-video/minimal-skin.css +0 -2311
  954. package/dist/default/define/live-video/minimal-skin.js +0 -6
  955. package/dist/default/define/live-video/minimal-skin2.js +0 -4
  956. package/dist/default/define/video/minimal-skin.css +0 -3232
  957. package/dist/default/define/video/minimal-skin.js +0 -6
  958. package/dist/default/define/video/minimal-skin2.js +0 -4
  959. package/dist/default/extensions/media-extension-element.js +0 -54
  960. package/dist/default/icons/element/minimal/index.js +0 -1
  961. package/dist/default/icons/minimal/index.js +0 -26
  962. package/dist/default/internal/skins/minimal-audio/skin.css +0 -1977
  963. package/dist/default/internal/skins/minimal-live-audio/skin.css +0 -1307
  964. package/dist/default/internal/skins/minimal-live-video/skin.css +0 -2240
  965. package/dist/default/internal/skins/minimal-video/skin.css +0 -3161
  966. package/dist/default/presets/audio/minimal-skin.js +0 -19
  967. package/dist/default/presets/live-audio/minimal-skin.js +0 -19
  968. package/dist/default/presets/live-video/minimal-skin.js +0 -19
  969. package/dist/default/presets/video/minimal-skin.js +0 -19
  970. package/dist/dev/define/audio/minimal-skin.css +0 -2048
  971. package/dist/dev/define/audio/minimal-skin.d.ts +0 -1
  972. package/dist/dev/define/audio/minimal-skin.js +0 -8
  973. package/dist/dev/define/audio/minimal-skin.js.map +0 -1
  974. package/dist/dev/define/audio/minimal-skin2.js +0 -6
  975. package/dist/dev/define/audio/minimal-skin2.js.map +0 -1
  976. package/dist/dev/define/live-audio/minimal-skin.css +0 -1378
  977. package/dist/dev/define/live-audio/minimal-skin.d.ts +0 -1
  978. package/dist/dev/define/live-audio/minimal-skin.js +0 -8
  979. package/dist/dev/define/live-audio/minimal-skin.js.map +0 -1
  980. package/dist/dev/define/live-audio/minimal-skin2.js +0 -6
  981. package/dist/dev/define/live-audio/minimal-skin2.js.map +0 -1
  982. package/dist/dev/define/live-video/minimal-skin.css +0 -2311
  983. package/dist/dev/define/live-video/minimal-skin.d.ts +0 -1
  984. package/dist/dev/define/live-video/minimal-skin.js +0 -8
  985. package/dist/dev/define/live-video/minimal-skin.js.map +0 -1
  986. package/dist/dev/define/live-video/minimal-skin2.js +0 -6
  987. package/dist/dev/define/live-video/minimal-skin2.js.map +0 -1
  988. package/dist/dev/define/video/minimal-skin.css +0 -3232
  989. package/dist/dev/define/video/minimal-skin.d.ts +0 -1
  990. package/dist/dev/define/video/minimal-skin.js +0 -8
  991. package/dist/dev/define/video/minimal-skin.js.map +0 -1
  992. package/dist/dev/define/video/minimal-skin2.js +0 -6
  993. package/dist/dev/define/video/minimal-skin2.js.map +0 -1
  994. package/dist/dev/extensions/media-extension-element.d.ts +0 -29
  995. package/dist/dev/extensions/media-extension-element.js +0 -56
  996. package/dist/dev/extensions/media-extension-element.js.map +0 -1
  997. package/dist/dev/icons/dist/html/minimal/index.d.ts +0 -29
  998. package/dist/dev/icons/element/minimal/index.d.ts +0 -1
  999. package/dist/dev/icons/element/minimal/index.js +0 -1
  1000. package/dist/dev/icons/minimal/index.js +0 -26
  1001. package/dist/dev/internal/skins/minimal-audio/skin.css +0 -1977
  1002. package/dist/dev/internal/skins/minimal-live-audio/skin.css +0 -1307
  1003. package/dist/dev/internal/skins/minimal-live-video/skin.css +0 -2240
  1004. package/dist/dev/internal/skins/minimal-video/skin.css +0 -3161
  1005. package/dist/dev/presets/audio/minimal-skin.d.ts +0 -16
  1006. package/dist/dev/presets/audio/minimal-skin.js +0 -21
  1007. package/dist/dev/presets/audio/minimal-skin.js.map +0 -1
  1008. package/dist/dev/presets/live-audio/minimal-skin.d.ts +0 -16
  1009. package/dist/dev/presets/live-audio/minimal-skin.js +0 -21
  1010. package/dist/dev/presets/live-audio/minimal-skin.js.map +0 -1
  1011. package/dist/dev/presets/live-video/minimal-skin.d.ts +0 -16
  1012. package/dist/dev/presets/live-video/minimal-skin.js +0 -21
  1013. package/dist/dev/presets/live-video/minimal-skin.js.map +0 -1
  1014. package/dist/dev/presets/video/minimal-skin.d.ts +0 -16
  1015. package/dist/dev/presets/video/minimal-skin.js +0 -21
  1016. package/dist/dev/presets/video/minimal-skin.js.map +0 -1
  1017. /package/dist/dev/define/audio/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1018. /package/dist/dev/define/live-audio/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1019. /package/dist/dev/define/live-video/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1020. /package/dist/dev/define/video/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1021. /package/dist/dev/icons/dist/element/{minimal → compat}/index.d.ts +0 -0
@@ -1,70 +1,84 @@
1
1
  # Browser support
2
2
 
3
- Browsers and rendering environments supported by Video.js 10, and what the stylesheets need from them
3
+ Browsers and rendering environments supported by Video.js 10, and how the packaged skins reach them
4
4
 
5
- Video.js 10 supports the **latest two stable versions** of Chrome, Edge, Firefox, Safari, and Safari on iOS. This page shows the versions that means today, what the packaged skins need from a browser, and how to reach older ones.
6
-
7
- ## Browser baseline
8
-
9
- The build reads the policy from a [browserslist](https://browsersl.ist) query in the repository, and this page resolves the same query when the docs are built:
10
-
11
- *Supported browsers and the versions the support policy resolves to today*
5
+ *Supported browsers and the versions of each that Video.js supports*
12
6
 
13
7
  | Browser | Versions |
14
8
  | --- | --- |
15
- | Chrome | 150 and 151 |
16
- | Edge | 150 and 151 |
17
- | Firefox | 153 and 154 |
18
- | Safari | 26.5 and 26.6 |
19
- | Safari on iOS | 26.5 and 26.6 |
9
+ | Chrome | 111 and later |
10
+ | Edge | 111 and later |
11
+ | Firefox | 121 and later |
12
+ | Safari | 16.4 and later |
13
+ | Safari on iOS | 16.4 and later |
20
14
 
21
- These are the versions we test in and fix bugs for. We build directly on the web platform, with [custom elements](https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements), [`@scope`](https://developer.mozilla.org/en-US/docs/Web/CSS/@scope), [container queries](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_containment/Container_queries), and [anchor positioning](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_anchor_positioning), and we do not hold a feature back to keep older versions working. Older versions often work anyway:
15
+ These versions account for 91.5% of global web usage according to [caniuse-lite](https://github.com/browserslist/caniuse-lite) 1.0.30001810, and this figure updates when we update that data.
22
16
 
23
- In practice the packaged skins render in Chrome 120, Edge 120, Firefox 146, Safari 17.4, and Safari on iOS 17.4 and later. Those versions account for 89.2% of global web usage according to [caniuse-lite](https://github.com/browserslist/caniuse-lite) 1.0.30001810, and this figure updates when we update that data.
17
+ We test in and fix bugs for these versions. Each minimum comes from a feature with no fallback: `:has()` sets Firefox, [`color-mix()`](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-mix) and [`oklch()`](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklch) set Chrome and Edge (Chrome 111, Firefox 113, Safari 16.2), and the JavaScript sets Safari, because it uses ES2022 syntax and [`adoptedStyleSheets`](https://developer.mozilla.org/en-US/docs/Web/API/Document/adoptedStyleSheets). Newer JavaScript APIs are feature-detected.
24
18
 
25
19
  ## CSS requirements
26
20
 
27
- The packaged skins are generated CSS, and a handful of newer features hold a skin together. **Required** features have no fallback: without them the player shows no component styling, and `@scope` alone sets the floor. **Degrades** features lose one visual detail. **Has a fallback** features sit inside [`@supports`](https://developer.mozilla.org/en-US/docs/Web/CSS/@supports); anchor positioning falls back to positions computed in JavaScript.
21
+ The packaged skins are generated CSS, and the build lowers them for the browsers above. It flattens CSS nesting, adds vendor prefixes such as `-webkit-backdrop-filter`, and writes each skin’s scope as a [`:where()`](https://developer.mozilla.org/en-US/docs/Web/CSS/:where) selector, which adds no specificity, rather than [`@scope`](https://developer.mozilla.org/en-US/docs/Web/CSS/@scope).
22
+
23
+ Skins you add as source through the [Shadcn registry](./installation-shadcn.md) keep `@scope`, which reads more clearly in files you edit. Their plain CSS versions need Chrome and Edge 118, Firefox 146, and Safari and iOS 17.4 unless you [flatten `@scope` in your build](#flatten-scope-in-registry-skins); the Tailwind versions style elements with utility classes and follow the versions above.
24
+
25
+ Newer color functions get a fallback, and the original declaration moves inside [`@supports`](https://developer.mozilla.org/en-US/docs/Web/CSS/@supports), so browsers that have the function still use it:
26
+
27
+ - [`light-dark()`](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/light-dark) uses its light color. The audio skins render their light theme, and the video skins keep the light hairline border.
28
+ - [`contrast-color()`](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/contrast-color) uses each theme’s default text color on primary buttons and the inherited text color elsewhere. The fallback cannot read a custom accent, so set `--media-accent-text-color` whenever you set `--media-accent-color`; see [Customize skins](./customize-skins.md).
29
+ - [Relative colors](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_colors/Relative_colors) that keep their origin’s channels, which build the scrims behind the controls, become `color-mix()`. Subtle shadows derived from `currentColor` have no equivalent and are left out.
30
+
31
+ Tooltips, menus, and popovers use the [Popover API](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API) where it exists (Chrome 114, Firefox 125, Safari 17). In older supported versions they stay inside the player instead of the top layer: the skins hide them while closed and position them against the player while open, so on the video skins a menu taller than the player is cut off.
28
32
 
29
- The table reads the first fully supporting version of each feature from [caniuse-lite](https://github.com/browserslist/caniuse-lite) when the docs build, and feature names link to [caniuse.com](https://caniuse.com/). The **effective floor** is the newest required version in each column.
33
+ The table reads the first fully supporting version of each feature from [caniuse-lite](https://github.com/browserslist/caniuse-lite) when the docs build, and feature names link to [caniuse.com](https://caniuse.com/). **Required** features have no fallback. **Degrades** features lose one visual detail. **Has a fallback** features keep working another way: anchor positioning falls back to positions computed in JavaScript, `:dir()` sits beside `[dir="rtl"]` selectors, and the packaged skins flatten `@scope` into `:where()` selectors.
30
34
 
31
- *First browser version that fully supports each CSS feature the packaged skins use, with the share of global web usage on supporting browsers. Feature names link to their caniuse.com support data. "Not supported" means the browser has no full support. Paired browsers share a column and show two values only when they differ. The effective floor row is the newest required version in each column.*
35
+ *First browser version that fully supports each CSS feature the packaged skins use, with the share of global web usage on supporting browsers. Feature names link to their caniuse.com support data. "Not supported" means the browser has no full support. Paired browsers share a column and show two values only when they differ.*
32
36
 
33
37
  | Feature | Chrome and Edge | Firefox | Safari and iOS | Global support |
34
38
  | --- | --- | --- | --- | --- |
35
- | [`@scope`](https://caniuse.com/css-cascade-scope) Required. No component styling. | 118 | 146 | 17.4 | 90.0% |
36
- | [`CSS nesting`](https://caniuse.com/css-nesting) Required. No component styling. | 120 | 117 | 17.2 | 90.7% |
39
+ | [`@scope`](https://caniuse.com/css-cascade-scope) Has a fallback. Packaged skins use :where() selectors instead; registry CSS skins need it. | 118 | 146 | 17.4 | 90.0% |
37
40
  | [`@layer`](https://caniuse.com/css-cascade-layers) Required. No component styling. | 99 | 97 | 15.4 | 95.3% |
38
41
  | [`:has()`](https://caniuse.com/css-has) Required. Menu and slider focus states are lost. | 105 | 121 | 15.4 | 94.1% |
39
42
  | [`@container`](https://caniuse.com/css-container-queries) Required. Controls do not adapt to player width. | 106 | 110 | 16 | 94.0% |
40
43
  | [`Media query range syntax`](https://caniuse.com/css-media-range-syntax) Required. Large-screen sizing is lost. | 104 | 63 | 16.4 | 94.0% |
41
- | [`:dir()`](https://caniuse.com/css-dir-pseudo) Required. Right-to-left layout is lost. | 120 | 17 | 16.4 | 91.4% |
42
- | [`Relative color syntax`](https://caniuse.com/css-relative-colors) Degrades. Adaptive shadows are lost. | 131 | 133 | 18 | 85.7% |
44
+ | [`:dir()`](https://caniuse.com/css-dir-pseudo) Has a fallback. Right-to-left layout follows the dir attribute instead. | 120 | 17 | 16.4 | 91.4% |
45
+ | [`Relative color syntax`](https://caniuse.com/css-relative-colors) Degrades. Control scrims fall back to color-mix(), and subtle shadows are lost. | 131 | 133 | 18 | 85.7% |
43
46
  | [`scrollbar-color and scrollbar-width`](https://caniuse.com/css-scrollbar) Degrades. Menus show default scrollbars. | 121 | 64 | 26.2 | 85.6% |
44
47
  | [`backdrop-filter`](https://caniuse.com/css-backdrop-filter) Degrades. Surfaces lose their blur. | 76 / 17 | 103 | 9 | 95.7% |
45
48
  | [`Anchor positioning`](https://caniuse.com/css-anchor-positioning) Has a fallback. Popups are positioned by JavaScript. | 125 | 147 | 26 | 84.1% |
46
- | Effective floor | 120 | 146 | 17.4 | 89.2% |
47
49
 
48
- A few features have no caniuse entry. [`oklch()`](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklch) is required but older than the floor (Chrome 111, Firefox 113, Safari 15.4). [`light-dark()`](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/light-dark), [relative colors](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_colors/Relative_colors), [`@property`](https://developer.mozilla.org/en-US/docs/Web/CSS/@property), and [`contrast-color()`](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/contrast-color) each degrade on their own; set `--media-accent-text-color` from [Customize skins](./customize-skins.md) if you support browsers without `contrast-color()`. [Firefox ESR](https://www.mozilla.org/en-US/firefox/enterprise/) releases older than 146 lack `@scope`, so the skins render unstyled there.
50
+ Older browsers than the baseline are not tested. Without `:has()`, `@container`, `@layer`, `color-mix()`, or `oklch()`, the skins lose focus states, layout, or colors.
49
51
 
50
- The JavaScript has a lower floor: ES2022 syntax, with newer APIs feature-detected, so it runs in Chrome 102, Firefox 112, and Safari 16.4 or later. The stylesheet decides whether an older browser shows a working player.
52
+ ## Build the skin CSS yourself
51
53
 
52
- ### Support older browsers
54
+ Packaged HTML skins inline their CSS into JavaScript, so [add the skin source to your project](./customize-skins.md#style-skin-source) first. The added `skin.css` can pass through your CSS pipeline. CDN bundles inline their CSS too; to recompile it, move to a [self-hosted build](./self-hosting.md) and use the skin source instead of the prebuilt CDN skin.
53
55
 
54
- To reach browsers below the floor, recompile the skin stylesheet with fallbacks. Only a stylesheet your build processes can be recompiled.
56
+ [Lightning CSS](https://lightningcss.dev/transpilation.html), which Vite uses to minify CSS, rewrites `light-dark()` and `:dir()` for every browser when its targets include older ones, not only for those older browsers. Its `light-dark()` output depends on a `color-scheme` declaration the skins do not make, so the skin colors break. The skins keep `light-dark()` inside `@supports` checks, which Lightning CSS 1.32 and earlier leave alone but 1.33 and later rewrite anyway. The skins already handle both features, so exclude them:
55
57
 
56
- Packaged HTML skins inline their CSS into JavaScript, so [add the skin source to your project](./customize-skins.md#style-skin-source) first. The added `skin.css` can pass through your CSS pipeline. CDN bundles inline their CSS too; to recompile it, move to a [self-hosted build](./self-hosting.md) and use the skin source instead of the prebuilt CDN skin.
58
+ **vite.config.ts**
59
+
60
+ ```ts
61
+ import { Features } from 'lightningcss';
62
+ import { defineConfig } from 'vite';
63
+
64
+ export default defineConfig({
65
+ css: {
66
+ lightningcss: { exclude: Features.LightDark | Features.DirSelector },
67
+ },
68
+ });
69
+ ```
70
+
71
+ ### Flatten `@scope` in registry skins
57
72
 
58
- [lightningcss](https://lightningcss.dev/transpilation.html) and [postcss-preset-env](https://preset-env.cssdb.org/) both read a browserslist query and add what those browsers lack: they flatten nesting and rewrite `:dir()`, range media queries, `light-dark()`, and `oklch()` in ordinary declarations, and add vendor prefixes. Neither rewrites `@scope` or `:scope`, so a small plugin flattens each block into descendant selectors prefixed with [`:where(root)`](https://developer.mozilla.org/en-US/docs/Web/CSS/:where), which adds no specificity. The PostCSS version, picked up by Vite, Next.js, and most bundlers from `postcss.config.mjs`:
73
+ Registry skins in plain CSS keep `@scope`, and Lightning CSS passes it through unchanged. To reach browsers without `@scope`, add a PostCSS plugin that rewrites each block into descendant selectors prefixed with [`:where(root)`](https://developer.mozilla.org/en-US/docs/Web/CSS/:where), which adds no specificity. Vite, Next.js, and most bundlers pick it up from `postcss.config.mjs` and run it before Lightning CSS:
59
74
 
60
75
  ```bash
61
- npm install --save-dev postcss postcss-preset-env postcss-selector-parser
76
+ npm install --save-dev postcss postcss-selector-parser
62
77
  ```
63
78
 
64
79
  **postcss.config.mjs**
65
80
 
66
81
  ```js
67
- import presetEnv from 'postcss-preset-env';
68
82
  import selectorParser from 'postcss-selector-parser';
69
83
 
70
84
  /** Rewrite `@scope (<root>) { … }` into descendant selectors that older browsers understand. */
@@ -76,7 +90,7 @@ function flattenScope() {
76
90
 
77
91
  sel.walk((node) => {
78
92
  if (node.type === 'nesting' || (node.type === 'pseudo' && node.value === ':scope')) {
79
- node.replaceWith(selectorParser.string({ value: root }));
93
+ node.replaceWith(selectorParser.string({ value: `:where(${root})` }));
80
94
  referencesRoot = true;
81
95
  }
82
96
  });
@@ -109,12 +123,10 @@ function flattenScope() {
109
123
  }
110
124
  flattenScope.postcss = true;
111
125
 
112
- export default {
113
- plugins: [flattenScope(), presetEnv({ browsers: 'baseline widely available', stage: 2 })],
114
- };
126
+ export default { plugins: [flattenScope()] };
115
127
  ```
116
128
 
117
- The result renders in Chrome 111, Firefox 121, and Safari 16.4 or later, the floor [Tailwind CSS 4 documents](https://tailwindcss.com/docs/compatibility#browser-support), because `:has()`, `@container`, `@layer`, and `color-mix()` have no fallback. Flattening `@scope` trades scope proximity for source order; the packaged skins never nest a component inside itself, so the output matches. Run `npx browserslist "baseline widely available"` to see what the query resolves to today, or pick another query for your audience.
129
+ Flattening trades scope proximity for source order, the same way the packaged skins do. Keep the Lightning CSS `exclude` setting above so the colors still work.
118
130
 
119
131
  ## Rendering contexts
120
132
 
@@ -9,7 +9,7 @@ The [Video.js skill](https://github.com/videojs/skills) gives coding agents the
9
9
  Paste this prompt into your coding agent:
10
10
 
11
11
  ```
12
- Install the Video.js skill: run `npx @videojs/cli agents skills` and follow the steps for the agent you are running in. If you can't run commands, follow the install instructions at https://github.com/videojs/skills instead. Then use the Video.js skill for this project. When installation details are needed, run `npx @videojs/cli agents init --framework html` to print the version-matched choices and instructions without changing files.
12
+ Install the Video.js skill: run `npx @videojs/cli agents skills` and follow the steps for the agent you are running in. If you can't run commands, follow the install instructions at https://github.com/videojs/skills instead. Then use the Video.js skill when you work on video or audio in this project. When installation details are needed, run `npx @videojs/cli agents init --framework html` to print the version-matched choices and instructions without changing files.
13
13
  ```
14
14
 
15
15
  ## Video.js Skill
@@ -164,8 +164,8 @@ Custom components read player state and dispatch actions through [features](./fe
164
164
  | --- | --- | --- |
165
165
  | `paused`, `ended` | `play()`, `pause()` | [Playback](../reference/api/feature-playback.md) |
166
166
  | `currentTime`, `duration` | `seek()` | [Time](../reference/api/feature-time.md) |
167
- | `volume`, `muted` | `setVolume()`, `toggleMuted()` | [Volume](../reference/api/feature-volume.md) |
168
- | `fullscreen` | `requestFullscreen()`, `exitFullscreen()` | [Fullscreen](../reference/api/feature-fullscreen.md) |
167
+ | `volume`, `muted` | `setVolume()`, `setMuted()` | [Volume](../reference/api/feature-volume.md) |
168
+ | `isFullscreen` | `requestFullscreen()`, `exitFullscreen()` | [Fullscreen](../reference/api/feature-fullscreen.md) |
169
169
 
170
170
  The API reference lists every feature with the state and actions it adds.
171
171
 
@@ -192,9 +192,9 @@ Without a selector, `PlayerController` returns the full store without subscribin
192
192
  import { createPlayer, PlayerController } from '@videojs/html';
193
193
  import { videoFeatures } from '@videojs/html/video';
194
194
 
195
- const { context } = createPlayer({ features: videoFeatures });
195
+ const { playerContext: videoPlayerContext } = createPlayer({ features: videoFeatures });
196
196
 
197
- #store = new PlayerController(this, context);
197
+ #store = new PlayerController(this, videoPlayerContext);
198
198
 
199
199
  // Call any action
200
200
  this.#store.value?.play();
@@ -226,7 +226,7 @@ Add the skin source to your project and modify it. See [Customize skins](./custo
226
226
 
227
227
  ### State and actions are typed as `unknown`
228
228
 
229
- You’re using the shared `playerContext`, which doesn’t know which features your player has. Use the typed `context` returned by `createPlayer`.
229
+ You’re passing the `playerContext` exported from `@videojs/html`, which doesn’t know which features your player has. Pass the context `createPlayer` returns instead, as `videoPlayerContext` does in [How it works](#how-it-works), or use the `PlayerController` that `createPlayer` returns, which is already bound to it and takes no context argument.
230
230
 
231
231
  ### The component renders but never updates
232
232
 
@@ -10,6 +10,8 @@ Show captions and subtitles, and let users turn them on and pick a language.
10
10
 
11
11
  Add WebVTT tracks as `<track>` children of the media element, and give users a [`<media-captions-button>`](../reference/components/captions-button.md) to toggle them.
12
12
 
13
+ The `<track>` loads `/docs/demos/text-tracks/captions.vtt`, shown in the `captions.vtt` tab. Host a WebVTT file for your video and point `src` at its URL.
14
+
13
15
  **index.html**
14
16
 
15
17
  ```html
@@ -74,14 +76,29 @@ import '@videojs/html/ui/container';
74
76
  import '@videojs/html/ui/captions-button';
75
77
  ```
76
78
 
79
+ **captions.vtt**
80
+
81
+ ```text
82
+ WEBVTT
83
+
84
+ 00:00.000 --> 00:03.000
85
+ This is a demo of the captions button.
86
+
87
+ 00:03.000 --> 00:06.000
88
+ Captions help make video accessible to everyone.
89
+
90
+ 00:06.000 --> 00:09.000
91
+ Toggle captions on and off with a single click.
92
+ ```
93
+
77
94
  ## How it works
78
95
 
79
96
  The [text track feature](../reference/api/feature-text-tracks.md) mirrors the media element’s `textTracks` into player state:
80
97
 
81
98
  - `textTrackList` holds every track with its `id`, `kind`, `label`, `language`, and `mode`.
82
99
  - `subtitlesShowing` is `true` when any caption or subtitle track is showing.
83
- - `toggleSubtitles(forceShow?)` shows or hides all caption and subtitle tracks.
84
- - `selectSubtitlesTrack(id)` shows one track and disables the rest; pass `'off'` to disable all.
100
+ - `toggleSubtitles(forceShow?)` hides captions if a caption or subtitle track is showing. Otherwise it shows one track, chosen in this order: the last track shown, a track matching the browser language, then the first available track. Pass `true` or `false` to force captions on or off.
101
+ - `selectSubtitlesTrack(id)` shows one track and disables the rest; pass `null` to disable all.
85
102
 
86
103
  Tracks don’t have to come from `<track>` elements: tracks that streaming media exposes (for example in-manifest HLS captions) appear in `textTrackList` the same way.
87
104
 
@@ -93,7 +110,7 @@ The browser renders the cues. Style them with the `::cue` pseudo-element.
93
110
  - Cues load asynchronously. A track appears in `textTrackList` before its cues are parsed, so cue-driven UI fills in when the track finishes loading.
94
111
  - Cross-origin track files require CORS: serve the VTT with CORS headers and set `crossorigin` on the media element.
95
112
  - Track selection UIs identify tracks by `label` and `language`; give every track both.
96
- - `default` on a `<track>` makes the browser show it initially.
113
+ - `default` on a `<track>` marks it as the preferred initial track. The browser’s caption preferences can select another track.
97
114
 
98
115
  ## Common variations
99
116
 
@@ -101,7 +118,30 @@ The browser renders the cues. Style them with the `::cue` pseudo-element.
101
118
 
102
119
  For multiple languages, render a menu instead of a toggle.
103
120
 
104
- Use [`<media-captions-radio-group>`](../reference/components/captions-radio-group.md) inside a menu or popover for explicit track selection.
121
+ Replace the Captions button in the primary example with a menu containing [`<media-captions-radio-group>`](../reference/components/captions-radio-group.md). Keep the player, container, and track setup, and add these imports:
122
+
123
+ ```html
124
+ <button type="button" commandfor="captions-menu">Captions</button>
125
+ <media-menu id="captions-menu" side="top" align="end">
126
+ <media-menu-content>
127
+ <media-captions-radio-group label="Captions">
128
+ <template>
129
+ <media-menu-radio-item>
130
+ <span data-part="label"></span>
131
+ <media-menu-item-indicator>✓</media-menu-item-indicator>
132
+ </media-menu-radio-item>
133
+ </template>
134
+ </media-captions-radio-group>
135
+ </media-menu-content>
136
+ </media-menu>
137
+ <script type="module">
138
+ import '@videojs/html/ui/menu';
139
+ import '@videojs/html/ui/menu-content';
140
+ import '@videojs/html/ui/menu-radio-item';
141
+ import '@videojs/html/ui/menu-item-indicator';
142
+ import '@videojs/html/ui/captions-radio-group';
143
+ </script>
144
+ ```
105
145
 
106
146
  ## Troubleshooting
107
147
 
@@ -117,9 +157,9 @@ Confirm that:
117
157
 
118
158
  The track file is served from another origin without CORS headers. Serve it with `Access-Control-Allow-Origin` and set `crossorigin` on the media element.
119
159
 
120
- ### The selection menu is empty
160
+ ### The captions menu is empty
121
161
 
122
- The media has no caption or subtitle tracks, so captions availability is `'unavailable'`. For streaming sources, confirm the manifest actually declares text tracks.
162
+ The radio group hides when there are no caption or subtitle tracks, but the example’s plain Captions button still renders. Hide or disable that trigger while `textTrackList` contains no caption or subtitle entries. For streaming sources, confirm the manifest actually declares text tracks.
123
163
 
124
164
  ## Related pages
125
165
 
@@ -8,9 +8,17 @@ Send playback to an Apple TV over AirPlay or a Chromecast over Google Cast while
8
8
  >
9
9
  > Using a pre-built [skin](./skins.md)? It already includes the controls shown here. You may still need the media or player setup in this guide. The component examples are for building your own player UI from individual [components](./ui-components.md).
10
10
 
11
+ ## Installation
12
+
13
+ Install the Google Cast extension and the hls.js adapter used in the example below. AirPlay needs no extra package:
14
+
15
+ ```bash
16
+ pnpm add @videojs/html @videojs/google-cast @videojs/hlsjs-video
17
+ ```
18
+
11
19
  ## Recommended approach
12
20
 
13
- Use the [`<google-cast>` extension](../reference/components/google-cast.md) with a [`<media-cast-button>`](../reference/components/cast-button.md), and add an [`<media-airplay-button>`](../reference/components/airplay-button.md) for Safari. The prebuilt skins already include both buttons; add `<google-cast>` next to a streaming media component to enable the configurable Cast route.
21
+ Use the [`<google-cast>` extension](../reference/components/google-cast.md) with a [`<media-cast-button>`](../reference/components/cast-button.md), and add an [`<media-airplay-button>`](../reference/components/airplay-button.md) for Safari. The packaged skins already include both buttons; add `<google-cast>` anywhere inside the player to enable the configurable Cast route. It works with any media the player attaches, including a plain `<video>`.
14
22
 
15
23
  **index.html**
16
24
 
@@ -108,28 +116,32 @@ import '@videojs/html/ui/airplay-button';
108
116
  import '@videojs/html/ui/cast-button';
109
117
  ```
110
118
 
111
- The demo pairs the streaming media element with the `<google-cast>` extension. Without that extension, `<media-cast-button>` drives the browser’s native Remote Playback API instead, which does not provide Video.js receiver or load-request configuration.
119
+ The demo pairs the media element with the `<google-cast>` extension. Without that extension, `<media-cast-button>` drives the browser’s native Remote Playback API instead, which does not provide Video.js receiver or load-request configuration.
112
120
 
113
121
  ## How it works
114
122
 
115
123
  The [remote playback feature](../reference/api/feature-remote-playback.md) gives AirPlay and Google Cast one state shape:
116
124
 
117
125
  - `remotePlaybackAvailability` is `'available'` when a remote device can be reached, `'unavailable'` when the API exists but no device is reachable, and `'unsupported'` when the browser has no remote playback route.
118
- - `remotePlaybackState` is `'disconnected'`, `'connecting'`, or `'connected'`.
119
- - `toggleRemotePlayback()` opens the browser’s device picker, or disconnects an active session.
126
+ - `remotePlaybackState` is `'disconnected'`, `'connecting'`, or `'connected'`. The AirPlay route reports only `'disconnected'` and `'connected'`; Google Cast also reports `'connecting'`.
127
+ - `promptRemotePlayback()` opens the browser’s device picker, including during an active session. Use the picker to connect to a device or return to local playback.
120
128
 
121
129
  AirPlay uses WebKit’s presentation APIs. Google Cast uses a sender and receiver: the browser sends the receiver a media URL and then controls playback. Your UI reads the same Video.js state for either route.
122
130
 
123
131
  While connected, playback actions — play, pause, seek, volume — proxy to the remote device, and player state keeps reflecting the remote session. Local playback is suspended.
124
132
 
125
- The Google Cast SDK loads only when the `<google-cast>` extension is present in a Chromium browser. Players without that extension and browsers that cannot cast do not load it.
133
+ Control playback and read its state through the player while casting: use the built-in controls or the [store actions and state](../reference/api/player-store.md) on the player element’s `store`. Don’t call methods on the media element or listen for its events to drive or track a session.
134
+
135
+ For a custom control, call `promptRemotePlayback()` directly from the click handler and catch its promise. It rejects when no remote route exists or the browser refuses the request. A canceled Google Cast picker can also resolve without connecting, so show success only when `remotePlaybackState` is `'connected'`. The built-in buttons handle the request for you.
136
+
137
+ The Google Cast SDK loads only when the player includes the `<google-cast>` extension and runs in a Chromium browser that can cast.
126
138
 
127
139
  ## Availability and constraints
128
140
 
129
141
  - Remote playback is asynchronous and can fail mid-session when a device or network disappears. React to `remotePlaybackState` rather than assuming a request succeeds.
130
142
  - Google Cast works only in Chromium-based browsers; elsewhere its route reports `'unsupported'`.
131
143
  - AirPlay works only in Safari; availability requires an AirPlay device reachable on the network.
132
- - The remote device fetches the source and tracks itself. Localhost, VPN-only, expired, or cross-origin URLs without the necessary CORS headers will fail on the receiver even if they play in the browser.
144
+ - The remote device fetches the source and its text tracks on its own. Localhost, VPN-only, expired, or cross-origin URLs without the necessary CORS headers will fail on the receiver even if they play in the browser.
133
145
  - Set the `disableremoteplayback` attribute on the media element to opt out entirely.
134
146
 
135
147
  ## Common variations
@@ -142,7 +154,7 @@ By default, Video.js sends the current source to Google’s Default Media Receiv
142
154
  <google-cast receiver="YOUR_APP_ID"></google-cast>
143
155
  ```
144
156
 
145
- Use `src` and `contentType` when the receiver should load a different source than the browser. `streamType` and `customData` let you describe that source and attach application-specific data. See the [`<google-cast>` reference](../reference/components/google-cast.md) for the exact option types and attribute-to-property mapping.
157
+ Use `src` and `contentType` when the receiver should load a different source than the browser. A YouTube or Vimeo embed needs `src`: the receiver can’t play the embed itself, so without it nothing is sent to the receiver. `streamType` and `customData` let you describe that source and attach application-specific data. See the [`<google-cast>` reference](../reference/components/google-cast.md) for the exact option types and attribute-to-property mapping.
146
158
 
147
159
  ### Read connection state
148
160
 
@@ -158,9 +170,13 @@ The Cast button hides when the route is unsupported. In Chromium with no Cast de
158
170
 
159
171
  The receiver cannot fetch the media. Confirm the source URL is reachable from the device and served with CORS headers, including caption tracks.
160
172
 
173
+ ### Custom UI shows local playback while casting
174
+
175
+ The code reads or controls the media element directly. Read playback state from the player store and call its actions instead; only the player reflects the remote session.
176
+
161
177
  ### The UI freezes on “connecting”
162
178
 
163
- The user dismissed the picker or the device disconnected. `remotePlaybackState` returns to `'disconnected'`; drive your UI from that state.
179
+ For Google Cast, track the `promptRemotePlayback()` promise separately from `remotePlaybackState`. Clear your loading indicator when the promise settles. A canceled picker can resolve without connecting. AirPlay does not expose a `'connecting'` phase; show its connected or disconnected state instead.
164
180
 
165
181
  ## Related pages
166
182
 
@@ -23,7 +23,8 @@ Each installation [preset](./presets.md) ships its bundles at the package root:
23
23
  | File | Registers |
24
24
  | --- | --- |
25
25
  | `video.js` | `<video-player>`, `<video-skin>`, and the UI elements the skin composes |
26
- | `video-minimal.js` | `<video-player>`, `<video-minimal-skin>`, and the UI elements the minimal skin composes |
26
+ | `video-neutral.js` | `<video-player>`, `<video-neutral-skin>`, and the UI elements the neutral skin composes |
27
+ | `video-compat.js` | `<video-player>`, `<video-compat-skin>`, and the UI elements the compat skin composes |
27
28
  | `video-player.js` | `<video-player>` alone, for markup without a packaged skin |
28
29
 
29
30
  The other presets follow the same pattern. Background video is the exception: one bundle, `background.js`, registers the player, the skin, and the `<background-video>` media element.
@@ -35,8 +36,8 @@ A skin bundle registers every UI element its skin is built from. Any element the
35
36
  Each [UI element](./ui-components.md) is its own bundle under `ui/`, for markup that a skin bundle does not already cover: a player-only bundle, [skin source](./customize-skins.md#style-skin-source) that adds a component the packaged skin lacks, or a [dialog](../reference/components/dialog.md) your page opens beside a packaged skin.
36
37
 
37
38
  ```html
38
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.3/video-player.js"></script>
39
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.3/ui/play-button.js"></script>
39
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/video-player.js"></script>
40
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/ui/play-button.js"></script>
40
41
  ```
41
42
 
42
43
  Each path mirrors its npm subpath: `ui/play-button.js` registers the element that `@videojs/html/ui/play-button` does. Compound components list one bundle per part in their reference page’s Import section, and all of the bundles share chunks with the player.
@@ -46,8 +47,8 @@ Each path mirrors its npm subpath: `ui/play-button.js` registers the element tha
46
47
  The default presets play through the browser’s own `<video>` and `<audio>`. Every other [media element](./media-sources.md) is its own bundle under `media/`, loaded beside the player bundle:
47
48
 
48
49
  ```html
49
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.3/video.js"></script>
50
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.3/media/hlsjs-video.js"></script>
50
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/video.js"></script>
51
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/media/hlsjs-video.js"></script>
51
52
  ```
52
53
 
53
54
  Each path mirrors its npm subpath. Elements with more than one playback engine keep the extra flavors in a directory named for the element, such as `media/mux-video/spf.js`. Load one flavor per page: every flavor claims the same tag name, and the first registration wins.
@@ -57,9 +58,9 @@ Each path mirrors its npm subpath. Elements with more than one playback engine k
57
58
  Each [extension](./architecture.md) is its own bundle under `extensions/`, loaded beside the player and media bundles:
58
59
 
59
60
  ```html
60
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.3/video.js"></script>
61
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.3/media/mux-video.js"></script>
62
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.3/extensions/mux-data.js"></script>
61
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/video.js"></script>
62
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/media/mux-video.js"></script>
63
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/extensions/mux-data.js"></script>
63
64
  ```
64
65
 
65
66
  As with media, each path mirrors its npm subpath: `extensions/mux-data.js` registers the element that `@videojs/html/extensions/mux-data` does.
@@ -69,8 +70,8 @@ As with media, each path mirrors its npm subpath: `extensions/mux-data.js` regis
69
70
  English ships inside the skin bundles. Each other locale is a bundle under `locales/` that registers its translations on import. Load it before the player script to avoid a flash of English:
70
71
 
71
72
  ```html
72
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.3/locales/es.js"></script>
73
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.3/video.js"></script>
73
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/locales/es.js"></script>
74
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/video.js"></script>
74
75
  ```
75
76
 
76
77
  One bundle exists per locale pack, plus bare-language aliases such as `pt`. For custom strings, see [Internationalize the player](./internationalization.md).
@@ -8,13 +8,15 @@ Content Security Policy (CSP) limits which resources a page can load. Video.js u
8
8
 
9
9
  - `media-src` must allow your media URLs.
10
10
  - `img-src` must allow any poster or thumbnail image URLs.
11
- - `connect-src` must allow HLS manifests, playlists, captions, and segment requests when using HLS playback.
12
- - `media-src blob:` is required when using the HLS player variants, which use MSE-backed playback.
13
- - `worker-src blob:` is required when using the `hls.js` player variants.
11
+ - `connect-src` must allow manifests, playlists, captions, and segment requests when using HLS or DASH playback.
12
+ - `media-src blob:` is required when your engine uses Media Source Extensions (MSE), including HLS and DASH engines.
13
+ - `worker-src blob:` is required for hls.js workers, which are enabled by default.
14
14
  - `style-src 'unsafe-inline'` is required for some player UI and HTML player styling behavior.
15
15
 
16
16
  ## Recommended policy
17
17
 
18
+ Start with this policy for native, HLS, and DASH playback. For embeds and Google Cast, add the provider origins below.
19
+
18
20
  ```http
19
21
  Content-Security-Policy:
20
22
  script-src 'self';
@@ -23,11 +25,33 @@ Content-Security-Policy:
23
25
  media-src 'self' https: blob:;
24
26
  connect-src 'self' https:;
25
27
  worker-src 'self' blob:;
28
+ frame-src 'none';
26
29
  ```
27
30
 
28
- This policy assumes you bundle Video.js with your application or serve it from your own origin. If you load the player from a CDN, add that CDN’s origin to `script-src`.
31
+ This policy assumes you bundle Video.js with your application or serve it from your own origin. If you load the player from a CDN, add that CDN’s origin to `script-src`. Add it to `style-src` too if you load stylesheets from that CDN.
32
+
33
+ Replace broad sources such as `https:` with the exact origins your player uses. Remove sources your deployment does not need. Keep `media-src blob:` for engines that use MSE. Keep `worker-src blob:` for engines that create blob workers, as hls.js does by default.
34
+
35
+ ## Allow embeds and Google Cast
36
+
37
+ Add only the origins for the providers you use. Extend `script-src` with their script origins. If a provider lists iframe origins, replace `frame-src 'none'` with those origins. A dash means the Video.js integration does not directly load that resource.
38
+
39
+ | Provider | `script-src` origins | `frame-src` origins |
40
+ | --- | --- | --- |
41
+ | YouTube | `https://www.youtube.com` | `https://www.youtube.com` or `https://www.youtube-nocookie.com`, depending on your source URL |
42
+ | Vimeo | — | `https://player.vimeo.com`; `https://vimeo.com` for live events |
43
+ | Spotify | `https://open.spotify.com` | `https://open.spotify.com` |
44
+ | TikTok | — | `https://www.tiktok.com` |
45
+ | Twitch | — | `https://player.twitch.tv` |
46
+ | Cloudflare | `https://embed.videodelivery.net` | `https://iframe.videodelivery.net` or your `https://customer-<code>.cloudflarestream.com` origin |
47
+ | Google Cast | `https://www.gstatic.com` | — |
48
+ | Wistia | `https://fast.wistia.com` and `https://fast.wistia.net` | `https://fast.wistia.com` and `https://fast.wistia.net` if the SDK falls back to an iframe |
49
+
50
+ For Cloudflare, use `https://iframe.videodelivery.net` unless your source URL names a customer origin. In that case, replace `<code>` with your customer code.
51
+
52
+ The Wistia SDK bundled with Video.js normally renders its player in the page and can fall back to an iframe. It loads scripts and media data from `fast.wistia.com` and `fast.wistia.net`. If you narrow `connect-src`, keep both origins.
29
53
 
30
- Replace broad sources such as `https:` with the exact origins your player uses. Remove sources your deployment does not need, and keep `blob:` only where your selected HLS renderer requires it.
54
+ The table covers entry scripts and embed frames. Provider SDKs can request additional resources. Test your selected media under your policy, check the browser’s CSP violations, and allow the exact origins those requests need.
31
55
 
32
56
  ## Related pages
33
57
 
@@ -65,7 +65,7 @@ Wrap your control UI in [`<media-controls>`](../reference/components/controls.md
65
65
  }
66
66
 
67
67
  .controls-backdrop:not([data-visible]),
68
- .media-controls:not([data-visible]) {
68
+ .media-controls:not([data-visible]):not(:has(:focus-visible)) {
69
69
  opacity: 0;
70
70
  }
71
71
 
@@ -134,18 +134,18 @@ import '@videojs/html/ui/time';
134
134
 
135
135
  The [controls feature](../reference/api/feature-controls.md) tracks activity on the player container:
136
136
 
137
- - `userActive` is `true` while the user interacts — pointer movement, keyboard input, or focus — and flips to `false` after two seconds of inactivity.
137
+ - `userActive` becomes `true` on pointer movement, keyboard input, or focus entry. It becomes `false` after two seconds without another activity event, or when the mouse leaves the container.
138
138
  - `controlsVisible` derives from activity and playback: controls stay visible while paused or while a remote playback session is connecting or connected, regardless of idle state.
139
- - `toggleControls()` flips visibility, for wiring to custom triggers.
139
+ - `toggleControls(forceShow?)` marks the user inactive when controls are visible, and shows them otherwise. Pass `true` to show controls or `false` to mark the user inactive. Paused playback, a remote session, or an open menu can keep controls visible even when the user is inactive.
140
140
 
141
- On touch devices, a tap on the media toggles the controls instead of relying on pointer movement, and mid-gesture movement doesn’t flicker visibility.
141
+ On touch devices, pointer movement does not show controls. A tap on the media toggles them, and movement during a gesture does not make them flicker.
142
142
 
143
- The feature needs the player container for activity tracking; without a container it stays inactive and warns in development.
143
+ The feature needs the player container for activity tracking. Without one, it keeps its initial active and visible state and warns in development.
144
144
 
145
145
  ## Availability and constraints
146
146
 
147
147
  - Activity tracking listens on the player container, so controls placed outside it don’t keep the player “active” — put control UI inside the container.
148
- - Keyboard focus counts as activity: controls stay reachable for keyboard and assistive-technology users while focus is inside them.
148
+ - Focus entry restarts the idle timer; holding focus alone does not keep controls visible. The example uses `:has(:focus-visible)` to keep controls visible while they contain keyboard focus. Focus from a mouse click does not hold them open.
149
149
  - Touch and mouse behave differently by design — mouse movement shows controls, touch requires a tap. Test both.
150
150
  - The idle delay is fixed at two seconds.
151
151
 
@@ -153,7 +153,7 @@ The feature needs the player container for activity tracking; without a containe
153
153
 
154
154
  ### Always-visible controls
155
155
 
156
- Set `visibility="always"` on [`<media-controls>`](../reference/components/controls.md). The controls stay visible and report the user as active while the feature keeps tracking activity for anything else that needs it. The packaged audio skins use this mode.
156
+ Set `visibility="always"` on [`<media-controls>`](../reference/components/controls.md). This keeps the UI visible. When the controls feature is present, `userActive` still follows its activity tracking. The packaged audio skins use this mode.
157
157
 
158
158
  ```html
159
159
  <media-controls visibility="always">
@@ -163,13 +163,28 @@ Set `visibility="always"` on [`<media-controls>`](../reference/components/contro
163
163
 
164
164
  ### Custom show/hide styling
165
165
 
166
- Controls hide by state, so you own the transition. Style the visible and hidden states in CSS — fade, slide, or scale — driven by the component’s rendered state rather than re-implementing the idle timer.
166
+ Style the visible and hidden states in CSS with a fade, slide, or scale, using the component’s `data-visible` attribute. The controls feature handles the idle timer.
167
+
168
+ Keep controls with keyboard focus visible in your hiding rule:
169
+
170
+ ```css
171
+ .media-controls:not([data-visible]):not(:has(:focus-visible)) {
172
+ opacity: 0;
173
+ }
174
+ ```
167
175
 
168
176
  ## Troubleshooting
169
177
 
170
178
  ### Controls never hide
171
179
 
172
- The media is paused (controls intentionally stay visible), a remote playback session is active, an open menu or popover holds a controls lock, or something keeps triggering activity — for example a focused element inside the container receiving repeated events.
180
+ Check for these causes:
181
+
182
+ - The media is paused. Controls stay visible by design.
183
+ - A remote playback session is active.
184
+ - An open menu or popover holds a controls lock.
185
+ - Something keeps triggering activity, such as a focused element inside the container that receives repeated events.
186
+
187
+ With the `:has(:focus-visible)` CSS rule above, keyboard focus keeps the controls visible even after activity becomes idle. Move focus out of the controls to let them hide.
173
188
 
174
189
  ### Controls don’t come back on touch
175
190
 
@@ -177,7 +192,7 @@ A tap on the media toggles controls. If a custom overlay covers the media and sw
177
192
 
178
193
  ### Controls flicker on Android while tapping
179
194
 
180
- Use the skin gestures (`tap` with the `toggleControls` action) rather than adding your own tap handlers next to the built-in behavior; competing handlers invert each other. See [Add keyboard shortcuts and gestures](./keyboard-shortcuts.md).
195
+ Use the skin gestures (`tap` with the `toggleControls` action). When two handlers both toggle controls, one shows them and the other hides them again. Remove extra tap handlers that duplicate the built-in behavior. See [Add keyboard shortcuts and gestures](./keyboard-shortcuts.md).
181
196
 
182
197
  ## Related pages
183
198
 
@@ -34,7 +34,7 @@ Packaged skins expose [CSS custom properties](https://developer.mozilla.org/en-U
34
34
  | `--media-object-position` | Where the media and poster sit when they do not fill the player | A valid [object-position value](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/object-position) | `top` |
35
35
  | `--media-scale-unit` | The base size for skin spacing, icons, and text | [`<length>`](https://developer.mozilla.org/en-US/docs/Web/CSS/length) | `1rem` |
36
36
 
37
- If you omit `--media-accent-text-color`, the skins choose a contrasting text color from `--media-accent-color` using [`contrast-color()`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/contrast-color). Set it only when you want a different result.
37
+ If you omit `--media-accent-text-color`, the skins choose a contrasting text color from `--media-accent-color` using [`contrast-color()`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/contrast-color). Browsers before Chrome 147, Firefox 146, and Safari 26 lack `contrast-color()` and use the theme’s default text color instead, which suits only the default accent, so set both properties together if you support those browsers.
38
38
 
39
39
  The skins use [`Inter`](https://rsms.me/inter/) when your page loads it and fall back to the system UI font. Video.js does not load the webfont for you. Set `--media-font-family` to use another font.
40
40
 
@@ -106,7 +106,7 @@ Start with the file that owns the change you want:
106
106
  | --- | --- |
107
107
  | Add, remove, or rearrange controls | `skin.html` |
108
108
  | Change default colors, surfaces, shadows, sizes, or motion across skins | `components/videojs/styles/themes/theme.css` |
109
- | Change only the Minimal theme or one media preset | `components/videojs/styles/themes/minimal.css`, `components/videojs/styles/video/theme.css`, or `components/videojs/styles/audio/theme.css` |
109
+ | Change only Neutral, Compat, or one media preset | `components/videojs/styles/themes/neutral.css`, `components/videojs/styles/themes/compat.css`, `components/videojs/styles/video/theme.css`, or `components/videojs/styles/audio/theme.css` |
110
110
  | Change one control’s appearance | That control’s classes or stylesheet |
111
111
  | Change one control’s interaction | That control’s module |
112
112