@videojs/html 10.0.0-rc.4 → 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 (1020) 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-your-own-component.md +5 -5
  830. package/docs/guides/captions.md +46 -6
  831. package/docs/guides/casting.md +24 -8
  832. package/docs/guides/cdn.md +11 -10
  833. package/docs/guides/content-security-policy.md +29 -5
  834. package/docs/guides/controls.md +25 -10
  835. package/docs/guides/customize-skins.md +2 -2
  836. package/docs/guides/features.md +3 -1
  837. package/docs/guides/fullscreen.md +35 -8
  838. package/docs/guides/installation-cdn.md +5 -5
  839. package/docs/guides/installation-shadcn.md +4 -4
  840. package/docs/guides/installation-svelte.md +5 -5
  841. package/docs/guides/installation-vue.md +5 -5
  842. package/docs/guides/installation.md +5 -5
  843. package/docs/guides/internationalization.md +37 -28
  844. package/docs/guides/keyboard-shortcuts.md +27 -15
  845. package/docs/guides/live-streams.md +51 -13
  846. package/docs/guides/llms.txt +6 -5
  847. package/docs/guides/media-sources.md +8 -5
  848. package/docs/guides/migrate-from-media-chrome.md +182 -51
  849. package/docs/guides/migrate-from-mux-player.md +191 -116
  850. package/docs/guides/migrate-from-plyr.md +171 -81
  851. package/docs/guides/migrate-from-video-js-8.md +255 -190
  852. package/docs/guides/migrate-from-vidstack.md +865 -0
  853. package/docs/guides/mux-data.md +23 -9
  854. package/docs/guides/picture-in-picture.md +22 -16
  855. package/docs/guides/playback-errors.md +10 -7
  856. package/docs/guides/poster.md +32 -11
  857. package/docs/guides/presets.md +15 -5
  858. package/docs/guides/quality.md +44 -5
  859. package/docs/guides/self-hosting.md +5 -5
  860. package/docs/guides/skins.md +6 -4
  861. package/docs/guides/thumbnails.md +24 -14
  862. package/docs/guides/ui-components.md +1 -1
  863. package/docs/guides/user-preferences.md +38 -15
  864. package/docs/guides/v10-roadmap.md +1 -1
  865. package/docs/llms.txt +45 -11
  866. package/docs/reference/api/create-i18n.md +3 -3
  867. package/docs/reference/api/create-translator.md +1 -1
  868. package/docs/reference/api/feature-audio-track.md +1 -1
  869. package/docs/reference/api/feature-controls.md +2 -2
  870. package/docs/reference/api/feature-fullscreen.md +1 -2
  871. package/docs/reference/api/feature-pip.md +3 -4
  872. package/docs/reference/api/feature-playback.md +2 -3
  873. package/docs/reference/api/feature-quality.md +2 -2
  874. package/docs/reference/api/feature-remote-playback.md +1 -1
  875. package/docs/reference/api/feature-source.md +2 -8
  876. package/docs/reference/api/feature-text-tracks.md +6 -8
  877. package/docs/reference/api/feature-volume.md +1 -1
  878. package/docs/reference/api/find-locale-keys.md +32 -0
  879. package/docs/reference/api/get-locale-key.md +32 -0
  880. package/docs/reference/api/html-create-player.md +24 -26
  881. package/docs/reference/api/i18n-controller.md +1 -1
  882. package/docs/reference/api/is-text.md +33 -0
  883. package/docs/reference/api/llms.txt +23 -2
  884. package/docs/reference/api/load-locale.md +36 -0
  885. package/docs/reference/api/media-capabilities.md +255 -0
  886. package/docs/reference/api/player-controller.md +39 -20
  887. package/docs/reference/api/player-store.md +112 -0
  888. package/docs/reference/api/preset-audio.md +116 -0
  889. package/docs/reference/api/preset-background.md +103 -0
  890. package/docs/reference/api/preset-live-audio.md +119 -0
  891. package/docs/reference/api/preset-live-video.md +124 -0
  892. package/docs/reference/api/preset-video.md +123 -0
  893. package/docs/reference/api/register-i18n.md +13 -0
  894. package/docs/reference/api/resolve-adapter-type.md +98 -0
  895. package/docs/reference/api/resolve-mime-type.md +48 -0
  896. package/docs/reference/api/resolve-translation.md +36 -0
  897. package/docs/reference/api/translate-text.md +56 -0
  898. package/docs/reference/api/translation-phrases.md +13 -0
  899. package/docs/reference/api/ui-element.md +296 -0
  900. package/docs/reference/components/audio-compat-skin.md +33 -0
  901. package/docs/reference/components/{audio-minimal-skin.md → audio-neutral-skin.md} +6 -6
  902. package/docs/reference/components/audio-skin.md +2 -2
  903. package/docs/reference/components/background-video-skin.md +1 -1
  904. package/docs/reference/components/background-video.md +1 -1
  905. package/docs/reference/components/captions-button.md +1 -1
  906. package/docs/reference/components/captions-radio-group.md +1 -1
  907. package/docs/reference/components/cloudflare-video.md +1 -1
  908. package/docs/reference/components/controls.md +2 -2
  909. package/docs/reference/components/dash-video.md +1 -1
  910. package/docs/reference/components/fullscreen-button.md +1 -1
  911. package/docs/reference/components/google-cast.md +4 -4
  912. package/docs/reference/components/hls-audio.md +1 -1
  913. package/docs/reference/components/hls-background-video.md +1 -1
  914. package/docs/reference/components/hls-video.md +1 -1
  915. package/docs/reference/components/hlsjs-video.md +2 -2
  916. package/docs/reference/components/icons.md +130 -0
  917. package/docs/reference/components/live-audio-compat-skin.md +35 -0
  918. package/docs/reference/components/{live-audio-minimal-skin.md → live-audio-neutral-skin.md} +6 -6
  919. package/docs/reference/components/live-audio-skin.md +2 -2
  920. package/docs/reference/components/live-video-compat-skin.md +41 -0
  921. package/docs/reference/components/{live-video-minimal-skin.md → live-video-neutral-skin.md} +6 -6
  922. package/docs/reference/components/live-video-skin.md +2 -2
  923. package/docs/reference/components/llms.txt +16 -6
  924. package/docs/reference/components/menu.md +7 -2
  925. package/docs/reference/components/mux-audio.md +2 -2
  926. package/docs/reference/components/mux-background-video.md +1 -1
  927. package/docs/reference/components/mux-data.md +4 -4
  928. package/docs/reference/components/mux-video.md +4 -4
  929. package/docs/reference/components/native-hls-video.md +1 -1
  930. package/docs/reference/components/pip-button.md +2 -2
  931. package/docs/reference/components/player.md +26 -2
  932. package/docs/reference/components/popover.md +6 -8
  933. package/docs/reference/components/shaka-video.md +1 -1
  934. package/docs/reference/components/spotify-audio.md +1 -1
  935. package/docs/reference/components/status-indicator.md +27 -4
  936. package/docs/reference/components/thumbnail.md +1 -1
  937. package/docs/reference/components/tiktok-video.md +1 -1
  938. package/docs/reference/components/twitch-video.md +1 -1
  939. package/docs/reference/components/video-compat-skin.md +45 -0
  940. package/docs/reference/components/{video-minimal-skin.md → video-neutral-skin.md} +6 -6
  941. package/docs/reference/components/video-skin.md +2 -2
  942. package/docs/reference/components/vimeo-video.md +1 -1
  943. package/docs/reference/components/wistia-video.md +1 -1
  944. package/docs/reference/components/youtube-video.md +1 -1
  945. package/package.json +54 -42
  946. package/dist/default/define/audio/minimal-skin.css +0 -2048
  947. package/dist/default/define/audio/minimal-skin.js +0 -6
  948. package/dist/default/define/audio/minimal-skin2.js +0 -4
  949. package/dist/default/define/live-audio/minimal-skin.css +0 -1378
  950. package/dist/default/define/live-audio/minimal-skin.js +0 -6
  951. package/dist/default/define/live-audio/minimal-skin2.js +0 -4
  952. package/dist/default/define/live-video/minimal-skin.css +0 -2311
  953. package/dist/default/define/live-video/minimal-skin.js +0 -6
  954. package/dist/default/define/live-video/minimal-skin2.js +0 -4
  955. package/dist/default/define/video/minimal-skin.css +0 -3232
  956. package/dist/default/define/video/minimal-skin.js +0 -6
  957. package/dist/default/define/video/minimal-skin2.js +0 -4
  958. package/dist/default/extensions/media-extension-element.js +0 -54
  959. package/dist/default/icons/element/minimal/index.js +0 -1
  960. package/dist/default/icons/minimal/index.js +0 -26
  961. package/dist/default/internal/skins/minimal-audio/skin.css +0 -1977
  962. package/dist/default/internal/skins/minimal-live-audio/skin.css +0 -1307
  963. package/dist/default/internal/skins/minimal-live-video/skin.css +0 -2240
  964. package/dist/default/internal/skins/minimal-video/skin.css +0 -3161
  965. package/dist/default/presets/audio/minimal-skin.js +0 -19
  966. package/dist/default/presets/live-audio/minimal-skin.js +0 -19
  967. package/dist/default/presets/live-video/minimal-skin.js +0 -19
  968. package/dist/default/presets/video/minimal-skin.js +0 -19
  969. package/dist/dev/define/audio/minimal-skin.css +0 -2048
  970. package/dist/dev/define/audio/minimal-skin.d.ts +0 -1
  971. package/dist/dev/define/audio/minimal-skin.js +0 -8
  972. package/dist/dev/define/audio/minimal-skin.js.map +0 -1
  973. package/dist/dev/define/audio/minimal-skin2.js +0 -6
  974. package/dist/dev/define/audio/minimal-skin2.js.map +0 -1
  975. package/dist/dev/define/live-audio/minimal-skin.css +0 -1378
  976. package/dist/dev/define/live-audio/minimal-skin.d.ts +0 -1
  977. package/dist/dev/define/live-audio/minimal-skin.js +0 -8
  978. package/dist/dev/define/live-audio/minimal-skin.js.map +0 -1
  979. package/dist/dev/define/live-audio/minimal-skin2.js +0 -6
  980. package/dist/dev/define/live-audio/minimal-skin2.js.map +0 -1
  981. package/dist/dev/define/live-video/minimal-skin.css +0 -2311
  982. package/dist/dev/define/live-video/minimal-skin.d.ts +0 -1
  983. package/dist/dev/define/live-video/minimal-skin.js +0 -8
  984. package/dist/dev/define/live-video/minimal-skin.js.map +0 -1
  985. package/dist/dev/define/live-video/minimal-skin2.js +0 -6
  986. package/dist/dev/define/live-video/minimal-skin2.js.map +0 -1
  987. package/dist/dev/define/video/minimal-skin.css +0 -3232
  988. package/dist/dev/define/video/minimal-skin.d.ts +0 -1
  989. package/dist/dev/define/video/minimal-skin.js +0 -8
  990. package/dist/dev/define/video/minimal-skin.js.map +0 -1
  991. package/dist/dev/define/video/minimal-skin2.js +0 -6
  992. package/dist/dev/define/video/minimal-skin2.js.map +0 -1
  993. package/dist/dev/extensions/media-extension-element.d.ts +0 -29
  994. package/dist/dev/extensions/media-extension-element.js +0 -56
  995. package/dist/dev/extensions/media-extension-element.js.map +0 -1
  996. package/dist/dev/icons/dist/html/minimal/index.d.ts +0 -29
  997. package/dist/dev/icons/element/minimal/index.d.ts +0 -1
  998. package/dist/dev/icons/element/minimal/index.js +0 -1
  999. package/dist/dev/icons/minimal/index.js +0 -26
  1000. package/dist/dev/internal/skins/minimal-audio/skin.css +0 -1977
  1001. package/dist/dev/internal/skins/minimal-live-audio/skin.css +0 -1307
  1002. package/dist/dev/internal/skins/minimal-live-video/skin.css +0 -2240
  1003. package/dist/dev/internal/skins/minimal-video/skin.css +0 -3161
  1004. package/dist/dev/presets/audio/minimal-skin.d.ts +0 -16
  1005. package/dist/dev/presets/audio/minimal-skin.js +0 -21
  1006. package/dist/dev/presets/audio/minimal-skin.js.map +0 -1
  1007. package/dist/dev/presets/live-audio/minimal-skin.d.ts +0 -16
  1008. package/dist/dev/presets/live-audio/minimal-skin.js +0 -21
  1009. package/dist/dev/presets/live-audio/minimal-skin.js.map +0 -1
  1010. package/dist/dev/presets/live-video/minimal-skin.d.ts +0 -16
  1011. package/dist/dev/presets/live-video/minimal-skin.js +0 -21
  1012. package/dist/dev/presets/live-video/minimal-skin.js.map +0 -1
  1013. package/dist/dev/presets/video/minimal-skin.d.ts +0 -16
  1014. package/dist/dev/presets/video/minimal-skin.js +0 -21
  1015. package/dist/dev/presets/video/minimal-skin.js.map +0 -1
  1016. /package/dist/dev/define/audio/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1017. /package/dist/dev/define/live-audio/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1018. /package/dist/dev/define/live-video/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1019. /package/dist/dev/define/video/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1020. /package/dist/dev/icons/dist/element/{minimal → compat}/index.d.ts +0 -0
@@ -2,46 +2,50 @@
2
2
 
3
3
  Move a Video.js 8 integration to v10, mapping the options object, techs, plugins, and player API onto composed components
4
4
 
5
- Video.js 8 gives you one function, `videojs()`, and one large options object. It enhances a `<video>` element and returns a player with a control bar, plugin system, and component tree.
5
+ Move your Video.js 8 setup to v10 by replacing `videojs()` with a player, media component, and skin. This guide maps your options, techs, plugins, and imperative calls to those pieces.
6
6
 
7
- Video.js v10 is a rebuild, not a drop-in version bump. There is no `videojs()` call, options object, or plugin registry. You compose a player from a few named pieces instead.
7
+ Video.js 10 ships as scoped `@videojs/*` packages. The `video.js` npm package remains Video.js 8; its [repository](https://github.com/videojs/video.js) and [docs](https://legacy.videojs.org) remain available.
8
8
 
9
- > **Caution**
10
- >
11
- > This isn’t a version bump you can do with a find-and-replace. Plan it as a rewrite of your player setup, and read this guide before you estimate it.
9
+ ## Before you migrate
12
10
 
13
- Video.js 8 lives on at its [repo](https://github.com/videojs/video.js) and [docs](https://legacy.videojs.org). The `video.js` package on npm is still Video.js 8, so `npm install video.js` won’t get you v10. Video.js 10 ships as scoped `@videojs/*` packages.
11
+ - List the options, techs, plugins, custom controls, and event handlers your app uses.
12
+ - Check [Known gaps](#known-gaps), especially ads and playlists, before replacing a working player. Plan to rewrite plugins that have no equivalent.
13
+ - Keep your existing media URLs, source formats, tracks, and required behavior. The first example uses an MP4 file. For an adaptive stream or an embed, use the matching media component.
14
+ - Choose an installation method and playback engine that fit your app and supported browsers. See [Installation](./installation.md) and [Techs become media components](#techs-become-media-components).
14
15
 
15
- ## Three pieces instead of one
16
+ ## AI Quickstart
16
17
 
17
- In v8 the player was everything: playback, UI, and the skin on top of it. Options configured all three, which is why the options object grew so large.
18
+ Paste this prompt into your coding agent:
18
19
 
19
- v10 splits those jobs up. Learning the three names first makes the rest of this guide much shorter.
20
+ ```
21
+ Migrate this project's Video.js 8 player to Video.js v10 for HTML. Use @videojs/html or its CDN bundles for a page without a build step.
20
22
 
21
- **The player** is the outer element. It holds state and hands that state to everything inside it, and it draws nothing. This is the closest thing to a v8 `player` instance, but it owns state rather than DOM. Which state it holds depends on the [features](./features.md) it’s built from.
23
+ Run `npx @videojs/cli agents skills` to get the Video.js skill installation instructions. Follow the printed steps for your agent. If they require a session reload, reload the session and continue with this prompt. If you can't run commands, use the installation instructions at https://github.com/videojs/skills. Use the skill throughout this migration.
22
24
 
23
- **The media** is the thing that plays the video. This is where v8’s *tech* went. A plain `<video>` plays progressive files, and there’s a [media component](./media-sources.md) for HLS, DASH, YouTube, Vimeo, and Mux. Swapping one for another is a tag change, and the rest of your player keeps working.
25
+ Read the migration guide at https://videojs.org/docs/framework/html/guides/migrate-from-video-js-8, including its Known gaps section. Inspect the existing player and list its media URLs, source formats, tracks, options, custom controls, event handlers, and integrations. Compare that list with the known gaps and report unsupported requirements before changing code. Keep the existing media URLs and required behavior throughout the migration.
24
26
 
25
- **The skin** is the UI: the controls, the poster, the captions, the settings menu, the keyboard shortcuts. It’s the v8 control bar and skin combined, except [skins](./skins.md) are plain trees of components you can read and edit rather than a class hierarchy you subclass.
27
+ For installation guidance, read https://videojs.org/docs/framework/html/llms.txt and follow its link to the installation guide. Keep using that online index for a CDN installation.
26
28
 
27
- So a v8 embed becomes a player wrapped around a skin wrapped around a media:
29
+ From the application root, run `npx @videojs/cli agents init` without flags to list installation options and their accepted values.
28
30
 
29
- ```html
30
- <video-player>
31
- <video-skin>
32
- <video src="/video.mp4"></video>
33
- </video-skin>
34
- </video-player>
35
- ```
31
+ Choose values for these options:
32
+ - --media and --source-url: the existing content and playback requirements.
33
+ - --method: the installation method.
34
+ - --preset, --skin, and --extensions: the player UI and integrations.
35
+
36
+ Add those options to `npx @videojs/cli agents init --framework html --project existing` and run the command to print the installation plan. Follow any version-mismatch notice. Both CLI commands print instructions without changing project files. Use the printed plan to install Video.js and configure the player.
36
37
 
37
- Most of this guide is about which of those three a given v8 option now belongs to.
38
+ After installing a package, switch to node_modules/@videojs/html/docs/llms.txt for documentation matching its version.
39
+
40
+ Implement the migration. Then verify playback, captions, controls, and any analytics integration on every browser the project supports.
41
+ ```
38
42
 
39
43
  ## Your first player
40
44
 
41
45
  Here’s a standard v8 setup: one file, captions, a poster, and the default skin.
42
46
 
43
47
  ```html
44
- <link href="https://vjs.zencdn.net/8.x/video-js.css" rel="stylesheet" />
48
+ <link href="https://vjs.zencdn.net/8.23.6/video-js.css" rel="stylesheet" />
45
49
 
46
50
  <video
47
51
  id="my-video"
@@ -55,68 +59,95 @@ Here’s a standard v8 setup: one file, captions, a poster, and the default skin
55
59
  <track kind="captions" src="/captions/en.vtt" srclang="en" label="English" default />
56
60
  </video>
57
61
 
58
- <script src="https://vjs.zencdn.net/8.x/video.min.js"></script>
62
+ <script src="https://vjs.zencdn.net/8.23.6/video.min.js"></script>
59
63
  ```
60
64
 
61
- v10 ships web components, so the migration keeps its declarative feel. One script from the CDN gives you the video [preset](./presets.md): a player, a skin, and a media element that already fit together.
65
+ Load the video [preset](./presets.md) from the CDN and put your media inside its skin:
62
66
 
63
67
  ```html
64
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.4/video.js"></script>
68
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/video.js"></script>
65
69
 
66
70
  <video-player poster="/poster.jpg">
67
- <video-skin class="aspect-video">
71
+ <video-skin style="aspect-ratio: 16 / 9">
68
72
  <video src="/video.mp4" preload="auto" playsinline>
69
73
  <track kind="captions" src="/captions/en.vtt" srclang="en" label="English" default />
70
- <track kind="metadata" src="/storyboard.vtt" label="thumbnails" default />
71
74
  </video>
72
75
  </video-skin>
73
76
  </video-player>
74
77
  ```
75
78
 
76
- With a bundler, the same thing is two imports:
79
+ With a bundler, install the HTML package and import the player and skin:
80
+
81
+ ```bash
82
+ npm install @videojs/html
83
+ ```
77
84
 
78
85
  ```js
79
86
  import '@videojs/html/video/player';
80
87
  import '@videojs/html/video/skin';
81
88
  ```
82
89
 
83
- Four differences worth understanding, because each one is a pattern you’ll see again:
90
+ Apply these changes to your existing markup:
91
+
92
+ - **No `class="video-js"`, no `data-setup`, no `videojs()` call.** Importing the player and skin registers their custom elements. The browser activates these elements when it upgrades them. Video.js does not scan the page for players.
93
+ - **No `controls` attribute.** The skin provides the controls. Include a skin to show controls. Leave it out for a player with no UI.
94
+ - **Move the poster URL to the player.** Set `poster` on `<video-player>`. The skin controls how the poster appears. To supply your own image element, see [Add a poster and loading placeholder](./poster.md).
95
+ - **Keep your existing tracks.** Captions and subtitles remain native tracks; the skin supplies their controls.
96
+
97
+ For the Neutral skin, replace `<video-skin>` with `<video-neutral-skin>`. Load `video-neutral.js` from the CDN, or replace the bundler skin import with `@videojs/html/video/neutral-skin`.
98
+
99
+ If you have chapter tracks or thumbnail tracks (`kind="metadata" label="thumbnails"`), add `default` to each track so the browser loads its cues. Keep each track’s existing `src` URL.
100
+
101
+ When enabling captions without a previous selection in this player instance, `toggleSubtitles()` prefers a track matching `navigator.language`, then falls back to the first available caption or subtitle track. For an authored track that should show on load, add `default`. See [Show captions and subtitles](./captions.md).
102
+
103
+ ## Three pieces instead of one
104
+
105
+ Use these three pieces when deciding where a v8 option belongs:
106
+
107
+ **The player** is the outer custom element. It holds state and shares it with descendants. Its [features](./features.md) determine the available state and actions.
84
108
 
85
- - **No `class="video-js"`, no `data-setup`, no `videojs()` call.** The custom elements register themselves and wire up when the browser upgrades them. Nothing scans the page looking for players.
86
- - **No `controls` attribute.** The skin *is* the controls. Including a skin is how you ask for them, which is also how you opt out: leave it out and you get a player with no UI.
87
- - **The poster is player metadata, not a media attribute.** Set `poster` on `<video-player>`, and the skin, not the browser, controls how it appears. For more advanced control (like supplying your own image element), see [Add a poster and loading placeholder](./poster.md).
88
- - **Your `<track>` elements don’t change.** Captions, subtitles, chapters, and thumbnails are all still tracks, and the skin shows the matching controls when it finds them.
109
+ **The media** plays the content and replaces the v8 tech. Choose a [media component](./media-sources.md) for your format or provider. Player controls use the capabilities that media exposes.
89
110
 
90
- There’s also a minimal skin, closer to v8’s control bar if the default’s frosted look is too much of a change. Swap `video.js` for `video-minimal.js` and `<video-skin>` for `<video-minimal-skin>`.
111
+ **The skin** supplies the controls, poster, menus, shortcuts, and gestures. Use a packaged [skin](./skins.md) as it is, or restyle it. To change its layout or interactions, install its source.
91
112
 
92
113
  ## Where your options went
93
114
 
94
- The v8 options object is gone, and its contents scattered in four directions. This is the biggest conceptual step, so it’s worth understanding the four buckets before you go looking for a specific option.
115
+ Move each option to the part of your v10 setup that owns it:
95
116
 
96
- 1. **Media attributes.** Anything the browser itself understands stays exactly where it was, on your media element.
117
+ 1. **Media settings.** Set native attributes or props on the media.
97
118
  2. **Player metadata.** The title and poster belong to player state, which lets the skin or your custom UI render them.
98
- 3. **Your CSS.** Sizing, aspect ratio, and responsive behavior are layout, and layout is yours.
99
- 4. **Composition.** Which controls exist, which shortcuts fire, which language you’re in. You express these by choosing components rather than by setting flags.
119
+ 3. **Your CSS.** Set sizing, aspect ratio, and responsive behavior in your own CSS.
120
+ 4. **Composition.** Choose components to determine which controls appear, which shortcuts run, and which language the player uses.
100
121
 
101
122
  ### Media attributes
102
123
 
103
- Port these across untouched. They’re native attributes and always were.
124
+ Move native media settings onto the media component.
104
125
 
105
126
  | Video.js 8 | Video.js v10 |
106
127
  | --- | --- |
107
- | `autoplay`, `muted`, `loop`, `preload`, `playsinline`, `crossorigin` | the same attributes on your media |
128
+ | `autoplay` (boolean), `muted`, `loop`, `preload`, `playsinline`, `crossorigin` | the same attributes on your media |
108
129
  | `sources: [{ src, type }]` | `src`, or `<source>` children for progressive fallback |
109
- | `disablePictureInPicture` | `disablepictureinpicture` |
130
+ | `disablePictureInPicture` | `disablepictureinpicture` on your media |
131
+
132
+ Video.js uses native autoplay. For v8’s string-valued `autoplay` options:
133
+
134
+ - `'muted'`: set both `autoplay` and `muted` on the media (`autoPlay` and `muted` on video-backed React media).
135
+ - `'play'`: to preserve v8’s explicit playback request, call `play()` on the media when it fires `loadstart` and handle rejection.
136
+ - `'any'`: on `loadstart`, call `play()` on the media. If the returned promise rejects, mute the media and call `play()` again. Implement this fallback in your app.
137
+
138
+ Keep a manual play control available if autoplay fails. See [Handle autoplay](./autoplay.md).
110
139
 
111
140
  ### Player metadata
112
141
 
113
142
  | Video.js 8 | Video.js v10 |
114
143
  | --- | --- |
115
144
  | `poster` | `poster` on `<video-player>` |
116
- | `posterImage: false` | leave the player’s poster unset |
145
+ | `posterImage: false` | set `poster=""` on the player, or remove the poster component from your local skin |
117
146
  | the title in `TitleBar` | `content-title` on `<video-player>`, rendered with the `<media-title>` element |
118
147
 
119
- The poster belongs to player state rather than the media, which lets the skin control how it appears:
148
+ If you do not set `poster` on the player, the skin uses a poster supplied by the media, such as a generated Mux poster. Set `poster=""` to turn off this fallback.
149
+
150
+ Set a poster URL on the player for the skin to display:
120
151
 
121
152
  ```html
122
153
  <video-player poster="/poster.jpg">
@@ -126,11 +157,11 @@ The poster belongs to player state rather than the media, which lets the skin co
126
157
  </video-player>
127
158
  ```
128
159
 
129
- The packaged video and live-video skins already include the [`<media-title>`](../reference/components/title.md) element, so setting `content-title` on the player displays it. Audio skins do not include a title. Add `<media-title>` where you want it in a custom layout or skin source you added to your project. For poster rendering options — including placeholders and custom image elements — see [Add a poster and loading placeholder](./poster.md) and the [`<media-poster>`](../reference/components/poster.md) reference.
160
+ The packaged video and live-video skins already include the [`<media-title>`](../reference/components/title.md) element, so setting `content-title` on the player displays it. Audio skins do not include a title. In a custom layout or installed skin source, add `<media-title>` where you want the title to appear. For poster options such as placeholders and custom image elements, see [Add a poster and loading placeholder](./poster.md) and the [`<media-poster>`](../reference/components/poster.md) reference.
130
161
 
131
162
  ### Your CSS
132
163
 
133
- v8 had a small sizing language of its own. v10 doesn’t, because CSS already has one.
164
+ Set sizing and aspect ratio on the skin with CSS:
134
165
 
135
166
  | Video.js 8 | Video.js v10 |
136
167
  | --- | --- |
@@ -139,11 +170,11 @@ v8 had a small sizing language of its own. v10 doesn’t, because CSS already ha
139
170
  | `aspectRatio: '16:9'` | `aspect-ratio: 16 / 9` |
140
171
  | `width`, `height` | `width`, `height` |
141
172
  | `fill: true` | `width: 100%; height: 100%` |
142
- | `breakpoints` | the skins use container queries internally; use your own for your layout |
173
+ | `breakpoints` | the skins use container queries internally; use your own container queries for the rest of your layout |
143
174
 
144
175
  ### Composition
145
176
 
146
- These are the ones that need a decision rather than a rename, so each has a section below.
177
+ These options need a migration decision. Each row links to the relevant guidance or identifies a gap.
147
178
 
148
179
  | Video.js 8 | Where it lives now |
149
180
  | --- | --- |
@@ -159,42 +190,57 @@ These are the ones that need a decision rather than a rename, so each has a sect
159
190
  | `spatialNavigation` | no equivalent; see [Known gaps](#known-gaps) |
160
191
  | `inactivityTimeout` | delay not configurable yet ([#1728](https://github.com/videojs/v10/issues/1728)); `inactivityTimeout: 0` maps to `visibility="always"` on the controls component |
161
192
  | `errorDisplay`, `notSupportedMessage` | the skins include an error dialog |
162
- | `ModalDialog` | compose a [dialog](../reference/components/dialog.md); your application controls media playback when it opens and closes |
193
+ | `ModalDialog` | compose a [dialog](../reference/components/dialog.md); when the dialog opens or closes, your application handles any playback changes |
163
194
 
164
195
  ## Techs become media components
165
196
 
166
- v8’s tech system was one of its harder ideas: an abstraction layer with a registry, a resolution order, and source handlers on top. Getting HLS meant getting VHS, which meant reasoning about `overrideNative` and hoping the right thing won.
167
-
168
- v10 replaces the whole mechanism with a choice you make in markup. You pick the [media component](./media-sources.md) that plays your format, and that’s the tech decision.
197
+ Choose a media component for each format or provider your v8 techs handled. Check its supported features before replacing a streaming engine.
169
198
 
170
199
  | What you’re playing | Video.js 8 | Video.js v10 |
171
200
  | --- | --- | --- |
172
201
  | MP4, WebM | `techOrder: ['html5']` | a plain `<video>` |
173
- | HLS | VHS | [HLS video](../reference/components/hls-video.md) |
174
- | HLS, needing hls.js directly | `videojs.Vhs` | [hls.js video](../reference/components/hlsjs-video.md) |
175
- | HLS, native only | `html5.vhs.overrideNative: false` | [native HLS video](../reference/components/native-hls-video.md) |
176
- | DASH | VHS | [DASH video](../reference/components/dash-video.md) |
202
+ | HLS | VHS | [hls.js video](../reference/components/hlsjs-video.md) |
203
+ | HLS with fMP4/CMAF segments | VHS | [SPF HLS video](../reference/components/hls-video.md), after checking its limitations |
204
+ | HLS, native only | native HLS without VHS fallback | [native HLS video](../reference/components/native-hls-video.md) |
205
+ | DASH without DRM | VHS | [DASH video](../reference/components/dash-video.md) |
206
+ | DASH with DRM | VHS and `videojs-contrib-eme` | [Shaka video](../reference/components/shaka-video.md); see [DRM](#drm) |
177
207
  | YouTube, Vimeo | a tech plugin | the YouTube and Vimeo components |
178
208
  | Mux | a tech plugin | [Mux Video](../reference/components/mux-video.md) |
179
209
 
180
- Each needs its own import.
210
+ `html5.vhs.overrideNative: false` lets v8 use native HLS where available while retaining VHS elsewhere. It does not mean native-only playback. Choose an HLS engine that supports your required browsers; native HLS has no fallback on browsers that cannot play the stream themselves. See [Browser support](./browser-support.md).
211
+
212
+ For an existing VHS integration, start with hls.js video and test your streams on supported browsers. This is also the component selected by the installation CLI’s `--media hls` option.
213
+
214
+ The SPF HLS component is an alternative for fMP4/CMAF streams. It does not support MPEG-TS segments, raw ADTS AAC, or whole-segment AES-128 encryption. It supports DRM through `source.drm`. Verify your license configuration and browser support with the engine you choose. See [HLS video](../reference/components/hls-video.md) and [hls.js video](../reference/components/hlsjs-video.md).
215
+
216
+ Each media component needs its own import. For package-manager installations, install the matching adapter package:
217
+
218
+ | Media | Package |
219
+ | --- | --- |
220
+ | hls.js video | `@videojs/hlsjs-video` |
221
+ | DASH | `@videojs/dash-video` |
222
+ | Mux video / audio | `@videojs/mux-video` / `@videojs/mux-audio` |
223
+ | YouTube | `@videojs/youtube-video` |
224
+ | Vimeo | `@videojs/vimeo-video` |
225
+ | Shaka | `@videojs/shaka-video` |
226
+ | Wistia | `@videojs/wistia-video` |
181
227
 
182
- Package-manager installations also need the matching media package. The lightweight HLS component shown below uses `@videojs/spf`; the hls.js component uses `@videojs/hlsjs-video`; Mux video and audio use `@videojs/mux-video` and `@videojs/mux-audio`; DASH uses `@videojs/dash-video`; Vimeo uses `@videojs/vimeo-video`; and Shaka and Wistia use `@videojs/shaka-video` and `@videojs/wistia-video`.
228
+ SPF and native HLS are included as dependencies of the HTML and React packages.
183
229
 
184
- For HLS from the CDN:
230
+ For hls.js video from the CDN:
185
231
 
186
232
  ```html
187
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.4/media/hls-video.js"></script>
233
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/media/hlsjs-video.js"></script>
188
234
  ```
189
235
 
190
- With a package manager, install SPF and import the HTML registration instead:
236
+ With a package manager, install the adapter and import its HTML registration:
191
237
 
192
238
  ```bash
193
- npm install @videojs/html @videojs/spf
239
+ npm install @videojs/html @videojs/hlsjs-video
194
240
  ```
195
241
 
196
242
  ```ts
197
- import '@videojs/html/media/hls-video';
243
+ import '@videojs/html/media/hlsjs-video';
198
244
  ```
199
245
 
200
246
  Then swap the tag:
@@ -202,118 +248,96 @@ Then swap the tag:
202
248
  ```html
203
249
  <video-player>
204
250
  <video-skin>
205
- <hls-video src="/stream.m3u8" playsinline></hls-video>
251
+ <hlsjs-video src="/stream.m3u8" playsinline></hlsjs-video>
206
252
  </video-skin>
207
253
  </video-player>
208
254
  ```
209
255
 
210
- The lightweight HLS component runs on SPF, Video.js’s own playback engine, and helps keep v10 small. The hls.js component is a much larger download but more compatible, supporting TS-packaged media and DRM. Choose the one whose supported feature set fits your stream.
211
-
212
- Your VHS tuning options don’t have direct equivalents. Rendition capping, bandwidth hints, and the rest are engine-specific, so they belong to whichever engine you chose rather than to a shared options object.
256
+ Your VHS tuning options don’t have direct equivalents. Settings such as rendition capping and bandwidth hints are engine-specific. Configure them through the engine you chose. Video.js has no shared options object for these settings.
213
257
 
214
258
  ## Customize your player
215
259
 
216
- In v8, customizing meant three different techniques depending on what you wanted: options for some things, `addChild` and component subclassing for others, and CSS overrides on `.vjs-*` selectors for the look. v10 has one path with three levels of commitment. Try them in order.
260
+ In v8, you customized the player with options, `addChild`, component subclasses, or CSS overrides on `.vjs-*` selectors. In v10, choose a skin, restyle it with CSS custom properties, or edit its source. Try these approaches in order.
217
261
 
218
262
  ### Level 1: pick a skin
219
263
 
220
- The default skin is a modern, frosted look. The minimal skin is closer to v8’s control bar. Both bring controls, tooltips, captions, keyboard shortcuts, touch gestures, and a settings menu that appears when there’s something to put in it. See [Skins](./skins.md).
264
+ The Default skin groups settings in a menu. The Neutral skin has a compact layout like v8’s control bar. Both bring controls, tooltips, captions, keyboard shortcuts, touch gestures, and a settings menu that appears when there’s something to put in it. See [Skins](./skins.md).
221
265
 
222
- Both also include AirPlay and Cast buttons, which v8 had no answer for. Follow [Cast to AirPlay and Chromecast](./casting.md) to add the Google Cast extension. Remote playback is a feature you compose in rather than a plugin you install.
266
+ Both include AirPlay and Cast buttons. Follow [Cast to AirPlay and Chromecast](./casting.md) to add the Google Cast extension.
223
267
 
224
268
  ### Level 2: restyle it
225
269
 
226
- v8 customization meant writing selectors against internal class names and hoping they survived the next release. v10 skins expose custom properties instead, which are part of the public surface:
270
+ Replace your v8 selectors with the skin’s documented custom properties where they cover the change:
227
271
 
228
272
  ```css
229
273
  /* Video.js 8 */
230
274
  .video-js .vjs-play-progress {
231
275
  background-color: rebeccapurple;
232
276
  }
277
+ ```
233
278
 
234
- /* Video.js v10 */
279
+ ```css
280
+ /* Video.js HTML */
235
281
  video-player {
236
282
  --media-accent-color: rebeccapurple;
237
283
  }
238
284
  ```
239
285
 
240
- `--media-accent-color` reaches the sliders, the active buttons, and the accent surfaces at once. Video.js derives a readable text color to sit on top of it; override that with `--media-accent-text-color` if you’d rather choose. `--media-border-radius` rounds the player, and `--media-scale-unit` scales the whole control bar, which is the closest thing to v8’s `font-size` trick for sizing controls. [Customize skins](./customize-skins.md#style-a-packaged-skin) has the full list.
286
+ `--media-accent-color` reaches the sliders, the active buttons, and the accent surfaces at once. Video.js picks a readable text color for content on the accent color. To choose that text color yourself, set `--media-accent-text-color`. `--media-border-radius` rounds the player’s corners. `--media-scale-unit` scales the whole control bar, like v8’s `font-size` technique for sizing controls. [Customize skins](./customize-skins.md#style-a-packaged-skin) has the full list.
241
287
 
242
288
  ### Level 3: edit skin source
243
289
 
244
- For changes to controls, layout, or interactions, add the skin source to your project. Its components and styles become local files. [Customize skins](./customize-skins.md#style-skin-source) covers the setup and available skins.
290
+ To migrate `controlBar`, `addChild`, or custom component layouts, add the closest skin’s source to your project. The installed TypeScript and styles need a build step. A CDN-only page must add a build step before it can use this source. Follow [Customize skins](./customize-skins.md#style-skin-source) for installation and file locations.
245
291
 
246
- This is where v8’s `controlBar` config and `addChild` calls end up, and honestly it’s the better trade. Instead of `controlBar: { pictureInPictureToggle: false }`, you delete a line. Instead of subclassing a component to change its behavior, you edit the markup.
292
+ Keep the player and media imports. Replace the packaged skin import with the installed `skin.ts` module, then use the markup from `skin.html` around your media. The module registers the elements and loads the local stylesheet.
247
293
 
248
- Keep the player and skin registration imports. The skin import registers the container and UI elements that the copied layout uses; you do not render the skin element itself:
294
+ To remove the picture-in-picture button, remove its markup from the installed controls layout. Keep the other controls’ contents, classes, and styles.
249
295
 
250
- ```js
251
- import '@videojs/html/video/player';
252
- import '@videojs/html/video/skin';
253
- ```
296
+ Move `userActions.hotkeys` customizations into the local hotkey declarations. Move click and double-click customizations into the gesture declarations. The installed skin includes both; edit those files to preserve the interactions you need.
254
297
 
255
- Then write the layout yourself:
298
+ For a control bar built from scratch, follow [UI components](./ui-components.md). Individual controls supply behavior and accessible names. You supply their visible contents, layout, and CSS.
256
299
 
257
- ```html
258
- <video-player>
259
- <media-container>
260
- <video src="/video.mp4" playsinline></video>
261
-
262
- <media-poster><img src="/poster.jpg" alt="" decoding="async" /></media-poster>
263
-
264
- <media-controls>
265
- <media-controls-content>
266
- <media-play-button></media-play-button>
267
- <media-mute-button></media-mute-button>
268
- <media-volume-slider></media-volume-slider>
269
- <media-time type="current"></media-time>
270
- <media-time-slider>
271
- <media-slider-track>
272
- <media-slider-fill></media-slider-fill>
273
- <media-slider-buffer></media-slider-buffer>
274
- </media-slider-track>
275
- <media-slider-thumb></media-slider-thumb>
276
- </media-time-slider>
277
- <media-time type="duration"></media-time>
278
- <media-fullscreen-button></media-fullscreen-button>
279
- <!-- No media-pip-button, so no picture-in-picture control renders. -->
280
- </media-controls-content>
281
- </media-controls>
282
-
283
- <media-hotkey keys="Space" action="togglePaused"></media-hotkey>
284
- <media-hotkey keys="f" action="toggleFullscreen"></media-hotkey>
285
- <media-hotkey keys="ArrowRight" action="seekStep" value="5"></media-hotkey>
286
- <media-hotkey keys="ArrowLeft" action="seekStep" value="-5"></media-hotkey>
287
-
288
- <media-gesture type="tap" action="togglePaused" pointer="mouse" region="center"></media-gesture>
289
- </media-container>
290
- </video-player>
291
- ```
300
+ ## Plugins
292
301
 
293
- Those hotkey and gesture declarations are where `userActions` went. v8’s `userActions.hotkeys` was a function you wrote; here each shortcut is a component with a key and an action, and `userActions.click` and `doubleClick` become gestures with a region. The packaged skins already include a sensible set of both, which is why you don’t see them in the earlier examples.
302
+ v10 has no `videojs.registerPlugin`, `player.myPlugin()`, or plugin lifecycle. Audit each plugin and plan its replacement:
294
303
 
295
- When you add the skin source, you also take on its CSS. The packaged skins ship styles for everything above; a bare layout renders unstyled until you bring those along, so the added source includes the skin’s stylesheet next to its markup.
304
+ - **Formats and techs** (`videojs-contrib-*`, YouTube, Vimeo, Mux). Replace them with the matching [media component](#techs-become-media-components).
305
+ - **DRM** (`videojs-contrib-eme`, `keySystems`). Configure the media source’s license servers; see [DRM](#drm). Plugin callbacks and custom license requests require engine-specific migration.
306
+ - **UI additions** (extra buttons, overlays, custom control bars). Rebuild them in local skin source or with [your own component](./build-your-own-component.md).
307
+ - **Workarounds** for v8 limitations. Check whether the limitation still exists before porting the workaround.
308
+ - **Missing features** such as ads and playlists. Check [Known gaps](#known-gaps) before scheduling the migration. An ads-dependent player has no built-in replacement today.
296
309
 
297
- ## Plugins
310
+ ### DRM
298
311
 
299
- v10 has no plugin system. There’s no `videojs.registerPlugin`, no `player.myPlugin()`, and no plugin lifecycle.
312
+ For protected DASH, use Shaka video. The dash.js component has no `source.drm` input. For protected HLS, choose an engine that supports your key systems and browsers; see [DRM protected sources](./media-sources.md#drm-protected-sources).
300
313
 
301
- That’s a deliberate choice rather than a missing feature. v8 plugins existed largely because there was no other way in: to add a control, change a behavior, or support a format, you had to reach into player internals through the one door the plugin API provided. v10 gives you the front door instead: components you can add, skin source you can change, and media elements you can swap. Most of what plugins did is now ordinary composition.
314
+ Move license URLs from v8’s `keySystems` configuration to `source.drm`, keyed by EME key system ID. FairPlay also needs `serverCertificateUrl` unless its CDM is pre-provisioned. Custom `getLicense` callbacks and license authentication do not transfer automatically. Reimplement them with your chosen engine’s APIs, then verify playback before you switch.
302
315
 
303
- Audit your plugins and sort them into four piles:
316
+ The examples configure Widevine. Replace both URL placeholders and add every key system your supported browsers need.
304
317
 
305
- - **Formats and techs** (`videojs-contrib-*`, YouTube, Vimeo, Mux). Replace with the matching media component. See [Techs become media components](#techs-become-media-components).
306
- - **UI additions** (extra buttons, overlays, custom control bars). Rebuild them by editing the skin source in your project, or with [your own component](./build-your-own-component.md). This is usually less code than the plugin was.
307
- - **Workarounds** for v8 limitations. Check whether the limitation still exists before you port anything.
308
- - **Genuinely missing features** (ads, playlists). These need real work, and some have no home yet. Get them on the list early, because they’ll drive your timeline.
318
+ With a bundler, install `@videojs/shaka-video` and import `@videojs/html/media/shaka-video`. From the CDN, load `https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/media/shaka-video.js` in a `<script type="module">` tag. Then replace the media element inside your player’s skin with:
309
319
 
310
- That last pile is the honest risk in a v8 migration. If your player depends on an ads plugin, there’s no v10 answer today.
320
+ ```html
321
+ <shaka-video id="protected-media"></shaka-video>
322
+ ```
311
323
 
312
- ## Read player state
324
+ Run this module after the player markup:
325
+
326
+ ```js
327
+ await customElements.whenDefined('shaka-video');
328
+ document.querySelector('#protected-media').source = {
329
+ src: 'YOUR_DASH_MANIFEST_URL',
330
+ drm: {
331
+ 'com.widevine.alpha': { licenseUrl: 'YOUR_WIDEVINE_LICENSE_URL' },
332
+ },
333
+ };
334
+ ```
335
+
336
+ ## Read and control the player
313
337
 
314
338
  ### Events
315
339
 
316
- Your media element is a real media element, so every event you already listen for still fires on it. The listeners port directly; only where you attach them changes.
340
+ Your media element is a real media element, so every event you already listen for still fires on it. Keep your listeners, and attach them to the media element instead of the v8 player.
317
341
 
318
342
  ```js
319
343
  // Video.js 8
@@ -325,140 +349,181 @@ const video = document.querySelector('video');
325
349
  video.addEventListener('timeupdate', () => console.log(video.currentTime));
326
350
  ```
327
351
 
328
- One category doesn’t survive that translation, because those were never media events. v8’s UI events (`useractive`, `userinactive`, `playerresize`, `texttrackchange`) were the player’s own. Read the equivalent from player state instead.
352
+ Map v8’s player-specific events separately:
353
+
354
+ | Video.js 8 event | Video.js v10 |
355
+ | --- | --- |
356
+ | `useractive`, `userinactive` | Read `userActive` from player state; use `controlsVisible` for whether controls are shown. |
357
+ | `texttrackchange` | Read `textTrackList` from player state. |
358
+ | `playerresize` | Observe your skin or container with `ResizeObserver`. There is no player size state. |
329
359
 
330
360
  ### Player state
331
361
 
332
362
  Use [`PlayerController`](../reference/api/player-controller.md) inside a custom element. Give it a selector for the feature you care about and it keeps your element in sync as that state changes:
333
363
 
334
364
  ```js
335
- import { PlayerController, playerContext, ReactiveElement, selectTime } from '@videojs/html';
365
+ import { PlayerController, playerContext, selectTime, UIElement } from '@videojs/html';
336
366
 
337
- class MyElapsed extends ReactiveElement {
367
+ class MyElapsed extends UIElement {
338
368
  #time = new PlayerController(this, playerContext, selectTime);
369
+
370
+ update(changed) {
371
+ super.update(changed);
372
+ this.textContent = `Elapsed: ${(this.#time.value?.currentTime ?? 0).toFixed(1)} s`;
373
+ }
339
374
  }
375
+
376
+ customElements.define('my-elapsed', MyElapsed);
340
377
  ```
341
378
 
342
- ### Drive playback
379
+ Render it inside your existing `<video-player>` so it can read that player’s state:
343
380
 
344
- v8 used accessor methods for everything: `player.currentTime()` to read, `player.currentTime(10)` to write. v10 keeps that single-object habit: control everything through the player. Its store holds the state each feature tracks and an action for each of these calls — playback, seeking, volume, rate, fullscreen, captions, and quality alike.
381
+ ```html
382
+ <my-elapsed></my-elapsed>
383
+ ```
345
384
 
346
- You can also write to the media element directly. That is safe because player state derives from the native media events: set `media.currentTime` and the time slider follows. There is no wrapper to fall out of sync.
385
+ ### Drive playback
386
+
387
+ Replace v8 accessor methods with [player state](../reference/api/player-store.md) for reads. Use store actions or media properties for writes. Video.js updates player state from media events, so native calls such as `media.play()` and assignments such as `media.currentTime = 10` update the controls.
347
388
 
348
389
  | Video.js 8 | Video.js v10 |
349
390
  | --- | --- |
350
- | `player.play()`, `player.pause()` | the player’s `play`, `pause`, `togglePaused`, or `media.play()`, `media.pause()` |
391
+ | `player.play()`, `player.pause()` | the player’s `play` and `pause` actions, or `media.play()` and `media.pause()` |
351
392
  | `player.currentTime()` / `player.currentTime(10)` | `currentTime` in player state, the player’s `seek(10)`, or `media.currentTime` |
352
393
  | `player.duration()` | `duration` in player state, or `media.duration` |
353
- | `player.volume()`, `player.muted()` | the player’s `setVolume`, `toggleMuted`, or `media.volume`, `media.muted` |
354
- | `player.playbackRate()` | the player’s `setPlaybackRate`, or `media.playbackRate` |
394
+ | `player.volume()` / `player.volume(0.5)` | `volume` in player state / `media.volume = 0.5` |
395
+ | `player.muted()` / `player.muted(true)` | `muted` in player state / the player’s `setMuted(true)` |
396
+ | `player.playbackRate()` / `player.playbackRate(1.5)` | `playbackRate` in player state / the player’s `setPlaybackRate(1.5)` |
355
397
  | `player.src({ src, type })` | set `src` on the media or replace the media element (`<video>` tag, `<hlsjs-video>`, `<dash-video>`, etc) |
356
- | `player.requestFullscreen()`, `exitFullscreen()` | the player’s `requestFullscreen`, `exitFullscreen`, `toggleFullscreen` |
357
- | `player.textTracks()`, `addRemoteTextTrack()` | `<track>` elements, and `textTrackList` in player state, `textTracks` in media |
398
+ | `player.requestFullscreen()`, `exitFullscreen()` | the player’s `requestFullscreen`, `exitFullscreen` |
399
+ | `player.textTracks()`, `addRemoteTextTrack()` | `<track>` elements; read `textTrackList` from player state or `textTracks` from the media |
358
400
  | `player.audioTracks()` | `audioTrackList` in player state, `audioTracks` in media |
359
401
  | `player.error()` | `error` in player state |
360
402
  | `player.dispose()` | remove the element |
361
- | `player.tech()` | the media component’s public `engine` escape hatch, where one exists |
403
+ | `player.tech()` | the media element’s `engine` property, where one exists |
362
404
  | `videojs.getPlayer(id)` | hold a reference to the element |
363
405
 
364
- Everything the table describes as “the player’s” lives on the player element’s store. Hold a reference to `<video-player>` the way you held a v8 player instance, and call actions on its `store.state`:
406
+ Every item the table labels “the player’s” is a property of the player element’s `store`. Call these actions only after `player.store.target` is set, which means the media has attached. Fullscreen requests must run from a user interaction:
365
407
 
366
- ```js
367
- const player = document.querySelector('video-player');
408
+ ```html
409
+ <button id="toggle-fullscreen" type="button">Toggle fullscreen</button>
368
410
 
369
- player.store.state.toggleFullscreen();
411
+ <script type="module">
412
+ await customElements.whenDefined('video-player');
413
+ const player = document.querySelector('video-player');
414
+
415
+ document.querySelector('#toggle-fullscreen').addEventListener('click', () => {
416
+ if (!player.store.target) return;
417
+
418
+ if (player.store.isFullscreen) {
419
+ player.store.exitFullscreen();
420
+ } else {
421
+ player.store.requestFullscreen();
422
+ }
423
+ });
424
+ </script>
370
425
  ```
371
426
 
372
- Swapping sources is the change most likely to surprise you. There’s no `player.src()`; you set `src` on the media element, or replace the media element entirely, and the UI follows. Changing formats is changing tags.
427
+ `setVolume(value)` also unmutes when `value` is above zero. Use `media.volume = value` to preserve the current mute state. If the volume is `0`, `setMuted(false)` also sets it to `0.25`. To unmute and keep a zero volume, set `media.muted` directly.
428
+
429
+ To change sources, set `src` on the media component. If the new source needs a different playback engine, replace the media component. The UI follows the attached media.
373
430
 
374
431
  ## Languages
375
432
 
376
- v8 shipped one language and asked you to register more with `videojs.addLanguage`. v10 ships locale packs for around 50 languages, so most apps need no setup at all. See [Internationalize the player](./internationalization.md).
433
+ Video.js defaults to English and ships locale packs that load on demand. Select the locale and move `videojs.addLanguage` overrides into the i18n registry or provider. See [Internationalize the player](./internationalization.md).
377
434
 
378
- To override individual strings:
435
+ To migrate `language: 'ja'`, wrap your player in `<media-i18n lang="ja">`. The CDN preset registers this element. With a bundler, import `@videojs/html/i18n` to register it. If your v8 player used the nearest ancestor element’s `lang` attribute, omit `lang` from `<media-i18n>` to keep that behavior.
379
436
 
380
- ```js
381
- import { registerI18n } from '@videojs/html/i18n';
437
+ For a CDN page, register string overrides in a module script:
438
+
439
+ ```html
440
+ <script type="module">
441
+ import { registerI18n } from 'https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/i18n.js';
382
442
 
383
- registerI18n('en', {
384
- buttons: { play: 'Start video', pause: 'Pause video' },
385
- menu: { settings: 'Options' },
386
- });
443
+ registerI18n('en', {
444
+ buttons: { play: 'Start video', pause: 'Pause video' },
445
+ menu: { settings: 'Options' },
446
+ });
447
+ </script>
387
448
  ```
388
449
 
450
+ With a bundler, import `registerI18n` from `@videojs/html/i18n` instead. The CDN `i18n.js` module exports translation functions. The preset script registers the `<media-i18n>` element.
451
+
389
452
  See [Internationalize the player](./internationalization.md) for scoped overrides, custom locales, and runtime switching.
390
453
 
391
454
  ## Live and audio-only
392
455
 
393
- v8 turned live UI on with a `liveui` flag, and audio-only on with `audioOnlyMode`. In v10 these are different players with different skins, because live and audio-only have different state and a genuinely different UI. See [Presets](./presets.md).
456
+ Replace `liveui` or `audioOnlyMode` with the matching live or audio [preset](./presets.md). Check its feature list when your app needs controls beyond those shown by the preset.
457
+
458
+ Load the live preset and the hls.js media component:
394
459
 
395
460
  ```html
461
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/live-video.js"></script>
462
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-rc.5/media/hlsjs-video.js"></script>
463
+
396
464
  <live-video-player>
397
465
  <live-video-skin>
398
- <hls-video src="/live.m3u8"></hls-video>
466
+ <hlsjs-video src="/live.m3u8"></hlsjs-video>
399
467
  </live-video-skin>
400
468
  </live-video-player>
401
469
  ```
402
470
 
403
- For audio, use the audio player with the audio skin, or the live audio pair. There’s also a background video player for muted, chrome-free background video, which v8 had no answer for.
471
+ For audio, use the audio player and skin, or the live audio pair. For muted video without controls, use the background video preset.
404
472
 
405
473
  You get `targetLiveWindow` and `liveEdgeStart` in state, plus a live button that jumps to the live edge. The live preset does not include `streamType`; add the stream type feature to a custom player when you need it. v8’s `liveTracker` tuning has no equivalent ([#1730](https://github.com/videojs/v10/issues/1730)).
406
474
 
475
+ The live skins have no time slider. To preserve DVR scrubbing, add one to custom UI or installed skin source; follow [the DVR setup](./live-streams.md#dvr-let-users-scrub-back).
476
+
407
477
  The live composition is deliberately narrower than the video one. It leaves out playback rate, quality, and audio-track state, so those controls don’t appear in a live skin’s settings menu. If you need an omitted feature on a live player, build your own player from a feature list rather than taking the preset’s.
408
478
 
409
- That’s what [`createPlayer`](../reference/api/html-create-player.md) is for. Hand it a feature list and you get back the mixins to define your own player element.
479
+ That’s what [`createPlayer`](../reference/api/html-create-player.md) is for. Hand it a feature list and you get back a `PlayerElement` class to register as your own player element, plus a `PlayerController` bound to that player’s features.
410
480
 
411
- ## Moved utilities
481
+ ## Replace v8 utilities
412
482
 
413
- v8 put a handful of utilities on the `videojs` global for anyone building a custom component or plugin: `videojs.time.formatTime`, `videojs.dom`, `videojs.fn.throttle`, and a few others. There’s no global in v10, but the same job is covered by `@videojs/utils`.
483
+ v8 put a handful of utilities on the `videojs` global for anyone building a custom component or plugin: `videojs.time.formatTime`, `videojs.dom`, `videojs.fn.throttle`, and a few others. v10 has no global and no public replacements, so use a platform API, a short helper of your own, or a utility library you already depend on.
414
484
 
415
485
  | Video.js 8 | Video.js v10 |
416
486
  | --- | --- |
417
- | `videojs.time.formatTime(seconds, guide)` | `formatTime(seconds, guide)` from `@videojs/utils/time` |
418
- | a hand-rolled remaining-time or percent string | `formatTimeAsPhrase(seconds)` and `formatPercent(fraction)`, from `@videojs/utils/time` and `@videojs/utils/percent` |
419
- | `videojs.fn.throttle(fn, wait)` | `throttle(fn, ms)` from `@videojs/utils/function` |
420
- | `videojs.dom.isEl(value)` and its type-specific cousins | `isHTMLVideoElement`, `isHTMLMediaElement`, `isDocument`, and other narrowing checks from `@videojs/utils/dom` |
421
- | `videojs.obj.merge(a, b)` | `defaults(object, defaultValues)` from `@videojs/utils/object`, alongside `pick`, `omit`, `deepEqual`, and `shallowEqual` |
422
-
423
- These are worth reaching for before writing your own when extending the player. For example, `formatTime` is the exact digital-clock formatting the packaged skins use for their own time displays, so a custom one will match. The package is split into subpaths, so you can import only the module you need. Other than `time`, it includes `array`, `events`, `i18n`, `jwt`, `predicate`, `string`, and `types` subpaths for anything else a custom component or plugin replacement needs.
487
+ | `videojs.time.formatTime(seconds, guide)` | The [Time](../reference/components/time.md) component for an on-screen time display. For a string of your own, a few lines of arithmetic (below), or `Intl.DurationFormat` in browsers that support it |
488
+ | `videojs.fn.throttle(fn, wait)` | Your own helper, or `throttle` from a utility library such as lodash |
489
+ | `videojs.dom.isEl(value)` and its type-specific cousins | `instanceof` checks such as `value instanceof Element`, `value instanceof HTMLMediaElement`, or `value instanceof HTMLVideoElement` |
490
+ | `videojs.obj.merge(a, b)` | Object spread (`{ ...a, ...b }`) for a shallow merge, or `merge({}, a, b)` from a utility library such as lodash for a deep one. Pass the empty object first, because lodash’s `merge` mutates its first argument |
424
491
 
425
- Import the util function directly in a module `<script>` tag:
492
+ For example, a clock-style string such as `1:05` or `1:02:03`:
426
493
 
427
- ```html
428
- <script type="module">
429
- import { formatTime } from 'https://cdn.jsdelivr.net/npm/@videojs/utils@10.0.0-rc.4/dist/time.js';
430
- </script>
431
- ```
432
-
433
- Or with a bundler:
494
+ ```js
495
+ function formatTime(seconds) {
496
+ if (!Number.isFinite(seconds)) return '0:00';
434
497
 
435
- ```bash
436
- npm install @videojs/utils
437
- ```
498
+ const total = Math.floor(Math.abs(seconds));
499
+ const h = Math.floor(total / 3600);
500
+ const m = Math.floor(total / 60) % 60;
501
+ const s = String(total % 60).padStart(2, '0');
502
+ const time = h > 0 ? `${h}:${String(m).padStart(2, '0')}:${s}` : `${m}:${s}`;
438
503
 
439
- ```js
440
- import { formatTime } from '@videojs/utils/time';
504
+ return seconds < 0 ? `-${time}` : time;
505
+ }
441
506
  ```
442
507
 
443
508
  ## Known gaps
444
509
 
445
- Ordered roughly by how likely each is to block a v8 migration.
510
+ Check these limitations against your required features:
446
511
 
447
- - **No ads support.** v8’s IMA and ad-plugin ecosystem has no v10 equivalent. This is the most common hard blocker.
512
+ - **No ads support.** v8’s IMA and ad-plugin ecosystem has no v10 equivalent. If your player depends on ads, resolve that requirement before replacing it.
448
513
  - **No playlist support.** No `videojs-playlist` equivalent.
449
514
  - **No plugin system**, by design. Budget for rebuilding UI plugins as components. See [Plugins](#plugins).
450
515
  - Playback rates are a fixed set — `0.2`, `0.5`, `0.7`, `1`, `1.2`, `1.5`, `1.7`, `2` — so v8’s `playbackRates` has no equivalent yet ([#1404](https://github.com/videojs/v10/issues/1404)).
451
- - No text-track settings dialog. v8’s `textTrackSettings` let viewers restyle captions; v10 exposes only the positioning custom properties its skins define.
516
+ - No text-track settings dialog equivalent to v8’s `textTrackSettings`. You can still style browser-rendered cues with `::cue`; see [Show captions and subtitles](./captions.md).
452
517
  - No spatial navigation. v8’s `spatialNavigation` for TV and D-pad remotes has no equivalent.
453
- - Nothing persists between sessions: volume, captions language, speed, quality. That’s out of scope for GA ([#944](https://github.com/videojs/v10/issues/944)). Default subtitle language is tracked at [#1423](https://github.com/videojs/v10/issues/1423).
454
- - No VHS-equivalent tuning surface. Engine settings belong to the engine you chose, and the lightweight HLS component deliberately exposes few of them.
455
- - Chapters render in the time slider from a `<track kind="chapters">`, and its segments reflect `data-active`. There is no player-level active chapter value or chapter menu, so v8’s chapters menu has no equivalent ([#1873](https://github.com/videojs/v10/issues/1873)). Cue points aren’t implemented ([#1442](https://github.com/videojs/v10/issues/1442)).
456
- - The controls auto-hide delay isn’t configurable, so arbitrary `inactivityTimeout` values have no equivalent ([#1728](https://github.com/videojs/v10/issues/1728)). The common `inactivityTimeout: 0` case is covered by `visibility="always"` on the controls component in a custom layout or a skin layout in your project.
457
- - No full-window fullscreen fallback. v8 had one for browsers without the Fullscreen API; [support is around 96%](https://caniuse.com/fullscreen) now.
458
- - Multiple `<source>` elements with `size` metadata don’t become a quality menu. Use HLS or DASH for adaptive quality; picking renditions by resolution won’t be added ([#1415](https://github.com/videojs/v10/issues/1415)).
459
- - Two skins, and no runtime theme switch.
518
+ - Player preferences such as volume, captions language, speed, and quality are not persisted automatically ([#944](https://github.com/videojs/v10/issues/944)). For application-managed persistence, follow [Remember user preferences](./user-preferences.md).
519
+ - No VHS-equivalent tuning surface. Engine settings belong to the engine you chose, and the SPF HLS component deliberately exposes few of them.
520
+ - Chapters render in the time slider from a default `<track kind="chapters">`, and its segments reflect `data-active`. There is no player-level active chapter value or chapter menu, so v8’s chapters menu has no equivalent ([#1873](https://github.com/videojs/v10/issues/1873)). Cue points aren’t implemented ([#1442](https://github.com/videojs/v10/issues/1442)).
521
+ - The controls auto-hide delay isn’t configurable, so arbitrary `inactivityTimeout` values have no equivalent ([#1728](https://github.com/videojs/v10/issues/1728)). For `inactivityTimeout: 0`, set `visibility="always"` on the controls component in a custom layout or installed skin source.
522
+ - No full-window fullscreen fallback. Test fullscreen on your supported browsers; see [Browser support](./browser-support.md).
523
+ - Multiple `<source>` elements with `size` metadata don’t become a quality menu. Use HLS or DASH for adaptive quality.
524
+ - The Default, Neutral, and Compat skins are available. Runtime theme switching is not supported.
460
525
  - Native controls are not automatically removed when custom controls load ([#1160](https://github.com/videojs/v10/issues/1160)).
461
- - Smaller conveniences without homes yet: debug mode ([#1406](https://github.com/videojs/v10/issues/1406)) and autoplay with a muted fallback ([#1039](https://github.com/videojs/v10/issues/1039)).
526
+ - Debug mode has no equivalent yet ([#1406](https://github.com/videojs/v10/issues/1406)).
462
527
 
463
528
  ## See also
464
529